From e63e1cbd923ebefa685bb1d5b15de05c63c9c239 Mon Sep 17 00:00:00 2001 From: lost Date: Mon, 14 Jun 2021 12:53:09 +0300 Subject: [PATCH] Some major fixes: 1. Fixed a call detecting mechanism, which led to a call cliff during a conversation or opening the door, which sometimes prevented open the door. (In some cases, it did not open at all) 2. In battery mode, the sleep mode is fixed - it is now possible to open the door. 3. In the battery mode, change the sound mode by the button is disabled, because 'no sound' mode on the battery is in development. --- Source/preinclude.h | 2 +- Source/zcl_app.c | 71 ++++++++++++++++++++++++--------------------- 2 files changed, 39 insertions(+), 34 deletions(-) diff --git a/Source/preinclude.h b/Source/preinclude.h index cf8de63..0e15905 100644 --- a/Source/preinclude.h +++ b/Source/preinclude.h @@ -46,7 +46,7 @@ #define HAL_KEY_P0_INPUT_PINS_EDGE HAL_KEY_RISING_EDGE #define HAL_KEY_P2_INPUT_PINS BV(0) #define HAL_KEY_P2_INPUT_PINS_EDGE HAL_KEY_FALLING_EDGE - #define INT_HEAP_LEN 2256 + #define INT_HEAP_LEN 2200//2256 #elif defined( HAL_BOARD_CHDTECH_DEV ) #define HAL_KEY_P0_INPUT_PINS BV(1) #define HAL_KEY_P0_INPUT_PINS_EDGE HAL_KEY_FALLING_EDGE diff --git a/Source/zcl_app.c b/Source/zcl_app.c index d3e46fd..bc4fa6f 100644 --- a/Source/zcl_app.c +++ b/Source/zcl_app.c @@ -121,6 +121,7 @@ void zclApp_Init(byte task_id) { LREP("Build %s \r\n", zclApp_DateCodeNT); zclApp_ConfigInit(TIMER_START); + IO_IMODE_PORT_PIN(0,0,IO_TRI); #if defined( ZIC_BATTERY_MODE ) @@ -136,20 +137,23 @@ static void zclApp_HandleKeys(byte portAndAction, byte keyCode) { if (portAndAction & 0x01) { //P0 Ring //S1 P0_1 - //exit old stop timer - osal_stop_timerEx(zclApp_TaskID, APP_RING_STOP_EVT); - osal_clear_event(zclApp_TaskID, APP_RING_STOP_EVT); - //start new stop timer (ring ends timer) - osal_start_reload_timer(zclApp_TaskID, APP_RING_STOP_EVT, 3000); + if (portAndAction & HAL_KEY_PRESS) { - //osal_pwrmgr_task_state(zclApp_TaskID, PWRMGR_HOLD); - //osal_pwrmgr_task_state(Hal_TaskID, PWRMGR_CONSERVE); + + //exit old stop timer + osal_stop_timerEx(zclApp_TaskID, APP_RING_STOP_EVT); + //osal_clear_event(zclApp_TaskID, APP_RING_STOP_EVT); + //start new stop timer (ring ends timer) + osal_start_timerEx(zclApp_TaskID, APP_RING_STOP_EVT, 3000); //start ring if (zclApp_State.RingRunStep == 0) { + #if defined( ZIC_BATTERY_MODE ) + osal_pwrmgr_task_state(zclApp_TaskID, PWRMGR_HOLD); + #endif LREPMaster("Ring start\r\n"); - HalLedSet(LED_PIN, HAL_LED_MODE_BLINK); + //HalLedSet(LED_PIN, HAL_LED_MODE_BLINK); zclApp_State.RingRunStep = 1; osal_start_reload_timer(zclApp_TaskID, APP_RING_RUN_EVT, 500); afAddrType_t inderect_DstAddr = {.addrMode = (afAddrMode_t)AddrNotPresent, .endPoint = 0, .addr.shortAddr = 0}; @@ -258,10 +262,12 @@ uint16 zclApp_event_loop(uint8 task_id, uint16 events) { static void zclApp_RingRun(void) { - zclApp_State.RingRunStep++; LREP("zclApp_State.RingRunStep %d\r\n", zclApp_State.RingRunStep); LREP("zclApp_State.State %d\r\n", zclApp_State.State); + + + switch (zclApp_State.State) { case Idle: zclApp_State.State = Ring; @@ -280,6 +286,7 @@ static void zclApp_RingRun(void) { } break; case Talk: + osal_stop_timerEx(zclApp_TaskID, APP_RING_STOP_EVT); if ((zclApp_Config.ModeOpen == Once) || (zclApp_Config.ModeOpen == Always)){ if (zclApp_State.RingRunStep > ((zclApp_Config.TimeRing + zclApp_Config.TimeTalk) * 2)) { zclApp_State.State = Open; @@ -289,6 +296,7 @@ static void zclApp_RingRun(void) { } break; case Open: + osal_stop_timerEx(zclApp_TaskID, APP_RING_STOP_EVT); if ((zclApp_Config.ModeOpen == Once) || (zclApp_Config.ModeOpen == Always)){ if (zclApp_State.RingRunStep > ((zclApp_Config.TimeRing + zclApp_Config.TimeTalk + zclApp_Config.TimeOpen) * 2)) { zclApp_RingEnd(); @@ -307,7 +315,7 @@ static void zclApp_RingRun(void) { static void zclApp_TalkStart(void) { LREPMaster("Talk start\r\n"); osal_stop_timerEx(zclApp_TaskID, APP_RING_STOP_EVT); - osal_clear_event(zclApp_TaskID, APP_RING_STOP_EVT); + //osal_clear_event(zclApp_TaskID, APP_RING_STOP_EVT); zclApp_OneReport(); HalLedSet(ANSWER_PIN, HAL_LED_MODE_ON); if (zclApp_Config.ModeSound == true) { @@ -320,30 +328,27 @@ static void zclApp_TalkStart(void) { static void zclApp_RingEnd(void) { LREPMaster("Ring end\r\n"); - if (zclApp_Config.ModeSound == true) { - HalLedSet(CATCH_PIN, HAL_LED_MODE_OFF); - HalLedSet(HANDSET_PIN, HAL_LED_MODE_OFF); - } - else { - HalLedSet(CATCH_PIN, HAL_LED_MODE_ON); - HalLedSet(HANDSET_PIN, HAL_LED_MODE_ON); - } + HalLedSet(CATCH_PIN, !zclApp_Config.ModeSound); + HalLedSet(HANDSET_PIN, !zclApp_Config.ModeSound); HalLedSet(ANSWER_PIN, HAL_LED_MODE_OFF); osal_stop_timerEx(zclApp_TaskID, APP_RING_RUN_EVT); osal_clear_event(zclApp_TaskID, APP_RING_RUN_EVT); osal_stop_timerEx(zclApp_TaskID, APP_RING_STOP_EVT); - osal_clear_event(zclApp_TaskID, APP_RING_STOP_EVT); + //osal_clear_event(zclApp_TaskID, APP_RING_STOP_EVT); zclApp_State.RingRunStep = 0; zclApp_State.State = Idle; - afAddrType_t inderect_DstAddr = {.addrMode = (afAddrMode_t)AddrNotPresent, .endPoint = 0, .addr.shortAddr = 0}; - + + afAddrType_t inderect_DstAddr = {.addrMode = (afAddrMode_t)AddrNotPresent, .endPoint = 0, .addr.shortAddr = 0}; zclGeneral_SendOnOff_CmdOff(zclApp_FirstEP.EndPoint, &inderect_DstAddr, FALSE, bdb_getZCLFrameCounter()); + if (zclApp_Config.ModeOpen == Once) { zclApp_Config.ModeOpen = Never; } zclApp_OneReport(); + #if defined( ZIC_BATTERY_MODE ) zclBattery_Report(); + osal_pwrmgr_task_state(zclApp_TaskID, PWRMGR_CONSERVE); #endif } @@ -354,8 +359,11 @@ static void zclApp_BtnClick(bool hold) { switch (currentBtnClickPhase++) { case 0: if (hold) { - zclApp_Config.ModeSound = !zclApp_Config.ModeSound; - HalLedSet(CATCH_PIN, !zclApp_Config.ModeSound); + #if !defined( ZIC_BATTERY_MODE ) + zclApp_Config.ModeSound = !zclApp_Config.ModeSound; + HalLedSet(HANDSET_PIN, !zclApp_Config.ModeSound); + HalLedSet(CATCH_PIN, !zclApp_Config.ModeSound); + #endif } else { if (zclApp_Config.ModeOpen < Drop) { @@ -399,7 +407,10 @@ static void zclApp_OneReport(void) { HalLedSet(LED_PIN, HAL_LED_MODE_BLINK); bdb_RepChangedAttrValue(zclApp_FirstEP.EndPoint, ZCL_INTERCOM, ATTRID_STATE); bdb_RepChangedAttrValue(zclApp_FirstEP.EndPoint, ZCL_INTERCOM, ATTRID_MODEOPEN); - bdb_RepChangedAttrValue(zclApp_FirstEP.EndPoint, ZCL_INTERCOM, ATTRID_MODESOUND); + #if !defined( ZIC_BATTERY_MODE ) + bdb_RepChangedAttrValue(zclApp_FirstEP.EndPoint, ZCL_INTERCOM, ATTRID_MODESOUND); + #endif + } static void zclApp_BasicResetCB(void) { @@ -428,15 +439,9 @@ static void zclApp_ConfigInit(bool restart) { uint32 ReportInterval = (uint32)zclApp_Config.TimeReport * (uint32)60; LREP("Start report with interval %d seconds\r\n", ReportInterval); osal_start_reload_timer(zclApp_TaskID, APP_REPORT_EVT, ((uint32)ReportInterval*(uint32)1000)); - - if (zclApp_Config.ModeSound == true) { - HalLedSet(HANDSET_PIN, HAL_LED_MODE_OFF); - HalLedSet(CATCH_PIN, HAL_LED_MODE_OFF); - } - else { - HalLedSet(HANDSET_PIN, HAL_LED_MODE_ON); - HalLedSet(CATCH_PIN, HAL_LED_MODE_ON); - } + + HalLedSet(HANDSET_PIN, !zclApp_Config.ModeSound); + HalLedSet(CATCH_PIN, !zclApp_Config.ModeSound); HalLedSet(ANSWER_PIN, HAL_LED_MODE_OFF); }