X-Git-Url: http://git.droids-corp.org/?p=protos%2Fxbee-avr.git;a=blobdiff_plain;f=main.c;h=c6f13e3715dee230db91032bf872529e68e1b394;hp=1557c693d867086e3f5e65d8a86d006a8d15a72f;hb=d590ebe19bfe60a544717606a0ff2b348cc32229;hpb=a4e51d8b2a5b13308d314aaf72e58672346dfb1f diff --git a/main.c b/main.c index 1557c69..c6f13e3 100644 --- a/main.c +++ b/main.c @@ -26,7 +26,7 @@ */ /* fuses: - * avrdude -p atmega1284p -P usb -c avrispmkii -U lfuse:w:0xff:m -U hfuse:w:0x99:m -U efuse:w:0xff:m + * avrdude -p atmega1284p -P usb -c avrispmkii -U lfuse:w:0xff:m -U hfuse:w:0x91:m -U efuse:w:0xff:m */ #include @@ -52,16 +52,8 @@ #include #include -#include "xbee_neighbor.h" -#include "xbee_atcmd.h" -#include "xbee_stats.h" -#include "xbee_buf.h" -#include "xbee_proto.h" -#include "xbee.h" -#include "cmdline.h" -#include "callout.h" -#include "rc_proto.h" -#include "spi_servo.h" +#include "eeprom_config.h" +#include "beep.h" #include "main.h" struct xbeeboard xbeeboard; @@ -245,6 +237,7 @@ int xbee_recv_data(struct xbee_recv_hdr *recvframe, unsigned len) return -1; switch (rch->type) { +#if 0 case RC_PROTO_TYPE_CHANNEL: { struct rc_proto_channel *rcc = (struct rc_proto_channel *) recvframe->data; @@ -256,7 +249,7 @@ int xbee_recv_data(struct xbee_recv_hdr *recvframe, unsigned len) val += 512; spi_servo_set(0, val); break; - } + } case RC_PROTO_TYPE_RANGE: { struct rc_proto_range *rcr = (struct rc_proto_range *) recvframe->data; @@ -271,6 +264,7 @@ int xbee_recv_data(struct xbee_recv_hdr *recvframe, unsigned len) break; } +#endif default: return -1; } @@ -279,7 +273,7 @@ int xbee_recv_data(struct xbee_recv_hdr *recvframe, unsigned len) } /* socat /dev/ttyUSB0,raw,echo=0,b115200 /dev/ttyACM1,raw,echo=0,b115200 */ -void xbee_rx(struct xbee_dev *dev, int channel, int type, +void xbeeapp_rx(struct xbee_dev *dev, int channel, int type, void *frame, unsigned len, void *opaque) { struct xbee_ctx *ctx = opaque; @@ -385,7 +379,7 @@ static int xbeeapp_send(struct xbee_ctx *ctx, int type, void *buf, unsigned len, /* register a channel */ channel = xbee_register_channel(xbee_dev, XBEE_CHANNEL_ANY, - xbee_rx, NULL); + xbeeapp_rx, NULL); if (channel < 0) { printf_P(PSTR("cannot send: no free channel\r\n")); return -1; @@ -403,8 +397,7 @@ static int xbeeapp_send(struct xbee_ctx *ctx, int type, void *buf, unsigned len, hexdump("xmit frame", buf, len); /* transmit the frame on this channel */ - ret = xbee_proto_xmit(xbee_dev, channel, type, buf, - len); + ret = xbee_tx(xbee_dev, channel, type, buf, len); if (ret < 0) { printf_P(PSTR("cannot send\r\n")); xbee_unregister_channel(xbee_dev, channel); @@ -562,6 +555,11 @@ void xbee_mainloop(void) /* from cmdline to xbee */ c = cmdline_dev_recv(NULL); if (c == 4) { /* CTRL-d */ + xbee_dev_send('A', NULL); + xbee_dev_send('T', NULL); + xbee_dev_send('C', NULL); + xbee_dev_send('N', NULL); + xbee_dev_send('\n', NULL); xbee_raw = 0; rdline_newline(&xbeeboard.rdl, xbeeboard.prompt); @@ -577,7 +575,7 @@ void xbee_mainloop(void) else { if (xbee_cmdline_input_enabled) cmdline_poll(); - xbee_proto_rx(xbee_dev); + xbee_rx(xbee_dev); } } } @@ -588,29 +586,37 @@ static uint16_t get_time_ms(void) return global_ms; } -static void increment_ms(void *dummy) +static void main_timer_interrupt(void) { - (void)dummy; - global_ms++; + static uint16_t cycles; + static uint8_t cpt; + + cpt++; + + /* interrupt every 2048 cycles */ + cycles += 2048; + if (cycles >= 12000) { + cycles -= 12000; + global_ms ++; + } + /* LED blink */ if (global_ms & 0x80) LED1_ON(); else LED1_OFF(); -} -static void main_timer_interrupt(void) -{ - static uint8_t cpt = 0; - cpt++; + if (cpt & beep_mask) + BUZZER_ON(); + else + BUZZER_OFF(); + + /* call scheduler every 682us with interrupt unlocked */ sei(); if ((cpt & 0x3) == 0) scheduler_interrupt(); } -/** Main program entry point. This routine contains the overall program flow, including initial - * setup of all components and the main program loop. - */ int main(void) { //struct callout t1; @@ -618,11 +624,7 @@ int main(void) int8_t err; struct xbee_dev dev; - DDRA = 0x07; /* LEDs */ - LED2_ON(); - wait_ms(1000); - LED3_ON(); - wait_ms(1000); + DDRA = 0x07 /* LEDs */ | 0x10 /* buzzer */; uart_init(); uart_register_rx_event(CMDLINE_UART, emergency); @@ -633,11 +635,9 @@ int main(void) timer_init(); timer0_register_OV_intr(main_timer_interrupt); - scheduler_add_periodical_event_priority(increment_ms, NULL, - 1000L / SCHEDULER_UNIT, - LED_PRIO); cmdline_init(); spi_servo_init(); + beep_init(); printf_P(PSTR("\r\n")); rdline_newline(&xbeeboard.rdl, xbeeboard.prompt); @@ -658,13 +658,13 @@ int main(void) /* register default channel with a callback */ if (xbee_register_channel(xbee_dev, XBEE_DEFAULT_CHANNEL, - xbee_rx, NULL) < 0) { + xbeeapp_rx, NULL) < 0) { fprintf(stderr, "cannot register default channel\n"); return -1; } - sei(); + eeprom_load_config(); xbee_mainloop(); return 0; }