/** Master V2 Protocol packet handler, for received V2 Protocol packets from a connected host. * This routine decodes the issued command and passes off the handling of the command to the * appropriate function. */ void V2Protocol_ProcessCommand(void) { uint8_t V2Command = Endpoint_Read_Byte(); /* Start the timeout management timer */ TimeoutTicksRemaining = COMMAND_TIMEOUT_TICKS; TCCR0B = ((1 << CS02) | (1 << CS00)); switch (V2Command) { case CMD_SIGN_ON: V2Protocol_SignOn(); break; case CMD_SET_PARAMETER: case CMD_GET_PARAMETER: V2Protocol_GetSetParam(V2Command); break; case CMD_LOAD_ADDRESS: V2Protocol_LoadAddress(); break; case CMD_RESET_PROTECTION: V2Protocol_ResetProtection(); break; #if defined(ENABLE_ISP_PROTOCOL) case CMD_ENTER_PROGMODE_ISP: ISPProtocol_EnterISPMode(); break; case CMD_LEAVE_PROGMODE_ISP: ISPProtocol_LeaveISPMode(); break; case CMD_PROGRAM_FLASH_ISP: case CMD_PROGRAM_EEPROM_ISP: ISPProtocol_ProgramMemory(V2Command); break; case CMD_READ_FLASH_ISP: case CMD_READ_EEPROM_ISP: ISPProtocol_ReadMemory(V2Command); break; case CMD_CHIP_ERASE_ISP: ISPProtocol_ChipErase(); break; case CMD_READ_FUSE_ISP: case CMD_READ_LOCK_ISP: case CMD_READ_SIGNATURE_ISP: case CMD_READ_OSCCAL_ISP: ISPProtocol_ReadFuseLockSigOSCCAL(V2Command); break; case CMD_PROGRAM_FUSE_ISP: case CMD_PROGRAM_LOCK_ISP: ISPProtocol_WriteFuseLock(V2Command); break; case CMD_SPI_MULTI: ISPProtocol_SPIMulti(); break; #endif #if defined(ENABLE_XPROG_PROTOCOL) case CMD_XPROG_SETMODE: XPROGProtocol_SetMode(); break; case CMD_XPROG: XPROGProtocol_Command(); break; #endif default: V2Protocol_UnknownCommand(V2Command); break; } /* Disable the timeout management timer */ TCCR0B = 0; Endpoint_WaitUntilReady(); Endpoint_SelectEndpoint(AVRISP_DATA_OUT_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_OUT); }
void ctrl_xmega_program_void(void) { XPROGProtocol_Command(); }
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; }
/** Master V2 Protocol packet handler, for received V2 Protocol packets from a connected host. * This routine decodes the issued command and passes off the handling of the command to the * appropriate function. */ void V2Protocol_ProcessCommand(void) { uint8_t V2Command = Endpoint_Read_8(); /* Start the watchdog with timeout interrupt enabled to manage the timeout */ TimeoutExpired = false; wdt_enable(WDTO_1S); WDTCSR |= (1 << WDIE); switch (V2Command) { case CMD_SIGN_ON: V2Protocol_SignOn(); break; case CMD_SET_PARAMETER: case CMD_GET_PARAMETER: V2Protocol_GetSetParam(V2Command); break; case CMD_LOAD_ADDRESS: V2Protocol_LoadAddress(); break; case CMD_RESET_PROTECTION: V2Protocol_ResetProtection(); break; #if defined(ENABLE_ISP_PROTOCOL) case CMD_ENTER_PROGMODE_ISP: ISPProtocol_EnterISPMode(); break; case CMD_LEAVE_PROGMODE_ISP: ISPProtocol_LeaveISPMode(); break; case CMD_PROGRAM_FLASH_ISP: case CMD_PROGRAM_EEPROM_ISP: ISPProtocol_ProgramMemory(V2Command); break; case CMD_READ_FLASH_ISP: case CMD_READ_EEPROM_ISP: ISPProtocol_ReadMemory(V2Command); break; case CMD_CHIP_ERASE_ISP: ISPProtocol_ChipErase(); break; case CMD_READ_FUSE_ISP: case CMD_READ_LOCK_ISP: case CMD_READ_SIGNATURE_ISP: case CMD_READ_OSCCAL_ISP: ISPProtocol_ReadFuseLockSigOSCCAL(V2Command); break; case CMD_PROGRAM_FUSE_ISP: case CMD_PROGRAM_LOCK_ISP: ISPProtocol_WriteFuseLock(V2Command); break; case CMD_SPI_MULTI: ISPProtocol_SPIMulti(); break; #endif #if defined(ENABLE_XPROG_PROTOCOL) case CMD_XPROG_SETMODE: XPROGProtocol_SetMode(); break; case CMD_XPROG: XPROGProtocol_Command(); break; #endif default: V2Protocol_UnknownCommand(V2Command); break; } /* Disable the timeout management watchdog timer */ wdt_disable(); Endpoint_WaitUntilReady(); Endpoint_SelectEndpoint(AVRISP_DATA_OUT_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_OUT); }