IDENTIFICATION!!!!!!!
This commit is contained in:
@@ -7,7 +7,6 @@ Generalnie co ma dzialac to juz dziala, thank fuck. Ja pierdole ale api do zigbe
|
||||
### TODO
|
||||
- hardware
|
||||
- weird start up behavior
|
||||
- identyfikacja, niby opcjonalna ale fajny bajer
|
||||
- factory reset zigbee zeby bylo legitnie, dzwonisz po `esp_zb_factory_reset();`
|
||||
- status LED zeby bylo legitnie (pokazuje factory reset i OTA kiedys)
|
||||
- ota?
|
||||
|
||||
@@ -8,8 +8,9 @@
|
||||
#include "esp_err.h"
|
||||
#include "stdbool.h"
|
||||
|
||||
void light_driver_task(void *pvParameter);
|
||||
void light_driver_set_level(uint8_t level);
|
||||
void light_driver_set_power(bool power);
|
||||
void light_driver_identify(void);
|
||||
void light_driver_task(void *pvParameter);
|
||||
|
||||
#endif //LIGHT_DRIVER_H
|
||||
@@ -16,6 +16,7 @@ static const uint8_t light_gpio = 15;
|
||||
static const uint16_t light_pwm_freq = 65000;
|
||||
static const ledc_timer_bit_t light_pwm_resolution = LEDC_TIMER_10_BIT;
|
||||
static const double light_lowest_duty_pct = 0.05; // lowest duty percentage where the LEDs still light up nice
|
||||
static const uint8_t light_identify_level_delta = 60;
|
||||
|
||||
/* no need to tweak this stuff */
|
||||
static const ledc_channel_t light_ledc_channel = LEDC_CHANNEL_0;
|
||||
@@ -27,6 +28,12 @@ SemaphoreHandle_t light_sem = NULL;
|
||||
static uint8_t light_target_level = 0;
|
||||
static uint16_t gamma_lut[ZIGBEE_LIGHT_LEVELS + 1];
|
||||
|
||||
uint16_t light_driver_get_level(void) {
|
||||
xSemaphoreTake(light_sem, portMAX_DELAY);
|
||||
const uint16_t lvl = light_target_level;
|
||||
xSemaphoreGive(light_sem);
|
||||
return MIN(254, lvl);
|
||||
}
|
||||
|
||||
void light_driver_set_level(const uint8_t level) {
|
||||
xSemaphoreTake(light_sem, portMAX_DELAY);
|
||||
@@ -34,11 +41,17 @@ void light_driver_set_level(const uint8_t level) {
|
||||
xSemaphoreGive(light_sem);
|
||||
}
|
||||
|
||||
uint16_t get_level(void) {
|
||||
xSemaphoreTake(light_sem, portMAX_DELAY);
|
||||
const uint16_t lvl = light_target_level;
|
||||
xSemaphoreGive(light_sem);
|
||||
return MIN(254, lvl);
|
||||
void light_driver_set_power(const bool power) {
|
||||
light_driver_set_level(power ? light_driver_get_level() : 0);
|
||||
}
|
||||
|
||||
void light_driver_identify(void) {
|
||||
const uint8_t level = light_driver_get_level();
|
||||
light_driver_set_level(MIN(level + light_identify_level_delta, 254));
|
||||
vTaskDelay(pdMS_TO_TICKS(350));
|
||||
light_driver_set_level(MAX(level - light_identify_level_delta, 0));
|
||||
vTaskDelay(pdMS_TO_TICKS(350));
|
||||
light_driver_set_level(level);
|
||||
}
|
||||
|
||||
void light_driver_task(void *pvParameter) {
|
||||
@@ -61,6 +74,7 @@ void light_driver_task(void *pvParameter) {
|
||||
|
||||
ESP_ERROR_CHECK(ledc_timer_config(&ledc_timer));
|
||||
ESP_ERROR_CHECK(ledc_channel_config(&ledc_channel));
|
||||
ESP_ERROR_CHECK(ledc_fade_func_install(0));
|
||||
static uint8_t prev_level = 0;
|
||||
|
||||
// pre-compute gamma table
|
||||
@@ -81,8 +95,8 @@ void light_driver_task(void *pvParameter) {
|
||||
ESP_LOGI(TAG, "ledc driver initialized, f=%d Hz, %d step resolution", light_pwm_freq, light_brightness_steps);
|
||||
light_driver_set_level(0);
|
||||
|
||||
while (true) {
|
||||
const uint16_t tgt = get_level();
|
||||
while (true) { // NOLINT ye its a loop
|
||||
const uint16_t tgt = light_driver_get_level();
|
||||
if (tgt != prev_level) {
|
||||
const int diff = tgt - prev_level;
|
||||
const int abs_diff = abs(diff);
|
||||
@@ -98,8 +112,4 @@ void light_driver_task(void *pvParameter) {
|
||||
}
|
||||
vTaskDelay(pdMS_TO_TICKS(20));
|
||||
}
|
||||
}
|
||||
|
||||
void light_driver_set_power(const bool power) {
|
||||
light_driver_set_level(power ? get_level() : 0);
|
||||
}
|
||||
@@ -50,6 +50,7 @@ static esp_err_t zigbee_attribute_handler(const esp_zb_zcl_set_attr_value_messag
|
||||
|
||||
case ESP_ZB_ZCL_CLUSTER_ID_IDENTIFY:
|
||||
ESP_LOGI(TAG, "Identify requested");
|
||||
light_driver_identify();
|
||||
break;
|
||||
|
||||
case ESP_ZB_ZCL_CLUSTER_ID_ON_OFF:
|
||||
@@ -163,7 +164,7 @@ void zigbee_endpoint_init(esp_zb_ep_list_t *ep_list, esp_zb_cluster_list_t *clus
|
||||
}
|
||||
|
||||
/* appearently you cant rename this? */
|
||||
void esp_zb_app_signal_handler(const esp_zb_app_signal_t* signal_s) {
|
||||
void esp_zb_app_signal_handler(esp_zb_app_signal_t* signal_s) {
|
||||
uint32_t* p_sg_p = signal_s->p_app_signal;
|
||||
const esp_err_t err_status = signal_s->esp_err_status;
|
||||
const esp_zb_app_signal_type_t sig_type = *p_sg_p;
|
||||
|
||||
Reference in New Issue
Block a user