KTD2052

This is a driver for the Kinetic Technologies KTD2052, a 4-module (12-channel) RGB LED driver with an I2C interface. This driver exposes the KTD2052’s functionality as a standard NuttX character device.

Driver Configuration

This driver depends on I2C being enabled and configured for your board. To use the driver, enable the following option in menuconfig:

  • Device Drivers -> LED Support -> KTD2052 I2C LED Driver (CONFIG_KTD2052)

Driver Usage

The driver is registered as a character device, typically at a path like /dev/leds0.

Initialization

To use the driver, board-specific logic must call ktd2052_register during the board initialization sequence. This function takes the device path, an I2C master instance, the I2C address of the device, and the I2C frequency.

#include <nuttx/leds/ktd2052.h>

/* In your board's initialization logic */
FAR struct i2c_master_s *i2c; /* I2C bus instance */
/* ... */
ktd2052_register("/dev/leds0", i2c, 0x74, 400000);

Application Interface

An application can interact with the device by opening the device path and using standard read(), write(), and ioctl() calls. The device will automatically be taken out of shutdown mode as soon as it is opened.

write()

The write() call provides a simple way to set the raw current values for one or more connected RGB modules. The buffer should contain a sequence of Red, Green, and Blue current values for each module, starting with module 1. The device’s output current is linear between values of 0 (no current) and 192 (full scale current). Setting a value above 192 will result in full scale current output. Full scale current is either 24mA in normal mode or 1.5mA in night mode. Writes to the device using the write() call will always start at module 1. The entire string can be updated by repeatedly calling write() without needing to first seek back to 0. Partial writes are supported.

  • Buffer Format: [R1, G1, B1, R2, G2, B2, R3, G3, B3, R4, G4, B4]

  • Buffer Length: 1 to 12 bytes.

/* Example: Set module 1 to red and module 2 to blue */
uint8_t colors[6] = { 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0 };
int fd = open("/dev/leds0", O_WRONLY);
write(fd, colors, sizeof(colors));
close(fd);

read()

The read() call retrieves status information from the device.

  • Reading 1 byte returns the contents of the MONITOR Register.

  • Reading 2 bytes returns the MONITOR Register followed by the CONTROL Register.

The MONITOR register bits are defined in nuttx/leds/ktd2052.h.

ioctl()

For more advanced control, the driver implements several ioctl commands, defined in nuttx/leds/ktd2052.h.

  • KTDIOSETRGB Set the color for a single RGB module.

    • Argument: A pointer to a uint8_t[4] array: {module number [1-4], r, g, b}.

  • KTDIOSETMODE Configure the operating mode of the device. See the CONTROL register in the device datasheet for additional information on available modes.

    • Argument: A pointer to a struct ktd2052_mode_s.

  • KTDIOSETPATTERN Configure the hardware pattern generator. See the device datasheet for additional information on using the hardware pattern generator.

    • Argument: A pointer to a struct ktd2052_pattern_s.

  • KTDIOSETSLOTS Configure which RGB modules are active in each pattern slot.

    • Argument: A pointer to a struct ktd2052_slots_s.

  • KTDIOGETMONITOR Read the MONITOR register.

    • Argument: A pointer to a uint8_t to store the result.

  • KTDIOSETWDOG Feed the pattern generator watchdog timer.

    • Argument: A uint8_t value for the watchdog cycle count to set.