Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,8 @@ INCLUDE_PATHS := -I$(SRC_PATH) -I$(SRC_PATH)/includes -I$(SRC_PATH)/common -I$(
-I$(SDK_PATH)/zigbee/zbapi \
-I$(SDK_PATH)/zigbee/zbhci \
-I$(SDK_PATH)/zigbee/zcl \
-I$(SDK_PATH)/zigbee/zdo
-I$(SDK_PATH)/zigbee/zdo \
-I$(SDK_PATH)/zigbee/aps

GCC_FLAGS += $(TEL_CHIP) $(DEVICE_DEFS)

Expand Down
1 change: 1 addition & 0 deletions src/app_cfg.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ extern "C" {
#define TOUCHLINK_SUPPORT 0
#define FIND_AND_BIND_SUPPORT 0
#define REJOIN_FAILURE_TIMER 1
#define ZCL_SCENE_SUPPORT 1

#define GP_SUPPORT_ENABLE 1

Expand Down
43 changes: 34 additions & 9 deletions src/base_components/button.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ void btn_init(button_t *button)
button->pressed = true;
button->long_pressed = true;
button->long_released = true;
button->timed_out = true;
}
}

Expand Down Expand Up @@ -50,10 +51,8 @@ void btn_update_debounced(button_t *button, u8 is_pressed)
printf("Press detected\r\n");
button->pressed_at_ms = now;
button->long_released = false;
if (button->on_press != NULL)
{
button->on_press(button->callback_param);
}
button->timed_out = false;

if (now - button->released_at_ms < button->multi_press_duration_ms)
{
button->multi_press_cnt += 1;
Expand All @@ -66,23 +65,36 @@ void btn_update_debounced(button_t *button, u8 is_pressed)
else
{
button->multi_press_cnt = 1;
button->multi_release_cnt = 0;
}

if (button->on_press != NULL)
{
button->on_press(button->callback_param);
}
}
else if (button->pressed && !is_pressed)
{
printf("Release detected\r\n");
button->released_at_ms = now;
button->long_pressed = false;
if (button->on_release != NULL)
{
button->on_release(button->callback_param);
}
button->timed_out = false;
if (now - button->pressed_at_ms > button->multi_press_duration_ms)
{
button->multi_press_cnt = 0;
button->multi_release_cnt = 1;
} else {
button->multi_release_cnt++;
}

if (button->on_release != NULL)
{
button->on_release(button->callback_param);
}
}

button->pressed = is_pressed;

if (is_pressed && !button->long_pressed && (button->long_press_duration_ms > 0) && (button->long_press_duration_ms < (now - button->pressed_at_ms)))
{
button->long_pressed = true;
Expand All @@ -102,5 +114,18 @@ void btn_update_debounced(button_t *button, u8 is_pressed)
button->on_long_release(button->callback_param);
}
}
;

if (!button->timed_out)
{
if (is_pressed && button->pressed_at_ms + button->timeout_duration_ms < now && button->on_timeout_pressed)
{
button->timed_out = true;
button->on_timeout_pressed(button->callback_param);
}
else if (!is_pressed && button->released_at_ms + button->timeout_duration_ms < now && button->on_timeout_released)
{
button->timed_out = true;
button->on_timeout_released(button->callback_param);
}
}
}
13 changes: 9 additions & 4 deletions src/base_components/button.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,22 @@ typedef struct
u8 pressed;
u8 long_pressed;
u8 long_released;
u8 timed_out;
u32 pressed_at_ms;
u32 released_at_ms;
u32 long_press_duration_ms;
u32 multi_press_duration_ms;
u32 timeout_duration_ms;
u8 multi_press_cnt;
u8 multi_release_cnt;
u8 debounce_last_state;
u32 debounce_last_change;
ev_button_callback_t on_press;
ev_button_callback_t on_long_press;
ev_button_callback_t on_release;
ev_button_callback_t on_long_release;
ev_button_callback_t on_press;
ev_button_callback_t on_long_press;
ev_button_callback_t on_release;
ev_button_callback_t on_long_release;
ev_button_callback_t on_timeout_pressed;
ev_button_callback_t on_timeout_released;
ev_button_multi_press_callback_t on_multi_press;
void * callback_param;
}button_t;
Expand Down
5 changes: 5 additions & 0 deletions src/custom_zcl/zcl_onoff_configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@
#define ZCL_ATTRID_ONOFF_CONFIGURATION_SWITCH_LONG_PRESS_DUR 0xff03
#define ZCL_ATTRID_ONOFF_CONFIGURATION_SWITCH_LEVEL_MOVE_RATE 0xff04
#define ZCL_ATTRID_ONOFF_CONFIGURATION_SWITCH_BINDING_MODE 0xff05
#define ZCL_ATTRID_ONOFF_CONFIGURATION_SCENE_NEXT_IDX 0xff06
#define ZCL_ATTRID_ONOFF_CONFIGURATION_SCENE_COUNT 0xff07
#define ZCL_ATTRID_ONOFF_CONFIGURATION_SCENE_OFFSET 0xff08
#define ZCL_ATTRID_ONOFF_CONFIGURATION_SCENE_GROUP_ID 0xff09
#define ZCL_ATTRID_ONOFF_CONFIGURATION_SCENE_RECALL_TIME 0xff0a


#define ZCL_ONOFF_CONFIGURATION_SWITCH_TYPE_TOGGLE 0x00
Expand Down
10 changes: 10 additions & 0 deletions src/zigbee/binding_table.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#ifndef _BINDING_TABLE_H_
#define _BINDING_TABLE_H_

#include "aps_api.h"

#define BINDING_TABLE_FOR_EACH(cluster, endpoint, out_ptr) \
for (int i__ = 0; i__ < APS_BINDING_TABLE_NUM; ++i__) \
if (g_apsBindingTbl[i__].used && g_apsBindingTbl[i__].clusterId == (cluster) && g_apsBindingTbl[i__].srcEp == (endpoint) && ((out_ptr) = (&g_apsBindingTbl[i__])))

#endif
2 changes: 1 addition & 1 deletion src/zigbee/general_commands.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ void device_zclWriteReqCmd(u8 endpoint, u16 clusterId, zclWriteCmd_t *pWriteReqC
{
if (clusterId == ZCL_CLUSTER_GEN_ON_OFF_SWITCH_CONFIG)
{
switch_cluster_callback_attr_write_trampoline(endpoint);
switch_cluster_callback_attr_write_trampoline(endpoint, clusterId, pWriteReqCmd);
}
if (clusterId == ZCL_CLUSTER_GEN_ON_OFF)
{
Expand Down
Loading