#include "gp8403_output.h"

#include "esphome/core/log.h"

namespace esphome {
namespace gp8403 {

static const char *const TAG = "gp8403.output";

static const uint8_t OUTPUT_REGISTER = 0x02;

void GP8403Output::dump_config() {
  ESP_LOGCONFIG(TAG,
                "GP8403 Output:\n"
                "  Channel: %u",
                this->channel_);
}

void GP8403Output::write_state(float state) {
  uint16_t value = ((uint16_t) (state * 4095)) << 4;
  i2c::ErrorCode err = this->parent_->write_register(OUTPUT_REGISTER + (2 * this->channel_), (uint8_t *) &value, 2);
  if (err != i2c::ERROR_OK) {
    ESP_LOGE(TAG, "Error writing to GP8403, code %d", err);
  }
}

}  // namespace gp8403
}  // namespace esphome
