summaryrefslogtreecommitdiff
path: root/software/hhd70dongle/hhd70dongle.c
diff options
context:
space:
mode:
Diffstat (limited to 'software/hhd70dongle/hhd70dongle.c')
-rw-r--r--software/hhd70dongle/hhd70dongle.c101
1 files changed, 79 insertions, 22 deletions
diff --git a/software/hhd70dongle/hhd70dongle.c b/software/hhd70dongle/hhd70dongle.c
index fd92527..3f7f344 100644
--- a/software/hhd70dongle/hhd70dongle.c
+++ b/software/hhd70dongle/hhd70dongle.c
@@ -37,11 +37,11 @@
#include "util.h"
#include "hhd70.h"
#include "c1101lib.h"
-#include "usb_rawhid.h"
+
#define CPU_PRESCALE(n) do { CLKPR = 0x80; CLKPR = (n); } while(0)
-uint8_t read_buffer[64]; // buffer for reading usb signals
-uint8_t write_buffer[64]; // buffer for writing usb signals
+char read_buffer[64]; // buffer for reading usb signals
+char write_buffer[64]; // buffer for writing usb signals
//TODOs:
//* make adc work ?
@@ -53,48 +53,105 @@ uint8_t write_buffer[64]; // buffer for writing usb signals
// * safely save state in eeprom (2 memory regions, only use the one with the "written successfully bit" which is written last)
// * what if c1101 resets spuriously and clears it's settings ? -> check peridically ?
+
+/* ###### ######
+ LUFA Library
+ Copyright (C) Dean Camera, 2012.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+*/
+//#include <LUFA/Drivers/Peripheral/SPI.h>
+//#include <LUFA/Drivers/Misc/RingBuffer.h>
+#include <LUFA/Drivers/USB/USB.h>
+#include "lufa-descriptor-usbserial.h"
+
+ /* Global I/O Buffers: */
+//static RingBuffer_t SPItoUSB_Buffer;
+//static uint8_t SPItoUSB_Buffer_Data[8];
+
+/** LUFA CDC Class driver interface configuration and state information. This structure is
+ * passed to all CDC Class driver functions, so that multiple instances of the same class
+ * within a device can be differentiated from one another.
+ */
+USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
+ {
+ .Config =
+ {
+ .ControlInterfaceNumber = 0,
+
+ .DataINEndpointNumber = CDC_TX_EPNUM,
+ .DataINEndpointSize = CDC_TXRX_EPSIZE,
+ .DataINEndpointDoubleBank = false,
+
+ .DataOUTEndpointNumber = CDC_RX_EPNUM,
+ .DataOUTEndpointSize = CDC_TXRX_EPSIZE,
+ .DataOUTEndpointDoubleBank = false,
+
+ .NotificationEndpointNumber = CDC_NOTIFICATION_EPNUM,
+ .NotificationEndpointSize = CDC_NOTIFICATION_EPSIZE,
+ .NotificationEndpointDoubleBank = false,
+ },
+ };
+
+void EVENT_USB_Device_ConfigurationChanged(void)
+{
+ CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface);
+}
+
+void EVENT_USB_Device_ControlRequest(void)
+{
+ CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface);
+}
+/* ###### end LUFA CDC-ACM specific definitions ###### */
+
+
+
int main(void)
{
CPU_PRESCALE(0);
led_init();
hhd70_init();
- usb_init();
+ USB_Init();
DDRB &= ~(1<<DDB5); // set PB5/ADC12 to INPUT (c1101 temp sensor)
- while (!usb_configured()) /* wait */ ;
- usb_rawhid_send((uint8_t*)"hhd70dongle ready",17);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"hhd70dongle ready");
_delay_ms(500);
c1101_init();
hhd70_palna_rxmode();
for(;;)
{
+ CDC_Device_USBTask(&VirtualSerial_CDC_Interface);
+ 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();
- usb_rawhid_send((uint8_t*)"RX: GDO2 pin HIGH",100);
- usb_rawhid_send((uint8_t*)"c1101 rx bytes:",255);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"RX: GDO2 pin HIGH");
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 rx bytes:");
debug_sprint_int16hex(write_buffer, c1101_spi_read_register(SPIC1101_ADDR_RXBYTES));
- usb_rawhid_send(write_buffer,255);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer);
c1101_recieveData();
led_off();
}
- usb_rawhid_send((uint8_t*)"c1101 rssi:",255);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 rssi:");
debug_sprint_int16hex(write_buffer, c1101_spi_read_register(SPIC1101_ADDR_RSSI));
- usb_rawhid_send(write_buffer,255);
- usb_rawhid_send((uint8_t*)"c1101 tx bytes:",255);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 tx bytes:");
debug_sprint_int16hex(write_buffer, c1101_spi_read_register(SPIC1101_ADDR_TXBYTES));
- usb_rawhid_send(write_buffer,255);
- usb_rawhid_send((uint8_t*)"c1101 rx bytes:",255);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"c1101 rx bytes:");
debug_sprint_int16hex(write_buffer, c1101_spi_read_register(SPIC1101_ADDR_RXBYTES));
- usb_rawhid_send(write_buffer,255);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer);
c1101_spi_dump_registers_to_usb();
write_buffer[0]='T';
write_buffer[1]='e';
@@ -104,22 +161,22 @@ int main(void)
write_buffer[5]=':';
adc_on();
_delay_ms(250);
- usb_rawhid_send((uint8_t*)"temp c1101:",255);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"temp c1101:");
debug_sprint_int16hex(write_buffer+6, c1101_measureTemp());
- usb_rawhid_send(write_buffer+6,255);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer+6);
_delay_ms(250);
- usb_rawhid_send((uint8_t*)"temp atmega:",255);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"temp atmega:");
debug_sprint_int16hex(write_buffer+10, adc_read(ADCMUX_ADC12));
- usb_rawhid_send(write_buffer+10,255);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,write_buffer+10);
adc_off();
_delay_ms(250);
led_on();
- usb_rawhid_send((uint8_t*)"TX Data: String",255);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"TX Data: String");
c1101_transmitData("OE6EOF test mur.sat GFSK r:9k6 fdev:3mhz 1234567890123456789012345678901234567890 End of Test",93);
led_off();
_delay_ms(100);
led_on();
- usb_rawhid_send((uint8_t*)"TX Data: Temps",255);
+ CDC_Device_SendString(&VirtualSerial_CDC_Interface,"TX Data: Temps");
c1101_transmitData((char*) write_buffer,14);
led_off();
}