#define DATA PIN7
#define BIT(x) (1<<(x))
-volatile uint8_t s88_read_count = 0;
-uint8_t s88_read_bit = 0;
-volatile uint8_t s88_read_phase = 0;
-uint8_t s88_data = 0;
-RINGBUFFER(s88_buffer, 8);
-uint8_t s88_out_index = 0;
+static volatile uint8_t s88_read_count = 0;
+static uint8_t s88_read_bit = 0;
+static volatile uint8_t s88_read_phase = 0;
+static uint8_t s88_data = 0;
+static RINGBUFFER(s88_buffer, 8);
+static uint8_t s88_out_index = 0;
void s88_init(void)
{
void s88_check(void)
{
- // Only send one packet per check to avoid blocking
- if(ringbuffer_fill(s88_buffer)>0)
+ uint8_t count = ringbuffer_fill(s88_buffer);
+ if(count>=4 || (count>0 && !s88_read_count))
{
- uint8_t reply[3];
+ uint8_t reply[10];
+
reply[0] = S88_DATA;
- reply[1] = s88_out_index++;
- reply[2] = ringbuffer_pop(s88_buffer);
- interface_send(reply, sizeof(reply));
+ reply[1] = s88_out_index;
+ for(uint8_t i=0; i<count; ++i)
+ reply[2+i] = ringbuffer_pop(s88_buffer);
+ interface_send(reply, 2+count);
+ s88_out_index += count;
}
}