X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=arducontrol%2Foutput.c;h=508b411953f2ec7230b0c66568d87a93af0e6da3;hb=188391bc43da8330aa4f9642bb1a23ef180d66e2;hp=e017560c5cf6e12930f3b65003b4eae1823868b0;hpb=285513c401954c5ad012ae4ae5411f72b7f73ffc;p=model-railway-devices.git diff --git a/arducontrol/output.c b/arducontrol/output.c index e017560..508b411 100644 --- a/arducontrol/output.c +++ b/arducontrol/output.c @@ -17,6 +17,7 @@ enum State OutputPacket packets[4]; uint8_t chain_length; uint8_t current_packet; +volatile uint8_t trigger_value; volatile uint8_t packet_state = IDLE; static uint8_t out_bit; static uint8_t out_time; @@ -35,13 +36,15 @@ OutputPacket *output_create_packet(void) { while(packet_state!=IDLE) ; chain_length = 1; + packets[0].trigger_position = 0xFF; return &packets[0]; } OutputPacket *output_create_chained_packet(void) { - ++chain_length; - return &packets[chain_length-1]; + uint8_t i = chain_length++; + packets[i].trigger_position = 0xFF; + return &packets[i]; } void output_send_packet(void) @@ -50,9 +53,15 @@ void output_send_packet(void) return; current_packet = 0; + trigger_value = 0; packet_state = READY; } +uint8_t output_get_trigger(void) +{ + return trigger_value; +} + void output_set_power(uint8_t p) { if(p==POWER_ON) @@ -129,6 +138,9 @@ static inline void output_tick(void) else PORTD &= ~BIT(POLARITY); + if(out_bit==packet->trigger_position) + trigger_value = packet->trigger_value; + out_time = packet->bit_duration; }