Implement read EEPROM and write EEPROM USB commands.
This commit is contained in:
@@ -12,6 +12,8 @@ void JumpToBootloader();
|
|||||||
void GetSetTestLed();
|
void GetSetTestLed();
|
||||||
void WriteLedDriver();
|
void WriteLedDriver();
|
||||||
void ReadLedDriver();
|
void ReadLedDriver();
|
||||||
|
void WriteEeprom();
|
||||||
|
void ReadEeprom();
|
||||||
|
|
||||||
// Functions for setting error statuses
|
// Functions for setting error statuses
|
||||||
|
|
||||||
@@ -51,6 +53,12 @@ void UsbProtocolHandler()
|
|||||||
case USB_COMMAND_READ_LED_DRIVER:
|
case USB_COMMAND_READ_LED_DRIVER:
|
||||||
ReadLedDriver();
|
ReadLedDriver();
|
||||||
break;
|
break;
|
||||||
|
case USB_COMMAND_WRITE_EEPROM:
|
||||||
|
WriteEeprom();
|
||||||
|
break;
|
||||||
|
case USB_COMMAND_READ_EEPROM:
|
||||||
|
ReadEeprom();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -116,4 +124,52 @@ void WriteLedDriver()
|
|||||||
|
|
||||||
void ReadLedDriver()
|
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_ADDRESS 1
|
||||||
#define WRITE_LED_DRIVER_RESPONSE_INVALID_PAYLOAD_SIZE 2
|
#define WRITE_LED_DRIVER_RESPONSE_INVALID_PAYLOAD_SIZE 2
|
||||||
#define USB_COMMAND_READ_LED_DRIVER 4
|
#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:
|
// Functions:
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
// Reserved for future purposes 0b0000011
|
// Reserved for future purposes 0b0000011
|
||||||
// High-Speed master code 0b00001XX
|
// High-Speed master code 0b00001XX
|
||||||
#define I2C_ADDRESS_LEFT_KEYBOARD_HALF 0b0001000
|
#define I2C_ADDRESS_LEFT_KEYBOARD_HALF 0b0001000
|
||||||
|
#define I2C_ADDRESS_EEPROM 0b1010000
|
||||||
#define I2C_ADDRESS_LED_DRIVER_LEFT 0b1110100
|
#define I2C_ADDRESS_LED_DRIVER_LEFT 0b1110100
|
||||||
// LED driver / touchpad 0b1110101
|
// LED driver / touchpad 0b1110101
|
||||||
// LED driver / touchpad 0b1110110
|
// LED driver / touchpad 0b1110110
|
||||||
|
|||||||
Reference in New Issue
Block a user