Generalize LED driver functions by adding I2C address parameters.

This commit is contained in:
László Monda
2016-09-26 21:37:29 +02:00
parent 7b1f6a37ff
commit 7b3178a10a
3 changed files with 36 additions and 26 deletions

View File

@@ -1,24 +1,24 @@
#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;
masterXfer.slaveAddress = LEFT_LED_DRIVER_ADDRESS_7BIT;
masterXfer.slaveAddress = i2cAddress;
masterXfer.direction = kI2C_Write;
masterXfer.subaddress = 0;
masterXfer.subaddressSize = 0;
masterXfer.data = txBuffer;
masterXfer.data = buffer;
masterXfer.dataSize = size;
masterXfer.flags = kI2C_TransferDefaultFlag;
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);
}
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};
LedDriver_WriteBuffer(txBuffer, sizeof(txBuffer));
uint8_t buffer[] = {reg, val};
LedDriver_WriteBuffer(i2cAddress, buffer, sizeof(buffer));
}
void LedDriver_EnableAllLeds()
@@ -33,18 +33,23 @@ void LedDriver_EnableAllLeds()
GPIO_PinInit(GPIOA, 2U, &led_config);
GPIO_SetPinsOutput(GPIOA, 0 << 2U);
LedDriver_WriteRegister(LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_FUNCTION);
LedDriver_WriteRegister(LED_DRIVER_REGISTER_SHUTDOWN, SHUTDOWN_MODE_NORMAL);
LedDriver_WriteRegister(LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_1);
uint8_t ledDriverAddresses[] = {I2C_ADDRESS_LED_DRIVER_LEFT, I2C_ADDRESS_LED_DRIVER_RIGHT};
uint8_t i;
for (i=FRAME_REGISTER_LED_CONTROL_FIRST; i<=FRAME_REGISTER_LED_CONTROL_LAST; i++) {
LedDriver_WriteRegister(i, 0xff);
}
for (i=FRAME_REGISTER_BLINK_CONTROL_FIRST; i<=FRAME_REGISTER_BLINK_CONTROL_LAST; i++) {
LedDriver_WriteRegister(i, 0x00);
}
for (i=FRAME_REGISTER_PWM_FIRST; i<=FRAME_REGISTER_PWM_LAST; i++) {
LedDriver_WriteRegister(i, 0xff);
for (uint8_t addressId=0; addressId<sizeof(ledDriverAddresses); addressId++) {
uint8_t address = ledDriverAddresses[addressId];
LedDriver_WriteRegister(address, LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_FUNCTION);
LedDriver_WriteRegister(address, LED_DRIVER_REGISTER_SHUTDOWN, SHUTDOWN_MODE_NORMAL);
LedDriver_WriteRegister(address, LED_DRIVER_REGISTER_FRAME, LED_DRIVER_FRAME_1);
uint8_t i;
for (i=FRAME_REGISTER_LED_CONTROL_FIRST; i<=FRAME_REGISTER_LED_CONTROL_LAST; i++) {
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);
}
}
}

View File

@@ -32,12 +32,12 @@
#define FRAME_REGISTER_PWM_LAST 0xB3
#define SHUTDOWN_MODE_SHUTDOWN 0
#define SHUTDOWN_MODE_NORMAL 1
#define SHUTDOWN_MODE_NORMAL 1
// Functions:
extern void LedDriver_WriteBuffer(uint8_t txBuffer[], uint8_t size);
extern void LedDriver_WriteRegister(uint8_t reg, uint8_t val);
extern void LedDriver_WriteBuffer(uint8_t i2cAddress, uint8_t buffer[], uint8_t size);
extern void LedDriver_WriteRegister(uint8_t i2cAddress, uint8_t reg, uint8_t val);
extern void LedDriver_EnableAllLeds();
#endif