lp5562.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #include "lp5562.h"
  2. #include "lp5562_reg.h"
  3. #include <stdio.h>
  4. static bool lp5562_write_reg(FuriHalI2cBusHandle* handle, uint8_t address, uint8_t* data) {
  5. uint8_t buffer[2] = {address, *data};
  6. return furi_hal_i2c_tx(handle, LP5562_ADDRESS, buffer, 2, LP5562_I2C_TIMEOUT);
  7. }
  8. void lp5562_reset(FuriHalI2cBusHandle* handle) {
  9. Reg0D_Reset reg = {.value = 0xFF};
  10. lp5562_write_reg(handle, 0x0D, (uint8_t*)&reg);
  11. }
  12. void lp5562_configure(FuriHalI2cBusHandle* handle) {
  13. Reg08_Config config = {.INT_CLK_EN = true, .PS_EN = true, .PWM_HF = true};
  14. lp5562_write_reg(handle, 0x08, (uint8_t*)&config);
  15. Reg70_LedMap map = {
  16. .red = EngSelectI2C,
  17. .green = EngSelectI2C,
  18. .blue = EngSelectI2C,
  19. .white = EngSelectI2C,
  20. };
  21. lp5562_write_reg(handle, 0x70, (uint8_t*)&map);
  22. }
  23. void lp5562_enable(FuriHalI2cBusHandle* handle) {
  24. Reg00_Enable reg = {.CHIP_EN = true, .LOG_EN = true};
  25. lp5562_write_reg(handle, 0x00, (uint8_t*)&reg);
  26. }
  27. void lp5562_set_channel_current(FuriHalI2cBusHandle* handle, LP5562Channel channel, uint8_t value) {
  28. uint8_t reg_no;
  29. if(channel == LP5562ChannelRed) {
  30. reg_no = 0x07;
  31. } else if(channel == LP5562ChannelGreen) {
  32. reg_no = 0x06;
  33. } else if(channel == LP5562ChannelBlue) {
  34. reg_no = 0x05;
  35. } else if(channel == LP5562ChannelWhite) {
  36. reg_no = 0x0F;
  37. } else {
  38. return;
  39. }
  40. lp5562_write_reg(handle, reg_no, &value);
  41. }
  42. void lp5562_set_channel_value(FuriHalI2cBusHandle* handle, LP5562Channel channel, uint8_t value) {
  43. uint8_t reg_no;
  44. if(channel == LP5562ChannelRed) {
  45. reg_no = 0x04;
  46. } else if(channel == LP5562ChannelGreen) {
  47. reg_no = 0x03;
  48. } else if(channel == LP5562ChannelBlue) {
  49. reg_no = 0x02;
  50. } else if(channel == LP5562ChannelWhite) {
  51. reg_no = 0x0E;
  52. } else {
  53. return;
  54. }
  55. lp5562_write_reg(handle, reg_no, &value);
  56. }