X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=arducontrol%2Fs88.c;h=142455a13ae551e1cb724e1a6b976e231d35e1ba;hb=49c7ae4a26f8dd7d09872b6b5e4c107ef33b4560;hp=1ce574059fd848082d078e34033efeaa19abdd4d;hpb=3bbca0dcce53ff9e2cdaa3d39ae18afcbf627f9d;p=model-railway-devices.git diff --git a/arducontrol/s88.c b/arducontrol/s88.c index 1ce5740..142455a 100644 --- a/arducontrol/s88.c +++ b/arducontrol/s88.c @@ -11,12 +11,12 @@ #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) { @@ -28,14 +28,17 @@ 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