瀏覽代碼

ble_mesh: Move the button component to common_components

lly 5 年之前
父節點
當前提交
a2a952aa55
共有 27 個文件被更改,包括 12 次插入1574 次删除
  1. 2 0
      examples/bluetooth/esp_ble_mesh/ble_mesh_node/onoff_client/CMakeLists.txt
  2. 2 0
      examples/bluetooth/esp_ble_mesh/ble_mesh_node/onoff_client/Makefile
  3. 2 0
      examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/CMakeLists.txt
  4. 2 0
      examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/Makefile
  5. 0 3
      examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/components/button/CMakeLists.txt
  6. 0 21
      examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/components/button/Kconfig
  7. 0 46
      examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/components/button/README.md
  8. 0 434
      examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/components/button/button.c
  9. 0 48
      examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/components/button/button_obj.cpp
  10. 0 4
      examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/components/button/component.mk
  11. 0 231
      examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/components/button/include/iot_button.h
  12. 2 0
      examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/CMakeLists.txt
  13. 2 0
      examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/Makefile
  14. 0 3
      examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/components/button/CMakeLists.txt
  15. 0 21
      examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/components/button/Kconfig
  16. 0 46
      examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/components/button/README.md
  17. 0 434
      examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/components/button/button.c
  18. 0 48
      examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/components/button/button_obj.cpp
  19. 0 4
      examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/components/button/component.mk
  20. 0 231
      examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/components/button/include/iot_button.h
  21. 0 0
      examples/bluetooth/esp_ble_mesh/common_components/button/CMakeLists.txt
  22. 0 0
      examples/bluetooth/esp_ble_mesh/common_components/button/Kconfig
  23. 0 0
      examples/bluetooth/esp_ble_mesh/common_components/button/README.md
  24. 0 0
      examples/bluetooth/esp_ble_mesh/common_components/button/button.c
  25. 0 0
      examples/bluetooth/esp_ble_mesh/common_components/button/button_obj.cpp
  26. 0 0
      examples/bluetooth/esp_ble_mesh/common_components/button/component.mk
  27. 0 0
      examples/bluetooth/esp_ble_mesh/common_components/button/include/iot_button.h

+ 2 - 0
examples/bluetooth/esp_ble_mesh/ble_mesh_node/onoff_client/CMakeLists.txt

@@ -2,5 +2,7 @@
 # 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)
+
 include($ENV{IDF_PATH}/tools/cmake/project.cmake)
 project(onoff_client)

+ 2 - 0
examples/bluetooth/esp_ble_mesh/ble_mesh_node/onoff_client/Makefile

@@ -7,4 +7,6 @@ PROJECT_NAME := onoff_client
 
 COMPONENT_ADD_INCLUDEDIRS := components/include
 
+EXTRA_COMPONENT_DIRS := $(IDF_PATH)/examples/bluetooth/esp_ble_mesh/common_components/button
+
 include $(IDF_PATH)/make/project.mk

+ 2 - 0
examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/CMakeLists.txt

@@ -2,5 +2,7 @@
 # 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)
+
 include($ENV{IDF_PATH}/tools/cmake/project.cmake)
 project(sensor_client)

+ 2 - 0
examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/Makefile

@@ -7,4 +7,6 @@ PROJECT_NAME := sensor_client
 
 COMPONENT_ADD_INCLUDEDIRS := components/include
 
+EXTRA_COMPONENT_DIRS := $(IDF_PATH)/examples/bluetooth/esp_ble_mesh/common_components/button
+
 include $(IDF_PATH)/make/project.mk

+ 0 - 3
examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/components/button/CMakeLists.txt

@@ -1,3 +0,0 @@
-
-idf_component_register(SRCS "button.c" "button_obj.cpp"
-                    INCLUDE_DIRS  "." "include")

+ 0 - 21
examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/components/button/Kconfig

@@ -1,21 +0,0 @@
-menu "Button"
-
-    choice BUTTON_TIMER_IMPLEMENT
-        bool "Button Timer Mode"
-        default BUTTON_USE_ESP_TIMER
-        help
-            Choose a implementation of timer for button instance.
-
-        config BUTTON_USE_RTOS_TIMER
-            bool "Use FreeRTOS Timer"
-
-        config BUTTON_USE_ESP_TIMER
-            bool "Use ESP Timer"
-    endchoice
-
-    config BUTTON_IO_GLITCH_FILTER_TIME_MS
-        int "IO glitch filter timer ms (10~100)"
-        range 10 100
-        default 50
-
-endmenu

+ 0 - 46
examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/components/button/README.md

@@ -1,46 +0,0 @@
-# Component: Button
-
-* This component defines a button as a well encapsulated object.
-* A button device is defined by:
-    * GPIO number on which the button is attached.
-    * Active level which decided by peripheral hardware.
-    * Trigger mode which decides whether to call serial trigger callback during pressing
-    * Serial threshold seconds which decides that serial trigger callback will be called after how many seconds' pressing
-* A button device can provide:
-    * One push event callback
-    * One release event callback
-    * One short-time tap event callback
-    * One serial trigger event callback
-    * Several long-time press event callback
-    We can set different jitter filters for all the events.
-    Once any of the long press callback is triggered, the short tap event will not be triggered.
-    These components are based on GPIO provided by ESP-IDF and soft timer provided by FreeRTOS.
-
-* To use the button device, you need to:
-    * create a button object returned by iot_button_create().
-    * Then hook different event callbacks to the button object.
-    * To free the object, you can call iot_button_delete to delete the button object and free the used memory.
-
-* Todo: Add hardware timer mode(because sometimes soft-timer callback function is limited)
-
-### NOTE:
-> All the event callback function are implemented by FreeRTOS soft timer APIs, the callback must follow the rule:
-
-
-
-```
-  Button callback functions execute in the context of the timer service task.
-  It is therefore essential that button callback functions never attempt to block.
-  For example, a button callback function must not call vTaskDelay(), vTaskDelayUntil(), or specify a non zero block time when accessing a queue or a semaphore.
-```
-
-> In addition:
-> You can adjust the following macros within FreeRTOS to adjust the stack depth/queue length/task priority of the timer service.
-
-
-```
-#define configUSE_TIMERS //enable soft-timer
-#define configTIMER_TASK_PRIORITY // priority of the timers service task
-#define configQueue_LENGTH // length of timer command queue
-#define configTIMER_TASK_STACK_DEPTH // stack depth of the soft-timer
-```

+ 0 - 434
examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/components/button/button.c

@@ -1,434 +0,0 @@
-// Copyright 2015-2016 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 <stdio.h>
-#include "freertos/FreeRTOS.h"
-#include "freertos/task.h"
-#include "freertos/queue.h"
-#include "freertos/timers.h"
-#include "esp_log.h"
-#include "driver/gpio.h"
-#include "iot_button.h"
-#include "esp_timer.h"
-
-#define USE_ESP_TIMER   CONFIG_BUTTON_USE_ESP_TIMER
-#if USE_ESP_TIMER
-#define STOP_TIMER(tmr)   esp_timer_stop(tmr)
-#define DELETE_TIMER(tmr) esp_timer_delete(tmr)
-#else
-#define STOP_TIMER(tmr)   xTimerStop(tmr, portMAX_DELAY)
-#define DELETE_TIMER(tmr) xTimerDelete(tmr, portMAX_DELAY);
-#endif
-
-#define IOT_CHECK(tag, a, ret)  if(!(a)) {                                             \
-        ESP_LOGE(tag,"%s:%d (%s)", __FILE__, __LINE__, __FUNCTION__);      \
-        return (ret);                                                                   \
-        }
-#define ERR_ASSERT(tag, param)  IOT_CHECK(tag, (param) == ESP_OK, ESP_FAIL)
-#define POINT_ASSERT(tag, param, ret)    IOT_CHECK(tag, (param) != NULL, (ret))
-
-typedef enum {
-    BUTTON_STATE_IDLE = 0,
-    BUTTON_STATE_PUSH,
-    BUTTON_STATE_PRESSED,
-} button_status_t;
-
-typedef struct button_dev button_dev_t;
-typedef struct btn_cb button_cb_t;
-
-struct btn_cb{
-    TickType_t interval;
-    button_cb cb;
-    void* arg;
-    #if !USE_ESP_TIMER
-    TimerHandle_t tmr;
-    #else
-    esp_timer_handle_t tmr;
-    #endif
-    button_dev_t *pbtn;
-    button_cb_t *next_cb;
-};
-
-struct button_dev{
-    uint8_t io_num;
-    uint8_t active_level;
-    uint32_t serial_thres_sec;
-    button_status_t state;
-    button_cb_t tap_short_cb;
-    button_cb_t tap_psh_cb;
-    button_cb_t tap_rls_cb;
-    button_cb_t press_serial_cb;
-    button_cb_t* cb_head;
-};
-
-#define BUTTON_GLITCH_FILTER_TIME_MS   CONFIG_BUTTON_IO_GLITCH_FILTER_TIME_MS
-static const char* TAG = "button";
-
-// static void button_press_cb(xTimerHandle tmr)
-static void button_press_cb(void* tmr)
-{
-    #if !USE_ESP_TIMER
-    button_cb_t* btn_cb = (button_cb_t*) pvTimerGetTimerID(tmr);
-    #else
-    button_cb_t* btn_cb = (button_cb_t*)(tmr);
-    #endif
-
-    button_dev_t* btn = btn_cb->pbtn;
-    // low, then restart
-    if (btn->active_level == gpio_get_level(btn->io_num)) {
-        btn->state = BUTTON_STATE_PRESSED;
-        if (btn_cb->cb) {
-            btn_cb->cb(btn_cb->arg);
-        }
-    }
-}
-
-// static void button_tap_psh_cb(xTimerHandle tmr)
-static void button_tap_psh_cb(void* tmr)
-{
-    #if !USE_ESP_TIMER
-    button_cb_t* btn_cb = (button_cb_t*) pvTimerGetTimerID(tmr);
-    #else
-    button_cb_t* btn_cb = (button_cb_t*)(tmr);
-    #endif
-
-    button_dev_t* btn = btn_cb->pbtn;
-    STOP_TIMER(btn->tap_rls_cb.tmr);
-
-    int lv = gpio_get_level(btn->io_num);
-
-    if (btn->active_level == lv) {
-        // high, then key is up
-        btn->state = BUTTON_STATE_PUSH;
-        if (btn->press_serial_cb.tmr) {
-            #if !USE_ESP_TIMER
-            xTimerChangePeriod(btn->press_serial_cb.tmr, btn->serial_thres_sec*1000 / portTICK_PERIOD_MS, portMAX_DELAY);
-            xTimerReset(btn->press_serial_cb.tmr, portMAX_DELAY);
-            #else
-            esp_timer_stop(btn->press_serial_cb.tmr);
-            esp_timer_start_once(btn->press_serial_cb.tmr, btn->serial_thres_sec * 1000 * 1000);
-            #endif
-
-        }
-        if (btn->tap_psh_cb.cb) {
-            btn->tap_psh_cb.cb(btn->tap_psh_cb.arg);
-        }
-    } else {
-        // 50ms, check if this is a real key up
-        if (btn->tap_rls_cb.tmr) {
-            STOP_TIMER(btn->tap_rls_cb.tmr);
-            #if !USE_ESP_TIMER
-            xTimerReset(btn->tap_rls_cb.tmr, portMAX_DELAY);
-            #else
-            esp_timer_start_once(btn->tap_rls_cb.tmr, btn->tap_rls_cb.interval * portTICK_PERIOD_MS * 1000);
-            #endif
-        }
-    }
-}
-
-static void button_tap_rls_cb(void* tmr)
-{
-    #if !USE_ESP_TIMER
-    button_cb_t* btn_cb = (button_cb_t*) pvTimerGetTimerID(tmr);
-    #else
-    button_cb_t* btn_cb = (button_cb_t*)(tmr);
-    #endif
-    button_dev_t* btn = btn_cb->pbtn;
-    STOP_TIMER(btn->tap_rls_cb.tmr);
-
-    if (btn->active_level == gpio_get_level(btn->io_num)) {
-
-    } else {
-        // high, then key is up
-        button_cb_t *pcb = btn->cb_head;
-        while (pcb != NULL) {
-            if (pcb->tmr != NULL) {
-                STOP_TIMER(pcb->tmr);
-            }
-            pcb = pcb->next_cb;
-        }
-        if (btn->press_serial_cb.tmr && btn->press_serial_cb.tmr != NULL) {
-            STOP_TIMER(btn->press_serial_cb.tmr);
-        }
-        if (btn->tap_short_cb.cb && btn->state == BUTTON_STATE_PUSH) {
-            btn->tap_short_cb.cb(btn->tap_short_cb.arg);
-        }
-        if(btn->tap_rls_cb.cb && btn->state != BUTTON_STATE_IDLE) {
-            btn->tap_rls_cb.cb(btn->tap_rls_cb.arg);
-        }
-        btn->state = BUTTON_STATE_IDLE;
-    }
-}
-
-static void button_press_serial_cb(void* tmr)
-{
-    #if !USE_ESP_TIMER
-    button_dev_t* btn = (button_dev_t*) pvTimerGetTimerID(tmr);
-    #else
-    button_dev_t* btn = (button_dev_t*)(tmr);
-    #endif
-
-    if (btn->press_serial_cb.cb) {
-        btn->press_serial_cb.cb(btn->press_serial_cb.arg);
-    }
-    #if !USE_ESP_TIMER
-    xTimerChangePeriod(btn->press_serial_cb.tmr, btn->press_serial_cb.interval, portMAX_DELAY);
-    xTimerReset(btn->press_serial_cb.tmr, portMAX_DELAY);
-    #else
-    esp_timer_stop(btn->press_serial_cb.tmr);
-    esp_timer_start_once(btn->press_serial_cb.tmr, btn->press_serial_cb.interval * portTICK_PERIOD_MS * 1000);
-    #endif
-}
-
-static void button_gpio_isr_handler(void* arg)
-{
-    button_dev_t* btn = (button_dev_t*) arg;
-    portBASE_TYPE HPTaskAwoken = pdFALSE;
-    int level = gpio_get_level(btn->io_num);
-    if (level == btn->active_level) {
-        if (btn->tap_psh_cb.tmr) {
-            #if !USE_ESP_TIMER
-            xTimerStopFromISR(btn->tap_psh_cb.tmr, &HPTaskAwoken);
-            xTimerResetFromISR(btn->tap_psh_cb.tmr, &HPTaskAwoken);
-            #else 
-            esp_timer_stop(btn->tap_psh_cb.tmr);
-            esp_timer_start_once(btn->tap_psh_cb.tmr, btn->tap_psh_cb.interval * portTICK_PERIOD_MS * 1000);
-            #endif
-        }
-
-        button_cb_t *pcb = btn->cb_head;
-        while (pcb != NULL) {
-            if (pcb->tmr != NULL) {
-                #if !USE_ESP_TIMER
-                xTimerStopFromISR(pcb->tmr, &HPTaskAwoken);
-                xTimerResetFromISR(pcb->tmr, &HPTaskAwoken);
-                #else
-                esp_timer_stop(pcb->tmr);
-                esp_timer_start_once(pcb->tmr, pcb->interval * portTICK_PERIOD_MS * 1000);
-                #endif
-            }
-            pcb = pcb->next_cb;
-        }
-    } else {
-        // 50ms, check if this is a real key up
-        if (btn->tap_rls_cb.tmr) {
-            #if !USE_ESP_TIMER
-            xTimerStopFromISR(btn->tap_rls_cb.tmr, &HPTaskAwoken);
-            xTimerResetFromISR(btn->tap_rls_cb.tmr, &HPTaskAwoken);
-            #else
-            esp_timer_stop(btn->tap_rls_cb.tmr);
-            esp_timer_start_once(btn->tap_rls_cb.tmr, btn->tap_rls_cb.interval * portTICK_PERIOD_MS * 1000);
-            #endif
-        }
-    }
-    if(HPTaskAwoken == pdTRUE) {
-        portYIELD_FROM_ISR();
-    }
-}
-
-#if !USE_ESP_TIMER
-static void button_free_tmr(xTimerHandle* tmr)
-#else
-static void button_free_tmr(esp_timer_handle_t *tmr)
-#endif
-{
-    if (tmr && *tmr) {
-        STOP_TIMER(*tmr);
-        DELETE_TIMER(*tmr);
-        *tmr = NULL;
-    }
-}
-
-esp_err_t iot_button_delete(button_handle_t btn_handle)
-{
-    POINT_ASSERT(TAG, btn_handle, ESP_ERR_INVALID_ARG);
-    button_dev_t* btn = (button_dev_t*) btn_handle;
-    gpio_set_intr_type(btn->io_num, GPIO_INTR_DISABLE);
-    gpio_isr_handler_remove(btn->io_num);
-
-    button_free_tmr(&btn->tap_rls_cb.tmr);
-    button_free_tmr(&btn->tap_psh_cb.tmr);
-    button_free_tmr(&btn->tap_short_cb.tmr);
-    button_free_tmr(&btn->press_serial_cb.tmr);
-
-    button_cb_t *pcb = btn->cb_head;
-    while (pcb != NULL) {
-        button_cb_t *cb_next = pcb->next_cb;
-        button_free_tmr(&pcb->tmr);
-        free(pcb);
-        pcb = cb_next;
-    }
-    free(btn);
-    return ESP_OK;
-}
-
-button_handle_t iot_button_create(gpio_num_t gpio_num, button_active_t active_level)
-{
-    #if USE_ESP_TIMER
-    ets_printf("use esp timer !!!\n");
-    esp_timer_init();
-    #endif
-
-    IOT_CHECK(TAG, gpio_num < GPIO_NUM_MAX, NULL);
-    button_dev_t* btn = (button_dev_t*) calloc(1, sizeof(button_dev_t));
-    POINT_ASSERT(TAG, btn, NULL);
-    btn->active_level = active_level;
-    btn->io_num = gpio_num;
-    btn->state = BUTTON_STATE_IDLE;
-    btn->tap_rls_cb.arg = NULL;
-    btn->tap_rls_cb.cb = NULL;
-    btn->tap_rls_cb.interval = BUTTON_GLITCH_FILTER_TIME_MS / portTICK_PERIOD_MS;
-    btn->tap_rls_cb.pbtn = btn;
-    #if !USE_ESP_TIMER
-    btn->tap_rls_cb.tmr = xTimerCreate("btn_rls_tmr", btn->tap_rls_cb.interval, pdFALSE,
-            &btn->tap_rls_cb, button_tap_rls_cb);
-    #else
-    esp_timer_create_args_t tmr_param_rls;
-    tmr_param_rls.arg = &btn->tap_rls_cb;
-    tmr_param_rls.callback = button_tap_rls_cb;
-    tmr_param_rls.dispatch_method = ESP_TIMER_TASK;
-    tmr_param_rls.name = "btn_rls_tmr";
-    esp_timer_create(&tmr_param_rls, &btn->tap_rls_cb.tmr);
-    #endif
-
-    btn->tap_psh_cb.arg = NULL;
-    btn->tap_psh_cb.cb = NULL;
-    btn->tap_psh_cb.interval = BUTTON_GLITCH_FILTER_TIME_MS / portTICK_PERIOD_MS;
-    btn->tap_psh_cb.pbtn = btn;
-    #if !USE_ESP_TIMER
-    btn->tap_psh_cb.tmr = xTimerCreate("btn_psh_tmr", btn->tap_psh_cb.interval, pdFALSE,
-            &btn->tap_psh_cb, button_tap_psh_cb);
-    #else
-    esp_timer_create_args_t tmr_param_psh;
-    tmr_param_psh.arg = &btn->tap_psh_cb;
-    tmr_param_psh.callback = button_tap_psh_cb;
-    tmr_param_psh.dispatch_method = ESP_TIMER_TASK;
-    tmr_param_psh.name = "btn_psh_tmr";
-    esp_timer_create(&tmr_param_psh, &btn->tap_psh_cb.tmr);
-    #endif
-    gpio_install_isr_service(0);
-    gpio_config_t gpio_conf;
-    gpio_conf.intr_type = GPIO_INTR_ANYEDGE;
-    gpio_conf.mode = GPIO_MODE_INPUT;
-    gpio_conf.pin_bit_mask = (1ULL << gpio_num);
-    gpio_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
-    gpio_conf.pull_up_en = GPIO_PULLUP_ENABLE;
-    gpio_config(&gpio_conf);
-    gpio_isr_handler_add(gpio_num, button_gpio_isr_handler, btn);
-    return (button_handle_t) btn;
-}
-
-esp_err_t iot_button_rm_cb(button_handle_t btn_handle, button_cb_type_t type)
-{
-    button_dev_t* btn = (button_dev_t*) btn_handle;
-    button_cb_t* btn_cb = NULL;
-    if (type == BUTTON_CB_PUSH) {
-        btn_cb = &btn->tap_psh_cb;
-    } else if (type == BUTTON_CB_RELEASE) {
-        btn_cb = &btn->tap_rls_cb;
-    } else if (type == BUTTON_CB_TAP) {
-        btn_cb = &btn->tap_short_cb;
-    } else if (type == BUTTON_CB_SERIAL) {
-        btn_cb = &btn->press_serial_cb;
-    }
-    btn_cb->cb = NULL;
-    btn_cb->arg = NULL;
-    btn_cb->pbtn = btn;
-    button_free_tmr(&btn_cb->tmr);
-    return ESP_OK;
-}
-
-esp_err_t iot_button_set_serial_cb(button_handle_t btn_handle, uint32_t start_after_sec, TickType_t interval_tick, button_cb cb, void* arg)
-{
-    button_dev_t* btn = (button_dev_t*) btn_handle;
-    btn->serial_thres_sec = start_after_sec;
-
-    if (btn->press_serial_cb.tmr == NULL) {
-        #if !USE_ESP_TIMER
-        btn->press_serial_cb.tmr = xTimerCreate("btn_serial_tmr", btn->serial_thres_sec*1000 / portTICK_PERIOD_MS,
-                            pdFALSE, btn, button_press_serial_cb);
-        #else
-        esp_timer_create_args_t tmr_param_ser;
-        tmr_param_ser.arg = btn;
-        tmr_param_ser.callback = button_press_serial_cb;
-        tmr_param_ser.dispatch_method = ESP_TIMER_TASK;
-        tmr_param_ser.name = "btn_serial_tmr";
-        esp_timer_create(&tmr_param_ser, &btn->press_serial_cb.tmr);
-        #endif
-    }
-    btn->press_serial_cb.arg = arg;
-    btn->press_serial_cb.cb = cb;
-    btn->press_serial_cb.interval = interval_tick;
-    btn->press_serial_cb.pbtn = btn;
-    #if !USE_ESP_TIMER
-    xTimerChangePeriod(btn->press_serial_cb.tmr, btn->serial_thres_sec*1000 / portTICK_PERIOD_MS, portMAX_DELAY);
-    #endif
-    return ESP_OK;
-}
-
-esp_err_t iot_button_set_evt_cb(button_handle_t btn_handle, button_cb_type_t type, button_cb cb, void* arg)
-{
-    POINT_ASSERT(TAG, btn_handle, ESP_ERR_INVALID_ARG);
-    button_dev_t* btn = (button_dev_t*) btn_handle;
-    if (type == BUTTON_CB_PUSH) {
-        btn->tap_psh_cb.arg = arg;
-        btn->tap_psh_cb.cb = cb;
-        btn->tap_psh_cb.interval = BUTTON_GLITCH_FILTER_TIME_MS / portTICK_RATE_MS;
-        btn->tap_psh_cb.pbtn = btn;
-        #if !USE_ESP_TIMER
-        xTimerChangePeriod(btn->tap_psh_cb.tmr, btn->tap_psh_cb.interval, portMAX_DELAY);
-        #endif
-    } else if (type == BUTTON_CB_RELEASE) {
-        btn->tap_rls_cb.arg = arg;
-        btn->tap_rls_cb.cb = cb;
-        btn->tap_rls_cb.interval = BUTTON_GLITCH_FILTER_TIME_MS / portTICK_RATE_MS;
-        btn->tap_rls_cb.pbtn = btn;
-        #if !USE_ESP_TIMER
-        xTimerChangePeriod(btn->tap_rls_cb.tmr, btn->tap_psh_cb.interval, portMAX_DELAY);
-        #endif
-    } else if (type == BUTTON_CB_TAP) {
-        btn->tap_short_cb.arg = arg;
-        btn->tap_short_cb.cb = cb;
-        btn->tap_short_cb.interval = BUTTON_GLITCH_FILTER_TIME_MS / portTICK_RATE_MS;
-        btn->tap_short_cb.pbtn = btn;
-    } else if (type == BUTTON_CB_SERIAL) {
-        iot_button_set_serial_cb(btn_handle, 1, 1000 / portTICK_RATE_MS, cb, arg);
-    }
-    return ESP_OK;
-}
-
-esp_err_t iot_button_add_custom_cb(button_handle_t btn_handle, uint32_t press_sec, button_cb cb, void* arg)
-{
-    POINT_ASSERT(TAG, btn_handle, ESP_ERR_INVALID_ARG);
-    IOT_CHECK(TAG, press_sec != 0, ESP_ERR_INVALID_ARG);
-    button_dev_t* btn = (button_dev_t*) btn_handle;
-    button_cb_t* cb_new = (button_cb_t*) calloc(1, sizeof(button_cb_t));
-    POINT_ASSERT(TAG, cb_new, ESP_FAIL);
-    cb_new->arg = arg;
-    cb_new->cb = cb;
-    cb_new->interval = press_sec * 1000 / portTICK_PERIOD_MS;
-    cb_new->pbtn = btn;
-    #if !USE_ESP_TIMER
-    cb_new->tmr = xTimerCreate("btn_press_tmr", cb_new->interval, pdFALSE, cb_new, button_press_cb);
-    #else
-    esp_timer_create_args_t tmr_param_cus;
-    tmr_param_cus.arg = cb_new;
-    tmr_param_cus.callback = button_press_cb;
-    tmr_param_cus.dispatch_method = ESP_TIMER_TASK;
-    tmr_param_cus.name = "btn_press_custom_tmr";
-    esp_timer_create(&tmr_param_cus, &cb_new->tmr);
-    #endif
-    cb_new->next_cb = btn->cb_head;
-    btn->cb_head = cb_new;
-    return ESP_OK;
-}

+ 0 - 48
examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/components/button/button_obj.cpp

@@ -1,48 +0,0 @@
-// Copyright 2015-2016 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 "freertos/FreeRTOS.h"
-#include "freertos/task.h"
-#include "esp_system.h"
-#include "iot_button.h"
-
-CButton::CButton(gpio_num_t gpio_num, button_active_t active_level)
-{
-    m_btn_handle = iot_button_create(gpio_num, active_level);
-}
-
-CButton::~CButton()
-{
-    iot_button_delete(m_btn_handle);
-    m_btn_handle = NULL;
-}
-
-esp_err_t CButton::set_evt_cb(button_cb_type_t type, button_cb cb, void* arg)
-{
-    return iot_button_set_evt_cb(m_btn_handle, type, cb, arg);
-}
-
-esp_err_t CButton::set_serial_cb(button_cb cb, void* arg, TickType_t interval_tick, uint32_t start_after_sec)
-{
-    return iot_button_set_serial_cb(m_btn_handle, start_after_sec, interval_tick, cb, arg);
-}
-
-esp_err_t CButton::add_custom_cb(uint32_t press_sec, button_cb cb, void* arg)
-{
-    return iot_button_add_custom_cb(m_btn_handle, press_sec, cb, arg);
-}
-
-esp_err_t CButton::rm_cb(button_cb_type_t type)
-{
-    return iot_button_rm_cb(m_btn_handle, type);
-}

+ 0 - 4
examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/components/button/component.mk

@@ -1,4 +0,0 @@
-#
-# "main" pseudo-component makefile.
-#
-# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.)

+ 0 - 231
examples/bluetooth/esp_ble_mesh/ble_mesh_sensor_model/sensor_client/components/button/include/iot_button.h

@@ -1,231 +0,0 @@
-// Copyright 2015-2016 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_BUTTON_H_
-#define _IOT_BUTTON_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "driver/gpio.h"
-#include "freertos/portmacro.h"
-
-typedef void (* button_cb)(void*);
-typedef void* button_handle_t;
-
-typedef enum {
-    BUTTON_ACTIVE_HIGH = 1,    /*!<button active level: high level*/
-    BUTTON_ACTIVE_LOW = 0,     /*!<button active level: low level*/
-} button_active_t;
-
-typedef enum {
-    BUTTON_CB_PUSH = 0,   /*!<button push callback event */
-    BUTTON_CB_RELEASE,    /*!<button release callback event */
-    BUTTON_CB_TAP,        /*!<button quick tap callback event(will not trigger if there already is a "PRESS" event) */
-    BUTTON_CB_SERIAL,     /*!<button serial trigger callback event */
-} button_cb_type_t;
-
-/**
- * @brief Init button functions
- *
- * @param gpio_num GPIO index of the pin that the button uses
- * @param active_level button hardware active level.
- *        For "BUTTON_ACTIVE_LOW" it means when the button pressed, the GPIO will read low level.
- *
- * @return A button_handle_t handle to the created button object, or NULL in case of error.
- */
-button_handle_t iot_button_create(gpio_num_t gpio_num, button_active_t active_level);
-
-/**
- * @brief Register a callback function for a serial trigger event.
- *
- * @param btn_handle handle of the button object
- * @start_after_sec define the time after which to start serial trigger action
- * @interval_tick serial trigger interval
- * @cb callback function for "TAP" action.
- * @arg Parameter for callback function
- * @note
- *        Button callback functions execute in the context of the timer service task.
- *        It is therefore essential that button callback functions never attempt to block.
- *        For example, a button callback function must not call vTaskDelay(), vTaskDelayUntil(),
- *        or specify a non zero block time when accessing a queue or a semaphore.
- * @return
- *     - ESP_OK Success
- *     - ESP_FAIL Parameter error
- */
-esp_err_t iot_button_set_serial_cb(button_handle_t btn_handle, uint32_t start_after_sec, TickType_t interval_tick, button_cb cb, void* arg);
-
-/**
- * @brief Register a callback function for a button_cb_type_t action.
- *
- * @param btn_handle handle of the button object
- * @param type callback function type
- * @param cb callback function for "TAP" action.
- * @param arg Parameter for callback function
- * @note
- *        Button callback functions execute in the context of the timer service task.
- *        It is therefore essential that button callback functions never attempt to block.
- *        For example, a button callback function must not call vTaskDelay(), vTaskDelayUntil(),
- *        or specify a non zero block time when accessing a queue or a semaphore.
- * @return
- *     - ESP_OK Success
- *     - ESP_FAIL Parameter error
- */
-esp_err_t iot_button_set_evt_cb(button_handle_t btn_handle, button_cb_type_t type, button_cb cb, void* arg);
-
-/**
- * @brief
- *
- * @param btn_handle handle of the button object
- * @param press_sec the callback function would be called if you press the button for a specified period of time
- * @param cb callback function for "PRESS" action.
- * @param arg Parameter for callback function
- *
- * @note
- *        Button callback functions execute in the context of the timer service task.
- *        It is therefore essential that button callback functions never attempt to block.
- *        For example, a button callback function must not call vTaskDelay(), vTaskDelayUntil(),
- *        or specify a non zero block time when accessing a queue or a semaphore.
- * @return
- *     - ESP_OK Success
- *     - ESP_FAIL Parameter error
- */
-esp_err_t iot_button_add_custom_cb(button_handle_t btn_handle, uint32_t press_sec, button_cb cb, void* arg);
-
-/**
- * @brief Delete button object and free memory
- * @param btn_handle handle of the button object
- *
- * @return
- *     - ESP_OK Success
- *     - ESP_FAIL Parameter error
- */
-esp_err_t iot_button_delete(button_handle_t btn_handle);
-
-/**
- * @brief Remove callback
- *
- * @param btn_handle The handle of the button object
- * @param type callback function event type
- *
- * @return
- *     - ESP_OK Success
- */
-esp_err_t iot_button_rm_cb(button_handle_t btn_handle, button_cb_type_t type);
-
-#ifdef __cplusplus
-}
-#endif
-
-#ifdef __cplusplus
-
-/**
- * class of button
- * simple usage:
- * CButton* btn = new CButton(BUTTON_IO_NUM, BUTTON_ACTIVE_LEVEL, BUTTON_SERIAL_TRIGGER, 3);
- * btn->add_cb(BUTTON_CB_PUSH, button_tap_cb, (void*) push, 50 / portTICK_PERIOD_MS);
- * btn->add_custom_cb(5, button_press_5s_cb, NULL);
- * ......
- * delete btn;
- */
-class CButton
-{
-private:
-    button_handle_t m_btn_handle;
-
-    /**
-     * prevent copy constructing
-     */
-    CButton(const CButton&);
-    CButton& operator = (const CButton&);
-public:
-
-    /**
-     * @brief constructor of CButton
-     * 
-     * @param gpio_num GPIO index of the pin that the button uses
-     * @param active_level button hardware active level.
-     *        For "BUTTON_ACTIVE_LOW" it means when the button pressed, the GPIO will read low level.
-     */
-    CButton(gpio_num_t gpio_num, button_active_t active_level = BUTTON_ACTIVE_LOW);
-    
-    ~CButton();
-
-    /**
-     * @brief Register a callback function for a button_cb_type_t action.
-     *
-     * @param type callback function type
-     * @param cb callback function for "TAP" action.
-     * @param arg Parameter for callback function
-     * @note
-     *        Button callback functions execute in the context of the timer service task.
-     *        It is therefore essential that button callback functions never attempt to block.
-     *        For example, a button callback function must not call vTaskDelay(), vTaskDelayUntil(),
-     *        or specify a non zero block time when accessing a queue or a semaphore.
-     * @return
-     *     - ESP_OK Success
-     *     - ESP_FAIL Parameter error
-     */
-    esp_err_t set_evt_cb(button_cb_type_t type, button_cb cb, void* arg);
-
-    /**
-     * @brief Register a callback function for a serial trigger event.
-     *
-     * @param btn_handle handle of the button object
-     * @start_after_sec define the time after which to start serial trigger action
-     * @interval_tick serial trigger interval
-     * @cb callback function for "TAP" action.
-     * @arg Parameter for callback function
-     * @note
-     *        Button callback functions execute in the context of the timer service task.
-     *        It is therefore essential that button callback functions never attempt to block.
-     *        For example, a button callback function must not call vTaskDelay(), vTaskDelayUntil(),
-     *        or specify a non zero block time when accessing a queue or a semaphore.
-     * @return
-     *     - ESP_OK Success
-     *     - ESP_FAIL Parameter error
-     */
-    esp_err_t set_serial_cb(button_cb cb, void* arg, TickType_t interval_tick, uint32_t start_after_sec);
-
-    /**
-     * @brief
-     *
-     * @param press_sec the callback function would be called if you press the button for a specified period of time
-     * @param cb callback function for "PRESS" action.
-     * @param arg Parameter for callback function
-     *
-     * @note
-     *        Button callback functions execute in the context of the timer service task.
-     *        It is therefore essential that button callback functions never attempt to block.
-     *        For example, a button callback function must not call vTaskDelay(), vTaskDelayUntil(),
-     *        or specify a non zero block time when accessing a queue or a semaphore.
-     * @return
-     *     - ESP_OK Success
-     *     - ESP_FAIL Parameter error
-     */
-    esp_err_t add_custom_cb(uint32_t press_sec, button_cb cb, void* arg);
-
-    /**
-     * @brief Remove callback
-     *
-     * @param type callback function event type
-     *
-     * @return
-     *     - ESP_OK Success
-     */
-    esp_err_t rm_cb(button_cb_type_t type);
-};
-#endif
-
-#endif

+ 2 - 0
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/CMakeLists.txt

@@ -2,5 +2,7 @@
 # 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)
+
 include($ENV{IDF_PATH}/tools/cmake/project.cmake)
 project(vendor_client)

+ 2 - 0
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/Makefile

@@ -7,4 +7,6 @@ PROJECT_NAME := vendor_client
 
 COMPONENT_ADD_INCLUDEDIRS := components/include
 
+EXTRA_COMPONENT_DIRS := $(IDF_PATH)/examples/bluetooth/esp_ble_mesh/common_components/button
+
 include $(IDF_PATH)/make/project.mk

+ 0 - 3
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/components/button/CMakeLists.txt

@@ -1,3 +0,0 @@
-
-idf_component_register(SRCS "button.c" "button_obj.cpp"
-                    INCLUDE_DIRS  "." "include")

+ 0 - 21
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/components/button/Kconfig

@@ -1,21 +0,0 @@
-menu "Button"
-
-    choice BUTTON_TIMER_IMPLEMENT
-        bool "Button Timer Mode"
-        default BUTTON_USE_ESP_TIMER
-        help
-            Choose a implementation of timer for button instance.
-
-        config BUTTON_USE_RTOS_TIMER
-            bool "Use FreeRTOS Timer"
-
-        config BUTTON_USE_ESP_TIMER
-            bool "Use ESP Timer"
-    endchoice
-
-    config BUTTON_IO_GLITCH_FILTER_TIME_MS
-        int "IO glitch filter timer ms (10~100)"
-        range 10 100
-        default 50
-
-endmenu

+ 0 - 46
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/components/button/README.md

@@ -1,46 +0,0 @@
-# Component: Button
-
-* This component defines a button as a well encapsulated object.
-* A button device is defined by:
-    * GPIO number on which the button is attached.
-    * Active level which decided by peripheral hardware.
-    * Trigger mode which decides whether to call serial trigger callback during pressing
-    * Serial threshold seconds which decides that serial trigger callback will be called after how many seconds' pressing
-* A button device can provide:
-    * One push event callback
-    * One release event callback
-    * One short-time tap event callback
-    * One serial trigger event callback
-    * Several long-time press event callback
-    We can set different jitter filters for all the events.
-    Once any of the long press callback is triggered, the short tap event will not be triggered.
-    These components are based on GPIO provided by ESP-IDF and soft timer provided by FreeRTOS.
-
-* To use the button device, you need to:
-    * create a button object returned by iot_button_create().
-    * Then hook different event callbacks to the button object.
-    * To free the object, you can call iot_button_delete to delete the button object and free the used memory.
-
-* Todo: Add hardware timer mode(because sometimes soft-timer callback function is limited)
-
-### NOTE:
-> All the event callback function are implemented by FreeRTOS soft timer APIs, the callback must follow the rule:
-
-
-
-```
-  Button callback functions execute in the context of the timer service task.
-  It is therefore essential that button callback functions never attempt to block.
-  For example, a button callback function must not call vTaskDelay(), vTaskDelayUntil(), or specify a non zero block time when accessing a queue or a semaphore.
-```
-
-> In addition:
-> You can adjust the following macros within FreeRTOS to adjust the stack depth/queue length/task priority of the timer service.
-
-
-```
-#define configUSE_TIMERS //enable soft-timer
-#define configTIMER_TASK_PRIORITY // priority of the timers service task
-#define configQueue_LENGTH // length of timer command queue
-#define configTIMER_TASK_STACK_DEPTH // stack depth of the soft-timer
-```

+ 0 - 434
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/components/button/button.c

@@ -1,434 +0,0 @@
-// Copyright 2015-2016 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 <stdio.h>
-#include "freertos/FreeRTOS.h"
-#include "freertos/task.h"
-#include "freertos/queue.h"
-#include "freertos/timers.h"
-#include "esp_log.h"
-#include "driver/gpio.h"
-#include "iot_button.h"
-#include "esp_timer.h"
-
-#define USE_ESP_TIMER   CONFIG_BUTTON_USE_ESP_TIMER
-#if USE_ESP_TIMER
-#define STOP_TIMER(tmr)   esp_timer_stop(tmr)
-#define DELETE_TIMER(tmr) esp_timer_delete(tmr)
-#else
-#define STOP_TIMER(tmr)   xTimerStop(tmr, portMAX_DELAY)
-#define DELETE_TIMER(tmr) xTimerDelete(tmr, portMAX_DELAY);
-#endif
-
-#define IOT_CHECK(tag, a, ret)  if(!(a)) {                                             \
-        ESP_LOGE(tag,"%s:%d (%s)", __FILE__, __LINE__, __FUNCTION__);      \
-        return (ret);                                                                   \
-        }
-#define ERR_ASSERT(tag, param)  IOT_CHECK(tag, (param) == ESP_OK, ESP_FAIL)
-#define POINT_ASSERT(tag, param, ret)    IOT_CHECK(tag, (param) != NULL, (ret))
-
-typedef enum {
-    BUTTON_STATE_IDLE = 0,
-    BUTTON_STATE_PUSH,
-    BUTTON_STATE_PRESSED,
-} button_status_t;
-
-typedef struct button_dev button_dev_t;
-typedef struct btn_cb button_cb_t;
-
-struct btn_cb{
-    TickType_t interval;
-    button_cb cb;
-    void* arg;
-    #if !USE_ESP_TIMER
-    TimerHandle_t tmr;
-    #else
-    esp_timer_handle_t tmr;
-    #endif
-    button_dev_t *pbtn;
-    button_cb_t *next_cb;
-};
-
-struct button_dev{
-    uint8_t io_num;
-    uint8_t active_level;
-    uint32_t serial_thres_sec;
-    button_status_t state;
-    button_cb_t tap_short_cb;
-    button_cb_t tap_psh_cb;
-    button_cb_t tap_rls_cb;
-    button_cb_t press_serial_cb;
-    button_cb_t* cb_head;
-};
-
-#define BUTTON_GLITCH_FILTER_TIME_MS   CONFIG_BUTTON_IO_GLITCH_FILTER_TIME_MS
-static const char* TAG = "button";
-
-// static void button_press_cb(xTimerHandle tmr)
-static void button_press_cb(void* tmr)
-{
-    #if !USE_ESP_TIMER
-    button_cb_t* btn_cb = (button_cb_t*) pvTimerGetTimerID(tmr);
-    #else
-    button_cb_t* btn_cb = (button_cb_t*)(tmr);
-    #endif
-
-    button_dev_t* btn = btn_cb->pbtn;
-    // low, then restart
-    if (btn->active_level == gpio_get_level(btn->io_num)) {
-        btn->state = BUTTON_STATE_PRESSED;
-        if (btn_cb->cb) {
-            btn_cb->cb(btn_cb->arg);
-        }
-    }
-}
-
-// static void button_tap_psh_cb(xTimerHandle tmr)
-static void button_tap_psh_cb(void* tmr)
-{
-    #if !USE_ESP_TIMER
-    button_cb_t* btn_cb = (button_cb_t*) pvTimerGetTimerID(tmr);
-    #else
-    button_cb_t* btn_cb = (button_cb_t*)(tmr);
-    #endif
-
-    button_dev_t* btn = btn_cb->pbtn;
-    STOP_TIMER(btn->tap_rls_cb.tmr);
-
-    int lv = gpio_get_level(btn->io_num);
-
-    if (btn->active_level == lv) {
-        // high, then key is up
-        btn->state = BUTTON_STATE_PUSH;
-        if (btn->press_serial_cb.tmr) {
-            #if !USE_ESP_TIMER
-            xTimerChangePeriod(btn->press_serial_cb.tmr, btn->serial_thres_sec*1000 / portTICK_PERIOD_MS, portMAX_DELAY);
-            xTimerReset(btn->press_serial_cb.tmr, portMAX_DELAY);
-            #else
-            esp_timer_stop(btn->press_serial_cb.tmr);
-            esp_timer_start_once(btn->press_serial_cb.tmr, btn->serial_thres_sec * 1000 * 1000);
-            #endif
-
-        }
-        if (btn->tap_psh_cb.cb) {
-            btn->tap_psh_cb.cb(btn->tap_psh_cb.arg);
-        }
-    } else {
-        // 50ms, check if this is a real key up
-        if (btn->tap_rls_cb.tmr) {
-            STOP_TIMER(btn->tap_rls_cb.tmr);
-            #if !USE_ESP_TIMER
-            xTimerReset(btn->tap_rls_cb.tmr, portMAX_DELAY);
-            #else
-            esp_timer_start_once(btn->tap_rls_cb.tmr, btn->tap_rls_cb.interval * portTICK_PERIOD_MS * 1000);
-            #endif
-        }
-    }
-}
-
-static void button_tap_rls_cb(void* tmr)
-{
-    #if !USE_ESP_TIMER
-    button_cb_t* btn_cb = (button_cb_t*) pvTimerGetTimerID(tmr);
-    #else
-    button_cb_t* btn_cb = (button_cb_t*)(tmr);
-    #endif
-    button_dev_t* btn = btn_cb->pbtn;
-    STOP_TIMER(btn->tap_rls_cb.tmr);
-
-    if (btn->active_level == gpio_get_level(btn->io_num)) {
-
-    } else {
-        // high, then key is up
-        button_cb_t *pcb = btn->cb_head;
-        while (pcb != NULL) {
-            if (pcb->tmr != NULL) {
-                STOP_TIMER(pcb->tmr);
-            }
-            pcb = pcb->next_cb;
-        }
-        if (btn->press_serial_cb.tmr && btn->press_serial_cb.tmr != NULL) {
-            STOP_TIMER(btn->press_serial_cb.tmr);
-        }
-        if (btn->tap_short_cb.cb && btn->state == BUTTON_STATE_PUSH) {
-            btn->tap_short_cb.cb(btn->tap_short_cb.arg);
-        }
-        if(btn->tap_rls_cb.cb && btn->state != BUTTON_STATE_IDLE) {
-            btn->tap_rls_cb.cb(btn->tap_rls_cb.arg);
-        }
-        btn->state = BUTTON_STATE_IDLE;
-    }
-}
-
-static void button_press_serial_cb(void* tmr)
-{
-    #if !USE_ESP_TIMER
-    button_dev_t* btn = (button_dev_t*) pvTimerGetTimerID(tmr);
-    #else
-    button_dev_t* btn = (button_dev_t*)(tmr);
-    #endif
-
-    if (btn->press_serial_cb.cb) {
-        btn->press_serial_cb.cb(btn->press_serial_cb.arg);
-    }
-    #if !USE_ESP_TIMER
-    xTimerChangePeriod(btn->press_serial_cb.tmr, btn->press_serial_cb.interval, portMAX_DELAY);
-    xTimerReset(btn->press_serial_cb.tmr, portMAX_DELAY);
-    #else
-    esp_timer_stop(btn->press_serial_cb.tmr);
-    esp_timer_start_once(btn->press_serial_cb.tmr, btn->press_serial_cb.interval * portTICK_PERIOD_MS * 1000);
-    #endif
-}
-
-static void button_gpio_isr_handler(void* arg)
-{
-    button_dev_t* btn = (button_dev_t*) arg;
-    portBASE_TYPE HPTaskAwoken = pdFALSE;
-    int level = gpio_get_level(btn->io_num);
-    if (level == btn->active_level) {
-        if (btn->tap_psh_cb.tmr) {
-            #if !USE_ESP_TIMER
-            xTimerStopFromISR(btn->tap_psh_cb.tmr, &HPTaskAwoken);
-            xTimerResetFromISR(btn->tap_psh_cb.tmr, &HPTaskAwoken);
-            #else 
-            esp_timer_stop(btn->tap_psh_cb.tmr);
-            esp_timer_start_once(btn->tap_psh_cb.tmr, btn->tap_psh_cb.interval * portTICK_PERIOD_MS * 1000);
-            #endif
-        }
-
-        button_cb_t *pcb = btn->cb_head;
-        while (pcb != NULL) {
-            if (pcb->tmr != NULL) {
-                #if !USE_ESP_TIMER
-                xTimerStopFromISR(pcb->tmr, &HPTaskAwoken);
-                xTimerResetFromISR(pcb->tmr, &HPTaskAwoken);
-                #else
-                esp_timer_stop(pcb->tmr);
-                esp_timer_start_once(pcb->tmr, pcb->interval * portTICK_PERIOD_MS * 1000);
-                #endif
-            }
-            pcb = pcb->next_cb;
-        }
-    } else {
-        // 50ms, check if this is a real key up
-        if (btn->tap_rls_cb.tmr) {
-            #if !USE_ESP_TIMER
-            xTimerStopFromISR(btn->tap_rls_cb.tmr, &HPTaskAwoken);
-            xTimerResetFromISR(btn->tap_rls_cb.tmr, &HPTaskAwoken);
-            #else
-            esp_timer_stop(btn->tap_rls_cb.tmr);
-            esp_timer_start_once(btn->tap_rls_cb.tmr, btn->tap_rls_cb.interval * portTICK_PERIOD_MS * 1000);
-            #endif
-        }
-    }
-    if(HPTaskAwoken == pdTRUE) {
-        portYIELD_FROM_ISR();
-    }
-}
-
-#if !USE_ESP_TIMER
-static void button_free_tmr(xTimerHandle* tmr)
-#else
-static void button_free_tmr(esp_timer_handle_t *tmr)
-#endif
-{
-    if (tmr && *tmr) {
-        STOP_TIMER(*tmr);
-        DELETE_TIMER(*tmr);
-        *tmr = NULL;
-    }
-}
-
-esp_err_t iot_button_delete(button_handle_t btn_handle)
-{
-    POINT_ASSERT(TAG, btn_handle, ESP_ERR_INVALID_ARG);
-    button_dev_t* btn = (button_dev_t*) btn_handle;
-    gpio_set_intr_type(btn->io_num, GPIO_INTR_DISABLE);
-    gpio_isr_handler_remove(btn->io_num);
-
-    button_free_tmr(&btn->tap_rls_cb.tmr);
-    button_free_tmr(&btn->tap_psh_cb.tmr);
-    button_free_tmr(&btn->tap_short_cb.tmr);
-    button_free_tmr(&btn->press_serial_cb.tmr);
-
-    button_cb_t *pcb = btn->cb_head;
-    while (pcb != NULL) {
-        button_cb_t *cb_next = pcb->next_cb;
-        button_free_tmr(&pcb->tmr);
-        free(pcb);
-        pcb = cb_next;
-    }
-    free(btn);
-    return ESP_OK;
-}
-
-button_handle_t iot_button_create(gpio_num_t gpio_num, button_active_t active_level)
-{
-    #if USE_ESP_TIMER
-    ets_printf("use esp timer !!!\n");
-    esp_timer_init();
-    #endif
-
-    IOT_CHECK(TAG, gpio_num < GPIO_NUM_MAX, NULL);
-    button_dev_t* btn = (button_dev_t*) calloc(1, sizeof(button_dev_t));
-    POINT_ASSERT(TAG, btn, NULL);
-    btn->active_level = active_level;
-    btn->io_num = gpio_num;
-    btn->state = BUTTON_STATE_IDLE;
-    btn->tap_rls_cb.arg = NULL;
-    btn->tap_rls_cb.cb = NULL;
-    btn->tap_rls_cb.interval = BUTTON_GLITCH_FILTER_TIME_MS / portTICK_PERIOD_MS;
-    btn->tap_rls_cb.pbtn = btn;
-    #if !USE_ESP_TIMER
-    btn->tap_rls_cb.tmr = xTimerCreate("btn_rls_tmr", btn->tap_rls_cb.interval, pdFALSE,
-            &btn->tap_rls_cb, button_tap_rls_cb);
-    #else
-    esp_timer_create_args_t tmr_param_rls;
-    tmr_param_rls.arg = &btn->tap_rls_cb;
-    tmr_param_rls.callback = button_tap_rls_cb;
-    tmr_param_rls.dispatch_method = ESP_TIMER_TASK;
-    tmr_param_rls.name = "btn_rls_tmr";
-    esp_timer_create(&tmr_param_rls, &btn->tap_rls_cb.tmr);
-    #endif
-
-    btn->tap_psh_cb.arg = NULL;
-    btn->tap_psh_cb.cb = NULL;
-    btn->tap_psh_cb.interval = BUTTON_GLITCH_FILTER_TIME_MS / portTICK_PERIOD_MS;
-    btn->tap_psh_cb.pbtn = btn;
-    #if !USE_ESP_TIMER
-    btn->tap_psh_cb.tmr = xTimerCreate("btn_psh_tmr", btn->tap_psh_cb.interval, pdFALSE,
-            &btn->tap_psh_cb, button_tap_psh_cb);
-    #else
-    esp_timer_create_args_t tmr_param_psh;
-    tmr_param_psh.arg = &btn->tap_psh_cb;
-    tmr_param_psh.callback = button_tap_psh_cb;
-    tmr_param_psh.dispatch_method = ESP_TIMER_TASK;
-    tmr_param_psh.name = "btn_psh_tmr";
-    esp_timer_create(&tmr_param_psh, &btn->tap_psh_cb.tmr);
-    #endif
-    gpio_install_isr_service(0);
-    gpio_config_t gpio_conf;
-    gpio_conf.intr_type = GPIO_INTR_ANYEDGE;
-    gpio_conf.mode = GPIO_MODE_INPUT;
-    gpio_conf.pin_bit_mask = (1ULL << gpio_num);
-    gpio_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
-    gpio_conf.pull_up_en = GPIO_PULLUP_ENABLE;
-    gpio_config(&gpio_conf);
-    gpio_isr_handler_add(gpio_num, button_gpio_isr_handler, btn);
-    return (button_handle_t) btn;
-}
-
-esp_err_t iot_button_rm_cb(button_handle_t btn_handle, button_cb_type_t type)
-{
-    button_dev_t* btn = (button_dev_t*) btn_handle;
-    button_cb_t* btn_cb = NULL;
-    if (type == BUTTON_CB_PUSH) {
-        btn_cb = &btn->tap_psh_cb;
-    } else if (type == BUTTON_CB_RELEASE) {
-        btn_cb = &btn->tap_rls_cb;
-    } else if (type == BUTTON_CB_TAP) {
-        btn_cb = &btn->tap_short_cb;
-    } else if (type == BUTTON_CB_SERIAL) {
-        btn_cb = &btn->press_serial_cb;
-    }
-    btn_cb->cb = NULL;
-    btn_cb->arg = NULL;
-    btn_cb->pbtn = btn;
-    button_free_tmr(&btn_cb->tmr);
-    return ESP_OK;
-}
-
-esp_err_t iot_button_set_serial_cb(button_handle_t btn_handle, uint32_t start_after_sec, TickType_t interval_tick, button_cb cb, void* arg)
-{
-    button_dev_t* btn = (button_dev_t*) btn_handle;
-    btn->serial_thres_sec = start_after_sec;
-
-    if (btn->press_serial_cb.tmr == NULL) {
-        #if !USE_ESP_TIMER
-        btn->press_serial_cb.tmr = xTimerCreate("btn_serial_tmr", btn->serial_thres_sec*1000 / portTICK_PERIOD_MS,
-                            pdFALSE, btn, button_press_serial_cb);
-        #else
-        esp_timer_create_args_t tmr_param_ser;
-        tmr_param_ser.arg = btn;
-        tmr_param_ser.callback = button_press_serial_cb;
-        tmr_param_ser.dispatch_method = ESP_TIMER_TASK;
-        tmr_param_ser.name = "btn_serial_tmr";
-        esp_timer_create(&tmr_param_ser, &btn->press_serial_cb.tmr);
-        #endif
-    }
-    btn->press_serial_cb.arg = arg;
-    btn->press_serial_cb.cb = cb;
-    btn->press_serial_cb.interval = interval_tick;
-    btn->press_serial_cb.pbtn = btn;
-    #if !USE_ESP_TIMER
-    xTimerChangePeriod(btn->press_serial_cb.tmr, btn->serial_thres_sec*1000 / portTICK_PERIOD_MS, portMAX_DELAY);
-    #endif
-    return ESP_OK;
-}
-
-esp_err_t iot_button_set_evt_cb(button_handle_t btn_handle, button_cb_type_t type, button_cb cb, void* arg)
-{
-    POINT_ASSERT(TAG, btn_handle, ESP_ERR_INVALID_ARG);
-    button_dev_t* btn = (button_dev_t*) btn_handle;
-    if (type == BUTTON_CB_PUSH) {
-        btn->tap_psh_cb.arg = arg;
-        btn->tap_psh_cb.cb = cb;
-        btn->tap_psh_cb.interval = BUTTON_GLITCH_FILTER_TIME_MS / portTICK_RATE_MS;
-        btn->tap_psh_cb.pbtn = btn;
-        #if !USE_ESP_TIMER
-        xTimerChangePeriod(btn->tap_psh_cb.tmr, btn->tap_psh_cb.interval, portMAX_DELAY);
-        #endif
-    } else if (type == BUTTON_CB_RELEASE) {
-        btn->tap_rls_cb.arg = arg;
-        btn->tap_rls_cb.cb = cb;
-        btn->tap_rls_cb.interval = BUTTON_GLITCH_FILTER_TIME_MS / portTICK_RATE_MS;
-        btn->tap_rls_cb.pbtn = btn;
-        #if !USE_ESP_TIMER
-        xTimerChangePeriod(btn->tap_rls_cb.tmr, btn->tap_psh_cb.interval, portMAX_DELAY);
-        #endif
-    } else if (type == BUTTON_CB_TAP) {
-        btn->tap_short_cb.arg = arg;
-        btn->tap_short_cb.cb = cb;
-        btn->tap_short_cb.interval = BUTTON_GLITCH_FILTER_TIME_MS / portTICK_RATE_MS;
-        btn->tap_short_cb.pbtn = btn;
-    } else if (type == BUTTON_CB_SERIAL) {
-        iot_button_set_serial_cb(btn_handle, 1, 1000 / portTICK_RATE_MS, cb, arg);
-    }
-    return ESP_OK;
-}
-
-esp_err_t iot_button_add_custom_cb(button_handle_t btn_handle, uint32_t press_sec, button_cb cb, void* arg)
-{
-    POINT_ASSERT(TAG, btn_handle, ESP_ERR_INVALID_ARG);
-    IOT_CHECK(TAG, press_sec != 0, ESP_ERR_INVALID_ARG);
-    button_dev_t* btn = (button_dev_t*) btn_handle;
-    button_cb_t* cb_new = (button_cb_t*) calloc(1, sizeof(button_cb_t));
-    POINT_ASSERT(TAG, cb_new, ESP_FAIL);
-    cb_new->arg = arg;
-    cb_new->cb = cb;
-    cb_new->interval = press_sec * 1000 / portTICK_PERIOD_MS;
-    cb_new->pbtn = btn;
-    #if !USE_ESP_TIMER
-    cb_new->tmr = xTimerCreate("btn_press_tmr", cb_new->interval, pdFALSE, cb_new, button_press_cb);
-    #else
-    esp_timer_create_args_t tmr_param_cus;
-    tmr_param_cus.arg = cb_new;
-    tmr_param_cus.callback = button_press_cb;
-    tmr_param_cus.dispatch_method = ESP_TIMER_TASK;
-    tmr_param_cus.name = "btn_press_custom_tmr";
-    esp_timer_create(&tmr_param_cus, &cb_new->tmr);
-    #endif
-    cb_new->next_cb = btn->cb_head;
-    btn->cb_head = cb_new;
-    return ESP_OK;
-}

+ 0 - 48
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/components/button/button_obj.cpp

@@ -1,48 +0,0 @@
-// Copyright 2015-2016 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 "freertos/FreeRTOS.h"
-#include "freertos/task.h"
-#include "esp_system.h"
-#include "iot_button.h"
-
-CButton::CButton(gpio_num_t gpio_num, button_active_t active_level)
-{
-    m_btn_handle = iot_button_create(gpio_num, active_level);
-}
-
-CButton::~CButton()
-{
-    iot_button_delete(m_btn_handle);
-    m_btn_handle = NULL;
-}
-
-esp_err_t CButton::set_evt_cb(button_cb_type_t type, button_cb cb, void* arg)
-{
-    return iot_button_set_evt_cb(m_btn_handle, type, cb, arg);
-}
-
-esp_err_t CButton::set_serial_cb(button_cb cb, void* arg, TickType_t interval_tick, uint32_t start_after_sec)
-{
-    return iot_button_set_serial_cb(m_btn_handle, start_after_sec, interval_tick, cb, arg);
-}
-
-esp_err_t CButton::add_custom_cb(uint32_t press_sec, button_cb cb, void* arg)
-{
-    return iot_button_add_custom_cb(m_btn_handle, press_sec, cb, arg);
-}
-
-esp_err_t CButton::rm_cb(button_cb_type_t type)
-{
-    return iot_button_rm_cb(m_btn_handle, type);
-}

+ 0 - 4
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/components/button/component.mk

@@ -1,4 +0,0 @@
-#
-# "main" pseudo-component makefile.
-#
-# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.)

+ 0 - 231
examples/bluetooth/esp_ble_mesh/ble_mesh_vendor_model/vendor_client/components/button/include/iot_button.h

@@ -1,231 +0,0 @@
-// Copyright 2015-2016 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_BUTTON_H_
-#define _IOT_BUTTON_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "driver/gpio.h"
-#include "freertos/portmacro.h"
-
-typedef void (* button_cb)(void*);
-typedef void* button_handle_t;
-
-typedef enum {
-    BUTTON_ACTIVE_HIGH = 1,    /*!<button active level: high level*/
-    BUTTON_ACTIVE_LOW = 0,     /*!<button active level: low level*/
-} button_active_t;
-
-typedef enum {
-    BUTTON_CB_PUSH = 0,   /*!<button push callback event */
-    BUTTON_CB_RELEASE,    /*!<button release callback event */
-    BUTTON_CB_TAP,        /*!<button quick tap callback event(will not trigger if there already is a "PRESS" event) */
-    BUTTON_CB_SERIAL,     /*!<button serial trigger callback event */
-} button_cb_type_t;
-
-/**
- * @brief Init button functions
- *
- * @param gpio_num GPIO index of the pin that the button uses
- * @param active_level button hardware active level.
- *        For "BUTTON_ACTIVE_LOW" it means when the button pressed, the GPIO will read low level.
- *
- * @return A button_handle_t handle to the created button object, or NULL in case of error.
- */
-button_handle_t iot_button_create(gpio_num_t gpio_num, button_active_t active_level);
-
-/**
- * @brief Register a callback function for a serial trigger event.
- *
- * @param btn_handle handle of the button object
- * @start_after_sec define the time after which to start serial trigger action
- * @interval_tick serial trigger interval
- * @cb callback function for "TAP" action.
- * @arg Parameter for callback function
- * @note
- *        Button callback functions execute in the context of the timer service task.
- *        It is therefore essential that button callback functions never attempt to block.
- *        For example, a button callback function must not call vTaskDelay(), vTaskDelayUntil(),
- *        or specify a non zero block time when accessing a queue or a semaphore.
- * @return
- *     - ESP_OK Success
- *     - ESP_FAIL Parameter error
- */
-esp_err_t iot_button_set_serial_cb(button_handle_t btn_handle, uint32_t start_after_sec, TickType_t interval_tick, button_cb cb, void* arg);
-
-/**
- * @brief Register a callback function for a button_cb_type_t action.
- *
- * @param btn_handle handle of the button object
- * @param type callback function type
- * @param cb callback function for "TAP" action.
- * @param arg Parameter for callback function
- * @note
- *        Button callback functions execute in the context of the timer service task.
- *        It is therefore essential that button callback functions never attempt to block.
- *        For example, a button callback function must not call vTaskDelay(), vTaskDelayUntil(),
- *        or specify a non zero block time when accessing a queue or a semaphore.
- * @return
- *     - ESP_OK Success
- *     - ESP_FAIL Parameter error
- */
-esp_err_t iot_button_set_evt_cb(button_handle_t btn_handle, button_cb_type_t type, button_cb cb, void* arg);
-
-/**
- * @brief
- *
- * @param btn_handle handle of the button object
- * @param press_sec the callback function would be called if you press the button for a specified period of time
- * @param cb callback function for "PRESS" action.
- * @param arg Parameter for callback function
- *
- * @note
- *        Button callback functions execute in the context of the timer service task.
- *        It is therefore essential that button callback functions never attempt to block.
- *        For example, a button callback function must not call vTaskDelay(), vTaskDelayUntil(),
- *        or specify a non zero block time when accessing a queue or a semaphore.
- * @return
- *     - ESP_OK Success
- *     - ESP_FAIL Parameter error
- */
-esp_err_t iot_button_add_custom_cb(button_handle_t btn_handle, uint32_t press_sec, button_cb cb, void* arg);
-
-/**
- * @brief Delete button object and free memory
- * @param btn_handle handle of the button object
- *
- * @return
- *     - ESP_OK Success
- *     - ESP_FAIL Parameter error
- */
-esp_err_t iot_button_delete(button_handle_t btn_handle);
-
-/**
- * @brief Remove callback
- *
- * @param btn_handle The handle of the button object
- * @param type callback function event type
- *
- * @return
- *     - ESP_OK Success
- */
-esp_err_t iot_button_rm_cb(button_handle_t btn_handle, button_cb_type_t type);
-
-#ifdef __cplusplus
-}
-#endif
-
-#ifdef __cplusplus
-
-/**
- * class of button
- * simple usage:
- * CButton* btn = new CButton(BUTTON_IO_NUM, BUTTON_ACTIVE_LEVEL, BUTTON_SERIAL_TRIGGER, 3);
- * btn->add_cb(BUTTON_CB_PUSH, button_tap_cb, (void*) push, 50 / portTICK_PERIOD_MS);
- * btn->add_custom_cb(5, button_press_5s_cb, NULL);
- * ......
- * delete btn;
- */
-class CButton
-{
-private:
-    button_handle_t m_btn_handle;
-
-    /**
-     * prevent copy constructing
-     */
-    CButton(const CButton&);
-    CButton& operator = (const CButton&);
-public:
-
-    /**
-     * @brief constructor of CButton
-     * 
-     * @param gpio_num GPIO index of the pin that the button uses
-     * @param active_level button hardware active level.
-     *        For "BUTTON_ACTIVE_LOW" it means when the button pressed, the GPIO will read low level.
-     */
-    CButton(gpio_num_t gpio_num, button_active_t active_level = BUTTON_ACTIVE_LOW);
-    
-    ~CButton();
-
-    /**
-     * @brief Register a callback function for a button_cb_type_t action.
-     *
-     * @param type callback function type
-     * @param cb callback function for "TAP" action.
-     * @param arg Parameter for callback function
-     * @note
-     *        Button callback functions execute in the context of the timer service task.
-     *        It is therefore essential that button callback functions never attempt to block.
-     *        For example, a button callback function must not call vTaskDelay(), vTaskDelayUntil(),
-     *        or specify a non zero block time when accessing a queue or a semaphore.
-     * @return
-     *     - ESP_OK Success
-     *     - ESP_FAIL Parameter error
-     */
-    esp_err_t set_evt_cb(button_cb_type_t type, button_cb cb, void* arg);
-
-    /**
-     * @brief Register a callback function for a serial trigger event.
-     *
-     * @param btn_handle handle of the button object
-     * @start_after_sec define the time after which to start serial trigger action
-     * @interval_tick serial trigger interval
-     * @cb callback function for "TAP" action.
-     * @arg Parameter for callback function
-     * @note
-     *        Button callback functions execute in the context of the timer service task.
-     *        It is therefore essential that button callback functions never attempt to block.
-     *        For example, a button callback function must not call vTaskDelay(), vTaskDelayUntil(),
-     *        or specify a non zero block time when accessing a queue or a semaphore.
-     * @return
-     *     - ESP_OK Success
-     *     - ESP_FAIL Parameter error
-     */
-    esp_err_t set_serial_cb(button_cb cb, void* arg, TickType_t interval_tick, uint32_t start_after_sec);
-
-    /**
-     * @brief
-     *
-     * @param press_sec the callback function would be called if you press the button for a specified period of time
-     * @param cb callback function for "PRESS" action.
-     * @param arg Parameter for callback function
-     *
-     * @note
-     *        Button callback functions execute in the context of the timer service task.
-     *        It is therefore essential that button callback functions never attempt to block.
-     *        For example, a button callback function must not call vTaskDelay(), vTaskDelayUntil(),
-     *        or specify a non zero block time when accessing a queue or a semaphore.
-     * @return
-     *     - ESP_OK Success
-     *     - ESP_FAIL Parameter error
-     */
-    esp_err_t add_custom_cb(uint32_t press_sec, button_cb cb, void* arg);
-
-    /**
-     * @brief Remove callback
-     *
-     * @param type callback function event type
-     *
-     * @return
-     *     - ESP_OK Success
-     */
-    esp_err_t rm_cb(button_cb_type_t type);
-};
-#endif
-
-#endif

+ 0 - 0
examples/bluetooth/esp_ble_mesh/ble_mesh_node/onoff_client/components/button/CMakeLists.txt → examples/bluetooth/esp_ble_mesh/common_components/button/CMakeLists.txt


+ 0 - 0
examples/bluetooth/esp_ble_mesh/ble_mesh_node/onoff_client/components/button/Kconfig → examples/bluetooth/esp_ble_mesh/common_components/button/Kconfig


+ 0 - 0
examples/bluetooth/esp_ble_mesh/ble_mesh_node/onoff_client/components/button/README.md → examples/bluetooth/esp_ble_mesh/common_components/button/README.md


+ 0 - 0
examples/bluetooth/esp_ble_mesh/ble_mesh_node/onoff_client/components/button/button.c → examples/bluetooth/esp_ble_mesh/common_components/button/button.c


+ 0 - 0
examples/bluetooth/esp_ble_mesh/ble_mesh_node/onoff_client/components/button/button_obj.cpp → examples/bluetooth/esp_ble_mesh/common_components/button/button_obj.cpp


+ 0 - 0
examples/bluetooth/esp_ble_mesh/ble_mesh_node/onoff_client/components/button/component.mk → examples/bluetooth/esp_ble_mesh/common_components/button/component.mk


+ 0 - 0
examples/bluetooth/esp_ble_mesh/ble_mesh_node/onoff_client/components/button/include/iot_button.h → examples/bluetooth/esp_ble_mesh/common_components/button/include/iot_button.h