return MB_OK;
}
-void modbus_poll()
+uint8_t modbus_poll()
{
bufptr_t packet_len;
uint16_t crc;
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
transmitting = 0;
buf_len = 0;
}
- return;
+ return 1;
}
packet_len -= 2; // strip the CRC
tx_ptr = 0;
ctl_pin_on();
UCSR0B |= _BV(UDRIE0);
+
+ return 1;
}
ISR(USART_RX_vect)