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>
19 URPC_METHOD(getButton,
33 struct usb_interrupt_packet {
37 #define usbdev_is_be(pck) (pck & (1<<0))
39 struct usb_info_packet {
46 int put_object(
unsigned char *dest,
int dlen,
const void *name,
const void* afmt,
const void* rfmt)
51 tocopy = min_t(
int, dlen, strlen(name) + 1);
52 memcpy(dest, name, tocopy);
56 tocopy = min_t(
int, dlen, strlen(afmt) + 1);
57 memcpy(dest, afmt, tocopy);
61 tocopy = min_t(
int, dlen, strlen(rfmt) + 1);
62 memcpy(dest, rfmt, tocopy);
68 unsigned char iobuf[512];
71 static uint8_t num_evt_pending=0;
73 uchar usbFunctionSetup(uchar data[8])
75 usbRequest_t *rq = (
void *)data;
76 struct urpc_object **reg;
77 int ocount = urpc_get_registry(®);
82 case RQ_GET_DEV_INFO: {
83 struct usb_info_packet *p = (
struct usb_info_packet *) iobuf;
93 struct urpc_object *o;
94 if (rq->wIndex.word >= ocount)
96 o = reg[rq->wIndex.word];
98 iobuf[0]=urpc_object_is_method(o) ? 1 : 0;
99 return put_object(iobuf+1, 512, o->name, o->arg, o->ret);
103 if (!num_evt_pending)
105 uint16_t *
id = iobuf;
106 uint8_t *ret = &iobuf[2];
115 rq_len = rq->wLength;
123 uchar usbFunctionWrite(uchar *data, uchar len)
132 inline void usbReconnect()
139 ANTARES_INIT_LOW(io_init)
146 ANTARES_INIT_HIGH(uinit)
155 if(usbInterruptIsReady()){
156 usbSetInterrupt(&num_evt_pending, 1);
void __attribute__((noreturn)) aura_panic(struct aura_node *node)