mirror of
https://github.com/tio/tio.git
synced 2026-05-01 23:07:58 +02:00
Rework rs485_parse_config()
Introduce proper sscanf() checks.
This commit is contained in:
parent
c4878a90d7
commit
9744fcafcf
1 changed files with 51 additions and 44 deletions
95
src/rs485.c
95
src/rs485.c
|
|
@ -57,54 +57,61 @@ void rs485_parse_config(const char *arg)
|
||||||
{
|
{
|
||||||
char keyname[31];
|
char keyname[31];
|
||||||
unsigned int value;
|
unsigned int value;
|
||||||
|
int match_count;
|
||||||
|
|
||||||
if (sscanf(token, "%30[^=]=%d", keyname, &value) != 2)
|
match_count = sscanf(token, "%30[^=]=%d", keyname, &value);
|
||||||
|
|
||||||
|
if (match_count == 2)
|
||||||
|
{
|
||||||
|
if (!strcmp(keyname, "RTS_ON_SEND"))
|
||||||
|
{
|
||||||
|
if (value)
|
||||||
|
{
|
||||||
|
/* Set logical level for RTS pin equal to 1 when sending */
|
||||||
|
option.rs485_config_flags |= SER_RS485_RTS_ON_SEND;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Set logical level for RTS pin equal to 0 when sending */
|
||||||
|
option.rs485_config_flags &= ~(SER_RS485_RTS_ON_SEND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!strcmp(keyname, "RTS_AFTER_SEND"))
|
||||||
|
{
|
||||||
|
if (value)
|
||||||
|
{
|
||||||
|
/* Set logical level for RTS pin equal to 1 after sending */
|
||||||
|
option.rs485_config_flags |= SER_RS485_RTS_AFTER_SEND;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Set logical level for RTS pin equal to 0 after sending */
|
||||||
|
option.rs485_config_flags &= ~(SER_RS485_RTS_AFTER_SEND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!strcmp(keyname, "RTS_DELAY_BEFORE_SEND"))
|
||||||
|
{
|
||||||
|
/* Set RTS delay before send */
|
||||||
|
option.rs485_delay_rts_before_send = value;
|
||||||
|
}
|
||||||
|
else if (!strcmp(keyname, "RTS_DELAY_AFTER_SEND"))
|
||||||
|
{
|
||||||
|
/* Set RTS delay after send */
|
||||||
|
option.rs485_delay_rts_after_send = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (match_count == 1)
|
||||||
|
{
|
||||||
|
if (!strcmp(keyname, "RX_DURING_TX"))
|
||||||
|
{
|
||||||
|
/* Receive data even while sending data */
|
||||||
|
option.rs485_config_flags |= SER_RS485_RX_DURING_TX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
token_found = false;
|
token_found = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(keyname, "RTS_ON_SEND"))
|
|
||||||
{
|
|
||||||
if (value)
|
|
||||||
{
|
|
||||||
|
|
||||||
/* Set logical level for RTS pin equal to 1 when sending */
|
|
||||||
option.rs485_config_flags |= SER_RS485_RTS_ON_SEND;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Set logical level for RTS pin equal to 0 when sending */
|
|
||||||
option.rs485_config_flags &= ~(SER_RS485_RTS_ON_SEND);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (!strcmp(keyname, "RTS_AFTER_SEND"))
|
|
||||||
{
|
|
||||||
if (value)
|
|
||||||
{
|
|
||||||
/* Set logical level for RTS pin equal to 1 after sending */
|
|
||||||
option.rs485_config_flags |= SER_RS485_RTS_AFTER_SEND;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Set logical level for RTS pin equal to 0 after sending */
|
|
||||||
option.rs485_config_flags &= ~(SER_RS485_RTS_AFTER_SEND);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (!strcmp(keyname, "RTS_DELAY_BEFORE_SEND"))
|
|
||||||
{
|
|
||||||
/* Set RTS delay before send */
|
|
||||||
option.rs485_delay_rts_before_send = value;
|
|
||||||
}
|
|
||||||
else if (!strcmp(keyname, "RTS_DELAY_AFTER_SEND"))
|
|
||||||
{
|
|
||||||
/* Set RTS delay after send */
|
|
||||||
option.rs485_delay_rts_after_send = value;
|
|
||||||
}
|
|
||||||
else if (!strcmp(keyname, "RX_DURING_TX"))
|
|
||||||
{
|
|
||||||
/* Receive data even while sending data */
|
|
||||||
option.rs485_config_flags |= SER_RS485_RX_DURING_TX;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue