From 89bff634431b06a628401d378dc7b62b682e8c9c 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 | 1344 +++++++++++++++++ .../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, 10004 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..d8c43747ce --- /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 uint8_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..3fe75c186b --- /dev/null +++ b/examples/bluetooth/esp_ble_mesh/aligenie_demo/main/aligenie_demo.c @@ -0,0 +1,1344 @@ +/* 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_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(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_HEALTH_SRV, 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(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_GEN_ONOFF_SRV, 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, BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_GEN_ONOFF_SRV, 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, BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_GEN_ONOFF_SRV, 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(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_LIGHTNESS_SRV, 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(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_LIGHTNESS_SETUP_SRV, 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(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_CTL_SRV, 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(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_CTL_SETUP_SRV, 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(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_HSL_SRV, 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(), BLE_MESH_CID_NVAL, ESP_BLE_MESH_MODEL_ID_LIGHT_HSL_SETUP_SRV, 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(), CID_ALIBABA, GENIE_VENDOR_MODEL_SRV_ID, 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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
Pw6E*-?!I`{_CT`S+Z(s~g%>Y=@#e*W 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 z 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 z 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�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 VB1=hP0|NsCgQu&X%Q~loCIEwYu;c&$ 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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 W+s_(7SH!P^?DBN=b6Mw<&;$To{v4P9 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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 literal 0 HcmV?d00001 diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_project.png b/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_project.png new file mode 100644 index 0000000000000000000000000000000000000000..b46b83d287c7032e49832e3b829dc72793a5a5ee GIT binary patch literal 23885 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 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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 JtaD0e0s!u?uKoZ3 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..29d8fcec71 --- /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 = {0x00}; + 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..5317431792 --- /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, + .duty_resolution = 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; +}

I(;H7qbJ5HvjLM)P9(pS@m?b_q+PXlPmOm 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 literal 0 HcmV?d00001 diff --git a/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product.png b/examples/bluetooth/esp_ble_mesh/aligenie_demo/tutorial/images/create_product.png new file mode 100644 index 0000000000000000000000000000000000000000..d51c3bbf11adf8462f981e01f0bebe90cf31b56f GIT binary patch literal 16436 zcmeAS@N?(olHy`uVBq!ia0y~yU@K=}V6@<1V_;zD{JQK20|NtNage(c!@6@aFBupZ zSkfJR9T^xl_H+M9WMyDr;4JWnEM{O3Dgj}}duj3&3=H-sJzX3_D&pSW<)0(>J@!WB z);q7GUTocRz38d^o(Buux!r#j|5&$HBd_-g_qD=4{S`MfB(9h7dikWhikPrTU_xPs z!PjGsSxutW9M*+zTqZiYIJzBk>*D275)rdsn(WUT8z-oEP6DG#8C!H1z(7K>%^J*L zP(D(?4rV2^NW23x7Ne-~G<#SsnBLzUr9&D|&Ag|J5tK@sc0Y-)q0W@o1v8a@>E>v)}#KzJ2?j zH(vVVz1PZiA1~f}JYVlU2iWZwbWfjJ|5=?kjIU1NQTV^qFS4(e#C^7R+4DdBwDq@- zpH2&YU-vrqzv|iFGgp1D*#E0mu)SRR16V7=+%0SVSk?R42!4F_K3ihXl(l~+b-e!X zcx3iI^GCMVU48Zh+$(Glx0C(2Zhp^>m)6SH{{FpJ_pj{pzu^7<{tBMAkG;3idRzW| zIs1Q)?d9hGJd=J(_3XTgN1YX4SI67_ES1QwJRSY0df)TvWnTTkUw59b)w}nh&3w*A zo4fkD{;!{F?Va{|-R^fi&wnki|FztC@3o^EveUo(0msRMn24~tx%Tok!E-8)`n~`5 zdY{gtXYc!V{C}?e?Y{KKC+*5=|Ca5!Ji)Hq=+TSCg7W*+lYXBUZJsy(-z8&tecn2` zs_e?;7pJsIW$p-+UBP30$Mg05uj|Tv`LaHJSZa4*rCEl+MUy+3Rdv3XE-Ew9RT*i18KO#L=@Ub59cZ`XgZ9>rt@3%b&0FUGIEMKKlG!h`f31UgJZv*enn8m2avk+V!%f z`tpHgdUx$(LqDG}K0jyU+njmcxBS0)E&BCV<*ojF7yt9yGw=I;mv+1LeS`X$^v}Cq zeM(sV@6V-ummZ%_oxga2RYRt9%aUZH*$@4!!d^bV@MZIf*SFX_KQF!i**f~Csmb5C zW%m!(9T$Q-H-ueh<@Q*ikFDaTr#|`cv_`M+lsJ$-Rfz3#Po`T4XD0p@24 z)aTlqckX<(?dQIqEp^eAze^_7Tqsa~UH)j_{lC9F&o8bMvenJ5dYc(}*)Z?6-O1yN z-=@p=Ay;Y|kJjD%84G=l&Xi@w{x!VB z`8;-aneW^q{_1ZpU$uStdrR%D^k4gSz5f-ktg3p(^;zt;KkG6Bf@<$&)?R*~k~?|c z^J%)#=PWw+rJtX7@^{Gh$xnVSxjtd(-{sFIehao2obP|=`uoc&Z+B-i&-?T1^2f9J ztP%FhJgd$g<}1Hsc39?oV3=*5@8P*B|L>XdT7eR6!_r((oPz?9d4KV@{KIA^#QoiE z_EbK5-1nkj`F+m2%MLonR&j6L5_`*CPUT50U-Yi~3!U55{B4&14r6!xxum47?q#-} z<6OT}=DagLb^iU8e5GCHW!Zl1;!nT6%*b3YW&7#=*{9BH+qZAgvF-mOv-;Aumph;Q zR{5GdM^4%H`k$y(pZ;D>zVh^ONbT9HtNJZZT`KfkuU>oh_^Ou?&r7c+U(Jua{83Kj z|C!atckY}2r{?lU|NiK^+x{76R@FuRyZM~$Z*k=Gdiz;@q0{31FPnXR9#`LY^?6+V zx}P()=&nC~Txa^X+28msqzcG!2rHz)sA{jKx+x$ozXo>hN}*X_GjvSyawKXcjB%TizdIREs< zlH>m87yl|gcii%=@#){|_5IH;{I?_5{{OGy94o$N6WjZ0FE_6Kom;i0?zoxl`B$I* zSOs4_es2BBDxX_%;g`38JaORXR!{-Big{Yd{)gw5|F?Sdy{__yU+tZ=-dBI=^0|h;{8O=)`pnhGRpbx9 z+URqBca_p^t@rBo*Iya>-G5$tX8RYh{Fk|B+#-KjUTNogX<;_^NB*sCnUTNjbiH4v zDc@cHt9ruK@6+dnSJhoT?$cIVS9#N5{rdTT&U@T`pL*@fpViwp|Jk+b|Cyz4UmaJ` zU;lpb%b!=|cdxo{1@gj!JJFzW@+zbEs`~}cJKdGm{oZ}}duRW&@-;6n+}`wcvfl%< zxd-NT+gw>Oe@Wh??Y`>$tJO;`cRu-3b7_-J#Yy!pcHZ(&>05ZT<`=AczdUooglkv* z(D*hYEK_f_nV|C#gp(zmM*{p#|*3g38HW@R{c zo_kPj-qq{I*H`tM-~Ma5_g&x=|9|2A#nbBRSKA-|V;x{y=6m|mN12kIPk%3MJ87{0 z_RpP9=7;|+Uz0f_u)gkR`M!Pcvwr^jx$i0{`+TYJy_Ed?x9Qu>adv87pU>NBn^%|n z^?CgM`f1mn9|yNI&aH=Kj9!+5cyT`Td&DPd=Yfe|>pZ z$?mE}yMOIs^SsSh-81>-o850q`xhm$X&tvU{rzNi_>Q{w?IpRN z-+NE1pTElf^smpS|I3_t_InndQIKJvXxW;PuoDGYR zy2EpSChaJ0t2tyn|A=2a`(5+5`(LIM+kKqv|K!?y_rGOUAFXdc^s{@pC;R$3$?(4+ zq3@^rSv`Lq_1|u4T)x%MIooopV|`z(Pn~e{&F)`+++(ed{rqw5>HX=y-n-OBT-c)X zU+#&@2bz0IoCh^-Q@lL{g+D?*}Ye<5A&}(^Ti@lVG6tR%d)z2nfAHsSD(!3D>Ry2 zd%geg3a{g8vWx51Tgy&=bzbBDnbr2!m!*2{^52zz%YAaq{yld8*R=oKd3ApHwJ)<~ z&AY$gx!D@W;~U=ISaLhFGU~qn?Z3C>%;gWi`c&6H^%`&S9&p7_oD2(C`<>d4p6XB2 zK0i@^pUB4F*Jk$bZfUpv$&&Z=NS>9Z?TdYx|9#bGf9|~hi}P&_)6RW+{zX*oE(x*; zx6Pb0Ki}?Q-2SEj$OZ+awB=pR@u#JFMpOK?wB0+c>$yQ zzsRS_lk>yt^L$Tl`Xk|ceA~;9pD!%kR~r>~w|-y#-*WB$=R)7#|MKV3t}VW`@|l%Y z-3JouxB2!@UwVA?{(U<3%YVJkh?*z2|9-LmEjjc3>t21@llyn$tv*Fi)-Cv_qrLy! z{H^uX&n7(8wU;pb=(O{bjOXwFU+b+u7uLVaJ~j33M88$n{I{5$RNu8)J^u41N7K1E z=hW+F`z^Zd;ZbS}A|^{`rvG$)u*!&8%9t({aDQ@A0K|^S3>}_r+@Rp7YC&`~6;FcP;1N zPmpIA&h>(_Z1Lyv^D>*({GHTM9wP>7VA_5C*m1u0+ne=IJipg}G!{Hxr}OBAy!)QN zQ`7mT=KU>ydTjCHI-yd%rIXK9e|s~ts(O>o+%s||LECZzCi?$b_SMs_aE||k=eK`a z@>I>)QY%-qEfY2vYxuf9$8-ICnPwX2+`{+cS4 z`^@N$WLbg9o6q15R72ggsqxRx7yG;YxwU_uWzNcJ>o)BC_ul=_r|s^4zSV23dm?%4 zv%h=JUZY3T|5YA&{V(n?gXZ;UySl(5>GL&V-4R(({(RoOT$#^S;N!CQx@@|=%riEb zyzmVF#53t$+uK;3vOZkuL(QYbg72$qkK8bK zkNI9+{dexOdmp|E{s#AloZoju{0}|*eg2y5|KtB$>-b&2?}yC1FF(NX$RJyi2kXeq z5r(mbR{wB9>UsPBH8sC3&+mIauUgM0isxRhA>X}`HvqAN|F{CtycuMO=oPg>%7XOnnbh2pZ*}Rzu({Slg_RVhn zeG)58o*;?kW$jRgYdv~@)A`zW#for&izf=)LCye~k=bH&2d+_SAx}9-5UkQo0d;WYn4JzLc zWEkI>sIv0$(u3!`_4kJSy9#O|A6Nku^e&Cv2uk7?WZSGKsg&+90gpN?um%O#s|rXm zy_>W{*)!<4F<9z_7%2Fx=7Gm49JWh^fTDK50o`I(Ss$f-cxV8}ML9L!Ken z4U*t7kdp3)eJY-^=fOiG3!;aPRRKTFmfwl2D}TpZwPxo!`}yk`8;)xJjWx(=zOr5N znVk+F+{+D_n=Lb^`uBWYJ%8KR!#eWMsu^}E|NVJy{id1 z)_x7XyG`maBtAd^u(UC8}~aQm6JEJ3%@0&;(?^}coO`O~lK zJ#T+!=vkKdFD5_A?#+G1=6AFAt)DhMbbp%fcJ|QF{d0LX^S*_<`asZBe?8vYHBwvl zFZ+5m_3Qi3Z-0d|xP|{c|7*?L-#It-Ge6rD`>$?Wzx9iamwsjWo?c}*1D=#3R*8Lj z67W|gG&r{{@_N2BgPZf$^Pdv;op1YVy&!k@9-G>=AdAg1qs%jYzxq{oTdnz8umL<- zdS8w4=X*Li;49l&>uBHKzM)TVe|^f(Gw;>>r-y6iFHJpsZON`Z`+WD^ExW&Dmv40G z)l}cttJ&5rPk`r*X{&b5lX+DhwCet@y0p(Rt8QO=KRy3^T0Mh~-^=r#e$9XV)&BnM ze|z$yuBFWQz3leRH81OK8r(M3U4MW5+CB3QB87tK^~uh@-(Qy>TKTr{)oJ#-ewQ}A z`m`;VK_d36{p;1AKGoG<VmH#Ft2X- zu_Gz{-O^-sgPzTnhF9J%3E5xjSzEj7Zph?qrInGjvA63OBy|7&vw8ph`yqw&-S-{) zFK?^6@b}h|-)Fz>^PY%s-Li$PZTt)j2`eE~|6T~jwcJIn7f{rrDFnVVAC`uhy@qPCmz`A^}N)bwTM=9On)I1rQ$j??Iz!*e@p zrIX%nOMbdG(MGn~JXStCt}-!Z!=4qDJ3g1>>{ra+Y_`olTJK%@qn8$Yva@q)4yW$@ zyME5C|E$_!M`xA3POiD#XYuFC${7~5THo#&$+4f>t-FPJ_NUi-435cbi_gnGpVwXb z^9N7HPwndCpI>Dsz1gO_vG)E%i$sRfwq=bde$rj{@Z827-*0h0ZVJ!sJG}g~>*1=8 zjXPG#$Zd(;S^Q~Y@8Q^;#lJ#i?oC|x>E+w^kFt|$jxR3!a`P0+qc1LVDn4D@@qL>1 zqeUwh9(^SF?#SftI(Md8pO^2czV6R|NH21~W!byi_pR%eKYH?c?>t)}_HQ}eXQj1{ z=N(-YQT}{!VbV7H&wSZZ5g9)i7#OBmfy;_}i=^Jk+>)8@Gw(yZWb*F$+Twh#Bkoj} z8tP<7zvFrOW#bLIFdlV1soP@5*?DCA?Dko%^KxF0xSlPFNlor%08cL4U!8fiCT8pB z%CYFi@3!RIAF(d_(JVHxuYF&wKAr4fKCWzMlv021cVW$%@72F9`itCO{@ecJ%9pjv z-rxTkaiqQPYkb+3?K-;uKg7Giqqo%PUX|Jz%0 z+O3yY|JGP<6}hkOLxTG3iX59T>32S_W&8gW%lz29Lgw>Lx$k<}QW00Y56`{-Yjel? z-KLLL|G$0a-^1C;|4tq=o?d^r;>i4erAK=A%YQW8d;9g~&9mw@tnaesoBFz~=-c7Bhokj%<*RdZ>X*e> zOi3~*y=QknZR6~-1?rWB^*!-%IrV1t`}Hy*el^Ld{C}|HyRF^k{L1Vj^?Tl*d3yW5 z(xVINO5fyqEAroedu=E1vG?)Ox8{EX3-|9Y4n7k8C+dj#eY4o8Z~MPYtG)kL@b~{+ zH?D{Otva$+UaQR|Gd^?1mk-C4>wfYp*S#w5ZaizgPxVp!{>4A+c#H1+$|$_*FXgrO z+xM=wY+IAEkJ#^3ePqktw!euTk>PcxJv{f&I{YYWvh|}Q6VGnkWpi@>pKI;OKl*zt zPd_~Oq##qTKiX=Go85f3LkxD$9!RD{|hEc(>g{xi?%p8339J?Z}1pIr-!OIXis z{+;}L+3V!9+NY22{BbFw`m}A~f|rY1)#mjvTbmu*b#Ghn`KLGCyPwD1`+m$?zE@b6 zc|vFUrR24};cF!NnV)V_Q&i|duli%k~ z7hPZI`c(IU-`n|e52h?#c;w07@HIVG!{g0tWnOKqdVMCj_|wO=hGn@=OZD<4-_5DZ z`}9#i%3ALCJk4WD!sl%S9*2v4w|#wn@66K$%fA=js`jqCw|9Q^+pR~t-5=fCc+YT0 zWweZ5eX76QF7>=UJ8sl{UH11f^SpHVzK>rkZv;*0dwlZmz2+E7ql z)jb`5d8*CIFOjzF)$28DpZQgJZx6p0%+sz{pI>NQ>vsP9f5(mQv)}38yY!a*oz6c0 z@8|PRPqSOCe%J3dua>P_mG_R__CY*tv-(_Z85kOto&$Fqwm&#L_cHtAzVNj@8}Cl_ zj<~exkED*anagEYneSYj+f<6vs@O=6~&f*7TdRDr#)P^!J+_ zlV9!MqZO_Zd$0P;7pczd)IOVtyLR?yt|aREQES zm(dhY6aJlC{7bg>>aiQ;$EMm&oga9)P|oS{fkkmrlVW!6t=PReEBwo^Pw~A!rsr$# zTfhGQOMaI>Pd5wl*X`MHNiBA-vE`1Nq93R3m;2bfUv%TA?cLjhf6M1<*?oRy|0Qqv z>c)M$w%6T{cYX6pw*UY0*rS{D|4!|wzkK`Kq;mH^A14d0zbE$bef94Z-<$XT{d3)3 zW8U{4%17u~y-Id@8H zDf?$nisHs4N)-C1+@FYo%NC)aLFEBc#S_bzK%o!jz9 z2hGL$tHZ(#&KB+{PC9;T8<{?KhT7LQ)% z>$X|Wy;$G-LWgMc_e;nduny=-h0XURav(n}0lv4&IF++SubeYFcTodat!9pWqRdU!lESN+=O=%ul{P5Z8`zhQCs z!NYS`J}fZHnQ0g@<1DmU7JiTI?Wd17!fod~6A@vZTKKdj!Tu@Z0h;tx%Usxxc<p+Qn?(r0<|{ON2q|L<2T zt*fa&!hhHHbM8&Oo$8N5zl-H>{nl?TcK`p0+M}X&FLQ5RDp2Pw-nZ&|ZRw8B{#Cc% z{fjU>;+g;do3Zus-)rr=K`ny+8@JE@BJ+PwxyAqO_hKUc&1mube_;Jx+FJ@Sw4G|IbErsB8k|AHqaKYvzeuj{ntJNq># zjKL!MUtiKYNY{zm{Enq)b^gk_AO9PUm6_D9_&a5@#5W-uo|C&;7J<#!=DGo0d}VeE4(O{;WIm z(L%+Sx!ck9;&02GzaB@f-;>(-IN*r1yw18kl|MQkdChsXEwf+}n?~k>PyhE>Kl-{~ zeq&vDVd}YA-$f74ED`mUdKa^Ctpro-k8_W*<~kmp`~JuKqX`kE3^we)c@PY_?qAk7u{LwpUgkZ|_dc+zh>=W6~nGtKDz^1Mpw*8GoV zvzDLUZyx^T-@4a-D>)gS&)&b-LK@O&XO({EQ}^xk*NvOsAND`8FZwgXi>@8tR~8j6 z-YoHM$@cc$yLRNS`k4FZ7LVbbnLnpxAGWxDc<#1Dx6Pl8?pVg|bxIGtQ@A3=u2d(@ ze8MbHDw_KE;&+R%zQf1d(+Vvk{4XC^6rahl>3hbJ^8LDxuD;j4_f98Pc5_npkyX2^ z{g-|}?0JfC`!GwQ|g_Kxb=1M@2~51s;l}7uh07=^uIH>@YBz4YOmJk@*SSrd9U`< z`JYYT9@3{09kc24^NSy^dwwcaSMIjeXRlesCU-jjN_RiMnf>-}ZQT7Ug)^RBO|S)* zGZ&P3lkV-)e{{P}`O($eU8@T(?J6ntlRENeweHdM2TRVc@jN`GM$~^-zSN7F_qVJ4 zx0WBszbXCE_T}&8T?Y%aKJO5&s?7Nzy>qYw~+P!{0 z`(99tsYztMy!oHHBmH-z3*WvM`R#XJ@vZUO-?4j>|DUhAy|nb@&gBn-q&)u0@0Z;8 zx!~ikOWO|D-Sgv0h&aA|YCdE2*J~D0db1y1VKy}TnO^zT-iD!}`279AIl9pDh^Jib zKlhTv|Eymk?o{Xg62BI*U%U2P-VWjAtNV@r1T1>5@YqAnXYHH)`<-Ve-|bo5dhTk0 z`lAomLXYlZoc>;ZU-8=p?WMnFye&}Qzx2S9+OVTP{=NF`7H+5h;?up?l^bJf+MXvp zm(HGlACwe>|EsSG-@l#vjPnAMJKEyBt2053G@HEp;d^RtnfHm$&z!vO#!5cNO9HCA z+3W7a@x))cy>{tApIz_I^83fvPR?8I7$9{jrnLTu^>_E2ABU6v-j(mX@#Xl@+iUlh zxop`Iv}12hX0v?xZ~yJz z>HoL6E9vcBE+O&v`Tfox89(m?XPzj&S$nkDFaPPcZT6b$e5A?_FdNJ{6}otB_)Wj~ zySrq2)0yt{kg2s{r&DW5BD7gcWRv{Y2TCo_{{cbf?6!=O%f`XeD6P3D&O&= z^X<{v`o!`hf7`pZ$9msh%6NXAvY`EsXusrC&y>BnqUD}qJ zF`3QaW!K#NI`1Qg<@N8e>G5Xh-4ObC@Lt`g$IEl$zs~D8TW|DN=JIpKzq75C{+(v; zZVag6dujRf_mk&;7A_XN{=VnOx3fnloGf6U5$>PYYx;El=eOZWen;*_cjZ1aTEpI8 z`LSH&^8s+Hx%^(c_0!*M{`Cp}1m^8jzc%fEQuVdb@TRE*k8M~Z20>2=rZ>-x`H%XQTLmg}8czP^8T zRex#d-w2y=DduV!`kC?y1RrWAk|KnKZuOOQEjexi@5Pf48|+?PvXH9dGy% z*USXN)7u4SFZ{GEwU%9a`TV}U+hfD{^1_bIx-Hiy?3*7yechYL`S#T-uXlxRd^c_F z#?9qC-{0O8d;B{5=%;1(yHCA8yWrv38}F9Q|NP~b@jw2nSANGYZ@j$CBCh`4Pve$# zcct9hYrFS%Eo*e$Yx2UwdE&|KmaErhYvoR6)2%!(X`esyT*=#C^5kE>HRjFavo(&D z+Op*B>f6gMZF`w}>(j0;F_$hZ-<4a{Q?h%Pj&1vwJC`@rowv1}|7x4>Z4*|5o|pUe zZ~v3ikhu|(bNSDAErv7p_3no9kP7#C@ebpUSN`o-Y~yKP$$G5Vx#q;5mz@?>|8K3- zHdlMUyUgaBt?B1|>hkwx!k^~qyv$LCeu-s+v5|2OpWqlq`_yrqhkiXn1Y!rV3l}*xia{b~pc2^}XM-@6Pp^Yxn(ZG-hLd zsWs(KmHy7BjmB(p#@FtDE10upo&DdEH+LqmD{3d-{mbjTWy{%!)Ci-+-jA2vtz|Q6 zwy8IGx0WaA(t&3cZ;LC{P9<;OCbLMl{^_k9$@d$M*A&+0?A!Fza{UgqcNQVPE0^7$ zo%?iZ)ZVcCsx4)6)E@nCmR@G}JpE^zY~h}7kF9sEH=40K@$}4ao=~>N)%o|t+CRUK zv0~f%c=w-E_uePYkKbH3i%m?*t|8GU_Tuf;Kkb<`Lj32L)-Et*IAe|!gxNcS|4zRw zxpl8=RM1YRr5jIv7hP8u=e_n*ZTs^7t=r?~YgbI_T>kjOy0wP;9?ps={(0u$p-WTj6`v1s2UBhi0@J9xpHb{+`(Hd2^1|$CdpG zdH;N)Vcr@0Zqe0`R`EtB#sA&PYt{F6UiPoKk|qCF1s_j(fA@9r+bi$g-&?GUmM?#6 zY4$nY+8aDte86DYx)*Ov?{sedcboA*4Jcn81n0}`0`qq=f4Oe5;lc+-p2r8?UjF~^ zSb_Svuw&1TpKfI+;QMLa^%FLA(0FutX2QaU%o1(e_b?`G{8TRT8DdEK4(9Ijo7HEx zi%G>;l`$N)*jfEIK>ggeyVLyVtnFui{^Q+J1_SATeMxq(X}E-sKmT|O`q%ENtXTN% zlA-r;z61?$5z@K2)cUp^^SVzr>%#MU7e5VRuvq>__NWbP0_4D>DQzO_9!TyhS;JG- z5NTO!@U9}XFzC&swd|)`OMfSS?n;{dboRIDrx_l|e1?}kps7Bc(DwH+p?}2Bo9A>3 zKiwob@3z?MOTV73e$?mu)QG`?|Bvj^n~+8dcyjC7XZ|BMp45M>seP04BYe@Hne3;p zZ=Vyv+)#Y|! z!yNa2eUEZr9%pD+`Zh#n$KOp6`~FDekNTXKcb#Q; zu;+8RNHL^J0?lW3SZvJq?pYga`ZL}mzTo51!pF;G3vXB&Gl((PyBmswTbjda3X_3h zs7%ayAD%lszHaBA)$$As3=M&hIJ2(&l(Of`CGV&4e?hA%dY}^#-1>VAEFb(lB);zf zmmEkrA1GaCa!z5ld8vB~GWBnA3p70rVXO28fT9*WZLZ>}JOwm74p}*Hi6a%U#K6R9 zR0||nCJ_p;OF}PN#p60AtNS1OeBNFk9I{IU&x6at>Fn0=KMsjMdOAHGyt%<`HYmJh z^?A$Us$MSrw7w1$m2QwZ3jNqsue(6|BO2a;qHyKorQn4I40jX3Be$SD%fK+C)*u{E zD*A4%yzc+Wj`^|TA77hiYkvE6-R;jUU%~nRYkqngR)bPvDWs5zV6ppsv*Z1rWgYAP zw?|$2yZGh%{SWK=D*o3#)j#nDUe+-%Bs4D7Hre+&T1)-MQm^lOcmHvfoCgk6$f63d z0I4@M$IZ>=Us)e_bfId{<@0;CzqxSmlX#j1vTY8tkDs@h`Ty;Gfx?fig698|KBsS5 zvHR~IUcvkS?+V`k(Vza$FXs2-r}}3KAk84~dXNnbb+1m%RR6gD^X&7ln!mj4kpH=G z=6>;)-*k{2$hi04R%8E1@xSV)Ye!tFE3AG0ec>mu+)NG&ZWJd-n}_&4`o3@3?Fsi5 z>GGEap&K*zsb`H9c$LoA)8GXoViO+n`GTAiv>!aCpTH>j?!pn!G9IE8T+s1*q+flv z{p!XjPzGO82dbGE4lo(riM+HGR9AWaH3BVmX<$v+v3W^0xJ3As3SQR2eWD=U^E$*m z*&BJv)#lxl|NSkedw1S_3F&ef&FOkQoyxb9KEHju*X;Pc<)>Op&)eOpUY9xhiVLcMbANlqCZ;;9bdg#Tev00riZyaUMzdvyxMZxxOWR) zeF07SeyaTQ;n$Au6Wx>V@AK-nmlfXoU-rh9RX5UpF5Os|o;zE8-s`t7B5We~>R;LJ z$alYU2CJRp!GH{)DF*8jnxL#tXI~5w!CBcFW~cr#Tm6RQ`@aiukYA+EccY0 zRoJ_Y1qs3X?!S?$UvtN??AOj4)vuTK-u5d!yv?F6rFczV)b!h1_HW<(*YMt!b=QCN z* z=ge&%zWHs^@9tFi7j8WtoBZ_GYV%{~O1_@Ay*~Z6G{|!$vycL_Qudw6-r8H*;YVNn z+O$%y_v&Epr& zHJ{p zPIgYs=W91++gm@MxYqF7Vewy9Rru!Tj}DqYQ}p?N(9g*B&dk`g zhv(LOJ(IJmG&d&bUAfs|+4(z}85lMkL2}XD?+?!f^PiFE>WPiyF^wy{d*jO|^LXLY zrym|?wXZoV**uMXzSj3ptA7{Hd_8PdY%g5+=c7qRrG?y`VuL>WdM&?m%hLId-LvHn zzc($nzUTRMgT-4n{@rNIZf92vniK9s%Ewmk56@k>@aUb{l}FFkWJ{mo$$KX1c9^$Z zZ`YoR-8-&|Pk$Z0M(dv4yH7PwCxL@*x$dTi=N257+_LYU!EOHCzL&P>nP>b>S_93m zhj`1|e$>pF_O5ErjjNq^lY3t;-}O5oe|2+V_~l(Ik3BlLa(lD4mh;T)>*jGEjW>TS z4Bh$n%)@iVg(iFV-dfkYaam0K9@g9cEdDJy4=Q06r0g(`yj&LgwKVr^*=@&J@66{z z3m~iehv!b-ef|9H3y+TUZJny<;XM1>_ia)os(ybfL$=A^w)$z7{r9$%`Lx^Sb!GvV z)8F~n$g*eswtQ?{zU-F#@yokGi@PuQc4zFEEU#RjyK3LMb(xW&`+tW${d)E7>$7gR z|IVKFoNev=erPh8`~Km%kH6Pzwn==px)Uk-I?wjA*DT{U>-ACAUw_(4Uth2F{&xBf zlKhLV#5iENlq|Ny2!*jg1AGvG{JY75a zX53EWyN&5mdK)vP-i1u#efOq4fq{WRC#gGS$K@^m_vqBGt&i8$mv`I$+e}wJEiU=b#_^hlDagm-Fo@=<3GBJGB(y#T`&rNUbDmaO8UEy-RgXEw8|%kvRRtn+pPR< z@6%s5D$b{YS159IC+slJxPSHQ)%UA;H}CmXyYKF@+}f}IuD*KxYWr*{x66N@Z4Luf zTr1Zb(r3q-NklyW|mH^om*$c_x`3>`Q2S+dMk6yOIiJoHu^sO zb*h+!fgyo2g5~hskjbxhEqi}^+SlN_c>!17uD%~W{jA&Hf87gVCg<uzG;^Q! zqkGFw9ZgTHa=08+yW?`i{D51ubjNQ<@ZbDZx`Pimj~IE zvokO(SS)t2VENm!+uyIIMqb|aYtyn>+g9tXuDhRqbH!CimG!!Yw_Hu`zRc>+4aqs~ zb9AQ9?=7~w16oQ@{57?Ccg@q8zh_lgm`(e=^Tnsv$&a_m7XDb-d2;piW%AWGUY!?Y zU}!k^;y{7=^y^=P@9*<1t^fM|x32Uuv*v4ayJ6{QzjnFb(T8iVANlljb<&@Wokcfq z&Xju>11imWYkvntKR#w7vXZ}i-8~6w_3f1=W%tS=EAQJKo*Nl{H@qr(TXW%`qo2~! zK$WdSD0`cAW#qqGTk--xYbHbYzu%rSW7fOr)1R*QeSOXqR^7Z#e|Kc1#fH}pD|cq4 zUvl|;dz$Z)?Z(>d+QHlXL)*M`zxP^*@!zwPn;p#0`*Wv*zimKH{cqdC2O&E_J4@O& zo@ldmHwp*v;Ab4bo^{Y_(Gd1Q7(sN=l+L=IaCa(*dwO-0&h;i zTO-p!B_M;20;0VDb6=aa_bzB6g|-2a>U*e9kxF25}_dmp+7S+j=Hvdv5|1a=o^~K-6KATU`ZiB1?0rw^vSWEu;`|+0r z{ZFji*`)fm>#A|R{brO9b3!uxC#V(xRllIK>PyVm2M=o`{7OC$Qojxt>W!K!* zdfh*^t)Km~`r~5zn16?Oj)S{Apn(wv2JRP+>m@Je?+;y@IdfXh``YrK+{QAXb{KT| zw9bb3D(BCfwVI_rRiEmg`T%M^K^I+b;OMz~qb4cdd-wbw6Fbh=@B5>Q+QRR=yIZO5 zNqg6&=j%*r)w*}xeI0N8*Sg^Mvrpp5-;fMqxH||}Z>v1|&+gJ-8og7k%N^AD^K|ud JS?83{1OOuf^3ebQ 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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 {N(9|I;Gb^SUSILI{^QT* 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%0Dke-p9-T@YYuE6K78y zxVk$0!rn~fb#a#MuTEvz{CZ+{Uf|2y@Ar$ouU)_Y7t{0ezK<^bu~wst?opIbC$>*GU>f{EL(@=V=1d`x z6I0z;`hT%$T)U|D=H_Ruw-Y7Dea!pWikmM_P zH<`}%9MI6F9ARJ$s8|6Q7?BO8-bQ7f0Eto_p} zx8Ix=90E=j$AcFqzlg{Zwov+U#W{D?ZqM8!YnIF2watC;GRL*p*;MH9QX4=2k}Vu* zV!vkWpTHE)?YK_#LdS8FM;m)tS|=`Ad*d0Ga_g&(E3V$GO9fZHBX&c@KCvxV?j?06)SFy8ws5npv~8@a#EbmH%NP%)=DwcRdt={H z{@FLuC%fES*c3BC>S=$A0lx?H^~3eOhI_&?H@$WB=-$-$-^yD=rSoEp@62nfF5Zml zf7hq>?I+jEpREl~WZ(R*2&+{2FFWB;N0MBjgG#&mmUzbg9ZH>7Ygu|(!cAS*ERK^? z&Xkh#o%&y(!sX^QKi+qa(U~k%u}ooQFcm?<*d4ub>aTqhA&SdJX{%V zJj|9}T;6c)5{LbfP1UPc8A$eu&dkWyeJc4tSO{_gx(I>EC9a+@U@DM6zzu;o1s;T*24s z;#TqU;w&59Rul?MQfj_>cUUT(JVMkycPbN#~`YqZ~-i0t-$-v9XA-)ITDZNjos z3qNc!fAnAK+lPC(CgxX@|6g33k)3z&