X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=arducontrol%2Foutput.c;h=38d1045476438cea33da205d0ecebf67ef9d8957;hb=9106943c465894bd1a8862b0a6d7ffdd89f8b643;hp=4b662960977e9b5762e237b96b8fe7be57ac4960;hpb=c4b21121fb82cc5b4f9acdc49846c3671a4584c2;p=model-railway-devices.git diff --git a/arducontrol/output.c b/arducontrol/output.c index 4b66296..38d1045 100644 --- a/arducontrol/output.c +++ b/arducontrol/output.c @@ -8,20 +8,20 @@ #define BIT(x) (1<<(x)) OutputPacket packet; -uint8_t out_bit; -uint8_t out_time; -uint8_t out_data; -uint8_t delay_time; +static uint8_t out_bit; +static uint8_t out_time; +static uint8_t out_data; +static uint8_t delay_time; -void output_init() +void output_init(void) { DDRD = (DDRD&0xF3)|0x0C; PORTD &= ~BIT(ENABLE); - timer_start_hz(0, 80000, 1); + timer_start_hz(2, 80000, 1); } -void clear_packet() +void clear_packet(void) { packet.ready = 0; packet.sending = 0; @@ -36,7 +36,12 @@ void output_set_power(uint8_t p) PORTD &= ~BIT(ENABLE); } -uint8_t output_command() +uint8_t output_is_power_on() +{ + return (PORTD&BIT(ENABLE))!=0; +} + +uint8_t output_command(const uint8_t *cmd_buf, uint8_t cmd_length) { if(cmd_buf[0]==POWER_ON || cmd_buf[0]==POWER_OFF) { @@ -45,13 +50,23 @@ uint8_t output_command() output_set_power(cmd_buf[0]==POWER_ON); } + else if(cmd_buf[0]==READ_POWER_STATE) + { + if(cmd_length!=1) + return LENGTH_ERROR; + + uint8_t reply[2]; + reply[0] = POWER_STATE; + reply[1] = output_is_power_on(); + interface_send(reply, 2); + } else return INVALID_COMMAND; return COMMAND_OK; } -static inline void output_tick() +static inline void output_tick(void) { if(delay_time && --delay_time) return; @@ -106,4 +121,4 @@ static inline void output_tick() } } -TIMER_SET_CALLBACK(0, output_tick) +TIMER_SET_CALLBACK(2, output_tick)