diff --git a/right/src/system_properties.h b/right/src/system_properties.h new file mode 100644 index 0000000..2a0642e --- /dev/null +++ b/right/src/system_properties.h @@ -0,0 +1,11 @@ +#ifndef __SYSTEM_PROPERTIES_H__ +#define __SYSTEM_PROPERTIES_H__ + +// Macros: + + #define SYSTEM_PROPERTY_USB_PROTOCOL_VERSION 1 + #define SYSTEM_PROPERTY_BRIDGE_PROTOCOL_VERSION 1 + #define SYSTEM_PROPERTY_DATA_MODEL_VERSION 1 + #define SYSTEM_PROPERTY_FIRMWARE_VERSION 1 + +#endif diff --git a/right/src/usb_protocol_handler.c b/right/src/usb_protocol_handler.c index c0a1a92..b9660a1 100644 --- a/right/src/usb_protocol_handler.c +++ b/right/src/usb_protocol_handler.c @@ -1,18 +1,41 @@ #include "usb_protocol_handler.h" +#include "system_properties.h" #include "test_led.h" -void GetProtocolVersion(); +void SetError(uint8_t error); +void SetGenericError(); +void UsbProtocolHandler(); +void GetSystemProperty(); void JumpToBootloader(); void GetSetTestLed(); void WriteLedDriver(); void ReadLedDriver(); +// Functions for setting error statuses + +void SetError(uint8_t error) { + GenericHidOutBuffer[0] = error; +} + +void SetGenericError() +{ + SetError(PROTOCOL_RESPONSE_GENERIC_ERROR); +} + +// Set a single byte as the response. +void SetResponseByte(uint8_t response) +{ + GenericHidOutBuffer[1] = response; +} + +// The main protocol handler function + void UsbProtocolHandler() { uint8_t command = GenericHidInBuffer[0]; switch (command) { - case USB_COMMAND_GET_PROTOCOL_VERSION: - GetProtocolVersion(); + case USB_COMMAND_GET_SYSTEM_PROPERTY: + GetSystemProperty(); break; case USB_COMMAND_JUMP_TO_BOOTLOADER: JumpToBootloader(); @@ -31,8 +54,28 @@ void UsbProtocolHandler() } } -void GetProtocolVersion() { - GenericHidOutBuffer[1] = 1; +// Per command protocol command handlers + +void GetSystemProperty() { + uint8_t propertyId = GenericHidInBuffer[1]; + + switch (propertyId) { + case SYSTEM_PROPERTY_USB_PROTOCOL_VERSION_ID: + SetResponseByte(SYSTEM_PROPERTY_USB_PROTOCOL_VERSION); + break; + case SYSTEM_PROPERTY_BRIDGE_PROTOCOL_VERSION_ID: + SetResponseByte(SYSTEM_PROPERTY_BRIDGE_PROTOCOL_VERSION); + break; + case SYSTEM_PROPERTY_DATA_MODEL_VERSION_ID: + SetResponseByte(SYSTEM_PROPERTY_DATA_MODEL_VERSION); + break; + case SYSTEM_PROPERTY_FIRMWARE_VERSION_ID: + SetResponseByte(SYSTEM_PROPERTY_FIRMWARE_VERSION); + break; + default: + SetGenericError(); + break; + } } void JumpToBootloader() { diff --git a/right/src/usb_protocol_handler.h b/right/src/usb_protocol_handler.h index 7876ac1..a49fcba 100644 --- a/right/src/usb_protocol_handler.h +++ b/right/src/usb_protocol_handler.h @@ -7,11 +7,18 @@ // Macros: - #define USB_COMMAND_GET_PROTOCOL_VERSION 0 - #define USB_COMMAND_JUMP_TO_BOOTLOADER 1 - #define USB_COMMAND_TEST_LED 2 - #define USB_COMMAND_WRITE_LED_DRIVER 3 - #define USB_COMMAND_READ_LED_DRIVER 4 + #define PROTOCOL_RESPONSE_SUCCESS 0 + #define PROTOCOL_RESPONSE_GENERIC_ERROR 1 + + #define USB_COMMAND_GET_SYSTEM_PROPERTY 0 + #define SYSTEM_PROPERTY_USB_PROTOCOL_VERSION_ID 0 + #define SYSTEM_PROPERTY_BRIDGE_PROTOCOL_VERSION_ID 1 + #define SYSTEM_PROPERTY_DATA_MODEL_VERSION_ID 2 + #define SYSTEM_PROPERTY_FIRMWARE_VERSION_ID 3 + #define USB_COMMAND_JUMP_TO_BOOTLOADER 1 + #define USB_COMMAND_TEST_LED 2 + #define USB_COMMAND_WRITE_LED_DRIVER 3 + #define USB_COMMAND_READ_LED_DRIVER 4 // Functions: