mirror of
https://github.com/espressif/esp-matter.git
synced 2026-04-27 19:13:13 +00:00
led_driver: Add support for handle
app_main: Passing this handle to the endpoint as priv_data and using the handle in the driver on attribute_update.
This commit is contained in:
@@ -21,7 +21,7 @@ static const char *TAG = "led_driver_gpio";
|
||||
static bool current_power = false;
|
||||
static uint8_t current_brightness = 0;
|
||||
|
||||
esp_err_t led_driver_init(led_driver_config_t *config)
|
||||
led_driver_handle_t led_driver_init(led_driver_config_t *config)
|
||||
{
|
||||
ESP_LOGI(TAG, "Initializing light driver");
|
||||
esp_err_t err = ESP_OK;
|
||||
@@ -36,7 +36,7 @@ esp_err_t led_driver_init(led_driver_config_t *config)
|
||||
err = ledc_timer_config(&ledc_timer);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "led_timerc_config failed");
|
||||
return err;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ledc_channel_config_t ledc_channel = {
|
||||
@@ -53,18 +53,24 @@ esp_err_t led_driver_init(led_driver_config_t *config)
|
||||
ESP_LOGE(TAG, "ledc_channel_config failed");
|
||||
}
|
||||
|
||||
return err;
|
||||
/* Using (channel + 1) as handle */
|
||||
return (led_driver_handle_t)(config->channel + 1);
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_power(bool power)
|
||||
esp_err_t led_driver_set_power(led_driver_handle_t handle, bool power)
|
||||
{
|
||||
current_power = power;
|
||||
return led_driver_set_brightness(current_brightness);
|
||||
return led_driver_set_brightness(handle, current_brightness);
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_brightness(uint8_t brightness)
|
||||
esp_err_t led_driver_set_brightness(led_driver_handle_t handle, uint8_t brightness)
|
||||
{
|
||||
esp_err_t err;
|
||||
int channel = (int)handle - 1;
|
||||
if (channel < 0) {
|
||||
ESP_LOGE(TAG, "Invalid handle");
|
||||
return ESP_ERR_INVALID_ARG;
|
||||
}
|
||||
|
||||
if (brightness != 0) {
|
||||
current_brightness = brightness;
|
||||
@@ -73,54 +79,54 @@ esp_err_t led_driver_set_brightness(uint8_t brightness)
|
||||
brightness = 0;
|
||||
}
|
||||
|
||||
err = ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, brightness);
|
||||
err = ledc_set_duty(LEDC_LOW_SPEED_MODE, channel, brightness);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "ledc_set_duty failed");
|
||||
}
|
||||
|
||||
err = ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0);
|
||||
err = ledc_update_duty(LEDC_LOW_SPEED_MODE, channel);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "ledc_update_duty failed");
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_hue(uint16_t hue)
|
||||
esp_err_t led_driver_set_hue(led_driver_handle_t handle, uint16_t hue)
|
||||
{
|
||||
return ESP_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_saturation(uint8_t saturation)
|
||||
esp_err_t led_driver_set_saturation(led_driver_handle_t handle, uint8_t saturation)
|
||||
{
|
||||
return ESP_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_temperature(uint32_t temperature)
|
||||
esp_err_t led_driver_set_temperature(led_driver_handle_t handle, uint32_t temperature)
|
||||
{
|
||||
return ESP_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
bool led_driver_get_power()
|
||||
bool led_driver_get_power(led_driver_handle_t handle)
|
||||
{
|
||||
return current_power;
|
||||
}
|
||||
|
||||
uint8_t led_driver_get_brightness()
|
||||
uint8_t led_driver_get_brightness(led_driver_handle_t handle)
|
||||
{
|
||||
return current_brightness;
|
||||
}
|
||||
|
||||
uint16_t led_driver_get_hue()
|
||||
uint16_t led_driver_get_hue(led_driver_handle_t handle)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t led_driver_get_saturation()
|
||||
uint8_t led_driver_get_saturation(led_driver_handle_t handle)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t led_driver_get_temperature()
|
||||
uint32_t led_driver_get_temperature(led_driver_handle_t handle)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -21,15 +21,15 @@ static uint8_t current_brightness = 0;
|
||||
static HS_color_t current_HS = {0, 0};
|
||||
static uint32_t current_temperature = 6600;
|
||||
|
||||
esp_err_t led_driver_init(led_driver_config_t *config)
|
||||
led_driver_handle_t led_driver_init(led_driver_config_t *config)
|
||||
{
|
||||
ESP_LOGI(TAG, "Initializing light driver");
|
||||
/* Initialize the driver here */
|
||||
|
||||
return ESP_OK;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_power(bool power)
|
||||
esp_err_t led_driver_set_power(led_driver_handle_t handle, bool power)
|
||||
{
|
||||
ESP_LOGI(TAG, "Setting power to: %d", power);
|
||||
/* Set the power state here */
|
||||
@@ -37,7 +37,7 @@ esp_err_t led_driver_set_power(bool power)
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_brightness(uint8_t brightness)
|
||||
esp_err_t led_driver_set_brightness(led_driver_handle_t handle, uint8_t brightness)
|
||||
{
|
||||
ESP_LOGI(TAG, "Setting brightness to: %d", brightness);
|
||||
/* Set the brightness level here */
|
||||
@@ -45,7 +45,7 @@ esp_err_t led_driver_set_brightness(uint8_t brightness)
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_hue(uint16_t hue)
|
||||
esp_err_t led_driver_set_hue(led_driver_handle_t handle, uint16_t hue)
|
||||
{
|
||||
ESP_LOGI(TAG, "Setting hue to: %d", hue);
|
||||
/* Set the color hue here */
|
||||
@@ -53,7 +53,7 @@ esp_err_t led_driver_set_hue(uint16_t hue)
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_saturation(uint8_t saturation)
|
||||
esp_err_t led_driver_set_saturation(led_driver_handle_t handle, uint8_t saturation)
|
||||
{
|
||||
ESP_LOGI(TAG, "Setting saturation to: %d", saturation);
|
||||
/* Set the color saturation here */
|
||||
@@ -61,7 +61,7 @@ esp_err_t led_driver_set_saturation(uint8_t saturation)
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_temperature(uint32_t temperature)
|
||||
esp_err_t led_driver_set_temperature(led_driver_handle_t handle, uint32_t temperature)
|
||||
{
|
||||
ESP_LOGI(TAG, "Setting temperature to: %d", temperature);
|
||||
/* Set the color temp here*/
|
||||
@@ -69,27 +69,27 @@ esp_err_t led_driver_set_temperature(uint32_t temperature)
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
bool led_driver_get_power()
|
||||
bool led_driver_get_power(led_driver_handle_t handle)
|
||||
{
|
||||
return current_power;
|
||||
}
|
||||
|
||||
uint8_t led_driver_get_brightness()
|
||||
uint8_t led_driver_get_brightness(led_driver_handle_t handle)
|
||||
{
|
||||
return current_brightness;
|
||||
}
|
||||
|
||||
uint16_t led_driver_get_hue()
|
||||
uint16_t led_driver_get_hue(led_driver_handle_t handle)
|
||||
{
|
||||
return current_HS.hue;
|
||||
}
|
||||
|
||||
uint8_t led_driver_get_saturation()
|
||||
uint8_t led_driver_get_saturation(led_driver_handle_t handle)
|
||||
{
|
||||
return current_HS.saturation;
|
||||
}
|
||||
|
||||
uint32_t led_driver_get_temperature()
|
||||
uint32_t led_driver_get_temperature(led_driver_handle_t handle)
|
||||
{
|
||||
return current_temperature;
|
||||
}
|
||||
|
||||
@@ -25,18 +25,20 @@ typedef struct {
|
||||
int channel;
|
||||
} led_driver_config_t;
|
||||
|
||||
esp_err_t led_driver_init(led_driver_config_t *config);
|
||||
esp_err_t led_driver_set_power(bool power);
|
||||
esp_err_t led_driver_set_brightness(uint8_t brightness);
|
||||
esp_err_t led_driver_set_hue(uint16_t hue);
|
||||
esp_err_t led_driver_set_saturation(uint8_t saturation);
|
||||
esp_err_t led_driver_set_temperature(uint32_t temperature);
|
||||
typedef void *led_driver_handle_t;
|
||||
|
||||
bool led_driver_get_power(void);
|
||||
uint8_t led_driver_get_brightness(void);
|
||||
uint16_t led_driver_get_hue(void);
|
||||
uint8_t led_driver_get_saturation(void);
|
||||
uint32_t led_driver_get_temperature(void);
|
||||
led_driver_handle_t led_driver_init(led_driver_config_t *config);
|
||||
esp_err_t led_driver_set_power(led_driver_handle_t handle, bool power);
|
||||
esp_err_t led_driver_set_brightness(led_driver_handle_t handle, uint8_t brightness);
|
||||
esp_err_t led_driver_set_hue(led_driver_handle_t handle, uint16_t hue);
|
||||
esp_err_t led_driver_set_saturation(led_driver_handle_t handle, uint8_t saturation);
|
||||
esp_err_t led_driver_set_temperature(led_driver_handle_t handle, uint32_t temperature);
|
||||
|
||||
bool led_driver_get_power(led_driver_handle_t handle);
|
||||
uint8_t led_driver_get_brightness(led_driver_handle_t handle);
|
||||
uint16_t led_driver_get_hue(led_driver_handle_t handle);
|
||||
uint8_t led_driver_get_saturation(led_driver_handle_t handle);
|
||||
uint32_t led_driver_get_temperature(led_driver_handle_t handle);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -124,32 +124,43 @@ static esp_err_t InitDisplay()
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
esp_err_t led_driver_init(led_driver_config_t *config)
|
||||
led_driver_handle_t led_driver_init(led_driver_config_t *config)
|
||||
{
|
||||
static bool init_done = false;
|
||||
if (init_done) {
|
||||
ESP_LOGE(TAG, "This led driver only supports one led initialisation.");
|
||||
return NULL;
|
||||
}
|
||||
ESP_LOGI(TAG, "Initializing led driver");
|
||||
esp_err_t err = ESP_OK;
|
||||
err = InitDisplay();
|
||||
if (err != ESP_OK) {
|
||||
return err;
|
||||
return NULL;
|
||||
}
|
||||
SetupBrightnessControl(config);
|
||||
SetDisplayBrightness(BRIGHTNESS_MAX);
|
||||
return err;
|
||||
init_done = true;
|
||||
|
||||
/* Temporary handle. Not being used anywhere. */
|
||||
static int handle = 1;
|
||||
return (led_driver_handle_t)handle;
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_power(bool power)
|
||||
esp_err_t led_driver_set_power(led_driver_handle_t handle, bool power)
|
||||
{
|
||||
current_power = power;
|
||||
return led_driver_set_brightness(current_brightness);
|
||||
return led_driver_set_brightness(handle, current_brightness);
|
||||
}
|
||||
esp_err_t led_driver_set_RGB()
|
||||
|
||||
esp_err_t led_driver_set_RGB(led_driver_handle_t handle)
|
||||
{
|
||||
TFT_fillWindow(TFT_BLACK);
|
||||
TFT_fillCircle(DisplayWidth / 2, DisplayHeight / 2, DisplayWidth / 4, (color_t){mRGB.red, mRGB.green, mRGB.blue});
|
||||
TFT_drawCircle(DisplayWidth / 2, DisplayHeight / 2, DisplayWidth / 4, (color_t){255, 255, 255});
|
||||
return ESP_OK;
|
||||
}
|
||||
esp_err_t led_driver_set_brightness(uint8_t brightness)
|
||||
|
||||
esp_err_t led_driver_set_brightness(led_driver_handle_t handle, uint8_t brightness)
|
||||
{
|
||||
if (brightness != 0) {
|
||||
current_brightness = brightness;
|
||||
@@ -158,55 +169,55 @@ esp_err_t led_driver_set_brightness(uint8_t brightness)
|
||||
brightness = 0;
|
||||
}
|
||||
hsv_to_rgb(current_HS, brightness, &mRGB);
|
||||
return led_driver_set_RGB();
|
||||
return led_driver_set_RGB(handle);
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_hue(uint16_t hue)
|
||||
esp_err_t led_driver_set_hue(led_driver_handle_t handle, uint16_t hue)
|
||||
{
|
||||
uint8_t brightness = current_power ? current_brightness : 0;
|
||||
current_HS.hue = hue;
|
||||
hsv_to_rgb(current_HS, brightness, &mRGB);
|
||||
return led_driver_set_RGB();
|
||||
return led_driver_set_RGB(handle);
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_saturation(uint8_t saturation)
|
||||
esp_err_t led_driver_set_saturation(led_driver_handle_t handle, uint8_t saturation)
|
||||
{
|
||||
uint8_t brightness = current_power ? current_brightness : 0;
|
||||
current_HS.saturation = saturation;
|
||||
hsv_to_rgb(current_HS, brightness, &mRGB);
|
||||
return led_driver_set_RGB();
|
||||
return led_driver_set_RGB(handle);
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_temperature(uint32_t temperature)
|
||||
esp_err_t led_driver_set_temperature(led_driver_handle_t handle, uint32_t temperature)
|
||||
{
|
||||
uint8_t brightness = current_power ? current_brightness : 0;
|
||||
current_temperature = temperature;
|
||||
temp_to_hs(current_temperature, ¤t_HS);
|
||||
hsv_to_rgb(current_HS, brightness, &mRGB);
|
||||
return led_driver_set_RGB();
|
||||
return led_driver_set_RGB(handle);
|
||||
}
|
||||
|
||||
bool led_driver_get_power()
|
||||
bool led_driver_get_power(led_driver_handle_t handle)
|
||||
{
|
||||
return current_power;
|
||||
}
|
||||
|
||||
uint8_t led_driver_get_brightness()
|
||||
uint8_t led_driver_get_brightness(led_driver_handle_t handle)
|
||||
{
|
||||
return current_brightness;
|
||||
}
|
||||
|
||||
uint16_t led_driver_get_hue()
|
||||
uint16_t led_driver_get_hue(led_driver_handle_t handle)
|
||||
{
|
||||
return current_HS.hue;
|
||||
}
|
||||
|
||||
uint8_t led_driver_get_saturation()
|
||||
uint8_t led_driver_get_saturation(led_driver_handle_t handle)
|
||||
{
|
||||
return current_HS.saturation;
|
||||
}
|
||||
|
||||
uint32_t led_driver_get_temperature()
|
||||
uint32_t led_driver_get_temperature(led_driver_handle_t handle)
|
||||
{
|
||||
return current_temperature;
|
||||
}
|
||||
|
||||
@@ -23,9 +23,8 @@ static uint8_t current_brightness = 0;
|
||||
static uint32_t current_temp = 6600;
|
||||
static HS_color_t current_HS = {0, 0};
|
||||
static RGB_color_t mRGB;
|
||||
static led_strip_t *strip = NULL;
|
||||
|
||||
esp_err_t led_driver_init(led_driver_config_t *config)
|
||||
led_driver_handle_t led_driver_init(led_driver_config_t *config)
|
||||
{
|
||||
ESP_LOGI(TAG, "Initializing light driver");
|
||||
esp_err_t err = ESP_OK;
|
||||
@@ -42,27 +41,28 @@ esp_err_t led_driver_init(led_driver_config_t *config)
|
||||
}
|
||||
|
||||
led_strip_config_t strip_config = LED_STRIP_DEFAULT_CONFIG(1, (led_strip_dev_t)rmt_cfg.channel);
|
||||
strip = led_strip_new_rmt_ws2812(&strip_config);
|
||||
led_strip_t *strip = led_strip_new_rmt_ws2812(&strip_config);
|
||||
if (!strip) {
|
||||
ESP_LOGE(TAG, "W2812 driver install failed");
|
||||
err = ESP_FAIL;
|
||||
}
|
||||
return err;
|
||||
return (led_driver_handle_t)strip;
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_power(bool power)
|
||||
esp_err_t led_driver_set_power(led_driver_handle_t handle, bool power)
|
||||
{
|
||||
current_power = power;
|
||||
return led_driver_set_brightness(current_brightness);
|
||||
return led_driver_set_brightness(handle, current_brightness);
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_RGB()
|
||||
esp_err_t led_driver_set_RGB(led_driver_handle_t handle)
|
||||
{
|
||||
esp_err_t err = ESP_OK;
|
||||
if (!strip) {
|
||||
ESP_LOGE(TAG, "can't find w2812 led_strip handle");
|
||||
if (!handle) {
|
||||
ESP_LOGE(TAG, "led driver handle cannot be NULL");
|
||||
err = ESP_FAIL;
|
||||
} else {
|
||||
led_strip_t *strip = (led_strip_t *)handle;
|
||||
err = strip->set_pixel(strip, 0, mRGB.red, mRGB.green, mRGB.blue);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "strip_set_pixel failed");
|
||||
@@ -77,7 +77,7 @@ esp_err_t led_driver_set_RGB()
|
||||
return err;
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_brightness(uint8_t brightness)
|
||||
esp_err_t led_driver_set_brightness(led_driver_handle_t handle, uint8_t brightness)
|
||||
{
|
||||
if (brightness != 0) {
|
||||
current_brightness = brightness;
|
||||
@@ -86,55 +86,55 @@ esp_err_t led_driver_set_brightness(uint8_t brightness)
|
||||
brightness = 0;
|
||||
}
|
||||
hsv_to_rgb(current_HS, brightness, &mRGB);
|
||||
return led_driver_set_RGB();
|
||||
return led_driver_set_RGB(handle);
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_hue(uint16_t hue)
|
||||
esp_err_t led_driver_set_hue(led_driver_handle_t handle, uint16_t hue)
|
||||
{
|
||||
uint8_t brightness = current_power ? current_brightness : 0;
|
||||
current_HS.hue = hue;
|
||||
hsv_to_rgb(current_HS, brightness, &mRGB);
|
||||
return led_driver_set_RGB();
|
||||
return led_driver_set_RGB(handle);
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_saturation(uint8_t saturation)
|
||||
esp_err_t led_driver_set_saturation(led_driver_handle_t handle, uint8_t saturation)
|
||||
{
|
||||
uint8_t brightness = current_power ? current_brightness : 0;
|
||||
current_HS.saturation = saturation;
|
||||
hsv_to_rgb(current_HS, brightness, &mRGB);
|
||||
return led_driver_set_RGB();
|
||||
return led_driver_set_RGB(handle);
|
||||
}
|
||||
|
||||
esp_err_t led_driver_set_temperature(uint32_t temperature)
|
||||
esp_err_t led_driver_set_temperature(led_driver_handle_t handle, uint32_t temperature)
|
||||
{
|
||||
uint8_t brightness = current_power ? current_brightness : 0;
|
||||
current_temp = temperature;
|
||||
temp_to_hs(current_temp, ¤t_HS);
|
||||
hsv_to_rgb(current_HS, brightness, &mRGB);
|
||||
return led_driver_set_RGB();
|
||||
return led_driver_set_RGB(handle);
|
||||
}
|
||||
|
||||
bool led_driver_get_power()
|
||||
bool led_driver_get_power(led_driver_handle_t handle)
|
||||
{
|
||||
return current_power;
|
||||
}
|
||||
|
||||
uint8_t led_driver_get_brightness()
|
||||
uint8_t led_driver_get_brightness(led_driver_handle_t handle)
|
||||
{
|
||||
return current_brightness;
|
||||
}
|
||||
|
||||
uint16_t led_driver_get_hue()
|
||||
uint16_t led_driver_get_hue(led_driver_handle_t handle)
|
||||
{
|
||||
return current_HS.hue;
|
||||
}
|
||||
|
||||
uint8_t led_driver_get_saturation()
|
||||
uint8_t led_driver_get_saturation(led_driver_handle_t handle)
|
||||
{
|
||||
return current_HS.saturation;
|
||||
}
|
||||
|
||||
uint32_t led_driver_get_temperature()
|
||||
uint32_t led_driver_get_temperature(led_driver_handle_t handle)
|
||||
{
|
||||
return current_temp;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user