Пример #1
0
usbError SetConfigCallback(void *param)
{
    unsigned char *config = (unsigned char *)param;
    if ((unsigned)1 == *config) {
        SendStatusUpdate();
        return USB_SUCCESS;
    } else {
        return USB_EBADPARM;
    }
}
Пример #2
0
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;
    }
}