#include #include #include "requests.h" #include "config.h" #include "hiddata.h" #include "bootloader.h" #include "gcn64_protocol.h" #include "version.h" #include "main.h" // dataHidReport is 40 bytes. #define CMDBUF_SIZE 41 #define STATE_IDLE 0 #define STATE_NEW_COMMAND 1 // New command in buffer #define STATE_COMMAND_DONE 2 // Result in buffer //#define DEBUG extern char g_polling_suspended; static volatile uint8_t state = STATE_IDLE; static unsigned char cmdbuf[CMDBUF_SIZE]; static volatile unsigned char cmdbuf_len = 0; /*** Get/Set report called from interrupt context! */ uint16_t hiddata_get_report(struct usb_request *rq, const uint8_t **dat) { // printf("Get data\n"); if (state == STATE_COMMAND_DONE) { *dat = cmdbuf; state = STATE_IDLE; #ifdef DEBUG printf_P(PSTR("hiddata idle, sent %d bytes\r\n"), cmdbuf_len); #endif return cmdbuf_len; } return 0; } /*** Get/Set report called from interrupt context! */ uint8_t hiddata_set_report(const struct usb_request *rq, const uint8_t *dat, uint16_t len) { #ifdef DEBUG int i; printf_P(PSTR("Set data %d\n"), len); for (i=0; i