Replace UsbCommandId_ReadHardwareConfig and UsbCommandId_ReadUserConfig with UsbCommandId_ReadConfig.

This commit is contained in:
László Monda
2017-12-12 01:22:26 +01:00
parent c8cfe53136
commit 7c91f8f6d1
6 changed files with 38 additions and 17 deletions

View File

@@ -12,6 +12,11 @@ config_buffer_t ValidatedUserConfigBuffer = { validatedUserConfig };
bool ParserRunDry; bool ParserRunDry;
bool IsConfigBufferIdValid(config_buffer_id_t configBufferId)
{
return ConfigBufferId_HardwareConfig <= configBufferId && configBufferId <= ConfigBufferId_ValidatedUserConfig;
}
config_buffer_t* ConfigBufferIdToConfigBuffer(config_buffer_id_t configBufferId) config_buffer_t* ConfigBufferIdToConfigBuffer(config_buffer_id_t configBufferId)
{ {
switch (configBufferId) { switch (configBufferId) {
@@ -25,3 +30,16 @@ config_buffer_t* ConfigBufferIdToConfigBuffer(config_buffer_id_t configBufferId)
return NULL; return NULL;
} }
} }
uint16_t ConfigBufferIdToBufferSize(config_buffer_id_t configBufferId)
{
switch (configBufferId) {
case ConfigBufferId_HardwareConfig:
return HARDWARE_CONFIG_SIZE;
case ConfigBufferId_StagingUserConfig:
case ConfigBufferId_ValidatedUserConfig:
return USER_CONFIG_SIZE;
default:
return 0;
}
}

View File

@@ -23,6 +23,8 @@
// Functions: // Functions:
bool IsConfigBufferIdValid(config_buffer_id_t configBufferId);
config_buffer_t* ConfigBufferIdToConfigBuffer(config_buffer_id_t configBufferId); config_buffer_t* ConfigBufferIdToConfigBuffer(config_buffer_id_t configBufferId);
uint16_t ConfigBufferIdToBufferSize(config_buffer_id_t configBufferId);
#endif #endif

View File

@@ -3,23 +3,28 @@
#include "usb_protocol_handler.h" #include "usb_protocol_handler.h"
#include "eeprom.h" #include "eeprom.h"
void UsbCommand_ReadConfig(bool isHardware) void UsbCommand_ReadConfig()
{ {
uint8_t length = GetUsbRxBufferUint8(1); config_buffer_id_t configBufferId = GetUsbRxBufferUint8(1);
uint16_t offset = GetUsbRxBufferUint16(2); uint8_t length = GetUsbRxBufferUint8(2);
uint16_t offset = GetUsbRxBufferUint16(3);
if (!IsConfigBufferIdValid(configBufferId)) {
SetUsbTxBufferUint8(0, UsbStatusCode_ReadConfig_InvalidConfigBufferId);
}
if (length > USB_GENERIC_HID_OUT_BUFFER_LENGTH - USB_STATUS_CODE_SIZE) { if (length > USB_GENERIC_HID_OUT_BUFFER_LENGTH - USB_STATUS_CODE_SIZE) {
SetUsbTxBufferUint8(0, UsbStatusCode_ReadConfig_LengthTooLarge); SetUsbTxBufferUint8(0, UsbStatusCode_ReadConfig_LengthTooLarge);
return; return;
} }
uint8_t *buffer = isHardware ? HardwareConfigBuffer.buffer : ValidatedUserConfigBuffer.buffer; config_buffer_t *buffer = ConfigBufferIdToConfigBuffer(configBufferId);
uint16_t bufferLength = isHardware ? HARDWARE_CONFIG_SIZE : USER_CONFIG_SIZE; uint16_t bufferLength = ConfigBufferIdToBufferSize(configBufferId);
if (offset + length > bufferLength) { if (offset + length > bufferLength) {
SetUsbTxBufferUint8(0, UsbStatusCode_ReadConfig_BufferOutOfBounds); SetUsbTxBufferUint8(0, UsbStatusCode_ReadConfig_BufferOutOfBounds);
return; return;
} }
memcpy(GenericHidOutBuffer + USB_STATUS_CODE_SIZE, buffer + offset, length); memcpy(GenericHidOutBuffer + USB_STATUS_CODE_SIZE, buffer->buffer + offset, length);
} }

View File

@@ -3,13 +3,14 @@
// Functions: // Functions:
void UsbCommand_ReadConfig(bool isHardware); void UsbCommand_ReadConfig();
// Typedefs: // Typedefs:
typedef enum { typedef enum {
UsbStatusCode_ReadConfig_LengthTooLarge = 2, UsbStatusCode_ReadConfig_InvalidConfigBufferId = 2,
UsbStatusCode_ReadConfig_BufferOutOfBounds = 3, UsbStatusCode_ReadConfig_LengthTooLarge = 3,
UsbStatusCode_ReadConfig_BufferOutOfBounds = 4,
} usb_status_code_read_config_t; } usb_status_code_read_config_t;
#endif #endif

View File

@@ -43,13 +43,10 @@ void UsbProtocolHandler(void)
case UsbCommandId_LaunchEepromTransferLegacy: case UsbCommandId_LaunchEepromTransferLegacy:
UsbCommand_LaunchEepromTransferLegacy(); UsbCommand_LaunchEepromTransferLegacy();
break; break;
case UsbCommandId_ReadHardwareConfig: case UsbCommandId_ReadConfig:
UsbCommand_ReadConfig(true); UsbCommand_ReadConfig();
break; break;
case UsbCommandId_WriteHardwareConfig: case UsbCommandId_WriteHardwareConfig:
UsbCommand_WriteConfig(true);
break;
case UsbCommandId_ReadUserConfig:
UsbCommand_ReadConfig(false); UsbCommand_ReadConfig(false);
break; break;
case UsbCommandId_GetKeyboardState: case UsbCommandId_GetKeyboardState:

View File

@@ -19,9 +19,7 @@
UsbCommandId_JumpToModuleBootloader = 0x02, // was 0x12 UsbCommandId_JumpToModuleBootloader = 0x02, // was 0x12
UsbCommandId_SendKbootCommandToModule = 0x03, // was 0x13 UsbCommandId_SendKbootCommandToModule = 0x03, // was 0x13
UsbCommandId_ReadHardwareConfig = 0x0D, UsbCommandId_ReadConfig = 0x04, // was 0x0d and 0x0f
UsbCommandId_ReadUserConfig = 0x0F,
// use ReadConfig instead of the above 2
UsbCommandId_WriteHardwareConfig = 0x0E, UsbCommandId_WriteHardwareConfig = 0x0E,
UsbCommandId_WriteUserConfig = 0x08, UsbCommandId_WriteUserConfig = 0x08,
UsbCommandId_ApplyConfig = 0x09, UsbCommandId_ApplyConfig = 0x09,