#include "led.hpp"

#include <cmath>

#include "hardware/gpio.h"
#include "hardware/pwm.h"
#include "pico/binary_info.h"

#include "config.h"

#include "engine/api_private.hpp"

#if defined(LED_R_PIN) && defined(LED_G_PIN) && defined(LED_B_PIN)
static const int led_pins[]{LED_R_PIN, LED_G_PIN, LED_B_PIN};
#define HAVE_LED
#endif

void init_led() {
#ifdef HAVE_LED
  pwm_config cfg = pwm_get_default_config();
#ifdef LED_INVERTED
  pwm_config_set_output_polarity(&cfg, true, true);
#endif

  for(auto &pin : led_pins) {
    pwm_set_wrap(pwm_gpio_to_slice_num(pin), 65535);
    pwm_init(pwm_gpio_to_slice_num(pin), &cfg, true);
    gpio_set_function(pin, GPIO_FUNC_PWM);
  }

  bi_decl(bi_1pin_with_name(led_pins[0], "Red LED"));
  bi_decl(bi_1pin_with_name(led_pins[1], "Green LED"));
  bi_decl(bi_1pin_with_name(led_pins[2], "Blue LED"));
#endif
}

void update_led() {
  using namespace blit;

#ifdef HAVE_LED
  const float gamma = 2.8;
  uint16_t value = (uint16_t)(std::pow((float)(api_data.LED.r) / 255.0f, gamma) * 65535.0f + 0.5f);
  pwm_set_gpio_level(led_pins[0], value);
  value = (uint16_t)(std::pow((float)(api_data.LED.g) / 255.0f, gamma) * 65535.0f + 0.5f);
  pwm_set_gpio_level(led_pins[1], value);
  value = (uint16_t)(std::pow((float)(api_data.LED.b) / 255.0f, gamma) * 65535.0f + 0.5f);
  pwm_set_gpio_level(led_pins[2], value);
#endif
}
