/** 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); }
/** 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); }