void AVRISP_Task(void) { /* Must be in the configured state for the AVRISP code to process data */ if (USB_DeviceState != DEVICE_STATE_Configured) return; V2Params_UpdateParamValues(); Endpoint_SelectEndpoint(AVRISP_DATA_OUT_EPADDR); /* Check to see if a V2 Protocol command has been received */ if (Endpoint_IsOUTReceived()) { LEDs_SetAllLEDs(LEDMASK_BUSY); /* Pass off processing of the V2 Protocol command to the V2 Protocol handler */ V2Protocol_ProcessCommand(); LEDs_SetAllLEDs(LEDMASK_USB_READY); } }
bool main_setup_in_received(void) { /* udd_g_ctrlreq.payload = main_buf_loopback; udd_g_ctrlreq.payload_size = min( udd_g_ctrlreq.req.wLength, sizeof(main_buf_loopback) ); */ static uint8_t respbuf[64]; unsigned int cnt; switch(udd_g_ctrlreq.req.bRequest){ case REQ_MEMREAD_CTRL: udd_g_ctrlreq.payload = ctrlmemread_buf; udd_g_ctrlreq.payload_size = ctrlmemread_size; ctrlmemread_size = 0; if (FPGA_lockstatus() == fpga_ctrlmem){ FPGA_setlock(fpga_unlocked); } return true; break; case REQ_FPGA_STATUS: respbuf[0] = FPGA_ISDONE(); respbuf[1] = 0; respbuf[2] = 0; respbuf[3] = 0; udd_g_ctrlreq.payload = respbuf; udd_g_ctrlreq.payload_size = 4; return true; break; case REQ_XMEGA_PROGRAM: return XPROGProtocol_Command(); break; case REQ_AVR_PROGRAM: return V2Protocol_ProcessCommand(); break; case REQ_USART0_CONFIG: return ctrl_usart(USART0, true); break; case REQ_USART0_DATA: for(cnt = 0; cnt < udd_g_ctrlreq.req.wLength; cnt++){ respbuf[cnt] = usart_driver_getchar(USART0); } udd_g_ctrlreq.payload = respbuf; udd_g_ctrlreq.payload_size = cnt; return true; break; case REQ_FW_VERSION: respbuf[0] = FW_VER_MAJOR; respbuf[1] = FW_VER_MINOR; respbuf[2] = FW_VER_DEBUG; udd_g_ctrlreq.payload = respbuf; udd_g_ctrlreq.payload_size = 3; return true; break; case REQ_SCARD_CONFIG: /* Smartcard Configuration Information */ return ctrl_scardconfig_req(); break; case REQ_SCARD_DATA: /* Read data from receive buffer */ return ctrl_scarddata_req(); break; case REQ_SCARD_AUX: /* Auxiliary mode, used for special interfaces */ return ctrl_scardaux_req(); break; default: return false; } return false; }
void ctrl_avr_program_void(void) { V2Protocol_ProcessCommand(); }