From 7e182bb808e9b4a8601a0f7e351c40af194adf64 Mon Sep 17 00:00:00 2001 From: InfiniteYuan Date: Wed, 8 Jul 2020 15:51:47 +0800 Subject: [PATCH] ble mesh: add aligenie ble mesh example --- .../esp_ble_mesh/aligenie_demo/CMakeLists.txt | 12 + .../esp_ble_mesh/aligenie_demo/Makefile | 13 + .../esp_ble_mesh/aligenie_demo/README.md | 11 + .../components/vendor_model/CMakeLists.txt | 13 + .../components/vendor_model/component.mk | 3 + .../components/vendor_model/genie_event.c | 647 ++++++++ .../components/vendor_model/genie_mesh.c | 1096 ++++++++++++++ .../components/vendor_model/genie_model_srv.c | 629 ++++++++ .../components/vendor_model/genie_reset.c | 166 ++ .../components/vendor_model/genie_timer.c | 845 +++++++++++ .../components/vendor_model/genie_util.c | 202 +++ .../vendor_model/include/genie_dlist.h | 524 +++++++ .../vendor_model/include/genie_event.h | 101 ++ .../vendor_model/include/genie_mesh.h | 405 +++++ .../vendor_model/include/genie_model_srv.h | 63 + .../vendor_model/include/genie_reset.h | 60 + .../vendor_model/include/genie_slist.h | 467 ++++++ .../vendor_model/include/genie_timer.h | 175 +++ .../vendor_model/include/genie_util.h | 194 +++ .../aligenie_demo/main/CMakeLists.txt | 7 + .../aligenie_demo/main/Kconfig.projbuild | 88 ++ .../aligenie_demo/main/aligenie_demo.c | 1348 +++++++++++++++++ .../esp_ble_mesh/aligenie_demo/main/board.c | 227 +++ .../aligenie_demo/main/component.mk | 4 + .../aligenie_demo/main/include/board.h | 85 ++ .../esp_ble_mesh/aligenie_demo/partitions.csv | 8 + .../aligenie_demo/sdkconfig.defaults | 37 + .../tutorial/BLE_Mesh_AliGenie_Example.md | 111 ++ .../tutorial/images/configure_led.png | Bin 0 -> 33053 bytes .../tutorial/images/configure_triples_00.png | Bin 0 -> 30243 bytes .../tutorial/images/configure_triples_01.png | Bin 0 -> 22780 bytes .../tutorial/images/configure_triples_02.png | Bin 0 -> 27448 bytes .../tutorial/images/create_product.png | Bin 0 -> 16436 bytes .../tutorial/images/create_product_01.png | Bin 0 -> 29454 bytes .../tutorial/images/create_product_02.png | Bin 0 -> 61444 bytes .../tutorial/images/create_product_03.png | Bin 0 -> 78499 bytes .../tutorial/images/create_product_04.png | Bin 0 -> 272275 bytes .../tutorial/images/create_product_05.png | Bin 0 -> 131103 bytes .../tutorial/images/create_product_06.png | Bin 0 -> 136566 bytes .../tutorial/images/create_project.png | Bin 0 -> 23885 bytes .../tutorial/images/flash_monitor.png | Bin 0 -> 36783 bytes .../light_driver/CMakeLists.txt | 10 + .../common_components/light_driver/README.md | 22 + .../light_driver/component.mk | 4 + .../light_driver/include/iot_led.h | 179 +++ .../light_driver/include/iot_light.h | 162 ++ .../light_driver/include/light_driver.h | 166 ++ .../common_components/light_driver/iot_led.c | 511 +++++++ .../light_driver/iot_light.c | 518 +++++++ .../light_driver/light_driver.c | 895 +++++++++++ 50 files changed, 10008 insertions(+) create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/CMakeLists.txt create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/Makefile create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/README.md create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/CMakeLists.txt create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/component.mk create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_event.c create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_mesh.c create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_model_srv.c create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_reset.c create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_timer.c create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_util.c create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_dlist.h create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_event.h create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_mesh.h create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_model_srv.h create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_reset.h create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_slist.h create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_timer.h create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_util.h create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/main/CMakeLists.txt create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/main/Kconfig.projbuild create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/main/aligenie_demo.c create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/main/board.c create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/main/component.mk create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/main/include/board.h create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/partitions.csv create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/sdkconfig.defaults create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/BLE_Mesh_AliGenie_Example.md create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/configure_led.png create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/configure_triples_00.png create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/configure_triples_01.png create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/configure_triples_02.png create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product.png create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product_01.png create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product_02.png create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product_03.png create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product_04.png create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product_05.png create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product_06.png create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_project.png create mode 100644 examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/flash_monitor.png create mode 100644 examples/bluetooth/esp_ble_mesh/common_components/light_driver/CMakeLists.txt create mode 100644 examples/bluetooth/esp_ble_mesh/common_components/light_driver/README.md create mode 100644 examples/bluetooth/esp_ble_mesh/common_components/light_driver/component.mk create mode 100644 examples/bluetooth/esp_ble_mesh/common_components/light_driver/include/iot_led.h create mode 100644 examples/bluetooth/esp_ble_mesh/common_components/light_driver/include/iot_light.h create mode 100644 examples/bluetooth/esp_ble_mesh/common_components/light_driver/include/light_driver.h create mode 100644 examples/bluetooth/esp_ble_mesh/common_components/light_driver/iot_led.c create mode 100644 examples/bluetooth/esp_ble_mesh/common_components/light_driver/iot_light.c create mode 100644 examples/bluetooth/esp_ble_mesh/common_components/light_driver/light_driver.c diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/CMakeLists.txt b/examples/bluetooth/esp_ble_mesh/aligenie_demo/CMakeLists.txt new file mode 100644 index 0000000000..f5589aec1e --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/CMakeLists.txt @@ -0,0 +1,12 @@ +# The following lines of boilerplate have to be in your project's CMakeLists +# in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.5) + +set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/bluetooth/esp_ble_mesh/common_components/button + $ENV{IDF_PATH}/examples/bluetooth/esp_ble_mesh/common_components/light_driver + $ENV{IDF_PATH}/examples/bluetooth/esp_ble_mesh/common_components/example_init + $ENV{IDF_PATH}/examples/bluetooth/esp_ble_mesh/common_components/example_nvs) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) + +project(aligenie_demo) diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/Makefile b/examples/bluetooth/esp_ble_mesh/aligenie_demo/Makefile new file mode 100644 index 0000000000..0fb79cde2c --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/Makefile @@ -0,0 +1,13 @@ +# +# This is a project Makefile. It is assumed the directory this Makefile resides in is a +# project subdirectory. +# + +PROJECT_NAME := aligenie_demo + +EXTRA_COMPONENT_DIRS := $(IDF_PATH)/examples/bluetooth/esp_ble_mesh/common_components/button +EXTRA_COMPONENT_DIRS += $(IDF_PATH)/examples/bluetooth/esp_ble_mesh/common_components/light_driver +EXTRA_COMPONENT_DIRS += $(IDF_PATH)/examples/bluetooth/esp_ble_mesh/common_components/example_init +EXTRA_COMPONENT_DIRS += $(IDF_PATH)/examples/bluetooth/esp_ble_mesh/common_components/example_nvs + +include $(IDF_PATH)/make/project.mk diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/README.md b/examples/bluetooth/esp_ble_mesh/aligenie_demo/README.md new file mode 100644 index 0000000000..1e9899bfce --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/README.md @@ -0,0 +1,11 @@ +| Supported Targets | ESP32 | +| ----------------- | ----- | + +ESP BLE Mesh AliGenie Example +============================= + +This example shows how a BLE Mesh device work with AliGenie. + +For a better demonstration effect, an RGB LED can be soldered onto the ESP32-DevKitC board, by connecting their corresponding GPIO pins are GPIO\_NUM\_25, GPIO\_NUM\_26, GPIO\_NUM\_27. + +Please check the [tutorial](tutorial/BLE_Mesh_AliGenie_Example.md) for more information about this example. diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/CMakeLists.txt b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/CMakeLists.txt new file mode 100644 index 0000000000..df2601dcfb --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/CMakeLists.txt @@ -0,0 +1,13 @@ + +set(COMPONENT_SRCS "genie_event.c" + "genie_mesh.c" + "genie_reset.c" + "genie_util.c" + "genie_model_srv.c" + "genie_timer.c") + +set(COMPONENT_ADD_INCLUDEDIRS ". include") + +set(COMPONENT_REQUIRES bt nvs_flash example_nvs) + +register_component() diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/component.mk b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/component.mk new file mode 100644 index 0000000000..ebd7a7d59b --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/component.mk @@ -0,0 +1,3 @@ +# +# Component Makefile +# diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_event.c b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_event.c new file mode 100644 index 0000000000..ec362df687 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_event.c @@ -0,0 +1,647 @@ +// Copyright (C) 2018-2020 Alibaba Group Holding Limited +// Adaptations to ESP-IDF Copyright (c) 2020 Espressif Systems (Shanghai) Co. Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include + +#include "esp_log.h" +#include "nvs_flash.h" + +#include "esp_ble_mesh_defs.h" +#include "esp_ble_mesh_common_api.h" +#include "esp_ble_mesh_networking_api.h" +#include "esp_ble_mesh_provisioning_api.h" +#include "esp_ble_mesh_local_data_operation_api.h" + +#include "genie_util.h" +#include "genie_model_srv.h" +#include "genie_event.h" +#include "genie_mesh.h" +#include "genie_reset.h" +#include "genie_timer.h" +#include "ble_mesh_example_nvs.h" + +static const char *TAG = "genie_event"; + +extern void user_genie_event_handle(genie_event_t event, void *p_arg); +extern elem_state_t g_elem_state[]; +extern nvs_handle_t NVS_HANDLE; + +static uint8_t g_proving = 0; +static bool g_genie_provisioned = 0; +static bool g_genie_silent_adv = 0; + +/** + * @brief Execute reset action. + * + */ +static void genie_reset_provision(void) +{ + ENTER_FUNC(); + g_genie_provisioned = 0; + // erase reboot count + ble_mesh_nvs_erase(NVS_HANDLE, GENIE_STORE_RESTART_COUNT_KEY); + /* reset provision */ + ESP_ERROR_CHECK(esp_ble_mesh_node_local_reset()); +} + +/** + * @brief Handle software reset. + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_sw_reset(void) +{ + ENTER_FUNC(); + /* reset provision information */ + genie_reset_provision(); + /* restart PB-ADV and PB-GATT */ + ESP_ERROR_CHECK(esp_ble_mesh_node_prov_enable(ESP_BLE_MESH_PROV_ADV | ESP_BLE_MESH_PROV_GATT)); + + return GENIE_EVT_SDK_MESH_PBADV_START; +} + +/** + * @brief Handle hardware reset, and indicate hardware reset. + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_hw_reset_start(void) +{ + ENTER_FUNC(); +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV + if (esp_ble_mesh_node_is_provisioned()) { + genie_indicate_hw_reset_event(); // Indicate hardware reset event to genie speaker + } +#endif + genie_reset_done_timer_start(); + + return GENIE_EVT_HW_RESET_START; +} + +/** + * @brief Execute reset action + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_hw_reset_done(void) +{ + ENTER_FUNC(); + genie_reset_clean_count(); + /* reset provision information */ + genie_reset_provision(); + /* restart PB-ADV and PB-GATT */ + ESP_ERROR_CHECK(esp_ble_mesh_node_prov_enable(ESP_BLE_MESH_PROV_ADV | ESP_BLE_MESH_PROV_GATT)); + + return GENIE_EVT_SDK_MESH_PBADV_START; +} + +/** + * @brief Genie Mesh Component Init, + * 1. Handle Mesh Init according esp-ble-mesh init status + * 2. Start power indeicate if ble-mesh already provisioned + * 3. Start PB-ADV Timer if ble-mesh not provisioned + * 4. Hardware reset ble-mesh provision information if reset flag be configed. + * + * @param p_status + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_mesh_init(int *p_status) +{ + ENTER_FUNC(); + + if (g_genie_silent_adv) { + // ! note some expect behavior + return GENIE_EVT_SDK_MESH_INIT; + } + + if (*p_status == -EALREADY) { + if (!genie_reset_get_flag()) { +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV + poweron_indicate_start(); +#endif + return GENIE_EVT_SDK_MESH_PROV_SUCCESS; + } + } else if (*p_status == 0) { + return GENIE_EVT_SDK_MESH_PBADV_START; + } + + if (genie_reset_get_flag()) { + return GENIE_EVT_HW_RESET_START; + } + + return GENIE_EVT_SDK_MESH_INIT; +} + +/** + * @brief After the Bluetooth Mesh device is powered on, if it is in the unprovisioned state, + * it needs to broadcast the Unprovisioned Device Beacon, and the broadcast duration is 10 minutes by default + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_pbadv_start(void) +{ + ENTER_FUNC(); + genie_pbadv_timer_start(); + return GENIE_EVT_SDK_MESH_PBADV_START; +} + +/** + * @brief If the network is still not configured after the timeout, + * the device enters the silent broadcast state and closes the PB_GATT broadcast. + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_pbadv_timeout(void) +{ + ENTER_FUNC(); + genie_pbadv_timer_stop(); + return GENIE_EVT_SDK_MESH_SILENT_START; +} + +/** + * @brief Start silent adv + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_silent_start(void) +{ + ENTER_FUNC(); + g_genie_silent_adv = true; + genie_pbadv_start_silent_adv(); + return GENIE_EVT_SDK_MESH_SILENT_START; +} + +/** + * @brief Start provisioning + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_prov_start(void) +{ + ENTER_FUNC(); + if (g_proving == 0) { + g_proving = 1; + /* disable adv timer */ + genie_pbadv_timer_stop(); + /* enable prov timer */ + genie_prov_timer_start(); + } + return GENIE_EVT_SDK_MESH_PROV_START; +} + +/** + * @brief Provision timeout + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_prov_timeout(void) +{ + ENTER_FUNC(); + return GENIE_EVT_SDK_MESH_PROV_FAIL; +} + +/** + * @brief Provision success + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_prov_success(void) +{ + ENTER_FUNC(); + g_genie_provisioned = 1; +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV + return GENIE_EVT_SDK_STATE_SYNC; +#else + return GENIE_EVT_SDK_MESH_PROV_SUCCESS; +#endif +} + +/** + * @brief Provision fail + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_prov_fail(void) +{ + ENTER_FUNC(); + /* reset provision flag */ + g_proving = 0; + genie_reset_provision(); + /* restart PB-ADV and PB-GATT */ + ESP_ERROR_CHECK(esp_ble_mesh_node_prov_enable(ESP_BLE_MESH_PROV_ADV | ESP_BLE_MESH_PROV_GATT)); + + return GENIE_EVT_SDK_MESH_PBADV_START; +} + +/** + * @brief Sync device status. + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_sync(void) +{ + ENTER_FUNC(); +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV + g_indication_flag |= INDICATION_FLAG_ONOFF; +#endif +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + g_indication_flag |= INDICATION_FLAG_LIGHTNESS; +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + g_indication_flag |= INDICATION_FLAG_CTL; +#endif +#ifdef CONFIG_MESH_MODEL_HSL_SRV + g_indication_flag |= INDICATION_FLAG_HSL; +#endif + return GENIE_EVT_SDK_INDICATE; +} + +/** + * @brief AppKey add. + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_appkey_add(void) +{ + ENTER_FUNC(); + if (g_proving) { + g_proving = 0; + /* stop provision timer */ + genie_prov_timer_stop(); + + return GENIE_EVT_SDK_MESH_PROV_SUCCESS; + } else { + return GENIE_EVT_SDK_APPKEY_ADD; + } + return GENIE_EVT_SDK_APPKEY_ADD; +} + +/** + * @brief Subscribe address add. + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_sub_add(void) +{ + ENTER_FUNC(); + + return GENIE_EVT_SDK_SUB_ADD; +} + +/** + * @brief handle message. + * + * @param p_elem + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_analyze_msg(elem_state_t *p_elem) +{ + ENTER_FUNC(); +#ifdef CONFIG_MESH_MODEL_TRANS + if (p_elem->state.trans || p_elem->state.delay) { + if (p_elem->state.delay) { + return GENIE_EVT_SDK_DELAY_START; + } else { + return GENIE_EVT_SDK_TRANS_START; + } + } +#endif + return GENIE_EVT_SDK_ACTION_DONE; +} + +/** + * @brief Execute color change action. + * + * @param p_elem + * @param p_data + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_color_action(elem_state_t *p_elem, uint8_t *p_data) +{ + ENTER_FUNC(); + +#ifdef CONFIG_MESH_MODEL_HSL_SRV + uint16_t lightness = *p_data++; + lightness += (*p_data++ << 8); + + uint16_t hue = *p_data++; + hue += (*p_data++ << 8); + + uint16_t saturation = *p_data++; + saturation += (*p_data++ << 8); + + ESP_LOGD(TAG, "tar lightness(%d) hue(%d) saturation(%d)", p_elem->state.lightness[VALUE_TYPE_TAR], p_elem->state.hue[VALUE_TYPE_TAR], p_elem->state.saturation[VALUE_TYPE_TAR]); +#endif + + return GENIE_EVT_SDK_COLOR_ACTION; +} + +/** + * @brief action done. + * + * @param p_elem + * + * @return genie_event_t + */ +static genie_event_t genie_event_handle_action_done(elem_state_t *p_elem) +{ + ENTER_FUNC(); +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV + ESP_LOGD(TAG, "onoff cur(%d) tar(%d)", p_elem->state.onoff[VALUE_TYPE_CUR], p_elem->state.onoff[VALUE_TYPE_TAR]); + if (p_elem->state.onoff[VALUE_TYPE_CUR] != p_elem->state.onoff[VALUE_TYPE_TAR]) { + p_elem->state.onoff[VALUE_TYPE_CUR] = p_elem->state.onoff[VALUE_TYPE_TAR]; + } +#endif + +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + ESP_LOGD(TAG, "actual cur(%d) tar(%d)", p_elem->state.actual[VALUE_TYPE_CUR], p_elem->state.actual[VALUE_TYPE_TAR]); + if (p_elem->state.actual[VALUE_TYPE_CUR] != p_elem->state.actual[VALUE_TYPE_TAR]) { + p_elem->state.actual[VALUE_TYPE_CUR] = p_elem->state.actual[VALUE_TYPE_TAR]; + } +#endif + +#ifdef CONFIG_MESH_MODEL_CTL_SRV + ESP_LOGD(TAG, "temp cur(%d) tar(%d)", p_elem->state.temp[VALUE_TYPE_CUR], p_elem->state.temp[VALUE_TYPE_TAR]); + if (p_elem->state.temp[VALUE_TYPE_CUR] != p_elem->state.temp[VALUE_TYPE_TAR]) { + p_elem->state.temp[VALUE_TYPE_CUR] = p_elem->state.temp[VALUE_TYPE_TAR]; + } +#endif + +#ifdef CONFIG_MESH_MODEL_HSL_SRV + ESP_LOGD(TAG, "hue cur(%d) tar(%d)", p_elem->state.hue[VALUE_TYPE_CUR], p_elem->state.hue[VALUE_TYPE_TAR]); + if (p_elem->state.hue[VALUE_TYPE_CUR] != p_elem->state.hue[VALUE_TYPE_TAR]) { + p_elem->state.hue[VALUE_TYPE_CUR] = p_elem->state.hue[VALUE_TYPE_TAR]; + } + + ESP_LOGD(TAG, "saturation cur(%d) tar(%d)", p_elem->state.saturation[VALUE_TYPE_CUR], p_elem->state.saturation[VALUE_TYPE_TAR]); + if (p_elem->state.saturation[VALUE_TYPE_CUR] != p_elem->state.saturation[VALUE_TYPE_TAR]) { + p_elem->state.saturation[VALUE_TYPE_CUR] = p_elem->state.saturation[VALUE_TYPE_TAR]; + } + + ESP_LOGD(TAG, "lightness cur(%d) tar(%d)", p_elem->state.lightness[VALUE_TYPE_CUR], p_elem->state.lightness[VALUE_TYPE_TAR]); + if (p_elem->state.lightness[VALUE_TYPE_CUR] != p_elem->state.lightness[VALUE_TYPE_TAR]) { + p_elem->state.lightness[VALUE_TYPE_CUR] = p_elem->state.lightness[VALUE_TYPE_TAR]; + } +#endif + +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV + if (esp_ble_mesh_node_is_provisioned()) { + return GENIE_EVT_SDK_INDICATE; + } +#endif + return GENIE_EVT_SDK_ACTION_DONE; +} + +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV +/** + * @brief power on indicate. + * + * @param p_elem + * @return genie_event_t + */ +static genie_event_t genie_event_handle_poweron_indication(elem_state_t *p_elem) +{ + ENTER_FUNC(); + g_indication_flag |= INDICATION_FLAG_POWERON; + return GENIE_EVT_SDK_INDICATE; +} + +static void indicate_delay_timer_callback(void *arg) +{ + ENTER_FUNC(); + genie_standart_indication(arg); +} + +static void reset_indicate_delay_timer(elem_state_t *p_elem) +{ + ENTER_FUNC(); + static esp_timer_handle_t timer = NULL; + if (!timer) { + esp_timer_create_args_t create_args = { + .callback = indicate_delay_timer_callback, + .arg = (void *)p_elem, + .name = "delay_timer" + }; + + ESP_ERROR_CHECK(esp_timer_create(&create_args, &timer)); + } + if (esp_timer_start_once(timer, 500 * 1000) != ESP_OK) { + ESP_ERROR_CHECK(esp_timer_stop(timer)); + ESP_ERROR_CHECK(esp_timer_start_once(timer, 500 * 1000)); + } +} + +static genie_event_t genie_event_handle_indicate(elem_state_t *p_elem) +{ + ENTER_FUNC(); + if (g_indication_flag) { + reset_indicate_delay_timer(p_elem); // delay send indication to avoid data congestion + } + return GENIE_EVT_SDK_INDICATE; +} + +static genie_event_t genie_event_handle_vendor_msg(genie_model_msg_t *p_msg) +{ + ENTER_FUNC(); + genie_vendor_model_msg_handle(p_msg); + return GENIE_EVT_SDK_VENDOR_MSG; +} + +#ifdef GENIE_MODEL_VENDOR_TIMER +static genie_event_t genie_event_handle_order_msg(genie_timer_attr_data_t *attr_data) +{ + ENTER_FUNC(); +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV + if (attr_data->type == GENIE_MODEL_ATTR_ONOFF) { + g_indication_flag |= INDICATION_FLAG_ONOFF; + g_elem_state[0].state.onoff[VALUE_TYPE_TAR] = attr_data->para; +#endif +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + } else if (attr_data->type == GENIE_MODEL_ATTR_LIGHTNESS) { + g_indication_flag |= INDICATION_FLAG_LIGHTNESS; + // Todo +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + } else if (attr_data->type == GENIE_MODEL_ATTR_TEMPERATURE) { + g_indication_flag |= INDICATION_FLAG_CTL; + // Todo +#endif +#ifdef CONFIG_MESH_MODEL_HSL_SRV + } else if (attr_data->type == GENIE_MODEL_ATTR_COLOR) { + g_indication_flag |= INDICATION_FLAG_HSL; + // Todo +#endif + } +#ifdef CONFIG_MESH_MODEL_TRANS + return GENIE_EVT_SDK_TRANS_CYCLE; +#else + return GENIE_EVT_SDK_ACTION_DONE; +#endif +} +#endif /* GENIE_MODEL_VENDOR_TIMER */ + +#endif /* CONFIG_MESH_MODEL_VENDOR_SRV */ + +void genie_event(genie_event_t event, void *p_arg) +{ + uint8_t ignore_user_event = 0; + genie_event_t next_event = event; + ESP_LOGD(TAG, "genie_event event %d", event); + +#ifdef CONFIG_MESH_MODEL_TRANS + if (event != GENIE_EVT_SDK_TRANS_CYCLE) { + GENIE_MESH_EVENT_PRINT(event); + } +#endif + switch (event) { + case GENIE_EVT_SW_RESET: + next_event = genie_event_handle_sw_reset(); + break; + + case GENIE_EVT_HW_RESET_START: + genie_event_handle_hw_reset_start(); + break; + + case GENIE_EVT_HW_RESET_DONE: + next_event = genie_event_handle_hw_reset_done(); + break; + + case GENIE_EVT_SDK_MESH_INIT: + next_event = genie_event_handle_mesh_init((int *)p_arg); + p_arg = (void *)&g_elem_state[0]; // update p_arg to element state. + break; + + case GENIE_EVT_SDK_MESH_PBADV_START: + next_event = genie_event_handle_pbadv_start(); + break; + + case GENIE_EVT_SDK_MESH_PBADV_TIMEOUT: + next_event = genie_event_handle_pbadv_timeout(); + break; + + case GENIE_EVT_SDK_MESH_SILENT_START: + next_event = genie_event_handle_silent_start(); + break; + + case GENIE_EVT_SDK_MESH_PROV_START: + next_event = genie_event_handle_prov_start(); + break; + + case GENIE_EVT_SDK_MESH_PROV_TIMEOUT: + next_event = genie_event_handle_prov_timeout(); + break; + + case GENIE_EVT_SDK_MESH_PROV_SUCCESS: + next_event = genie_event_handle_prov_success(); + break; + +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV + case GENIE_EVT_SDK_STATE_SYNC: + next_event = genie_event_handle_sync(); + break; +#endif + + case GENIE_EVT_SDK_MESH_PROV_FAIL: + next_event = genie_event_handle_prov_fail(); + break; + + case GENIE_EVT_SDK_APPKEY_ADD: { + next_event = genie_event_handle_appkey_add(); + if (next_event == GENIE_EVT_SDK_MESH_PROV_SUCCESS) { + p_arg = &g_elem_state[0]; + } + break; + } + + case GENIE_EVT_SDK_APPKEY_DEL: + case GENIE_EVT_SDK_APPKEY_UPDATE: + break; + + case GENIE_EVT_SDK_NETKEY_ADD: + case GENIE_EVT_SDK_NETKEY_DEL: + case GENIE_EVT_SDK_NETKEY_UPDATE: + case GENIE_EVT_SDK_IVI_UPDATE: + break; + + case GENIE_EVT_SDK_SUB_ADD: + next_event = genie_event_handle_sub_add(); + break; + + case GENIE_EVT_SDK_SUB_DEL: + break; + + case GENIE_EVT_SDK_ANALYZE_MSG: + next_event = genie_event_handle_analyze_msg((elem_state_t *)p_arg); + break; + + case GENIE_EVT_SDK_COLOR_ACTION: + ESP_LOGD(TAG, "GENIE_EVT_SDK_COLOR_ACTION"); + next_event = genie_event_handle_color_action(&g_elem_state[0], (uint8_t *)p_arg); + break; + + case GENIE_EVT_SDK_ACTION_DONE: + ESP_LOGD(TAG, "GENIE_EVT_SDK_ACTION_DONE"); + next_event = genie_event_handle_action_done((elem_state_t *)p_arg); + break; + +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV + case GENIE_EVT_SDK_MESH_PWRON_INDC: + next_event = genie_event_handle_poweron_indication((elem_state_t *)p_arg); + p_arg = &g_elem_state[0]; + break; + + case GENIE_EVT_SDK_INDICATE: + ESP_LOGD(TAG, "GENIE_EVT_SDK_INDICATE"); + next_event = genie_event_handle_indicate((elem_state_t *)p_arg); + break; + + case GENIE_EVT_SDK_VENDOR_MSG: + ESP_LOGD(TAG, "GENIE_EVT_SDK_VENDOR_MSG"); + next_event = genie_event_handle_vendor_msg((genie_model_msg_t *)p_arg); + break; +#endif + +#ifdef GENIE_MODEL_VENDOR_TIMER + case GENIE_EVT_TIME_OUT: { + ESP_LOGD(TAG, "GENIE_EVT_TIME_OUT"); + next_event = genie_event_handle_order_msg((genie_timer_attr_data_t *)p_arg); + p_arg = &g_elem_state[0]; + break; + } +#endif + + case GENIE_EVT_APP_FAC_QUIT: + ESP_LOGD(TAG, "GENIE_EVT_APP_FAC_QUIT"); + break; + default: + ESP_LOGD(TAG, "unhandle this event"); + break; + } + + if (!ignore_user_event) { + ESP_LOGD(TAG, "post to user_genie_event_handle"); + user_genie_event_handle(event, p_arg); + } + + if (next_event != event) { + ESP_LOGD(TAG, "next_event: %d, event: %d", next_event, event); + genie_event(next_event, p_arg); + } +} diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_mesh.c b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_mesh.c new file mode 100644 index 0000000000..93f8836c58 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_mesh.c @@ -0,0 +1,1096 @@ +// Copyright (C) 2018-2020 Alibaba Group Holding Limited +// Adaptations to ESP-IDF Copyright (c) 2020 Espressif Systems (Shanghai) Co. Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +#include "esp_log.h" +#include "nvs_flash.h" + +#include "esp_ble_mesh_defs.h" +#include "esp_ble_mesh_common_api.h" +#include "esp_ble_mesh_networking_api.h" +#include "esp_ble_mesh_provisioning_api.h" +#include "esp_ble_mesh_local_data_operation_api.h" + +#include "genie_mesh.h" +#include "genie_model_srv.h" +#include "genie_event.h" +#include "genie_util.h" +#include "genie_timer.h" + +static const char *TAG = "genie_mesh"; + +extern esp_ble_mesh_elem_t elements[]; +extern void set_silent_broadcast(void); + +uint8_t g_indication_flag; + +static util_timer_t g_pbadv_timer; +static util_timer_t g_prov_timer; +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV +static util_timer_t g_indc_timer; +#endif + +#ifdef CONFIG_MESH_MODEL_TRANS +void mesh_timer_stop(elem_state_t *p_elem) +{ + util_timer_stop(&p_elem->state.delay_timer); + util_timer_stop(&p_elem->state.trans_timer); +} + +static void mesh_delay_timer_cb(void *p_timer, void *p_arg) +{ + elem_state_t *p_elem = (elem_state_t *)p_arg; + + mesh_timer_stop(p_elem); + genie_event(GENIE_EVT_SDK_DELAY_END, p_arg); +} + +void clear_trans_para(elem_state_t *p_elem) +{ + p_elem->state.trans = 0; + p_elem->state.trans_start_time = 0; + p_elem->state.trans_end_time = 0; +} + +static void mesh_trans_timer_cycle(void *p_timer, void *p_arg) +{ + elem_state_t *p_elem = (elem_state_t *)p_arg; + model_state_t *p_state = &p_elem->state; + + mesh_timer_stop(p_elem); + + // do cycle + genie_event(GENIE_EVT_SDK_TRANS_CYCLE, p_arg); + // ESP_LOGI(TAG, ">>>>>%d %d", (uint32_t)cur_time, (uint32_t)p_elem->state.trans_end_time); + + if (p_state->trans == 0) { + genie_event(GENIE_EVT_SDK_TRANS_END, p_arg); + } else { + util_timer_start(&p_state->trans_timer, GENIE_MESH_TRNSATION_CYCLE); + } +} + +uint8_t calc_cur_state(elem_state_t *p_elem) +{ + model_state_t *p_state = &p_elem->state; + uint32_t cur_time = k_uptime_get(); + uint8_t cycle = 0; + + // stop cycle when timeout + if (cur_time <= p_state->trans_end_time - GENIE_MESH_TRNSATION_CYCLE) { +#if defined(CONFIG_MESH_MODEL_LIGHTNESS_SRV) || defined(CONFIG_MESH_MODEL_CTL_SRV) + uint16_t step = (p_state->trans_end_time - cur_time) / GENIE_MESH_TRNSATION_CYCLE; +#endif + +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV + if (p_state->onoff[VALUE_TYPE_CUR] == 0 && p_state->onoff[VALUE_TYPE_TAR] == 1) { + p_state->onoff[VALUE_TYPE_CUR] = 1; + } else if (p_state->onoff[VALUE_TYPE_CUR] == 1 && p_state->onoff[VALUE_TYPE_TAR] == 0) { +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + // turn off when lightness is zero + if (p_state->actual[VALUE_TYPE_CUR] == 0) +#endif + p_state->onoff[VALUE_TYPE_CUR] = 0; + } +#endif + +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + if (p_state->actual[VALUE_TYPE_CUR] != p_state->actual[VALUE_TYPE_TAR]) { + if (p_state->actual[VALUE_TYPE_TAR] > p_state->actual[VALUE_TYPE_CUR]) { + p_state->actual[VALUE_TYPE_CUR] += (p_state->actual[VALUE_TYPE_TAR] - p_state->actual[VALUE_TYPE_CUR]) / step; + } else { + p_state->actual[VALUE_TYPE_CUR] -= (p_state->actual[VALUE_TYPE_CUR] - p_state->actual[VALUE_TYPE_TAR]) / step; + } + //model_bind_operation(B_LIGHTNESS_ID, p_elem, VALUE_TYPE_CUR); + cycle = 1; + } +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + if (p_state->temp[VALUE_TYPE_CUR] != p_state->temp[VALUE_TYPE_TAR]) { + if (p_state->temp[VALUE_TYPE_TAR] > p_state->temp[VALUE_TYPE_CUR]) { + p_state->temp[VALUE_TYPE_CUR] += (p_state->temp[VALUE_TYPE_TAR] - p_state->temp[VALUE_TYPE_CUR]) / step; + } else { + p_state->temp[VALUE_TYPE_CUR] -= (p_state->temp[VALUE_TYPE_CUR] - p_state->temp[VALUE_TYPE_TAR]) / step; + } + cycle = 1; + } +#endif + } +#if 0 + ESP_LOGI(TAG, "next: %d->%d|%02x->%02x|%02x->%02x", p_state->onoff[VALUE_TYPE_CUR], p_state->onoff[VALUE_TYPE_TAR], + p_state->actual[VALUE_TYPE_CUR], p_state->actual[VALUE_TYPE_TAR], p_state->temp[VALUE_TYPE_CUR], p_state->temp[VALUE_TYPE_TAR]); +#endif +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV + if (p_state->onoff[VALUE_TYPE_CUR] == p_state->onoff[VALUE_TYPE_TAR]) +#endif +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + if (p_state->actual[VALUE_TYPE_CUR] == p_state->actual[VALUE_TYPE_TAR]) +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + if (p_state->temp[VALUE_TYPE_CUR] == p_state->temp[VALUE_TYPE_TAR]) +#endif + cycle = 0; + + // ESP_LOGI(TAG, "cycle %d", cycle); + if (cycle == 0) { +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV + // ESP_LOGI(TAG, "onoff %d->%d", p_state->onoff[VALUE_TYPE_CUR], p_state->onoff[VALUE_TYPE_TAR]); + p_state->onoff[VALUE_TYPE_CUR] = p_state->onoff[VALUE_TYPE_TAR]; +#endif +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + //ESP_LOGI(TAG, "actual %02x->%02x", p_state->actual[VALUE_TYPE_CUR], p_state->actual[VALUE_TYPE_TAR]); + p_state->actual[VALUE_TYPE_CUR] = p_state->actual[VALUE_TYPE_TAR]; +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + // ESP_LOGI(TAG, "temp %02x->%02x", p_state->temp[VALUE_TYPE_CUR], p_state->temp[VALUE_TYPE_TAR]); + p_state->temp[VALUE_TYPE_CUR] = p_state->temp[VALUE_TYPE_TAR]; +#endif + p_state->trans = 0; + } + return cycle; +} +#endif + +static void genie_pbadv_timer_cb(void *p_timer) +{ + ENTER_FUNC(); + genie_event(GENIE_EVT_SDK_MESH_PBADV_TIMEOUT, NULL); +} + +void genie_pbadv_timer_start(void) +{ + ENTER_FUNC(); + static uint8_t inited = 0; + + if (!inited) { + util_timer_init(&g_pbadv_timer, genie_pbadv_timer_cb, NULL); + inited = 1; + } + util_timer_start(&g_pbadv_timer, GENIE_PBADV_TIMEOUT); +} + +void genie_pbadv_timer_stop(void) +{ + ENTER_FUNC(); + util_timer_stop(&g_pbadv_timer); +} + +void genie_pbadv_start_silent_adv(void) +{ + set_silent_broadcast(); + /* disable gatt adv */ + esp_ble_mesh_node_prov_disable(ESP_BLE_MESH_PROV_ADV | ESP_BLE_MESH_PROV_GATT); + esp_ble_mesh_node_prov_enable(ESP_BLE_MESH_PROV_ADV); + // todo: modify beacon interbal +} + +static void genie_prov_timer_cb(void *p_timer) +{ + ENTER_FUNC(); + genie_event(GENIE_EVT_SDK_MESH_PROV_TIMEOUT, NULL); +} + +void genie_prov_timer_start(void) +{ + ENTER_FUNC(); + static uint8_t inited = 0; + + if (!inited) { + util_timer_init(&g_prov_timer, genie_prov_timer_cb, NULL); + inited = 1; + } + util_timer_start(&g_prov_timer, GENIE_PROVISIONING_TIMEOUT); +} + +void genie_prov_timer_stop(void) +{ + ENTER_FUNC(); + util_timer_stop(&g_prov_timer); +} + +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV +static void poweron_indicate_cb(void *p_timer) +{ + ENTER_FUNC(); + genie_prov_timer_stop(); + genie_event(GENIE_EVT_SDK_MESH_PWRON_INDC, NULL); +} + +void poweron_indicate_start(void) +{ + ENTER_FUNC(); + static uint8_t inited = 0; + uint8_t random_time = 0; + + if (!inited) { + util_timer_init(&g_indc_timer, poweron_indicate_cb, NULL); + inited = 1; + } + bt_mesh_rand(&random_time, 1); +#ifdef CONFIG_MESH_MODEL_TRANS + random_time = 2000 + 8000 * random_time / 255; +#else + random_time = 500 + 9500 * random_time / 255; +#endif + ESP_LOGI(TAG, "power on indicate random: %d ms", random_time); + util_timer_start(&g_indc_timer, random_time); +} + +uint16_t genie_indicate_hw_reset_event(void) +{ + ENTER_FUNC(); + genie_model_msg_t reply_msg = {0}; + uint8_t payload[3] = {0}; + + payload[0] = GENIE_MODEL_ATTR_DEVICE_EVENT & 0xff; + payload[1] = (GENIE_MODEL_ATTR_DEVICE_EVENT >> 8) & 0xff; + payload[2] = (uint8_t)EVENT_HW_RESET; + + reply_msg.opid = GENIE_OP_ATTR_INDICATE; + reply_msg.tid = 0; + reply_msg.data = payload; + reply_msg.len = 3; + reply_msg.p_elem = &elements[0]; + reply_msg.retry_period = 120 + 300; + reply_msg.retry = GENIE_MODEL_MSG_MAX_RETRY_TIMES; + + genie_mesh_msg_send(&reply_msg); + + return 0; +} +#endif + +#ifdef GENIE_MODEL_VENDOR_TIMER +static void genie_timer_operate_status(uint8_t tid, uint16_t attr_type) +{ + ENTER_FUNC(); + uint16_t payload_len = 0; + uint8_t payload[10] = {0}; + genie_model_msg_t reply_msg = {0}; + + switch (attr_type) { + case TIMER_ATTR_UNIX_TIME: { + uint32_t unix_time = genie_timer_local_unixtime_get(); + payload_len = 2 + 4; + payload[0] = TIMER_ATTR_UNIX_TIME & 0xff; + payload[1] = (TIMER_ATTR_UNIX_TIME >> 8) & 0xff; + payload[2] = (uint8_t)(unix_time & 0xFF); + payload[3] = (uint8_t)((unix_time >> 8) & 0xFF); + payload[4] = (uint8_t)((unix_time >> 16) & 0xFF); + payload[5] = (uint8_t)((unix_time >> 24) & 0xFF); + } + break; + case TIMER_ATTR_TIMEZONE_SETTING: { + int8_t timezone = genie_timer_timezone_get(); + payload_len = 2 + 1; + payload[0] = TIMER_ATTR_TIMEZONE_SETTING & 0xff; + payload[1] = (TIMER_ATTR_TIMEZONE_SETTING >> 8) & 0xff; + payload[2] = timezone; + } + break; + case TIMER_ATTR_TIMING_SYNC: { + uint16_t period_time = 0; + uint8_t retry_delay = 0; + uint8_t retry_times = 0; + genie_timer_time_sync_get(&period_time, &retry_delay, &retry_times); + payload_len = 2 + 4; + payload[0] = TIMER_ATTR_TIMING_SYNC & 0xff; + payload[1] = (TIMER_ATTR_TIMING_SYNC >> 8) & 0xff; + payload[2] = period_time & 0xff;; + payload[3] = (period_time >> 8) & 0xff; + payload[4] = retry_delay; + payload[5] = retry_times; + } + break; + + default: + ESP_LOGW(TAG, "don't handle this attr_type"); + return; + } + reply_msg.opid = GENIE_OP_ATTR_STATUS; + reply_msg.tid = tid; + reply_msg.data = payload; + reply_msg.len = payload_len; + reply_msg.p_elem = &elements[0]; + reply_msg.retry_period = 120 + 300; + // reply_msg.retry = 1; + reply_msg.retry = GENIE_MODEL_MSG_MAX_RETRY_TIMES; + + genie_mesh_msg_send(&reply_msg); +} + +static void genie_timer_unixtime_indicate(void) +{ + ENTER_FUNC(); + genie_model_msg_t request_msg = {0}; + uint8_t payload[2] = {0}; + + payload[0] = TIMER_ATTR_UNIX_TIME & 0xff; + payload[1] = (TIMER_ATTR_UNIX_TIME >> 8) & 0xff; + + request_msg.opid = GENIE_OP_ATTR_INDICATE_TG; + request_msg.tid = 0; + request_msg.data = payload; + request_msg.len = sizeof(payload); + request_msg.p_elem = &elements[0]; + request_msg.retry_period = 120 + 300; + request_msg.retry = GENIE_MODEL_MSG_MAX_RETRY_TIMES; + + genie_mesh_msg_send(&request_msg); +} + +static void genie_timer_errcode_status(uint16_t attr_type, uint8_t err_code, uint8_t index, uint8_t tid) +{ + ENTER_FUNC(); + genie_model_msg_t reply_msg = {0}; + uint8_t payload[2 + 4] = {0}; + + payload[0] = TIMER_ATTR_ERROR_CODE & 0xff; + payload[1] = (TIMER_ATTR_ERROR_CODE >> 8) & 0xff; + payload[2] = attr_type & 0xff; + payload[3] = (attr_type >> 8) & 0xff; + payload[4] = err_code; + payload[5] = index; + + reply_msg.opid = GENIE_OP_ATTR_STATUS; + reply_msg.tid = tid; + reply_msg.data = payload; + reply_msg.len = sizeof(payload); + reply_msg.p_elem = &elements[0]; + reply_msg.retry_period = 120 + 300; + // reply_msg.retry = 1; + reply_msg.retry = GENIE_MODEL_MSG_MAX_RETRY_TIMES; + + genie_mesh_msg_send(&reply_msg); + +} + +static void genie_timer_timing_setting_event(uint8_t op, uint8_t *msg, uint16_t msg_length, uint8_t tid) +{ + ENTER_FUNC(); + struct { + uint32_t unix_time; + uint8_t index; + genie_timer_attr_data_t attr_data; + } timing_setting_attr; + + uint8_t *pmsg = msg; + uint16_t msg_len = msg_length; + + uint16_t attr_type = *pmsg++; + attr_type += (*pmsg++ << 8); + msg_len -= 2; + + if (attr_type != TIMER_ATTR_TIMING_SETTING) { + return; + } + + if (op != GENIE_OP_ATTR_SET_ACK && op != GENIE_OP_ATTR_GET_STATUS) { + return; + } + + ESP_LOGI(TAG, "msg data: "); + ESP_LOG_BUFFER_HEXDUMP(TAG, msg, msg_length, ESP_LOG_INFO); + + if (op == GENIE_OP_ATTR_SET_ACK) { + while (msg_len > 0) { + if (msg_len < sizeof(timing_setting_attr)) { + break; + } + + timing_setting_attr.index = *pmsg++; + uint32_t unixtime_tmp = (pmsg[0]) | (pmsg[1] << 8) | (pmsg[2] << 16) | (pmsg[3] << 24); + pmsg += 4; + + timing_setting_attr.unix_time = unixtime_tmp / 60 * 60; + + if (unixtime_tmp % 60 != 1) { + //return genie_timer_errcode_status(TIMER_ATTR_TIMING_SETTING, ERR_CODE_NOTSUP_ATTR_OP, + // timing_setting_attr.index, tid); + } + + timing_setting_attr.attr_data.type = (pmsg[0]) | (pmsg[1] << 8); + pmsg += 2; + + if (timing_setting_attr.attr_data.type != GENIE_MODEL_ATTR_ONOFF) { + return genie_timer_errcode_status(TIMER_ATTR_TIMING_SETTING, ERR_CODE_NOTSUP_ATTR_OP, + timing_setting_attr.index, tid); + } + + timing_setting_attr.attr_data.para = *pmsg++; + + if (timing_setting_attr.attr_data.para > 1) { + return genie_timer_errcode_status(TIMER_ATTR_TIMING_SETTING, ERR_CODE_NOTSUP_ATTR_PARAM, + timing_setting_attr.index, tid); + } + + int ret = genie_timer_start(timing_setting_attr.index, + timing_setting_attr.unix_time, + &timing_setting_attr.attr_data); + + if (ret) { + uint8_t errcode; + + if (ret == -GENIE_TIMER_ERR_INIT || ret == GENIE_TIMER_ERR_LOCALTIME_NOTSET) { + errcode = ERR_CODE_UNIXTIME; + } else if (ret == -GENIE_TIMER_ERR_INDEX) { + errcode = ERR_CODE_TIMER_INDEX; + } else if (ret == -GENIE_TIMER_ERR_NORESOURCE) { + errcode = ERR_CODE_TIMER_FULL; + } else if (ret == -GENIE_TIMER_ERR_PARAM) { + errcode = ERR_CODE_TIMER_SETTING; + } else { + errcode = ERR_CODE_UNIXTIME; + } + + return genie_timer_errcode_status(TIMER_ATTR_TIMING_SETTING, errcode, + timing_setting_attr.index, tid); + } + + msg_len -= sizeof(timing_setting_attr); + } + + } + + genie_model_msg_t reply_msg = {0}; + + reply_msg.opid = GENIE_OP_ATTR_STATUS; + reply_msg.tid = tid; + reply_msg.data = msg; + reply_msg.len = msg_length; + reply_msg.p_elem = &elements[0]; + reply_msg.retry_period = 120 + 300; + // reply_msg.retry = 1; + reply_msg.retry = GENIE_MODEL_MSG_MAX_RETRY_TIMES; + + genie_mesh_msg_send(&reply_msg); +} + +static void genie_timer_priordic_timing_setting_event(uint8_t op, uint8_t *msg, uint16_t msg_length, uint8_t tid) +{ + ENTER_FUNC(); + struct { + uint8_t index; + uint16_t prioridc_time; + uint8_t schedule; + genie_timer_attr_data_t attr_data; + } priordic_timing_attr; + + uint8_t *pmsg = msg; + uint16_t msg_len = msg_length; + + uint16_t attr_type = *pmsg++; + attr_type += (*pmsg++ << 8); + msg_len -= 2; + + if (attr_type != TIMER_ATTR_TIMING_PERIODIC_SETTING) { + return; + } + + if (op != GENIE_OP_ATTR_SET_ACK && op != GENIE_OP_ATTR_GET_STATUS) { + return; + } + + if (op == GENIE_OP_ATTR_SET_ACK) { + while (msg_len > 0) { + if (msg_len < 7) { // sizeof(priordic_timing_attr) by bytes + break; + } + + priordic_timing_attr.index = *pmsg++; + uint32_t priordic_tmp = (pmsg[0]) | (pmsg[1] << 8); + pmsg += 2; + + priordic_timing_attr.prioridc_time = priordic_tmp & 0x0FFF; + + if (((priordic_tmp >> 12) & 0x0F) != 1) { + //return genie_timer_errcode_status(TIMER_ATTR_TIMING_PERIODIC_SETTING, ERR_CODE_NOTSUP_ATTR_OP, + // priordic_timing_attr.index, tid); + } + + priordic_timing_attr.schedule = *pmsg++; + + if (priordic_timing_attr.schedule > 0x7F) { + return genie_timer_errcode_status(TIMER_ATTR_TIMING_PERIODIC_SETTING, ERR_CODE_TIMER_PRIORDIC_PARAM, + priordic_timing_attr.index, tid); + } + + priordic_timing_attr.attr_data.type = (pmsg[0]) | (pmsg[1] << 8); + pmsg += 2; + + if (priordic_timing_attr.attr_data.type != GENIE_MODEL_ATTR_ONOFF) { + return genie_timer_errcode_status(TIMER_ATTR_TIMING_PERIODIC_SETTING, ERR_CODE_NOTSUP_ATTR_OP, + priordic_timing_attr.index, tid); + } + + priordic_timing_attr.attr_data.para = *pmsg++; + + if (priordic_timing_attr.attr_data.para > 1) { + return genie_timer_errcode_status(TIMER_ATTR_TIMING_PERIODIC_SETTING, ERR_CODE_NOTSUP_ATTR_PARAM, + priordic_timing_attr.index, tid); + } + + int ret = genie_timer_periodic_start(priordic_timing_attr.index, + priordic_timing_attr.prioridc_time * 60, + priordic_timing_attr.schedule, + &priordic_timing_attr.attr_data); + + if (ret) { + uint8_t errcode = 0; + + if (ret == -GENIE_TIMER_ERR_INIT || ret == GENIE_TIMER_ERR_LOCALTIME_NOTSET) { + errcode = ERR_CODE_UNIXTIME; + } else if (ret == -GENIE_TIMER_ERR_INDEX) { + errcode = ERR_CODE_TIMER_INDEX; + } else if (ret == -GENIE_TIMER_ERR_NORESOURCE) { + errcode = ERR_CODE_TIMER_FULL; + } else if (ret == -GENIE_TIMER_ERR_PARAM) { + errcode = ERR_CODE_TIMER_SETTING; + } else { + errcode = ERR_CODE_TIMER_PRIORDIC_PARAM; + } + + return genie_timer_errcode_status(TIMER_ATTR_TIMING_PERIODIC_SETTING, errcode, + priordic_timing_attr.index, tid); + } + + msg_len -= 7; // sizeof(priordic_timing_attr) by bytes + } + + } + + genie_model_msg_t reply_msg = {0}; + + reply_msg.opid = GENIE_OP_ATTR_STATUS; + reply_msg.tid = tid; + reply_msg.data = msg; + reply_msg.len = msg_length; + reply_msg.p_elem = &elements[0]; + reply_msg.retry_period = 120 + 300; + // reply_msg.retry = 1; + reply_msg.retry = GENIE_MODEL_MSG_MAX_RETRY_TIMES; + + genie_mesh_msg_send(&reply_msg); +} + +static void genie_timer_timing_remove_event(uint8_t op, uint8_t *msg, uint16_t msg_length, uint8_t tid) +{ + ENTER_FUNC(); + uint8_t *pmsg = msg; + uint16_t msg_len = msg_length; + + uint16_t attr_type = *pmsg++; + attr_type += (*pmsg++ << 8); + msg_len -= 2; + + if (attr_type != TIMER_ATTR_TIMING_DELETE) { + return; + } + + if (op != GENIE_OP_ATTR_SET_ACK) { + return; + } + + // if (op == GENIE_OP_ATTR_SET_ACK) + while (msg_len > 0) { + uint8_t index = *pmsg++; + msg_len--; + + int ret = genie_timer_remove(index); + + if (ret) { + //return genie_timer_errcode_status(TIMER_ATTR_TIMING_DELETE, ERR_CODE_TIMER_INDEX, index, tid); + } + } + + genie_model_msg_t reply_msg = {0}; + + reply_msg.opid = GENIE_OP_ATTR_STATUS; + reply_msg.tid = tid; + reply_msg.data = msg; + reply_msg.len = msg_length; + reply_msg.p_elem = &elements[0]; + reply_msg.retry_period = 120 + 300; + // reply_msg.retry = 1; + reply_msg.retry = GENIE_MODEL_MSG_MAX_RETRY_TIMES; + + genie_mesh_msg_send(&reply_msg); +} + +static void genie_timer_timeout_indicate(uint8_t index) +{ + ENTER_FUNC(); + genie_model_msg_t request_msg = {0}; + uint8_t payload[2 + 2] = {0}; + + payload[0] = TIMER_ATTR_TIMING_TIMEOUT & 0xff; + payload[1] = (TIMER_ATTR_TIMING_TIMEOUT >> 8) & 0xff; + payload[2] = EVENT_TIMING_TIMEOUT; + payload[3] = index; + + request_msg.opid = GENIE_OP_ATTR_INDICATE; + request_msg.tid = 0; + request_msg.data = payload; + request_msg.len = sizeof(payload); + request_msg.p_elem = &elements[0]; + request_msg.retry_period = 120 + 300; + request_msg.retry = GENIE_MODEL_MSG_MAX_RETRY_TIMES; + + genie_mesh_msg_send(&request_msg); +} +#endif + +uint16_t genie_vendor_model_msg_handle(genie_model_msg_t *p_msg) +{ + ENTER_FUNC(); + uint8_t *p_data = NULL; + + if (!p_msg || !p_msg->data) { + return -1; + } + p_data = p_msg->data; + ESP_LOGI(TAG, "opcode:0x%x, tid:%d, len:%d", p_msg->opid, p_msg->tid, p_msg->len); + if (p_data && p_msg->len) { + ESP_LOGI(TAG, "payload: %s", util_hex2str(p_data, p_msg->len)); + } + + switch (p_msg->opid) { + case GENIE_OP_ATTR_INDICATE: { + //uint16_t attr_type = *p_data++ + (*p_data++ << 8); + uint16_t attr_type = *p_data++; + attr_type += (*p_data++ << 8); + ESP_LOGI(TAG, "attr_type:0x%x", attr_type); + if (attr_type == GENIE_MODEL_ATTR_DEVICE_EVENT) { + uint8_t event_id = *p_data; + switch (event_id) { + case EVENT_DEV_UP: + poweron_indicate_start(); // When receiving genie's device up status, indication device's state and device up event in sequence + break; + default: + break; + } + } + + break; + } + case GENIE_OP_ATTR_GET_STATUS: { + uint16_t attr_type = *p_data++; + attr_type += (*p_data++ << 8); + ESP_LOGI(TAG, "attr_type:0x%x", attr_type); +#ifdef GENIE_MODEL_VENDOR_TIMER + if (attr_type == TIMER_ATTR_UNIX_TIME || + attr_type == TIMER_ATTR_TIMEZONE_SETTING || + attr_type == TIMER_ATTR_TIMING_SYNC) { + genie_timer_operate_status(p_msg->tid, attr_type); + } else if (attr_type == TIMER_ATTR_TIMING_SETTING) { + genie_timer_timing_setting_event(GENIE_OP_ATTR_GET_STATUS, p_msg->data, p_msg->len, p_msg->tid); + } else if (attr_type == TIMER_ATTR_TIMING_PERIODIC_SETTING) { + genie_timer_priordic_timing_setting_event(GENIE_OP_ATTR_GET_STATUS, p_msg->data, p_msg->len, p_msg->tid); + } +#endif + break; + } + + case GENIE_OP_ATTR_SET_ACK: { + uint16_t attr_type = *p_data++; + attr_type += (*p_data++ << 8); + ESP_LOGI(TAG, "attr_type: 0x%04x", attr_type); + if (attr_type == GENIE_MODEL_ATTR_COLOR) { + genie_event(GENIE_EVT_SDK_COLOR_ACTION, (void *)p_data); + } +#ifdef GENIE_MODEL_VENDOR_TIMER + if (attr_type == TIMER_ATTR_UNIX_TIME) { + uint32_t unix_time = (p_data[0]) | (p_data[1] << 8) | (p_data[2] << 16) | (p_data[3] << 24); + p_data += 4; + genie_timer_local_time_update(unix_time); + genie_timer_operate_status(p_msg->tid, attr_type); + } else if (attr_type == TIMER_ATTR_TIMEZONE_SETTING) { + int8_t timezone = *p_data++; + genie_timer_timezone_update(timezone); + genie_timer_operate_status(p_msg->tid, attr_type); + } else if (attr_type == TIMER_ATTR_TIMING_SYNC) { + uint16_t period_time = (p_data[0]) | (p_data[1] << 8); + p_data += 2; + uint8_t retry_delay = *p_data++; + uint8_t retry_times = *p_data++; + genie_timer_time_sync_set(period_time, retry_delay, retry_times); + genie_timer_operate_status(p_msg->tid, attr_type); + } else if (attr_type == TIMER_ATTR_TIMING_SETTING) { + genie_timer_timing_setting_event(GENIE_OP_ATTR_SET_ACK, p_msg->data, p_msg->len, p_msg->tid); + } else if (attr_type == TIMER_ATTR_TIMING_PERIODIC_SETTING) { + genie_timer_priordic_timing_setting_event(GENIE_OP_ATTR_SET_ACK, p_msg->data, p_msg->len, p_msg->tid); + } else if (attr_type == TIMER_ATTR_TIMING_DELETE) { + genie_timer_timing_remove_event(GENIE_OP_ATTR_SET_ACK, p_msg->data, p_msg->len, p_msg->tid); + } +#endif + break; + } + + case GENIE_OP_ATTR_CONFIME_TG: { + uint16_t attr_type = *p_data++; + attr_type += (*p_data++ << 8); + ESP_LOGI(TAG, "attr_type: 0x%x", attr_type); +#ifdef GENIE_MODEL_VENDOR_TIMER + if (attr_type == TIMER_ATTR_UNIX_TIME) { + uint32_t unix_time = (p_data[0]) | (p_data[1] << 8) | (p_data[2] << 16) | (p_data[3] << 24); + p_data += 4; + genie_timer_local_time_update(unix_time); + } +#endif + break; + } + + default: + break; + } + + return 0; +} + +uint8_t get_seg_count(uint16_t msg_len) +{ + ENTER_FUNC(); + if (msg_len <= 11) { + return 1; + } + + msg_len -= 8; + if (msg_len % 12) { + return msg_len / 12 + 2; + } + + return msg_len / 12 + 1; +} + +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV +void genie_standart_indication(elem_state_t *p_elem) +{ + ENTER_FUNC(); + uint16_t i = 0; + uint8_t seg_count = 0; + uint8_t buff[22] = {0}; + uint8_t cur_indication_flag = g_indication_flag; + + ESP_LOGD(TAG, "start flag %02x", g_indication_flag); + + if (cur_indication_flag & INDICATION_FLAG_POWERON) { + g_indication_flag &= ~INDICATION_FLAG_POWERON; + // the device will indication all states when powerup +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV + cur_indication_flag |= INDICATION_FLAG_ONOFF; +#endif +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + cur_indication_flag |= INDICATION_FLAG_LIGHTNESS; +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + cur_indication_flag |= INDICATION_FLAG_CTL; +#endif +#ifdef CONFIG_MESH_MODEL_HSL_SRV + cur_indication_flag |= INDICATION_FLAG_HSL; +#endif + } else { +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV + if (g_indication_flag & INDICATION_FLAG_ONOFF) { + g_indication_flag &= ~INDICATION_FLAG_ONOFF; + } +#endif +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + if (g_indication_flag & INDICATION_FLAG_LIGHTNESS) { + g_indication_flag &= ~INDICATION_FLAG_LIGHTNESS; + } +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + if (g_indication_flag & INDICATION_FLAG_CTL) { + g_indication_flag &= ~INDICATION_FLAG_CTL; + } +#endif +#ifdef CONFIG_MESH_MODEL_HSL_SRV + if (g_indication_flag & INDICATION_FLAG_HSL) { + g_indication_flag &= ~INDICATION_FLAG_HSL; + } +#endif + } + ESP_LOGD(TAG, "real flag %02x", cur_indication_flag); + +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV + if (cur_indication_flag & INDICATION_FLAG_ONOFF) { + buff[i++] = GENIE_MODEL_ATTR_ONOFF & 0xff; + buff[i++] = (GENIE_MODEL_ATTR_ONOFF >> 8) & 0xff; + buff[i++] = p_elem->state.onoff[VALUE_TYPE_CUR]; + } +#endif +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + if (cur_indication_flag & INDICATION_FLAG_LIGHTNESS) { + buff[i++] = GENIE_MODEL_ATTR_LIGHTNESS & 0xff; + buff[i++] = (GENIE_MODEL_ATTR_LIGHTNESS >> 8) & 0xff; + buff[i++] = p_elem->state.actual[VALUE_TYPE_CUR] & 0xff; + buff[i++] = (p_elem->state.actual[VALUE_TYPE_CUR] >> 8) & 0xff; + } +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + if (cur_indication_flag & INDICATION_FLAG_CTL) { + buff[i++] = GENIE_MODEL_ATTR_TEMPERATURE & 0xff; + buff[i++] = (GENIE_MODEL_ATTR_TEMPERATURE >> 8) & 0xff; + buff[i++] = p_elem->state.temp[VALUE_TYPE_CUR] & 0xff; + buff[i++] = (p_elem->state.temp[VALUE_TYPE_CUR] >> 8) & 0xff; + } +#endif +#ifdef CONFIG_MESH_MODEL_HSL_SRV + if (cur_indication_flag & INDICATION_FLAG_HSL) { + buff[i++] = GENIE_MODEL_ATTR_COLOR & 0xff; + buff[i++] = (GENIE_MODEL_ATTR_COLOR >> 8) & 0xff; + buff[i++] = p_elem->state.lightness[VALUE_TYPE_CUR] & 0xff; + buff[i++] = (p_elem->state.lightness[VALUE_TYPE_CUR] >> 8) & 0xff; + buff[i++] = p_elem->state.hue[VALUE_TYPE_CUR] & 0xff; + buff[i++] = (p_elem->state.hue[VALUE_TYPE_CUR] >> 8) & 0xff; + buff[i++] = p_elem->state.saturation[VALUE_TYPE_CUR] & 0xff; + buff[i++] = (p_elem->state.saturation[VALUE_TYPE_CUR] >> 8) & 0xff; + } +#endif + if (cur_indication_flag & INDICATION_FLAG_POWERON) { + buff[i++] = GENIE_MODEL_ATTR_DEVICE_EVENT & 0xff; + buff[i++] = (GENIE_MODEL_ATTR_DEVICE_EVENT >> 8) & 0xff; + buff[i++] = EVENT_DEV_UP; + cur_indication_flag &= ~INDICATION_FLAG_POWERON; + } + ESP_LOGD(TAG, "end flag %02x", g_indication_flag); + + if (i) { + genie_model_msg_t reply_msg = {0}; + seg_count = get_seg_count(i + 4); + + reply_msg.opid = GENIE_OP_ATTR_INDICATE; + reply_msg.tid = 0; + reply_msg.data = buff; + reply_msg.len = i; + reply_msg.p_elem = &elements[p_elem->elem_index]; + reply_msg.retry_period = 120 * seg_count + 400; + if (seg_count > 1) { + reply_msg.retry_period *= 2; + } + reply_msg.retry = GENIE_MODEL_MSG_MAX_RETRY_TIMES; + + genie_mesh_msg_send(&reply_msg); + } +} +#endif + +int16_t genie_mesh_msg_send(genie_model_msg_t *p_vendor_msg) +{ + ENTER_FUNC(); + int16_t r = -1; + uint8_t opid = 0; + + if (!p_vendor_msg) { + return r; + } + + // vnedor confirm message contains 0 extra data except opid + if (!p_vendor_msg->data && !p_vendor_msg->len) { + return r; + } + + opid = p_vendor_msg->opid; + ESP_LOGD(TAG, "VND msg send: opcode:0x%x, tid:%02x, len:%d", opid, p_vendor_msg->tid, p_vendor_msg->len); + ESP_LOGD(TAG, "payload: %s", p_vendor_msg->len ? util_hex2str(p_vendor_msg->data, p_vendor_msg->len) : "empty"); + + switch (opid) { + case GENIE_OP_ATTR_STATUS: + case GENIE_OP_ATTR_INDICATE: + case GENIE_OP_ATTR_INDICATE_TG: + case GENIE_OP_ATTR_TRANS_MSG: + genie_model_msg_send(p_vendor_msg); + break; + default: + ESP_LOGW(TAG, "unknown opid:0x%x", opid); + break; + } + return 0; +} + +uint8_t elem_state_init(uint8_t state_count, elem_state_t *p_elem) +{ + ENTER_FUNC(); + uint8_t i = 0; + + while (i < state_count) { + p_elem[i].elem_index = i; +#ifdef CONFIG_MESH_MODEL_TRANS + // memcpy(&elem[i].powerup, &f_power_up[i], sizeof(model_powerup_t)); + util_timer_init(&p_elem[i].state.delay_timer, mesh_delay_timer_cb, &p_elem[i]); + util_timer_init(&p_elem[i].state.trans_timer, mesh_trans_timer_cycle, &p_elem[i]); +#endif +#ifdef CONFIG_MESH_SIMPLE_MODLE + p_elem[i].state.onoff[VALUE_TYPE_TAR] = GENIE_ONOFF_DEFAULT; +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + p_elem[i].state.actual[VALUE_TYPE_TAR] = GENIE_LIGHTNESS_DEFAULT; +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + p_elem[i].state.temp[VALUE_TYPE_TAR] = GENIE_CTL_TEMP_DEFAULT; +#endif +#ifdef CONFIG_MESH_MODEL_TRANS + p_elem[i].state.trans = 0x41; + p_elem[i].state.delay = 100; + if (p_elem[i].state.trans) { + p_elem[i].state.trans_start_time = k_uptime_get() + p_elem[i].state.delay * 5; + p_elem[i].state.trans_end_time = p_elem[i].state.trans_start_time + get_transition_time(p_elem[i].state.trans); + } +#endif +#endif + i++; + } + + return 0; +} + +#ifdef CONFIG_MESH_MODEL_TRANS // transation api +uint16_t TRANS_TIMES[] = {1, 10, 100, 6000}; + +static uint8_t get_transition_byte(uint32_t time) +{ + ENTER_FUNC(); + ESP_LOGI(TAG, "time: %d", time); + + time /= 100; + + if (time > TRANS_TIMES[3] * 62) { + return 0; + } else if (time > TRANS_TIMES[2] * 62) { + return (time / TRANS_TIMES[3]) | 0xC0; + } else if (time > TRANS_TIMES[1] * 62) { + return (time / TRANS_TIMES[2]) | 0x80; + } else if (time > TRANS_TIMES[0] * 62) { + return (time / TRANS_TIMES[1]) | 0x40; + } else { + return (time / TRANS_TIMES[0]); + } +} + +// unit is 1ms +uint32_t get_transition_time(uint8_t byte) +{ + ENTER_FUNC(); + + if ((byte & 0x3F) == 0x3F) { + ESP_LOGE(TAG, "%s ERROR, invalid 0x%02X!!!", __func__, byte); + return 0xFFFFFFFF; + } + + return (byte & 0x3F) * TRANS_TIMES[byte >> 6] * 100; +} + +uint8_t get_remain_byte(model_state_t *p_state, bool is_ack) +{ + ENTER_FUNC(); + uint8_t remain_byte = p_state->trans; + uint32_t cur_time = k_uptime_get(); + + if (!is_ack && p_state->trans_start_time < cur_time) { + cur_time -= p_state->trans_start_time; + uint32_t l_trans = get_transition_time(p_state->trans); + if (l_trans == 0xFFFFFFFF) { + remain_byte = 0x3F; + } else if (l_trans > cur_time) { + remain_byte = get_transition_byte(l_trans - cur_time); + } else { + remain_byte = 0; + } + + } + + ESP_LOGI(TAG, "remain_byte: 0x%02x", remain_byte); + + return remain_byte; +} +#endif + +#define RECV_MSG_TID_QUEUE_SIZE 5 + +#define TMALL_GENIE_UADDR_START 0x0001 +#define TMALL_GENIE_UADDR_END 0x0010 + +typedef struct { + uint8_t tid; + uint16_t addr; + uint32_t time; +} _TID_QUEUE_S; + +_TID_QUEUE_S tid_queue[RECV_MSG_TID_QUEUE_SIZE]; + +genie_error_type_t genie_msg_check_tid(uint16_t src_addr, uint8_t tid) +{ + ENTER_FUNC(); + static uint8_t cur_index = 0; + uint8_t i = cur_index; + uint8_t ri = 0; + uint32_t cur_time = k_uptime_get(); + uint32_t end_time = 0; + + if (src_addr >= TMALL_GENIE_UADDR_START && src_addr <= TMALL_GENIE_UADDR_END) { + src_addr = TMALL_GENIE_UADDR_START; + } + + while (i < cur_index + RECV_MSG_TID_QUEUE_SIZE) { + ri = i % RECV_MSG_TID_QUEUE_SIZE; + if (tid_queue[ri].tid == tid && tid_queue[ri].addr == src_addr) { + end_time = tid_queue[ri].time + 6000; + if (cur_time < end_time) { + break; + } + // ESP_LOGI(TAG, "---- cur(%lld) last(%lld)", cur_time, end_time); + } + i++; + } + if (i < cur_index + RECV_MSG_TID_QUEUE_SIZE) { + return GENIE_MESH_TID_REPEAT_ERROR; + } else { + tid_queue[cur_index].tid = tid; + tid_queue[cur_index].addr = src_addr; + tid_queue[cur_index].time = cur_time; + cur_index++; + cur_index %= RECV_MSG_TID_QUEUE_SIZE; + return GENIE_MESH_SUCCESS; + } +} + +#ifdef GENIE_MODEL_VENDOR_TIMER +static int genie_timer_event(uint8_t event, uint8_t index, genie_timer_attr_data_t *data) +{ + ENTER_FUNC(); + if (event == GENIE_TIME_EVT_TIMEOUT) { + ESP_LOGD(TAG, "timer index %d timeout", index); + genie_timer_local_time_show(); + genie_event(GENIE_EVT_TIME_OUT, data); + genie_timer_timeout_indicate(index); + } else if (event == GENIE_TIME_EVT_TIMING_SYNC) { + ESP_LOGD(TAG, "timer timing sync"); + genie_timer_unixtime_indicate(); + } + + return 0; +} +#endif + +void genie_mesh_init(void) +{ + ENTER_FUNC(); + ESP_LOGI(TAG, "Initializing genie mesh..."); + +#ifdef GENIE_MODEL_VENDOR_TIMER + genie_timer_init(genie_timer_event); +#endif +} diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_model_srv.c b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_model_srv.c new file mode 100644 index 0000000000..8a0c7a78d5 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_model_srv.c @@ -0,0 +1,629 @@ +// Copyright (C) 2018-2020 Alibaba Group Holding Limited +// Adaptations to ESP-IDF Copyright (c) 2020 Espressif Systems (Shanghai) Co. Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +#include "esp_log.h" +#include "nvs_flash.h" + +#include "esp_ble_mesh_defs.h" +#include "esp_ble_mesh_common_api.h" +#include "esp_ble_mesh_networking_api.h" +#include "esp_ble_mesh_local_data_operation_api.h" + +#include "genie_mesh.h" +#include "genie_event.h" +#include "genie_util.h" +#include "genie_timer.h" +#include "genie_model_srv.h" + +static const char *TAG = "genie_model_srv"; + +/** + * g_vnd_msg_list was used to save the unconfirmed vendor messages + * g_vnd_msg_timer was used to control when the vendor messages saved in g_vnd_msg_list will be resent + **/ +static genie_dlist_t g_vnd_msg_list = {0}; +static util_timer_t g_vnd_msg_timer = {0}; + +static void genie_model_retry_timer_cb(void *args); + +/** + * @brief Get Genie Vendor Model Appkey ID + * + * @param elem + * @param p_model + * @return uint16_t + */ +static uint16_t bt_mesh_model_get_appkey_id(esp_ble_mesh_elem_t *elem, esp_ble_mesh_model_t *p_model) +{ + ENTER_FUNC(); + + return 0; +} + +/** + * @brief Get Genie Vendor Model Netkey ID + * + * @param elem + * + * @return uint16_t + */ +static uint16_t bt_mesh_model_get_netkey_id(esp_ble_mesh_elem_t *elem) +{ + ENTER_FUNC(); + + return 0; +} + +/** @def genie_model_msg_gen_tid + * + * @brief generate tid used in vendor model message + * + * @param NULL + * + * @return tid with range of [0x80, 0xff] + */ +static uint8_t genie_model_msg_gen_tid(void) +{ + ENTER_FUNC(); + static uint8_t tid = 0x80; + + if (tid == 0xFF) { + bt_mesh_rand(&tid, 1); + tid &= 0x3F; + } else { + tid = (tid + 1) & 0x3F; + } + + return (tid | 0x80); +} + +/** @def genie_model_init + * + * @brief vendor model server related global parameter initialization + * + * @param NULL + * + * @return always return true + */ +static uint16_t genie_model_init(void) +{ + ENTER_FUNC(); + static bool init_flag = false; + + if (!init_flag) { + ESP_LOGD(TAG, "init g_vnd_msg_timer"); + util_timer_init(&g_vnd_msg_timer, genie_model_retry_timer_cb, &g_vnd_msg_list); + genie_dlist_init(&g_vnd_msg_list); + } + init_flag = true; + + return true; +} + +/** @def genie_model_msg_node_free + * + * @brief free the vendor model message node struct's memory + * + * @param pointer to the vendor model message node to be freed + * + * @return 0 for success; negative for failure + */ +static int16_t genie_model_msg_node_free(genie_model_msg_node_t *p_node) +{ + ENTER_FUNC(); + + free(p_node); + + return 0; +} + +/** @def genie_model_msg_node_generate + * + * @brief duplicate genie_model_msg_t and save to genie_model_msg_node_t + * + * @param pointer to the vendor model message to be duplicated + * + * @return pointer to genie_model_msg_node_t for success, NULL for failure + */ +static genie_model_msg_node_t *genie_model_msg_node_generate(genie_model_msg_t *p_model_msg) +{ + ENTER_FUNC(); + genie_model_msg_node_t *p_node = NULL; + + if (!p_model_msg->retry) { + p_model_msg->retry = GENIE_MODEL_MSG_DFT_RETRY_TIMES; + } else if (p_model_msg->retry > GENIE_MODEL_MSG_MAX_RETRY_TIMES) { + p_model_msg->retry = GENIE_MODEL_MSG_MAX_RETRY_TIMES; + } + + p_node = malloc(sizeof(genie_model_msg_node_t) + p_model_msg->len); + if (!p_node) { + ESP_LOGE(TAG, "malloc for genie_model_msg_node_t failed"); + return NULL; + } + + memcpy(&p_node->msg, p_model_msg, sizeof(genie_model_msg_t)); + ESP_LOGD(TAG, "p_node->msg: %p, data: %p, %p", &p_node->msg, &p_node->msg.data, &p_node->msg.data + 1); + p_node->msg.data = (uint8_t *)(&p_node->msg.data + 1); + memcpy(p_node->msg.data, p_model_msg->data, p_model_msg->len); + ESP_LOGD(TAG, "p_model_msg->data: %p, data: %s, p_node->msg.data: %p, data: %s", + p_model_msg->data, util_hex2str(p_model_msg->data, p_model_msg->len), + p_node->msg.data, util_hex2str(p_node->msg.data, p_node->msg.len)); + p_node->timeout = esp_timer_get_time() + p_model_msg->retry_period; + + p_node->left_retry = p_model_msg->retry; + + return p_node; +} + +/** @def genie_model_msg_list_append + * + * @brief duplicate genie_model_msg_t and append it to vendor model message list to be monitored + * + * @param pointer to the vendor model message to be duplicated + * + * @return 0 for success; negative for failure + */ +static int16_t genie_model_msg_list_append(genie_model_msg_t *p_model_msg) +{ + ENTER_FUNC(); + genie_model_msg_node_t *p_msg_node = NULL; + + p_msg_node = genie_model_msg_node_generate(p_model_msg); + + if (!p_msg_node) { + return -2; + } + + ESP_LOGD(TAG, "append msg: %p, opid: %x, retry: %d, head: %p, node: %p", p_model_msg, p_model_msg->opid, p_model_msg->retry, &g_vnd_msg_list, &p_msg_node->node); + if (genie_dlist_node_number(&g_vnd_msg_list) >= GENIE_VENDOR_MSG_LIST_MAXSIZE) { + ESP_LOGW(TAG, "List Full, discard!!!"); + return 0; + } + + genie_dlist_append(&g_vnd_msg_list, &p_msg_node->node); + + // Check retry timer, if timer is not started yet, start it + if (!util_timer_is_started(&g_vnd_msg_timer)) { + util_timer_start(&g_vnd_msg_timer, p_model_msg->retry_period); + } + + return 0; +} + +/** @def genie_model_retry_timer_cb + * + * @brief timeout handler for the g_vnd_msg_timer + * + * @param p_timer - pointer to the timer; args - pointer to g_vnd_msg_list + * + * @return N/A + */ +static void genie_model_retry_timer_cb(void *args) +{ + ENTER_FUNC(); + uint32_t nearest = 0; + genie_dnode_t *p_node = NULL; + genie_model_msg_node_t *p_msg_node = NULL; + genie_model_msg_t *p_msg = NULL; + genie_dlist_t *p_head = (genie_dlist_t *)args; + + ESP_LOGD(TAG, "g_vnd_msg_timer timeout, p_head: %p", p_head); + + /** + * 1. go through p_head + * 2. resend the no responsed messages if timeout happens and refresh timeout value + * */ + GENIE_DLIST_FOR_EACH_NODE(p_head, p_node) { + p_msg_node = CONTAINER_OF(p_node, genie_model_msg_node_t, node); + nearest = p_msg_node->msg.retry_period; + p_msg = &p_msg_node->msg; + ESP_LOGD(TAG, "msg: %p, opid: %d, left: %d", p_msg, p_msg->opid, p_msg_node->left_retry); + + if (p_msg_node->timeout <= esp_timer_get_time()) { + ESP_LOGD(TAG, "timeout - msg: %p, opid: %x, left: %d", p_msg, p_msg->opid, p_msg_node->left_retry); + genie_model_msg_send(p_msg); + if (--p_msg_node->left_retry <= 0) { + genie_dlist_remove(p_node); + genie_model_msg_node_free((genie_model_msg_node_t *)p_node); + break; + } + p_msg_node->timeout = esp_timer_get_time() + p_msg_node->msg.retry_period; + } else { + if (nearest > p_msg_node->timeout) { + nearest = p_msg_node->timeout; + } + } + } + + /* start new timer */ + if (!genie_dlist_is_empty(p_head)) { + util_timer_start(&g_vnd_msg_timer, nearest); + ESP_LOGD(TAG, "restart retry timer, timeout: %d", nearest); + } else { + util_timer_stop(&g_vnd_msg_timer); + ESP_LOGD(TAG, "list empty, stop timer"); + } + return; +} + +/** @def genie_model_msg_check_tid + * + * @brief check received vendor message's tid + * + * @param pointer to g_vnd_msg_list, tid of the received vendor model message + * + * @return 0 for success; negative for failure + */ +static int16_t genie_model_msg_check_tid(genie_dlist_t *p_head, uint8_t tid) +{ + ENTER_FUNC(); + genie_dnode_t *p_node = NULL; + + if (!p_head) { + return -1; + } + + if (genie_dlist_is_empty(p_head)) { + return 0; + } + + /** + * go through message list and dequeue the vendor model's message and free it if received message + * s tid equals this message's tid + * */ + GENIE_DLIST_FOR_EACH_NODE(p_head, p_node) { + genie_model_msg_t *p_msg = NULL; + genie_model_msg_node_t *p_msg_node = NULL; + + p_msg_node = CONTAINER_OF(p_node, genie_model_msg_node_t, node); + p_msg = &p_msg_node->msg; + + if (p_msg->tid == tid) { + ESP_LOGD(TAG, "dequeue msg: %p, opid: %x, retry: %2d", p_msg, p_msg->opid, p_msg->retry); + genie_dlist_remove(p_node); + genie_model_msg_node_free((genie_model_msg_node_t *)p_node); + break; + } + } + + return 0; +} + + +/** @def genie_model_msg_send + * + * @brief send the vendor model message + * + * @param pointer to the message to be sent + * + * @return 0 for success; negative for failure + */ +int16_t genie_model_msg_send(genie_model_msg_t *p_model_msg) +{ + ENTER_FUNC(); + int16_t err = -1; + bool resend_flag = false; + esp_ble_mesh_msg_ctx_t ctx = {0}; + esp_ble_mesh_model_t *p_model = esp_ble_mesh_find_vendor_model(p_model_msg->p_elem, CID_ALIBABA, GENIE_VENDOR_MODEL_SRV_ID); + + genie_model_init(); + + if (!p_model) { + ESP_LOGE(TAG, "cannot find vendor model server %p", p_model_msg->p_elem); + return err; + } + + ESP_LOGD(TAG, "p_model: 0x%p, cid: 0x%04x, id: 0x%04x, retry: %d", p_model, p_model->vnd.company_id, p_model->vnd.model_id, p_model_msg->retry); + /** + * no need to duplicate the following messages + * 1. retry <= 0 - the message won't want to be resent + * 2. tid is in valid range (0x00, 0x7F] [0xC0, 0xff] + * 3. opcode is not VENDOR_OP_ATTR_INDICATE/VENDOR_OP_ATTR_INDICATE_TG/VENDOR_OP_ATTR_TRANS_INDICATE + * 4. already duplicated or CONFIME/CONFIME_TG + * */ + if ((p_model_msg->retry > 1) && + (p_model_msg->tid >= 0x7F && p_model_msg->tid < 0xC0) && + (p_model_msg->opid != GENIE_OP_ATTR_SET_UNACK) && + (p_model_msg->opid != GENIE_OP_ATTR_CONFIME) && + (p_model_msg->opid != GENIE_OP_ATTR_CONFIME_TG) && + (p_model_msg->opid != GENIE_OP_ATTR_TRANS_MSG) && + (p_model_msg->opid != GENIE_OP_ATTR_TRANS_ACK) ) { + resend_flag = true; + ESP_LOGD(TAG, "resend_flag"); + } + /** + * only when opid is one of GENIE_OP_ATTR_CONFIME, GENIE_OP_ATTR_CONFIME_TG and GENIE_OP_ATTR_TRANS_ACK, shall we keep tid as it is + * */ + if (!(p_model_msg->tid) && + (p_model_msg->opid != GENIE_OP_ATTR_CONFIME) && + (p_model_msg->opid != GENIE_OP_ATTR_CONFIME_TG) && + (p_model_msg->opid != GENIE_OP_ATTR_TRANS_MSG) && + (p_model_msg->opid != GENIE_OP_ATTR_TRANS_ACK)) { + p_model_msg->tid = genie_model_msg_gen_tid(); + ESP_LOGD(TAG, "genie_model_msg_gen_tid"); + } + + // prepare buffer + uint8_t *data = malloc(p_model_msg->len + 1); + data[0] = p_model_msg->tid; + memcpy(data + 1, p_model_msg->data, p_model_msg->len); + + p_model_msg->retry--; + + ESP_LOGD(TAG, "p_model_msg->opid: 0x%04x, p_model_msg->data: 0x%p, len: %d, data: %s", + p_model_msg->opid, p_model_msg, p_model_msg->len, util_hex2str(p_model_msg->data, p_model_msg->len)); + + if (resend_flag) { + ESP_LOGD(TAG, "genie_model_msg_list_append"); + genie_model_msg_list_append(p_model_msg); + } + + ctx.app_idx = bt_mesh_model_get_appkey_id(p_model_msg->p_elem, p_model); + ctx.net_idx = bt_mesh_model_get_netkey_id(p_model_msg->p_elem); + ctx.addr = GENIE_RECV_ADDR; + ctx.send_ttl = BLE_MESH_TTL_DEFAULT; + ctx.send_rel = 0; + ctx.srv_send = true; + + ESP_LOGI(TAG, "vendor message send: tid: 0x%02x, retry: %02d, len: %02d, opcode: 0x%x, data: 0x%s", p_model_msg->tid, p_model_msg->retry, p_model_msg->len, p_model_msg->opid, util_hex2str(p_model_msg->data, p_model_msg->len)); + ESP_LOGD(TAG, "vendor message send: element: 0x%p, app_idx: %d, net_idx: %d, tid: 0x%02x, retry: %02d, len: %02d, opcode: 0x%x, data: 0x%s", + p_model_msg->p_elem, ctx.app_idx, ctx.net_idx, p_model_msg->tid, p_model_msg->retry, p_model_msg->len, p_model_msg->opid, util_hex2str(p_model_msg->data, p_model_msg->len)); + + err = esp_ble_mesh_server_model_send_msg(p_model, &ctx, ESP_BLE_MESH_MODEL_OP_3(p_model_msg->opid, CID_ALIBABA), p_model_msg->len + 1, data); + + if (err) { + ESP_LOGE(TAG, "mesh model send msg, err: %d", err); + } else { + ESP_LOGD(TAG, "mesh model send msg success"); + } + + if (p_model_msg->retry == 0) { + ESP_LOGW(TAG, "The message has been retried 9 times and may be lost. This is the last retry. tid: %02x", p_model_msg->tid); + } + + free(data); + + return err; +} + +/** @def genie_model_analyze + * + * @brief analyze the received message and notify genie SDK + * + * @param pointer to the received message (vendor model, context and the message buffer) and opid + * + * @return if success return 0; if fails return error no. + */ +static int16_t genie_model_analyze(esp_ble_mesh_model_t *p_model, + esp_ble_mesh_msg_ctx_t *p_ctx, + struct net_buf_simple *p_buf, + uint8_t opid) +{ + ENTER_FUNC(); + genie_model_msg_t msg = {0}; + + if (!p_model || !p_buf) { + return GENIE_MESH_ANALYZE_ARGS_ERROR; + } + + if (p_buf->len < 3) { + ESP_LOGE(TAG, "invalid buf len: %d", p_buf->len); + return GENIE_MESH_ANALYZE_SIZE_ERROR; + } + + memset(&msg, 0, sizeof(genie_model_msg_t)); + + msg.opid = opid; + msg.tid = net_buf_simple_pull_u8(p_buf); + + if (genie_msg_check_tid(p_ctx->addr, msg.tid) != GENIE_MESH_SUCCESS) { + ESP_LOGE(TAG, "GENIE_MESH_TID_REPEAT_ERROR src_addr: 0x%04x, tid: 0x%02x", p_ctx->addr, msg.tid); + return GENIE_MESH_TID_REPEAT_ERROR; + } + + msg.len = p_buf->len; + ESP_LOGD(TAG, "opcode: 0x%x, tid: %02x, len: %d", msg.opid, msg.tid, msg.len); + + if (msg.len) { + msg.data = (uint8_t *)p_buf->data; + net_buf_simple_pull(p_buf, msg.len); + ESP_LOGD(TAG, "payload: %s", util_hex2str(msg.data, msg.len)); + } else { + msg.data = NULL; + } + + genie_event(GENIE_EVT_SDK_VENDOR_MSG, (void *)&msg); + + return 0; +} + +/** @def genie_model_get_status + * + * @brief handle GENIE_OP_ATTR_GET_STATUS message + * + * @param pointer to the received message (vendor model, context and the message buffer) + * + * @return N/A + */ +static void genie_model_get_status(esp_ble_mesh_model_t *model, + esp_ble_mesh_msg_ctx_t *ctx, + struct net_buf_simple *buf) +{ + ENTER_FUNC(); + genie_model_analyze(model, ctx, buf, GENIE_OP_ATTR_GET_STATUS); +} + +/** @def genie_model_set_ack + * + * @brief handle GENIE_OP_ATTR_SET_ACK message + * + * @param pointer to the received message (vendor model, context and the message buffer) + * + * @return N/A + */ +static void genie_model_set_ack(esp_ble_mesh_model_t *model, + esp_ble_mesh_msg_ctx_t *ctx, + struct net_buf_simple *buf) +{ + ENTER_FUNC(); + genie_model_analyze(model, ctx, buf, GENIE_OP_ATTR_SET_ACK); +} + +/** @def genie_model_set_unack + * + * @brief handle GENIE_OP_ATTR_SET_UNACK message + * + * @param pointer to the received message (vendor model, context and the message buffer) + * + * @return N/A + */ +static void genie_model_set_unack(esp_ble_mesh_model_t *model, + esp_ble_mesh_msg_ctx_t *ctx, + struct net_buf_simple *buf) +{ + ENTER_FUNC(); + genie_model_analyze(model, ctx, buf, GENIE_OP_ATTR_SET_UNACK); +} + +/** @def genie_model_confirm + * + * @brief handle GENIE_OP_ATTR_CONFIME message + * + * @param pointer to the received message (vendor model, context and the message buffer) + * + * @return N/A + */ +static void genie_model_confirm(esp_ble_mesh_model_t *model, + esp_ble_mesh_msg_ctx_t *ctx, + struct net_buf_simple *buf) +{ + ENTER_FUNC(); + uint8_t tid = 0x0; + + if (buf->len != 1) { + ESP_LOGE(TAG, "invalid buf len: %d", buf->len); + return; + } + + tid = net_buf_simple_pull_u8(buf); + ESP_LOGI(TAG, "confirm tid: %02x", tid); + genie_model_msg_check_tid(&g_vnd_msg_list, tid); +} + +/** @def genie_model_confirm_tg + * + * @brief handle GENIE_OP_ATTR_CONFIME_TG message + * + * @param pointer to the received message (vendor model, context and the message buffer) + * + * @return N/A + */ +static void genie_model_confirm_tg(esp_ble_mesh_model_t *model, + esp_ble_mesh_msg_ctx_t *ctx, + struct net_buf_simple *buf) +{ + ENTER_FUNC(); + uint8_t tid = 0x0; + + if (buf->len != 1) { + ESP_LOGE(TAG, "invalid buf len: %d", buf->len); + return; + } + + tid = net_buf_simple_pull_u8(buf); + ESP_LOGI(TAG, "confirm_tg tid: %02x", tid); + genie_model_msg_check_tid(&g_vnd_msg_list, tid); +} + +/** @def genie_model_transparent + * + * @brief handle GENIE_OP_ATTR_TRANS_MSG message + * + * @param pointer to the received message (vendor model, context and the message buffer) + * + * @return N/A + */ +static void genie_model_transparent(esp_ble_mesh_model_t *model, + esp_ble_mesh_msg_ctx_t *ctx, + struct net_buf_simple *buf) +{ + ENTER_FUNC(); + genie_model_analyze(model, ctx, buf, GENIE_OP_ATTR_TRANS_MSG); +} + +/** @def genie_model_transparent_ack + * + * @brief handle GENIE_OP_ATTR_TRANS_ACK message + * + * @param pointer to the received message (vendor model, context and the message buffer) + * + * @return N/A + */ +static void genie_model_transparent_ack(esp_ble_mesh_model_t *model, + esp_ble_mesh_msg_ctx_t *ctx, + struct net_buf_simple *buf) +{ + ENTER_FUNC(); + uint8_t tid = 0x0; + + if (buf->len != 1) { + ESP_LOGE(TAG, "invalid buf len: %d", buf->len); + return; + } + + tid = net_buf_simple_pull_u8(buf); + genie_model_msg_check_tid(&g_vnd_msg_list, tid); +} + +static genie_opcode_cb_t genie_opcode_cb[] = { + {GENIE_MESSAGE_OP_ATTR_GET_STATUS, genie_model_get_status}, + {GENIE_MESSAGE_OP_ATTR_SET_ACK, genie_model_set_ack}, + {GENIE_MESSAGE_OP_ATTR_SET_UNACK, genie_model_set_unack}, + {GENIE_MESSAGE_OP_ATTR_CONFIRMATION, genie_model_confirm}, + {GENIE_MESSAGE_OP_ATTR_CONFIRMATION_TG, genie_model_confirm_tg}, + {GENIE_MESSAGE_OP_ATTR_TRANSPARENT_MSG, genie_model_transparent}, + {GENIE_MESSAGE_OP_ATTR_TRANSPARENT_ACK, genie_model_transparent_ack}, +}; + +/** + * @brief Dispatch message according opcode. + * + * @param opcode + * @param model + * @param ctx + * @param msg + * @param length + */ +void genie_model_dispatch(uint32_t opcode, esp_ble_mesh_model_t *model, + esp_ble_mesh_msg_ctx_t *ctx, uint8_t *msg, uint16_t length) +{ + ENTER_FUNC(); + + NET_BUF_SIMPLE_DEFINE(buf, length); + memcpy(buf.__buf, msg, length); + buf.len = length; + + for (uint8_t i = 0; i < ARRAY_SIZE(genie_opcode_cb); i++) { + if (genie_opcode_cb[i].opcode == opcode) { + genie_opcode_cb[i].cb(model, ctx, &buf); + return; + } + } + ESP_LOGW(TAG, "not find callback function for opcode: 0x%04x", opcode); +} diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_reset.c b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_reset.c new file mode 100644 index 0000000000..d8cc6078f0 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_reset.c @@ -0,0 +1,166 @@ +// Copyright (C) 2018-2020 Alibaba Group Holding Limited +// Adaptations to ESP-IDF Copyright (c) 2020 Espressif Systems (Shanghai) Co. Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include + +#include "esp_ble_mesh_defs.h" +#include "esp_ble_mesh_common_api.h" +#include "esp_ble_mesh_networking_api.h" +#include "esp_ble_mesh_local_data_operation_api.h" + +#include "genie_mesh.h" +#include "genie_reset.h" +#include "genie_event.h" +#include "genie_util.h" +#include "ble_mesh_example_nvs.h" + +static const char *TAG = "genie_reset"; +extern nvs_handle_t NVS_HANDLE; + +util_timer_t g_genie_reset_timer; + +// 1:need reset 0:no reset +uint8_t g_genie_reset_flag = 0; + +uint8_t genie_reset_get_flag(void) +{ + return g_genie_reset_flag; +} + +/** + * @brief Set reset flag + * + * @param flag + */ +static void genie_reset_set_flag(uint8_t flag) +{ + g_genie_reset_flag = flag; +} + +/** + * @brief Reset timer callback timeout, Send event to genie event to handle reset action. + * + * @param p_timer + */ +static void genie_reset_done_timer_cb(void *p_timer) +{ + ENTER_FUNC(); + genie_event(GENIE_EVT_HW_RESET_DONE, NULL); +} + +void genie_reset_done_timer_start(void) +{ + ENTER_FUNC(); + util_timer_init(&g_genie_reset_timer, genie_reset_done_timer_cb, NULL); + util_timer_start(&g_genie_reset_timer, GENIE_RESET_WAIT_DONE_TIMEOUT); +} + +/** + * @brief Store reboot count in flash. + * + * @param count + * + * @return esp_err_t + */ +static esp_err_t genie_reset_write_count(uint8_t count) +{ + ENTER_FUNC(); + uint8_t data = count; + esp_err_t ret = ESP_OK; + + ret = ble_mesh_nvs_store(NVS_HANDLE, GENIE_STORE_RESTART_COUNT_KEY, &data, sizeof(uint8_t)); + if (ret != ESP_OK) { + ESP_LOGW(TAG, "Save the number of restarts within the set time"); + } + + return ret; +} + +/** + * @brief Read reboot count from flash. + * + * @param p_count + * @return esp_err_t + */ +static esp_err_t genie_reset_read_count(uint8_t *p_count) +{ + ENTER_FUNC(); + bool exist = false; + esp_err_t ret = ESP_OK; + + ret = ble_mesh_nvs_restore(NVS_HANDLE, GENIE_STORE_RESTART_COUNT_KEY, p_count, sizeof(uint8_t), &exist); + if (ret != ESP_OK) { + ESP_LOGW(TAG, "Load the number of restarts within the set time"); + } + + return ret; +} + +/** + * @brief GENIE_RESET_BY_REPEAT_TIMEOUT + * + * @param p_timer + */ +static void genie_reset_timer_cb(void *p_timer) +{ + ENTER_FUNC(); + uint8_t number = 0; + + genie_reset_write_count(number); +} + +void genie_reset_clean_count(void) +{ + genie_reset_write_count(0); + genie_reset_set_flag(0); +} + +void genie_reset_by_repeat_init(void) +{ + ENTER_FUNC(); + uint8_t count = 0; + esp_err_t flash_err = ESP_OK; + + /* we should check flash flag first */ + flash_err = genie_reset_read_count(&count); + if (flash_err != ESP_OK) { + ESP_LOGE(TAG, "flash read err"); + count = 0; + } + + ESP_LOGI(TAG, "read count %d", count); + + count++; + if (count == GENIE_RESET_BY_REPEAT_COUNTER) { + ESP_LOGI(TAG, "Genie Event Reset By Repeat Notify"); + genie_event(GENIE_EVT_RESET_BY_REPEAT_NOTIFY, NULL); + } + + /* update number and check if exceeded */ + if (count < GENIE_RESET_BY_REPEAT_COUNTER) { + genie_reset_write_count(count); + util_timer_init(&g_genie_reset_timer, genie_reset_timer_cb, NULL); + util_timer_start(&g_genie_reset_timer, GENIE_RESET_BY_REPEAT_TIMEOUT); + } else { + //genie_event(GENIE_EVT_HW_RESET, NULL); + ESP_LOGW(TAG, "genie_reset_set_flag need reset node"); + genie_reset_set_flag(1); + util_timer_init(&g_genie_reset_timer, genie_reset_timer_cb, NULL); + util_timer_start(&g_genie_reset_timer, GENIE_RESET_BY_REPEAT_TIMEOUT); + } + EXIT_FUNC(); +} diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_timer.c b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_timer.c new file mode 100644 index 0000000000..2b3adc8308 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_timer.c @@ -0,0 +1,845 @@ +// Copyright (C) 2018-2020 Alibaba Group Holding Limited +// Adaptations to ESP-IDF Copyright (c) 2020 Espressif Systems (Shanghai) Co. Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include + +#include "genie_mesh.h" +#include "genie_event.h" +#include "genie_util.h" +#include "genie_timer.h" +#include "genie_model_srv.h" +#include "ble_mesh_example_nvs.h" + +#define DAY 86400 +#define HOUR 3600 +#define MINU 60 + +#define VT_NUM (40) +#define VT_LOCK util_semaphore_take(&g_genie_timer.lock, -1) +#define VT_UNLOCK util_semaphore_give(&g_genie_timer.lock) + +extern nvs_handle_t NVS_HANDLE; + +static const char *TAG = "genie_timer"; + +static utc_time_t local_time = {0}; + +typedef enum { + TIMER_OFF = 0, + TIMER_ON = 1, + TIMER_INVAILD = 0xf, +} vt_state; + +struct genie_timer_t { + genie_snode_t next; + uint8_t index; + uint8_t state: 4; + uint8_t periodic: 1; + uint16_t periodic_time; + uint8_t schedule; + uint32_t unixtime_match; + genie_timer_attr_data_t attr_data; +}; + +struct unixtime_sync_para_t { + uint16_t period_time; // Synchronization period: Time synchronization request cycle. + uint8_t retry_delay; // Retry delay: How long to retry after a failed time synchronization request + uint8_t retry_times; // Retry times of time synchronization request +}; + +struct { + uint16_t magic; + int8_t timezone; + struct unixtime_sync_para_t timing_sync_config; // Time synchronization parameters + struct genie_timer_t timer_data[VT_NUM]; // Store Timing operation +} g_timing_data; + +struct { + uint32_t init: 1; + uint32_t update: 1; + esp_timer_handle_t timer; + struct k_work work; + util_semaphore_t lock; + genie_slist_t timer_list_active; + genie_slist_t timer_list_idle; + uint32_t unix_time; + uint32_t unix_time_sync_match; + uint8_t unix_time_sync_retry_times; + genie_timer_event_func_t cb; +} g_genie_timer; + +static inline uint8_t is_leap_year(uint16_t year); + +utc_time_t genie_timer_local_time_get(void) +{ + return local_time; +} + +uint32_t genie_timer_local_unixtime_get(void) +{ + return g_genie_timer.unix_time; +} + +static inline utc_time_t convert_unix_to_utc(uint32_t unix_time) +{ + uint16_t g_noleap_daysbeforemonth[13] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365}; + + utc_time_t utc = {0}; + uint32_t epoch = 0; + uint32_t jdn = 0; + int year = 0; + int month = 0; + int day = 0; + int hour = 0; + int minutes = 0; + int sec = 0; + int weekday = 0; + + epoch = unix_time; + + jdn = epoch / DAY; + epoch -= DAY * jdn; + + weekday = (jdn + 4) % 7; // 1970/1/1 is thursday + + hour = epoch / HOUR; + epoch -= HOUR * hour; + + minutes = epoch / MINU; + epoch -= MINU * minutes; + + sec = epoch; + + year = jdn / (4 * 365 + 1); /* Number of 4-years periods since the epoch */ + jdn -= year * (4 * 365 + 1); /* Remaining days */ + year <<= 2; /* Years since the epoch */ + + /* Then we will brute force the next 0-3 years */ + bool leapyear; + int tmp; + + for (; ;) { + /* Is this year a leap year (we'll need this later too) */ + leapyear = is_leap_year(year + 1970); + + /* Get the number of days in the year */ + tmp = (leapyear ? 366 : 365); + + /* Do we have that many days? */ + if (jdn >= tmp) { + /* Yes.. bump up the year */ + year++; + jdn -= tmp; + } else { + /* Nope... then go handle months */ + break; + } + } + + /* At this point, value has the year and days has number days into this year */ + year += 1970; + + /* Handle the month (zero based) */ + int min = 0; + int max = 11; + int value = 0; + + do { + /* Get the midpoint */ + value = (min + max) >> 1; + + /* Get the number of days that occurred before the beginning of the month + * following the midpoint. + */ + tmp = g_noleap_daysbeforemonth[value + 1]; + if (value + 1 >= 2 && is_leap_year(leapyear)) { + tmp++; + } + + /* Does the number of days before this month that equal or exceed the + * number of days we have remaining? + */ + if (tmp > jdn) { + /* Yes.. then the month we want is somewhere from 'min' and to the + * midpoint, 'value'. Could it be the midpoint? + */ + tmp = g_noleap_daysbeforemonth[value]; + if (value >= 2 && is_leap_year(leapyear)) { + tmp++; + } + + if (tmp > jdn) { + /* No... The one we want is somewhere between min and value-1 */ + max = value - 1; + } else { + /* Yes.. 'value' contains the month that we want */ + break; + } + } else { + /* No... The one we want is somwhere between value+1 and max */ + min = value + 1; + } + + /* If we break out of the loop because min == max, then we want value + * to be equal to min == max. + */ + value = min; + } while (min < max); + + /* The selected month number is in value. Subtract the number of days in the + * selected month + */ + tmp = g_noleap_daysbeforemonth[value]; + + if (value >= 2 && is_leap_year(leapyear)) { + tmp++; + } + + jdn -= tmp; + + /* At this point, value has the month into this year (zero based) and days has + * number of days into this month (zero based) + */ + month = value; // zero based + day = jdn + 1; // one based + + utc.year = year; + utc.month = month; + utc.day = day; + utc.weekday = weekday; + utc.hour = hour; + utc.minutes = minutes; + utc.seconds = sec; + + return utc; +} + +static inline uint32_t convert_utc_to_unix(utc_time_t *utc_time) +{ + uint32_t days; + uint16_t g_noleap_daysbeforemonth[13] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365}; + + days = (utc_time->year - 1970) * 365; + days += (utc_time->year - 1969) >> 2; + + days += g_noleap_daysbeforemonth[utc_time->month]; + + if (utc_time->month >= 2 && is_leap_year(utc_time->year)) { + days++; + } + + days += utc_time->day - 1; + + return ((days * 24 + utc_time->hour) * 60 + utc_time->minutes) * 60 + utc_time->seconds; +} + +static inline uint8_t is_leap_year(uint16_t year) +{ + if (((year % 4) == 0) && ((year % 100) != 0)) { + return 1; + } else if ((year % 400) == 0) { + return 1; + } else { + return 0; + } +} + +static inline void month_update(void) +{ + local_time.month++; + + if (local_time.month >= 12) { + local_time.month = 0; + local_time.year++; + } +} + +static inline void days_update(void) +{ + uint8_t month_days_list[12] = { + 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, + }; + + local_time.day++; + + if (is_leap_year(local_time.year)) { + month_days_list[1] = 29; + } + + uint8_t month_day = month_days_list[local_time.month]; + + if (local_time.day > month_day) { + local_time.day = 0; + month_update(); + } + + local_time.weekday = (local_time.weekday + 1) % 7; +} + +static inline void hours_update(void) +{ + local_time.hour++; + + if (local_time.hour == 24) { + local_time.hour = 0; + days_update(); + } +} + +static inline void minutes_update(void) +{ + local_time.minutes++; + + if (local_time.minutes == 60) { + local_time.minutes = 0; + hours_update(); + } +} + +static inline void seconds_update(void) +{ + local_time.seconds++; + + if (local_time.seconds == 60) { + local_time.seconds = 0; + minutes_update(); + } +} + +static void genie_timer_update(void *args) +{ + if (!g_genie_timer.update) { + ESP_LOGE(TAG, "g_genie_timer.update %d", g_genie_timer.update); + return; + } + + g_genie_timer.unix_time += 1; + seconds_update(); + + k_work_submit(&g_genie_timer.work); + + if (g_genie_timer.unix_time % 60 == 0) { + ESP_LOGI(TAG, "genie_timer_update %d", g_genie_timer.unix_time); + } +} + +static inline uint8_t next_weekday_diff_get(uint8_t weekday_now, uint8_t schedule) +{ + uint16_t schedule_tmp = 0; + + if (weekday_now == 0) { + weekday_now = 7; + } + + schedule_tmp = ((schedule | ((uint16_t) schedule << 7)) >> (weekday_now - 1)) & 0x7f; + + uint8_t day_diff = 0; + + while (day_diff < 7) { + if ((schedule_tmp >> day_diff) & 0x0001) { + break; + } + day_diff++; + } + + return day_diff; +} + +static inline uint8_t is_weekday_match(uint8_t weekday_now, uint8_t schedule) +{ + uint8_t weekday_mask = weekday_now ? (uint8_t)(1 << (weekday_now - 1)) : (uint8_t)(1 << 6); + return (weekday_mask == (schedule & weekday_mask)); +} + +static inline uint8_t next_weekday(uint8_t weekday_now) +{ + return (weekday_now + 1) % 7; +} + +static int genie_timer_save(void) +{ +#ifdef GENIE_VENDOR_TIMER_STORE + int ret = 0; + + ret = ble_mesh_nvs_store(NVS_HANDLE, GENIE_STORE_VENDOR_TIMER, &g_timing_data, sizeof(g_timing_data)); + if (ret) { + ESP_LOGI(TAG, "vendor timers save fail %d", ret); + } + + return ret; +#else + return -1; +#endif +} + +static int genie_timer_restore(void) +{ +#ifdef GENIE_VENDOR_TIMER_STORE + int ret = 0; + bool exist = false; + + memset(&g_timing_data, 0, sizeof(g_timing_data)); + + ret = ble_mesh_nvs_restore(NVS_HANDLE, GENIE_STORE_VENDOR_TIMER, &g_timing_data, sizeof(g_timing_data), &exist); + if (ret) { + ESP_LOGI(TAG, "vendor timers restore fail %d", ret); + return ret; + } + + if (g_timing_data.magic != 0xABCD + || g_timing_data.timezone < -12 + || g_timing_data.timezone > 12) { + ESP_LOGI(TAG, "vendor timers restore missmatch"); + return -1; + } + + for (int i = 0; i < VT_NUM; i++) { + if (g_timing_data.timer_data[i].state != TIMER_INVAILD) { + genie_slist_append(&g_genie_timer.timer_list_active, &g_timing_data.timer_data[i].next); + } else { + genie_slist_append(&g_genie_timer.timer_list_idle, &g_timing_data.timer_data[i].next); + } + + ESP_LOGI(TAG, "restore vendor timer index %d state %d periodic %d periodic_time %d schedule %d unixtime_match %d", + g_timing_data.timer_data[i].index, g_timing_data.timer_data[i].state, + g_timing_data.timer_data[i].periodic, g_timing_data.timer_data[i].periodic_time, + g_timing_data.timer_data[i].schedule, g_timing_data.timer_data[i].unixtime_match); + } + + return 0; +#else + return -1; +#endif +} + +static uint8_t is_genie_timer_timeout(struct genie_timer_t *vendor_timer) +{ + if (vendor_timer->state == TIMER_INVAILD) { + return 0; + } + + if (vendor_timer->periodic) { + if (is_weekday_match(local_time.weekday, vendor_timer->schedule) + && vendor_timer->unixtime_match < g_genie_timer.unix_time) { + vendor_timer->unixtime_match += (1 + next_weekday_diff_get(next_weekday(local_time.weekday), vendor_timer->schedule)) * DAY; + } + } + + return vendor_timer->unixtime_match == g_genie_timer.unix_time; +} + +static void genie_timer_check(void) +{ + struct genie_timer_t *tmp, *node; + GENIE_SLIST_FOR_EACH_CONTAINER_SAFE(&g_genie_timer.timer_list_active, node, tmp, next) { + if (is_genie_timer_timeout(node)) { + if (g_genie_timer.cb) { + g_genie_timer.cb(GENIE_TIME_EVT_TIMEOUT, node->index, &node->attr_data); + } + + VT_LOCK; + + if (!node->periodic) { + node->unixtime_match = 0xffffffff; + node->state = TIMER_INVAILD; + genie_slist_find_and_remove(&g_genie_timer.timer_list_active, &node->next); + genie_slist_append(&g_genie_timer.timer_list_idle, &node->next); + } else { + node->unixtime_match += 24 * HOUR; + } + + VT_UNLOCK; + genie_timer_save(); + } + } + + if (g_genie_timer.unix_time_sync_match + && g_genie_timer.unix_time_sync_match <= g_genie_timer.unix_time) { + if (g_genie_timer.cb) { + int ret = g_genie_timer.cb(GENIE_TIME_EVT_TIMING_SYNC, 0, NULL); + + if (ret) { + if (g_genie_timer.unix_time_sync_retry_times > 0) { + g_genie_timer.unix_time_sync_match += g_timing_data.timing_sync_config.retry_delay * MINU; + g_genie_timer.unix_time_sync_retry_times--; + return; + } + } + } + + g_genie_timer.unix_time_sync_match = g_genie_timer.unix_time + g_timing_data.timing_sync_config.period_time * MINU; + g_genie_timer.unix_time_sync_retry_times = g_timing_data.timing_sync_config.retry_times; + } +} + +static void genie_timer_check_work(struct k_work *work) +{ + genie_timer_check(); +} + +static genie_timer_handle_t genie_timer_find(uint8_t index) +{ + ENTER_FUNC(); + if (index >= VT_NUM) { + return NULL; + } + + VT_LOCK; + struct genie_timer_t *tmp, *node = NULL; + genie_slist_t *list = NULL; + list = &g_genie_timer.timer_list_active; + + GENIE_SLIST_FOR_EACH_CONTAINER_SAFE(list, node, tmp, next) { + if (node->index == index) { + VT_UNLOCK; + return node; + } + } + VT_UNLOCK; + + return NULL; +} + +static struct genie_timer_t *genie_timer_new(void) +{ + ENTER_FUNC(); + struct genie_timer_t *free_timer = NULL; + VT_LOCK; + free_timer = (struct genie_timer_t *)genie_slist_get(&g_genie_timer.timer_list_idle); + VT_UNLOCK; + ESP_LOGI(TAG, "timer new %p", free_timer); + return free_timer; +} + +int genie_timer_start(uint8_t index, uint32_t unix_time, genie_timer_attr_data_t *attr_data) +{ + ENTER_FUNC(); + struct genie_timer_t *vendor_timer = NULL; + + if (!attr_data) { + return -GENIE_TIMER_ERR_PARAM; + } + + ESP_LOGI(TAG, "timer start index %d expect unix_time %d attr_type %d", + index, unix_time, attr_data->type); + + if (!g_genie_timer.init) { + return -GENIE_TIMER_ERR_INIT; + } + + if (!g_genie_timer.update) { + return -GENIE_TIMER_ERR_LOCALTIME_NOTSET; + } + + if (index >= VT_NUM) { + //return -GENIE_TIMER_ERR_INDEX; + } + + if (unix_time <= g_genie_timer.unix_time) { + return -GENIE_TIMER_ERR_PARAM; + } + + vendor_timer = genie_timer_find(index); + + if (vendor_timer == NULL) { + vendor_timer = genie_timer_new(); + + if (vendor_timer == NULL) { + return -GENIE_TIMER_ERR_NORESOURCE; + } + } else { + VT_LOCK; + genie_slist_find_and_remove(&g_genie_timer.timer_list_active, &vendor_timer->next); + VT_UNLOCK; + } + + vendor_timer->index = index; + vendor_timer->unixtime_match = unix_time; // + g_genie_timer.timezone * HOUR; + vendor_timer->state = TIMER_ON; + vendor_timer->attr_data.type = attr_data->type; + vendor_timer->attr_data.para = attr_data->para; + + VT_LOCK; + genie_slist_append(&g_genie_timer.timer_list_active, &vendor_timer->next); + VT_UNLOCK; + + genie_timer_save(); + + return 0; +} + +int genie_timer_periodic_start(uint8_t index, uint16_t periodic_time, uint8_t schedule, genie_timer_attr_data_t *attr_data) +{ + ENTER_FUNC(); + struct genie_timer_t *vendor_timer = NULL; + + ESP_LOGI(TAG, "periodic timer start index %d periodic_time %d schedule %d attr_para %d", + index, periodic_time, schedule, attr_data->para); + + if (!g_genie_timer.init) { + return -GENIE_TIMER_ERR_INIT; + } + + if (!g_genie_timer.update) { + return -GENIE_TIMER_ERR_LOCALTIME_NOTSET; + } + + if (index >= VT_NUM) { + //return -GENIE_TIMER_ERR_INDEX; + } + + if (schedule == 0) { + return -GENIE_TIMER_ERR_PARAM; + } + + vendor_timer = genie_timer_find(index); + + if (vendor_timer == NULL) { + vendor_timer = genie_timer_new(); + + if (vendor_timer == NULL) { + return -GENIE_TIMER_ERR_NORESOURCE; + } + } else { + VT_LOCK; + genie_slist_find_and_remove(&g_genie_timer.timer_list_active, &vendor_timer->next); + VT_UNLOCK; + } + + vendor_timer->index = index; + vendor_timer->periodic = 1; + vendor_timer->periodic_time = periodic_time; + vendor_timer->schedule = schedule; + vendor_timer->state = TIMER_ON; + + utc_time_t utc = local_time; + utc.hour = 0; + utc.minutes = 0; + utc.seconds = 0; + utc.day = utc.day + next_weekday_diff_get(local_time.weekday, schedule); + + vendor_timer->unixtime_match = convert_utc_to_unix(&utc) + periodic_time - g_timing_data.timezone * HOUR; + + ESP_LOGI(TAG, "periodic timer unixtime_match %d", vendor_timer->unixtime_match); + + VT_LOCK; + genie_slist_append(&g_genie_timer.timer_list_active, &vendor_timer->next); + VT_UNLOCK; + genie_timer_save(); + return 0; +} + +static int genie_timer_stop(int8_t index) +{ + ENTER_FUNC(); + ESP_LOGI(TAG, "timer stop %d", index); + + if (!g_genie_timer.init) { + return -GENIE_TIMER_ERR_INIT; + } + + if (!g_genie_timer.update) { + return -GENIE_TIMER_ERR_LOCALTIME_NOTSET; + } + + if (index >= VT_NUM) { + return -GENIE_TIMER_ERR_INDEX; + } + + struct genie_timer_t *vendor_timer = genie_timer_find(index); + + if (vendor_timer == NULL) { + return -GENIE_TIMER_ERR_INDEX; + } else { + VT_LOCK; + vendor_timer->index = 0xFF; + vendor_timer->state = TIMER_INVAILD; + vendor_timer->unixtime_match = 0; + genie_slist_find_and_remove(&g_genie_timer.timer_list_active, &vendor_timer->next); + genie_slist_append(&g_genie_timer.timer_list_idle, &vendor_timer->next); + VT_UNLOCK; + } + + return 0; +} + +int genie_timer_remove(uint8_t index) +{ + ENTER_FUNC(); + int i = 0; + int ret = 0; + + ESP_LOGI(TAG, "timer remove %d", index); + + /* remove alll timers */ + if (index == 0xFF) { + for (i = 0; i < VT_NUM; i++) { + genie_timer_stop(i); + } + + return 0; + } + + ret = genie_timer_stop(index); + + genie_timer_save(); + + return ret; +} + +void genie_timer_local_time_show(void) +{ + ENTER_FUNC(); + ESP_LOGI(TAG, "unix_time revert %d", convert_utc_to_unix(&local_time)); + ESP_LOGI(TAG, "%4d/%2d/%2d %2d:%2d:%d weekday %2d %04d", + local_time.year, local_time.month + 1, local_time.day, + local_time.hour, local_time.minutes, local_time.seconds, + local_time.weekday, g_timing_data.timezone); +} + +int genie_timer_timezone_update(int8_t timezone) +{ + ENTER_FUNC(); + ESP_LOGI(TAG, "timezone update %d", timezone); + + if (timezone < -12 || timezone > 12) { + return -GENIE_TIMER_ERR_PARAM; + } + + if (!g_genie_timer.init) { + return -GENIE_TIMER_ERR_INIT; + } + + g_timing_data.timezone = timezone; + + return 0; +} + +int8_t genie_timer_timezone_get(void) +{ + ENTER_FUNC(); + + return g_timing_data.timezone; +} + +int genie_timer_time_sync_set(uint16_t period_time, uint8_t retry_delay, uint8_t retry_times) +{ + ENTER_FUNC(); + ESP_LOGI(TAG, "timing sync set period_time %d retry_delay %d retry_times %d", + period_time, retry_delay, retry_times); + + if (period_time == 0 || retry_delay == 0 || retry_times) { + return -GENIE_TIMER_ERR_PARAM; + } + + g_timing_data.timing_sync_config.period_time = period_time; + g_timing_data.timing_sync_config.retry_delay = retry_delay; + g_timing_data.timing_sync_config.retry_times = retry_times; + + g_genie_timer.unix_time_sync_match = g_genie_timer.unix_time + g_timing_data.timing_sync_config.period_time * MINU; + g_genie_timer.unix_time_sync_retry_times = retry_times; + + return 0; +} + +int genie_timer_time_sync_get(uint16_t *period_time, uint8_t *retry_delay, uint8_t *retry_times) +{ + ENTER_FUNC(); + + *period_time = g_timing_data.timing_sync_config.period_time; + *retry_delay = g_timing_data.timing_sync_config.retry_delay; + *retry_times = g_timing_data.timing_sync_config.retry_times; + + return 0; +} + +int genie_timer_local_time_update(uint32_t unix_time) +{ + ENTER_FUNC(); + if (!g_genie_timer.init) { + ESP_LOGE(TAG, "g_genie_timer not init"); + return -GENIE_TIMER_ERR_INIT; + } + + g_genie_timer.update = 1; + g_genie_timer.unix_time = unix_time; + + local_time = convert_unix_to_utc(unix_time + g_timing_data.timezone * HOUR); + + ESP_LOGI(TAG, "unix_time %d", unix_time); + ESP_LOGI(TAG, "localtime update %4d/%2d/%2d %2d:%2d:%d weekday %2d", + local_time.year, local_time.month + 1, local_time.day, + local_time.hour, local_time.minutes, local_time.seconds, + local_time.weekday); + ESP_LOGI(TAG, "unix_time revert %d", convert_utc_to_unix(&local_time)); + + return 0; +} + +int genie_timer_init(genie_timer_event_func_t cb) +{ + ENTER_FUNC(); + int i = 0; + + if (g_genie_timer.init) { + return 0; + } + + if (cb == NULL) { + return -GENIE_TIMER_ERR_INIT; + } + + memset(&g_genie_timer, 0, sizeof(g_genie_timer)); + memset(&local_time, 0, sizeof(local_time)); + + g_genie_timer.cb = cb; + + genie_slist_init(&g_genie_timer.timer_list_active); + genie_slist_init(&g_genie_timer.timer_list_idle); + + util_semaphore_init(&g_genie_timer.lock, 1, 1); + + k_work_init(&g_genie_timer.work, genie_timer_check_work); + + esp_timer_create_args_t create_args = { + .callback = genie_timer_update, + .name = "genie_timer" + }; + + ESP_ERROR_CHECK(esp_timer_create(&create_args, &g_genie_timer.timer)); + ESP_ERROR_CHECK(esp_timer_start_periodic(g_genie_timer.timer, 1000 * 1000)); + + g_genie_timer.init = 1; + + if (genie_timer_restore()) { + memset(&g_timing_data, 0, sizeof(g_timing_data)); + g_timing_data.timezone = 8; + g_timing_data.magic = 0xABCD; + + for (i = 0; i < VT_NUM; i++) { + g_timing_data.timer_data[i].unixtime_match = 0xffffffff; + g_timing_data.timer_data[i].index = 0xFF; + g_timing_data.timer_data[i].state = TIMER_INVAILD; + genie_slist_append(&g_genie_timer.timer_list_idle, &g_timing_data.timer_data[i].next); + } + } + + /* sync timing */ + g_genie_timer.cb(GENIE_TIME_EVT_TIMING_SYNC, 0, NULL); + + return 0; +} diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_util.c b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_util.c new file mode 100644 index 0000000000..ef173cd66a --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/genie_util.c @@ -0,0 +1,202 @@ +// Copyright (C) 2018-2020 Alibaba Group Holding Limited +// Adaptations to ESP-IDF Copyright (c) 2020 Espressif Systems (Shanghai) Co. Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include + +#include "esp_log.h" + +#include "genie_mesh.h" +#include "genie_util.h" + +static const char *TAG = "genie_util"; + +void util_timer_init(util_timer_t *timer, util_timer_handler_t handle, void *args) +{ + ENTER_FUNC(); + int ret = 0; + + if (NULL == timer) { + ESP_LOGE(TAG, "timer is NULL"); + return; + } + + ESP_LOGD(TAG, "timer: %p, handle: %p, args: %p", timer, handle, args); + + esp_timer_create_args_t create_args = { + .callback = handle, + .arg = args, + .name = "genie_timer" + }; + + timer->handler = handle; + timer->args = args; + timer->timeout = 0; + + ret = esp_timer_create(&create_args, &timer->timer); + + if (ret) { + ESP_LOGE(TAG, "fail to create a timer, err: %d", ret); + } +} + +void util_timer_start(util_timer_t *timer, uint32_t timeout) +{ + ENTER_FUNC(); + int ret = 0; + + if (NULL == timer) { + ESP_LOGE(TAG, "timer is NULL"); + return; + } + + ESP_LOGD(TAG, "timer: %p, timeout: %u", timer, timeout); + + util_timer_stop(timer); + + timer->timeout = timeout; + timer->start_ms = (uint32_t)esp_timer_get_time(); + + ret = esp_timer_start_once(timer->timer, timeout * 1000); + + if (ret) { + ESP_LOGE(TAG, "fail to change timeout and start timer, err: %d", ret); + } +} + +void util_timer_stop(util_timer_t *timer) +{ + ENTER_FUNC(); + int ret = 0; + + if (NULL == timer) { + ESP_LOGE(TAG, "timer is NULL"); + return; + } + /** + * Timer may be reused, so its timeout value + * should be cleared when stopped. + */ + if (!timer->timeout) { + return; + } + + ESP_LOGD(TAG, "timer: %p", timer); + ret = esp_timer_stop(timer->timer); + if (ret) { + ESP_LOGD(TAG, "fail to stop timer, err: %d", ret); + } + + timer->timeout = 0; +} + +bool util_timer_is_started(util_timer_t *timer) +{ + ENTER_FUNC(); + + if (NULL == timer) { + ESP_LOGE(TAG, "timer is NULL"); + return false; + } + + return timer->timeout ? true : false; +} + +int util_semaphore_init(util_semaphore_t *sem, uint32_t initial_count, + uint32_t limit) +{ + ENTER_FUNC(); + int ret = 0; + + if (NULL == sem) { + ESP_LOGE(TAG, "sem is NULL"); + return -EINVAL; + } + + sem->sem = xSemaphoreCreateCounting(limit, initial_count); + + return ret; +} + +int util_semaphore_take(util_semaphore_t *sem, uint32_t timeout) +{ + ENTER_FUNC(); + TickType_t ticks = 0; + + if (timeout == K_FOREVER) { + ticks = portMAX_DELAY; + } else { + ticks = pdMS_TO_TICKS(timeout); + } + + return xSemaphoreTake(sem->sem, ticks); +} + +int util_semaphore_give(util_semaphore_t *sem) +{ + ENTER_FUNC(); + if (NULL == sem) { + ESP_LOGE(TAG, "sem is NULL"); + return -EINVAL; + } + + xSemaphoreGive(sem->sem); + + return 0; +} + +int util_semaphore_delete(util_semaphore_t *sem) +{ + ENTER_FUNC(); + if (NULL == sem) { + ESP_LOGE(TAG, "sem is NULL"); + return -EINVAL; + } + + vSemaphoreDelete(sem->sem); + + return 0; +} + +uint32_t util_semaphore_count_get(util_semaphore_t *sem) +{ + ENTER_FUNC(); + uint32_t count = 0; + + count = uxSemaphoreGetCount(sem->sem); + + return count; +} + +const char *util_hex2str(const void *buf, size_t len) +{ + ENTER_FUNC(); + int i = 0; + const u8_t *b = buf; + static char str[129] = {0}; + static const char hex[] = "0123456789abcdef"; + + len = MIN(len, (sizeof(str) - 1) / 2); + + for (i = 0; i < len; i++) { + str[i * 2] = hex[b[i] >> 4]; + str[i * 2 + 1] = hex[b[i] & 0xf]; + } + + str[i * 2] = '\0'; + + return str; +} diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_dlist.h b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_dlist.h new file mode 100644 index 0000000000..4ef36d0da6 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_dlist.h @@ -0,0 +1,524 @@ +/* + * Copyright (c) 2013-2015 Wind River Systems, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file + * @brief Doubly-linked list implementation + * + * Doubly-linked list implementation using inline macros/functions. + * This API is not thread safe, and thus if a list is used across threads, + * calls to functions must be protected with synchronization primitives. + * + * The lists are expected to be initialized such that both the head and tail + * pointers point to the list itself. Initializing the lists in such a fashion + * simplifies the adding and removing of nodes to/from the list. + */ + +#ifndef _GENIE_DLIST_H_ +#define _GENIE_DLIST_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +struct genie_dnode { + union { + struct genie_dnode *head; /* ptr to head of list (genie_dlist_t) */ + struct genie_dnode *next; /* ptr to next node (genie_dnode_t) */ + }; + union { + struct genie_dnode *tail; /* ptr to tail of list (genie_dlist_t) */ + struct genie_dnode *prev; /* ptr to previous node (genie_dnode_t) */ + }; +}; + +typedef struct genie_dnode genie_dlist_t; +typedef struct genie_dnode genie_dnode_t; + +/** + * @brief Provide the primitive to iterate on a list + * Note: the loop is unsafe and thus __dn should not be removed + * + * User _MUST_ add the loop statement curly braces enclosing its own code: + * + * GENIE_DLIST_FOR_EACH_NODE(l, n) { + * + * } + * + * This and other SYS_DLIST_*() macros are not thread safe. + * + * @param __dl A pointer on a genie_dlist_t to iterate on + * @param __dn A genie_dnode_t pointer to peek each node of the list + */ +#define GENIE_DLIST_FOR_EACH_NODE(__dl, __dn) \ + for (__dn = genie_dlist_peek_head(__dl); __dn; \ + __dn = genie_dlist_peek_next(__dl, __dn)) + +/** + * @brief Provide the primitive to iterate on a list, from a node in the list + * Note: the loop is unsafe and thus __dn should not be removed + * + * User _MUST_ add the loop statement curly braces enclosing its own code: + * + * GENIE_DLIST_ITERATE_FROM_NODE(l, n) { + * + * } + * + * Like GENIE_DLIST_FOR_EACH_NODE(), but __dn already contains a node in the list + * where to start searching for the next entry from. If NULL, it starts from + * the head. + * + * This and other SYS_DLIST_*() macros are not thread safe. + * + * @param __dl A pointer on a genie_dlist_t to iterate on + * @param __dn A genie_dnode_t pointer to peek each node of the list; + * it contains the starting node, or NULL to start from the head + */ +#define GENIE_DLIST_ITERATE_FROM_NODE(__dl, __dn) \ + for (__dn = __dn ? genie_dlist_peek_next_no_check(__dl, __dn) \ + : genie_dlist_peek_head(__dl); \ + __dn; \ + __dn = genie_dlist_peek_next(__dl, __dn)) + +/** + * @brief Provide the primitive to safely iterate on a list + * Note: __dn can be removed, it will not break the loop. + * + * User _MUST_ add the loop statement curly braces enclosing its own code: + * + * GENIE_DLIST_FOR_EACH_NODE_SAFE(l, n, s) { + * + * } + * + * This and other SYS_DLIST_*() macros are not thread safe. + * + * @param __dl A pointer on a genie_dlist_t to iterate on + * @param __dn A genie_dnode_t pointer to peek each node of the list + * @param __dns A genie_dnode_t pointer for the loop to run safely + */ +#define GENIE_DLIST_FOR_EACH_NODE_SAFE(__dl, __dn, __dns) \ + for (__dn = genie_dlist_peek_head(__dl), \ + __dns = genie_dlist_peek_next(__dl, __dn); \ + __dn; __dn = __dns, \ + __dns = genie_dlist_peek_next(__dl, __dn)) + +/* + * @brief Provide the primitive to resolve the container of a list node + * Note: it is safe to use with NULL pointer nodes + * + * @param __dn A pointer on a genie_dnode_t to get its container + * @param __cn Container struct type pointer + * @param __n The field name of genie_dnode_t within the container struct + */ +#define GENIE_DLIST_CONTAINER(__dn, __cn, __n) \ + (__dn ? CONTAINER_OF(__dn, __typeof__(*__cn), __n) : NULL) +/* + * @brief Provide the primitive to peek container of the list head + * + * @param __dl A pointer on a genie_dlist_t to peek + * @param __cn Container struct type pointer + * @param __n The field name of genie_dnode_t within the container struct + */ +#define GENIE_DLIST_PEEK_HEAD_CONTAINER(__dl, __cn, __n) \ + GENIE_DLIST_CONTAINER(genie_dlist_peek_head(__dl), __cn, __n) + +/* + * @brief Provide the primitive to peek the next container + * + * @param __dl A pointer on a genie_dlist_t to peek + * @param __cn Container struct type pointer + * @param __n The field name of genie_dnode_t within the container struct + */ +#define GENIE_DLIST_PEEK_NEXT_CONTAINER(__dl, __cn, __n) \ + ((__cn) ? GENIE_DLIST_CONTAINER(genie_dlist_peek_next(__dl, &(__cn->__n)), \ + __cn, __n) : NULL) + +/** + * @brief Provide the primitive to iterate on a list under a container + * Note: the loop is unsafe and thus __cn should not be detached + * + * User _MUST_ add the loop statement curly braces enclosing its own code: + * + * GENIE_DLIST_FOR_EACH_CONTAINER(l, c, n) { + * + * } + * + * @param __dl A pointer on a genie_dlist_t to iterate on + * @param __cn A pointer to peek each entry of the list + * @param __n The field name of genie_dnode_t within the container struct + */ +#define GENIE_DLIST_FOR_EACH_CONTAINER(__dl, __cn, __n) \ + for (__cn = GENIE_DLIST_PEEK_HEAD_CONTAINER(__dl, __cn, __n); __cn; \ + __cn = GENIE_DLIST_PEEK_NEXT_CONTAINER(__dl, __cn, __n)) + +/** + * @brief Provide the primitive to safely iterate on a list under a container + * Note: __cn can be detached, it will not break the loop. + * + * User _MUST_ add the loop statement curly braces enclosing its own code: + * + * GENIE_DLIST_FOR_EACH_CONTAINER_SAFE(l, c, cn, n) { + * + * } + * + * @param __dl A pointer on a genie_dlist_t to iterate on + * @param __cn A pointer to peek each entry of the list + * @param __cns A pointer for the loop to run safely + * @param __n The field name of genie_dnode_t within the container struct + */ +#define GENIE_DLIST_FOR_EACH_CONTAINER_SAFE(__dl, __cn, __cns, __n) \ + for (__cn = GENIE_DLIST_PEEK_HEAD_CONTAINER(__dl, __cn, __n), \ + __cns = GENIE_DLIST_PEEK_NEXT_CONTAINER(__dl, __cn, __n); __cn; \ + __cn = __cns, \ + __cns = GENIE_DLIST_PEEK_NEXT_CONTAINER(__dl, __cn, __n)) + +/** + * @brief initialize list + * + * @param list the doubly-linked list + * + * @return N/A + */ + +static inline void genie_dlist_init(genie_dlist_t *list) +{ + list->head = (genie_dnode_t *)list; + list->tail = (genie_dnode_t *)list; +} + +#define GENIE_DLIST_STATIC_INIT(ptr_to_list) {{(ptr_to_list)}, {(ptr_to_list)}} + +/** + * @brief check if a node is the list's head + * + * @param list the doubly-linked list to operate on + * @param node the node to check + * + * @return 1 if node is the head, 0 otherwise + */ + +static inline int genie_dlist_is_head(genie_dlist_t *list, genie_dnode_t *node) +{ + return list->head == node; +} + +/** + * @brief check if a node is the list's tail + * + * @param list the doubly-linked list to operate on + * @param node the node to check + * + * @return 1 if node is the tail, 0 otherwise + */ + +static inline int genie_dlist_is_tail(genie_dlist_t *list, genie_dnode_t *node) +{ + return list->tail == node; +} + +/** + * @brief check if the list is empty + * + * @param list the doubly-linked list to operate on + * + * @return 1 if empty, 0 otherwise + */ + +static inline int genie_dlist_is_empty(genie_dlist_t *list) +{ + return list->head == list; +} + +/** + * @brief get node number in dlist + * + * @param list the doubly-linked list to operate on + * + * @return number + */ + +static inline int genie_dlist_node_number(genie_dlist_t *list) +{ + int number = 0; + genie_dnode_t *node; + + if (genie_dlist_is_empty(list)) + return number; + + node = list->head; + while (node) { + number++; + + if (node == list->tail) + break; + + node = node->next; + } + + return number; +} + +/** + * @brief check if more than one node present + * + * This and other sys_dlist_*() functions are not thread safe. + * + * @param list the doubly-linked list to operate on + * + * @return 1 if multiple nodes, 0 otherwise + */ + +static inline int genie_dlist_has_multiple_nodes(genie_dlist_t *list) +{ + return list->head != list->tail; +} + +/** + * @brief get a reference to the head item in the list + * + * @param list the doubly-linked list to operate on + * + * @return a pointer to the head element, NULL if list is empty + */ + +static inline genie_dnode_t *genie_dlist_peek_head(genie_dlist_t *list) +{ + return genie_dlist_is_empty(list) ? NULL : list->head; +} + +/** + * @brief get a reference to the head item in the list + * + * The list must be known to be non-empty. + * + * @param list the doubly-linked list to operate on + * + * @return a pointer to the head element + */ + +static inline genie_dnode_t *genie_dlist_peek_head_not_empty(genie_dlist_t *list) +{ + return list->head; +} + +/** + * @brief get a reference to the next item in the list, node is not NULL + * + * Faster than genie_dlist_peek_next() if node is known not to be NULL. + * + * @param list the doubly-linked list to operate on + * @param node the node from which to get the next element in the list + * + * @return a pointer to the next element from a node, NULL if node is the tail + */ + +static inline genie_dnode_t *genie_dlist_peek_next_no_check(genie_dlist_t *list, + genie_dnode_t *node) +{ + return (node == list->tail) ? NULL : node->next; +} + +/** + * @brief get a reference to the next item in the list + * + * @param list the doubly-linked list to operate on + * @param node the node from which to get the next element in the list + * + * @return a pointer to the next element from a node, NULL if node is the tail + * or NULL (when node comes from reading the head of an empty list). + */ + +static inline genie_dnode_t *genie_dlist_peek_next(genie_dlist_t *list, + genie_dnode_t *node) +{ + return node ? genie_dlist_peek_next_no_check(list, node) : NULL; +} + +/** + * @brief get a reference to the tail item in the list + * + * @param list the doubly-linked list to operate on + * + * @return a pointer to the tail element, NULL if list is empty + */ + +static inline genie_dnode_t *genie_dlist_peek_tail(genie_dlist_t *list) +{ + return genie_dlist_is_empty(list) ? NULL : list->tail; +} + +/** + * @brief add node to tail of list + * + * This and other sys_dlist_*() functions are not thread safe. + * + * @param list the doubly-linked list to operate on + * @param node the element to append + * + * @return N/A + */ + +static inline void genie_dlist_append(genie_dlist_t *list, genie_dnode_t *node) +{ + node->next = list; + node->prev = list->tail; + + list->tail->next = node; + list->tail = node; +} + +/** + * @brief add node to head of list + * + * This and other sys_dlist_*() functions are not thread safe. + * + * @param list the doubly-linked list to operate on + * @param node the element to append + * + * @return N/A + */ + +static inline void genie_dlist_prepend(genie_dlist_t *list, genie_dnode_t *node) +{ + node->next = list->head; + node->prev = list; + + list->head->prev = node; + list->head = node; +} + +/** + * @brief insert node after a node + * + * Insert a node after a specified node in a list. + * This and other sys_dlist_*() functions are not thread safe. + * + * @param list the doubly-linked list to operate on + * @param insert_point the insert point in the list: if NULL, insert at head + * @param node the element to append + * + * @return N/A + */ + +static inline void genie_dlist_insert_after(genie_dlist_t *list, + genie_dnode_t *insert_point, genie_dnode_t *node) +{ + if (!insert_point) { + genie_dlist_prepend(list, node); + } else { + node->next = insert_point->next; + node->prev = insert_point; + insert_point->next->prev = node; + insert_point->next = node; + } +} + +/** + * @brief insert node before a node + * + * Insert a node before a specified node in a list. + * This and other sys_dlist_*() functions are not thread safe. + * + * @param list the doubly-linked list to operate on + * @param insert_point the insert point in the list: if NULL, insert at tail + * @param node the element to insert + * + * @return N/A + */ + +static inline void genie_dlist_insert_before(genie_dlist_t *list, + genie_dnode_t *insert_point, genie_dnode_t *node) +{ + if (!insert_point) { + genie_dlist_append(list, node); + } else { + node->prev = insert_point->prev; + node->next = insert_point; + insert_point->prev->next = node; + insert_point->prev = node; + } +} + +/** + * @brief insert node at position + * + * Insert a node in a location depending on a external condition. The cond() + * function checks if the node is to be inserted _before_ the current node + * against which it is checked. + * This and other sys_dlist_*() functions are not thread safe. + * + * @param list the doubly-linked list to operate on + * @param node the element to insert + * @param cond a function that determines if the current node is the correct + * insert point + * @param data parameter to cond() + * + * @return N/A + */ + +static inline void genie_dlist_insert_at(genie_dlist_t *list, genie_dnode_t *node, + int (*cond)(genie_dnode_t *, void *), void *data) +{ + if (genie_dlist_is_empty(list)) { + genie_dlist_append(list, node); + } else { + genie_dnode_t *pos = genie_dlist_peek_head(list); + + while (pos && !cond(pos, data)) { + pos = genie_dlist_peek_next(list, pos); + } + genie_dlist_insert_before(list, pos, node); + } +} + +/** + * @brief remove a specific node from a list + * + * The list is implicit from the node. The node must be part of a list. + * This and other sys_dlist_*() functions are not thread safe. + * + * @param node the node to remove + * + * @return N/A + */ + +static inline void genie_dlist_remove(genie_dnode_t *node) +{ + node->prev->next = node->next; + node->next->prev = node->prev; +} + +/** + * @brief get the first node in a list + * + * This and other sys_dlist_*() functions are not thread safe. + * + * @param list the doubly-linked list to operate on + * + * @return the first node in the list, NULL if list is empty + */ + +static inline genie_dnode_t *genie_dlist_get(genie_dlist_t *list) +{ + genie_dnode_t *node; + + if (genie_dlist_is_empty(list)) { + return NULL; + } + + node = list->head; + genie_dlist_remove(node); + return node; +} + +#ifdef __cplusplus +} +#endif + +#endif /* _GENIE_DLIST_H_ */ diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_event.h b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_event.h new file mode 100644 index 0000000000..0d9cd3fd49 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_event.h @@ -0,0 +1,101 @@ +// Copyright (C) 2018-2020 Alibaba Group Holding Limited +// Adaptations to ESP-IDF Copyright (c) 2020 Espressif Systems (Shanghai) Co. Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef _GENIE_EVENT_H_ +#define _GENIE_EVENT_H_ + +#ifdef __cplusplus +extern "C" { +#endif /**< __cplusplus */ + +typedef enum { + /* START--- Don't add new ID before this one */ + GENIE_EVT_START = 0, + + /* Reset Related Operation */ + GENIE_EVT_SW_RESET = GENIE_EVT_START, /* triggered from cloud */ + GENIE_EVT_HW_RESET_START, /* triggered from user */ + GENIE_EVT_HW_RESET_DONE, /*triggered by reset by repeat module */ + + /* SDK triggered event, with prefix of GENIE_EVT_SDK_MESH_ */ + GENIE_EVT_SDK_START, + GENIE_EVT_SDK_MESH_INIT = GENIE_EVT_SDK_START, + GENIE_EVT_SDK_MESH_PBADV_START, + GENIE_EVT_SDK_MESH_PBADV_TIMEOUT, + GENIE_EVT_SDK_MESH_SILENT_START, + + GENIE_EVT_SDK_MESH_PROV_START, + GENIE_EVT_SDK_MESH_PROV_TIMEOUT, + GENIE_EVT_SDK_MESH_PROV_SUCCESS, + GENIE_EVT_SDK_MESH_PROV_FAIL, + + GENIE_EVT_SDK_APPKEY_ADD, + GENIE_EVT_SDK_APPKEY_DEL, + GENIE_EVT_SDK_APPKEY_UPDATE, + GENIE_EVT_SDK_NETKEY_ADD, + GENIE_EVT_SDK_NETKEY_DEL, + GENIE_EVT_SDK_NETKEY_UPDATE, + GENIE_EVT_SDK_SUB_ADD, + GENIE_EVT_SDK_SUB_DEL, + GENIE_EVT_SDK_HB_SET, + GENIE_EVT_SDK_SEQ_UPDATE, + GENIE_EVT_SDK_STATE_SYNC, + GENIE_EVT_SDK_IVI_UPDATE, + GENIE_EVENT_SUB_SET, + GENIE_EVENT_HB_SET, + + GENIE_EVT_SDK_ANALYZE_MSG, + + GENIE_EVT_SDK_AIS_DISCON, + GENIE_EVT_SDK_DELAY_START, + GENIE_EVT_SDK_DELAY_END, + GENIE_EVT_SDK_TRANS_START, + GENIE_EVT_SDK_TRANS_CYCLE, + GENIE_EVT_SDK_TRANS_END, + GENIE_EVT_SDK_ACTION_DONE, + + GENIE_EVT_SDK_MESH_PWRON_INDC, + GENIE_EVT_SDK_INDICATE, + GENIE_EVT_SDK_VENDOR_MSG, + + /* APP triggered event, with prefix of GENIE_EVT_APP_ */ + GENIE_EVT_APP_START, + GENIE_EVT_APP_FAC_QUIT = GENIE_EVT_APP_START, + GENIE_EVT_TIME_OUT, + + /* Board */ + GENIE_EVT_BUTTON_TAP, + GENIE_EVT_SDK_COLOR_ACTION, + GENIE_EVT_RESET_BY_REPEAT_NOTIFY, /* triggered by reset */ + + /* END --- Don't add new ID after this one */ + GENIE_EVT_END + +} genie_event_t; + +/** + * @brief The handler for the underlying events. If necessary + * this handler dispatch the user events to applications. + * + * @param event refers to the event details. + * @param args refers to the additional information for the event. + */ +void genie_event(genie_event_t event, void *args); + +#ifdef __cplusplus +} +#endif /**< __cplusplus */ + +#endif /* _GENIE_EVENT_H_ */ diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_mesh.h b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_mesh.h new file mode 100644 index 0000000000..16de4c7818 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_mesh.h @@ -0,0 +1,405 @@ +// Copyright (C) 2018-2020 Alibaba Group Holding Limited +// Adaptations to ESP-IDF Copyright (c) 2020 Espressif Systems (Shanghai) Co. Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef _GENIE_MESH_H_ +#define _GENIE_MESH_H_ + +#include "esp_ble_mesh_defs.h" +#include "esp_ble_mesh_common_api.h" + +#include "genie_slist.h" +#include "genie_dlist.h" + +#include "genie_util.h" +#include "genie_event.h" +#include "genie_reset.h" +#include "genie_timer.h" +#include "genie_model_srv.h" + +#ifdef __cplusplus +extern "C" { +#endif /**< __cplusplus */ + +#define CID_ALIBABA 0x01A8 /**< Alibaba Incorporated */ +#define GENIE_VENDOR_MODEL_SRV_ID 0x0000 /**< Genie Vendor Model Server ID */ +#define GENIE_VENDOR_MODEL_CLI_ID 0x0001 /**< Genie Vendor Model Client ID */ + +#define GENIE_RECV_ADDR 0xF000 /**< Genie Receive Address */ +#define GENIE_OTA_GROUP_ADDR 0xF100 /**< Genie OTA Group Address */ +#define GENIE_ALL_GROUP_ADDR 0xCFFF /**< Genie All Product Group Address */ + +#define GENIE_LIGHT_GROUP_ADDR 0xC000 /**< Genie Light Product Group Address */ +#define GENIE_SWITCH_GROUP_ADDR 0xC001 /**< Genie Switch Product Group Address */ + +#define GENIE_OP_ATTR_GET_STATUS (0xD0) +#define GENIE_OP_ATTR_SET_ACK (0xD1) +#define GENIE_OP_ATTR_SET_UNACK (0xD2) +#define GENIE_OP_ATTR_STATUS (0xD3) +#define GENIE_OP_ATTR_INDICATE (0xD4) +#define GENIE_OP_ATTR_CONFIME (0xD5) +#define GENIE_OP_ATTR_INDICATE_TG (0xDE) +#define GENIE_OP_ATTR_CONFIME_TG (0xDF) +#define GENIE_OP_ATTR_TRANS_MSG (0xCF) +#define GENIE_OP_ATTR_TRANS_INDICATE (0xCE) +#define GENIE_OP_ATTR_TRANS_ACK (0xCD) + +#define GENIE_MESSAGE_OP_ATTR_GET_STATUS ESP_BLE_MESH_MODEL_OP_3(GENIE_OP_ATTR_GET_STATUS, CID_ALIBABA) +#define GENIE_MESSAGE_OP_ATTR_SET_ACK ESP_BLE_MESH_MODEL_OP_3(GENIE_OP_ATTR_SET_ACK, CID_ALIBABA) +#define GENIE_MESSAGE_OP_ATTR_SET_UNACK ESP_BLE_MESH_MODEL_OP_3(GENIE_OP_ATTR_SET_UNACK, CID_ALIBABA) +#define GENIE_MESSAGE_OP_ATTR_STATUS ESP_BLE_MESH_MODEL_OP_3(GENIE_OP_ATTR_STATUS, CID_ALIBABA) +#define GENIE_MESSAGE_OP_ATTR_INDICATION ESP_BLE_MESH_MODEL_OP_3(GENIE_OP_ATTR_INDICATE, CID_ALIBABA) +#define GENIE_MESSAGE_OP_ATTR_CONFIRMATION ESP_BLE_MESH_MODEL_OP_3(GENIE_OP_ATTR_CONFIME, CID_ALIBABA) +#define GENIE_MESSAGE_OP_ATTR_INDICATION_TG ESP_BLE_MESH_MODEL_OP_3(GENIE_OP_ATTR_INDICATE_TG, CID_ALIBABA) +#define GENIE_MESSAGE_OP_ATTR_CONFIRMATION_TG ESP_BLE_MESH_MODEL_OP_3(GENIE_OP_ATTR_CONFIME_TG, CID_ALIBABA) +#define GENIE_MESSAGE_OP_ATTR_TRANSPARENT_MSG ESP_BLE_MESH_MODEL_OP_3(GENIE_OP_ATTR_TRANS_MSG, CID_ALIBABA) +#define GENIE_MESSAGE_OP_ATTR_TRANSPARENT_ACK ESP_BLE_MESH_MODEL_OP_3(GENIE_OP_ATTR_TRANS_ACK, CID_ALIBABA) + +#define GENIE_VENDOR_MODEL_VERSION 1 /**< Support UUID version */ +#define GENIE_PROVISIONING_TIMEOUT (60 * 1000) /**< Mesh Provision Timeout, unit: ms */ +#define GENIE_PBADV_TIMEOUT (600 * 1000) /**< Mesh Provision Advertise Timeout, unit: ms */ + +#define GENIE_STATIC_OOB_LENGTH 16 +#define GENIE_MESH_TRNSATION_CYCLE 10 + +#define GENIE_UNPROV_ADV_FEATURE_AUTO_BIND_MODEL_SUB 0x02 +#define GENIE_UNPROV_ADV_FEATURE_SILENT_ADV 0x01 +#define GENIE_UNPROV_ADV_FLAG_GENIE_MESH_STACK 0x10 // bit4-7 +#define GENIE_UNPROV_ADV_FEATURE_ULTRA_PROV 0x03 // bit0-1 + +#define GENIE_CTL_TEMP_MIN 800 +#define GENIE_CTL_TEMP_MAX 20000 +#define GENIE_CTL_TEMP_DEFAULT GENIE_CTL_TEMP_MAX + +#define GENIE_ONOFF_DEFAULT 1 +#define GENIE_LIGHTNESS_DEFAULT 0xE666 // 90% + +/* Vendor Model Attr Parameter */ +#define GENIE_MODEL_ATTR_ONOFF 0x0100 +#define GENIE_MODEL_ATTR_LIGHTNESS 0x0121 +#define GENIE_MODEL_ATTR_TEMPERATURE 0x0122 +#define GENIE_MODEL_ATTR_COLOR 0x0123 +#define GENIE_MODEL_ATTR_DEVICE_EVENT 0xF009 + +/* Event List - Refer to Device Event List defined in https://yuque.antfin-inc.com/iotconnect/wwfb/dbyytw#1c38cf1b */ +#define EVENT_FAULT 0x00 /* malfunction event */ +#define EVENT_LOW_BAT 0x01 /* low battery event */ +#define EVENT_DEV_UP 0x03 /* device power up */ +#define EVENT_HW_RESET 0x23 /* hardware reset event */ +#define EVENT_TIMING_TIMEOUT 0x11 /* timer timeout event */ + +/* Vendor timer error code */ +#define ERR_CODE_UNIXTIME 0x80 +#define ERR_CODE_NOTSUP_ATTR_OP 0x82 +#define ERR_CODE_NOTSUP_ATTR_PARAM 0x83 +#define ERR_CODE_TIMER_SETTING 0x84 +#define ERR_CODE_TIMER_INDEX 0x85 +#define ERR_CODE_TIMER_FULL 0x86 +#define ERR_CODE_TIMER_PRIORDIC_PARAM 0x87 + +/* Vendor timer ali attr type */ +#define TIMER_ATTR_ERROR_CODE 0x0000 +#define TIMER_ATTR_TIMING_TIMEOUT 0xF009 +#define TIMER_ATTR_TIMING_SETTING 0xF010 +#define TIMER_ATTR_TIMING_PERIODIC_SETTING 0xF011 +#define TIMER_ATTR_TIMING_DELETE 0xF012 +#define TIMER_ATTR_TIMING_SYNC 0xF01D +#define TIMER_ATTR_TIMEZONE_SETTING 0xF01E +#define TIMER_ATTR_UNIX_TIME 0xF01F + +#define GENIE_MODEL_MSG_DFT_RETRY_TIMES 6 +#define GENIE_MODEL_MSG_MAX_RETRY_TIMES 10 +#define GENIE_MODEL_MSG_RETRY_PERIOD 400 + +#define CONFIG_MESH_SIMPLE_MODLE 1 +#define GENIE_MODEL_VENDOR_TIMER 1 +#define CONFIG_MESH_MODEL_VENDOR_SRV 1 +#define CONFIG_MESH_MODEL_GEN_ONOFF_SRV 1 +#define CONFIG_MESH_MODEL_LIGHTNESS_SRV 1 +// #define CONFIG_MESH_MODEL_GEN_LEVEL_SRV 1 +// #define CONFIG_MESH_MODEL_CTL_SRV 1 +#define CONFIG_MESH_MODEL_HSL_SRV 1 +// #define CONFIG_MESH_MODEL_TRANS 1 + +#define FUNC_TRACE 1 + +#ifdef FUNC_TRACE +#define ENTER_FUNC() ESP_LOGD(TAG, "enter %s", __FUNCTION__) +#define EXIT_FUNC() ESP_LOGD(TAG, "exit %s", __FUNCTION__) +#else +#define ENTER_FUNC() +#define EXIT_FUNC() +#endif + +typedef enum { + VALUE_TYPE_CUR = 0, + VALUE_TYPE_TAR, + VALUE_TYPE_NUM, +} value_type_t; + +typedef struct { +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV + uint8_t onoff[VALUE_TYPE_NUM]; +#endif + +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + uint16_t actual[VALUE_TYPE_NUM]; +// #ifndef CONFIG_MESH_SIMPLE_MODLE + uint16_t linear[VALUE_TYPE_NUM]; +// #endif +#endif + +#ifdef CONFIG_MESH_MODEL_CTL_SRV + uint16_t temp[VALUE_TYPE_NUM]; + uint16_t UV[VALUE_TYPE_NUM]; +#endif + +#ifdef CONFIG_MESH_MODEL_HSL_SRV + uint16_t hue[VALUE_TYPE_NUM]; + uint16_t saturation[VALUE_TYPE_NUM]; + uint16_t lightness[VALUE_TYPE_NUM]; +#endif + +#ifdef CONFIG_MESH_MODEL_TRANS + uint8_t delay; // unit:5ms + uint8_t trans; // unit:100ms + + uint32_t trans_start_time; + uint32_t trans_last_time; + uint32_t trans_end_time; + int16_t actual_trans_step; + int16_t temp_trans_step; + + util_timer_t delay_timer; + util_timer_t trans_timer; +#endif +} model_state_t; + +typedef struct { +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV + uint8_t default_onoff; + uint8_t last_onoff; +#endif + +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + uint16_t last_actual; +#endif + +#ifdef CONFIG_MESH_MODEL_CTL_SRV + uint16_t last_temp; +#endif + +#ifdef CONFIG_MESH_MODEL_HSL_SRV + uint16_t last_hue; + uint16_t last_saturation; + uint16_t last_lightness; +#endif + +#ifndef CONFIG_MESH_SIMPLE_MODLE +#ifdef CONFIG_MESH_MODEL_TRANS + uint8_t def_trans; +#endif + +#ifndef CONFIG_MESH_SIMPLE_MODLE + uint8_t range_status; +#endif + +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + uint16_t default_actual; + uint16_t min_actual; + uint16_t max_actual; +#endif + +#ifdef CONFIG_MESH_MODEL_CTL_SRV + //temp + uint16_t default_temp; + uint16_t min_temp; + uint16_t max_temp; + + uint16_t default_UV; + uint16_t last_UV; +#endif +#endif +} model_powerup_t; + +typedef struct { + uint8_t elem_index; + model_state_t state; /**< Used to save the current state and target state of the device */ + model_powerup_t powerup; /**< Used to save the device's power-down state and the previous state */ + void *user_data; +} elem_state_t; + +typedef enum { + GENIE_MESH_SUCCESS = 0, + GENIE_MESH_TID_REPEAT_ERROR, + GENIE_MESH_ANALYZE_SIZE_ERROR, + GENIE_MESH_ANALYZE_ARGS_ERROR, + GENIE_MESH_SET_TRANSTION_ERROR, +} genie_error_type_t; + +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV +#define INDICATION_FLAG_POWERON 0x80 +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV +#define INDICATION_FLAG_ONOFF 0x01 +#endif +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV +#define INDICATION_FLAG_LIGHTNESS 0x02 +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV +#define INDICATION_FLAG_CTL 0x04 +#endif +#ifdef CONFIG_MESH_MODEL_HSL_SRV +#define INDICATION_FLAG_HSL 0x05 +#endif +#endif + +extern uint8_t g_indication_flag; + +/** + * @brief check whether there is this tid in record, and record it if not. + * @param[in] src_addr indicates the device which hold this tid. + * @param[in] tid + * @return GENIE_MESH_SUCCESS means successed, otherwise failed. + */ +genie_error_type_t genie_msg_check_tid(uint16_t src_addr, uint8_t tid); + +/** + * @brief get the remain bytes of message + * @param[in] p_state: model state + * @param[in] is_ack: ack or not + * @return the bytes + */ +uint8_t get_remain_byte(model_state_t *p_state, bool is_ack); + +#ifdef CONFIG_MESH_MODEL_TRANS +/** + * @brief get the transition time. + * @param[in] byte means the byte of message. + * @return the time in milliseconds. + */ +uint32_t get_transition_time(uint8_t byte); +#endif + +/** + * @brief send the mesh message + * + * @param[in] p_vendor_msg refers to the message to be sent + * + * @return 0 for success; negative for failure + */ +int16_t genie_mesh_msg_send(genie_model_msg_t *p_vendor_msg); + +/** + * @brief stop the delay_timer and trans_timer for element. + * + * @param[in] p_elem refers to the element. + * + */ +void mesh_timer_stop(elem_state_t *p_elem); + +/** + * @brief handle the vendor message + * @param[in] p_msg refers to the message to be handled + * + * @return 0 for successed, -1 for failed. + */ +uint16_t genie_vendor_model_msg_handle(genie_model_msg_t *p_msg); + +/** + * @brief start poweron indicate timer. + * + */ +void poweron_indicate_start(void); + +/** + * @brief start PB-ADV timer. + * + */ +void genie_pbadv_timer_start(void); + +/** + * @brief stop PB-ADV timer. + * + */ +void genie_pbadv_timer_stop(void); + +/** + * @brief start provision timer. + * + */ +void genie_prov_timer_start(void); + +/** + * @brief stop provision timer. + * + */ +void genie_prov_timer_stop(void); + +/** + * @brief clear trans parameter. + * + * @param p_elem pointer of element state. + */ +void clear_trans_para(elem_state_t *p_elem); + +/** + * @brief calculater current state. + * + * @param p_elem pointer of element state. + * + * @return uint8_t + */ +uint8_t calc_cur_state(elem_state_t *p_elem); + +/** + * @brief Start silent adv. + * + */ +void genie_pbadv_start_silent_adv(void); + +/** + * @brief Handle hardware reset. + * + * @return uint16_t + */ +uint16_t genie_indicate_hw_reset_event(void); + +/** + * @brief Initializing element state. + * + * @param state_count the number of element. + * @param p_elem pointer of element state. + * + * @return uint8_t + */ +uint8_t elem_state_init(uint8_t state_count, elem_state_t *p_elem); + +/** + * @brief Genie vendor model indicate self status. + * + * @param p_elem pointer of element state. + */ +void genie_standart_indication(elem_state_t *p_elem); + +/** + * @brief Initializing Genie Mesh components. + * + */ +void genie_mesh_init(void); + +#ifdef __cplusplus +} +#endif /**< __cplusplus */ + +#endif /* _GENIE_MESH_H_ */ diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_model_srv.h b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_model_srv.h new file mode 100644 index 0000000000..87c95efae1 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_model_srv.h @@ -0,0 +1,63 @@ +// Copyright (C) 2018-2020 Alibaba Group Holding Limited +// Adaptations to ESP-IDF Copyright (c) 2020 Espressif Systems (Shanghai) Co. Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef _GENIE_MODEL_SRV_H +#define _GENIE_MODEL_SRV_H + +#include "genie_dlist.h" +#include "genie_util.h" + +#ifdef __cplusplus +extern "C" { +#endif /**< __cplusplus */ + +#define GENIE_VENDOR_MSG_LIST_MAXSIZE 8 + +typedef struct _genie_vendor_model_msg_node { + genie_dnode_t node; + int8_t left_retry; + int64_t timeout; + genie_model_msg_t msg; +} genie_model_msg_node_t; + +typedef void (* genie_model_opcode_cb_t)(esp_ble_mesh_model_t *model, esp_ble_mesh_msg_ctx_t *ctx, struct net_buf_simple *buf); + +typedef struct genie_opcode_cb_t { + uint32_t opcode; + genie_model_opcode_cb_t cb; +} genie_opcode_cb_t; + +/** @def genie_model_msg_send + * + * @brief send the vendor model message + * + * @param pointer to the message to be sent + * + * @return 0 for success; negative for failure + */ +int16_t genie_model_msg_send(genie_model_msg_t *p_model_msg); + +/** + * @brief + * @return + */ +void genie_model_dispatch(uint32_t opcode, esp_ble_mesh_model_t *model, + esp_ble_mesh_msg_ctx_t *ctx, uint8_t *msg, uint16_t length); + +#ifdef __cplusplus +} +#endif /**< __cplusplus */ + +#endif /* _GENIE_MODEL_SRV_H */ diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_reset.h b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_reset.h new file mode 100644 index 0000000000..d8d7b44d54 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_reset.h @@ -0,0 +1,60 @@ +// Copyright (C) 2018-2020 Alibaba Group Holding Limited +// Adaptations to ESP-IDF Copyright (c) 2020 Espressif Systems (Shanghai) Co. Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef _GENIE_RESET_H_ +#define _GENIE_RESET_H_ + +#ifdef __cplusplus +extern "C" { +#endif /**< __cplusplus */ + +#define CONFIG_GENIE_RESET_BY_REPEAT 1 + +#define GENIE_RESET_BY_REPEAT_COUNTER 3 +#define GENIE_RESET_BY_REPEAT_TIMEOUT (10 * 1000) +#define GENIE_RESET_WAIT_DONE_TIMEOUT (10 * 1000) + +#define GENIE_STORE_RESTART_COUNT_KEY "restart_count" + +/** + * @brief Get reset flag + * + * @return uint8_t + */ +uint8_t genie_reset_get_flag(void); + +/** + * @brief Start the timer to handle the program reset operation. Avoid reset indication messages not reaching Genie Speaker. + * + */ +void genie_reset_done_timer_start(void); + +/** + * @brief Initialize the function that resets whole system by multiple reboot in GENIE_RESET_BY_REPEAT_TIMEOUT. + * + */ +void genie_reset_by_repeat_init(void); + +/** + * @brief Clean the recored count for reboot. + * + */ +void genie_reset_clean_count(void); + +#ifdef __cplusplus +} +#endif /**< __cplusplus */ + +#endif /* _GENIE_RESET_H_ */ diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_slist.h b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_slist.h new file mode 100644 index 0000000000..38edb5deff --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_slist.h @@ -0,0 +1,467 @@ +/* + * Copyright (c) 2016 Intel Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file + * + * @brief Single-linked list implementation + * + * Single-linked list implementation using inline macros/functions. + * This API is not thread safe, and thus if a list is used across threads, + * calls to functions must be protected with synchronization primitives. + */ + +#ifndef _GENIE_SLIST_H_ +#define _GENIE_SLIST_H_ + +#include +#include +#include "mesh_util.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct genie_snode { + struct genie_snode *next; +}; + +typedef struct genie_snode genie_snode_t; + +struct genie_slist { + genie_snode_t *head; + genie_snode_t *tail; +}; + +typedef struct genie_slist genie_slist_t; + +/** + * @brief Provide the primitive to iterate on a list + * Note: the loop is unsafe and thus __sn should not be removed + * + * User _MUST_ add the loop statement curly braces enclosing its own code: + * + * GENIE_SLIST_FOR_EACH_NODE(l, n) { + * + * } + * + * This and other SYS_SLIST_*() macros are not thread safe. + * + * @param __sl A pointer on a genie_slist_t to iterate on + * @param __sn A genie_snode_t pointer to peek each node of the list + */ +#define GENIE_SLIST_FOR_EACH_NODE(__sl, __sn) \ + for (__sn = genie_slist_peek_head(__sl); __sn; \ + __sn = genie_slist_peek_next(__sn)) + +/** + * @brief Provide the primitive to iterate on a list, from a node in the list + * Note: the loop is unsafe and thus __sn should not be removed + * + * User _MUST_ add the loop statement curly braces enclosing its own code: + * + * GENIE_SLIST_ITERATE_FROM_NODE(l, n) { + * + * } + * + * Like GENIE_SLIST_FOR_EACH_NODE(), but __dn already contains a node in the list + * where to start searching for the next entry from. If NULL, it starts from + * the head. + * + * This and other SYS_SLIST_*() macros are not thread safe. + * + * @param __sl A pointer on a genie_slist_t to iterate on + * @param __sn A genie_snode_t pointer to peek each node of the list + * it contains the starting node, or NULL to start from the head + */ +#define GENIE_SLIST_ITERATE_FROM_NODE(__sl, __sn) \ + for (__sn = __sn ? genie_slist_peek_next_no_check(__sn) \ + : genie_slist_peek_head(__sl); \ + __sn; \ + __sn = genie_slist_peek_next(__sn)) + +/** + * @brief Provide the primitive to safely iterate on a list + * Note: __sn can be removed, it will not break the loop. + * + * User _MUST_ add the loop statement curly braces enclosing its own code: + * + * GENIE_SLIST_FOR_EACH_NODE_SAFE(l, n, s) { + * + * } + * + * This and other SYS_SLIST_*() macros are not thread safe. + * + * @param __sl A pointer on a genie_slist_t to iterate on + * @param __sn A genie_snode_t pointer to peek each node of the list + * @param __sns A genie_snode_t pointer for the loop to run safely + */ +#define GENIE_SLIST_FOR_EACH_NODE_SAFE(__sl, __sn, __sns) \ + for (__sn = genie_slist_peek_head(__sl), \ + __sns = genie_slist_peek_next(__sn); \ + __sn; __sn = __sns, \ + __sns = genie_slist_peek_next(__sn)) + +/* + * @brief Provide the primitive to resolve the container of a list node + * Note: it is safe to use with NULL pointer nodes + * + * @param __ln A pointer on a sys_node_t to get its container + * @param __cn Container struct type pointer + * @param __n The field name of sys_node_t within the container struct + */ +#define GENIE_SLIST_CONTAINER(__ln, __cn, __n) \ + ((__ln) ? CONTAINER_OF((__ln), __typeof__(*(__cn)), __n) : NULL) +/* + * @brief Provide the primitive to peek container of the list head + * + * @param __sl A pointer on a genie_slist_t to peek + * @param __cn Container struct type pointer + * @param __n The field name of sys_node_t within the container struct + */ +#define GENIE_SLIST_PEEK_HEAD_CONTAINER(__sl, __cn, __n) \ + GENIE_SLIST_CONTAINER(genie_slist_peek_head(__sl), __cn, __n) + +/* + * @brief Provide the primitive to peek container of the list tail + * + * @param __sl A pointer on a genie_slist_t to peek + * @param __cn Container struct type pointer + * @param __n The field name of sys_node_t within the container struct + */ +#define GENIE_SLIST_PEEK_TAIL_CONTAINER(__sl, __cn, __n) \ + GENIE_SLIST_CONTAINER(genie_slist_peek_tail(__sl), __cn, __n) + +/* + * @brief Provide the primitive to peek the next container + * + * @param __cn Container struct type pointer + * @param __n The field name of sys_node_t within the container struct + */ + +#define GENIE_SLIST_PEEK_NEXT_CONTAINER(__cn, __n) \ + ((__cn) ? GENIE_SLIST_CONTAINER(genie_slist_peek_next(&((__cn)->__n)), \ + __cn, __n) : NULL) + +/** + * @brief Provide the primitive to iterate on a list under a container + * Note: the loop is unsafe and thus __cn should not be detached + * + * User _MUST_ add the loop statement curly braces enclosing its own code: + * + * GENIE_SLIST_FOR_EACH_CONTAINER(l, c, n) { + * + * } + * + * @param __sl A pointer on a genie_slist_t to iterate on + * @param __cn A pointer to peek each entry of the list + * @param __n The field name of sys_node_t within the container struct + */ +#define GENIE_SLIST_FOR_EACH_CONTAINER(__sl, __cn, __n) \ + for (__cn = GENIE_SLIST_PEEK_HEAD_CONTAINER(__sl, __cn, __n); __cn; \ + __cn = GENIE_SLIST_PEEK_NEXT_CONTAINER(__cn, __n)) + +/** + * @brief Provide the primitive to safely iterate on a list under a container + * Note: __cn can be detached, it will not break the loop. + * + * User _MUST_ add the loop statement curly braces enclosing its own code: + * + * GENIE_SLIST_FOR_EACH_NODE_SAFE(l, c, cn, n) { + * + * } + * + * @param __sl A pointer on a genie_slist_t to iterate on + * @param __cn A pointer to peek each entry of the list + * @param __cns A pointer for the loop to run safely + * @param __n The field name of sys_node_t within the container struct + */ +#define GENIE_SLIST_FOR_EACH_CONTAINER_SAFE(__sl, __cn, __cns, __n) \ + for (__cn = GENIE_SLIST_PEEK_HEAD_CONTAINER(__sl, __cn, __n), \ + __cns = GENIE_SLIST_PEEK_NEXT_CONTAINER(__cn, __n); __cn; \ + __cn = __cns, __cns = GENIE_SLIST_PEEK_NEXT_CONTAINER(__cn, __n)) + +/** + * @brief Initialize a list + * + * @param list A pointer on the list to initialize + */ +static inline void genie_slist_init(genie_slist_t *list) +{ + list->head = NULL; + list->tail = NULL; +} + +#define GENIE_SLIST_STATIC_INIT(ptr_to_list) {NULL, NULL} + +/** + * @brief Test if the given list is empty + * + * @param list A pointer on the list to test + * + * @return a boolean, true if it's empty, false otherwise + */ +static inline bool genie_slist_is_empty(genie_slist_t *list) +{ + return (!list->head); +} + +/** + * @brief Peek the first node from the list + * + * @param list A point on the list to peek the first node from + * + * @return A pointer on the first node of the list (or NULL if none) + */ +static inline genie_snode_t *genie_slist_peek_head(genie_slist_t *list) +{ + return list->head; +} + +/** + * @brief Peek the last node from the list + * + * @param list A point on the list to peek the last node from + * + * @return A pointer on the last node of the list (or NULL if none) + */ +static inline genie_snode_t *genie_slist_peek_tail(genie_slist_t *list) +{ + return list->tail; +} + +/** + * @brief Peek the next node from current node, node is not NULL + * + * Faster then genie_slist_peek_next() if node is known not to be NULL. + * + * @param node A pointer on the node where to peek the next node + * + * @return a pointer on the next node (or NULL if none) + */ +static inline genie_snode_t *genie_slist_peek_next_no_check(genie_snode_t *node) +{ + return node->next; +} + +/** + * @brief Peek the next node from current node + * + * @param node A pointer on the node where to peek the next node + * + * @return a pointer on the next node (or NULL if none) + */ +static inline genie_snode_t *genie_slist_peek_next(genie_snode_t *node) +{ + return node ? genie_slist_peek_next_no_check(node) : NULL; +} + +/** + * @brief Prepend a node to the given list + * + * This and other sys_slist_*() functions are not thread safe. + * + * @param list A pointer on the list to affect + * @param node A pointer on the node to prepend + */ +static inline void genie_slist_prepend(genie_slist_t *list, + genie_snode_t *node) +{ + node->next = list->head; + list->head = node; + + if (!list->tail) { + list->tail = list->head; + } +} + +/** + * @brief Append a node to the given list + * + * This and other sys_slist_*() functions are not thread safe. + * + * @param list A pointer on the list to affect + * @param node A pointer on the node to append + */ +static inline void genie_slist_append(genie_slist_t *list, + genie_snode_t *node) +{ + node->next = NULL; + + if (!list->tail) { + list->tail = node; + list->head = node; + } else { + list->tail->next = node; + list->tail = node; + } +} + +/** + * @brief Append a list to the given list + * + * Append a singly-linked, NULL-terminated list consisting of nodes containing + * the pointer to the next node as the first element of a node, to @a list. + * This and other sys_slist_*() functions are not thread safe. + * + * @param list A pointer on the list to affect + * @param head A pointer to the first element of the list to append + * @param tail A pointer to the last element of the list to append + */ +static inline void genie_slist_append_list(genie_slist_t *list, + void *head, void *tail) +{ + if (!list->tail) { + list->head = (genie_snode_t *)head; + list->tail = (genie_snode_t *)tail; + } else { + list->tail->next = (genie_snode_t *)head; + list->tail = (genie_snode_t *)tail; + } +} + +/** + * @brief merge two slists, appending the second one to the first + * + * When the operation is completed, the appending list is empty. + * This and other sys_slist_*() functions are not thread safe. + * + * @param list A pointer on the list to affect + * @param list_to_append A pointer to the list to append. + */ +static inline void genie_slist_merge_slist(genie_slist_t *list, + genie_slist_t *list_to_append) +{ + genie_slist_append_list(list, list_to_append->head, + list_to_append->tail); + genie_slist_init(list_to_append); +} + +/** + * @brief Insert a node to the given list + * + * This and other sys_slist_*() functions are not thread safe. + * + * @param list A pointer on the list to affect + * @param prev A pointer on the previous node + * @param node A pointer on the node to insert + */ +static inline void genie_slist_insert(genie_slist_t *list, + genie_snode_t *prev, + genie_snode_t *node) +{ + if (!prev) { + genie_slist_prepend(list, node); + } else if (!prev->next) { + genie_slist_append(list, node); + } else { + node->next = prev->next; + prev->next = node; + } +} + +/** + * @brief Fetch and remove the first node of the given list + * + * List must be known to be non-empty. + * This and other sys_slist_*() functions are not thread safe. + * + * @param list A pointer on the list to affect + * + * @return A pointer to the first node of the list + */ +static inline genie_snode_t *genie_slist_get_not_empty(genie_slist_t *list) +{ + genie_snode_t *node = list->head; + + list->head = node->next; + if (list->tail == node) { + list->tail = list->head; + } + + return node; +} + +/** + * @brief Fetch and remove the first node of the given list + * + * This and other sys_slist_*() functions are not thread safe. + * + * @param list A pointer on the list to affect + * + * @return A pointer to the first node of the list (or NULL if empty) + */ +static inline genie_snode_t *genie_slist_get(genie_slist_t *list) +{ + return genie_slist_is_empty(list) ? NULL : genie_slist_get_not_empty(list); +} + +/** + * @brief Remove a node + * + * This and other sys_slist_*() functions are not thread safe. + * + * @param list A pointer on the list to affect + * @param prev_node A pointer on the previous node + * (can be NULL, which means the node is the list's head) + * @param node A pointer on the node to remove + */ +static inline void genie_slist_remove(genie_slist_t *list, + genie_snode_t *prev_node, + genie_snode_t *node) +{ + if (!prev_node) { + list->head = node->next; + + /* Was node also the tail? */ + if (list->tail == node) { + list->tail = list->head; + } + } else { + prev_node->next = node->next; + + /* Was node the tail? */ + if (list->tail == node) { + list->tail = prev_node; + } + } + + node->next = NULL; +} + +/** + * @brief Find and remove a node from a list + * + * This and other sys_slist_*() functions are not thread safe. + * + * @param list A pointer on the list to affect + * @param node A pointer on the node to remove from the list + * + * @return true if node was removed + */ +static inline bool genie_slist_find_and_remove(genie_slist_t *list, + genie_snode_t *node) +{ + genie_snode_t *prev = NULL; + genie_snode_t *test; + + GENIE_SLIST_FOR_EACH_NODE(list, test) { + if (test == node) { + genie_slist_remove(list, prev, node); + return true; + } + + prev = test; + } + + return false; +} + +#ifdef __cplusplus +} +#endif + +#endif /* _GENIE_SLIST_H_ */ diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_timer.h b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_timer.h new file mode 100644 index 0000000000..cc74c62e7d --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_timer.h @@ -0,0 +1,175 @@ +// Copyright (C) 2018-2020 Alibaba Group Holding Limited +// Adaptations to ESP-IDF Copyright (c) 2020 Espressif Systems (Shanghai) Co. Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef _GENIE_TIMER_H_ +#define _GENIE_TIMER_H_ + +#ifdef __cplusplus +extern "C" { +#endif /**< __cplusplus */ + +// #define GENIE_VENDOR_TIMER_STORE 1 // store timing data/operation +#define GENIE_STORE_VENDOR_TIMER "vendor_timer" + +#pragma pack(1) +typedef struct { + uint16_t type; + uint8_t para; +} genie_timer_attr_data_t; +#pragma pack() + +typedef struct { + volatile uint16_t year; // 2019+ + volatile uint8_t month; // 0-11 + volatile uint8_t day; // 1-31 + volatile uint8_t seconds; // 0-59 + volatile uint8_t minutes; // 0-59 + volatile uint8_t hour; // 0-23 + volatile uint8_t weekday; // 0 means sunday +} utc_time_t; + +typedef enum { + GENIE_TIMER_ERR_OK = 0, + GENIE_TIMER_ERR_INIT, + GENIE_TIMER_ERR_LOCALTIME_NOTSET, + GENIE_TIMER_ERR_INDEX, + GENIE_TIMER_ERR_PARAM, + GENIE_TIMER_ERR_NORESOURCE, + GENIE_TIMER_ERR_OTHER, +} genie_timer_error_t; + +typedef enum { + GENIE_TIME_EVT_TIMEOUT = 0, + GENIE_TIME_EVT_TIMING_SYNC = 1, +} genie_timer_event_t; + +/** + * @brief + * + */ +typedef void *genie_timer_handle_t; + +/** + * @brief genie timer event handle callback function. + * + */ +typedef int (*genie_timer_event_func_t)(uint8_t event, uint8_t index, genie_timer_attr_data_t *data); + +/** + * @brief Genie time init. + * + * @param cb genie timer event handle callback function. + * + * @return int + */ +int genie_timer_init(genie_timer_event_func_t cb); + +/** + * @brief Local time update. + * + * @param unix_time + * + * @return int + */ +int genie_timer_local_time_update(uint32_t unix_time); + +/** + * @brief Get local unix time. + * + * @return uint32_t + */ +uint32_t genie_timer_local_unixtime_get(void); + +/** + * @brief Update local timezone. + * + * @param timezone + * + * @return int + */ +int genie_timer_timezone_update(int8_t timezone); + +/** + * @brief Get local timezone. + * + * @return int8_t + */ +int8_t genie_timer_timezone_get(void); + +/** + * @brief + * + * @param period_time + * @param retry_delay + * @param retry_times + * + * @return int + */ +int genie_timer_time_sync_get(uint16_t *period_time, uint8_t *retry_delay, uint8_t *retry_times); + +/** + * @brief + * + * @param period_time + * @param retry_delay + * @param retry_times + * + * @return int + */ +int genie_timer_time_sync_set(uint16_t period_time, uint8_t retry_delay, uint8_t retry_times); + +/** + * @brief Start timer specified by index. + * + * @param index + * @param unix_time + * @param attr_data + * + * @return int + */ +int genie_timer_start(uint8_t index, uint32_t unix_time, genie_timer_attr_data_t *attr_data); + +/** + * @brief Start periodic timer specified by index. + * + * @param index + * @param periodic_time + * @param schedule + * @param attr_data + * + * @return int + */ +int genie_timer_periodic_start(uint8_t index, uint16_t periodic_time, uint8_t schedule, genie_timer_attr_data_t *attr_data); + +/** + * @brief Remove genie timer. + * + * @param index + * + * @return int + */ +int genie_timer_remove(uint8_t index); + +/** + * @brief show local time. + * + */ +void genie_timer_local_time_show(void); + +#ifdef __cplusplus +} +#endif /**< __cplusplus */ + +#endif /* _GENIE_TIMER_H_ */ diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_util.h b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_util.h new file mode 100644 index 0000000000..4d55645d8a --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/components/vendor_model/include/genie_util.h @@ -0,0 +1,194 @@ +// Copyright (C) 2018-2020 Alibaba Group Holding Limited +// Adaptations to ESP-IDF Copyright (c) 2020 Espressif Systems (Shanghai) Co. Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef _GENIE_UTIL_H_ +#define _GENIE_UTIL_H_ + +#ifdef __cplusplus +extern "C" { +#endif /**< __cplusplus */ + +/** + * p_elem: pointer to the element which the messsage want to be sent to + * retry: retry counts before desired confirm message received + * * fill negative value if retransmission is not necessary + * * fill positive value if retransmission is needed + * * * will be round in this scope - [GENIE_MODEL_MSG_DFT_RETRY_TIMES, GENIE_MODEL_MSG_MAX_RETRY_TIMES] + * retry_period: wait for retry_period before retransmit the message, in unit of ms + * opid: hightest byte in Opcode defined in the vendor model spec designed by Alibaba IoT Group + * * e.g. for Vendor Message Attr Get message, Opcode is 0xD001A8, corresponding opid is 0xD0 + * * refer to the marco named VENDOR_OP_ATTR_xxxx + * tid: + * * if the message is with type of GENIE_OP_ATTR_CONFIME or GENIE_OP_ATTR_CONFIME_TG, + * * tid should be filled with the replied message's tid + * len: payload length + * data: pointer to the genie vendor message's payload + * */ +typedef struct { + esp_ble_mesh_elem_t *p_elem; + int8_t retry; + uint16_t retry_period; + uint8_t opid; + uint8_t tid; + uint16_t len; + uint8_t *data; +} genie_model_msg_t; + +typedef void (*util_timer_handler_t)(void *args); + +typedef struct { + esp_timer_handle_t timer; + util_timer_handler_t handler; + void *args; + uint32_t timeout; + uint32_t start_ms; +} util_timer_t; + +/* semaphore define */ +typedef struct { + SemaphoreHandle_t sem; +} util_semaphore_t; + +/** + * @brief Initialize a timer. + * + * This routine initializes a timer, prior to its first use. + * + * @param timer Address of timer. + * @param handle Function to invoke each time the timer expires. + * @param args Arguments sent to handle. + * + * @return N/A + */ +void util_timer_init(util_timer_t *timer, util_timer_handler_t handle, void *args); + +/** + * @brief Start a timer. + * + * @param timer Address of timer. + * @param timeout time before timeout happen(in milliseconds). + * + * @return N/A + */ +void util_timer_start(util_timer_t *timer, uint32_t timeout); + +/** + * @brief Stop a timer. + * + * @param timer Address of timer. + * + * @return N/A + */ +void util_timer_stop(util_timer_t *timer); + +/** +* @brief check wether a timer is started or not. +* +* @param timer Address of timer. +* +* @return true if timer is started; otherwise false. +*/ +bool util_timer_is_started(util_timer_t *timer); + +/** + * @brief Initialize a semaphore. + * + * This routine initializes a semaphore object, prior to its first use. + * + * @param sem Address of the semaphore. + * @param initial_count Initial semaphore count. + * @param limit Maximum permitted semaphore count. + * + * @return 0 Creat a semaphore succcess + */ +int util_semaphore_init(util_semaphore_t *sem, uint32_t initial_count, uint32_t limit); + +/** + * @brief Take a semaphore. + * + * This routine takes @a sem. + * + * @note Can be called by ISRs, but @a timeout must be set to K_NO_WAIT. + * + * @param sem Address of the semaphore. + * @param timeout Waiting period to take the semaphore (in milliseconds), + * or one of the special values K_NO_WAIT and K_FOREVER. + * + * @note When porting code from the nanokernel legacy API to the new API, be + * careful with the return value of this function. The return value is the + * reverse of the one of nano_sem_take family of APIs: 0 means success, and + * non-zero means failure, while the nano_sem_take family returns 1 for success + * and 0 for failure. + * + * @retval 0 Semaphore taken. + * @retval -EBUSY Returned without waiting. + * @retval -EAGAIN Waiting period timed out. + */ +int util_semaphore_take(util_semaphore_t *sem, uint32_t timeout); + +/** + * @brief Give a semaphore. + * + * This routine gives @a sem, unless the semaphore is already at its maximum + * permitted count. + * + * @note Can be called by ISRs. + * + * @param sem Address of the semaphore. + * + * @return 0 Give semaphore success + */ +int util_semaphore_give(util_semaphore_t *sem); + +/** + * @brief Delete a semaphore. + * + * This routine delete @a sem, + * + * @note Can be called by ISRs. + * + * @param sem Address of the semaphore. + * + * @return 0 delete semaphore success + */ +int util_semaphore_delete(util_semaphore_t *sem); + +/** + * @brief Get a semaphore's count. + * + * This routine returns the current count of @a sem. + * + * @param sem Address of the semaphore. + * + * @return Current semaphore count. + */ +uint32_t util_semaphore_count_get(util_semaphore_t *sem); + +/** + * @brief Get a semaphore's count. + * + * This routine returns the current count of @a sem. + * + * @param sem Address of the semaphore. + * + * @return Current semaphore count. + */ +const char *util_hex2str(const void *buf, size_t len); + +#ifdef __cplusplus +} +#endif /**< __cplusplus */ + +#endif /* _GENIE_UTIL_H_ */ diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/CMakeLists.txt b/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/CMakeLists.txt new file mode 100644 index 0000000000..8cf3cefba1 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/CMakeLists.txt @@ -0,0 +1,7 @@ + +set(COMPONENT_SRCS "board.c" + "aligenie_demo.c") + +set(COMPONENT_ADD_INCLUDEDIRS ". include") + +register_component() diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/Kconfig.projbuild b/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/Kconfig.projbuild new file mode 100644 index 0000000000..dc2f618c0c --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/Kconfig.projbuild @@ -0,0 +1,88 @@ +menu "AliGenie Example Configuration" + + menu "AliGenie Triples Configuration" + + config TRIPLES_PRODUCT_ID + int "Product ID" + default 0 + + config TRIPLES_DEVICE_NAME + string "Device Name" + default "Device Name" + help + Please use lower case + + config TRIPLES_DEVICE_SECRET + string "Device Secret" + default "Device Secret" + help + Please use lower case + + endmenu + + menu "light driver config" + config LIGHT_GPIO_RED + int "Light red pin GPIO number" + range -1 33 + default 25 + help + There are more enumerations like that + up to GPIO39, excluding GPIO20, GPIO24 and GPIO28..31. + They are not shown here to reduce redundant information. + @note GPIO34..39 are input mode only. + + config LIGHT_GPIO_GREEN + int "Light green pin GPIO number" + range -1 33 + default 26 + help + There are more enumerations like that + up to GPIO39, excluding GPIO20, GPIO24 and GPIO28..31. + They are not shown here to reduce redundant information. + @note GPIO34..39 are input mode only. + + config LIGHT_GPIO_BLUE + int "Light blue pin GPIO number" + range -1 33 + default 27 + help + There are more enumerations like that + up to GPIO39, excluding GPIO20, GPIO24 and GPIO28..31. + They are not shown here to reduce redundant information. + @note GPIO34..39 are input mode only. + + config LIGHT_GPIO_COLD + int "Light cold colors pin GPIO number" + range -1 33 + default -1 + help + There are more enumerations like that + up to GPIO39, excluding GPIO20, GPIO24 and GPIO28..31. + They are not shown here to reduce redundant information. + @note GPIO34..39 are input mode only. + + config LIGHT_GPIO_WARM + int "Light warm color pin GPIO number" + range -1 33 + default -1 + help + There are more enumerations like that + up to GPIO39, excluding GPIO20, GPIO24 and GPIO28..31. + They are not shown here to reduce redundant information. + @note GPIO34..39 are input mode only. + + config LIGHT_FADE_PERIOD_MS + int "The time from the current color to the next color" + default 500 + help + The time from the current color to the next color. + + config LIGHT_BLINK_PERIOD_MS + int "Period of blinking lights" + default 2000 + help + Period of blinking lights. + + endmenu + +endmenu diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/aligenie_demo.c b/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/aligenie_demo.c new file mode 100644 index 0000000000..29393870f1 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/aligenie_demo.c @@ -0,0 +1,1348 @@ +/* AliGenie - Example + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ + +#include +#include +#include +#include + +#include "esp_log.h" +#include "nvs_flash.h" + +#include "mbedtls/sha256.h" + +#include "esp_ble_mesh_common_api.h" +#include "esp_ble_mesh_networking_api.h" +#include "esp_ble_mesh_provisioning_api.h" +#include "esp_ble_mesh_config_model_api.h" +#include "esp_ble_mesh_health_model_api.h" +#include "esp_ble_mesh_generic_model_api.h" +#include "esp_ble_mesh_lighting_model_api.h" +#include "esp_ble_mesh_time_scene_model_api.h" +#include "esp_ble_mesh_local_data_operation_api.h" + +#include "board.h" +#include "genie_mesh.h" +#include "ble_mesh_example_init.h" +#include "ble_mesh_example_nvs.h" + +static const char *TAG = "genie_demo"; + +#define MESH_ELEM_COUNT 1 +#define MESH_ELEM_STATE_COUNT MESH_ELEM_COUNT + +nvs_handle_t NVS_HANDLE; + +elem_state_t g_elem_state[MESH_ELEM_STATE_COUNT] = {0}; +model_powerup_t g_powerup[MESH_ELEM_STATE_COUNT] = {0}; + +static uint8_t static_val[16] = {0x64, 0xda, 0x19, 0x8f, 0x58, 0xea, 0x55, 0x85, + 0x75, 0x84, 0x0d, 0xbf, 0x4f, 0x6e, 0x36, 0x8f + }; + +static uint8_t dev_uuid[16] = { + 0xA8, 0x01, // CID + 0x71, // PID Bit0-3 ble adv version, 0x01 + // bit4: One machine one secret + // bit5: Support OTA + // bit6~7: + // 00:BLE4.0 + // 01:BLE4.2 + // 10:BLE5.0 + // 11:BLE5.0 above + 0x7F, 0x2C, 0x00, 0x00, // ProductID // 00002C7F + 0xda, 0x91, 0x01, 0x7a, 0xfa, 0x28, // MAC Address // 28fa7a0191da +#if GENIE_VENDOR_MODEL_VERSION == 0 + 0x00, // Feature Flag bit7-1:uuid version, version 0 + // bit0 0: unprovisioned adv + // 1: silent adv +#elif GENIE_VENDOR_MODEL_VERSION == 1 + 0x02, // Feature Flag bit7-1:uuidversion, version 1 + // bit0 0: unprovisioned adv + // 1: silent adv +#endif + 0x00, 0x00, // RFU +}; + +static esp_ble_mesh_cfg_srv_t config_server = { + .relay = ESP_BLE_MESH_RELAY_ENABLED, + .beacon = ESP_BLE_MESH_BEACON_ENABLED, +#if defined(CONFIG_BLE_MESH_FRIEND) + .friend_state = ESP_BLE_MESH_FRIEND_ENABLED, +#else + .friend_state = ESP_BLE_MESH_FRIEND_NOT_SUPPORTED, +#endif +#if defined(CONFIG_BLE_MESH_GATT_PROXY_SERVER) + .gatt_proxy = ESP_BLE_MESH_GATT_PROXY_ENABLED, +#else + .gatt_proxy = ESP_BLE_MESH_GATT_PROXY_NOT_SUPPORTED, +#endif + .default_ttl = 7, + /* 3 transmissions with 20ms interval */ + .net_transmit = ESP_BLE_MESH_TRANSMIT(2, 20), + /* 3 transmissions with 20ms interval */ + .relay_retransmit = ESP_BLE_MESH_TRANSMIT(2, 20), +}; + +uint8_t test_ids[1] = {0x00}; + +/** ESP BLE Mesh Health Server Model Context */ +ESP_BLE_MESH_MODEL_PUB_DEFINE(health_pub, 2 + 11, ROLE_NODE); +static esp_ble_mesh_health_srv_t health_server = { + .health_test.id_count = 1, + .health_test.test_ids = test_ids, +}; + +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV +ESP_BLE_MESH_MODEL_PUB_DEFINE(onoff_pub_0, 2 + 3, ROLE_NODE); +static esp_ble_mesh_gen_onoff_srv_t onoff_server_0 = { + .rsp_ctrl.get_auto_rsp = ESP_BLE_MESH_SERVER_AUTO_RSP, + .rsp_ctrl.set_auto_rsp = ESP_BLE_MESH_SERVER_AUTO_RSP, +}; +#endif + +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV +/* Light Lightness state related context */ +static esp_ble_mesh_light_lightness_state_t lightness_state; + +/* Light Lightness Server related context */ +ESP_BLE_MESH_MODEL_PUB_DEFINE(lightness_pub, 2 + 5, ROLE_NODE); +static esp_ble_mesh_light_lightness_srv_t lightness_server = { + .rsp_ctrl.get_auto_rsp = ESP_BLE_MESH_SERVER_AUTO_RSP, + .rsp_ctrl.set_auto_rsp = ESP_BLE_MESH_SERVER_AUTO_RSP, + .state = &lightness_state, +}; + +/* Light Lightness Setup Server related context */ +ESP_BLE_MESH_MODEL_PUB_DEFINE(lightness_setup_pub, 2 + 5, ROLE_NODE); +static esp_ble_mesh_light_lightness_setup_srv_t lightness_setup_server = { + .rsp_ctrl.get_auto_rsp = ESP_BLE_MESH_SERVER_AUTO_RSP, + .rsp_ctrl.set_auto_rsp = ESP_BLE_MESH_SERVER_AUTO_RSP, + .state = &lightness_state, +}; +#endif + +#ifdef CONFIG_MESH_MODEL_CTL_SRV +/* Light CTL state related context */ +static esp_ble_mesh_light_ctl_state_t ctl_state; + +/* Light CTL Server related context */ +ESP_BLE_MESH_MODEL_PUB_DEFINE(ctl_pub, 2 + 9, ROLE_NODE); +static esp_ble_mesh_light_ctl_srv_t ctl_server = { + .rsp_ctrl.get_auto_rsp = ESP_BLE_MESH_SERVER_AUTO_RSP, + .rsp_ctrl.set_auto_rsp = ESP_BLE_MESH_SERVER_AUTO_RSP, + .state = &ctl_state, +}; + +/* Light CTL Setup Server related context */ +ESP_BLE_MESH_MODEL_PUB_DEFINE(ctl_setup_pub, 2 + 6, ROLE_NODE); +static esp_ble_mesh_light_ctl_setup_srv_t ctl_setup_server = { + .rsp_ctrl.get_auto_rsp = ESP_BLE_MESH_SERVER_AUTO_RSP, + .rsp_ctrl.set_auto_rsp = ESP_BLE_MESH_SERVER_AUTO_RSP, + .state = &ctl_state, +}; +#endif + +#ifdef CONFIG_MESH_MODEL_HSL_SRV +/* Light HSL state related context */ +static esp_ble_mesh_light_hsl_state_t hsl_state; + +/* Light HSL Server related context */ +ESP_BLE_MESH_MODEL_PUB_DEFINE(hsl_pub, 2 + 9, ROLE_NODE); +static esp_ble_mesh_light_hsl_srv_t hsl_server = { + .rsp_ctrl.get_auto_rsp = ESP_BLE_MESH_SERVER_AUTO_RSP, + .rsp_ctrl.set_auto_rsp = ESP_BLE_MESH_SERVER_AUTO_RSP, + .state = &hsl_state, +}; + +/* Light HSL Setup Server related context */ +ESP_BLE_MESH_MODEL_PUB_DEFINE(hsl_setup_pub, 2 + 9, ROLE_NODE); +static esp_ble_mesh_light_hsl_setup_srv_t hsl_setup_server = { + .rsp_ctrl.get_auto_rsp = ESP_BLE_MESH_SERVER_AUTO_RSP, + .rsp_ctrl.set_auto_rsp = ESP_BLE_MESH_SERVER_AUTO_RSP, + .state = &hsl_state, +}; +#endif + +static esp_ble_mesh_model_t root_models[] = { + ESP_BLE_MESH_MODEL_CFG_SRV(&config_server), + ESP_BLE_MESH_MODEL_HEALTH_SRV(&health_server, &health_pub), +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV + ESP_BLE_MESH_MODEL_GEN_ONOFF_SRV(&onoff_pub_0, &onoff_server_0), +#endif +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + ESP_BLE_MESH_MODEL_LIGHT_LIGHTNESS_SRV(&lightness_pub, &lightness_server), + ESP_BLE_MESH_MODEL_LIGHT_LIGHTNESS_SETUP_SRV(&lightness_setup_pub, &lightness_setup_server), +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + ESP_BLE_MESH_MODEL_LIGHT_CTL_SRV(&ctl_pub, &ctl_server), + ESP_BLE_MESH_MODEL_LIGHT_CTL_SETUP_SRV(&ctl_setup_pub, &ctl_setup_server), +#endif +#ifdef CONFIG_MESH_MODEL_HSL_SRV + ESP_BLE_MESH_MODEL_LIGHT_HSL_SRV(&hsl_pub, &hsl_server), + ESP_BLE_MESH_MODEL_LIGHT_HSL_SETUP_SRV(&hsl_setup_pub, &hsl_setup_server), +#endif +}; + +/** @def g_vendor_model_alibaba_op + * + * @brief vendor model operations struct + * + */ +static esp_ble_mesh_model_op_t g_vendor_model_alibaba_op[] = { + ESP_BLE_MESH_MODEL_OP(GENIE_MESSAGE_OP_ATTR_GET_STATUS, 2), + ESP_BLE_MESH_MODEL_OP(GENIE_MESSAGE_OP_ATTR_SET_ACK, 2), + ESP_BLE_MESH_MODEL_OP(GENIE_MESSAGE_OP_ATTR_SET_UNACK, 2), + ESP_BLE_MESH_MODEL_OP(GENIE_MESSAGE_OP_ATTR_STATUS, 1), + ESP_BLE_MESH_MODEL_OP(GENIE_MESSAGE_OP_ATTR_INDICATION, 1), + ESP_BLE_MESH_MODEL_OP(GENIE_MESSAGE_OP_ATTR_CONFIRMATION, 1), + ESP_BLE_MESH_MODEL_OP(GENIE_MESSAGE_OP_ATTR_TRANSPARENT_MSG, 1), + ESP_BLE_MESH_MODEL_OP_END, +}; + +static esp_ble_mesh_model_t ali_vnd_models[] = { + ESP_BLE_MESH_VENDOR_MODEL(CID_ALIBABA, GENIE_VENDOR_MODEL_SRV_ID, g_vendor_model_alibaba_op, NULL, NULL), +}; + +ESP_BLE_MESH_MODEL_PUB_DEFINE(onoff_pub_1, 2 + 3, ROLE_NODE); +static esp_ble_mesh_gen_onoff_srv_t onoff_server_1 = { + .rsp_ctrl.get_auto_rsp = ESP_BLE_MESH_SERVER_RSP_BY_APP, + .rsp_ctrl.set_auto_rsp = ESP_BLE_MESH_SERVER_RSP_BY_APP, +}; + +ESP_BLE_MESH_MODEL_PUB_DEFINE(onoff_pub_2, 2 + 3, ROLE_NODE); +static esp_ble_mesh_gen_onoff_srv_t onoff_server_2 = { + .rsp_ctrl.get_auto_rsp = ESP_BLE_MESH_SERVER_AUTO_RSP, + .rsp_ctrl.set_auto_rsp = ESP_BLE_MESH_SERVER_RSP_BY_APP, +}; + +static esp_ble_mesh_model_t extend_model_0[] = { + ESP_BLE_MESH_MODEL_GEN_ONOFF_SRV(&onoff_pub_1, &onoff_server_1), +}; + +static esp_ble_mesh_model_t extend_model_1[] = { + ESP_BLE_MESH_MODEL_GEN_ONOFF_SRV(&onoff_pub_2, &onoff_server_2), +}; + +esp_ble_mesh_elem_t elements[] = { + ESP_BLE_MESH_ELEMENT(0, root_models, ali_vnd_models), + ESP_BLE_MESH_ELEMENT(0, extend_model_0, ESP_BLE_MESH_MODEL_NONE), + ESP_BLE_MESH_ELEMENT(0, extend_model_1, ESP_BLE_MESH_MODEL_NONE), +}; + +static esp_ble_mesh_comp_t composition = { + .cid = CID_ALIBABA, + .elements = elements, + .element_count = ARRAY_SIZE(elements), +}; + +/* Disable OOB security for SILabs Android app */ +static esp_ble_mesh_prov_t provision = { + .uuid = dev_uuid, + .static_val = static_val, + .static_val_len = 16, + .output_size = 0, // not support output OOB + .output_actions = ESP_BLE_MESH_NO_OUTPUT, + .input_size = 0, // not support Input OOB + .input_actions = ESP_BLE_MESH_NO_INPUT, +}; + +static void light_color_set(uint16_t lightness, uint16_t hue, uint16_t saturation); + +void set_silent_broadcast(void) +{ + dev_uuid[13] |= GENIE_UNPROV_ADV_FEATURE_SILENT_ADV; +} + +void set_unprovision_broadcast(void) +{ + dev_uuid[13] &= ~GENIE_UNPROV_ADV_FEATURE_SILENT_ADV; +} + +void user_prov_complete(uint16_t net_idx, uint16_t addr) +{ + ENTER_FUNC(); + // todo: add custom code +} + +void user_prov_reset(void) +{ + ENTER_FUNC(); + // todo: add custom code + esp_restart(); +} + +void reset_light_para(void) +{ + ENTER_FUNC(); + uint8_t i = 0; + + while (i < MESH_ELEM_STATE_COUNT) { +#ifdef CONFIG_MESH_SIMPLE_MODLE + g_elem_state[i].state.onoff[VALUE_TYPE_CUR] = GENIE_ONOFF_DEFAULT; + g_elem_state[i].state.onoff[VALUE_TYPE_TAR] = GENIE_ONOFF_DEFAULT; +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + g_elem_state[i].state.actual[VALUE_TYPE_CUR] = GENIE_LIGHTNESS_DEFAULT; + g_elem_state[i].state.actual[VALUE_TYPE_TAR] = GENIE_LIGHTNESS_DEFAULT; +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + g_elem_state[i].state.temp[VALUE_TYPE_CUR] = GENIE_CTL_TEMP_DEFAULT; + g_elem_state[i].state.temp[VALUE_TYPE_TAR] = GENIE_CTL_TEMP_DEFAULT; +#endif +#ifdef CONFIG_MESH_MODEL_TRANS + g_elem_state[i].state.trans = 0; + g_elem_state[i].state.delay = 0; + g_elem_state[i].state.trans_start_time = 0; + g_elem_state[i].state.trans_end_time = 0; +#endif +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + g_elem_state[i].powerup.last_actual = GENIE_LIGHTNESS_DEFAULT; + g_powerup [i].last_actual = GENIE_LIGHTNESS_DEFAULT; +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + g_elem_state[i].powerup.last_temp = GENIE_CTL_TEMP_DEFAULT; + g_powerup [i].last_temp = GENIE_CTL_TEMP_DEFAULT; +#endif +#endif + i++; + } + + ble_mesh_nvs_store(NVS_HANDLE, POWERUP_KEY, g_powerup, sizeof(g_powerup)); +} + +void save_light_state(elem_state_t *p_elem) +{ + ENTER_FUNC(); +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + if (p_elem->state.actual[VALUE_TYPE_CUR] != 0) { + p_elem->powerup.last_actual = p_elem->state.actual[VALUE_TYPE_CUR]; + g_powerup[p_elem->elem_index].last_actual = p_elem->state.actual[VALUE_TYPE_CUR]; + } + ESP_LOGD(TAG, "elem %d, actual %d", p_elem->elem_index, g_powerup[p_elem->elem_index].last_actual); +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + p_elem->powerup.last_temp = p_elem->state.temp[VALUE_TYPE_CUR]; + g_powerup[p_elem->elem_index].last_temp = p_elem->state.temp[VALUE_TYPE_CUR]; + ESP_LOGD(TAG, "elem %d, temp %d", p_elem->elem_index, g_powerup[p_elem->elem_index].last_temp); +#endif + + ble_mesh_nvs_store(NVS_HANDLE, POWERUP_KEY, g_powerup, sizeof(g_powerup)); +} + +void load_light_state(void) +{ + ENTER_FUNC(); + uint8_t i = 0; + bool exist = false; + esp_err_t ret = ESP_OK; + + ret = ble_mesh_nvs_restore(NVS_HANDLE, POWERUP_KEY, g_powerup, sizeof(g_powerup), &exist); + + if (ret == ESP_OK) { + while (i < MESH_ELEM_STATE_COUNT) { + memcpy(&g_elem_state[i].powerup, &g_powerup[i], sizeof(model_powerup_t)); +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + ESP_LOGI(TAG, "elem %d, actual %d", i, g_powerup[i].last_actual); + if (g_powerup[i].last_actual) { + g_elem_state[i].state.actual[VALUE_TYPE_TAR] = g_powerup[i].last_actual; + } +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + ESP_LOGI(TAG, "elem %d, temp %d", i, g_powerup[i].last_temp); + if (g_powerup[i].last_temp) { + g_elem_state[i].state.temp[VALUE_TYPE_TAR] = g_powerup[i].last_temp; + } +#endif +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + if (g_elem_state[i].state.actual[VALUE_TYPE_TAR] == 0) { + g_elem_state[i].state.onoff[VALUE_TYPE_TAR] = 0; + } else { + g_elem_state[i].state.onoff[VALUE_TYPE_TAR] = 1; + } +#endif +#ifdef CONFIG_MESH_MODEL_TRANS + if (g_elem_state[i].state.onoff[VALUE_TYPE_TAR] == 0) { + g_elem_state[i].state.trans = 0; + g_elem_state[i].state.delay = 0; + g_elem_state[i].state.trans_start_time = 0; + g_elem_state[i].state.trans_end_time = 0; + } else { + g_elem_state[i].state.trans = 0x41; + g_elem_state[i].state.delay = 100; + g_elem_state[i].state.trans_start_time = k_uptime_get() + g_elem_state[i].state.delay * 5; + g_elem_state[i].state.trans_end_time = g_elem_state[i].state.trans_start_time + get_transition_time(g_elem_state[i].state.trans); + } +#endif +#endif + i++; + } + } +} + +void user_genie_event_handle(genie_event_t event, void *p_arg) +{ + genie_event_t next_event = event; + + ESP_LOGD(TAG, "event: %02d, %p", event, p_arg); + + switch (event) { + case GENIE_EVT_RESET_BY_REPEAT_NOTIFY: + ESP_LOGI(TAG, "GENIE_EVT_RESET_BY_REPEAT_NOTIFY"); + light_driver_breath_start(0, 255, 0); /**< green blink */ + break; + case GENIE_EVT_SW_RESET: + case GENIE_EVT_HW_RESET_START: + ESP_LOGI(TAG, "GENIE_EVT_HW_RESET_START"); + light_driver_breath_start(0, 255, 0); /**< green blink */ + ble_mesh_nvs_erase(NVS_HANDLE, LIGHT_STATUS_STORE_KEY); // erase led status + reset_light_para(); + break; + case GENIE_EVT_SDK_MESH_INIT: + ESP_LOGI(TAG, "GENIE_EVT_SDK_MESH_INIT"); + break; + case GENIE_EVT_SDK_MESH_PROV_SUCCESS: + ESP_LOGI(TAG, "GENIE_EVT_SDK_MESH_PROV_SUCCESS"); + + g_elem_state[0].state.onoff[VALUE_TYPE_TAR] = 1; + g_indication_flag |= INDICATION_FLAG_ONOFF; +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + g_elem_state[0].state.actual[VALUE_TYPE_TAR] = 0xFFFE; + g_indication_flag |= INDICATION_FLAG_LIGHTNESS; +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + g_elem_state[0].state.temp[VALUE_TYPE_TAR] = 0xFFFE; + g_indication_flag |= INDICATION_FLAG_CTL; +#endif + ESP_LOGI(TAG, "light_driver_breath_stop %s", __FUNCTION__); + light_driver_breath_stop(); + // update led status + genie_event(GENIE_EVT_SDK_ANALYZE_MSG, &g_elem_state[0]); + break; +#ifdef CONFIG_MESH_MODEL_TRANS + case GENIE_EVT_SDK_TRANS_CYCLE: +#endif + case GENIE_EVT_SDK_ACTION_DONE: { + ESP_LOGI(TAG, "GENIE_EVT_SDK_ACTION_DONE"); + elem_state_t *p_elem = (elem_state_t *)p_arg; +#ifdef CONFIG_MESH_MODEL_HSL_SRV + ESP_LOGI(TAG, "hue: %d, saturation: %d, lightness: %d", p_elem->state.hue[VALUE_TYPE_CUR], p_elem->state.saturation[VALUE_TYPE_CUR], p_elem->state.lightness[VALUE_TYPE_CUR]); + board_led_hsl(p_elem->elem_index, p_elem->state.hue[VALUE_TYPE_CUR], p_elem->state.saturation[VALUE_TYPE_CUR], p_elem->state.lightness[VALUE_TYPE_CUR]); +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + ESP_LOGI(TAG, "temperature: %d", p_elem->state.temp[VALUE_TYPE_CUR]); + board_led_temperature(p_elem->elem_index, p_elem->state.temp[VALUE_TYPE_CUR]); +#endif +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + ESP_LOGI(TAG, "lightness actual: %d", p_elem->state.actual[VALUE_TYPE_CUR]); + board_led_lightness(p_elem->elem_index, p_elem->state.actual[VALUE_TYPE_CUR]); +#endif +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV + ESP_LOGI(TAG, "onoff: %d", p_elem->state.onoff[VALUE_TYPE_CUR]); + board_led_switch(p_elem->elem_index, p_elem->state.onoff[VALUE_TYPE_CUR]); +#endif + if (event == GENIE_EVT_SDK_ACTION_DONE) { + save_light_state(p_elem); + } + break; + } + case GENIE_EVT_HW_RESET_DONE: + ESP_LOGI(TAG, "GENIE_EVT_HW_RESET_DONE"); + ble_mesh_nvs_erase(NVS_HANDLE, LIGHT_STATUS_STORE_KEY); // erase led status + // esp_restart(); + break; + case GENIE_EVT_APP_FAC_QUIT: + ESP_LOGI(TAG, "GENIE_EVT_APP_FAC_QUIT"); + break; + case GENIE_EVT_BUTTON_TAP: + ESP_LOGI(TAG, "GENIE_EVT_BUTTON_TAP"); + g_elem_state[0].state.onoff[VALUE_TYPE_TAR] = !g_elem_state[0].state.onoff[VALUE_TYPE_TAR]; +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV + g_indication_flag |= INDICATION_FLAG_ONOFF; +#endif + // update led status + next_event = GENIE_EVT_SDK_ANALYZE_MSG; + p_arg = &g_elem_state[0]; + break; + case GENIE_EVT_SDK_COLOR_ACTION: { + ESP_LOGI(TAG, "GENIE_EVT_SDK_COLOR_ACTION"); +#ifdef CONFIG_MESH_MODEL_HSL_SRV + uint8_t *p_data = p_arg; + + uint16_t lightness = *p_data++; + lightness += (*p_data++ << 8); + + uint16_t hue = *p_data++; + hue += (*p_data++ << 8); + + uint16_t saturation = *p_data++; + saturation += (*p_data++ << 8); + + light_color_set(lightness, hue, saturation); +#endif + break; + } + default: + ESP_LOGD(TAG, "unhandle this event: %2d", event); + break; + } + + if (next_event != event) { + // send event to genie event loop + genie_event(next_event, p_arg); + } +} + +esp_err_t local_operation(uint16_t app_idx) +{ + ESP_LOGD(TAG, "app_idx: %d, primary element address: %d", app_idx, esp_ble_mesh_get_primary_element_address()); + + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_CONFIG_SRV, GENIE_LIGHT_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_CONFIG_SRV, GENIE_ALL_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_node_bind_app_key_to_local_model(esp_ble_mesh_get_primary_element_address(), ESP_BLE_MESH_MODEL_ID_CONFIG_SRV, BLE_MESH_CID_NVAL, app_idx)); + + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_HEALTH_SRV, GENIE_LIGHT_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_HEALTH_SRV, GENIE_ALL_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_node_bind_app_key_to_local_model(esp_ble_mesh_get_primary_element_address(), ESP_BLE_MESH_MODEL_ID_HEALTH_SRV, BLE_MESH_CID_NVAL, app_idx)); + +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_GEN_ONOFF_SRV, GENIE_LIGHT_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_GEN_ONOFF_SRV, GENIE_ALL_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_node_bind_app_key_to_local_model(esp_ble_mesh_get_primary_element_address(), ESP_BLE_MESH_MODEL_ID_GEN_ONOFF_SRV, BLE_MESH_CID_NVAL, app_idx)); + + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address() + 1, BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_GEN_ONOFF_SRV, GENIE_LIGHT_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address() + 1, BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_GEN_ONOFF_SRV, GENIE_ALL_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_node_bind_app_key_to_local_model(esp_ble_mesh_get_primary_element_address() + 1, ESP_BLE_MESH_MODEL_ID_GEN_ONOFF_SRV, BLE_MESH_CID_NVAL, app_idx)); + + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address() + 2, BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_GEN_ONOFF_SRV, GENIE_LIGHT_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address() + 2, BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_GEN_ONOFF_SRV, GENIE_ALL_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_node_bind_app_key_to_local_model(esp_ble_mesh_get_primary_element_address() + 2, ESP_BLE_MESH_MODEL_ID_GEN_ONOFF_SRV, BLE_MESH_CID_NVAL, app_idx)); +#endif +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_LIGHTNESS_SRV, GENIE_LIGHT_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_LIGHTNESS_SRV, GENIE_ALL_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_node_bind_app_key_to_local_model(esp_ble_mesh_get_primary_element_address(), ESP_BLE_MESH_MODEL_ID_LIGHT_LIGHTNESS_SRV, BLE_MESH_CID_NVAL, app_idx)); + + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_LIGHTNESS_SETUP_SRV, GENIE_LIGHT_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_LIGHTNESS_SETUP_SRV, GENIE_ALL_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_node_bind_app_key_to_local_model(esp_ble_mesh_get_primary_element_address(), ESP_BLE_MESH_MODEL_ID_LIGHT_LIGHTNESS_SETUP_SRV, BLE_MESH_CID_NVAL, app_idx)); +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_CTL_SRV, GENIE_LIGHT_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_CTL_SRV, GENIE_ALL_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_node_bind_app_key_to_local_model(esp_ble_mesh_get_primary_element_address(), ESP_BLE_MESH_MODEL_ID_LIGHT_CTL_SRV, BLE_MESH_CID_NVAL, app_idx)); + + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_CTL_SETUP_SRV, GENIE_LIGHT_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_CTL_SETUP_SRV, GENIE_ALL_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_node_bind_app_key_to_local_model(esp_ble_mesh_get_primary_element_address(), ESP_BLE_MESH_MODEL_ID_LIGHT_CTL_SETUP_SRV, BLE_MESH_CID_NVAL, app_idx)); +#endif +#ifdef CONFIG_MESH_MODEL_HSL_SRV + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_HSL_SRV, GENIE_LIGHT_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_HSL_SRV, GENIE_ALL_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_node_bind_app_key_to_local_model(esp_ble_mesh_get_primary_element_address(), ESP_BLE_MESH_MODEL_ID_LIGHT_HSL_SRV, BLE_MESH_CID_NVAL, app_idx)); + + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_HSL_SETUP_SRV, GENIE_LIGHT_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_HSL_SETUP_SRV, GENIE_ALL_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_node_bind_app_key_to_local_model(esp_ble_mesh_get_primary_element_address(), ESP_BLE_MESH_MODEL_ID_LIGHT_HSL_SETUP_SRV, BLE_MESH_CID_NVAL, app_idx)); +#endif + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), CID_ALIBABA, GENIE_VENDOR_MODEL_SRV_ID, GENIE_LIGHT_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_model_subscribe_group_addr(esp_ble_mesh_get_primary_element_address(), CID_ALIBABA, GENIE_VENDOR_MODEL_SRV_ID, GENIE_ALL_GROUP_ADDR)); + ESP_ERROR_CHECK(esp_ble_mesh_node_bind_app_key_to_local_model(esp_ble_mesh_get_primary_element_address(), GENIE_VENDOR_MODEL_SRV_ID, CID_ALIBABA, app_idx)); + + return ESP_OK; +} + +#ifdef CONFIG_MESH_MODEL_HSL_SRV +void bind_onoff_with_hsl(elem_state_t *p_elem, value_type_t type) +{ + ENTER_FUNC(); + model_state_t *p_state = &p_elem->state; + + ESP_LOGI(TAG, "hsl tar(%d, %d, %d)", p_state->hue[VALUE_TYPE_TAR], p_state->saturation[VALUE_TYPE_TAR], p_state->lightness[VALUE_TYPE_TAR]); + + if (type == VALUE_TYPE_TAR) { + if (p_state->onoff[VALUE_TYPE_TAR] == 0) { + //turn on + p_state->onoff[VALUE_TYPE_TAR] = 1; +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV + g_indication_flag |= INDICATION_FLAG_ONOFF; +#endif + } + } else if (type == VALUE_TYPE_CUR) { + } +} +#endif + +#ifdef CONFIG_MESH_MODEL_CTL_SRV +void bind_onoff_with_ctl(elem_state_t *p_elem, value_type_t type) +{ + ENTER_FUNC(); + model_state_t *p_state = &p_elem->state; + + // ESP_LOGI(TAG, "temperature cur(%d) tar(%d)", p_state->temp[VALUE_TYPE_CUR], p_state->temp[VALUE_TYPE_TAR]); + if (type == VALUE_TYPE_TAR) { + if (p_state->onoff[VALUE_TYPE_TAR] == 0) { + //turn on + p_state->onoff[VALUE_TYPE_TAR] = 1; +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV + g_indication_flag |= INDICATION_FLAG_ONOFF; +#endif + } + } else if (type == VALUE_TYPE_CUR) { + } +} +#endif + +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV +void bind_onoff_with_lightness(elem_state_t *p_elem, value_type_t type) +{ + ENTER_FUNC(); + model_state_t *p_state = &p_elem->state; + + ESP_LOGI(TAG, "lightness cur(%d) tar(%d)", p_state->actual[VALUE_TYPE_CUR], p_state->actual[VALUE_TYPE_TAR]); + if (type == VALUE_TYPE_TAR) { + if (p_state->actual[VALUE_TYPE_CUR] == 0 && p_state->actual[VALUE_TYPE_TAR] != 0) { + //turn on + p_state->onoff[VALUE_TYPE_TAR] = 1; +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV + g_indication_flag |= INDICATION_FLAG_ONOFF; +#endif + } else if (p_state->actual[VALUE_TYPE_CUR] != 1 && p_state->actual[VALUE_TYPE_TAR] == 0) { + //turn off + p_state->onoff[VALUE_TYPE_TAR] = 0; +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV + g_indication_flag |= INDICATION_FLAG_ONOFF; +#endif + } + } else if (type == VALUE_TYPE_CUR) { + if (p_state->actual[VALUE_TYPE_CUR] == 0 && p_state->actual[VALUE_TYPE_TAR] == 0) { + //turn off + p_state->onoff[VALUE_TYPE_CUR] = 0; +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV + g_indication_flag |= INDICATION_FLAG_ONOFF; +#endif + } + } +} + +void bind_lightness_with_onoff(elem_state_t *p_elem, value_type_t type) +{ + ENTER_FUNC(); + model_state_t *p_state = &p_elem->state; + + ESP_LOGI(TAG, "onoff cur(%d) tar(%d)", p_state->onoff[VALUE_TYPE_CUR], p_state->onoff[VALUE_TYPE_TAR]); + if (type == VALUE_TYPE_TAR) { +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV + if (p_state->onoff[VALUE_TYPE_CUR] == 0 && p_state->onoff[VALUE_TYPE_TAR] == 1) { + //turn on, set default lightness +#ifdef CONFIG_MESH_SIMPLE_MODLE + if (p_elem->powerup.last_actual) { + p_state->actual[VALUE_TYPE_TAR] = p_elem->powerup.last_actual; + } else { + p_state->actual[VALUE_TYPE_TAR] = GENIE_LIGHTNESS_DEFAULT; + } +#endif +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV + g_indication_flag |= INDICATION_FLAG_LIGHTNESS; +#endif + } else if (p_state->onoff[VALUE_TYPE_CUR] == 1 && p_state->onoff[VALUE_TYPE_TAR] == 0) { + //turn off, set zero + p_state->actual[VALUE_TYPE_TAR] = 0; +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV + g_indication_flag |= INDICATION_FLAG_LIGHTNESS; +#endif + } +#endif + } else if (type == VALUE_TYPE_CUR) { + } + ESP_LOGI(TAG, "actual cur(%d) tar(%d)", p_state->actual[VALUE_TYPE_CUR], p_state->actual[VALUE_TYPE_TAR]); +} +#endif + +#ifdef CONFIG_MESH_MODEL_CTL_SRV +void bind_ctl_with_onoff(elem_state_t *p_elem, value_type_t type) +{ + ENTER_FUNC(); + model_state_t *p_state = &p_elem->state; + + ESP_LOGI(TAG, "onoff cur(%d) tar(%d)", p_state->onoff[VALUE_TYPE_CUR], p_state->onoff[VALUE_TYPE_TAR]); + if (type == VALUE_TYPE_TAR) { +#ifdef CONFIG_MESH_MODEL_GEN_ONOFF_SRV + if (p_state->onoff[VALUE_TYPE_CUR] == 0 && p_state->onoff[VALUE_TYPE_TAR] == 1) { +#ifdef CONFIG_MESH_SIMPLE_MODLE + //turn on, check temperature + ESP_LOGI(TAG, "temp cur(%d) tar(%d)", p_state->temp[VALUE_TYPE_CUR], p_state->temp[VALUE_TYPE_TAR]); + if (p_state->temp[VALUE_TYPE_CUR] != p_state->temp[VALUE_TYPE_TAR]) { + if (p_elem->powerup.last_temp) { + p_state->temp[VALUE_TYPE_TAR] = p_elem->powerup.last_temp; + } else { + p_state->temp[VALUE_TYPE_TAR] = GENIE_CTL_TEMP_DEFAULT; + } +#ifdef CONFIG_MESH_MODEL_VENDOR_SRV + g_indication_flag |= INDICATION_FLAG_CTL; +#endif + } +#endif + } +#endif + } else if (type == VALUE_TYPE_CUR) { + } + ESP_LOGI(TAG, "temp cur(%04x) tar(%04x)", p_state->temp[VALUE_TYPE_CUR], p_state->temp[VALUE_TYPE_TAR]); +} +#endif + +#ifdef CONFIG_MESH_MODEL_HSL_SRV +static void light_color_set(uint16_t lightness, uint16_t hue, uint16_t saturation) +{ + ENTER_FUNC(); + ESP_LOGI(TAG, "hue: %d, saturation: %d, lightness: %d", hue, saturation, lightness); + + g_elem_state[0].state.hue[VALUE_TYPE_TAR] = hue; + g_elem_state[0].state.saturation[VALUE_TYPE_TAR] = saturation; + g_elem_state[0].state.lightness[VALUE_TYPE_TAR] = lightness; + if (g_elem_state[0].state.hue[VALUE_TYPE_CUR] != g_elem_state[0].state.hue[VALUE_TYPE_TAR] || g_elem_state[0].state.saturation[VALUE_TYPE_CUR] != g_elem_state[0].state.saturation[VALUE_TYPE_TAR] + || g_elem_state[0].state.lightness[VALUE_TYPE_CUR] != g_elem_state[0].state.lightness[VALUE_TYPE_TAR]) { + g_indication_flag |= INDICATION_FLAG_HSL; + + /* Change corresponding binded states in root element */ + bind_onoff_with_hsl(&g_elem_state[0], VALUE_TYPE_TAR); + + if (esp_ble_mesh_node_is_provisioned()) { + // update led status + genie_event(GENIE_EVT_SDK_ANALYZE_MSG, &g_elem_state[0]); + } + } +} +#endif + +#ifdef CONFIG_MESH_MODEL_CTL_SRV +static void light_ctl_set(uint32_t opcode, esp_ble_mesh_model_t *model, + esp_ble_mesh_msg_ctx_t *ctx, + uint16_t lightness, uint16_t temperature, uint16_t delta_uv) +{ + ENTER_FUNC(); + ESP_LOGI(TAG, "lightness 0x%d", lightness); + + if (opcode == ESP_BLE_MESH_MODEL_OP_LIGHT_CTL_SET) { + esp_ble_mesh_server_model_send_msg(model, ctx, ESP_BLE_MESH_MODEL_OP_LIGHT_CTL_STATUS, + sizeof(lightness), (uint8_t *)&lightness); + } + + g_elem_state[0].state.actual[VALUE_TYPE_TAR] = lightness; + g_elem_state[0].state.temp[VALUE_TYPE_TAR] = temperature; + if (g_elem_state[0].state.actual[VALUE_TYPE_CUR] != g_elem_state[0].state.actual[VALUE_TYPE_TAR] || g_elem_state[0].state.temp[VALUE_TYPE_CUR] != g_elem_state[0].state.temp[VALUE_TYPE_TAR]) { + g_indication_flag |= INDICATION_FLAG_LIGHTNESS; + g_indication_flag |= INDICATION_FLAG_CTL; + + esp_ble_mesh_server_model_send_msg(model, ctx, ESP_BLE_MESH_MODEL_OP_LIGHT_CTL_STATUS, + sizeof(g_elem_state[0].state.temp[VALUE_TYPE_CUR]), (uint8_t *)&g_elem_state[0].state.temp[VALUE_TYPE_CUR]); + + /* Change corresponding binded states in root element */ + bind_onoff_with_ctl(&g_elem_state[0], VALUE_TYPE_TAR); + + if (esp_ble_mesh_node_is_provisioned()) { + // update led status + genie_event(GENIE_EVT_SDK_ANALYZE_MSG, &g_elem_state[0]); + } + } +} +#endif + +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV +static void light_lightness_actual_set(uint32_t opcode, esp_ble_mesh_model_t *model, + esp_ble_mesh_msg_ctx_t *ctx, + uint16_t lightness) +{ + ENTER_FUNC(); + ESP_LOGI(TAG, "lightness %d", lightness); + + if (opcode == ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_SET) { + esp_ble_mesh_server_model_send_msg(model, ctx, ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_STATUS, + sizeof(lightness), (uint8_t *)&lightness); + } + + g_elem_state[0].state.actual[VALUE_TYPE_TAR] = lightness; + if (g_elem_state[0].state.actual[VALUE_TYPE_CUR] != g_elem_state[0].state.actual[VALUE_TYPE_TAR]) { + g_indication_flag |= INDICATION_FLAG_LIGHTNESS; + + esp_ble_mesh_server_model_send_msg(model, ctx, ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_STATUS, + sizeof(g_elem_state[0].state.actual[VALUE_TYPE_CUR]), (uint8_t *)&g_elem_state[0].state.actual[VALUE_TYPE_CUR]); + + /* Change corresponding binded states in root element */ + bind_onoff_with_lightness(&g_elem_state[0], VALUE_TYPE_TAR); + + if (esp_ble_mesh_node_is_provisioned()) { + // update led status + genie_event(GENIE_EVT_SDK_ANALYZE_MSG, &g_elem_state[0]); + } + } +} + +static void light_lightness_linear_set(uint32_t opcode, esp_ble_mesh_model_t *model, + esp_ble_mesh_msg_ctx_t *ctx, + uint16_t lightness) +{ + ENTER_FUNC(); + ESP_LOGI(TAG, "lightness 0x%d", lightness); + + if (opcode == ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_LINEAR_SET) { + esp_ble_mesh_server_model_send_msg(model, ctx, ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_LINEAR_STATUS, + sizeof(lightness), (uint8_t *)&lightness); + } + + g_elem_state[0].state.linear[VALUE_TYPE_TAR] = lightness; + if (g_elem_state[0].state.linear[VALUE_TYPE_CUR] != g_elem_state[0].state.linear[VALUE_TYPE_TAR]) { + g_indication_flag |= INDICATION_FLAG_LIGHTNESS; + + esp_ble_mesh_server_model_send_msg(model, ctx, ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_LINEAR_STATUS, + sizeof(g_elem_state[0].state.linear[VALUE_TYPE_CUR]), (uint8_t *)&g_elem_state[0].state.linear[VALUE_TYPE_CUR]); + + /* Change corresponding binded states in root element */ + bind_onoff_with_lightness(&g_elem_state[0], VALUE_TYPE_TAR); + + if (esp_ble_mesh_node_is_provisioned()) { + // update led status + genie_event(GENIE_EVT_SDK_ANALYZE_MSG, &g_elem_state[0]); + } + } +} +#endif + +static void light_onoff_set(esp_ble_mesh_model_t *model, + esp_ble_mesh_msg_ctx_t *ctx, uint8_t onoff) +{ + ENTER_FUNC(); + uint16_t primary_addr = esp_ble_mesh_get_primary_element_address(); + uint8_t elem_count = esp_ble_mesh_get_element_count(); + elem_state_t *led_state = NULL; + + g_elem_state[0].state.onoff[VALUE_TYPE_TAR] = onoff; + if (g_elem_state[0].state.onoff[VALUE_TYPE_CUR] != g_elem_state[0].state.onoff[VALUE_TYPE_TAR]) { + g_indication_flag |= INDICATION_FLAG_ONOFF; + // g_elem_state[0].state.onoff[VALUE_TYPE_CUR] = g_elem_state[0].state.onoff[VALUE_TYPE_TAR]; + + if (ESP_BLE_MESH_ADDR_IS_UNICAST(ctx->recv_dst)) { + for (uint8_t i = 0; i < elem_count; i++) { + if (ctx->recv_dst == (primary_addr + i)) { + led_state = &g_elem_state[i]; + } + } + } else if (ESP_BLE_MESH_ADDR_IS_GROUP(ctx->recv_dst)) { + if (esp_ble_mesh_is_model_subscribed_to_group(model, ctx->recv_dst)) { + led_state = &g_elem_state[model->element->element_addr - primary_addr]; + } + } else if (ctx->recv_dst == 0xFFFF) { + led_state = &g_elem_state[model->element->element_addr - primary_addr]; + } + + if (led_state != NULL) { + ESP_LOGI(TAG, "led onoff 0x%d", g_elem_state[0].state.onoff[VALUE_TYPE_TAR]); +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + // update lightness + bind_lightness_with_onoff(&g_elem_state[0], VALUE_TYPE_TAR); +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + // update ctl + bind_ctl_with_onoff(&g_elem_state[0], VALUE_TYPE_TAR); +#endif + // update led status + genie_event(GENIE_EVT_SDK_ANALYZE_MSG, &g_elem_state[0]); + } + } +} + +static void prov_complete(uint16_t net_idx, uint16_t addr, uint8_t flags, uint32_t iv_index) +{ + ENTER_FUNC(); + ESP_LOGI(TAG, "net_idx: 0x%04x, addr: 0x%04x", net_idx, addr); + ESP_LOGI(TAG, "flags: 0x%02x, iv_index: 0x%08x", flags, iv_index); +} + +static void example_ble_mesh_provisioning_cb(esp_ble_mesh_prov_cb_event_t event, + esp_ble_mesh_prov_cb_param_t *param) +{ + switch (event) { + case ESP_BLE_MESH_PROV_REGISTER_COMP_EVT: + ESP_LOGI(TAG, "ESP_BLE_MESH_PROV_REGISTER_COMP_EVT, err_code %d", param->prov_register_comp.err_code); + break; + case ESP_BLE_MESH_NODE_PROV_ENABLE_COMP_EVT: + ESP_LOGI(TAG, "ESP_BLE_MESH_NODE_PROV_ENABLE_COMP_EVT, err_code %d", param->node_prov_enable_comp.err_code); + // send event to genie event loop + genie_event(GENIE_EVT_SDK_MESH_INIT, ¶m->node_prov_enable_comp.err_code); + + if (param->node_prov_enable_comp.err_code == -EALREADY) { + // genie mesh init + genie_mesh_init(); + } + break; + case ESP_BLE_MESH_NODE_PROV_DISABLE_COMP_EVT: + ESP_LOGI(TAG, "ESP_BLE_MESH_NODE_PROV_DISABLE_COMP_EVT"); + break; + case ESP_BLE_MESH_NODE_PROV_LINK_OPEN_EVT: + ESP_LOGI(TAG, "ESP_BLE_MESH_NODE_PROV_LINK_OPEN_EVT, bearer %s", + param->node_prov_link_open.bearer == ESP_BLE_MESH_PROV_ADV ? "PB-ADV" : "PB-GATT"); + + // send event to genie event loop + genie_event(GENIE_EVT_SDK_MESH_PROV_START, NULL); + + break; + case ESP_BLE_MESH_NODE_PROV_LINK_CLOSE_EVT: + ESP_LOGI(TAG, "ESP_BLE_MESH_NODE_PROV_LINK_CLOSE_EVT, bearer %s", + param->node_prov_link_close.bearer == ESP_BLE_MESH_PROV_ADV ? "PB-ADV" : "PB-GATT"); + break; + case ESP_BLE_MESH_NODE_PROV_COMPLETE_EVT: // already have configuration when device restart, and provisioning completed. + ESP_LOGI(TAG, "ESP_BLE_MESH_NODE_PROV_COMPLETE_EVT"); + ESP_LOG_BUFFER_HEX("NetKey: ", param->node_prov_complete.net_key, 16); + ESP_LOGI(TAG, "net_idx 0x%04x, NetKey: %s, Primary address: 0x%04x", param->node_prov_complete.net_idx, + util_hex2str(param->node_prov_complete.net_key, 16), param->node_prov_complete.addr); + + prov_complete(param->node_prov_complete.net_idx, param->node_prov_complete.addr, + param->node_prov_complete.flags, param->node_prov_complete.iv_index); + + user_prov_complete(param->node_prov_complete.net_idx, param->node_prov_complete.addr); + break; + case ESP_BLE_MESH_NODE_PROV_RESET_EVT: + ESP_LOGI(TAG, "ESP_BLE_MESH_NODE_PROV_RESET_EVT"); + + // send event to genie event loop + genie_event(GENIE_EVT_SW_RESET, NULL); + + user_prov_reset(); + break; + case ESP_BLE_MESH_NODE_SET_UNPROV_DEV_NAME_COMP_EVT: + ESP_LOGI(TAG, "ESP_BLE_MESH_NODE_SET_UNPROV_DEV_NAME_COMP_EVT, err_code %d", param->node_set_unprov_dev_name_comp.err_code); + break; + case ESP_BLE_MESH_PROVISIONER_STORE_NODE_COMP_DATA_COMP_EVT: + ESP_LOGI(TAG, "ESP_BLE_MESH_PROVISIONER_STORE_NODE_COMP_DATA_COMP_EVT, err_code %d", param->provisioner_store_node_comp_data_comp.err_code); + break; + case ESP_BLE_MESH_MODEL_SUBSCRIBE_GROUP_ADDR_COMP_EVT: + ESP_LOGI(TAG, "ESP_BLE_MESH_MODEL_SUBSCRIBE_GROUP_ADDR_COMP_EVT, err_code %d, element_addr 0x%04x, company_id 0x%04x, model_id 0x%04x, group_addr 0x%04x", + param->model_sub_group_addr_comp.err_code, param->model_sub_group_addr_comp.element_addr, + param->model_sub_group_addr_comp.company_id, param->model_sub_group_addr_comp.model_id, + param->model_sub_group_addr_comp.group_addr); + break; + case ESP_BLE_MESH_NODE_BIND_APP_KEY_TO_MODEL_COMP_EVT: + ESP_LOGI(TAG, "ESP_BLE_MESH_NODE_BIND_APP_KEY_TO_MODEL_COMP_EVT, err_code %d, element_addr 0x%04x, company_id 0x%04x, model_id 0x%04x, app_idx 0x%04x", + param->node_bind_app_key_to_model_comp.err_code, param->node_bind_app_key_to_model_comp.element_addr, + param->node_bind_app_key_to_model_comp.company_id, param->node_bind_app_key_to_model_comp.model_id, + param->node_bind_app_key_to_model_comp.app_idx); + break; + default: + ESP_LOGI(TAG, "event %d", event); + break; + } +} + +static void example_ble_mesh_config_server_cb(esp_ble_mesh_cfg_server_cb_event_t event, + esp_ble_mesh_cfg_server_cb_param_t *param) +{ + if (event == ESP_BLE_MESH_CFG_SERVER_STATE_CHANGE_EVT) { + switch (param->ctx.recv_op) { + case ESP_BLE_MESH_MODEL_OP_NET_KEY_ADD: + ESP_LOGI(TAG, "ESP_BLE_MESH_MODEL_OP_NET_KEY_ADD"); + ESP_LOGI(TAG, "net_idx 0x%04x, NetKey: %s", + param->value.state_change.netkey_add.net_idx, + util_hex2str(param->value.state_change.netkey_add.net_key, 16)); + break; + case ESP_BLE_MESH_MODEL_OP_NET_KEY_UPDATE: + ESP_LOGI(TAG, "ESP_BLE_MESH_MODEL_OP_NET_KEY_UPDATE"); + break; + case ESP_BLE_MESH_MODEL_OP_NET_KEY_DELETE: + ESP_LOGI(TAG, "ESP_BLE_MESH_MODEL_OP_NET_KEY_DELETE"); + break; + + case ESP_BLE_MESH_MODEL_OP_APP_KEY_ADD: + ESP_LOGI(TAG, "ESP_BLE_MESH_MODEL_OP_APP_KEY_ADD"); + ESP_LOGI(TAG, "net_idx 0x%04x, app_idx 0x%04x, AppKey: %s", + param->value.state_change.appkey_add.net_idx, param->value.state_change.appkey_add.app_idx, + util_hex2str(param->value.state_change.appkey_add.app_key, 16)); + + // send event to genie event loop + genie_event(GENIE_EVT_SDK_APPKEY_ADD, ¶m->value.state_change.appkey_add.app_idx); + +#if GENIE_VENDOR_MODEL_VERSION == 0 + +#elif GENIE_VENDOR_MODEL_VERSION == 1 + // local bind AppKEY and Subcribe Group Address + local_operation(param->value.state_change.appkey_add.app_idx); + // genie mesh init + genie_mesh_init(); +#endif + break; + case ESP_BLE_MESH_MODEL_OP_APP_KEY_UPDATE: + ESP_LOGI(TAG, "ESP_BLE_MESH_MODEL_OP_APP_KEY_UPDATE"); + break; + case ESP_BLE_MESH_MODEL_OP_APP_KEY_DELETE: + ESP_LOGI(TAG, "ESP_BLE_MESH_MODEL_OP_APP_KEY_DELETE"); + break; + + case ESP_BLE_MESH_MODEL_OP_MODEL_APP_BIND: + ESP_LOGI(TAG, "ESP_BLE_MESH_MODEL_OP_MODEL_APP_BIND"); + ESP_LOGI(TAG, "elem_addr 0x%04x, app_idx 0x%04x, cid 0x%04x, mod_id 0x%04x", + param->value.state_change.mod_app_bind.element_addr, + param->value.state_change.mod_app_bind.app_idx, + param->value.state_change.mod_app_bind.company_id, + param->value.state_change.mod_app_bind.model_id); + break; + + case ESP_BLE_MESH_MODEL_OP_MODEL_SUB_ADD: + ESP_LOGI(TAG, "ESP_BLE_MESH_MODEL_OP_MODEL_SUB_ADD"); + ESP_LOGI(TAG, "elem_addr 0x%04x, sub_addr 0x%04x, cid 0x%04x, mod_id 0x%04x", + param->value.state_change.mod_sub_add.element_addr, + param->value.state_change.mod_sub_add.sub_addr, + param->value.state_change.mod_sub_add.company_id, + param->value.state_change.mod_sub_add.model_id); +#if GENIE_VENDOR_MODEL_VERSION == 0 + // genie mesh init + genie_mesh_init(); +#elif GENIE_VENDOR_MODEL_VERSION == 1 + +#endif + break; + case ESP_BLE_MESH_MODEL_OP_MODEL_SUB_DELETE: + ESP_LOGI(TAG, "ESP_BLE_MESH_MODEL_OP_MODEL_SUB_DELETE"); + break; + + case ESP_BLE_MESH_MODEL_OP_HEARTBEAT_PUB_SET: + ESP_LOGI(TAG, "ESP_BLE_MESH_MODEL_OP_HEARTBEAT_PUB_SET"); + break; + case ESP_BLE_MESH_MODEL_OP_HEARTBEAT_SUB_SET: + ESP_LOGI(TAG, "ESP_BLE_MESH_MODEL_OP_HEARTBEAT_SUB_SET"); + break; + default: + ESP_LOGW(TAG, "%s, event %d", __FUNCTION__, event); + break; + } + } +} + +static void example_ble_mesh_generic_server_cb(esp_ble_mesh_generic_server_cb_event_t event, + esp_ble_mesh_generic_server_cb_param_t *param) +{ + ESP_LOGD(TAG, "event 0x%02x, opcode 0x%04x, src 0x%04x, dst 0x%04x", + event, param->ctx.recv_op, param->ctx.addr, param->ctx.recv_dst); + + switch (event) { + case ESP_BLE_MESH_GENERIC_SERVER_STATE_CHANGE_EVT: + ESP_LOGI(TAG, "ESP_BLE_MESH_GENERIC_SERVER_STATE_CHANGE_EVT"); + if (param->ctx.recv_op == ESP_BLE_MESH_MODEL_OP_GEN_ONOFF_SET || + param->ctx.recv_op == ESP_BLE_MESH_MODEL_OP_GEN_ONOFF_SET_UNACK) { + + light_onoff_set(param->model, ¶m->ctx, param->value.state_change.onoff_set.onoff); + + /* Update bound states second way */ + // light_lightness_actual_set(param->ctx.recv_op, param->model, + // ¶m->ctx, param->value.state_change.onoff_set.onoff); + } + break; + case ESP_BLE_MESH_GENERIC_SERVER_RECV_GET_MSG_EVT: + ESP_LOGI(TAG, "ESP_BLE_MESH_GENERIC_SERVER_RECV_GET_MSG_EVT"); + if (param->ctx.recv_op == ESP_BLE_MESH_MODEL_OP_GEN_ONOFF_GET) { + esp_ble_mesh_gen_onoff_srv_t *srv = param->model->user_data; + ESP_LOGI(TAG, "onoff: 0x%02x", srv->state.onoff); + esp_ble_mesh_server_model_send_msg(param->model, ¶m->ctx, + ESP_BLE_MESH_MODEL_OP_GEN_ONOFF_STATUS, sizeof(srv->state.onoff), &srv->state.onoff); + } + break; + case ESP_BLE_MESH_GENERIC_SERVER_RECV_SET_MSG_EVT: + ESP_LOGI(TAG, "ESP_BLE_MESH_GENERIC_SERVER_RECV_SET_MSG_EVT"); + if (param->ctx.recv_op == ESP_BLE_MESH_MODEL_OP_GEN_ONOFF_SET || + param->ctx.recv_op == ESP_BLE_MESH_MODEL_OP_GEN_ONOFF_SET_UNACK) { + ESP_LOGI(TAG, "onoff 0x%02x, tid 0x%02x", param->value.set.onoff.onoff, param->value.set.onoff.tid); + if (param->value.set.onoff.op_en) { + ESP_LOGI(TAG, "trans_time 0x%02x, delay 0x%02x", + param->value.set.onoff.trans_time, param->value.set.onoff.delay); + } + + esp_ble_mesh_gen_onoff_srv_t *srv = param->model->user_data; + if (param->value.set.onoff.op_en == false) { + srv->state.onoff = param->value.set.onoff.onoff; + } else { + /* TODO: Delay and state transition */ + srv->state.onoff = param->value.set.onoff.onoff; + } + g_indication_flag |= INDICATION_FLAG_ONOFF; + if (param->ctx.recv_op == ESP_BLE_MESH_MODEL_OP_GEN_ONOFF_SET) { + esp_ble_mesh_server_model_send_msg(param->model, ¶m->ctx, + ESP_BLE_MESH_MODEL_OP_GEN_ONOFF_STATUS, sizeof(srv->state.onoff), &srv->state.onoff); + } + + light_onoff_set(param->model, ¶m->ctx, srv->state.onoff); + } + break; + default: + ESP_LOGW(TAG, "Unknown Generic Server event 0x%02x", event); + break; + } +} + +static void example_ble_mesh_lighting_server_cb(esp_ble_mesh_lighting_server_cb_event_t event, + esp_ble_mesh_lighting_server_cb_param_t *param) +{ +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + uint16_t lightness; +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + uint16_t temperature; + uint16_t delta_uv; +#endif + esp_ble_mesh_server_state_value_t state = {0}; + + ESP_LOGD(TAG, "event 0x%02x, opcode 0x%04x, src 0x%04x, dst 0x%04x", + event, param->ctx.recv_op, param->ctx.addr, param->ctx.recv_dst); + + switch (event) { + case ESP_BLE_MESH_LIGHTING_SERVER_STATE_CHANGE_EVT: + switch (param->ctx.recv_op) { +#ifdef CONFIG_MESH_MODEL_LIGHTNESS_SRV + /*!< Light Lightness Message Opcode */ + case ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_SET: + case ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_SET_UNACK: { + /* Light Lightness Server Model - Primary Element */ + ESP_LOGI(TAG, "lightness actual %d", param->value.state_change.lightness_set.lightness); + /* Update bound states */ + lightness = param->value.state_change.lightness_set.lightness; + state.light_lightness_linear.lightness = convert_lightness_actual_to_linear(lightness); + esp_ble_mesh_server_model_update_state(lightness_server.model, ESP_BLE_MESH_LIGHT_LIGHTNESS_LINEAR_STATE, &state); + state.gen_onoff.onoff = lightness ? LED_ON : LED_OFF; + esp_ble_mesh_server_model_update_state(onoff_server_0.model, ESP_BLE_MESH_GENERIC_ONOFF_STATE, &state); + + /* Update bound states second way */ + light_lightness_actual_set(param->ctx.recv_op, param->model, + ¶m->ctx, lightness); + break; + } + case ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_LINEAR_SET: + case ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_LINEAR_SET_UNACK: { + /* Light Lightness Server Model - Primary Element */ + ESP_LOGI(TAG, "lightness linear %d", param->value.state_change.lightness_linear_set.lightness); + /* Update bound states */ + lightness = convert_lightness_linear_to_actual(param->value.state_change.lightness_linear_set.lightness); + state.light_lightness_actual.lightness = lightness; + esp_ble_mesh_server_model_update_state(lightness_server.model, ESP_BLE_MESH_LIGHT_LIGHTNESS_ACTUAL_STATE, &state); + state.gen_onoff.onoff = lightness ? LED_ON : LED_OFF; + esp_ble_mesh_server_model_update_state(onoff_server_0.model, ESP_BLE_MESH_GENERIC_ONOFF_STATE, &state); + + /* Update bound states second way */ + light_lightness_linear_set(param->ctx.recv_op, param->model, + ¶m->ctx, lightness); + break; + } + /*!< Light Lightness Setup Message Opcode */ + case ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_DEFAULT_SET: + case ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_DEFAULT_SET_UNACK: + /* Light Lightness Setup Server Model - Primary Element */ + ESP_LOGI(TAG, "lightness default %d", param->value.state_change.lightness_default_set.lightness); + break; + case ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_RANGE_SET: + case ESP_BLE_MESH_MODEL_OP_LIGHT_LIGHTNESS_RANGE_SET_UNACK: + /* Light Lightness Setup Server Model - Primary Element */ + ESP_LOGI(TAG, "lightness min %d, max %d", + param->value.state_change.lightness_range_set.range_min, + param->value.state_change.lightness_range_set.range_max); + break; +#endif +#ifdef CONFIG_MESH_MODEL_CTL_SRV + /*!< Light CTL Message Opcode */ + case ESP_BLE_MESH_MODEL_OP_LIGHT_CTL_SET: + case ESP_BLE_MESH_MODEL_OP_LIGHT_CTL_SET_UNACK: + /* Light CTL Server Model - Primary Element */ + ESP_LOGI(TAG, "lightness 0x%04x, temperature 0x%04x, delta uv 0x%04x", + param->value.state_change.ctl_set.lightness, + param->value.state_change.ctl_set.temperature, + param->value.state_change.ctl_set.delta_uv); + /* Update bound states */ + lightness = param->value.state_change.ctl_set.lightness; + temperature = param->value.state_change.ctl_set.temperature; + delta_uv = param->value.state_change.ctl_set.delta_uv; + state.light_lightness_actual.lightness = lightness; + esp_ble_mesh_server_model_update_state(lightness_server.model, ESP_BLE_MESH_LIGHT_LIGHTNESS_ACTUAL_STATE, &state); + state.light_lightness_linear.lightness = convert_lightness_actual_to_linear(lightness); + esp_ble_mesh_server_model_update_state(lightness_server.model, ESP_BLE_MESH_LIGHT_LIGHTNESS_LINEAR_STATE, &state); + state.gen_onoff.onoff = lightness ? LED_ON : LED_OFF; + esp_ble_mesh_server_model_update_state(onoff_server_0.model, ESP_BLE_MESH_GENERIC_ONOFF_STATE, &state); + + /* Update bound states second way */ + light_ctl_set(param->ctx.recv_op, param->model, + ¶m->ctx, lightness, temperature, delta_uv); + break; + case ESP_BLE_MESH_MODEL_OP_LIGHT_CTL_TEMPERATURE_SET: + case ESP_BLE_MESH_MODEL_OP_LIGHT_CTL_TEMPERATURE_SET_UNACK: + /* Light CTL Temperature Server Model - Secondary Element */ + ESP_LOGI(TAG, "temperature 0x%04x, delta uv 0x%04x", + param->value.state_change.ctl_temp_set.temperature, + param->value.state_change.ctl_temp_set.delta_uv); + break; + /*!< Light CTL Setup Message Opcode */ + case ESP_BLE_MESH_MODEL_OP_LIGHT_CTL_DEFAULT_SET: + case ESP_BLE_MESH_MODEL_OP_LIGHT_CTL_DEFAULT_SET_UNACK: + /* Light CTL Setup Server Model - Primary Element */ + ESP_LOGI(TAG, "lightness 0x%04x, temperature 0x%04x, delta uv 0x%04x", + param->value.state_change.ctl_default_set.lightness, + param->value.state_change.ctl_default_set.temperature, + param->value.state_change.ctl_default_set.delta_uv); + break; + case ESP_BLE_MESH_MODEL_OP_LIGHT_CTL_TEMPERATURE_RANGE_SET: + case ESP_BLE_MESH_MODEL_OP_LIGHT_CTL_TEMPERATURE_RANGE_SET_UNACK: + /* Light CTL Setup Server Model - Primary Element */ + ESP_LOGI(TAG, "temperature min 0x%04x, max 0x%04x", + param->value.state_change.ctl_temp_range_set.range_min, + param->value.state_change.ctl_temp_range_set.range_max); + break; +#endif + } + break; + default: + ESP_LOGE(TAG, "Unknown Lighting Server event 0x%02x", event); + break; + } +} + +static void example_ble_mesh_custom_model_cb(esp_ble_mesh_model_cb_event_t event, + esp_ble_mesh_model_cb_param_t *param) +{ + ESP_LOGD(TAG, "event 0x%02x", event); + + switch (event) { + case ESP_BLE_MESH_MODEL_OPERATION_EVT: + ESP_LOGD(TAG, "ESP_BLE_MESH_MODEL_OPERATION_EVT"); + ESP_LOGD(TAG, "opcode: 0x%06x", param->model_operation.opcode); + genie_model_dispatch(param->model_operation.opcode, param->model_operation.model, + param->model_operation.ctx, param->model_operation.msg, param->model_operation.length); + break; + case ESP_BLE_MESH_MODEL_SEND_COMP_EVT: + ESP_LOGD(TAG, "ESP_BLE_MESH_MODEL_SEND_COMP_EVT"); + ESP_LOGD(TAG, "opcode: 0x%06x", param->model_send_comp.opcode); + if (param->model_send_comp.err_code) { + ESP_LOGE(TAG, "Failed to send message: 0x%06x, err: %d", param->model_send_comp.opcode, param->model_send_comp.err_code); + break; + } + break; + case ESP_BLE_MESH_MODEL_PUBLISH_COMP_EVT: + ESP_LOGD(TAG, "ESP_BLE_MESH_MODEL_PUBLISH_COMP_EVT"); + break; + case ESP_BLE_MESH_CLIENT_MODEL_RECV_PUBLISH_MSG_EVT: + ESP_LOGD(TAG, "ESP_BLE_MESH_CLIENT_MODEL_RECV_PUBLISH_MSG_EVT"); + break; + case ESP_BLE_MESH_CLIENT_MODEL_SEND_TIMEOUT_EVT: + ESP_LOGD(TAG, "ESP_BLE_MESH_CLIENT_MODEL_SEND_TIMEOUT_EVT"); + break; + case ESP_BLE_MESH_MODEL_PUBLISH_UPDATE_EVT: + ESP_LOGD(TAG, "ESP_BLE_MESH_MODEL_PUBLISH_UPDATE_EVT"); + break; + case ESP_BLE_MESH_SERVER_MODEL_UPDATE_STATE_COMP_EVT: + ESP_LOGD(TAG, "ESP_BLE_MESH_SERVER_MODEL_UPDATE_STATE_COMP_EVT"); + ESP_LOGD(TAG, "result %d, model id 0x%04x, type 0x%02x", + param->server_model_update_state.err_code, + param->server_model_update_state.model->model_id, + param->server_model_update_state.type); + break; + case ESP_BLE_MESH_MODEL_EVT_MAX: + ESP_LOGW(TAG, "ESP_BLE_MESH_MODEL_EVT_MAX"); + break; + default: + break; + } +} + +static esp_err_t ble_mesh_init(void) +{ + esp_err_t err; + + ESP_ERROR_CHECK(esp_ble_mesh_register_prov_callback(example_ble_mesh_provisioning_cb)); + ESP_ERROR_CHECK(esp_ble_mesh_register_config_server_callback(example_ble_mesh_config_server_cb)); + ESP_ERROR_CHECK(esp_ble_mesh_register_generic_server_callback(example_ble_mesh_generic_server_cb)); + ESP_ERROR_CHECK(esp_ble_mesh_register_lighting_server_callback(example_ble_mesh_lighting_server_cb)); + ESP_ERROR_CHECK(esp_ble_mesh_register_custom_model_callback(example_ble_mesh_custom_model_cb)); + + err = esp_ble_mesh_init(&provision, &composition); + if (err) { + ESP_LOGE(TAG, "Initializing mesh failed (err %d)", err); + return err; + } + + ESP_ERROR_CHECK(esp_ble_mesh_node_prov_enable(ESP_BLE_MESH_PROV_ADV | ESP_BLE_MESH_PROV_GATT)); + + if (esp_ble_mesh_node_is_provisioned()) { + ESP_LOGW(TAG, "node already provisioned"); + } else { + ESP_LOGW(TAG, "node not provisioned"); + light_driver_breath_start(0, 255, 0); /**< green blink */ + } + + return err; +} + +void config_triples(void) +{ + // AuthValue = SHA256(Product ID,MAC,Secret) + char *authvalue_string = NULL; + asprintf(&authvalue_string, "%08x,%s,%s", CONFIG_TRIPLES_PRODUCT_ID, CONFIG_TRIPLES_DEVICE_NAME, CONFIG_TRIPLES_DEVICE_SECRET); + ESP_LOGI(TAG, "authvalue_string: %s", authvalue_string); + + uint8_t sha256_out[32] = {0}; + mbedtls_sha256_ret((const unsigned char *)authvalue_string, strlen(authvalue_string), sha256_out, 0); + memcpy(static_val, sha256_out, 16); + provision.static_val = static_val; + + uint8_t product_id[4]; + mac_str2hex(authvalue_string, product_id); + swap_buf(dev_uuid + 3, product_id, 4); + + uint8_t ali_mac_address[6]; + mac_str2hex(CONFIG_TRIPLES_DEVICE_NAME, ali_mac_address); + swap_buf(dev_uuid + 7, ali_mac_address, 6); + ali_mac_address[5] -= 2; + esp_base_mac_addr_set(ali_mac_address); + + free(authvalue_string); +} + +void app_main(void) +{ + esp_err_t err; + + esp_log_level_set("genie_event", ESP_LOG_DEBUG); + ESP_LOGI(TAG, "Initializing..."); + + board_init(); + + err = nvs_flash_init(); + if (err == ESP_ERR_NVS_NO_FREE_PAGES) { + ESP_LOGI(TAG, "nvs_flash_erase..."); + ESP_ERROR_CHECK(nvs_flash_erase()); + err = nvs_flash_init(); + } + ESP_ERROR_CHECK(err); + +#ifdef CONFIG_GENIE_RESET_BY_REPEAT + genie_reset_by_repeat_init(); +#endif + + config_triples(); + + err = bluetooth_init(); + if (err) { + ESP_LOGE(TAG, "esp32_bluetooth_init failed (err %d)", err); + return; + } + + /* Open nvs namespace for storing/restoring mesh example info */ + err = ble_mesh_nvs_open(&NVS_HANDLE); + if (err) { + ESP_LOGE(TAG, "ble_mesh_nvs_open failed (err %d)", err); + return; + } + + /* Initialize the Bluetooth Mesh Subsystem */ + err = ble_mesh_init(); + if (err) { + ESP_LOGE(TAG, "Bluetooth mesh init failed (err %d)", err); + } +} diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/board.c b/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/board.c new file mode 100644 index 0000000000..dd36ff1976 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/board.c @@ -0,0 +1,227 @@ +/* AliGenie - Example + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ + +#include + +#include "driver/gpio.h" +#include "esp_log.h" + +#include "iot_button.h" +#include "light_driver.h" + +#include "genie_event.h" + +#define BUTTON_ON_OFF 0 /* on/off button */ +#define BUTTON_ACTIVE_LEVEL 0 + +static const char *TAG = "board"; + +static uint32_t dev_on_btn_num = BUTTON_ON_OFF; + +extern void user_genie_event_handle(genie_event_t event, void *p_arg); + +void button_tap_cb(void* arg) +{ + user_genie_event_handle(GENIE_EVT_BUTTON_TAP, NULL); +} + +static void board_led_init(void) +{ + /** + * NOTE: + * If the module has SPI flash, GPIOs 6-11 are connected to the module’s integrated SPI flash and PSRAM. + * If the module has PSRAM, GPIOs 16 and 17 are connected to the module’s integrated PSRAM. + */ + light_driver_config_t driver_config = { + .gpio_red = CONFIG_LIGHT_GPIO_RED, + .gpio_green = CONFIG_LIGHT_GPIO_GREEN, + .gpio_blue = CONFIG_LIGHT_GPIO_BLUE, + .gpio_cold = CONFIG_LIGHT_GPIO_COLD, + .gpio_warm = CONFIG_LIGHT_GPIO_WARM, + .fade_period_ms = CONFIG_LIGHT_FADE_PERIOD_MS, + .blink_period_ms = CONFIG_LIGHT_BLINK_PERIOD_MS, + }; + + /** + * @brief Light driver initialization + */ + ESP_ERROR_CHECK(light_driver_init(&driver_config)); + light_driver_set_mode(MODE_HSL); + // light_driver_set_switch(true); + + button_handle_t dev_on_off_btn = iot_button_create(BUTTON_ON_OFF, BUTTON_ACTIVE_LEVEL); + iot_button_set_evt_cb(dev_on_off_btn, BUTTON_CB_TAP, button_tap_cb, &dev_on_btn_num); +} + +void board_init(void) +{ + board_led_init(); +} + +/** + * hsl + */ +void board_led_hsl(uint8_t elem_index, uint16_t hue, uint16_t saturation, uint16_t lightness) +{ + static uint16_t last_hue = 0xFFFF; + static uint16_t last_saturation = 0xFFFF; + static uint16_t last_lightness = 0xFFFF; + + ESP_LOGD(TAG, "hue last state %d, state %d", last_hue, hue); + ESP_LOGD(TAG, "saturation last state %d, state %d", last_saturation, saturation); + ESP_LOGD(TAG, "lightness last state %d, state %d", last_lightness, lightness); + + if(last_hue != hue || last_saturation != saturation || last_lightness != lightness ) { + last_hue = hue; + last_saturation = saturation; + last_lightness = lightness; + + uint16_t actual_hue = (float)last_hue / (UINT16_MAX / 360.0); + uint8_t actual_saturation = (float)last_saturation / (UINT16_MAX / 100.0); + uint8_t actual_lightness = (float)last_lightness / (UINT16_MAX / 100.0); + + ESP_LOGD(TAG, "hsl: %d, %d, %d operation", actual_hue, actual_saturation, actual_lightness); + light_driver_set_hsl(actual_hue, actual_saturation, actual_lightness); + } +} + +/** + * temperature light temp + */ +void board_led_temperature(uint8_t elem_index, uint16_t temperature) +{ + static uint16_t last_temperature = 0xFFFF; + + ESP_LOGD(TAG, "temperature last state %d, state %d", last_temperature, temperature); + + if(last_temperature != temperature) { + last_temperature = temperature; + + uint16_t actual_temperature = (float)last_temperature / (UINT16_MAX / 100.0); + ESP_LOGD(TAG, "temperature %d %%%d operation", last_temperature, actual_temperature); + light_driver_set_color_temperature(actual_temperature); + } +} + +/** + * actual lightness + */ +void board_led_lightness(uint8_t elem_index, uint16_t actual) +{ + static uint16_t last_acual = 0xFFFF; + + ESP_LOGD(TAG, "actual last state %d, state %d", last_acual, actual); + + if(last_acual != actual) { + last_acual = actual; + + uint16_t actual_lightness = (float)last_acual / (UINT16_MAX / 100.0); + ESP_LOGD(TAG, "lightness %d %%%d operation", last_acual, actual_lightness); + light_driver_set_lightness(actual_lightness); + } +} + +/** + * onoff on/off + */ +void board_led_switch(uint8_t elem_index, uint8_t onoff) +{ + static uint8_t last_onoff = 0xFF; + + ESP_LOGD(TAG, "onoff last state %d, state %d", last_onoff, onoff); + if(last_onoff != onoff) { + last_onoff = onoff; + if (last_onoff) { + ESP_LOGD(TAG, "onoff %d operation", last_onoff); + light_driver_set_switch(true); + } else { + ESP_LOGD(TAG, "onoff %d operation", last_onoff); + light_driver_set_switch(false); + } + } +} + +#define MINDIFF (2.25e-308) + +static float bt_mesh_sqrt(float square) +{ + float root, last, diff; + + root = square / 3.0; + diff = 1; + + if (square <= 0) { + return 0; + } + + do { + last = root; + root = (root + square / root) / 2.0; + diff = root - last; + } while (diff > MINDIFF || diff < -MINDIFF); + + return root; +} + +static int32_t bt_mesh_ceiling(float num) +{ + int32_t inum = (int32_t)num; + if (num == (float)inum) { + return inum; + } + return inum + 1; +} + +uint16_t convert_lightness_actual_to_linear(uint16_t actual) +{ + float tmp = ((float) actual / UINT16_MAX); + return bt_mesh_ceiling(UINT16_MAX * tmp * tmp); +} + +uint16_t convert_lightness_linear_to_actual(uint16_t linear) +{ + return (uint16_t)(UINT16_MAX * bt_mesh_sqrt(((float) linear / UINT16_MAX))); +} + +int16_t convert_temperature_to_level(uint16_t temp, uint16_t min, uint16_t max) +{ + float tmp = (temp - min) * UINT16_MAX / (max - min); + return (int16_t) (tmp + INT16_MIN); +} + +uint16_t covert_level_to_temperature(int16_t level, uint16_t min, uint16_t max) +{ + float diff = (float) (max - min) / UINT16_MAX; + uint16_t tmp = (uint16_t) ((level - INT16_MIN) * diff); + return (uint16_t) (min + tmp); +} + +/* swap octets */ +void swap_buf(uint8_t *dst, const uint8_t *src, int len) +{ + int i; + + for (i = 0; i < len; i++) { + dst[len - 1 - i] = src[i]; + } +} + +uint8_t *mac_str2hex(const char *mac_str, uint8_t *mac_hex) +{ + uint32_t mac_data[6] = {0}; + + sscanf(mac_str, "%02x%02x%02x%02x%02x%02x", + mac_data, mac_data + 1, mac_data + 2, mac_data + 3, mac_data + 4, mac_data + 5); + + for (int i = 0; i < 6; i++) { + mac_hex[i] = mac_data[i]; + } + + return mac_hex; +} diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/component.mk b/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/component.mk new file mode 100644 index 0000000000..a98f634eae --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/component.mk @@ -0,0 +1,4 @@ +# +# "main" pseudo-component makefile. +# +# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/include/board.h b/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/include/board.h new file mode 100644 index 0000000000..23742ed419 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/include/board.h @@ -0,0 +1,85 @@ +/* AliGenie - Example + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ + +#ifndef _BOARD_H_ +#define _BOARD_H_ + +#include "driver/gpio.h" + +#include "light_driver.h" + +#ifdef __cplusplus +extern "C" { +#endif /**< __cplusplus */ + +#define LED_ON 1 +#define LED_OFF 0 + +#define POWERUP_KEY "powerup" + +/** + * @brief + */ +void board_init(void); + +/** + * @brief + */ +void board_led_hsl(uint8_t elem_index, uint16_t hue, uint16_t saturation, uint16_t lightness); + +/** + * @brief + */ +void board_led_temperature(uint8_t elem_index, uint16_t temperature); + +/** + * @brief + */ +void board_led_lightness(uint8_t elem_index, uint16_t actual); + +/** + * @brief + */ +void board_led_switch(uint8_t elem_index, uint8_t onoff); + +/** + * @brief + */ +uint16_t convert_lightness_actual_to_linear(uint16_t actual); + +/** + * @brief + */ +uint16_t convert_lightness_linear_to_actual(uint16_t linear); + +/** + * @brief + */ +int16_t convert_temperature_to_level(uint16_t temp, uint16_t min, uint16_t max); + +/** + * @brief + */ +uint16_t covert_level_to_temperature(int16_t level, uint16_t min, uint16_t max); + +/** + * @brief + */ +void swap_buf(uint8_t *dst, const uint8_t *src, int len); + +/** + * @brief + */ +uint8_t *mac_str2hex(const char *mac_str, uint8_t *mac_hex); + +#ifdef __cplusplus +} +#endif /**< __cplusplus */ + +#endif diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/partitions.csv b/examples/bluetooth/esp_ble_mesh/aligenie_demo/partitions.csv new file mode 100644 index 0000000000..bf8e43807f --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/partitions.csv @@ -0,0 +1,8 @@ +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, 0x9000, 16k +otadata, data, ota, 0xd000, 8k +phy_init, data, phy, 0xf000, 4k +ota_0, app, ota_0, 0x10000, 1920k +ota_1, app, ota_1, , 1920k +coredump, data, coredump, , 64K +reserved, data, 0xfe, , 128K diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/sdkconfig.defaults b/examples/bluetooth/esp_ble_mesh/aligenie_demo/sdkconfig.defaults new file mode 100644 index 0000000000..171bca4076 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/sdkconfig.defaults @@ -0,0 +1,37 @@ +# +# Partition Table +# +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" + +# +# Serial flasher config +# +CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +CONFIG_ESPTOOLPY_FLASHFREQ_80M=y + +# Override some defaults so BT stack is enabled +# by default in this example +CONFIG_BT_ENABLED=y +CONFIG_BTDM_CTRL_MODE_BLE_ONLY=y +CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY=n +CONFIG_BTDM_CTRL_MODE_BTDM=n +CONFIG_BTDM_MODEM_SLEEP=n +CONFIG_BTDM_SCAN_DUPL_TYPE_DATA_DEVICE=y +CONFIG_BTDM_BLE_MESH_SCAN_DUPL_EN=y +CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_MANUAL=y +CONFIG_BT_BTU_TASK_STACK_SIZE=4512 + +# Override some defaults of ESP BLE Mesh +CONFIG_BLE_MESH=y +CONFIG_BLE_MESH_NODE=y +CONFIG_BLE_MESH_PB_GATT=y +CONFIG_BLE_MESH_TX_SEG_MSG_COUNT=10 +CONFIG_BLE_MESH_RX_SEG_MSG_COUNT=10 +CONFIG_BLE_MESH_SETTINGS=y +CONFIG_BLE_MESH_SUBNET_COUNT=5 +CONFIG_BLE_MESH_APP_KEY_COUNT=5 +CONFIG_BLE_MESH_MODEL_KEY_COUNT=5 +CONFIG_BLE_MESH_MODEL_GROUP_COUNT=5 +CONFIG_BLE_MESH_MSG_CACHE_SIZE=20 +CONFIG_BLE_MESH_ADV_BUF_COUNT=256 diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/BLE_Mesh_AliGenie_Example.md b/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/BLE_Mesh_AliGenie_Example.md new file mode 100644 index 0000000000..76635be1af --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/BLE_Mesh_AliGenie_Example.md @@ -0,0 +1,111 @@ +| Supported Targets | ESP32 | +| ----------------- | ----- | + +ESP BLE Mesh AliGenie Example +============================= + +This demo shows how to use AliGenie to control the LED state. The basic procedures are as follows: + +1. Go to the Ali IoT platform to apply for device triples. +2. Configure triples. +3. Download and run this demo. +4. Use AliGenie speakers or AliGenie app for BLE Mesh to provision. +5. After devices are provisioned, use voice interaction or app to control the LED state with AliGenie speakers. + +# Basic Procedures + +## 1. Apply Triples + +## 1.1 Create Project + +The first step in using the Ali IoT platform is to create a project. Data between projects is isolated from each other. Steps: + +1. Log in to the console of the [Ali IoT platform](https://living.aliyun.com/?spm=a2c4g.11186623.2.13.4d219931TRSWJO). +2. Click Create Project. +3. Configure the project name. + +![Create Project](images/create_project.png) + +## 1.2 Create Product + +In each project, you can create multiple products. After the product is created, you can abstract the actual product into a data model composed of attributes, services, and events by defining product functions to facilitate cloud management and data interaction. + +1. On the main project page, click Create New Product. +2. Configure product parameters +3. Click Finish. After the product is successfully created, it will automatically enter the product function definition page. + +![Create Product](images/create_product.png) + +![Create Product](images/create_product_01.png) + +## 1.3 Definition Features + +The platform provides default standard functions for each category. After the product is created, the function definition page automatically displays the default standard functions of the product. + +You can add or modify features according to the following steps. On the product function definition page, click Add function corresponding to the standard function. + +![Create Product](images/create_product_02.png) + +## 1.4 Configure App + +The life IoT platform provides App services, which simplifies App development tasks. You can realize the data communication between the App and the platform through simple configuration, and achieve the effect of human-computer interaction. + +1. Click Next: Human-Computer Interaction to enter the product-human-computer interaction page. +2. Turn on the switch to control the product using the public version App. +3. Click the selection panel. Select a device panel in the Theme Panel tab in the Select Product Panel dialog box or design a panel by yourself in the custom panel. +4. Install the public version App "Cloud Intelligence". Click Install now, select the development version, and then scan the code to download the development version of the public version of the App. +5. Configure the boot page for device network configuration. + +![Create Product](images/create_product_03.png) + +## 1.2 Add Debug Device + +The device must use the unique device certificate (ProductID, DeviceName, DeviceSecret) issued by the platform to access the Ali IoT platform. + +1. Click Next: Device debugging, enter the product-device debugging page. +2. Select the corresponding module in the selection of authentication module/chip, and it is recommended to use the module that has been certified by Ali. +3. Click Add Test Device in Test Device. +4. Configure the device name. DeviceName can also be left unconfigured, and the system automatically generates the device name. +5. Click OK, the interface displays the device certificate of the test device. The activation credentials (ProductID, DeviceName, DeviceSecret) that need to be burned into the device are shown in the red box in the figure below. + +![Create Product](images/create_product_04.png) + +![Create Product](images/create_product_05.png) + +![Create Product](images/create_product_06.png) + +## 2. Configure triples + +1. Enter the examples/bluetooth/esp_ble_mesh/aligenie_demo directory and run `idf.py menuconfig` +2. Configure device triples information, save and exit after modification. + +![Configure triples](images/configure_triples_00.png) + +![Configure triples](images/configure_triples_01.png) + +![Configure triples](images/configure_triples_02.png) + +## 3. Config LED GPIO + +1. To use color-adjustable RGB lights, three GPIOs, RED, GREEN, and BLUE, need to be configured. + +![Configure LED](images/configure_led.png) + +## 4. Download and run this demo + +1. After all configurations are completed, you can run `idf.py flash monitor` to download and monitor. +2. After the download is complete, you can see this log. + +![Configure LED](images/flash_monitor.png) + +## 5. Provision + +1. When the device is powered on for the first time, the GREEN light will blink, indicating that the device has not been provisioned yet. +2. We can say "天猫精灵,发现智能设备" to the AliGenie speaker. +3. When the speaker finds the device and prompts whether to connect, we say "连接" to the AliGenie speaker, and you can start provisioning the device. +4. Next we can use voice to control the lights, for example:"天猫精灵,开灯"、"天猫精灵,关灯"、"天猫精灵,把灯调整成蓝色"、"天猫精灵,把灯调整成绿色"………… + +## 6. Reset + +1. The device can be reset by repeatedly resetting the device three times. +2. Each reset operation needs to wait until the light is on before proceeding. diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/configure_led.png b/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/configure_led.png new file mode 100644 index 0000000000000000000000000000000000000000..d62a76988ff6705cb2de02b3e6bd787f47ab9bcb GIT binary patch literal 33053 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 HN6-HU1&bEJ literal 0 HcmV?d00001 diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/configure_triples_00.png b/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/configure_triples_00.png new file mode 100644 index 0000000000000000000000000000000000000000..f7c20743da69bd4c1eaff851e215e2bbf86f5d5f GIT binary patch literal 30243 zcmcG#cUV(h*C&kSw%n*#Dbkc8O79S=Qf+{hUWCvz^bn8|Vh4l}kxnQo0xC^Cl0dT+y+bbL=Gce zzg9bFnVIq{H$2$a@x+&6^2i%<-{jtnMU9jHR`9NDjHdhedFHC5%`kVZw}UgL z9B${AgpFlJEY(=B3+~ga+)+!gtu7;>CDOwt?x%7|(XX2_uh2mx_gw5FY47o5rd(B6 z>qZh(;(I`kYX~iKpwl>*mJNyNh3*ttQE%g&xuu}WspEw4Hf@!Y`3=_=I5519MO@3I z)~uxea6b#J_kNfDaObYvCn|V_3tLRujS4R>6&2OoPYU}(|5Xj}!i9jk|DN%K0j_|Elzpb24K_4Q~|Z-~44+x;1#{ziN(52K*Aq%ZZXNe zOR|5+UV!C>bkULJ|P1Tzz8`J$k|BKe}e>3H+~qk6ZJQ`k#n=|C+l5njR>J`MSOMFVNiW z{r|JWRfvTD)m}KP;XiTve-Zc7Nj}OGWL^ovU-8`cuiK^lQlkI5dmwk5rx7|`)owS3 zK``7-M2bO-9HPFyo_o!D@6yxWVmq07iQe}K^ODjZ1V#S^6{CTtJ=et z)an1#jUhS|Xg#cx6Bn>nsK2RBqr$-%X3Pw9UeQ5fUQq_;&arR(LFQ7d@8Ps6FE&-g~?$SWH(objeFYQ_RoT~!vpvO?IAME*P^uBrA@A3qV!mpj@3Y6AK+b# zYe`ogm5On`=$;oicUo$)?1W@AF}@}C#uA$2AHGx{!Z{uNtE0Gv(L}o%xZ+yXH3kXw zhnsrt`}UsKxd*5GPy$qcIXwh?ST^3THY3+9|3>5Ffn>u2^l0g*1V0^j3ATec>w#sG zf5zPwhoD!9ul@L*nDS8mcHx!I+RkYUG=8)HVI)Ikn$dmA`AlvgcZd*Pm{V=%+&F-G zYjSM*_{;uXZe|hQlfFGv@Nh@$Mu;D6mT{mtJL-4y6*7Ex}P9`7a zE;El4G(brAUYHOT5u-xoPhwbgmbh}+0_D4Nz+&Q-jKrovcxBAI@sJ|bH3awzeD1eC zwO9pDpYYNkFoyzxob*TkOIA~VMzbo zL$iui(+9Ri$wmGCb^8ML?SvKd*OV6<*Y>80ww~aYS-CW3)%AGRoy1;f?GKU@RB75W z)D8>d4K+ErC2MWSt$R=Xr2zj>$u7%fD&l>SNBi0WVs>qtg?SFlyA$x!=KxUqZ8hlG zra9jF!4Ix0bjPB@5m_uqkZh7soQ(c7YtfnNzC-B^>N~Jb6_t8y6tt!^81vUuCTj5b zQ&g*5NUJM}ilR{bR(253_aR0XVs;>)Qv>Nb*{8eB}avl;}f!a+c0{w1c*W08AE} zpO^?hGVFP;I;Wvdfbn9^Kpj3Tmj&M_K%p%P(`=Uy)KY! zYI5|mD=*3OnZ>E1kG(X#r2!@WTOgy|${a9qMIaXuiPKm_yONfZVIDM{%~?x8Iv6FM zZD*nqNR1vA3q`f8VC3VvN9xBA*BjL(p~mThI&K!cfic#@eitr5C}WH|vJrU#Ty+kS z#Z4A+Px7(eptTG+kJ-1(PB4iG&Nt)2n`Rr~(~-$ItiW6Fn6s04XR(IMJ|&A?8!!`+ zQDWp{yp<=GVsNe3-n)#y)p>YlW=kLN(}VeHjv)~0`pDSDAuD8$`091f&Dp?TE2mbQ zf;YWfb5pcGY^El!UD~~U%t6C(?cfvIKAvqx&ikW=t>TQV)+O`ll5XsIN%N5l^AwU+ z{aR))(tCPj{%-lk=k@|OEKqhVC3YkLJ$4aOM1ss~z!l}XZtC^%_oTO=B-oSSH+&iI4%t0CNb~{a(u&ns} z0<~doeIKg`owSUd&C*xR2SY$p2H8Mz3T6A?-{hlDGzI(Rdao(EhMB0cX%mZ`ALB*C z{VQ@NFBNb=IMmy@Fbx|$+VyKH_?rHM+~aP>++6xyb}luKIh-bbf-uu$!<^oVnR`*e zIKc?XtDzvw7Z6pDe&N@~e9pqFR-0&M?E~$YTg9U5nu@jStYB$Qam~(K^*i2~IPZp0oI%)1bay2x z4Or9%JJv zAoq>NwdlLahEhLo<`CZ-`ixo5q}}G0<@hHB4k1EZE-jF+(n+(3DZr&_2c8hEZnf1H z=D3sXm(Euq95f;;_dV&Qvar-9>a-b^n^xPH@I?rcSKm2j!c;#Y_-YQckim5A8#{i8d`p zBJhl;D7U8mY9n|MQUj{1Emh@%o`MAGuTAav)^lZN>bd8);~GGBbyn!%R}b#mh@AK= z?e%KG?-kW5FQJp|a-}{PzfQ2seF=mP!#}xl$$>7p-6^tX%qMWYD>*TUn$Bk8YcC?F zF)qo2{omB;*kKFoCvN%xZ>qVy0BinvixQ~^R_<@h>&gS0dQi|h>}(p?k?Y&{Y8`vn zNhM@g&nE>ikien-^7XIj>xjIzRIsRNhIx3X|!HWNNHfx ziCV=n`i=TZ+Y`4O8&8bsXm60}M=jqT#I{f;$1>q_OP?N0Epp?!nDTD0);j}P#CEJ@Jdx=Y$OI<9Q(IGnZ=3*cwmw_>^hFeKl1GdahKY@+9yOIn9nx$%`4z_6{0p!H1`5!@;ukI3qg}ph3OGt>XVNXV z*+6_Ab9JC-VNhl6?!gtth2-U~7)w*?3b7MEHnILIDqvZKGR=ER`0CA@9uctiZoZid#t@c^hfhSG}+xBK00Pz2igRZmJB;?+8(31A?IcxB$|0z#$dGo#h)3QdWb9kX&X!c2)txT93Ya)~j1%y%`2R5zl zz*euUswD1pR$C=ShbpqanDlvct4Ujp|j6KI23AGzINu?Mgysfm(ylRjC{{(-yN3D_)8(nRp78Om=zJCGl4>G`AzCMW=P!?AX-puZK!05Ie< z!_(_+q+)2WBz8hr*`{?}v?w)qw`VsFX#{$jPWv0Zt}7M^PD1Ty*Y5gC2P@5vN7$+E zM7p^$NN;Y}K6JZ_krG9Ci+harM~k3+Cxw0*q}M6|YyC=XNvjuWhMs+y6LmgujE>WQ05yZz9#oGwa)RougQn>%P@8} z#unyaL3D$ipR@ti8o@MN7-2s)m&(;>|g=>~0U2zNaC};zc^tcHtf8!H6?- z?>vp}v!|1`K~4ZCvZ?!>49vR~#N1bfdU1wZS#Un6^s|>Fn+7;AGepzwQ2bg&dHMJS zXx%6^0x*YuvmG!3xqtOYc@yHziS^0;f|BEe-n~B$C74H?x)!+7-F|_;*I;}2rMIhR zy7~R$*jhg9U#5!zit?`yz{J+vQ5HgaQ3c6k;!rCgdehBs_WM2Z*R^M&)XG4qp6)9h zTB!(`e;D%}dWKC5nePFQ4QRD%6Xm z(j;G1NOuTNAy>9{WI3BtG@X3S5Wrdi&Viw@Stc)s%GROJJf6C!CunOlR{8Y@L$0L2 zx%Y*AUA~<(5LJ^U5x6}`Bk9^oYyl}-$Ec;bo7bm{rY-xieL^}1nmdTW<9hmn8k5E2 z1Df8!GYt{Qkqo>faDiHjR?gukL#Mr<5HXOOR^U*Gx@$LEoI&i{2P;)$Qm-!sN;H3; zr*fi=63P;<)x}&OrKXl)!HM1ypYq+s=&V>SOxJB{65?8fb&Tm`2TTk7Et$G9G4%b* zfVjeh4)m=y6<~msE?fPbS%x91Q6D(s8mLFMSK~;j1HVl1Exqqtu|Jy*16C+M&cyjS zTn-)7xUiA)6QtwqpxN`6rm||Je{lcJCe==EiNH4FCE7HO`+mjNttTvXVh#wuH{BEj-g4^Uw>|nVGg*1AYKmI)I%D0LS~o%kMI@ z3XZ@hDLKn!Ab7;Ra!I(hk}ZkI@X?o6tA>7I1>gXegmy>Ok|1QjTWZy`HzB;S=r_70 zY=paF_-p8mRw%@1!@hUYw&mk8SuZN5t}o#);FQ5%D8L1yS$d;+8A!j8h`i-&T9y>@`qb zZy%OKh?;o(kR<9_zjt3*lhvLp1NJNTHK}GY zl=t_;MJ7Z25T2emFM41%`lnSxOcruFM~PkAd*L)>bN#V+yo0S9eBo{-=UzqH2yrkI z&J*>KZ1*iua6dr;5PGS`Q zu0KAVKND)y*?Cd<=Crna2Mm2NLW5PQI9ud}KdqDS_0R}7s zVa??J0NJ9}POAXE8@pxB4?F8;QZseVnopF_PUz1U0kPrkiX1w8pvGS(R`CF##c{SI zX4F4kR!tM=IMV`0HWuqk=$NR(nn?<4_T76xGxN35U`4OcKA_=b$hYbdBJ+L19L~?& zj|bvKeA3IYiGretTG{-u*@{&Edg?l#!XK%l7mwN)x?@fxW7iJ%0+P7LvIuHa%8-d=6*;sj=6y{nCeAsG~qrQ5BAFS+zPhf$=0v|Hk^61MP z`A$e1Vj1-F*@(_&MS1VW=a!1JinNWb2Ys(*SA}!IrW}5+$%Et?%S9WSUNkNZc)Dx@ z+R&exwtWz9p2;7u+z^!PZ*!>DYe+ERW`akX_QK86E)Rydv6Aq$gc`K9TVS5=EV{x{ zE*unmF+fIX$XtUBQ_^;X3F2=r9lg~UMEiim!hTMuUda8cyuP73)5o^cMEgwV+7PU> zWw3927m!q|SKom?g+1!2_C^>R>_VAkbD!pD0p-E&xQzAMA3Vu4qXuYT-ufu4eZ@ZX zOT1x$HAtVV3Q(e%hZ{~`7RE{$O@ixEz^xD|_Z!HAET2U3`9y3fPBLod<618;i+VM? zH#gHqtlFA@_wEDjrmyLq8rcMnRi?26DpI`shAR!D?u7n6Bnb8Q+xw9b{>n}m+-?8aLx|XNB(v&s`yGU z9zcQ2L^L#DA8j6THYm=D87v+;dA&gT6zz3sjKamd;0j}lK`}$)2J%jrxqv}HYo&!KhDbCG(`0;^4<%s2eVUpJo zyLF#%O&r=!-N5WKc(2 zfm)n$8+gkM%IFA25sByp1wKSFa#CUjuq{EhJ$)>v=$<{a!aqy zm>MD|@IL316L2g6U6B3!X(Z~{_8+38pIWPT=I7imQ&Q`_MH*z3WA%5h&|0>9uqoZynS^33Sd9RPQF=!OlNb3bJqEYD z4QAHvVGz&SecvQht%tR=ctJ<&I$DgGa5?oH$t*@-D70t1P)!sL^CaApsZ;YY6`!E` zxhjE!-3@)JcTUH7DzSa-Bhfd%lnybzjb%uKJw`aj6)tAq9dk+kiHNyBX; zYpN`&J)LNvl1@exWH-+w8r_G~QMw%2;Z8n=K($`h{BAs5UBPL4S&;^eaq9t_vAcRE zw_7(xaqbGlSa$e5VCW6-?zvLN^3_s%%EpTHYpptLGNL#$>AqkrnR5c?wJ8W}X@#&$ zCu-MCscp%-Wh`HW=~(Pfo5anx2N}ZmLG)Ld5lw6P0~wqNI%FD#EeFl~rK*~t6~Kso zenTd)*hxc~6FczpP+})D;5_m#66UN>3(!o3kMA3x5`Ec7t{pnrkT2PpOO$J?%#l&~ zRmwYGIOR6uQZoZcT%D5Q9m4#K{85~azj)TBviQomw%fli^yltRhGMUnMV_^(Vieq* zvgiG$=aA?(g%<9rQXE09?RKcd+&9ScE>uAWk_MT1AYl3;%w6#{?~EvSoal}YWu7D~ zr92S0=i4^@XN&Tm^7YjJX~or%dxr3yWEn%%9;w`E&0h}`DUYtVA#dz zf9veA+Bk?E+4@zy4&|i~6^JCII_Upeg4*?HTH^2TL*hKCvqgN0^*|#rLcu z4Gty}VqcY~C^12?yIW;gr_J>w;AH>0iy_Vn^+k&do`Z>~}MLA$R8tD%XKG-gN zu1Ww%e}R6Fl#^=qE|usYaL!c)o>8z3S+WR3g}?a9yg<7-H75*0`DG4^O@qpsA=aV! z%}ZMyT9igNwbk=?DT5?ZK~(2?`aoZy|?YHp$JQVj_(^OEcV2_}mNE=8gye#lahd(R~-Ma#>`~ zhf=LPAP|K)nb2ZXl25kR))qPHc&^VcRyTWZ5n>EU%GR7uftHXym|L@)Fb-5)n7J;vuQ zo7o?%vH~h2fs+QtUi*h|KhKk&Ere6s==`dc`2U zAKNB%GGpowm{wN~b$``vXcbMa%NkKRoUS~yV3y0mKWY{_`2JD#YeWIK)Nb=Ed9GJ= zqBQzU6QfUtKj^veq-K(OMD^NrxsBNy5Pt=4c;zZ-LUBh3n7os%Y~LN+{XR736(%}P zMz9)Ykrck((33yfB9FP!8*=RNm*|J^Lj81d>Fx5YyQ6CQ;hTlk-Y+sK5x+>scciExo;O9o0WWmx zoke5(WVo|(im%mD)~rciBC;5!J)_vg9C?-`v=UF60j$QR?Ykea18hqVuBTl7m{EN| z-6&$A5`fpUC1d}tlvoD(GsX-3$55|;=6$3Vwb@bO;jA__8`jq?{gc>N+_6dviDj#K zBuF$l_xQo`%!`;0?iUnHXQ>x^|tt1%G}VGoGKonT8R$3ft$Xk3OoH zi&?}sX4btAejDkcIJxH7)6u2flNMp9J8(CWs_20p(!H_NtCvmlEEy22T&d#CQR{01 zr8j6bRA((~!IKq>6W(Gk+tl#2)%UGk;oE4+aQtDT=3vy{$>IS<>HW{&{x}?c=sMt1 zVu!}52Ay}(-JqK&k8TBQgADpAHP=hl?XU};G(UKfi%JDhWTANTHq_P0hssGL54Q81JteF~ zgcBOlTQrTLe{*(PclIqcPLqU(Sg`c0cOj1~HH&h$Pw(VVp26C4$QCS+(nNmKDzs`X zqgEaRcF-6NFIn-+ag4Z4ffVFqC77({n75{PObJV_y5cC~DEL6*e93+6uTavcqmLsg zLrqVJ{{Yqi;vdYK=0Y_jio@7-MVmo>M5-HFv6HkWof zF3o741^C_RU^*5-0YU9YA7I9%A(Jrxg;{*5T*07#yX$_@x{bRR7~k3rGIGnr>Vq9Q zW#r)Q@l1pVRoAM^HFq4a0q1<`JNj-@ z3Jfc>J4$s{;Na1gim_fLu$E7rTnX*ES#SMV##=853DkuRkM#bwtPm7))$&3vYw9X8 zOe7vFM)OF@u!Uc9;KXH?C-8P4eXGbqPsz>+FOrPzM z2MJudE{V!S9L&2O#&b@P?Nk{s2|9;o9aQ~pFl%|`hzFtmh+dbxCzYpAhfWIGN zKP_D&6mNk%8kx}Fem&QeL`{APq3s1wr|U#NS_rE75CvZFpN8G$D1m(+``?aSo&?><v31I=kAX_W z)b|mxq_223t;27_=tQso@8V&bYO5@MFmjABga}2|tRCH`2^ACTz5OvTJ%5dpiD}2q zv<7Sy(Z=2BD(Vu|p@u&)#~amGYyyvdqL&BYQAQXw@d{UcP-yvbA~~!k5CpP)I%koT zXbQx^-_%~(O^k`pUvbvgCa=xdUogrBrEC-qa=rc3^Mw`}-UB)C(*Do2bi<^^vEf!! zxN)un#<=49S)dKAK~j=7ID^~ zaLVSE?E9Qu;1IRu0AODe^kEKva2_(9YJ~mLR-a_Pc zRwYWiJOSW2m*4;koolKC~Vh+XomrHa&M&i%3%757_Y<8ft zECT#xK^n+{-iG}>+q8?=j=PkwQX=B6BQB469s}p-0D*Hp8*NT!kyZU#kpSAEHQ!Rm zb>Pa}R#=bP)FQ}A!__45Hj(?KF9$qkFc>k}gRNAn59#sffEim9=C|%-v^WI9Ufjy3 zt@0ulx}Vs3-!%I^q;2xMXTLJ^+R3V_xe2capb{a?0_U`M%onwRdJtHzeKzMzim}2e zTxTRLcwu;{pt=X9fnv^mT2#U+zf0)wVD9hlor7F6I4FpfFE6r@PK{x$sbHhC1f=~F z6SwukX0ibCI=rbVe{FF_wJq{SbQMW--I6reL)BB!oSY^jE=SUa8#x`t7Xv=Zij?w*lR>)AmfOIH)100Y27KOOCdpA|`eWPAcrAA{qmY z$EM3wFnvj7({>sHL+ZJ@1Ds`b!Rs3u427M09k7+~w{q|)qnwyNO-~x~v=#a)DGyiAP_rUpi0~>1hCz%rN}k*YntN zogtOz^}AIPM)Vdz09KFmhSdD-%}>A=ak_=er>K~au{_Jcp3HGCy1|#;RB(`j^tL-j zr@6?P1tor{sDnX_t748JB3Q0jRV(QGm>!2KbYIzkf){E*+hGK$C_9-eiG0|29qr%6 zmru#&XCAYfNIt60CuWwz&FvJyAt`#Fk#WolX1n+^)+Nn`Wy5oP&Vq4ECmY)wSAY0L zgp*I#=xncJ_>g;_oEnUx3MxNaI&76xUKWIRmzMYT*Wb!Sa==3~onpX4RaJX6g2njO=g@9SS?b=_5; zio%YqJ{Th^{l+w}@Uc=#_xZI{>^n2@vND1ft^CCB{~Emc&+1(NDet89KrhjOH@si0(-d6pkFT|XM z8tU%Ct~JgTyezYuw|WB3ZtaBFlEPfkA6&WCLv2xS6Hvw(ueY>koW}A=V_zm)5f!W$ zIi^Ulqp^y^{=BYD7y80mQuC=M<5rX8<@i&>ayMlz$szlGD}Mq+6fQXzC0{f*EE6?5 z6nZBhqthdx*%zE}ReS@MweCVp5i{u;7&mI-?igR9%IlXM%{RnNcC zEHc=-)i{yY(U=oHfoKhwF-3Nas@Z6tRu>wn!_+R=NK1f~<7!E7OABS+uViXCbjLdBAai4QUJn zsi6*k2n052Xi{H89#pdKoU5|6)0Ms$`_ zjgr`*uv|(fw;lZkR=*gNC(wG_vnadGH|?*e43kEt{bsh(cC|`aG~$8-;#g4*l3@QZ zr$^fn%L2JtU^f9iWXR=^A~AergwcFPRz|MT)Sh93w9y|3l+%EB;~nX;)Qba zQA{%4B{)qCWGckYVeE0Xj2lO2jnXe3hq9AtcGySZjyjh_!JNP8Rz+u?Yias8+QPdh zGC{-^C7MNrfYPiMrf4)%e^k$_zancaoAx7TT|2*mPQP~qL3IoONxHbilEWj>m3_kW z&{kCnWlG1Vw?XWr6QjQi{x;b;_}->wmXHJIBiM^+7aa`EA4K`kiWN3z*Y)6?21X^o zNR33?=zD;inp4P+t~1!HE;ss462I&?k(}y99L7reR`kGK(991EBlX-M1i-MXncN{!QC;aWQotdw>o3lI@!i7Aa>I?$yvoQ;tf2b+^f4% z)!VCi-ygWcHRKY5;W4HC^d=h!THIDbOoRyHsY~ZdQ@-Z_w$QnDo_uQDRT!@Q>ZC6; zdFr)tX#Zc>>tP9Zw<{9NNtBQU4#Gn@RHF>}s`9FUDlZ^FaVw33ZgWh8zhup2>PSD2 z5G#N{Q*)fkz<))Fr4FiP;0sj_b~G&@MzmN%pPHxhaVmWR&(TXX*Epvg?u&lX_}X-7i5R{uB7ho{l>s*}lt zo`K2fTO9+8S3-=*lX1E6At+bHXQc5=SxJtth(Czt1V|y;9C71O0cc!Mc=TjW?^KXrvN}nTI0gt?n)v#9* zVJ5YlP|7zG6HMfB!Swr+Kjm2<1f~oKOFQyJE>8ww%or%B{4-mfM|Ja-tCXD^hI?~7z9$?Y|GO$ zupOJ%4+V#;H6KeZJ6viji>Xqry9>Awbw9%q;_ooydJAZxLO$lGD3iR)n6|opbtz3< zLxCe{aP4g*L`->_3(w@w9a>XxrtYX&i#%^XBB?29M-NhpDeGj&$k3yGZ+bYtg5FrC z|3F3r-qkXqsOKG|xLhBWTqt2`)DhKtsW?hS+NpyBoqJ5CmE1rk&P|(7bG&wqM!32~ zVXkG^I~55rIeM?U$7R9oH6v78f+lXrBHX%ez4#k$*)=CHDLMFT9{7IWBE!9=JUNr# z^$~s)OgZl8FKOu$bM(hzy+nqc_Y7l4LvR2>v|K#wRh2W}myBbJ{u`eLxla3$;QJ*c zIr>;nY@3!!0jW9bl({I7?hFmcOb2bl%%Uq^9=FkfRcw%EW$%Ksv8)s z9Z;J?Qmn)M?TaC#zmFgqr^b&tJpVhJbM*-1=;Dt5PuHP6GgAMY+|J80Nji#Nqjz1hU65oNY&hlgn;q z?cx{A`u;>FP}Fj1K`ad2tGC=jWB4fM(NL>K%4Lj6wYSE_zs&r_z%~=1Wr-yI&0^Ls zVo1xedE&PisgnMd44zGCYXm23vcYmZdm@mW8#MAkEA?IhC+yI&COZ|p3%~iihpW3C z3tiq$;@F$?nF1-Uq;u7rkv=^ejay6F{s;7HFI! z-fMrXUKL*!va5-`h8Jiy?q{e1r#Gj8WArXjx>ljn}EL>B`SNGIT@#;*5ir^kN9Qjd~?+ zLMrrHai3fo3;qyU8GJSiT(GTo2k+b0K>Uy14ZEPt-6q<#5-=A znMtua&Bl;c!F?!1-++=mt^O+nw~URSI8>=0Z5RjY>0w~DGVw=CBSgfBy$m@N)4zzM zr#paW#+fV)zZF$O)7{AEgcrIEd`&9l|kA=<;}rs#JmWRmHid8x@H zsEj|izvF#}J(E>$L^(My%J9oAG9KDg7y7b&Z_7PT2ubp#*sNMK`&|vsg|#6*Ot+~? zieUW{OI2v}i#xT$MV(^2t&fA4nm*8KR9A*3+ROS_f8!UclGY)jbq>T(_YqvYAhFYf zF<#aW&}Yun;kCr7OZ&&I8|qFpj|VId*!ppkyh35)?stb4 z)rar5BEc=LQGyD)L{(}S$;|)78bCR)Uu|@2fZmnlFv{%7#=G+8oB`&MZ|Mq6_O1Io z&YRp$rp|^)ZVF=LM_}xxpzasJLA1`73B2f6nCJVMmOW1rOai7%O|Jid_oRc4war}S z%emBaxZEr^z_*@#nX(N`XaEB4czzcNLP?3fJID(b4tUX;7xpcy`o5>m%Z`~G-+}`{ z@^hEIXl2YszV328m<-)MSM^K%Pkz+HWcVxxDW`kml{s^LP5p(+lPk2N7hUdF+|-q- zYCDj8G~@7}3^gW@mg2|fTVT@s6_n$)Q=3dk+InOeJ(Mpj#d?-pku4h*#Id6vPCi=v z|8Y#YUyAkjq34gg!ZRq6A5W6>Z`2RGH}1F{Gcd2r&H6C7x<7^cXBic=_c+1sTboqW zD>tHnXxLV5FNyxEoxuL?G-v#$ehHg*jTS*$MEl zr6uHwvy?~6r^DEg+lKt>1==%%0&ao6PA^$(mmelK(}*Rz6HvKL&=<7qg3^imYta$@ ztMKQLrE!4dWKix%--sG03ZKhLR8U`?hElrvYlMSi) z7rhWJ=&(?ZB+KEd$yXwt_tZ*+*0YZ_ss)lOq|-EK-woXbIA8I@qW`E@izNv ztKCf{wYy`$;=K!vN2cv1+4pXl)q%bzyu2tg#eIIUt25>Av_-3@A0*f8mF3$jPrY9H zVs%0-%q2=H=1edkG0ZjbBxwmVfW0*LiUsS+SC1L8&DN1G8Wz40;{{ELw2`eMK_I(j zm8%7$6zs;rb5Q zHLlW`jo7_}ElkO{R49xGI5}rvjSKO(e*;!xSxY7-_z`^Tb>@Pl%aC5gU}$@3#U%dA z&&j6GIGxq)3vP=W)a%J_-aYFcK56S{;q}C&{Jh{^|K!0(^p8@e=5H^ZM#y!Ph$Lt` z61#y{`_M< zGw8z_@@7jRvGGgeF};5I2(JM8&4)?$Z~R^e;Iub{|+|ricHG9f*_y6Z(AO z-Z%=K{8uLzGqyxX_ZaKu z=KdS?fitiD5VAPM%BpwBXjxQ%UrTJa&T8Yu?!Qc9l#mL@9hxh#%f}azI zS(f$nE$YeQgShUJi&taK!q7{)+mu$hD#NuF;*SIelZS$dGafF#nm+isW(dg+W;o6f zY+s+K_A^b**;|4r*iRH_(UvVKR;V(RzbsVpSKe!kue)FSR{AsL3WZeufe&zFGfC zM*gRS?friTto(18&;PXfZzSV;PZCy%`6#9qHOQO$sL4*eWO?Cv6lHB_MHDN~B61kF zkmnmPYg4@GHy2Xc&n3GNu>8%T+<~w@m1!8o*@KF#&R8)9D_1&oIZ&J*^)-$J#PqFV zazw@HH#WI`*c?E{xY8CE#z{HUH+*~t>LA79Y~;1<{}=nZ|Kwx;?_B-=(9!=S`BSw$ zI+Q;y+v%!udX-8*?xn*Ch5F&EZFd17aD&{L=<`fEhZS<@4`13m{2R{B@bZ*jA3E(G z_F2klKhtqa*}>Bo8Wb3`Z1ztwh8Vw;=mUOqeo;6vt0;r`Hit{mY+ZDP%_S+wV?vt$ zB-PV4WYlsta< zJfS^)hlb?>tv8cScE>H5e#OuxE_>!bo6HX6aTc_~Yj_}nX}``^%6N@Vd+ug6?32&S zYd22CC#C!HW2tfzg{p8-rs<1C_C~XN;h|4GIunT;Ma)TtD9>ooH1)Tv-WACeB!3D+Ihfejb?!QD|+L4 ziqK(wEca~|bx5L7fX9xV>G;0J-90=YUJk@G&23Mj)1M!(8oV$o^Lo@dQ@euDF_EHm z=FWoH$@A&8{$h9CyCP1x;GQf|ifaN|mZMUvuxj4}2kJ2;*tRPsc+n z>H1ZkqLr>SKaAAsW@K=pvn4pSrzBvh^kYSps|cq<6OE$Jq?ZQ5xC; z(_T)bcnxecX=N_FcNVLnhigq$WhR^?Muj+R(MhaR`Nx7CbZ0)N74Rpt(yM8ZAO`yo zxN7Bi{_&ULFz0MXt@QC*Y@FmCrjq~mE_AJt_OYM&*! zf^)M%tk^!vyB5QPj2>h0E^r1?3%TQ8+0eNa_ZRl->#ZhW^k04;Tg^9y2NV98MzY;S zSHZ#T1qc!lU=){pw+%EO$nsHV(6a&4>*hCHMXTt$ebZNs)qk@}^x$<8P+xD}f0GwH zcANO~l(pk0&st1`f&`elC5<;z+u@-EBF)(Gm!-FowOaCfeE1oU18&MC1iL9D@$QP* z6Fk(F^U##d0%5{({_VXxk0Vpcw=c)#w!UFZQ-5)$SsneByU2*yQMxr&pj+g&Ef*{P z*~{6p9Epw+DuJs`y;+u`Oh0PX3GT&Wqm>wt@3UckkmMPaPt~;iv@@M|PEcO@nhN)A zf7G`5we@Z8_hcZ`#qo__*1a*Quu(27WR^Ko~TSYr%HC*9QR<-zbv6fFg zCd)GDlch(IiA(+m1Et>rHmJv>zTyEa37lWSq z@A4(V@iWnVBt~K<)p^VLK_7B;n=%(ddc7*NCqoj*s64H73;iC$L%jF*UR$FnL)7uF z@6ELay6*Khkkup5NylH2+GJGGkOB-&EJ{+1DhgEX?#)8FH)U%R-4&t>nt6K4$%dlg z2A+`l2TUoaH(A`W0QqMtdJ7=3_^io!#y-SAvQ}K=-NV8M0yGuazC0=rGDN&8&rTPY zO4W3(e;3PU?%sKAr@gks|7_f@VVvX9wKZoAtiNM~(NR;iIUh=O^aidX>cM7(41J?X zKE!+c@OnD&)ADCAca7ZX!Z>V|RGiy*Fz%P11DsP0C=xKDxRnQDMl3YDBr{^wO5i5P zz((~9b-Hk-R*>y_$r)DS``{AgO3~&^!IHWgH$RU{-afnN7~-%gD!ck-D0G&SA&?n% zOxQx|x9&%S!EAUNOuV7R!RT=HReP4<8tE}a6PC4oZu}@njerk&nKQNRUPnv5?J)dO zn8^DhYjJp{`Xu>$^niy(gn*TGYjbDLP4*l{bK>&l@6tD<=JsYF0?fSBA6%bhYQtL0 z_U>54^pdm!s_>t;jO*Di2GX^!#97`tfZmLCeej*6-0Q+c^O@QN+;{^{hZN`GF%#ko|7eo3nh1wmVRXKmiI zH`njmk(FC&8)M}dr{H=fHpxKdzq&hQMd;M>EWf@cQao$YZ?k~S#+;zpTH>^KoR9pT zN-|5e9*xG->wWGsQimFKiugJYO0wjw)4Y~b3=li2I$!yA@4u`xx^e<_uVlP2Vd4uq zNrm8ZIIt#b0jYLnuwA-6uNAa8yI9T4iu0De9!U2zm0Wh!tg?q0<3DDv@8NbPBUu9M z945dKIHRXm6=JNKOWLF9$cu+X`fY>D9$m<1OiNcTSEOJ9Q|+ax9{icEW+H(wk7mLXYOP8XZmi7N#9?%M1md!7z2mK zm1foGY2@S+wU;y_@gBN&3Hp&}5_?gcp+Le$N6M27OiAY%twdq^GkoW6ErUbo)^NM> zpNJjay9cto$6cpkBf8tO(?+Ppt5M5BQcm_bGupa9}E=I!eRIq$gIJ9|_sMH+0!y4%*@ScX8RIC->< z)#<-H%O7&5=879s2x|iN7mdKb|7-Ce=obtSg|0j_gP5qGQOB;Ru5L%Vzqjh&aX0bp zgMe~k7yR6WL5p{kvzK}$hXq&hn#rLe+Y_uv@U4j`P(xdx*qt`(tTAx7A?lhS@T#0` zah>XOfR@1M6QFy#gi`r1+5B!5YXGMHSa}$0t@Idu7@LV;eh~-JE$l(Sv`(|(kdrO3 zT)S)7feq9QZG?W|aNw1yW-qt&M9Z{Yno|;9`^{&M8JoU9$tdo?$2yTa{c~9Z$>JBD zq=fIR=C5;GmlgLYrOdm^+SJDruP-jP;aQjdAlKz0lb5kyFlM3O)VYym_NOx3)stO; zREA19NH^e*!U=|Az}gM1R0}L1nwqkmF>4gkemn^C(5n?FRW4_$DCPNP(2fviR|uBr zK9I_#M%8L9KINwsc`rHV>;2YwUlWS_Oit}!e26r5Wo|pPP`*J2FWTk%;B&-y)n|NM zp~366)pxFt?IWWI$t+b6qq!v2lXGHSOAok;Nu|HYMc+TS|7ZV~fi$7wZxo@H5>+Kl z^Tzkhg?y)SrOr`BxB0*cL4z@*xsZy4=FF9jorY+`Me_cVQJzg?| zrX+MmAnW-g14DyT2w;)4}%bH1a6SxKF@}ZArdp zJN7CjuakqAf5~?KwsvoK9hmms?n+3G3AmLWpnWWA*_#r<5UDEgc(`7JJLMfE4Aok5=tc z8T(t~svi7`F%&z=+T@TL8N2C?PY>3lb}cb&zLEat*~_Q9@q=Y0m=n*ZGVMP=VXc;lc!1tbe zL%m=OPeMx9=R&thTsroi3%gW$bji=07kaMu(0^;o2gnBd&u@t!a~}CCBX$(7!AX!J z4DtT}N_FBItXMHInN}pqHsqvT&GNa9yxL_CeI39LFvekWYhYtVc3@-8IC>qQl4&ru z6gf(?pO#W04IJKbB6Udq^*MM#K;1b%u+gR{yK4UY4tcmzKFaU4J6DunD1aOD9SKNe zqW~ytaApQ))v;b-a+#)o!e3GY?RQP1kov$(P^szn#RNk&^^Go&L2@eH!l^~D(L$$h zb9P+-ZX4XSNd6ue@>?Hm@4EZkXFbqxCMf(o^YNgOoP!}@+A!j^x>O|+l%-lbHzH^2CVgvLg25YQj zcG@cRvC#o%fxbhj6K@qH(AJ?3L|UV8eQW?w)JCo>7FsU9SZ$r+pZ}pUi+#rB8A1O_ z|HrSIUBa`+1e&!GZ%hcz?$!_+xcu`HSbfkdxeir4kC7OHpv)c(X2d_ zni1E{=Jr#sdPs+iYQ{+&5!#y5$Adm7lO9!FrMF_&j)&Q+v`r?ALMSf70hH%_K})vt z`IFsC#`37`Q`No1p5~*`qEa4GoBFhO=(aW1kw^Rl8CD~Z**+{uE-AsRv?E996S=~O ztT*K?w$yNlF$JuHd2(Us1BKprDb`75J9E)wQ2H!2`Czo&F+yJj-wH0aY&tUV_OesqXB!D&9$YE_Gob@&k7$6I)5(gX?7X7#QLw9i=>!YVs7% zzRr1aX&u^x6QdB-TAMV#aeMjAMhr6UpNKx>Y)jb;Z3!O#nokRh{;l$yj;hQD3uRZT}=4~v)q_IsUJuU z*3wJ7VDtW+F=y_FY4~Z~c#aJ8H8XoFSGyLXXHjjNG<1qi^g?TU7HpT-t6BqCUa=io zG`Rs;ZAxvfv|>Sr=vl(p9Q&W~WmwAHFz*fIi;Bm_B+D1tuza?WcZ@CHI(Z*dy19-l zl>yZjJQgYBxgK~I@oEoX&;b^^XZM1>I%Oh}Xu%w{C$ zH8|a;z=}02X?fHK+oI!ZVW$VqHp)28QKB~Ou_IunsWjK0UHdD9%rSwler$4(Qgb!w0KKSc4)s)Q$v5jX9K$#fSYisY?kxfyqY>#HE zt%6A`hbZFfN+Ip>_RAEzow6o;M5KQA{f2_@@AHan5KUbXv7iTlk)Pgi&Rl3pzqx9T z5IM*t8ubtr-!o-ha%F`vSM4M&j(+(g!qvVshKxgn2QM0Z>{^PV9skOctBFuE8 zQ9|z&$%}p=J={U%V*7wV5uyz9LmigmKiKB`hm)}VEI1JV|Df|2z0aas#R}T06JT5X zOF-j}iY`WDoQ^c9vEUAGqjlO4cdflz9NOw(2Ag>L)+JRn>6_U_Ytc6pr35B=Y6T5CwG z2p50gxSbtWWkIWcv3n?BBPXo22SwYlJDpkj!O_j^f9xf_f?Qz2js4Nfd2cp8DNJN0g!^Z}|c+z-HUfZ*D zoFG3@fXB@A=5i#Ne=jVt7aumv+Pq-g;zfM}MK>m#0L(H3Ts?>HC{J~QcKoOwSnhxS z{!=*Ozk2BlLUv?J5Zy7et2fN2y_~*HN&nd@RJ>7-JO=&nH6T@D0a?r|;j^>=3{Sz) zs1N)_%6kUZEl>rr@e=RZ8}vayWg}!a5kl^;wm{-d#GprvQbYRh3da$=oyy*`jY1Gd zwFCuEK~Yy`f5BNz23XBZ-9kNU?H125wHYQQ(!M>24uCXH&&JS>3O=0uK2Mj?D1?W# zo9~2h9TVX#(-%HC3G)msF8LFB=UP60g|%2WFDplG%kwpq4AkW0$3kr8SKzE?KQJqdG5b8GDMVE$5bf06k5X=o6w(IH^}H=e}xDI{hZT-Y-A6FIE$ z%)&0@VI*oM){vB<W6zeh)}}0u zg<4yI{hJl#KO-?@pi^*L$UprGC*p^QX+k`^O+XZw4rKuUMktXB*J16FJA13S0oqsdwa;j5a((6 zG7CghCMGTmFS-=gTGV1Vuix4d7RZ9|p1x2biI1tSsGWp}m`l$a`Ey|Z1+;k;3qO2u zT1!ez+v^vAp`42I#fPVz+jG`gRx>g6YmtE!546YkPOyNQyF<2+B4pkSC6lgKJ%X>7BA7?D}HI4WW*lIZrqayj=f; zDRi9hPGXYu{;{Ck@d;K#d_HKY_s20iR}dpgR~*4{)phjS;G4?rx*+=_=Sl>;?XCFoXt1CEjwy;nw}c*-OBY8e(7@* zHgfe8{pO+G%TZh-Ih_ZEsTEyGX%wA>x_+oJ2B^O9-rxU4`0$&N#cb@8fx~p4UwKQQ zcJtSD37`%Xu(S<)uN!BSRxPn~6BMi_$N>Xq;?XVZzdwk}7VD`#0m@&?YJo*u38I)T z`i3{2Bno^{D=Da9At&4IUh}k_M2EW#{TlK@@=vGy!DV^k?2Cdx+-e>f+smYX;}|EP z5dVv)YR;l?7&+Wrb6_3m`Xt4VP*B!68s{g%?M>_6u}f)B8w2hQH~rm2ow%AAiud&D z*ctyxUwWONzm&8sJbs7#v$a*^^>GkGZ!8PIye(<&6zUSuHcj#v6C-^H8d$ITK$r2O zU@q}Xg%akAi?Yn~8uLi-Jh zdIGv)BI!++YSR5S4%>B6$)qj9wQ&$0jO-qJ984GkQ1w5DC*xyzceN8Uxrv#UpG(K9 z_aWDu@5uIzQ`3!lNB*ePS@Fue{4w?8z|(<~xRIVC1g+dib;jPH)kj!@we+q^vnY}|Iy#dXzoS)@zcp^Jkg??Wlefl7 z0L`vdjKAA59}mSUkqKz6<+ApHjg6y11lK#i2S8D5;YTVb|GY4vF8TQy4qm;DVVymUT-u$apr?OFAb;;F zkXLBbADi=3UU3h*)Lm(baW8fSqe<6#zsEBs6_K24?d_!$vx-xTgWDY5pG?v7q2)re z3NF;+mHu+>JD=Pir$!!8pe@AEFMBbSYUGMt=MfC1w+=^|gl*_@6gaPP`28P7Yj~XI zJP=>+FP=wVLJX9AA4Dec&^glcO01O2{YM9pB3rlJYD*1Lemltjq^QH2zr1Q~4r%i$ ztG^u;iyDtE=FJ^EshiPr)tz(WL9gSF&D->t2J_CcH_`N=Vh$61g4!L^x`Z2f{-guH zQ?DW}-y!Tc$4KkkU)QQJ%~MYq@)m)$p9;HUtredT2dsv(9PuK@|06{X+Dg zhf2>2nR)3Fg*AcYcE9w(cOr;=i*?rSe*S4krYzspHvzKZA_~&X^1ixtUQ>G*Z)56} zC%@YTKjMMhG0+-YqC4+yQ-=m^>0@GW=hWj-QI7=9p{D!%*~|@+U30b+D_FL+1(Te& zv&wqwmuS2$oWnu&3Tz@g^wSINRWcPyW_@(Qw0EigavFs@R(SVM-vxs;yW?hS;&%1l z9pS)=J8roPW|rb{7S;o zye_fn=xA|%DrQ{N=JI9kh2*0d@;;XXO&Z{CR?Ai!Z^>JUjL)f;{F4m&OzG6EJl@I_ zT^^1n>S0_9vyl-^@nRj4>{=H*FQb@QaD66WaQFI#se=VSw`Sp@Sev}blwkWxM%W&)u;X9wcb&T65=x(CfRCKx8`N)=kOb1D|h5G2T$V=Z6Y~c z=cFa67v7+5l<`uecns+CwCyub;W1M8qp%2mzA`hKeG1%b|4=Bwfab=6bFVvxTs3fW z)U`(Vpm$yTa{Vu9Ub6ZLx~VUx$wseJr}kd5T<$S3M^$$FUHUycU*jY)`d*0rXefGl=OigC5T`YVyK@*OI-8^rGk|S?5=?H7!1Jx!5D8 zsAk3fg+EKRo1zT|=ne5b#D>ZO4y`EW;SrJIR^YUKwMb$T(2?mzTAJBzWFMN~an&ci@HwZUx_lt87 z*LUFet6GxwKc7!n@M@PglXz>+;pHf|i>dSU`{S3`ni7hme0VHKQlnR(YUP#6{o&Ms z2Gax1Ps9fI?V!F1!#y1@ruoKTG&|*XWVeP}7i+|veDZ{fsY6}0_C~@yStzy^|rMKR_qT>1#+Wbf6D?dV`ow8U03Ig11Q_*RIs2N_QWBcp!V?T7OSD>;9gG zKthyTo%yrWRz=tu1msLwrNwYvF=RD=pW}QeXS;v3vbQ07S&FcGOC8DO>qlI3e(vN@quGZLF*|9u&D1xdCQ%RBEK5URRQW=+W-x^_0{V)wyH%=V8wJ|-J z(=eG3ilu~(Mf~x4hb#()qG_B#wqj3rr7P;fQ4Y>Et=%JAncLC{F{6yURhqPwa^x;~ zf!Bn~WOV-u{*Uyxn5+_G<#8UsbF_w?k7Za<8bii5R%76<*acn64GvcG0gA}7q_jDu zF!Hd(2`4$Z3=E010%e?$xZB<<$05$j;WKmzOcj@5EKIXdtdS(pZymH`fK z0vvcU!g(ph-KTzK7-21jE-G51yUh@C8d?o^>vIV&R;DN$1|Q5h+Y5&OO_e>S%J46# zYJmMzNAf^jVb#5{1VM}Dp!NQh264faYZj)i#21r23pren$;u#e8d!poMWFok=TXT} z!q>`hM%%wMn7{~30{%Yabq(eQc@1$t-L-Kld3Y;pp``G0qX1yudp|z{44UJCviCK!F9{3;`n1Xu9V;hhqA3yWnjWzbo7*Ama_KF)-5b4tpoTWHNoEe?|W8 zg`hb%5^)8Jy504b7UBoh+{f(2-=Y;NrLlTFud8^9Bwt=XU%XCYqH_~{Co3vmx9Sm= ze$3S^^a#4$|9&u+usRxf?LR_Bb)ISJt@amK9Nqn3&p0hT ze+#8;51hggkH4}mxVQ6ABD2~3h8WHBKyC=5SuX8o`)qiqazMM=@!R$6K>;lT8%FqB zcd;LQeB%u-_}@hrpW$>p)?VJW1p7Xk-wuu1p6PmQZJWDeef3QcR^#D?c<-c;CiRDN zX&PP1&u(*^jB*NzPgnMwHo=Lr#XY&KuLog-jv^-_jVrmo7M{G zluWCl2>P6^JzEE-*I6#N&Gr|skp0}DS{n$`KH0#us>{sWh#nn^~-!q z!?$c#*rNbtlK<@#&V~wV_n{oj3&OmA50vHGN1NwC=DrIDa8WqS;KV!Zr*>ZiQlX7}hK~Rx*Uh6uf392(hK8C! z#tVF4dmJWv@NWj}Jn-O7fNF7B5QPA%5Q<5pNCp!C0zi+a$o@^O1&iokRnP`Lr8fr$ z=#KW16)$Y$yxprgdW$rnw)UJ=E^es`m0m=5X(j@cNi-7x0`QQWUf=*5!mQ)f2fjIL z4XEK`YrW|8B&yvmL0E`^4LB{P3u_Iu3ZQlvn1ITh+Z6B;ARGqa>|E*o*j*Hs49}2K zsVw@FH3&5qu@{gCwevA`r}j(uZ5ZF6WsvEhO!=}o#-7i=_C=BUM>{cFUUC1Mbvv(O z(dYyfS1-CB$Y(-JGSAp8In1giSNznA%Q=`S#?z(xIellBKLeh@tq_m(U4K5kYPbb| zqHN9K@%*688S-a>!&XKkTVwkiP;cS{=*fRZk4p8xIDj5~|BfCa`&SNb4Ts41Eppy_ zvuJ`2CYJiMIOQ-tr1H)`SZxRG{CV=ieMJ=hRDlwsmfLK`n8Eo@iiIxEdMg8Jcb zZ~2qR_G)@ZGEXKB-*;k@otP5k`lao&9xbikw`3a133kZ`({~6&vuAd^n!hbw6uq5z zq*DF#{2jF}<#RA~C7+9jSofV3I#_CIFk8s@V=ctVNDTG!&aLBSh$}`7j*lGeOg4u_ zY4(I9tzuRm*vL(TT@O$HJkM>wFhq6QK=T z`TW1Yhtgd=t@qqHXB1vy3IZo}42FA?F#5NxM;uWE5Y<04y*f07bmuzO?eqT1iXC-l z2z_8dS0SR!FxWX!kNR$#eKv1Y&BzV439YOG^w%v{vMe~jn9#JlAjwy-vfGzjaMQL;iIjc5-aBgS>2<3sv%U!Q#o$6{``-HFORz6yUjUPTk)>zu$uK)>hO1>O&!4C0NKB1vH!w> z&5FzgfgWGN z?O%}TBD}Ztb6Z#MQ@DY5|ID{q`7%P1k#C%*sTN|y8Mv+>Xa=ZUk}1A2@#?`#Q~3@v zg&WYv4DsN#4-jmaA78tG_vz$ix7@>vMm=zp%GiVZQHo2Tes@^CPcww14DmqKy~o+Y zSFMxr7ErJtAQYTR(3cDh|L3ZaP!j$*5oBcbPUsLPjot0i>f*Hqb2EPf@BHzv><;$y zXNgwr!%)VA%L%ajSI$6*Ln*4#mx@{6E^?p58B=AY-%?fo<}k5Y@CJc>IuFHcCM&WQ zGMw*^*C5TwGzmY_`_nS+ZOWc#-H@TW#k%W%qx`*0VD=9w(4QumNv(~KaITC3dQ*Q4 zRC{bUbBFfa%0OFL5Lq6DM)~(AgaWh|`gp{>X|#E_?@Cg?31x3O{!F6~<6ytwefYwh~dYZiWC1)8BPmstF4Pi9#P zgeG^7Ag))yL26mvpZ_2`;N=pmx`~&%lq2Ip&%DA6uryph-ZZqE$_rztk^ZyIvH1R9DT~fRn=4^vt{_7gMlXwb3xut>h^nad=T8%HIf<7v>>t zW52&bG1o!HDZ(R)GrTBg@x7au#?yA!=hX2e2x43Wk035pfID^nU5?`gFslgujSKFH;1w!f zms0wyXPM3SUADQ(G8e;MWWyBA$&Sl+#e`g~ru*luUg7(-mZ2~nYIHXKDxJS4p{%V? z&OaMNa_Gnkz0>A=-WCE=on{^;KtkL81OKX?o`{{g&U%qkxt!1Xo061L%+3MLKE1T> zANfB%+jlYTvq0y$I|bHvhwO~&6b|6Af$m`+D)LF#} zSf%pS7^Atx!6zZw{9BMXpEuN~5qr=%aMMFgFuOrgL)>m0{=5)57l9NwxWD?Ixd^LZ z;tNv_oSnR$>C4$1V+pv{R9WU-)_w8u9H(BI8C@Ryax+CQ4NHO#|F9vHfZ@E}RDScK zN*(vr5jFzWk2m@AVN@xPD(yqzelbDmH?A>89ZOCb&q2Br^j!VeGeC1r~uS@&nc0F7>}Yu zmo(^K+5S?e-TywH0TKkF^Zzw4`1iyA$E#2OA2&I*U%A{}ri@N?p1tsQEE<>HjQ*lM i*ll4UFml}j{jl+HFT_mnl23hq39^*;dG7Enk4 literal 0 HcmV?d00001 diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/configure_triples_01.png b/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/configure_triples_01.png new file mode 100644 index 0000000000000000000000000000000000000000..0fc2f33678a282c6119e5784f69f5d584a2fd73e GIT binary patch literal 22780 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 E10w?R(EtDd literal 0 HcmV?d00001 diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product_01.png b/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product_01.png new file mode 100644 index 0000000000000000000000000000000000000000..dadbae96c80d2fa539903e5590c4666e7f7cb98c GIT binary patch literal 29454 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 z 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

&;ToPC|&SpJ@zh(Z!K;e(Z^Z;&dNVYw3`v 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

OFTNJI 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%0D7MzBx*rkY1Sn}%t9jF<5 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⋙+z;~ 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 literal 0 HcmV?d00001 diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product_05.png b/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product_05.png new file mode 100644 index 0000000000000000000000000000000000000000..92bf92397bdd7eac44c2053b1d03ef6ecbb4fac1 GIT binary patch literal 131103 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%0DKp-EIrbtU~Y1BY8c(u$NWV*Mc6c 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ðwY7cIC}G{}RllbfpQMQ*Rvy@o!QTq!qq^)fFSB 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

$=EHYPNS z5xrKE%#K~!6BeDETamXXp*{s8n7m)8zW=1``T&YOJfpe*F-u%1Aw+ zB=Gq=rC09h=pXgrx5{?D3!~ULUWM?#IpgZ_?Dj+@Pptd4%83p<{i6!XBp#3Jy(3rX zUmEv!P-zKOZmDWs7@WemQe;MgqhKln{y1U3w%w|$g}y#UQ{MehOM8LAxG)>#+5aH8 zOJcisMR9T2KCcoiWw81S=HlU3Ha*LVMyJCLO5aRq7#<0z44c8>4_dT5J(w`uzhL>^ zq_ZxQJ>}of8>lAXVH=9LUBYedFT^h3-UuTxLShBo{zluoCh0l%zvRZO3K!zvjS@N% z_8jTBk+H!EE3vn8NUi{jHeu-U*eh*QsQu=1Zmz$E2=|y~Y*nv>$%=ZFnT6OIe1=lH zu<+`a56m>_)xr6=so-_jPTpN1h(60veh^9Fxh~bs4+X2ea<31t(2+Ujn0%t{Ui8K9 z!r&@0ryM)OvbrQopRk_!!oOK$_=0q=*US+bIK*21+O9WCu26T4BLN>buUuZ^tYz!& zS4p(6b$3)_zDPSjHrgc9>mA1K6uLnTbb@d;J!ackuo!+~TZWBOA||RXjF21seNR?#*-7jcpFInd?{^^#0h zePkBYW{9NzSP~~Cz&6uG1PKk>RX>y~C!WRe4TLc`U+ns6^0m!VGmkUg_482M^G$R# zC(b!tSK~QlQ7mAmUW^=Xnkg|D;#dsL1eSPGnj&~pTOPL@Ou0)pM$&Z zj-gJ_EL0`n%wSW790=AS?#+#-t1nKwSRN(5LK@TEho)4Gg5#5_@Ms9?0n$+5v7xT* z9fw!E@yO@y37kfzY}%zlwBrm#IMRhC3m;C^+mm@#{&QxM{o+VY&|1>2| zIweN%R5n*Pzd1c(lBA+gy`o9Yg!q)2Qr*6AV%d8_Nemq~{BABtB&-jFW!V&)P5rnW zq&k{nwI0EKk;~k@^?WCXmv{Rq@8W!2T6DFM&Je9G3kf?gL+V8Yp`$5moPMZ-3vOB6 zMAn!qy-MP>-TTZ{X^aX(8y4mY7zM|^8IT%LcqlJmz>D{Z%^k{n(G-`)wxG}AJ@F?F z+CHf8O6_?d;2qPPV#SvRqX^z9gBp>z>4p=IV@iU$ufG2Y@&&8DYwfySvdqgUES_hk z+UHN<=W#HE+=f+)O(9wIDW$<;b%lT&p%uOU-9mr;*>!Ph2K{%p1iT6>p@9_(9~=XS z&@=VbC$SG+$94)Vw&^&cQ)n8mc(BeNNKFp&uED7u+@q(0^3WN2NdHI!_lLt8iRzbm zhn`;Lo%MmZQ8ML#AzGf{J5v~?W=f0bn0DLyM&-^&jK`8^vAd4<EH_To%_ z)CYjIiok&1m7_0Y<_1?nto~VI1@XmT+vfM|`qN8=zL%@JDM?SS3ZQ>&OI~{&9X_3* zPX8#^v~BYce1hkODrM|Tb-b>_OL2K@OW4r&zvCY8|J!DBcmkhMixKP*?^)5m_QSm4 zEIG};e-yX;+94SqYgDO8u~A h1|0!kw!*>I`UIV&ckGkmXYrRi*d4Jg-tTkm{{db89GCzA literal 0 HcmV?d00001 diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product_06.png b/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product_06.png new file mode 100644 index 0000000000000000000000000000000000000000..8165d050e0a37b824adbfe4a1c245df04595963d GIT binary patch literal 136566 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 z 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

x@M%Xp3qWW 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

ez(5&p;sGJe#v2HYC<*dH~Lp+K>J&qe9x)#4?V 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�yF?J?hmL+F3%9( z8L;5dRA0ss^MO6woc<$(iX5zvLyO0@C;?4M#^E16N`<|q?;Xd3F<(r*@j7s!`GxOy z5YHuR5#B_f{tQR>gCF`^!(*kbZt$Mrg-EZ4?PrPma&F7uD#nedoU+AL9leVNpVY}6 z@JSmsNkHRyf7Z{AQQ@>ABIoxSP=Cpj9vKws`dqU-WHFXK&h9KmmHxh0UkOp`+ek~h zYX+k`2yCKMX(NQk8?D`=1;1pLy#nwJ7XM-=MsY_@UO6T%5=x zV@KQHGUC!3(Yt7sR&Pzx-3m>8v&OO?Ik{BH_q2;M^#E3(MKtKBc_PEWWpTa=* zWu*C&<3gqrN^)U((ho$Uysu?42<3yr`j(qC4B3^g&yw?eZ2wdZ zjl5e6xx+$ETJ8xowp$-a#x)>rvB&RmGOr=d^VKOUq2uHCFs_FjolEc1*|jyN5fe`N zEa*)@r%~ZV`_zpCz*^WcS?f_kXl#LKcRM{)B5^`^&?VZ((44y`WMyjCh9t9s%TFB&!l&@aqG8-lM{H(#+!2FGgk!`?&RRrwwJ`TqdUer#R< literal 0 HcmV?d00001 diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/flash_monitor.png b/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/flash_monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..b95d0d35f0b2efea00e07e5b7585f75e72b53b91 GIT binary patch literal 36783 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 LdQ@}B_J9_{wHnGQUb_Y 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 Yt6w6g{3)6xQxz1Hp00i_>zopr0Pe7^{r~^~ literal 0 HcmV?d00001 diff --git a/examples/bluetooth/esp_ble_mesh/common_components/light_driver/CMakeLists.txt b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/CMakeLists.txt new file mode 100644 index 0000000000..20aca5ea89 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/CMakeLists.txt @@ -0,0 +1,10 @@ + +set(COMPONENT_SRCS "light_driver.c" + "iot_led.c") + +set(COMPONENT_ADD_INCLUDEDIRS ". include") + +# requirements can't depend on config +set(COMPONENT_REQUIRES example_nvs) + +register_component() diff --git a/examples/bluetooth/esp_ble_mesh/common_components/light_driver/README.md b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/README.md new file mode 100644 index 0000000000..ada1266e96 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/README.md @@ -0,0 +1,22 @@ +# Component: Light + +* This component defines a light as a well encapsulated object. +* A light device is defined by: + * ledc timer which is used to control the pwm channels of light + * mode of the ledc timer + * frequency of the ledc timer + * pwm channel number of the light + * bit number of the ledc timer +* A light device can provide: + * iot_light_channel_regist function to add channel to corresponding channel id + * iot_light_duty_write function to set the duty of corresponding channel and it support setting duty directly or gradually + * iot_light_breath_write function to set the corresponding channel to breath mode and breath period can be set + * iot_light_blink_starte and iot_light_blink_stop function to make some of channels to blink in appointed period. Note that if any channel works in blink mode, all the other channels would be turned off. + +* To use the light device, you need to: + * create a light object returned by iot_light_create() + * regist the light channels according the channel number by iot_light_channel_regist() + * To free the object, you can call iot_light_delete to delete the button object and free the memory. + +### NOTE: +> If any channel(s) work(s) in blink mode, all the other channels would be turned off. iot_light_blink_stop() must be called before setting any channel to other mode(write duty or breath). \ No newline at end of file diff --git a/examples/bluetooth/esp_ble_mesh/common_components/light_driver/component.mk b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/component.mk new file mode 100644 index 0000000000..a98f634eae --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/component.mk @@ -0,0 +1,4 @@ +# +# "main" pseudo-component makefile. +# +# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) diff --git a/examples/bluetooth/esp_ble_mesh/common_components/light_driver/include/iot_led.h b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/include/iot_led.h new file mode 100644 index 0000000000..0c6730cc97 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/include/iot_led.h @@ -0,0 +1,179 @@ +// Copyright 2020 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef __IOT_LED_H__ +#define __IOT_LED_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "driver/ledc.h" + +#define HW_TIMER_GROUP (0) /**< Hardware timer group */ +#define HW_TIMER_ID (0) /**< Hardware timer number */ +#define HW_TIMER_DIVIDER (16) /**< Hardware timer clock divider */ +#define HW_TIMER_SCALE (TIMER_BASE_CLK / HW_TIMER_DIVIDER) /**< Convert counter value to seconds */ +#define GAMMA_CORRECTION 0.8 /**< Gamma curve parameter */ +#define GAMMA_TABLE_SIZE 256 /**< Gamma table size, used for led fade*/ +#define DUTY_SET_CYCLE (20) /**< Set duty cycle */ + +/** + * Macro which can be used to check the error code, + * and terminate the program in case the code is not ESP_OK. + * Prints the error code, error location, and the failed statement to serial output. + * + * Disabled if assertions are disabled. + */ +#define LIGHT_ERROR_CHECK(con, err, format, ...) do { \ + if (con) { \ + if(*format != '\0') \ + ESP_LOGW(TAG, "<%s> " format, esp_err_to_name(err), ##__VA_ARGS__); \ + return err; \ + } \ + } while(0) + +#define LIGHT_PARAM_CHECK(con) do { \ + if (!(con)) { \ + ESP_LOGE(TAG, " !(%s)", #con); \ + return ESP_ERR_INVALID_ARG; \ + } \ + } while(0) + +/** + * @brief Initialize and set the ledc timer for the iot led + * + * @param timer_num The timer index of ledc timer group used for iot led + * This parameter can be one of LEDC_TIMER_x where x can be (0 .. 3) + * + * @param speed_mode speed mode of ledc timer + * This parameter can be one of LEDC_x_SPEED_MODE where x can be (LOW, HIGH) + * + * @param freq_hz frequency of ledc timer + * This parameter must be less than 5000 + * + * @return + * - ESP_OK if sucess + * - ESP_ERR_INVALID_ARG Parameter error + * - ESP_FAIL Can not find a proper pre-divider number base on the given frequency + * and the current duty_resolution. +*/ +esp_err_t iot_led_init(ledc_timer_t timer_num, ledc_mode_t speed_mode, uint32_t freq_hz); + +/** + * @brief DeInitializes the iot led and free resource + * + * @return + * - ESP_OK if sucess +*/ +esp_err_t iot_led_deinit(void); + +/** + * @brief Set the ledc channel used by iot led and associate the gpio port used + * for output + * + * @param channel The ledc channel + * This parameter can be LEDC_CHANNEL_x where x can be (0 .. 15) + * @param gpio_num the ledc output gpio_num + * This parameter can be GPIO_NUM_x where x can be (0, 33) + * + * @note If the operation of esp32 depends on SPI FLASH or PSRAM, then these related + * pins should not be set to output. + * + * @return + * - ESP_OK if sucess + * - ESP_ERR_INVALID_ARG Parameter error +*/ +esp_err_t iot_led_regist_channel(ledc_channel_t channel, gpio_num_t gpio_num); + +/** + * @brief Returns the channel value + * @note before calling this function, you need to call iot_led_regist_channel() to + * set the channel + * + * @param channel The ledc channel + * This parameter can be LEDC_CHANNEL_x where x can be (0 .. 15) + * @param dst The address where the channel value is stored + * @return + * - ESP_OK if sucess + * - ESP_ERR_INVALID_ARG if dst is NULL +*/ +esp_err_t iot_led_get_channel(ledc_channel_t channel, uint8_t *dst); + +/** + * @brief Set the fade state for the specified channel + * @note before calling this function, you need to call iot_led_regist_channel() to + * set the channel + * + * @param channel The ledc channel + * This parameter can be LEDC_CHANNEL_x where x can be (0 .. 15) + * @param value The target output brightness of iot led + * This parameter can be (0 .. 255) + * @param fade_ms The time from the current value to the target value + * @return + * - ESP_OK if sucess +*/ +esp_err_t iot_led_set_channel(ledc_channel_t channel, uint8_t value, uint32_t fade_ms); + +/** + * @brief Set the blink state or loop fade for the specified channel + * @note before calling this function, you need to call iot_led_regist_channel() to + * set the channel + * + * @param channel The ledc channel + * This parameter can be LEDC_CHANNEL_x where x can be (0 .. 15) + * @param value The output brightness of iot led + * This parameter can be (0 .. 255) + * @param period_ms Blink cycle + * @param fade_flag select loop fade or blink + * 1 for loop fade + * 0 for blink + * @return + * - ESP_OK if sucess +*/ +esp_err_t iot_led_start_blink(ledc_channel_t channel, uint8_t value, uint32_t period_ms, bool fade_flag); + +/** + * @brief Stop the blink state or loop fade for the specified channel + * + * @param channel The ledc channel + * This parameter can be LEDC_CHANNEL_x where x can be (0 .. 15) + * @return + * - ESP_OK if sucess +*/ +esp_err_t iot_led_stop_blink(ledc_channel_t channel); + +/** + * @brief Set the specified gamma_table to control the fade effect, usually + * no need to set + * + * @param gamma_table[GAMMA_TABLE_SIZE] Expected gamma table value + * + * @note Gamma_table is the dimming curve used by the iot_led driver. + * The element type is uint16_t. Each element is treated as a binary + * fixed-point number. The decimal point is before the eighth bit + * and after the ninth bit, so the range of expressions can be + * 0x00.00 ~ 0xff.ff. + * @note default gamma_table is created in iot_led_init() + * + * @return + * - ESP_OK if sucess +*/ +esp_err_t iot_led_set_gamma_table(const uint16_t gamma_table[GAMMA_TABLE_SIZE]); + +#ifdef __cplusplus +} +#endif + +#endif /**< __IOT_LED_H__ */ diff --git a/examples/bluetooth/esp_ble_mesh/common_components/light_driver/include/iot_light.h b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/include/iot_light.h new file mode 100644 index 0000000000..9b11a9d24b --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/include/iot_light.h @@ -0,0 +1,162 @@ +// Copyright 2020 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef __IOT_LIGHT_H__ +#define __IOT_LIGHT_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "driver/ledc.h" + +/********************************** NOTE *********************************/ +/* When we create a light object, a hardware timer will be enabled, this */ +/* timer is used to realize fade and blink operation. The default timer */ +/* occupied is timer 0 of timer group 0, user can change this config in */ +/* menuconfig. */ +/*************************************************************************/ + +typedef void *light_handle_t; + +#define HW_TIMER_GROUP (0) /**< Hardware timer group */ +#define HW_TIMER_ID (0) /**< Hardware timer number */ +#define HW_TIMER_DIVIDER (16) /**< Hardware timer clock divider */ +#define HW_TIMER_SCALE (TIMER_BASE_CLK / HW_TIMER_DIVIDER) /**< Convert counter value to seconds */ + +#define DUTY_SET_CYCLE (20) /**< Set duty cycle */ +#define DUTY_SET_GAMMA (0.6) /**< Set the Gamma value for the fade curve, default value is 0.6 */ + +#define LIGHT_MAX_CHANNEL_NUM (5) + +/** + * @brief light initialize + * + * @param timer the LEDC timer used by light + * @param speed_mode speed mode of LEDC timer + * @param freq_hz frequency of LEDC timer + * @param channel_num decide how many channels the light contains + * @param timer_bit LEDC PWM duty resolution + * + * @return the handle of light + */ +light_handle_t iot_light_create(ledc_timer_t timer, ledc_mode_t speed_mode, uint32_t freq_hz, uint8_t channel_num, ledc_timer_bit_t timer_bit); + +/** + * @brief add an output channel to light + * + * @param light_handle light handle + * @param channel_idx the id of channel (0 ~ channel_num-1) + * @param io_num the IO number use to output LEDC PWM + * @param channel the ledc channel you want to use + * + * @return + * - ESP_OK: succeed + * - others: fail + */ +esp_err_t iot_light_channel_regist(light_handle_t light_handle, uint8_t channel_idx, gpio_num_t io_num, ledc_channel_t channel); + +/** + * @brief free the memory of light + * + * @param light_handle light handle + * + * @return + * - ESP_OK: succeed + * - others: fail + */ +esp_err_t iot_light_delete(light_handle_t light_handle); + +/** + * @brief get channel duty + * + * @param light_handle light handle + * @param channel_id the id of channel (0 ~ channel_num-1) + * + * @return + * - LEDC_ERR_DUTY if parameter error + * - Others Current LEDC duty + */ +uint32_t iot_light_duty_get(light_handle_t light_handle, uint8_t channel_id); + +/** + * @brief set light fade with time. if set fade_period_ms as 0, set the duty directly. + * + * @param light_handle light handle + * @param channel_id the id of channel (0 ~ channel_num-1) + * @param duty target duty + * @param fade_period_ms fade time (uint: ms) + * + * @return + * - ESP_OK: succeed + * - others: fail + */ +esp_err_t iot_light_fade_with_time(light_handle_t light_handle, uint8_t channel_id, uint32_t duty, uint32_t fade_period_ms); + +/** + * @brief set breath config of a light channel, call `iot_light_operate_start` to start breath operation + * + * @param light_handle light handle + * @param channel_id the id of channel (0 ~ channel_num-1) + * @param duty the maximum duty when breath + * @param breath_period_ms breath period (uint: ms) + * + * @return + * - ESP_OK: succeed + * - others: fail + */ +esp_err_t iot_light_breath_config(light_handle_t light_handle, uint8_t channel_id, uint32_t duty, uint32_t breath_period_ms); + +/** + * @brief set blink config of a light channel, call `iot_light_operate_start` to start blink operation + * + * @param light_handle light handle + * @param channel_id the id of channel (0 ~ channel_num-1) + * @param blink_period_ms blink period (uint: ms) + * + * @return + * - ESP_OK: succeed + * - others: fail + */ +esp_err_t iot_light_blink_config(light_handle_t light_handle, uint8_t channel_id, uint32_t blink_period_ms); + +/** + * @brief start breath or blink operation, user need to set breath or blink config before call this API + * + * @param light_handle light handle + * @param channel_id the id of channel (0 ~ channel_num-1) + * + * @return + * - ESP_OK: succeed + * - others: fail + */ +esp_err_t iot_light_operate_start(light_handle_t light_handle, uint8_t channel_id); + +/** + * @brief stop breath or blink operation + * + * @param light_handle light handle + * @param channel_id the id of channel (0 ~ channel_num-1) + * + * @return + * - ESP_OK: succeed + * - others: fail + */ +esp_err_t iot_light_operate_stop(light_handle_t light_handle, uint8_t channel_id); + +#ifdef __cplusplus +} +#endif + +#endif /**< __IOT_LIGHT_H__ */ diff --git a/examples/bluetooth/esp_ble_mesh/common_components/light_driver/include/light_driver.h b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/include/light_driver.h new file mode 100644 index 0000000000..9b71161055 --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/include/light_driver.h @@ -0,0 +1,166 @@ +// Copyright 2020 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef __LIGHT_DRIVER_H__ +#define __LIGHT_DRIVER_H__ + +#include "iot_led.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define LIGHT_STATUS_STORE_KEY "light_status" + +/** + * @brief The mode of the five-color light + */ +typedef enum light_mode { + MODE_NONE = 0, + MODE_RGB = 1, + MODE_HSV = 2, + MODE_CTB = 3, + MODE_ON = 4, + MODE_OFF = 5, + MODE_HUE_INCREASE = 4, + MODE_HUE_DECREASE = 5, + MODE_WARM_INCREASE = 6, + MODE_WARM_DECREASE = 7, + MODE_BRIGHTNESS_INCREASE = 8, + MODE_BRIGHTNESS_DECREASE = 9, + MODE_HSL = 10, +} light_mode_t; + +/** + * @brief Light driven configuration + */ +typedef struct { + gpio_num_t gpio_red; /**< Red corresponds to GPIO */ + gpio_num_t gpio_green; /**< Green corresponds to GPIO */ + gpio_num_t gpio_blue; /**< Blue corresponds to GPIO */ + gpio_num_t gpio_cold; /**< Cool corresponds to GPIO */ + gpio_num_t gpio_warm; /**< Warm corresponds to GPIO */ + uint32_t fade_period_ms; /**< The time from the current color to the next color */ + uint32_t blink_period_ms; /**< Period of flashing lights */ +} light_driver_config_t; + +/** + * @brief Light initialize + * + * @param config [description] + * + * @return + * - ESP_OK + * - ESP_ERR_INVALID_ARG + */ +esp_err_t light_driver_init(light_driver_config_t *config); + +/** + * @brief Light deinitialize + * + * @return + * - ESP_OK + * - ESP_ERR_INVALID_ARG + */ +esp_err_t light_driver_deinit(void); + + +/** + * @brief Set the fade time of the light + * + * @param fade_period_ms The time from the current color to the next color + * @param blink_period_ms Light flashing frequency + * + * @return + * - ESP_OK + * - ESP_FAIL + */ +esp_err_t light_driver_config(uint32_t fade_period_ms, uint32_t blink_period_ms); + +/**@{*/ +/** + * @brief Set the status of the light + * + * + * @return + * - ESP_OK + * - ESP_ERR_INVALID_ARG + */ +esp_err_t light_driver_set_hue(uint16_t hue); +esp_err_t light_driver_set_saturation(uint8_t saturation); +esp_err_t light_driver_set_value(uint8_t value); +esp_err_t light_driver_set_color_temperature(uint8_t color_temperature); +esp_err_t light_driver_set_brightness(uint8_t brightness); +esp_err_t light_driver_set_hsv(uint16_t hue, uint8_t saturation, uint8_t value); +esp_err_t light_driver_set_hsl(uint16_t hue, uint8_t saturation, uint8_t lightness); +esp_err_t light_driver_set_lightness(uint8_t lightness); +esp_err_t light_driver_set_ctb(uint8_t color_temperature, uint8_t brightness); +esp_err_t light_driver_set_switch(bool status); +esp_err_t light_driver_set_mode(light_mode_t mode); + +/**@}*/ + +/**@{*/ +/** + * @brief Set the status of the light + */ +uint16_t light_driver_get_hue(void); +uint8_t light_driver_get_saturation(void); +uint8_t light_driver_get_value(void); +esp_err_t light_driver_get_hsv(uint16_t *hue, uint8_t *saturation, uint8_t *value); +uint8_t light_driver_get_lightness(void); +esp_err_t light_driver_get_hsl(uint16_t *hue, uint8_t *saturation, uint8_t *lightness); +uint8_t light_driver_get_color_temperature(void); +uint8_t light_driver_get_brightness(void); +esp_err_t light_driver_get_ctb(uint8_t *color_temperature, uint8_t *brightness); +bool light_driver_get_switch(void); +uint8_t light_driver_get_mode(void); +/**@}*/ + +/**@{*/ +/** + * @brief Used to indicate the operating mode, such as configuring the network mode, upgrading mode + * + * @note The state of the light is not saved in nvs + * + * @return + * - ESP_OK + * - ESP_ERR_INVALID_ARG + */ +esp_err_t light_driver_set_rgb(uint8_t red, uint8_t green, uint8_t blue); +esp_err_t light_driver_breath_start(uint8_t red, uint8_t green, uint8_t blue); +esp_err_t light_driver_breath_stop(void); +esp_err_t light_driver_blink_start(uint8_t red, uint8_t green, uint8_t blue); +esp_err_t light_driver_blink_stop(void); +/**@}*/ + +/**@{*/ +/** + * @brief Color gradient + * + * @return + * - ESP_OK + * - ESP_ERR_INVALID_ARG + */ +esp_err_t light_driver_fade_brightness(uint8_t brightness); +esp_err_t light_driver_fade_hue(uint16_t hue); +esp_err_t light_driver_fade_warm(uint8_t color_temperature); +esp_err_t light_driver_fade_stop(void); +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif/**< __LIGHT_DRIVER_H__ */ diff --git a/examples/bluetooth/esp_ble_mesh/common_components/light_driver/iot_led.c b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/iot_led.c new file mode 100644 index 0000000000..31ddbb2f1d --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/iot_led.c @@ -0,0 +1,511 @@ +// Copyright 2020 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include +#include "errno.h" + +#include "math.h" +#include "soc/ledc_reg.h" +#include "soc/timer_group_struct.h" +#include "soc/ledc_struct.h" +#include "driver/timer.h" +#include "driver/ledc.h" +#include "iot_led.h" +#include "esp_log.h" + +#define LEDC_FADE_MARGIN (10) +#define LEDC_VALUE_TO_DUTY(value) (value * ((1 << LEDC_TIMER_13_BIT) - 1) / UINT16_MAX) +#define LEDC_DUTY_TO_VALUE(value) (value * UINT16_MAX / ((1 << LEDC_TIMER_13_BIT) - 1) ) +#define LEDC_FIXED_Q (8) +#define FLOATINT_2_FIXED(X, Q) ((int)((X)*(0x1U << Q))) +#define FIXED_2_FLOATING(X, Q) ((int)((X)/(0x1U << Q))) +#define GET_FIXED_INTEGER_PART(X, Q) (X >> Q) +#define GET_FIXED_DECIMAL_PART(X, Q) (X & ((0x1U << Q) - 1)) + +typedef struct { + int cur; + int final; + int step; + int cycle; + size_t num; +} ledc_fade_data_t; + +typedef struct { + timer_group_t timer_group; + timer_idx_t timer_id; +} hw_timer_idx_t; + +typedef struct { + ledc_fade_data_t fade_data[LEDC_CHANNEL_MAX]; + ledc_mode_t speed_mode; + ledc_timer_t timer_num; + hw_timer_idx_t timer_id; +} iot_light_t; + +static const char *TAG = "iot_light"; +static DRAM_ATTR iot_light_t *g_light_config = NULL; +static DRAM_ATTR uint16_t *g_gamma_table = NULL; +static DRAM_ATTR bool g_hw_timer_started = false; +static DRAM_ATTR timg_dev_t *TG[2] = {&TIMERG0, &TIMERG1}; + +static IRAM_ATTR esp_err_t _timer_pause(timer_group_t group_num, timer_idx_t timer_num) +{ + TG[group_num]->hw_timer[timer_num].config.enable = 0; + return ESP_OK; +} + +static void iot_timer_create(hw_timer_idx_t *timer_id, bool auto_reload, + uint32_t timer_interval_ms, void *isr_handle) +{ + /* Select and initialize basic parameters of the timer */ + timer_config_t config; + config.divider = HW_TIMER_DIVIDER; + config.counter_dir = TIMER_COUNT_UP; + config.counter_en = TIMER_PAUSE; + config.alarm_en = TIMER_ALARM_EN; + config.intr_type = TIMER_INTR_LEVEL; + config.auto_reload = auto_reload; + timer_init(timer_id->timer_group, timer_id->timer_id, &config); + + /* Timer's counter will initially start from value below. + Also, if auto_reload is set, this value will be automatically reload on alarm */ + timer_set_counter_value(timer_id->timer_group, timer_id->timer_id, 0x00000000ULL); + + /* Configure the alarm value and the interrupt on alarm. */ + timer_set_alarm_value(timer_id->timer_group, timer_id->timer_id, timer_interval_ms * HW_TIMER_SCALE / 1000); + timer_enable_intr(timer_id->timer_group, timer_id->timer_id); + timer_isr_register(timer_id->timer_group, timer_id->timer_id, isr_handle, + (void *) timer_id->timer_id, ESP_INTR_FLAG_IRAM, NULL); +} + +static void iot_timer_start(hw_timer_idx_t *timer_id) +{ + timer_start(timer_id->timer_group, timer_id->timer_id); + g_hw_timer_started = true; +} + +static IRAM_ATTR void iot_timer_stop(hw_timer_idx_t *timer_id) +{ + _timer_pause(timer_id->timer_group, timer_id->timer_id); + g_hw_timer_started = false; +} + +static IRAM_ATTR esp_err_t iot_ledc_duty_config(ledc_mode_t speed_mode, ledc_channel_t channel, int hpoint_val, int duty_val, + uint32_t duty_direction, uint32_t duty_num, uint32_t duty_cycle, uint32_t duty_scale) +{ + if (hpoint_val >= 0) { + LEDC.channel_group[speed_mode].channel[channel].hpoint.hpoint = hpoint_val & LEDC_HPOINT_HSCH1_V; + } + + if (duty_val >= 0) { + LEDC.channel_group[speed_mode].channel[channel].duty.duty = duty_val; + } + + LEDC.channel_group[speed_mode].channel[channel].conf1.val = ((duty_direction & LEDC_DUTY_INC_HSCH0_V) << LEDC_DUTY_INC_HSCH0_S) | + ((duty_num & LEDC_DUTY_NUM_HSCH0_V) << LEDC_DUTY_NUM_HSCH0_S) | + ((duty_cycle & LEDC_DUTY_CYCLE_HSCH0_V) << LEDC_DUTY_CYCLE_HSCH0_S) | + ((duty_scale & LEDC_DUTY_SCALE_HSCH0_V) << LEDC_DUTY_SCALE_HSCH0_S); + + LEDC.channel_group[speed_mode].channel[channel].conf0.sig_out_en = 1; + LEDC.channel_group[speed_mode].channel[channel].conf1.duty_start = 1; + + if (speed_mode == LEDC_LOW_SPEED_MODE) { + LEDC.channel_group[speed_mode].channel[channel].conf0.low_speed_update = 1; + } + + return ESP_OK; +} + +static IRAM_ATTR esp_err_t _iot_set_fade_with_step(ledc_mode_t speed_mode, ledc_channel_t channel, uint32_t target_duty, int scale, int cycle_num) +{ + uint32_t duty_cur = LEDC.channel_group[speed_mode].channel[channel].duty_rd.duty_read >> 4; + int step_num = 0; + int dir = LEDC_DUTY_DIR_DECREASE; + + if (scale > 0) { + if (duty_cur > target_duty) { + step_num = (duty_cur - target_duty) / scale; + step_num = step_num > 1023 ? 1023 : step_num; + scale = (step_num == 1023) ? (duty_cur - target_duty) / step_num : scale; + } else { + dir = LEDC_DUTY_DIR_INCREASE; + step_num = (target_duty - duty_cur) / scale; + step_num = step_num > 1023 ? 1023 : step_num; + scale = (step_num == 1023) ? (target_duty - duty_cur) / step_num : scale; + } + } + + if (scale > 0 && step_num > 0) { + iot_ledc_duty_config(speed_mode, channel, -1, duty_cur << 4, dir, step_num, cycle_num, scale); + } else { + iot_ledc_duty_config(speed_mode, channel, -1, target_duty << 4, dir, 0, 1, 0); + } + + return ESP_OK; +} + +static IRAM_ATTR esp_err_t _iot_set_fade_with_time(ledc_mode_t speed_mode, ledc_channel_t channel, uint32_t target_duty, int max_fade_time_ms) +{ + uint32_t freq = 0; + uint32_t duty_cur = LEDC.channel_group[speed_mode].channel[channel].duty_rd.duty_read >> 4; + uint32_t duty_delta = target_duty > duty_cur ? target_duty - duty_cur : duty_cur - target_duty; + + uint32_t timer_source_clk = LEDC.timer_group[speed_mode].timer[g_light_config->timer_num].conf.tick_sel; + uint32_t duty_resolution = LEDC.timer_group[speed_mode].timer[g_light_config->timer_num].conf.duty_resolution; + uint32_t clock_divider = LEDC.timer_group[speed_mode].timer[g_light_config->timer_num].conf.clock_divider; + uint32_t precision = (0x1U << duty_resolution); + + if (timer_source_clk == LEDC_APB_CLK) { + freq = ((uint64_t)LEDC_APB_CLK_HZ << 8) / precision / clock_divider; + } else { + freq = ((uint64_t)LEDC_REF_CLK_HZ << 8) / precision / clock_divider; + } + + if (duty_delta == 0) { + return _iot_set_fade_with_step(speed_mode, channel, target_duty, 0, 0); + } + + int total_cycles = max_fade_time_ms * freq / 1000; + + if (total_cycles == 0) { + return _iot_set_fade_with_step(speed_mode, channel, target_duty, 0, 0); + } + + int scale, cycle_num; + + if (total_cycles > duty_delta) { + scale = 1; + cycle_num = total_cycles / duty_delta; + + if (cycle_num > LEDC_DUTY_NUM_HSCH0_V) { + cycle_num = LEDC_DUTY_NUM_HSCH0_V; + } + } else { + cycle_num = 1; + scale = duty_delta / total_cycles; + + if (scale > LEDC_DUTY_SCALE_HSCH0_V) { + scale = LEDC_DUTY_SCALE_HSCH0_V; + } + } + + return _iot_set_fade_with_step(speed_mode, channel, target_duty, scale, cycle_num); +} + +static IRAM_ATTR esp_err_t _iot_update_duty(ledc_mode_t speed_mode, ledc_channel_t channel) +{ + LEDC.channel_group[speed_mode].channel[channel].conf0.sig_out_en = 1; + LEDC.channel_group[speed_mode].channel[channel].conf1.duty_start = 1; + + if (speed_mode == LEDC_LOW_SPEED_MODE) { + LEDC.channel_group[speed_mode].channel[channel].conf0.low_speed_update = 1; + } + + return ESP_OK; +} + +static IRAM_ATTR esp_err_t iot_ledc_set_duty(ledc_mode_t speed_mode, ledc_channel_t channel, uint32_t duty) +{ + return iot_ledc_duty_config(speed_mode, + channel, // uint32_t chan_num, + -1, + duty << 4, // uint32_t duty_val,the least 4 bits are decimal part + 1, // uint32_t increase, + 1, // uint32_t duty_num, + 1, // uint32_t duty_cycle, + 0 // uint32_t duty_scale + ); +} + +static void gamma_table_create(uint16_t *gamma_table, float correction) +{ + float value_tmp = 0; + + /** + * @brief gamma curve formula: y=a*x^(1/gm) + * x ∈ (0,(GAMMA_TABLE_SIZE-1)/GAMMA_TABLE_SIZE) + * a = GAMMA_TABLE_SIZE + */ + for (int i = 0; i < GAMMA_TABLE_SIZE; i++) { + value_tmp = (float)(i) / GAMMA_TABLE_SIZE; + value_tmp = powf(value_tmp, 1.0f / correction); + gamma_table[i] = (uint16_t)FLOATINT_2_FIXED((value_tmp * GAMMA_TABLE_SIZE), LEDC_FIXED_Q); + } +} + +static IRAM_ATTR uint32_t gamma_value_to_duty(int value) +{ + uint32_t tmp_q = GET_FIXED_INTEGER_PART(value, LEDC_FIXED_Q); + uint32_t tmp_r = GET_FIXED_DECIMAL_PART(value, LEDC_FIXED_Q); + + uint16_t cur = LEDC_VALUE_TO_DUTY(g_gamma_table[tmp_q]); + uint16_t next = LEDC_VALUE_TO_DUTY(g_gamma_table[tmp_q + 1]); + return (cur + (next - cur) * tmp_r / (0x1U << LEDC_FIXED_Q)); +} + +static IRAM_ATTR void fade_timercb(void *para) +{ + int timer_idx = (int) para; + int idle_channel_num = 0; + + if (HW_TIMER_GROUP == TIMER_GROUP_0) { + /* Retrieve the interrupt status */ + uint32_t intr_status = TIMERG0.int_st_timers.val; + TIMERG0.hw_timer[timer_idx].update = 1; + + /* Clear the interrupt */ + if ((intr_status & BIT(timer_idx)) && timer_idx == TIMER_0) { + TIMERG0.int_clr_timers.t0 = 1; + } else if ((intr_status & BIT(timer_idx)) && timer_idx == TIMER_1) { + TIMERG0.int_clr_timers.t1 = 1; + } + + /* After the alarm has been triggered + we need enable it again, so it is triggered the next time */ + TIMERG0.hw_timer[timer_idx].config.alarm_en = TIMER_ALARM_EN; + } else if (HW_TIMER_GROUP == TIMER_GROUP_1) { + uint32_t intr_status = TIMERG1.int_st_timers.val; + TIMERG1.hw_timer[timer_idx].update = 1; + + if ((intr_status & BIT(timer_idx)) && timer_idx == TIMER_0) { + TIMERG1.int_clr_timers.t0 = 1; + } else if ((intr_status & BIT(timer_idx)) && timer_idx == TIMER_1) { + TIMERG1.int_clr_timers.t1 = 1; + } + + TIMERG1.hw_timer[timer_idx].config.alarm_en = TIMER_ALARM_EN; + } + + for (int channel = 0; channel < LEDC_CHANNEL_MAX; channel++) { + ledc_fade_data_t *fade_data = g_light_config->fade_data + channel; + + if (fade_data->num > 0) { + fade_data->num--; + + if (fade_data->step) { + fade_data->cur += fade_data->step; + + if (fade_data->num != 0) { + _iot_set_fade_with_time(g_light_config->speed_mode, channel, + gamma_value_to_duty(fade_data->cur), + DUTY_SET_CYCLE - LEDC_FADE_MARGIN); + } else { + iot_ledc_set_duty(g_light_config->speed_mode, channel, gamma_value_to_duty(fade_data->cur)); + } + + _iot_update_duty(g_light_config->speed_mode, channel); + } else { + iot_ledc_set_duty(g_light_config->speed_mode,channel,gamma_value_to_duty(fade_data->cur)); + _iot_update_duty(g_light_config->speed_mode, channel); + } + } else if (fade_data->cycle) { + fade_data->num = fade_data->cycle - 1; + + if (fade_data->step) { + fade_data->step *= -1; + fade_data->cur += fade_data->step; + } else { + fade_data->cur = (fade_data->cur == fade_data->final) ? 0 : fade_data->final; + } + + _iot_set_fade_with_time(g_light_config->speed_mode, channel, + gamma_value_to_duty(fade_data->cur), + DUTY_SET_CYCLE - LEDC_FADE_MARGIN); + _iot_update_duty(g_light_config->speed_mode, channel); + + } else { + idle_channel_num++; + } + } + + if (idle_channel_num >= LEDC_CHANNEL_MAX) { + iot_timer_stop(&g_light_config->timer_id); + } +} + +esp_err_t iot_led_init(ledc_timer_t timer_num, ledc_mode_t speed_mode, uint32_t freq_hz) +{ + esp_err_t ret = ESP_OK; + const ledc_timer_config_t ledc_time_config = { + .speed_mode = speed_mode, + .timer_num = timer_num, + .freq_hz = freq_hz, + .duty_resolution = LEDC_TIMER_13_BIT, + }; + + ret = ledc_timer_config(&ledc_time_config); + if (ret != ESP_OK) { + ESP_LOGW(TAG, "LEDC timer configuration"); + return ret; + } + + if (g_gamma_table == NULL) { + g_gamma_table = calloc(GAMMA_TABLE_SIZE, sizeof(uint16_t)); + gamma_table_create(g_gamma_table, GAMMA_CORRECTION); + } else { + ESP_LOGE(TAG, "gamma_table has been initialized"); + } + + if (g_light_config == NULL) { + g_light_config = calloc(1, sizeof(iot_light_t)); + g_light_config->timer_num = timer_num; + g_light_config->speed_mode = speed_mode; + + + hw_timer_idx_t hw_timer = { + .timer_group = HW_TIMER_GROUP, + .timer_id = HW_TIMER_ID, + }; + g_light_config->timer_id = hw_timer; + iot_timer_create(&hw_timer, 1, DUTY_SET_CYCLE, fade_timercb); + } else { + ESP_LOGE(TAG, "g_light_config has been initialized"); + } + + return ESP_OK; +} + +esp_err_t iot_led_deinit(void) +{ + if (g_gamma_table) { + free(g_gamma_table); + } + + if (g_light_config) { + free(g_light_config); + } + + timer_disable_intr(g_light_config->timer_id.timer_group, g_light_config->timer_id.timer_id); + + return ESP_OK; +} + +esp_err_t iot_led_regist_channel(ledc_channel_t channel, gpio_num_t gpio_num) +{ + esp_err_t ret = ESP_OK; + if (g_light_config == NULL) { + ESP_LOGW(TAG, "iot_led_init() must be called first"); + return ESP_ERR_NOT_FOUND; + } +#ifdef CONFIG_SPIRAM_SUPPORT + if (gpio_num != GPIO_NUM_16 || gpio_num != GPIO_NUM_17) { + ESP_LOGW(TAG, "gpio_num must not conflict to PSRAM(IO16 && IO17)"); + return ESP_ERR_INVALID_ARG; + } +#endif + const ledc_channel_config_t ledc_ch_config = { + .gpio_num = gpio_num, + .channel = channel, + .intr_type = LEDC_INTR_DISABLE, + .speed_mode = g_light_config->speed_mode, + .timer_sel = g_light_config->timer_num, + }; + + ret = ledc_channel_config(&ledc_ch_config); + if (ret != ESP_OK) { + ESP_LOGW(TAG, "LEDC channel configuration"); + return ret; + } + + return ESP_OK; +} + +esp_err_t iot_led_get_channel(ledc_channel_t channel, uint8_t *dst) +{ + if (g_light_config == NULL || dst == NULL) { + ESP_LOGW(TAG, "iot_led_init() must be called first or dst should not be NULL"); + return ESP_ERR_INVALID_ARG; + } + int cur = g_light_config->fade_data[channel].cur; + *dst = FIXED_2_FLOATING(cur, LEDC_FIXED_Q); + return ESP_OK; +} + +esp_err_t iot_led_set_channel(ledc_channel_t channel, uint8_t value, uint32_t fade_ms) +{ + if (g_light_config == NULL) { + ESP_LOGW(TAG, "iot_led_init() must be called first"); + return ESP_ERR_INVALID_ARG; + } + ledc_fade_data_t *fade_data = g_light_config->fade_data + channel; + + fade_data->final = FLOATINT_2_FIXED(value, LEDC_FIXED_Q); + + if (fade_ms < DUTY_SET_CYCLE) { + fade_data->num = 1; + } else { + fade_data->num = fade_ms / DUTY_SET_CYCLE; + } + + fade_data->step = abs(fade_data->cur - fade_data->final) / fade_data->num; + + if (fade_data->cur > fade_data->final) { + fade_data->step *= -1; + } + + if (fade_data->cycle != 0){ + fade_data->cycle = 0; + } + + if (g_hw_timer_started != true) { + iot_timer_start(&g_light_config->timer_id); + } + + return ESP_OK; +} + +esp_err_t iot_led_start_blink(ledc_channel_t channel, uint8_t value, uint32_t period_ms, bool fade_flag) +{ + if (g_light_config == NULL) { + ESP_LOGW(TAG, "iot_led_init() must be called first"); + return ESP_ERR_INVALID_ARG; + } + ledc_fade_data_t *fade_data = g_light_config->fade_data + channel; + + fade_data->final = fade_data->cur = FLOATINT_2_FIXED(value, LEDC_FIXED_Q); + fade_data->cycle = period_ms / 2 / DUTY_SET_CYCLE; + fade_data->num = (fade_flag) ? period_ms / 2 / DUTY_SET_CYCLE : 0; + fade_data->step = (fade_flag) ? fade_data->cur / fade_data->num * -1 : 0; + + if (g_hw_timer_started != true) { + iot_timer_start(&g_light_config->timer_id); + } + + return ESP_OK; + +} + +esp_err_t iot_led_stop_blink(ledc_channel_t channel) +{ + if (g_light_config == NULL) { + ESP_LOGW(TAG, "iot_led_init() must be called first"); + return ESP_ERR_INVALID_ARG; + } + ledc_fade_data_t *fade_data = g_light_config->fade_data + channel; + fade_data->cycle = fade_data->num = 0; + + return ESP_OK; +} + +esp_err_t iot_led_set_gamma_table(const uint16_t gamma_table[GAMMA_TABLE_SIZE]) +{ + if (g_gamma_table == NULL) { + ESP_LOGW(TAG, "iot_led_init() must be called first"); + return ESP_ERR_INVALID_ARG; + } + memcpy(g_gamma_table, gamma_table, GAMMA_TABLE_SIZE * sizeof(uint16_t)); + return ESP_OK; +} diff --git a/examples/bluetooth/esp_ble_mesh/common_components/light_driver/iot_light.c b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/iot_light.c new file mode 100644 index 0000000000..7fbcb7e5cd --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/iot_light.c @@ -0,0 +1,518 @@ +// Copyright 2020 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include "math.h" +#include "sys/time.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/timers.h" +#include "esp_log.h" +#include "soc/ledc_reg.h" +#include "soc/timer_group_struct.h" +#include "soc/ledc_struct.h" +#include "driver/periph_ctrl.h" +#include "driver/timer.h" +#include "driver/ledc.h" +#include "iot_light.h" + +static const char *TAG = "light"; + +#define IOT_CHECK(tag, a, ret) if(!(a)) { \ + return (ret); \ + } +#define ERR_ASSERT(tag, param, ret) IOT_CHECK(tag, (param) == ESP_OK, ret) +#define POINT_ASSERT(tag, param) IOT_CHECK(tag, (param) != NULL, ESP_FAIL) +#define LIGHT_NUM_MAX 4 + +typedef enum { + LIGHT_CH_NUM_1 = 1, /*!< Light channel number */ + LIGHT_CH_NUM_2 = 2, /*!< Light channel number */ + LIGHT_CH_NUM_3 = 3, /*!< Light channel number */ + LIGHT_CH_NUM_4 = 4, /*!< Light channel number */ + LIGHT_CH_NUM_5 = 5, /*!< Light channel number */ + LIGHT_CH_NUM_MAX, /*!< user shouldn't use this */ +} light_channel_num_t; + +typedef struct { + timer_group_t timer_group; + timer_idx_t timer_id; +} hw_timer_idx_t; + +typedef struct { + gpio_num_t io_num; + ledc_mode_t mode; + ledc_channel_t channel; + int breath_period; + int blink_period; + uint32_t fade_step_num; + uint32_t *fade_duty_step; + int fade_duty_counter; + bool fade_step_up; + bool fade_once; + bool fade_start; +} light_channel_t; + +typedef struct { + uint8_t channel_num; + ledc_mode_t mode; + ledc_timer_t ledc_timer; + uint32_t full_duty; + uint32_t freq_hz; + ledc_timer_bit_t timer_bit; + hw_timer_idx_t hw_timer; + light_channel_t *channel_group[0]; +} light_t; + +static bool g_fade_installed = false; +static bool g_hw_timer_started = false; +static light_t *g_light_group[LIGHT_NUM_MAX] = {NULL}; +static esp_err_t iot_light_duty_set(light_handle_t light_handle, uint8_t channel_id, uint32_t duty); + +static void iot_timer_create(hw_timer_idx_t *timer_id, bool auto_reload, double timer_interval_sec, timer_isr_handle_t *isr_handle) +{ + /* Select and initialize basic parameters of the timer */ + timer_config_t config; + config.divider = HW_TIMER_DIVIDER; + config.counter_dir = TIMER_COUNT_UP; + config.counter_en = TIMER_PAUSE; + config.alarm_en = TIMER_ALARM_EN; + config.intr_type = TIMER_INTR_LEVEL; + config.auto_reload = auto_reload; + timer_init(timer_id->timer_group, timer_id->timer_id, &config); + + /* Timer's counter will initially start from value below. + Also, if auto_reload is set, this value will be automatically reload on alarm */ + timer_set_counter_value(timer_id->timer_group, timer_id->timer_id, 0x00000000ULL); + + /* Configure the alarm value and the interrupt on alarm. */ + timer_set_alarm_value(timer_id->timer_group, timer_id->timer_id, timer_interval_sec * HW_TIMER_SCALE); + timer_enable_intr(timer_id->timer_group, timer_id->timer_id); + timer_isr_register(timer_id->timer_group, timer_id->timer_id, (void *)isr_handle, + (void *) timer_id->timer_id, ESP_INTR_FLAG_IRAM, NULL); +} + +static void iot_timer_start(hw_timer_idx_t *timer_id) +{ + timer_start(timer_id->timer_group, timer_id->timer_id); + g_hw_timer_started = true; +} + +static void iot_timer_stop(hw_timer_idx_t *timer_id) +{ + timer_disable_intr(timer_id->timer_group, timer_id->timer_id); + timer_pause(timer_id->timer_group, timer_id->timer_id); + g_hw_timer_started = false; +} + +static IRAM_ATTR void iot_ledc_ls_channel_update(ledc_mode_t speed_mode, ledc_channel_t channel_num) +{ + if (speed_mode == LEDC_LOW_SPEED_MODE) { + LEDC.channel_group[speed_mode].channel[channel_num].conf0.low_speed_update = 1; + } +} + +static IRAM_ATTR esp_err_t iot_ledc_duty_config(ledc_mode_t speed_mode, ledc_channel_t channel_num, int hpoint_val, int duty_val, + uint32_t duty_direction, uint32_t duty_num, uint32_t duty_cycle, uint32_t duty_scale) +{ + if (hpoint_val >= 0) { + LEDC.channel_group[speed_mode].channel[channel_num].hpoint.hpoint = hpoint_val & LEDC_HPOINT_HSCH1_V; + } + + if (duty_val >= 0) { + LEDC.channel_group[speed_mode].channel[channel_num].duty.duty = duty_val; + } + + LEDC.channel_group[speed_mode].channel[channel_num].conf1.val = ((duty_direction & LEDC_DUTY_INC_HSCH0_V) << LEDC_DUTY_INC_HSCH0_S) | + ((duty_num & LEDC_DUTY_NUM_HSCH0_V) << LEDC_DUTY_NUM_HSCH0_S) | + ((duty_cycle & LEDC_DUTY_CYCLE_HSCH0_V) << LEDC_DUTY_CYCLE_HSCH0_S) | + ((duty_scale & LEDC_DUTY_SCALE_HSCH0_V) << LEDC_DUTY_SCALE_HSCH0_S); + iot_ledc_ls_channel_update(speed_mode, channel_num); + return ESP_OK; +} + +static IRAM_ATTR esp_err_t iot_ledc_set_duty(ledc_mode_t speed_mode, ledc_channel_t channel, uint32_t duty) +{ + return iot_ledc_duty_config(speed_mode, + channel, //uint32_t chan_num, + -1, + duty << 4, //uint32_t duty_val,the least 4 bits are decimal part + 1, //uint32_t increase, + 1, //uint32_t duty_num, + 1, //uint32_t duty_cycle, + 0 //uint32_t duty_scale + ); +} + +static IRAM_ATTR esp_err_t iot_ledc_update_duty(ledc_mode_t speed_mode, ledc_channel_t channel) +{ + LEDC.channel_group[speed_mode].channel[channel].conf0.sig_out_en = 1; + LEDC.channel_group[speed_mode].channel[channel].conf1.duty_start = 1; + iot_ledc_ls_channel_update(speed_mode, channel); + return ESP_OK; +} + +static IRAM_ATTR void breath_timer_callback(void *para) +{ + int timer_idx = (int) para; + + if (HW_TIMER_GROUP == TIMER_GROUP_0) { + /* Retrieve the interrupt status */ + uint32_t intr_status = TIMERG0.int_st_timers.val; + TIMERG0.hw_timer[timer_idx].update = 1; + + /* Clear the interrupt */ + if ((intr_status & BIT(timer_idx)) && timer_idx == TIMER_0) { + TIMERG0.int_clr_timers.t0 = 1; + } else if ((intr_status & BIT(timer_idx)) && timer_idx == TIMER_1) { + TIMERG0.int_clr_timers.t1 = 1; + } + + /* After the alarm has been triggered + we need enable it again, so it is triggered the next time */ + TIMERG0.hw_timer[timer_idx].config.alarm_en = TIMER_ALARM_EN; + } else if (HW_TIMER_GROUP == TIMER_GROUP_1) { + uint32_t intr_status = TIMERG1.int_st_timers.val; + TIMERG1.hw_timer[timer_idx].update = 1; + + if ((intr_status & BIT(timer_idx)) && timer_idx == TIMER_0) { + TIMERG1.int_clr_timers.t0 = 1; + } else if ((intr_status & BIT(timer_idx)) && timer_idx == TIMER_1) { + TIMERG1.int_clr_timers.t1 = 1; + } + + TIMERG1.hw_timer[timer_idx].config.alarm_en = TIMER_ALARM_EN; + } + + for (int i = 0; i < LIGHT_NUM_MAX; i++) { + if (g_light_group[i] != NULL) { + light_t *light = g_light_group[i]; + + for (int j = 0; j < light->channel_num; j++) { + light_channel_t *l_chn = light->channel_group[j]; + + if (l_chn->fade_start == true) { + if (l_chn->fade_step_up == true) { + l_chn->fade_duty_counter++; + } else { + l_chn->fade_duty_counter--; + } + + if ((l_chn->fade_duty_counter >= 0) && (l_chn->fade_duty_counter < l_chn->fade_step_num)) { + iot_ledc_set_duty(l_chn->mode, l_chn->channel, l_chn->fade_duty_step[l_chn->fade_duty_counter]); + iot_ledc_update_duty(l_chn->mode, l_chn->channel); + } else { + if (l_chn->fade_once != true) { + l_chn->fade_step_up = 1 - l_chn->fade_step_up; + } else { + l_chn->fade_start = false; + } + } + } + } + } + } +} + +static light_channel_t *light_channel_create(gpio_num_t io_num, ledc_channel_t channel, ledc_mode_t mode, ledc_timer_t timer) +{ + ledc_channel_config_t ledc_channel = { + .channel = channel, + .duty = 0, + .gpio_num = io_num, + .intr_type = LEDC_INTR_FADE_END, + .speed_mode = mode, + .timer_sel = timer + }; + ERR_ASSERT(TAG, ledc_channel_config(&ledc_channel), NULL); + light_channel_t *pwm = (light_channel_t *)calloc(1, sizeof(light_channel_t)); + pwm->io_num = io_num; + pwm->channel = channel; + pwm->mode = mode; + pwm->breath_period = 0; + pwm->blink_period = 0; + pwm->fade_step_num = 0; + pwm->fade_duty_step = NULL; + pwm->fade_duty_counter = 0; + pwm->fade_step_up = true; + pwm->fade_once = false; + pwm->fade_start = false; + return pwm; +} + +static esp_err_t light_channel_delete(light_channel_t *light_channel) +{ + POINT_ASSERT(TAG, light_channel); + + if (light_channel->fade_duty_step != NULL) { + heap_caps_free(light_channel->fade_duty_step); + light_channel->fade_duty_step = NULL; + } + + free(light_channel); + return ESP_OK; +} + +static esp_err_t light_channel_fade_clear(light_channel_t *light_channel) +{ + light_channel->fade_start = false; + light_channel->fade_step_num = 0; + light_channel->fade_duty_counter = 0; + light_channel->fade_step_up = true; + light_channel->fade_once = false; + + if (light_channel->fade_duty_step != NULL) { + heap_caps_free(light_channel->fade_duty_step); + light_channel->fade_duty_step = NULL; + } + + return ESP_OK; +} + +light_handle_t iot_light_create(ledc_timer_t timer, ledc_mode_t speed_mode, uint32_t freq_hz, uint8_t channel_num, ledc_timer_bit_t timer_bit) +{ + IOT_CHECK(TAG, channel_num != 0, NULL); + ledc_timer_config_t timer_conf = { + .timer_num = timer, + .speed_mode = speed_mode, + .freq_hz = freq_hz, + .bit_num = timer_bit + }; + ERR_ASSERT(TAG, ledc_timer_config(&timer_conf), NULL); + light_t *light_ptr = (light_t *)calloc(1, sizeof(light_t) + sizeof(light_channel_t *) * channel_num); + light_ptr->channel_num = channel_num; + light_ptr->ledc_timer = timer; + light_ptr->full_duty = (1 << timer_bit) - 1; + light_ptr->freq_hz = freq_hz; + light_ptr->mode = speed_mode; + light_ptr->timer_bit = timer_bit; + light_ptr->hw_timer.timer_group = HW_TIMER_GROUP; + light_ptr->hw_timer.timer_id = HW_TIMER_ID; + + if (g_hw_timer_started == false) { + iot_timer_create(&(light_ptr->hw_timer), 1, (double)DUTY_SET_CYCLE / 1000, (void *)breath_timer_callback); + iot_timer_start(&(light_ptr->hw_timer)); + } + + for (int i = 0; i < channel_num; i++) { + light_ptr->channel_group[i] = NULL; + } + + for (int i = 0; i < LIGHT_NUM_MAX; i++) { + if (g_light_group[i] == NULL) { + g_light_group[i] = light_ptr; + break; + } + } + + return (light_handle_t)light_ptr; +} + +esp_err_t iot_light_delete(light_handle_t light_handle) +{ + light_t *light = (light_t *)light_handle; + POINT_ASSERT(TAG, light_handle); + + for (int i = 0; i < light->channel_num; i++) { + if (light->channel_group[i] != NULL) { + iot_light_duty_set(light, i, 0); + light_channel_delete(light->channel_group[i]); + } + } + + for (int i = 0; i < LIGHT_NUM_MAX; i++) { + if (g_light_group[i] == light) { + g_light_group[i] = NULL; + break; + } + } + + for (int i = 0; i < LIGHT_NUM_MAX; i++) { + if (g_light_group[i] != NULL) { + goto FREE_MEM; + } + } + + ledc_fade_func_uninstall(); + g_fade_installed = false; + iot_timer_stop(&(light->hw_timer)); +FREE_MEM: + free(light_handle); + return ESP_OK; +} + +esp_err_t iot_light_channel_regist(light_handle_t light_handle, uint8_t channel_idx, gpio_num_t io_num, ledc_channel_t channel) +{ + light_t *light = (light_t *)light_handle; + POINT_ASSERT(TAG, light_handle); + IOT_CHECK(TAG, channel_idx < light->channel_num, FAIL); + + if (light->channel_group[channel_idx] != NULL) { + ESP_LOGE(TAG, "this channel index has been registered"); + return ESP_FAIL; + } + + light->channel_group[channel_idx] = light_channel_create(io_num, channel, light->mode, light->ledc_timer); + + if (g_fade_installed == false) { + ledc_fade_func_install(0); + g_fade_installed = true; + } + + return ESP_OK; +} + +static esp_err_t iot_light_duty_set(light_handle_t light_handle, uint8_t channel_id, uint32_t duty) +{ + light_t *light = (light_t *)light_handle; + POINT_ASSERT(TAG, light_handle); + IOT_CHECK(TAG, channel_id < light->channel_num, ESP_FAIL); + POINT_ASSERT(TAG, light->channel_group[channel_id]); + light_channel_t *l_chn = light->channel_group[channel_id]; + + light_channel_fade_clear(l_chn); + + iot_ledc_set_duty(l_chn->mode, l_chn->channel, duty); + iot_ledc_update_duty(l_chn->mode, l_chn->channel); + return ESP_OK; +} + +uint32_t iot_light_duty_get(light_handle_t light_handle, uint8_t channel_id) +{ + light_t *light = (light_t *)light_handle; + POINT_ASSERT(TAG, light_handle); + IOT_CHECK(TAG, channel_id < light->channel_num, ESP_FAIL); + POINT_ASSERT(TAG, light->channel_group[channel_id]); + light_channel_t *l_chn = light->channel_group[channel_id]; + + return ledc_get_duty(l_chn->mode, l_chn->channel); +} + +esp_err_t iot_light_fade_with_time(light_handle_t light_handle, uint8_t channel_id, uint32_t duty, uint32_t fade_period_ms) +{ + light_t *light = (light_t *)light_handle; + POINT_ASSERT(TAG, light_handle); + IOT_CHECK(TAG, channel_id < light->channel_num, ESP_FAIL); + POINT_ASSERT(TAG, light->channel_group[channel_id]); + light_channel_t *l_chn = light->channel_group[channel_id]; + + if (fade_period_ms == 0) { + return iot_light_duty_set(light, channel_id, duty); + } + + light_channel_fade_clear(l_chn); + + l_chn->fade_step_num = fade_period_ms / DUTY_SET_CYCLE + 1; + l_chn->fade_duty_step = (uint32_t *)heap_caps_malloc(l_chn->fade_step_num * sizeof(uint32_t), MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + + uint32_t duty_cur = iot_light_duty_get(light, channel_id); + int duty_delta = duty - duty_cur; + + if (duty_delta > 0) { + float coe = (duty_delta / pow((double)l_chn->fade_step_num, (double)1 / DUTY_SET_GAMMA)); + + for (int i = 0; i < l_chn->fade_step_num; i++) { + l_chn->fade_duty_step[i] = duty_cur + (int)(coe * pow((double)i, (double)1 / DUTY_SET_GAMMA)); + } + + l_chn->fade_step_up = true; + } else { + duty_delta = 0 - duty_delta; + float coe = (duty_delta / pow((double)l_chn->fade_step_num, (double)1 / DUTY_SET_GAMMA)); + + for (int i = 0; i < l_chn->fade_step_num; i++) { + l_chn->fade_duty_step[i] = duty + (int)(coe * pow((double)i, (double)1 / DUTY_SET_GAMMA)); + } + + l_chn->fade_duty_counter = l_chn->fade_step_num; + l_chn->fade_step_up = false; + } + + l_chn->fade_once = true; + l_chn->fade_start = true; + + return ESP_OK; +} + +esp_err_t iot_light_breath_config(light_handle_t light_handle, uint8_t channel_id, uint32_t duty, uint32_t breath_period_ms) +{ + light_t *light = (light_t *)light_handle; + POINT_ASSERT(TAG, light_handle); + IOT_CHECK(TAG, channel_id < light->channel_num, ESP_FAIL); + POINT_ASSERT(TAG, light->channel_group[channel_id]); + light_channel_t *l_chn = light->channel_group[channel_id]; + + light_channel_fade_clear(l_chn); + + /** + * @brief control light with nonlinearity fade, the duty and the fade step + * conform to gamma curve. gamma curve formula: y=a*x^(1/gm) firstly, + * use the target duty and step number to calculate coefficient `a`, + * secondly, calculate the duty for every step + */ + + l_chn->fade_step_num = (breath_period_ms / 2) / DUTY_SET_CYCLE + 1; + float coe = (duty / pow((double)l_chn->fade_step_num, (double)1 / DUTY_SET_GAMMA)); + + l_chn->fade_duty_step = (uint32_t *)heap_caps_malloc(l_chn->fade_step_num * sizeof(uint32_t), MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + + for (int i = 0; i < l_chn->fade_step_num; i++) { + l_chn->fade_duty_step[i] = (int)(coe * pow((double)i, (double)1 / DUTY_SET_GAMMA)); + } + + return ESP_OK; +} + +esp_err_t iot_light_blink_config(light_handle_t light_handle, uint8_t channel_id, uint32_t blink_period_ms) +{ + light_t *light = (light_t *)light_handle; + POINT_ASSERT(TAG, light_handle); + IOT_CHECK(TAG, channel_id < light->channel_num, ESP_FAIL); + light_channel_t *l_chn = light->channel_group[channel_id]; + + light_channel_fade_clear(l_chn); + + l_chn->fade_step_num = (blink_period_ms / 2) / DUTY_SET_CYCLE; + l_chn->fade_duty_step = (uint32_t *)heap_caps_malloc(l_chn->fade_step_num * sizeof(uint32_t), MALLOC_CAP_8BIT | MALLOC_CAP_INTERNAL); + int i = 0; + + for (i = 0; i < (l_chn->fade_step_num / 2); i++) { + l_chn->fade_duty_step[i] = 0; + } + + for (; i < l_chn->fade_step_num; i++) { + l_chn->fade_duty_step[i] = light->full_duty; + } + + return ESP_OK; +} + +esp_err_t iot_light_operate_start(light_handle_t light_handle, uint8_t channel_id) +{ + light_t *light = (light_t *)light_handle; + POINT_ASSERT(TAG, light_handle); + IOT_CHECK(TAG, channel_id < light->channel_num, ESP_FAIL); + light->channel_group[channel_id]->fade_start = true; + return ESP_OK; +} + +esp_err_t iot_light_operate_stop(light_handle_t light_handle, uint8_t channel_id) +{ + light_t *light = (light_t *)light_handle; + POINT_ASSERT(TAG, light_handle); + IOT_CHECK(TAG, channel_id < light->channel_num, ESP_FAIL); + light->channel_group[channel_id]->fade_start = false; + // iot_light_duty_set(light, channel_id, 0); + return ESP_OK; +} diff --git a/examples/bluetooth/esp_ble_mesh/common_components/light_driver/light_driver.c b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/light_driver.c new file mode 100644 index 0000000000..1002f52b0e --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/common_components/light_driver/light_driver.c @@ -0,0 +1,895 @@ +// Copyright 2020 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include +#include "errno.h" + +#include "freertos/FreeRTOS.h" +#include "freertos/queue.h" +#include "freertos/task.h" +#include "freertos/timers.h" +#include "freertos/event_groups.h" + +#include "esp_err.h" +#include "esp_log.h" +#include "esp_system.h" +#include "esp_partition.h" + +#include "lwip/sockets.h" +#include "lwip/netdb.h" +#include "lwip/sockets.h" + +#include "nvs.h" +#include "nvs_flash.h" +#include "driver/i2c.h" +#include "sys/param.h" +#include "driver/gpio.h" + +#include "light_driver.h" +#include "ble_mesh_example_nvs.h" + +/** + * @brief The state of the five-color light + */ +typedef struct { + uint8_t mode; + uint8_t on; + uint16_t hue; + uint8_t saturation; + uint8_t value; + uint8_t lightness; + uint8_t color_temperature; + uint8_t brightness; + uint32_t fade_period_ms; + uint32_t blink_period_ms; +} light_status_t; + +/** + * @brief The channel of the five-color light + */ +enum light_channel { + CHANNEL_ID_RED = 0, + CHANNEL_ID_GREEN, + CHANNEL_ID_BLUE, + CHANNEL_ID_WARM, + CHANNEL_ID_COLD, +}; + +#define LIGHT_FADE_PERIOD_MAX_MS (3 * 1000) + +static const char *TAG = "light_driver"; +static light_status_t g_light_status = {0}; +static bool g_light_blink_flag = false; +static TimerHandle_t g_fade_timer = NULL; +static int g_fade_mode = MODE_NONE; +static uint16_t g_fade_hue = 0; +extern nvs_handle_t NVS_HANDLE; + +esp_err_t light_driver_init(light_driver_config_t *config) +{ + LIGHT_PARAM_CHECK(config); + bool exist = false; + + if (ble_mesh_nvs_restore(NVS_HANDLE, LIGHT_STATUS_STORE_KEY, &g_light_status, sizeof(light_status_t), &exist) != ESP_OK) { + memset(&g_light_status, 0, sizeof(light_status_t)); + g_light_status.mode = MODE_HSV; + g_light_status.on = 1; + g_light_status.hue = 360; + g_light_status.saturation = 0; + g_light_status.value = 100; + g_light_status.lightness = 100; + g_light_status.color_temperature = 0; + g_light_status.brightness = 30; + } + + iot_led_init(LEDC_TIMER_0, LEDC_HIGH_SPEED_MODE, 1000); + + g_light_status.fade_period_ms = config->fade_period_ms; + g_light_status.blink_period_ms = config->blink_period_ms; + + iot_led_regist_channel(CHANNEL_ID_RED, config->gpio_red); + iot_led_regist_channel(CHANNEL_ID_GREEN, config->gpio_green); + iot_led_regist_channel(CHANNEL_ID_BLUE, config->gpio_blue); + iot_led_regist_channel(CHANNEL_ID_WARM, config->gpio_warm); + iot_led_regist_channel(CHANNEL_ID_COLD, config->gpio_cold); + + ESP_LOGI(TAG, "hue: %d, saturation: %d, value: %d, lightness: %d", + g_light_status.hue, g_light_status.saturation, g_light_status.value, g_light_status.lightness); + ESP_LOGI(TAG, "brightness: %d, color_temperature: %d", + g_light_status.brightness, g_light_status.color_temperature); + + return ESP_OK; +} + +esp_err_t light_driver_deinit(void) +{ + esp_err_t ret = ESP_OK; + + iot_led_deinit(); + + return ret; +} + +esp_err_t light_driver_config(uint32_t fade_period_ms, uint32_t blink_period_ms) +{ + g_light_status.fade_period_ms = fade_period_ms; + g_light_status.blink_period_ms = blink_period_ms; + + return ESP_OK; +} + +esp_err_t light_driver_set_rgb(uint8_t red, uint8_t green, uint8_t blue) +{ + esp_err_t ret = 0; + + ret = iot_led_set_channel(CHANNEL_ID_RED, red, 0); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_GREEN, green, 0); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_BLUE, blue, 0); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_WARM, 0, 0); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_COLD, 0, 0); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + return ESP_OK; +} + +static esp_err_t light_driver_hsv2rgb(uint16_t hue, uint8_t saturation, uint8_t value, + uint8_t *red, uint8_t *green, uint8_t *blue) +{ + uint16_t hi = (hue / 60) % 6; + uint16_t F = 100 * hue / 60 - 100 * hi; + uint16_t P = value * (100 - saturation) / 100; + uint16_t Q = value * (10000 - F * saturation) / 10000; + uint16_t T = value * (10000 - saturation * (100 - F)) / 10000; + + switch (hi) { + case 0: + *red = value; + *green = T; + *blue = P; + break; + + case 1: + *red = Q; + *green = value; + *blue = P; + break; + + case 2: + *red = P; + *green = value; + *blue = T; + break; + + case 3: + *red = P; + *green = Q; + *blue = value; + break; + + case 4: + *red = T; + *green = P; + *blue = value; + break; + + case 5: + *red = value; + *green = P; + *blue = Q; + break; + + default: + return ESP_FAIL; + } + + *red = *red * 255 / 100; + *green = *green * 255 / 100; + *blue = *blue * 255 / 100; + + return ESP_OK; +} + +static void light_driver_rgb2hsv(uint16_t red, uint16_t green, uint16_t blue, + uint16_t *h, uint8_t *s, uint8_t *v) +{ + double hue, saturation, value; + double m_max = MAX(red, MAX(green, blue)); + double m_min = MIN(red, MIN(green, blue)); + double m_delta = m_max - m_min; + + value = m_max / 255.0; + + if (m_delta == 0) { + hue = 0; + saturation = 0; + } else { + saturation = m_delta / m_max; + + if (red == m_max) { + hue = (green - blue) / m_delta; + } else if (green == m_max) { + hue = 2 + (blue - red) / m_delta; + } else { + hue = 4 + (red - green) / m_delta; + } + + hue = hue * 60; + + if (hue < 0) { + hue = hue + 360; + } + } + + *h = (int)(hue + 0.5); + *s = (int)(saturation * 100 + 0.5); + *v = (int)(value * 100 + 0.5); +} + +// refence: https://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c +static esp_err_t light_driver_hsl2rgb(uint16_t hue, uint8_t saturation, uint8_t lightness, + uint8_t *red, uint8_t *green, uint8_t *blue) +{ + uint16_t hi = (hue / 60) % 6; + uint16_t C = (100 - abs(2 * lightness - 100)) * saturation / 100; + uint16_t M = 100 * (lightness - 0.5 * C) / 100; + uint16_t X = C * (100 - abs((hue * 100 / 60 ) % 200 - 100)) / 100; + + switch (hi) { + case 0: /* hue 0~60 */ + *red = C + M; + *green = X + M; + *blue = M; + break; + + case 1: /* hue 60~120 */ + *red = X + M; + *green = C + M; + *blue = M; + break; + + case 2: /* hue 120~180 */ + *red = M; + *green = C + M; + *blue = X + M; + break; + + case 3: /* hue 180~240 */ + *red = M; + *green = X + M; + *blue = C + M; + break; + + case 4: /* hue 240~300 */ + *red = X + M; + *green = M; + *blue = C + M; + break; + + case 5: /* hue 300~360 */ + *red = C + M; + *green = M; + *blue = X + M; + break; + + default: + return ESP_FAIL; + } + + *red = *red * 255 / 100; + *green = *green * 255 / 100; + *blue = *blue * 255 / 100; + + return ESP_OK; +} + +esp_err_t light_driver_set_hsv(uint16_t hue, uint8_t saturation, uint8_t value) +{ + LIGHT_PARAM_CHECK(hue <= 360); + LIGHT_PARAM_CHECK(saturation <= 100); + LIGHT_PARAM_CHECK(value <= 100); + + esp_err_t ret = ESP_OK; + uint8_t red = 0; + uint8_t green = 0; + uint8_t blue = 0; + + ret = light_driver_hsv2rgb(hue, saturation, value, &red, &green, &blue); + LIGHT_ERROR_CHECK(ret < 0, ret, "light_driver_hsv2rgb, ret: %d", ret); + + ESP_LOGV(TAG, "red: %d, green: %d, blue: %d", red, green, blue); + + ret = iot_led_set_channel(CHANNEL_ID_RED, red, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_GREEN, green, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_BLUE, blue, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + if (g_light_status.mode != MODE_HSV) { + ret = iot_led_set_channel(CHANNEL_ID_WARM, 0, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_COLD, 0, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + } + + g_light_status.mode = MODE_HSV; + g_light_status.on = 1; + g_light_status.hue = hue; + g_light_status.value = value; + g_light_status.saturation = saturation; + + ret = ble_mesh_nvs_store(NVS_HANDLE, LIGHT_STATUS_STORE_KEY, &g_light_status, sizeof(light_status_t)); + LIGHT_ERROR_CHECK(ret < 0, ret, "ble_mesh_nvs_store, ret: %d", ret); + + return ESP_OK; +} + +esp_err_t light_driver_set_hue(uint16_t hue) +{ + if (g_light_status.mode == MODE_HSV) { + return light_driver_set_hsv(hue, g_light_status.saturation, g_light_status.value); + } else if (g_light_status.mode == MODE_HSL) { + return light_driver_set_hsl(hue, g_light_status.saturation, g_light_status.lightness); + } else { + return ESP_FAIL; + } +} + +esp_err_t light_driver_set_saturation(uint8_t saturation) +{ + if (g_light_status.mode == MODE_HSV) { + return light_driver_set_hsv(g_light_status.hue, saturation, g_light_status.value); + } else if (g_light_status.mode == MODE_HSL) { + return light_driver_set_hsl(g_light_status.hue, saturation, g_light_status.lightness); + } else { + return ESP_FAIL; + } +} + +esp_err_t light_driver_set_value(uint8_t value) +{ + return light_driver_set_hsv(g_light_status.hue, g_light_status.saturation, value); +} + +esp_err_t light_driver_get_hsv(uint16_t *hue, uint8_t *saturation, uint8_t *value) +{ + LIGHT_PARAM_CHECK(hue); + LIGHT_PARAM_CHECK(saturation); + LIGHT_PARAM_CHECK(value); + + *hue = g_light_status.hue; + *saturation = g_light_status.saturation; + *value = g_light_status.value; + + return ESP_OK; +} + +uint16_t light_driver_get_hue(void) +{ + return g_light_status.hue; +} + +uint8_t light_driver_get_saturation(void) +{ + return g_light_status.saturation; +} + +uint8_t light_driver_get_value(void) +{ + return g_light_status.value; +} + +uint8_t light_driver_get_mode(void) +{ + return g_light_status.mode; +} + +esp_err_t light_driver_set_ctb(uint8_t color_temperature, uint8_t brightness) +{ + LIGHT_PARAM_CHECK(brightness <= 100); + LIGHT_PARAM_CHECK(color_temperature <= 100); + + esp_err_t ret = ESP_OK; + uint8_t warm_tmp = color_temperature * brightness / 100; + uint8_t cold_tmp = (100 - color_temperature) * brightness / 100; + warm_tmp = warm_tmp < 15 ? warm_tmp : 14 + warm_tmp * 86 / 100; + cold_tmp = cold_tmp < 15 ? cold_tmp : 14 + cold_tmp * 86 / 100; + + ret = iot_led_set_channel(CHANNEL_ID_COLD, + cold_tmp * 255 / 100, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_WARM, + warm_tmp * 255 / 100, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + if (g_light_status.mode != MODE_CTB) { + ret = iot_led_set_channel(CHANNEL_ID_RED, 0, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_GREEN, 0, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_BLUE, 0, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + } + + g_light_status.mode = MODE_CTB; + g_light_status.on = 1; + g_light_status.brightness = brightness; + g_light_status.color_temperature = color_temperature; + + ret = ble_mesh_nvs_store(NVS_HANDLE, LIGHT_STATUS_STORE_KEY, &g_light_status, sizeof(light_status_t)); + LIGHT_ERROR_CHECK(ret < 0, ret, "ble_mesh_nvs_store, ret: %d", ret); + + return ESP_OK; +} + +esp_err_t light_driver_set_color_temperature(uint8_t color_temperature) +{ + return light_driver_set_ctb(color_temperature, g_light_status.brightness); +} + +esp_err_t light_driver_set_brightness(uint8_t brightness) +{ + return light_driver_set_ctb(g_light_status.color_temperature, brightness); +} + +esp_err_t light_driver_get_ctb(uint8_t *color_temperature, uint8_t *brightness) +{ + LIGHT_PARAM_CHECK(color_temperature); + LIGHT_PARAM_CHECK(brightness); + + *brightness = g_light_status.brightness; + *color_temperature = g_light_status.color_temperature; + + return ESP_OK; +} + +uint8_t light_driver_get_color_temperature(void) +{ + return g_light_status.color_temperature; +} + +uint8_t light_driver_get_brightness(void) +{ + return g_light_status.brightness; +} + +esp_err_t light_driver_set_hsl(uint16_t hue, uint8_t saturation, uint8_t lightness) +{ + LIGHT_PARAM_CHECK(hue <= 360); + LIGHT_PARAM_CHECK(saturation <= 100); + LIGHT_PARAM_CHECK(lightness <= 100); + + esp_err_t ret = ESP_OK; + uint8_t red = 0; + uint8_t green = 0; + uint8_t blue = 0; + + ret = light_driver_hsl2rgb(hue, saturation, lightness, &red, &green, &blue); + LIGHT_ERROR_CHECK(ret < 0, ret, "light_driver_hsl2rgb, ret: %d", ret); + + ESP_LOGV(TAG, "red: %d, green: %d, blue: %d", red, green, blue); + + ret = iot_led_set_channel(CHANNEL_ID_RED, red, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_GREEN, green, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_BLUE, blue, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + if (g_light_status.mode != MODE_HSL) { + ret = iot_led_set_channel(CHANNEL_ID_WARM, 0, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_COLD, 0, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + } + + g_light_status.mode = MODE_HSL; + g_light_status.on = 1; + g_light_status.hue = hue; + g_light_status.saturation = saturation; + g_light_status.lightness = lightness; + + ret = ble_mesh_nvs_store(NVS_HANDLE, LIGHT_STATUS_STORE_KEY, &g_light_status, sizeof(light_status_t)); + LIGHT_ERROR_CHECK(ret < 0, ret, "ble_mesh_nvs_store, ret: %d", ret); + + return ESP_OK; +} + +esp_err_t light_driver_set_lightness(uint8_t lightness) +{ + return light_driver_set_hsl(g_light_status.hue, g_light_status.saturation, lightness); +} + +uint8_t light_driver_get_lightness(void) +{ + return g_light_status.lightness; +} + +esp_err_t light_driver_get_hsl(uint16_t *hue, uint8_t *saturation, uint8_t *lightness) +{ + LIGHT_PARAM_CHECK(hue); + LIGHT_PARAM_CHECK(saturation); + LIGHT_PARAM_CHECK(lightness); + + *hue = g_light_status.hue; + *saturation = g_light_status.saturation; + *lightness = g_light_status.lightness; + + return ESP_OK; +} + +esp_err_t light_driver_set_switch(bool on) +{ + esp_err_t ret = ESP_OK; + g_light_status.on = on; + + if (!g_light_status.on) { + ret = iot_led_set_channel(CHANNEL_ID_RED, 0, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_GREEN, 0, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_BLUE, 0, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_COLD, 0, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_WARM, 0, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_set_channel, ret: %d", ret); + + } else { + switch (g_light_status.mode) { + case MODE_HSV: + g_light_status.value = (g_light_status.value) ? g_light_status.value : 100; + ret = light_driver_set_hsv(g_light_status.hue, g_light_status.saturation, g_light_status.value); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "light_driver_set_hsv, ret: %d", ret); + break; + + case MODE_HSL: + g_light_status.lightness = (g_light_status.lightness) ? g_light_status.lightness : 100; + ret = light_driver_set_hsl(g_light_status.hue, g_light_status.saturation, g_light_status.lightness); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "light_driver_set_hsl, ret: %d", ret); + break; + + case MODE_CTB: + g_light_status.brightness = (g_light_status.brightness) ? g_light_status.brightness : 100; + ret = light_driver_set_ctb(g_light_status.color_temperature, g_light_status.brightness); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "light_driver_set_ctb, ret: %d", ret); + break; + + default: + ESP_LOGW(TAG, "This operation is not supported"); + break; + } + } + + ret = ble_mesh_nvs_store(NVS_HANDLE, LIGHT_STATUS_STORE_KEY, &g_light_status, sizeof(light_status_t)); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "ble_mesh_nvs_store, ret: %d", ret); + + return ESP_OK; +} + +esp_err_t light_driver_set_mode(light_mode_t mode) +{ + g_light_status.mode = mode; + + return ESP_OK; +} + +bool light_driver_get_switch(void) +{ + return g_light_status.on; +} + +esp_err_t light_driver_breath_start(uint8_t red, uint8_t green, uint8_t blue) +{ + esp_err_t ret = ESP_OK; + + ret = iot_led_start_blink(CHANNEL_ID_RED, + red, g_light_status.blink_period_ms, true); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_start_blink, ret: %d", ret); + ret = iot_led_start_blink(CHANNEL_ID_GREEN, + green, g_light_status.blink_period_ms, true); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_start_blink, ret: %d", ret); + ret = iot_led_start_blink(CHANNEL_ID_BLUE, + blue, g_light_status.blink_period_ms, true); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_start_blink, ret: %d", ret); + + g_light_blink_flag = true; + + return ESP_OK; +} + +esp_err_t light_driver_breath_stop(void) +{ + esp_err_t ret = ESP_OK; + + if (g_light_blink_flag == false) { + return ESP_OK; + } + + ret = iot_led_stop_blink(CHANNEL_ID_RED); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_stop_blink, ret: %d", ret); + + ret = iot_led_stop_blink(CHANNEL_ID_GREEN); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_stop_blink, ret: %d", ret); + + ret = iot_led_stop_blink(CHANNEL_ID_BLUE); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_stop_blink, ret: %d", ret); + + light_driver_set_switch(true); + + return ESP_OK; +} + +esp_err_t light_driver_fade_brightness(uint8_t brightness) +{ + esp_err_t ret = ESP_OK; + g_fade_mode = MODE_ON; + uint32_t fade_period_ms = 0; + + if (g_light_status.mode == MODE_HSV) { + uint8_t red = 0; + uint8_t green = 0; + uint8_t blue = 0; + + ret = light_driver_hsv2rgb(g_light_status.hue, g_light_status.saturation, g_light_status.value, &red, &green, &blue); + LIGHT_ERROR_CHECK(ret < 0, ret, "light_driver_hsv2rgb, ret: %d", ret); + + if (brightness != 0) { + ret = iot_led_get_channel((ledc_channel_t)CHANNEL_ID_RED, &red); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_get_channel, ret: %d", ret); + ret = iot_led_get_channel((ledc_channel_t)CHANNEL_ID_GREEN, &green); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_get_channel, ret: %d", ret); + ret = iot_led_get_channel((ledc_channel_t)CHANNEL_ID_BLUE, &blue); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_get_channel, ret: %d", ret); + + uint8_t max_color = MAX(MAX(red, green), blue); + uint8_t change_value = brightness * 255 / 100 - max_color; + fade_period_ms = LIGHT_FADE_PERIOD_MAX_MS * change_value / 255; + } else { + fade_period_ms = LIGHT_FADE_PERIOD_MAX_MS * MAX(MAX(red, green), blue) / 255; + red = 0; + } + + g_light_status.value = brightness; + light_driver_hsv2rgb(g_light_status.hue, g_light_status.saturation, g_light_status.value, &red, &green, &blue); + + ret = iot_led_set_channel(CHANNEL_ID_RED, red, fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_GREEN, green, fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_BLUE, blue, fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + } else if (g_light_status.mode == MODE_CTB) { + uint8_t warm_tmp = 0; + uint8_t cold_tmp = 0; + fade_period_ms = LIGHT_FADE_PERIOD_MAX_MS * g_light_status.brightness / 100; + + if (brightness != 0) { + uint8_t change_value = brightness - g_light_status.brightness; + warm_tmp = g_light_status.color_temperature; + cold_tmp = (brightness - g_light_status.color_temperature); + fade_period_ms = LIGHT_FADE_PERIOD_MAX_MS * change_value / 100; + } + + ret = iot_led_set_channel(CHANNEL_ID_COLD, + cold_tmp * 255 / 100, fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_WARM, + warm_tmp * 255 / 100, fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + g_light_status.brightness = brightness; + } + + ret = ble_mesh_nvs_store(NVS_HANDLE, LIGHT_STATUS_STORE_KEY, &g_light_status, sizeof(light_status_t)); + LIGHT_ERROR_CHECK(ret < 0, ret, "ble_mesh_nvs_store, ret: %d", ret); + + return ESP_OK; +} + +static void light_fade_timer_stop(void) +{ + if (!g_fade_timer) { + return ; + } + + if (!xTimerStop(g_fade_timer, portMAX_DELAY)) { + ESP_LOGW(TAG, "xTimerStop timer: %p", g_fade_timer); + } + + if (!xTimerDelete(g_fade_timer, portMAX_DELAY)) { + ESP_LOGW(TAG, "xTimerDelete timer: %p", g_fade_timer); + } + + g_fade_timer = NULL; +} + +static void light_fade_timer_cb(void *timer) +{ + uint8_t red = 0; + uint8_t green = 0; + uint8_t blue = 0; + uint32_t fade_period_ms = LIGHT_FADE_PERIOD_MAX_MS * 2 / 6; + int variety = (g_fade_hue > 180) ? 60 : -60; + + if (g_light_status.hue >= 360 || g_light_status.hue <= 0) { + light_fade_timer_stop(); + } + + g_light_status.hue = g_light_status.hue >= 360 ? 360 : g_light_status.hue + variety; + g_light_status.hue = g_light_status.hue <= 60 ? 0 : g_light_status.hue + variety; + + light_driver_hsv2rgb(g_light_status.hue, g_light_status.saturation, g_light_status.value, &red, &green, &blue); + + iot_led_set_channel(CHANNEL_ID_RED, red, fade_period_ms); + iot_led_set_channel(CHANNEL_ID_GREEN, green, fade_period_ms); + iot_led_set_channel(CHANNEL_ID_BLUE, blue, fade_period_ms); +} + +esp_err_t light_driver_fade_hue(uint16_t hue) +{ + esp_err_t ret = ESP_OK; + g_fade_mode = MODE_HSV; + g_fade_hue = hue; + + light_fade_timer_stop(); + + if (g_light_status.mode != MODE_HSV) { + ret = iot_led_set_channel(CHANNEL_ID_WARM, 0, 0); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_COLD, 0, 0); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + } + + g_light_status.mode = MODE_HSV; + g_light_status.value = (g_light_status.value == 0) ? 100 : g_light_status.value; + uint32_t fade_period_ms = LIGHT_FADE_PERIOD_MAX_MS * 2 / 6; + + light_fade_timer_cb(NULL); + + g_fade_timer = xTimerCreate("light_timer", fade_period_ms, + true, NULL, light_fade_timer_cb); + xTimerStart(g_fade_timer, 0); + + return ESP_OK; +} + +esp_err_t light_driver_fade_warm(uint8_t color_temperature) +{ + esp_err_t ret = ESP_OK; + g_fade_mode = MODE_CTB; + + if (g_light_status.mode != MODE_CTB) { + ret = iot_led_set_channel(CHANNEL_ID_RED, 0, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_GREEN, 0, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_BLUE, 0, g_light_status.fade_period_ms); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + } + + uint8_t warm_tmp = color_temperature * g_light_status.brightness / 100; + uint8_t cold_tmp = (100 - color_temperature) * g_light_status.brightness / 100; + + ret = iot_led_set_channel(CHANNEL_ID_COLD, cold_tmp * 255 / 100, LIGHT_FADE_PERIOD_MAX_MS); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + ret = iot_led_set_channel(CHANNEL_ID_WARM, warm_tmp * 255 / 100, LIGHT_FADE_PERIOD_MAX_MS); + LIGHT_ERROR_CHECK(ret < 0, ret, "iot_led_set_channel, ret: %d", ret); + + g_light_status.mode = MODE_CTB; + g_light_status.color_temperature = color_temperature; + ret = ble_mesh_nvs_store(NVS_HANDLE, LIGHT_STATUS_STORE_KEY, &g_light_status, sizeof(light_status_t)); + LIGHT_ERROR_CHECK(ret < 0, ret, "ble_mesh_nvs_store, ret: %d", ret); + + return ESP_OK; +} + +esp_err_t light_driver_fade_stop(void) +{ + esp_err_t ret = ESP_OK; + + light_fade_timer_stop(); + + if (g_light_status.mode != MODE_CTB) { + uint16_t hue = 0; + uint8_t saturation = 0; + uint8_t value = 0; + + ret = iot_led_stop_blink(CHANNEL_ID_RED); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_stop_blink, ret: %d", ret); + + ret = iot_led_stop_blink(CHANNEL_ID_GREEN); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_stop_blink, ret: %d", ret); + + ret = iot_led_stop_blink(CHANNEL_ID_BLUE); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_stop_blink, ret: %d", ret); + + uint8_t red, green, blue; + + ret = iot_led_get_channel(CHANNEL_ID_RED, &red); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_get_channel, ret: %d", ret); + ret = iot_led_get_channel(CHANNEL_ID_GREEN, &green); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_get_channel, ret: %d", ret); + ret = iot_led_get_channel(CHANNEL_ID_BLUE, &blue); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_get_channel, ret: %d", ret); + + light_driver_rgb2hsv(red, green, blue, &hue, &saturation, &value); + + g_light_status.hue = (g_fade_mode == MODE_HSV) ? hue : g_light_status.hue; + g_light_status.value = (g_fade_mode == MODE_OFF || g_fade_mode == MODE_ON) ? value : g_light_status.value; + } else { + uint8_t color_temperature = 0; + uint8_t brightness = 0; + + ret = iot_led_stop_blink(CHANNEL_ID_COLD); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_stop_blink, ret: %d", ret); + + ret = iot_led_stop_blink(CHANNEL_ID_WARM); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_stop_blink, ret: %d", ret); + + uint8_t warm_tmp, cold_tmp; + uint8_t tmp; + + ret = iot_led_get_channel(CHANNEL_ID_WARM, &tmp); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_get_channel, ret: %d", ret); + warm_tmp = (int32_t)tmp * 100 / 255; + + ret = iot_led_get_channel(CHANNEL_ID_COLD, &tmp); + LIGHT_ERROR_CHECK(ret < 0, ESP_FAIL, "iot_led_get_channel, ret: %d", ret); + cold_tmp = (int32_t)tmp * 100 / 255; + + color_temperature = (!warm_tmp) ? 0 : 100 / (cold_tmp / warm_tmp + 1); + brightness = (!color_temperature) ? cold_tmp : warm_tmp * 100 / color_temperature; + + g_light_status.brightness = (g_fade_mode == MODE_OFF || g_fade_mode == MODE_ON) ? brightness : g_light_status.brightness; + g_light_status.color_temperature = (g_fade_mode == MODE_CTB) ? color_temperature : g_light_status.color_temperature; + } + + ret = ble_mesh_nvs_store(NVS_HANDLE, LIGHT_STATUS_STORE_KEY, &g_light_status, sizeof(light_status_t)); + LIGHT_ERROR_CHECK(ret < 0, ret, "ble_mesh_nvs_store, ret: %d", ret); + + g_fade_mode = MODE_NONE; + return ESP_OK; +}

>LpnZnS{IVQ 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 S|ERPCEc?SwHsyzW;{F38DJV<; literal 0 HcmV?d00001 diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product_04.png b/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product_04.png new file mode 100644 index 0000000000000000000000000000000000000000..0234fad3adeeb58aa8682f676cf2baa108b0e1c0 GIT binary patch literal 272275 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