X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=firmware%2Fmodbus.c;fp=firmware%2Fmodbus.c;h=00a9370a05bdaa872ce14b38f95de35d194d275b;hb=6146a1caafd449cae4ce08134d763137424300c6;hp=4e8456354e1a5385d630eb7f4cd59cff0f6606a3;hpb=0c9ed6a110149013fd3690338fac0b33f760e0ed;p=openparking.git diff --git a/firmware/modbus.c b/firmware/modbus.c index 4e84563..00a9370 100644 --- a/firmware/modbus.c +++ b/firmware/modbus.c @@ -159,7 +159,7 @@ static mb_exception write_single_reg(uint16_t reg, uint16_t val) return MB_OK; } -void modbus_poll() +uint8_t modbus_poll() { bufptr_t packet_len; uint16_t crc; @@ -167,22 +167,22 @@ void modbus_poll() ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { if (transmitting) - return; + return 0; if (buf_len == 0) // nothing received yet - return; + return 0; if (get_clock() - last_rx < REQ_TIMEOUT) // still receiving - return; + return 0; if (buf_len < 4) { // too short buf_len = 0; - return; + return 0; } if (buffer[0] != mb_unit_id) { // not for myself buf_len = 0; - return; + return 0; } transmitting = 1; // disable further reads @@ -197,7 +197,7 @@ void modbus_poll() transmitting = 0; buf_len = 0; } - return; + return 1; } packet_len -= 2; // strip the CRC @@ -234,6 +234,8 @@ void modbus_poll() tx_ptr = 0; ctl_pin_on(); UCSR0B |= _BV(UDRIE0); + + return 1; } ISR(USART_RX_vect)