usbError SetConfigCallback(void *param) { unsigned char *config = (unsigned char *)param; if ((unsigned)1 == *config) { SendStatusUpdate(); return USB_SUCCESS; } else { return USB_EBADPARM; } }
void ProcessReceivedCommands() { uint8_t currentChar; uint8_t idx; uint8_t cksum; switch(currentState) { case WAIT_FOR_START: // Read Port currentChar = Serial.read(); // Go to Next State if(currentChar == START_CHAR) { //Serial.println("Got Start Char"); gCommPacketRX.bytes[0] = currentChar; currentState = READ_DATA; } // Stay Here else { gCommPacketRX.bytes[0] = 0; currentState = WAIT_FOR_START; } break; case READ_DATA: // Read 1 less byte since start char already in struct if(Serial.available() >= sizeof(CommPacket) - 1) { //Serial.println("Read Data"); Serial.readBytes((char *)&gCommPacketRX.bytes[1], sizeof(CommPacket) - 1); currentState = VERIFY_CRC; } else currentState = READ_DATA; break; case VERIFY_CRC: cksum = 0; for(idx = 0; idx < sizeof(CommPacket) - 1; idx++) cksum |= gCommPacketRX.bytes[idx]; if(cksum == gCommPacketRX.commStruct.checksum) { currentState = PROCESS_VALID_PACKET; //Serial.println("Valid CRC"); } else { //Serial.println("Invalid CRC"); currentState = WAIT_FOR_START; } break; case PROCESS_VALID_PACKET: //Serial.println("Processing Packet"); switch(gCommPacketRX.commStruct.messageType) { case CMD_GET_STATUS: SendStatusUpdate(); break; case CMD_SET_TEMPS: // Don't save to EEPROM, just RAM SetTemps(gCommPacketRX.commStruct.params.setTemps, 0); SendOK(); break; case CMD_STORE_SETTEMPS: // Save to RAM and EEPROM SetTemps(gCommPacketRX.commStruct.params.setTemps, 1); SendOK(); break; } currentState = WAIT_FOR_START; break; default: currentState = WAIT_FOR_START; break; } }