Implement read EEPROM and write EEPROM USB commands.
This commit is contained in:
@@ -12,6 +12,8 @@ void JumpToBootloader();
|
||||
void GetSetTestLed();
|
||||
void WriteLedDriver();
|
||||
void ReadLedDriver();
|
||||
void WriteEeprom();
|
||||
void ReadEeprom();
|
||||
|
||||
// Functions for setting error statuses
|
||||
|
||||
@@ -51,6 +53,12 @@ void UsbProtocolHandler()
|
||||
case USB_COMMAND_READ_LED_DRIVER:
|
||||
ReadLedDriver();
|
||||
break;
|
||||
case USB_COMMAND_WRITE_EEPROM:
|
||||
WriteEeprom();
|
||||
break;
|
||||
case USB_COMMAND_READ_EEPROM:
|
||||
ReadEeprom();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -116,4 +124,52 @@ void WriteLedDriver()
|
||||
|
||||
void ReadLedDriver()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void WriteEeprom()
|
||||
{
|
||||
uint8_t i2cPayloadSize = GenericHidInBuffer[1];
|
||||
|
||||
if (i2cPayloadSize > USB_GENERIC_HID_OUT_BUFFER_LENGTH-2) {
|
||||
SetError(WRITE_EEPROM_RESPONSE_INVALID_PAYLOAD_SIZE);
|
||||
return;
|
||||
}
|
||||
|
||||
i2c_master_transfer_t masterXfer;
|
||||
masterXfer.slaveAddress = I2C_ADDRESS_EEPROM;
|
||||
masterXfer.direction = kI2C_Write;
|
||||
masterXfer.subaddress = 0;
|
||||
masterXfer.subaddressSize = 0;
|
||||
masterXfer.data = GenericHidInBuffer+2;
|
||||
masterXfer.dataSize = i2cPayloadSize;
|
||||
masterXfer.flags = kI2C_TransferDefaultFlag;
|
||||
I2C_MasterTransferBlocking(I2C_EEPROM_BUS_BASEADDR, &masterXfer);
|
||||
}
|
||||
|
||||
void ReadEeprom()
|
||||
{
|
||||
uint8_t i2cPayloadSize = GenericHidInBuffer[1];
|
||||
|
||||
if (i2cPayloadSize > USB_GENERIC_HID_OUT_BUFFER_LENGTH-1) {
|
||||
SetError(WRITE_EEPROM_RESPONSE_INVALID_PAYLOAD_SIZE);
|
||||
return;
|
||||
}
|
||||
|
||||
i2c_master_transfer_t masterXfer;
|
||||
masterXfer.slaveAddress = I2C_ADDRESS_EEPROM;
|
||||
masterXfer.direction = kI2C_Write;
|
||||
masterXfer.subaddress = 0;
|
||||
masterXfer.subaddressSize = 0;
|
||||
masterXfer.data = GenericHidInBuffer+2;
|
||||
masterXfer.dataSize = 2;
|
||||
masterXfer.flags = kI2C_TransferDefaultFlag;
|
||||
I2C_MasterTransferBlocking(I2C_EEPROM_BUS_BASEADDR, &masterXfer);
|
||||
|
||||
masterXfer.direction = kI2C_Read;
|
||||
masterXfer.data = GenericHidOutBuffer+1;
|
||||
masterXfer.dataSize = i2cPayloadSize;
|
||||
I2C_MasterTransferBlocking(I2C_EEPROM_BUS_BASEADDR, &masterXfer);
|
||||
|
||||
GenericHidOutBuffer[0] = PROTOCOL_RESPONSE_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
#define WRITE_LED_DRIVER_RESPONSE_INVALID_ADDRESS 1
|
||||
#define WRITE_LED_DRIVER_RESPONSE_INVALID_PAYLOAD_SIZE 2
|
||||
#define USB_COMMAND_READ_LED_DRIVER 4
|
||||
#define USB_COMMAND_WRITE_EEPROM 5
|
||||
#define WRITE_EEPROM_RESPONSE_INVALID_PAYLOAD_SIZE 1
|
||||
#define USB_COMMAND_READ_EEPROM 6
|
||||
|
||||
// Functions:
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
// Reserved for future purposes 0b0000011
|
||||
// High-Speed master code 0b00001XX
|
||||
#define I2C_ADDRESS_LEFT_KEYBOARD_HALF 0b0001000
|
||||
#define I2C_ADDRESS_EEPROM 0b1010000
|
||||
#define I2C_ADDRESS_LED_DRIVER_LEFT 0b1110100
|
||||
// LED driver / touchpad 0b1110101
|
||||
// LED driver / touchpad 0b1110110
|
||||
|
||||
Reference in New Issue
Block a user