diff --git a/right/src/usb_commands/usb_command_apply_config.c b/right/src/usb_commands/usb_command_apply_config.c index edb80de..8824c79 100644 --- a/right/src/usb_commands/usb_command_apply_config.c +++ b/right/src/usb_commands/usb_command_apply_config.c @@ -12,11 +12,13 @@ void UsbCommand_ApplyConfig(void) ParserRunDry = true; StagingUserConfigBuffer.offset = 0; - GenericHidOutBuffer[0] = ParseConfig(&StagingUserConfigBuffer); - *(uint16_t*)(GenericHidOutBuffer+1) = StagingUserConfigBuffer.offset; - GenericHidOutBuffer[3] = 0; + uint8_t parseConfigStatus = ParseConfig(&StagingUserConfigBuffer); - if (GenericHidOutBuffer[0] != UsbStatusCode_Success) { + SET_USB_BUFFER_UINT8(0, parseConfigStatus); + SET_USB_BUFFER_UINT16(1, StagingUserConfigBuffer.offset); + SET_USB_BUFFER_UINT8(3, 0); + + if (parseConfigStatus != UsbStatusCode_Success) { return; } @@ -33,11 +35,13 @@ void UsbCommand_ApplyConfig(void) ParserRunDry = false; ValidatedUserConfigBuffer.offset = 0; - GenericHidOutBuffer[0] = ParseConfig(&ValidatedUserConfigBuffer); - *(uint16_t*)(GenericHidOutBuffer+1) = ValidatedUserConfigBuffer.offset; - GenericHidOutBuffer[3] = 1; + parseConfigStatus = ParseConfig(&ValidatedUserConfigBuffer); - if (GenericHidOutBuffer[0] != UsbStatusCode_Success) { + SET_USB_BUFFER_UINT8(0, parseConfigStatus); + SET_USB_BUFFER_UINT16(1, ValidatedUserConfigBuffer.offset); + SET_USB_BUFFER_UINT8(3, 1); + + if (parseConfigStatus != UsbStatusCode_Success) { return; } diff --git a/right/src/usb_commands/usb_command_get_adc_value.c b/right/src/usb_commands/usb_command_get_adc_value.c index b984d21..17c6599 100644 --- a/right/src/usb_commands/usb_command_get_adc_value.c +++ b/right/src/usb_commands/usb_command_get_adc_value.c @@ -4,5 +4,5 @@ void UsbCommand_GetAdcValue(void) { - *(uint32_t*)(GenericHidOutBuffer+1) = ADC_Measure(); + SET_USB_BUFFER_UINT32(1, ADC_Measure()); } diff --git a/right/src/usb_commands/usb_command_get_keyboard_state.c b/right/src/usb_commands/usb_command_get_keyboard_state.c index 1eaafcd..e46769f 100644 --- a/right/src/usb_commands/usb_command_get_keyboard_state.c +++ b/right/src/usb_commands/usb_command_get_keyboard_state.c @@ -7,9 +7,9 @@ void UsbCommand_GetKeyboardState(void) { - GenericHidOutBuffer[1] = IsEepromBusy; - GenericHidOutBuffer[2] = MERGE_SENSOR_IS_MERGED; - GenericHidOutBuffer[3] = UhkModuleStates[UhkModuleDriverId_LeftKeyboardHalf].moduleId; - GenericHidOutBuffer[4] = UhkModuleStates[UhkModuleDriverId_LeftAddon].moduleId; - GenericHidOutBuffer[5] = UhkModuleStates[UhkModuleDriverId_RightAddon].moduleId; + SET_USB_BUFFER_UINT8(1, IsEepromBusy); + SET_USB_BUFFER_UINT8(2, MERGE_SENSOR_IS_MERGED); + SET_USB_BUFFER_UINT8(3, UhkModuleStates[UhkModuleDriverId_LeftKeyboardHalf].moduleId); + SET_USB_BUFFER_UINT8(4, UhkModuleStates[UhkModuleDriverId_LeftAddon].moduleId); + SET_USB_BUFFER_UINT8(5, UhkModuleStates[UhkModuleDriverId_RightAddon].moduleId); } diff --git a/right/src/usb_commands/usb_command_get_property.c b/right/src/usb_commands/usb_command_get_property.c index dc384e6..24fed8a 100644 --- a/right/src/usb_commands/usb_command_get_property.c +++ b/right/src/usb_commands/usb_command_get_property.c @@ -5,29 +5,29 @@ void UsbCommand_GetProperty(void) { - uint8_t propertyId = GenericHidInBuffer[1]; + uint8_t propertyId = GET_USB_BUFFER_UINT8(1); switch (propertyId) { case SystemPropertyId_UsbProtocolVersion: - SetUsbResponseByte(SYSTEM_PROPERTY_USB_PROTOCOL_VERSION); + SET_USB_BUFFER_UINT8(1, SYSTEM_PROPERTY_USB_PROTOCOL_VERSION); break; case SystemPropertyId_BridgeProtocolVersion: - SetUsbResponseByte(SYSTEM_PROPERTY_BRIDGE_PROTOCOL_VERSION); + SET_USB_BUFFER_UINT8(1, SYSTEM_PROPERTY_BRIDGE_PROTOCOL_VERSION); break; case SystemPropertyId_DataModelVersion: - SetUsbResponseByte(SYSTEM_PROPERTY_DATA_MODEL_VERSION); + SET_USB_BUFFER_UINT8(1, SYSTEM_PROPERTY_DATA_MODEL_VERSION); break; case SystemPropertyId_FirmwareVersion: - SetUsbResponseByte(SYSTEM_PROPERTY_FIRMWARE_VERSION); + SET_USB_BUFFER_UINT8(1, SYSTEM_PROPERTY_FIRMWARE_VERSION); break; case SystemPropertyId_HardwareConfigSize: - SetUsbResponseWord(HARDWARE_CONFIG_SIZE); + SET_USB_BUFFER_UINT16(1, HARDWARE_CONFIG_SIZE); break; case SystemPropertyId_UserConfigSize: - SetUsbResponseWord(USER_CONFIG_SIZE); + SET_USB_BUFFER_UINT16(1, USER_CONFIG_SIZE); break; default: - SetUsbStatusCode(1); + SET_USB_BUFFER_UINT8(0, UsbStatusCode_GetProperty_InvalidProperty); break; } } diff --git a/right/src/usb_commands/usb_command_get_property.h b/right/src/usb_commands/usb_command_get_property.h index 3bee2cd..49ad325 100644 --- a/right/src/usb_commands/usb_command_get_property.h +++ b/right/src/usb_commands/usb_command_get_property.h @@ -19,6 +19,10 @@ SystemPropertyId_UserConfigSize = 5, } system_property_t; + typedef enum { + UsbStatusCode_GetProperty_InvalidProperty = 2, + } usb_status_code_get_property_t; + // Functions: void UsbCommand_GetProperty(void); diff --git a/right/src/usb_commands/usb_command_jump_to_slave_bootloader.c b/right/src/usb_commands/usb_command_jump_to_slave_bootloader.c index 3d5a5cc..4c0246d 100644 --- a/right/src/usb_commands/usb_command_jump_to_slave_bootloader.c +++ b/right/src/usb_commands/usb_command_jump_to_slave_bootloader.c @@ -4,10 +4,10 @@ void UsbCommand_JumpToSlaveBootloader(void) { - uint8_t uhkModuleDriverId = GenericHidInBuffer[1]; + uint8_t uhkModuleDriverId = GET_USB_BUFFER_UINT8(1); if (uhkModuleDriverId >= UHK_MODULE_MAX_COUNT) { - SetUsbStatusCode(UsbStatusCode_JumpToSlaveBootloader_InvalidModuleDriverId); + SET_USB_BUFFER_UINT8(0, UsbStatusCode_JumpToSlaveBootloader_InvalidModuleDriverId); return; } diff --git a/right/src/usb_commands/usb_command_jump_to_slave_bootloader.h b/right/src/usb_commands/usb_command_jump_to_slave_bootloader.h index 86db6b4..6481b9e 100644 --- a/right/src/usb_commands/usb_command_jump_to_slave_bootloader.h +++ b/right/src/usb_commands/usb_command_jump_to_slave_bootloader.h @@ -9,6 +9,6 @@ typedef enum { UsbStatusCode_JumpToSlaveBootloader_InvalidModuleDriverId = 2, - } config_transfer_response_jump_to_slave_bootloader_t; + } usb_status_code_jump_to_slave_bootloader_t; #endif diff --git a/right/src/usb_commands/usb_command_launch_eeprom_transfer_legacy.c b/right/src/usb_commands/usb_command_launch_eeprom_transfer_legacy.c index a6e4f67..bda402b 100644 --- a/right/src/usb_commands/usb_command_launch_eeprom_transfer_legacy.c +++ b/right/src/usb_commands/usb_command_launch_eeprom_transfer_legacy.c @@ -5,7 +5,7 @@ void UsbCommand_LaunchEepromTransferLegacy(void) { - uint8_t legacyEepromTransferId = GenericHidInBuffer[1]; + uint8_t legacyEepromTransferId = GET_USB_BUFFER_UINT8(1); switch (legacyEepromTransferId) { case 0: EEPROM_LaunchTransfer(EepromOperation_Read, ConfigBufferId_HardwareConfig, NULL); diff --git a/right/src/usb_commands/usb_command_read_config.c b/right/src/usb_commands/usb_command_read_config.c index 5482e7b..064cbc5 100644 --- a/right/src/usb_commands/usb_command_read_config.c +++ b/right/src/usb_commands/usb_command_read_config.c @@ -5,11 +5,11 @@ void UsbCommand_ReadConfig(bool isHardware) { - uint8_t length = GenericHidInBuffer[1]; - uint16_t offset = *(uint16_t*)(GenericHidInBuffer+2); + uint8_t length = GET_USB_BUFFER_UINT8(1); + uint16_t offset = GET_USB_BUFFER_UINT16(2); if (length > USB_GENERIC_HID_OUT_BUFFER_LENGTH-1) { - SetUsbStatusCode(UsbStatusCode_TransferConfig_LengthTooLarge); + SET_USB_BUFFER_UINT8(0, UsbStatusCode_TransferConfig_LengthTooLarge); return; } @@ -17,7 +17,7 @@ void UsbCommand_ReadConfig(bool isHardware) uint16_t bufferLength = isHardware ? HARDWARE_CONFIG_SIZE : USER_CONFIG_SIZE; if (offset + length > bufferLength) { - SetUsbStatusCode(UsbStatusCode_TransferConfig_BufferOutOfBounds); + SET_USB_BUFFER_UINT8(0, UsbStatusCode_TransferConfig_BufferOutOfBounds); return; } diff --git a/right/src/usb_commands/usb_command_reenumerate.c b/right/src/usb_commands/usb_command_reenumerate.c index 0e57097..9174826 100644 --- a/right/src/usb_commands/usb_command_reenumerate.c +++ b/right/src/usb_commands/usb_command_reenumerate.c @@ -6,7 +6,7 @@ void UsbCommand_Reenumerate(void) { Wormhole.magicNumber = WORMHOLE_MAGIC_NUMBER; - Wormhole.enumerationMode = GenericHidInBuffer[1]; - Wormhole.timeoutMs = *((uint32_t*)(GenericHidInBuffer+2)); + Wormhole.enumerationMode = GET_USB_BUFFER_UINT8(1); + Wormhole.timeoutMs = GET_USB_BUFFER_UINT32(2); NVIC_SystemReset(); } diff --git a/right/src/usb_commands/usb_command_send_kboot_command.c b/right/src/usb_commands/usb_command_send_kboot_command.c index 2d0e109..bf1a851 100644 --- a/right/src/usb_commands/usb_command_send_kboot_command.c +++ b/right/src/usb_commands/usb_command_send_kboot_command.c @@ -4,6 +4,6 @@ void UsbCommand_SendKbootCommand(void) { KbootDriverState.phase = 0; - KbootDriverState.i2cAddress = GenericHidInBuffer[2]; - KbootDriverState.commandType = GenericHidInBuffer[1]; // Command should be set last. + KbootDriverState.i2cAddress = GET_USB_BUFFER_UINT8(2); + KbootDriverState.commandType = GET_USB_BUFFER_UINT8(1); // Command should be set last. } diff --git a/right/src/usb_commands/usb_command_set_led_pwm_brightness.c b/right/src/usb_commands/usb_command_set_led_pwm_brightness.c index 2320d81..8340092 100644 --- a/right/src/usb_commands/usb_command_set_led_pwm_brightness.c +++ b/right/src/usb_commands/usb_command_set_led_pwm_brightness.c @@ -4,7 +4,7 @@ void UsbCommand_SetLedPwmBrightness(void) { - uint8_t brightnessPercent = GenericHidInBuffer[1]; + uint8_t brightnessPercent = GET_USB_BUFFER_UINT8(1); LedPwm_SetBrightness(brightnessPercent); UhkModuleStates[UhkModuleDriverId_LeftKeyboardHalf].sourceVars.ledPwmBrightness = brightnessPercent; } diff --git a/right/src/usb_commands/usb_command_set_test_led.c b/right/src/usb_commands/usb_command_set_test_led.c index 3eb0953..abda21d 100644 --- a/right/src/usb_commands/usb_command_set_test_led.c +++ b/right/src/usb_commands/usb_command_set_test_led.c @@ -5,7 +5,7 @@ void UsbCommand_SetTestLed(void) { - uint8_t ledState = GenericHidInBuffer[1]; + uint8_t ledState = GET_USB_BUFFER_UINT8(1); TEST_LED_SET(ledState); UhkModuleStates[UhkModuleDriverId_LeftKeyboardHalf].sourceVars.isTestLedOn = ledState; } diff --git a/right/src/usb_commands/usb_command_write_config.c b/right/src/usb_commands/usb_command_write_config.c index f20062a..44024f3 100644 --- a/right/src/usb_commands/usb_command_write_config.c +++ b/right/src/usb_commands/usb_command_write_config.c @@ -5,11 +5,11 @@ void UsbCommand_WriteConfig(bool isHardware) { - uint8_t length = GenericHidInBuffer[1]; - uint16_t offset = *((uint16_t*)(GenericHidInBuffer+1+1)); + uint8_t length = GET_USB_BUFFER_UINT8(1); + uint16_t offset = GET_USB_BUFFER_UINT16(2); - if (length > USB_GENERIC_HID_OUT_BUFFER_LENGTH-1-1-2) { - SetUsbStatusCode(UsbStatusCode_TransferConfig_LengthTooLarge); + if (length > USB_GENERIC_HID_OUT_BUFFER_LENGTH-4) { + SET_USB_BUFFER_UINT8(0, UsbStatusCode_TransferConfig_LengthTooLarge); return; } @@ -17,9 +17,9 @@ void UsbCommand_WriteConfig(bool isHardware) uint16_t bufferLength = isHardware ? HARDWARE_CONFIG_SIZE : USER_CONFIG_SIZE; if (offset + length > bufferLength) { - SetUsbStatusCode(UsbStatusCode_TransferConfig_BufferOutOfBounds); + SET_USB_BUFFER_UINT8(0, UsbStatusCode_TransferConfig_BufferOutOfBounds); return; } - memcpy(buffer+offset, GenericHidInBuffer+1+1+2, length); + memcpy(buffer+offset, GenericHidInBuffer+4, length); } diff --git a/right/src/usb_protocol_handler.c b/right/src/usb_protocol_handler.c index 734e71d..ff84207 100644 --- a/right/src/usb_protocol_handler.c +++ b/right/src/usb_protocol_handler.c @@ -13,25 +13,10 @@ #include "usb_commands/usb_command_jump_to_slave_bootloader.h" #include "usb_commands/usb_command_send_kboot_command.h" -void SetUsbStatusCode(uint8_t error) -{ - GenericHidOutBuffer[0] = error; -} - -void SetUsbResponseByte(uint8_t response) -{ - GenericHidOutBuffer[1] = response; -} - -void SetUsbResponseWord(uint16_t response) -{ - *((uint16_t*)(GenericHidOutBuffer+1)) = response; -} - void UsbProtocolHandler(void) { bzero(GenericHidOutBuffer, USB_GENERIC_HID_OUT_BUFFER_LENGTH); - uint8_t command = GenericHidInBuffer[0]; + uint8_t command = GET_USB_BUFFER_UINT8(0); switch (command) { case UsbCommandId_GetProperty: UsbCommand_GetProperty(); @@ -79,7 +64,7 @@ void UsbProtocolHandler(void) UsbCommand_SendKbootCommand(); break; default: - SetUsbStatusCode(UsbStatusCode_InvalidCommand); + SET_USB_BUFFER_UINT8(0, UsbStatusCode_InvalidCommand); break; } } diff --git a/right/src/usb_protocol_handler.h b/right/src/usb_protocol_handler.h index e8b77b3..fa655da 100644 --- a/right/src/usb_protocol_handler.h +++ b/right/src/usb_protocol_handler.h @@ -6,6 +6,16 @@ #include "fsl_common.h" #include "usb_interfaces/usb_interface_generic_hid.h" +// Macros: + + #define GET_USB_BUFFER_UINT8(offset) (*(uint8_t*)(GenericHidInBuffer+offset)) + #define GET_USB_BUFFER_UINT16(offset) (*(uint16_t*)(GenericHidInBuffer+offset)) + #define GET_USB_BUFFER_UINT32(offset) (*(uint32_t*)(GenericHidInBuffer+offset)) + + #define SET_USB_BUFFER_UINT8(offset, value) (*(uint8_t*)(GenericHidOutBuffer+(offset)) = (value)) + #define SET_USB_BUFFER_UINT16(offset, value) (*(uint16_t*)(GenericHidOutBuffer+(offset)) = (value)) + #define SET_USB_BUFFER_UINT32(offset, value) (*(uint32_t*)(GenericHidOutBuffer+(offset)) = (value)) + // Typedefs: typedef enum { @@ -29,18 +39,15 @@ typedef enum { UsbStatusCode_Success = 0, UsbStatusCode_InvalidCommand = 1, - } usb_response_t; + } usb_status_code_general_t; typedef enum { UsbStatusCode_TransferConfig_LengthTooLarge = 2, UsbStatusCode_TransferConfig_BufferOutOfBounds = 3, - } config_transfer_response_t; + } usb_status_code_transfer_config_t; // Functions: void UsbProtocolHandler(void); - void SetUsbStatusCode(uint8_t status); - void SetUsbResponseByte(uint8_t response); - void SetUsbResponseWord(uint16_t response); #endif