From 93b529496d8faf4b81a90d97673536701a8495ca Mon Sep 17 00:00:00 2001 From: lost Date: Thu, 7 Jan 2021 23:44:10 +0200 Subject: [PATCH] some work on ring and btn events --- Source/hal_board_cfg.h | 36 +++++++++++----------- Source/preinclude.h | 13 ++++++-- Source/zcl_app.c | 70 ++++++++++++++++++++++++++++++++---------- Source/zcl_app.h | 4 ++- 4 files changed, 84 insertions(+), 39 deletions(-) diff --git a/Source/hal_board_cfg.h b/Source/hal_board_cfg.h index 31f589a..007415a 100644 --- a/Source/hal_board_cfg.h +++ b/Source/hal_board_cfg.h @@ -61,26 +61,26 @@ #define HAL_LED_BLINK_DELAY() st( { volatile uint32 i; for (i=0; i<0x5800; i++) { }; } ) #if defined(HAL_BOARD_TARGET) - //blue + //led #define LED1_BV BV(4) - #define LED1_SBIT P1_4 - #define LED1_DDR P1DIR - #define LED1_POLARITY ACTIVE_LOW -//green + #define LED1_SBIT P0_4 + #define LED1_DDR P0DIR + #define LED1_POLARITY ACTIVE_HIGH +//catch #define LED2_BV BV(1) - #define LED2_SBIT P1_1 - #define LED2_DDR P1DIR - #define LED2_POLARITY ACTIVE_LOW -//red - #define LED3_BV BV(0) - #define LED3_SBIT P1_0 - #define LED3_DDR P1DIR - #define LED3_POLARITY ACTIVE_LOW -//ex - #define LED4_BV BV(4) - #define LED4_SBIT P1_5 - #define LED4_DDR P1DIR - #define LED4_POLARITY ACTIVE_LOW + #define LED2_SBIT P0_1 + #define LED2_DDR P0DIR + #define LED2_POLARITY ACTIVE_HIGH +//answer + #define LED3_BV BV(2) + #define LED3_SBIT P0_2 + #define LED3_DDR P0DIR + #define LED3_POLARITY ACTIVE_HIGH +//open + #define LED4_BV BV(3) + #define LED4_SBIT P0_3 + #define LED4_DDR P0DIR + #define LED4_POLARITY ACTIVE_HIGH #elif defined(HAL_BOARD_CHDTECH_DEV) diff --git a/Source/preinclude.h b/Source/preinclude.h index d7a4825..83a46dd 100644 --- a/Source/preinclude.h +++ b/Source/preinclude.h @@ -38,21 +38,28 @@ #error "Board type must be defined" #endif + +#ifdef ZIC_BATTERY_MODE +#define POWER_SAVING +#endif + #if defined(HAL_BOARD_TARGET) #define HAL_KEY_P0_INPUT_PINS BV(1) + #define HAL_KEY_P0_INPUT_PINS_EDGE HAL_KEY_FALLING_EDGE #define HAL_KEY_P2_INPUT_PINS BV(0) - //#define CO2_UART_PORT 0x00 + #define HAL_KEY_P2_INPUT_PINS_EDGE HAL_KEY_FALLING_EDGE //#define HAL_UART_DMA 1 //#define HAL_UART_ISR 0 #define INT_HEAP_LEN 2256 #elif defined(HAL_BOARD_CHDTECH_DEV) #define HAL_UART_DMA 1 #define HAL_UART_ISR 2 - //#define CO2_UART_PORT 0x01 - //#define HAL_KEY_P0_INPUT_PINS 0x21//pins 1 and 2. BV(1) bv(1) pin 2. bit (1 << n) #define HAL_KEY_P0_INPUT_PINS BV(1) + #define HAL_KEY_P0_INPUT_PINS_EDGE HAL_KEY_FALLING_EDGE #define HAL_KEY_P2_INPUT_PINS BV(0) + #define HAL_KEY_P2_INPUT_PINS_EDGE HAL_KEY_FALLING_EDGE #define DO_DEBUG_UART + #endif #define FACTORY_RESET_HOLD_TIME_LONG 5000 diff --git a/Source/zcl_app.c b/Source/zcl_app.c index 4a8ef0c..d527d2f 100644 --- a/Source/zcl_app.c +++ b/Source/zcl_app.c @@ -83,10 +83,11 @@ static void zclApp_Report(void); static void zclApp_OneReport(void); static void zclApp_ConfigInit(bool restart); -static void zclApp_BtnClick(void); +static void zclApp_BtnClick(bool hold); static void zclApp_RingRun(void); static void zclApp_RingEnd(void); +//static uint32 pressTime = 0; /********************************************************************* * ZCL General Profile Callback table @@ -126,15 +127,18 @@ void zclApp_Init(byte task_id) { #endif } static void zclApp_HandleKeys(byte portAndAction, byte keyCode) { + LREP("zclApp_HandleKeys portAndAction=0x%X keyCode=0x%X\r\n", portAndAction, keyCode); if (keyCode == 1) { zclFactoryResetter_HandleKeys(portAndAction, keyCode); } zclCommissioning_HandleKeys(portAndAction, keyCode); if (portAndAction & HAL_KEY_PRESS) { + zclApp_State.pressTime = osal_getClock(); if (keyCode == 1) { LREPMaster("Key press\r\n"); - osal_start_reload_timer(zclApp_TaskID, APP_BTN_CLICK_EVT, 250); + LREP("pressTime = %d\r\n", zclApp_State.pressTime); + //osal_start_reload_timer(zclApp_TaskID, APP_BTN_CLICK_EVT, 250); } else if (keyCode == 2) { LREPMaster("Ring start\r\n"); @@ -145,7 +149,18 @@ static void zclApp_HandleKeys(byte portAndAction, byte keyCode) { #if defined( ZIC_BATTERY_MODE ) zclBattery_Report(); #endif - if (keyCode == 2) { + if (keyCode == 1) { + LREPMaster("Key release\r\n"); + uint32 holdTime = osal_getClock() - zclApp_State.pressTime; + LREP("holdTime = %d \r\n", holdTime); + if (holdTime < 1) { + osal_start_reload_timer(zclApp_TaskID, APP_BTN_CLICK_EVT, 50); + } + else { + osal_start_reload_timer(zclApp_TaskID, APP_BTN_HOLD_EVT, 50); + } + } + else if (keyCode == 2) { zclApp_RingEnd(); } } @@ -194,14 +209,22 @@ uint16 zclApp_event_loop(uint8 task_id, uint16 events) { if (events & APP_BTN_CLICK_EVT) { LREPMaster("APP_BTN_CLICK_EVT\r\n"); - zclApp_BtnClick(); + zclApp_BtnClick(false); return (events ^ APP_BTN_CLICK_EVT); } + if (events & APP_RING_RUN_EVT) { LREPMaster("APP_RING_RUN_EVT\r\n"); zclApp_RingRun(); return (events ^ APP_RING_RUN_EVT); } + + + if (events & APP_BTN_HOLD_EVT) { + LREPMaster("APP_BTN_HOLD_EVT\r\n"); + zclApp_BtnClick(true); + return (events ^ APP_BTN_HOLD_EVT); + } return 0; } @@ -278,32 +301,45 @@ static void zclApp_RingEnd(void) { zclApp_OneReport(); } -static void zclApp_BtnClick(void) { - +static void zclApp_BtnClick(bool hold) { + static uint8 currentBtnClickPhase = 0; LREP("currentBtnClickPhase %d\r\n", currentBtnClickPhase); switch (currentBtnClickPhase++) { - case 0: - //HalLedSet(LED_PIN, HAL_LED_MODE_ON); - HAL_TURN_ON_LED1(); - if (zclApp_Config.ModeOpen < Drop) { - zclApp_Config.ModeOpen++; + if (hold) { + zclApp_Config.ModeSound = !zclApp_Config.ModeSound; + HalLedSet(CATCH_PIN, !zclApp_Config.ModeSound); } else { - zclApp_Config.ModeOpen = Never; + if (zclApp_Config.ModeOpen < Drop) { + zclApp_Config.ModeOpen++; + } + else { + zclApp_Config.ModeOpen = Never; + } } break; case 1: zclApp_OneReport(); break; case 2: - //HalLedSet(LED_PIN, HAL_LED_MODE_OFF); - HAL_TURN_OFF_LED1(); + if (hold) { + HalLedBlink(LED_PIN, zclApp_Config.ModeSound+1, 50, 750); + } + else { + HalLedBlink(LED_PIN, zclApp_Config.ModeOpen+1, 50, 250); + } break; default: - osal_stop_timerEx(zclApp_TaskID, APP_BTN_CLICK_EVT); - osal_clear_event(zclApp_TaskID, APP_BTN_CLICK_EVT); + if (hold) { + osal_stop_timerEx(zclApp_TaskID, APP_BTN_HOLD_EVT); + osal_clear_event(zclApp_TaskID, APP_BTN_HOLD_EVT); + } + else { + osal_stop_timerEx(zclApp_TaskID, APP_BTN_CLICK_EVT); + osal_clear_event(zclApp_TaskID, APP_BTN_CLICK_EVT); + } currentBtnClickPhase = 0; break; } @@ -315,7 +351,7 @@ static void zclApp_Report(void) { } static void zclApp_OneReport(void) { - HalLedSet(LED_PIN, HAL_LED_MODE_BLINK); + //HalLedSet(LED_PIN, HAL_LED_MODE_BLINK); bdb_RepChangedAttrValue(zclApp_FirstEP.EndPoint, ZCL_INTERCOM, ATTRID_MODEOPEN); } diff --git a/Source/zcl_app.h b/Source/zcl_app.h index c709b98..7e599a0 100644 --- a/Source/zcl_app.h +++ b/Source/zcl_app.h @@ -20,7 +20,8 @@ extern "C" { #define APP_SAVE_ATTRS_EVT 0x0002 #define APP_BTN_CLICK_EVT 0x0004 #define APP_RING_RUN_EVT 0x0008 - +#define APP_BTN_HOLD_EVT 0x0010 + /********************************************************************* * MACROS */ @@ -109,6 +110,7 @@ typedef struct { typedef struct { WorkState_t State; uint8 RingRunStep; + uint32 pressTime; } device_state_t;