1 #include <arch/antares.h>
5 #include <avr/interrupt.h>
6 #include <util/delay.h>
7 #include <generated/usbconfig.h>
8 #include <arch/vusb/usbportability.h>
9 #include <arch/vusb/usbdrv.h>
18 struct usb_interrupt_packet {
22 #define usbdev_is_be(pck) (pck & (1<<0))
24 struct usb_info_packet {
31 int put_object(
unsigned char *dest,
int dlen,
const void *name,
const void* afmt,
const void* rfmt)
36 tocopy = min_t(
int, dlen, strlen(name) + 1);
37 memcpy(dest, name, tocopy);
41 tocopy = min_t(
int, dlen, strlen(afmt) + 1);
42 memcpy(dest, afmt, tocopy);
46 tocopy = min_t(
int, dlen, strlen(rfmt) + 1);
47 memcpy(dest, rfmt, tocopy);
53 unsigned char iobuf[512];
54 static uint8_t num_evt_pending=0;
56 uchar usbFunctionSetup(uchar data[8])
58 usbRequest_t *rq = (
void *)data;
62 case RQ_GET_DEV_INFO: {
63 struct usb_info_packet *p = (
struct usb_info_packet *) iobuf;
73 if (rq->wIndex.word == 0)
74 return put_object(iobuf+1, 512,
"turnTheLedOn",
"1",
"1");
75 else if (rq->wIndex.word == 1)
76 return put_object(iobuf+1, 512,
"turnTheLedOff",
"",
"1");
79 return put_object(iobuf+1, 512,
"buttonPressed",
"",
"1");
87 uint8_t *ret = &iobuf[2];
108 uchar usbFunctionWrite(uchar *data, uchar len)
113 inline void usbReconnect()
120 ANTARES_INIT_LOW(io_init)
127 ANTARES_INIT_HIGH(uinit)
136 if(usbInterruptIsReady()){
137 usbSetInterrupt(&num_evt_pending, 1);
void __attribute__((noreturn)) aura_panic(struct aura_node *node)