diff options
Diffstat (limited to 'software/hhd70dongle/hhd70dongle.c')
-rw-r--r-- | software/hhd70dongle/hhd70dongle.c | 54 |
1 files changed, 36 insertions, 18 deletions
diff --git a/software/hhd70dongle/hhd70dongle.c b/software/hhd70dongle/hhd70dongle.c index 3f7f344..4e5560d 100644 --- a/software/hhd70dongle/hhd70dongle.c +++ b/software/hhd70dongle/hhd70dongle.c @@ -30,8 +30,11 @@ * */ #include <avr/io.h> +#include <avr/wdt.h> #include <util/delay.h> //#include <avr/stdio.h> +#include <avr/interrupt.h> +//#include <avr/power.h> #include "led.h" #include "util.h" @@ -109,47 +112,60 @@ void EVENT_USB_Device_ControlRequest(void) int main(void) { - CPU_PRESCALE(0); + MCUSR &= ~(1 << WDRF); + wdt_disable(); // FIXME: disable WatchDog for now, but use it later... + CPU_PRESCALE(0); //cpu_init + led_init(); - hhd70_init(); USB_Init(); + hhd70_init(); DDRB &= ~(1<<DDB5); // set PB5/ADC12 to INPUT (c1101 temp sensor) + sei(); //set enable global interrupt - CDC_Device_SendString(&VirtualSerial_CDC_Interface,"hhd70dongle ready"); + CDC_Device_SendString(&VirtualSerial_CDC_Interface,"hhd70dongle ready\r\n"); _delay_ms(500); c1101_init(); hhd70_palna_rxmode(); for(;;) { + int16_t num_bytes_received = CDC_Device_BytesReceived(&VirtualSerial_CDC_Interface); + while(num_bytes_received > 0) + { + int16_t recv_byte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); + num_bytes_received--; + if (recv_byte >= 0 && (char) recv_byte == 'r') + { + CDC_Device_SendString(&VirtualSerial_CDC_Interface, "resetting\r\n"); + reset(); + } + } + CDC_Device_USBTask(&VirtualSerial_CDC_Interface); - USB_USBTask(); - + USB_USBTask(); + c1101_spi_strobe_command(SPIC1101_ADDR_SRX); // enter RX - Mode _delay_ms(1000); - /* - usb_rawhid_recv(read_buffer,20); - if (read_buffer[0] == 'r') - reset(); - */ + if (hhd70_rx_data_available() == 1) { led_on(); - CDC_Device_SendString(&VirtualSerial_CDC_Interface,"RX: GDO2 pin HIGH"); + CDC_Device_SendString(&VirtualSerial_CDC_Interface,"RX: GDO2 pin HIGH\r\n"); CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 rx bytes:"); debug_sprint_int16hex(write_buffer, c1101_spi_read_register(SPIC1101_ADDR_RXBYTES)); CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer); + CDC_Device_SendString(&VirtualSerial_CDC_Interface,"\r\n"); c1101_recieveData(); led_off(); } - CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 rssi:"); + CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 rssi:\r\n"); debug_sprint_int16hex(write_buffer, c1101_spi_read_register(SPIC1101_ADDR_RSSI)); CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer); - CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 tx bytes:"); + CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 tx bytes:\r\n"); debug_sprint_int16hex(write_buffer, c1101_spi_read_register(SPIC1101_ADDR_TXBYTES)); CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer); - CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 rx bytes:"); + CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 rx bytes:\r\n"); debug_sprint_int16hex(write_buffer, c1101_spi_read_register(SPIC1101_ADDR_RXBYTES)); CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer); c1101_spi_dump_registers_to_usb(); @@ -161,22 +177,24 @@ int main(void) write_buffer[5]=':'; adc_on(); _delay_ms(250); - CDC_Device_SendString(&VirtualSerial_CDC_Interface,"temp c1101:"); + CDC_Device_SendString(&VirtualSerial_CDC_Interface,"temp c1101: "); debug_sprint_int16hex(write_buffer+6, c1101_measureTemp()); CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer+6); + CDC_Device_SendString(&VirtualSerial_CDC_Interface,"\r\n"); _delay_ms(250); - CDC_Device_SendString(&VirtualSerial_CDC_Interface,"temp atmega:"); + CDC_Device_SendString(&VirtualSerial_CDC_Interface,"temp atmega: "); debug_sprint_int16hex(write_buffer+10, adc_read(ADCMUX_ADC12)); CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer+10); + CDC_Device_SendString(&VirtualSerial_CDC_Interface,"\r\n"); adc_off(); _delay_ms(250); led_on(); - CDC_Device_SendString(&VirtualSerial_CDC_Interface,"TX Data: String"); + CDC_Device_SendString(&VirtualSerial_CDC_Interface,"TX Data: String\r\n"); c1101_transmitData("OE6EOF test mur.sat GFSK r:9k6 fdev:3mhz 1234567890123456789012345678901234567890 End of Test",93); led_off(); _delay_ms(100); led_on(); - CDC_Device_SendString(&VirtualSerial_CDC_Interface,"TX Data: Temps"); + CDC_Device_SendString(&VirtualSerial_CDC_Interface,"TX Data: Temps\r\n"); c1101_transmitData((char*) write_buffer,14); led_off(); } |