#include <avr/io.h>
-#include "interface.h"
+#include "commands.h"
#include "output.h"
#include "timer.h"
+#define POLARITY PORTD2
+#define ENABLE PORTD3
+#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 &= ~0x08;
+ 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;
void output_set_power(uint8_t p)
{
if(p==POWER_ON)
- PORTD |= 0x08;
+ PORTD |= BIT(ENABLE);
else
- PORTD &= ~0x08;
+ PORTD &= ~BIT(ENABLE);
}
-uint8_t output_command()
+uint8_t output_command(const uint8_t *cmd_buf, uint8_t cmd_length)
{
if(cmd_buf[0]==POWER_ON || cmd_buf[0]==POWER_OFF)
{
return COMMAND_OK;
}
-static inline void output_tick()
+static inline void output_tick(void)
{
if(delay_time && --delay_time)
return;
++out_bit;
if(out_bit>=packet.length)
{
- PORTD &= ~0x04;
+ PORTD &= ~BIT(POLARITY);
if(packet.repeat_count>1)
{
if(packet.repeat_count<0xFF)
out_data >>= 1;
if(out_data&1)
- PORTD |= 0x04;
+ PORTD |= BIT(POLARITY);
else
- PORTD &= ~0x04;
+ PORTD &= ~BIT(POLARITY);
out_time = packet.bit_duration;
}
out_time = packet.bit_duration;
out_data = packet.data[0];
if(out_data&1)
- PORTD |= 0x04;
+ PORTD |= BIT(POLARITY);
else
- PORTD &= ~0x04;
+ PORTD &= ~BIT(POLARITY);
}
}
-TIMER_SET_CALLBACK(0, output_tick)
+TIMER_SET_CALLBACK(2, output_tick)