Generalize LED driver functions by adding I2C address parameters.
This commit is contained in:
@@ -1,24 +1,24 @@
|
|||||||
#include "led_driver.h"
|
#include "led_driver.h"
|
||||||
|
|
||||||
void LedDriver_WriteBuffer(uint8_t txBuffer[], uint8_t size)
|
void LedDriver_WriteBuffer(uint8_t i2cAddress, uint8_t buffer[], uint8_t size)
|
||||||
{
|
{
|
||||||
i2c_master_transfer_t masterXfer;
|
i2c_master_transfer_t masterXfer;
|
||||||
masterXfer.slaveAddress = LEFT_LED_DRIVER_ADDRESS_7BIT;
|
masterXfer.slaveAddress = i2cAddress;
|
||||||
masterXfer.direction = kI2C_Write;
|
masterXfer.direction = kI2C_Write;
|
||||||
masterXfer.subaddress = 0;
|
masterXfer.subaddress = 0;
|
||||||
masterXfer.subaddressSize = 0;
|
masterXfer.subaddressSize = 0;
|
||||||
masterXfer.data = txBuffer;
|
masterXfer.data = buffer;
|
||||||
masterXfer.dataSize = size;
|
masterXfer.dataSize = size;
|
||||||
masterXfer.flags = kI2C_TransferDefaultFlag;
|
masterXfer.flags = kI2C_TransferDefaultFlag;
|
||||||
I2C_MasterTransferBlocking(I2C_BASEADDR_MAIN_BUS, &masterXfer);
|
I2C_MasterTransferBlocking(I2C_BASEADDR_MAIN_BUS, &masterXfer);
|
||||||
masterXfer.slaveAddress = RIGHT_LED_DRIVER_ADDRESS_7BIT;
|
masterXfer.slaveAddress = I2C_ADDRESS_LED_DRIVER_RIGHT;
|
||||||
I2C_MasterTransferBlocking(I2C_BASEADDR_MAIN_BUS, &masterXfer);
|
I2C_MasterTransferBlocking(I2C_BASEADDR_MAIN_BUS, &masterXfer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LedDriver_WriteRegister(uint8_t reg, uint8_t val)
|
void LedDriver_WriteRegister(uint8_t i2cAddress, uint8_t reg, uint8_t val)
|
||||||
{
|
{
|
||||||
uint8_t txBuffer[] = {reg, val};
|
uint8_t buffer[] = {reg, val};
|
||||||
LedDriver_WriteBuffer(txBuffer, sizeof(txBuffer));
|
LedDriver_WriteBuffer(i2cAddress, buffer, sizeof(buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
void LedDriver_EnableAllLeds()
|
void LedDriver_EnableAllLeds()
|
||||||
@@ -33,18 +33,23 @@ void LedDriver_EnableAllLeds()
|
|||||||
GPIO_PinInit(GPIOA, 2U, &led_config);
|
GPIO_PinInit(GPIOA, 2U, &led_config);
|
||||||
GPIO_SetPinsOutput(GPIOA, 0 << 2U);
|
GPIO_SetPinsOutput(GPIOA, 0 << 2U);
|
||||||
|
|
||||||
LedDriver_WriteRegister(LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_FUNCTION);
|
uint8_t ledDriverAddresses[] = {I2C_ADDRESS_LED_DRIVER_LEFT, I2C_ADDRESS_LED_DRIVER_RIGHT};
|
||||||
LedDriver_WriteRegister(LED_DRIVER_REGISTER_SHUTDOWN, SHUTDOWN_MODE_NORMAL);
|
|
||||||
LedDriver_WriteRegister(LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_1);
|
|
||||||
|
|
||||||
uint8_t i;
|
for (uint8_t addressId=0; addressId<sizeof(ledDriverAddresses); addressId++) {
|
||||||
for (i=FRAME_REGISTER_LED_CONTROL_FIRST; i<=FRAME_REGISTER_LED_CONTROL_LAST; i++) {
|
uint8_t address = ledDriverAddresses[addressId];
|
||||||
LedDriver_WriteRegister(i, 0xff);
|
LedDriver_WriteRegister(address, LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_FUNCTION);
|
||||||
}
|
LedDriver_WriteRegister(address, LED_DRIVER_REGISTER_SHUTDOWN, SHUTDOWN_MODE_NORMAL);
|
||||||
for (i=FRAME_REGISTER_BLINK_CONTROL_FIRST; i<=FRAME_REGISTER_BLINK_CONTROL_LAST; i++) {
|
LedDriver_WriteRegister(address, LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_1);
|
||||||
LedDriver_WriteRegister(i, 0x00);
|
|
||||||
}
|
uint8_t i;
|
||||||
for (i=FRAME_REGISTER_PWM_FIRST; i<=FRAME_REGISTER_PWM_LAST; i++) {
|
for (i=FRAME_REGISTER_LED_CONTROL_FIRST; i<=FRAME_REGISTER_LED_CONTROL_LAST; i++) {
|
||||||
LedDriver_WriteRegister(i, 0xff);
|
LedDriver_WriteRegister(address, i, 0xff);
|
||||||
|
}
|
||||||
|
for (i=FRAME_REGISTER_BLINK_CONTROL_FIRST; i<=FRAME_REGISTER_BLINK_CONTROL_LAST; i++) {
|
||||||
|
LedDriver_WriteRegister(address, i, 0x00);
|
||||||
|
}
|
||||||
|
for (i=FRAME_REGISTER_PWM_FIRST; i<=FRAME_REGISTER_PWM_LAST; i++) {
|
||||||
|
LedDriver_WriteRegister(address, i, 0xff);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,12 +32,12 @@
|
|||||||
#define FRAME_REGISTER_PWM_LAST 0xB3
|
#define FRAME_REGISTER_PWM_LAST 0xB3
|
||||||
|
|
||||||
#define SHUTDOWN_MODE_SHUTDOWN 0
|
#define SHUTDOWN_MODE_SHUTDOWN 0
|
||||||
#define SHUTDOWN_MODE_NORMAL 1
|
#define SHUTDOWN_MODE_NORMAL 1
|
||||||
|
|
||||||
// Functions:
|
// Functions:
|
||||||
|
|
||||||
extern void LedDriver_WriteBuffer(uint8_t txBuffer[], uint8_t size);
|
extern void LedDriver_WriteBuffer(uint8_t i2cAddress, uint8_t buffer[], uint8_t size);
|
||||||
extern void LedDriver_WriteRegister(uint8_t reg, uint8_t val);
|
extern void LedDriver_WriteRegister(uint8_t i2cAddress, uint8_t reg, uint8_t val);
|
||||||
extern void LedDriver_EnableAllLeds();
|
extern void LedDriver_EnableAllLeds();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
#ifndef __I2C_H__
|
#ifndef __I2C_H__
|
||||||
#define __I2C_H__
|
#define __I2C_H__
|
||||||
|
|
||||||
#define LEFT_KEYBOARD_HALF_I2C_ADDRESS_7BIT 8
|
// 7-bit I2C addresses
|
||||||
|
|
||||||
// The 7-bit I2C addresses of the IS31FL3731 LED driver range from 0x74 to 0x77
|
#define I2C_ADDRESS_LEFT_KEYBOARD_HALF 8
|
||||||
#define LEFT_LED_DRIVER_ADDRESS_7BIT 0b1110100
|
|
||||||
#define RIGHT_LED_DRIVER_ADDRESS_7BIT 0b1110111
|
// IS31FL3731 LED drivers range from 0x74 to 0x77
|
||||||
|
#define I2C_ADDRESS_LED_DRIVER_LEFT 0b1110100
|
||||||
|
#define I2C_ADDRESS_LED_DRIVER_RIGHT 0b1110111
|
||||||
|
|
||||||
|
#define IS_I2C_LED_DRIVER_ADDRESS (address) \
|
||||||
|
(I2C_ADDRESS_LED_DRIVER_LEFT <= address && address <= I2C_ADDRESS_LED_DRIVER_RIGHT)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user