mbus-serial: Increase serial timeouts
We need to take USB to serial adapters into account for timeout calculation.
This commit is contained in:
parent
3d5b865ebe
commit
a572c0f742
@ -72,10 +72,13 @@ mbus_serial_connect(mbus_handle *handle)
|
|||||||
// between the end of a master send telegram and the beginning of the response telegram of the slave shall be
|
// between the end of a master send telegram and the beginning of the response telegram of the slave shall be
|
||||||
// between 11 bit times and (330 bit times + 50ms).
|
// between 11 bit times and (330 bit times + 50ms).
|
||||||
//
|
//
|
||||||
// For 2400Bd this means (330 + 11) / 2400 + 0.05 = 188.75 ms (added 11 bit periods to receive first byte).
|
// Nowadays the usage of USB to serial adapter is very common, which could
|
||||||
// I.e. timeout of 0.2s seems appropriate for 2400Bd.
|
// result in additional delay of 100 ms in worst case.
|
||||||
|
//
|
||||||
|
// For 2400Bd this means (330 + 11) / 2400 + 0.15 = 292 ms (added 11 bit periods to receive first byte).
|
||||||
|
// I.e. timeout of 0.3s seems appropriate for 2400Bd.
|
||||||
|
|
||||||
term->c_cc[VTIME] = (cc_t) 2; // Timeout in 1/10 sec
|
term->c_cc[VTIME] = (cc_t) 3; // Timeout in 1/10 sec
|
||||||
|
|
||||||
cfsetispeed(term, B2400);
|
cfsetispeed(term, B2400);
|
||||||
cfsetospeed(term, B2400);
|
cfsetospeed(term, B2400);
|
||||||
@ -113,42 +116,42 @@ mbus_serial_set_baudrate(mbus_handle *handle, long baudrate)
|
|||||||
{
|
{
|
||||||
case 300:
|
case 300:
|
||||||
speed = B300;
|
speed = B300;
|
||||||
serial_data->t.c_cc[VTIME] = (cc_t) 12; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 13; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 600:
|
case 600:
|
||||||
speed = B600;
|
speed = B600;
|
||||||
serial_data->t.c_cc[VTIME] = (cc_t) 6; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 8; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1200:
|
case 1200:
|
||||||
speed = B1200;
|
speed = B1200;
|
||||||
serial_data->t.c_cc[VTIME] = (cc_t) 4; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 5; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2400:
|
case 2400:
|
||||||
speed = B2400;
|
speed = B2400;
|
||||||
serial_data->t.c_cc[VTIME] = (cc_t) 2; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 3; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4800:
|
case 4800:
|
||||||
speed = B4800;
|
speed = B4800;
|
||||||
serial_data->t.c_cc[VTIME] = (cc_t) 2; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 3; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 9600:
|
case 9600:
|
||||||
speed = B9600;
|
speed = B9600;
|
||||||
serial_data->t.c_cc[VTIME] = (cc_t) 1; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 2; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 19200:
|
case 19200:
|
||||||
speed = B19200;
|
speed = B19200;
|
||||||
serial_data->t.c_cc[VTIME] = (cc_t) 1; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 2; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 38400:
|
case 38400:
|
||||||
speed = B38400;
|
speed = B38400;
|
||||||
serial_data->t.c_cc[VTIME] = (cc_t) 1; // Timeout in 1/10 sec
|
serial_data->t.c_cc[VTIME] = (cc_t) 2; // Timeout in 1/10 sec
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user