#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)
{
DDRD = (DDRD&0xF3)|0x0C;
PORTD &= ~BIT(ENABLE);
- timer_start_hz(0, 80000, 1);
+ timer_start_hz(2, 80000, 1);
}
void clear_packet(void)
PORTD &= ~BIT(ENABLE);
}
-uint8_t output_command(void)
+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)
{
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;
}
}
-TIMER_SET_CALLBACK(0, output_tick)
+TIMER_SET_CALLBACK(2, output_tick)