From b280fde8a5b82209f2068dd1c73cf9454e29a506 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Mon, 26 Sep 2016 20:28:12 +0200 Subject: [PATCH] Extract LED driver related functions to led_driver.[ch] --- include/{i2c.h => i2c_addresses.h} | 0 right/src/{main.h => i2c.h} | 0 right/src/led_driver.c | 52 ++++++++++++++++++++++++++++ right/src/led_driver.h | 19 +++++++++++ right/src/main.c | 54 +----------------------------- right/src/usb_interface_mouse.c | 1 - 6 files changed, 72 insertions(+), 54 deletions(-) rename include/{i2c.h => i2c_addresses.h} (100%) rename right/src/{main.h => i2c.h} (100%) create mode 100644 right/src/led_driver.c create mode 100644 right/src/led_driver.h diff --git a/include/i2c.h b/include/i2c_addresses.h similarity index 100% rename from include/i2c.h rename to include/i2c_addresses.h diff --git a/right/src/main.h b/right/src/i2c.h similarity index 100% rename from right/src/main.h rename to right/src/i2c.h diff --git a/right/src/led_driver.c b/right/src/led_driver.c new file mode 100644 index 0000000..39f9cc4 --- /dev/null +++ b/right/src/led_driver.c @@ -0,0 +1,52 @@ +#include "led_driver.h" + +void LedDriver_WriteBuffer(uint8_t txBuffer[], uint8_t size) +{ + i2c_master_transfer_t masterXfer; + masterXfer.slaveAddress = LEFT_LED_DRIVER_ADDRESS_7BIT; + masterXfer.direction = kI2C_Write; + masterXfer.subaddress = 0; + masterXfer.subaddressSize = 0; + masterXfer.data = txBuffer; + masterXfer.dataSize = size; + masterXfer.flags = kI2C_TransferDefaultFlag; + I2C_MasterTransferBlocking(EXAMPLE_I2C_MASTER_BASEADDR, &masterXfer); + masterXfer.slaveAddress = RIGHT_LED_DRIVER_ADDRESS_7BIT; + I2C_MasterTransferBlocking(EXAMPLE_I2C_MASTER_BASEADDR, &masterXfer); +} + +void LedDriver_WriteRegister(uint8_t reg, uint8_t val) +{ + uint8_t txBuffer[] = {0, 0}; + txBuffer[0] = reg; + txBuffer[1] = val; + LedDriver_WriteBuffer(txBuffer, sizeof(txBuffer)); +} + +void LedDriver_EnableAllLeds() +{ + PORT_SetPinMux(PORTA, 2U, kPORT_MuxAsGpio); + + gpio_pin_config_t led_config = { + .pinDirection = kGPIO_DigitalOutput, + .outputLogic = 0, + }; + + GPIO_PinInit(GPIOA, 2U, &led_config); + GPIO_SetPinsOutput(GPIOA, 0 << 2U); + + LedDriver_WriteRegister(0xfd, 0x0b); // point to page 9 + LedDriver_WriteRegister(0x0a, 0x01); // set shutdown mode to normal + LedDriver_WriteRegister(0xfd, 0x00); // point to page 0 + + uint8_t i; + for (i=0x00; i<=0x11; i++) { + LedDriver_WriteRegister(i, 0xff); + } + for (i=0x12; i<=0x23; i++) { + LedDriver_WriteRegister(i, 0x00); + } + for (i=0x24; i<=0xb3; i++) { + LedDriver_WriteRegister(i, 0xff); + } +} diff --git a/right/src/led_driver.h b/right/src/led_driver.h new file mode 100644 index 0000000..fa5cac6 --- /dev/null +++ b/right/src/led_driver.h @@ -0,0 +1,19 @@ +#ifndef __LED_DRIVER_H__ +#define __LED_DRIVER_H__ + +// Includes: + +#include "fsl_gpio.h" +#include "fsl_port.h" + + #include "fsl_i2c.h" + #include "i2c.h" + #include "i2c_addresses.h" + +// Macros: + + extern void LedDriver_WriteBuffer(uint8_t txBuffer[], uint8_t size); + extern void LedDriver_WriteRegister(uint8_t reg, uint8_t val); + extern void LedDriver_EnableAllLeds(); + +#endif diff --git a/right/src/main.c b/right/src/main.c index 2d5c40f..d7dd4fa 100644 --- a/right/src/main.c +++ b/right/src/main.c @@ -4,61 +4,9 @@ #include "include/board/pin_mux.h" #include "usb_composite_device.h" #include "i2c.h" -#include "main.h" #include "fsl_common.h" #include "fsl_port.h" -void tx(uint8_t txBuffer[], uint8_t size) -{ - i2c_master_transfer_t masterXfer; - masterXfer.slaveAddress = LEFT_LED_DRIVER_ADDRESS_7BIT; - masterXfer.direction = kI2C_Write; - masterXfer.subaddress = 0; - masterXfer.subaddressSize = 0; - masterXfer.data = txBuffer; - masterXfer.dataSize = size; - masterXfer.flags = kI2C_TransferDefaultFlag; - I2C_MasterTransferBlocking(EXAMPLE_I2C_MASTER_BASEADDR, &masterXfer); - masterXfer.slaveAddress = RIGHT_LED_DRIVER_ADDRESS_7BIT; - I2C_MasterTransferBlocking(EXAMPLE_I2C_MASTER_BASEADDR, &masterXfer); -} - -void write(uint8_t reg, uint8_t val) -{ - uint8_t txBuffer[] = {0, 0}; - txBuffer[0] = reg; - txBuffer[1] = val; - tx(txBuffer, sizeof(txBuffer)); -} - -void InitLedDisplay() -{ - PORT_SetPinMux(PORTA, 2U, kPORT_MuxAsGpio); - - gpio_pin_config_t led_config = { - .pinDirection = kGPIO_DigitalOutput, - .outputLogic = 0, - }; - - GPIO_PinInit(GPIOA, 2U, &led_config); - GPIO_SetPinsOutput(GPIOA, 0 << 2U); - - write(0xfd, 0x0b); // point to page 9 - write(0x0a, 0x01); // set shutdown mode to normal - write(0xfd, 0x00); // point to page 0 - - uint8_t i; - for (i=0x00; i<=0x11; i++) { - write(i, 0xff); - } - for (i=0x12; i<=0x23; i++) { - write(i, 0x00); - } - for (i=0x24; i<=0xb3; i++) { - write(i, 0xff); - } -} - void main() { BOARD_InitPins(); BOARD_BootClockRUN(); @@ -70,7 +18,7 @@ void main() { sourceClock = CLOCK_GetFreq(I2C_MASTER_CLK_SRC); I2C_MasterInit(EXAMPLE_I2C_MASTER_BASEADDR, &masterConfig, sourceClock); - InitLedDisplay(); + LedDriver_EnableAllLeds(); InitUsb(); while (1); diff --git a/right/src/usb_interface_mouse.c b/right/src/usb_interface_mouse.c index 24a2c5d..42586c4 100644 --- a/right/src/usb_interface_mouse.c +++ b/right/src/usb_interface_mouse.c @@ -3,7 +3,6 @@ #include "usb_interface_mouse.h" #include "fsl_i2c.h" #include "i2c.h" -#include "main.h" static usb_device_endpoint_struct_t UsbMouseEndpoints[USB_MOUSE_ENDPOINT_COUNT] = {{ USB_MOUSE_ENDPOINT_INDEX | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),