diff --git a/Source/OSAL_App.c b/Source/OSAL_App.c index 06964a0..4c89ba3 100644 --- a/Source/OSAL_App.c +++ b/Source/OSAL_App.c @@ -61,7 +61,7 @@ void osalInitTasks(void) { zclApp_Init(taskID++); zclCommissioning_Init(taskID++); zclFactoryResetter_Init(taskID++); -#ifdef ZIC_BATTERY_MODE +#if defined( ZIC_BATTERY_MODE ) zclBattery_Init(taskID++); #endif } diff --git a/Source/hal_board_cfg.h b/Source/hal_board_cfg.h index 007415a..fa1e431 100644 --- a/Source/hal_board_cfg.h +++ b/Source/hal_board_cfg.h @@ -100,7 +100,7 @@ #define LED3_DDR P1DIR #define LED3_POLARITY ACTIVE_LOW //ex - #define LED4_BV BV(4) + #define LED4_BV BV(5) #define LED4_SBIT P1_5 #define LED4_DDR P1DIR #define LED4_POLARITY ACTIVE_LOW diff --git a/Source/preinclude.h b/Source/preinclude.h index 83a46dd..cf8de63 100644 --- a/Source/preinclude.h +++ b/Source/preinclude.h @@ -4,7 +4,7 @@ #define TP2_LEGACY_ZC // patch sdk -// #define ZDSECMGR_TC_ATTEMPT_DEFAULT_KEY TRUE +//#define ZDSECMGR_TC_ATTEMPT_DEFAULT_KEY TRUE #define NWK_AUTO_POLL #define MULTICAST_ENABLED FALSE @@ -14,9 +14,10 @@ #define ZCL_BASIC #define ZCL_IDENTIFY #define ZCL_REPORTING_DEVICE +#define ZCL_ON_OFF #define DISABLE_GREENPOWER_BASIC_PROXY -//#define BDB_FINDING_BINDING_CAPABILITY_ENABLED 1 +#define BDB_FINDING_BINDING_CAPABILITY_ENABLED 1 #define BDB_REPORTING TRUE @@ -25,73 +26,42 @@ #define ISR_KEYINTERRUPT + #define HAL_LED TRUE #define HAL_LCD FALSE #define BLINK_LEDS TRUE -// one of this boards -// #define HAL_BOARD_TARGET -// #define HAL_BOARD_CHDTECH_DEV #if !defined(HAL_BOARD_TARGET) && !defined(HAL_BOARD_CHDTECH_DEV) #error "Board type must be defined" #endif - -#ifdef ZIC_BATTERY_MODE -#define POWER_SAVING +#if defined( 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 +#if defined( HAL_BOARD_TARGET ) + #define HAL_KEY_P0_INPUT_PINS BV(0) + #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 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 +#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 #define HAL_KEY_P2_INPUT_PINS BV(0) #define HAL_KEY_P2_INPUT_PINS_EDGE HAL_KEY_FALLING_EDGE #define DO_DEBUG_UART - + #define INT_HEAP_LEN 2060 #endif #define FACTORY_RESET_HOLD_TIME_LONG 5000 - -#ifdef DO_DEBUG_UART +#if defined( DO_DEBUG_UART ) + #define HAL_UART_ISR 2 #define HAL_UART TRUE #define HAL_UART_DMA 1 - #define INT_HEAP_LEN 2060 #endif -// #define INT_HEAP_LEN (2685 - 0x4B - 0xBB-0x50-0xae) -// #define HAL_UART TRUE -// #define HAL_UART_DMA 2 -#define HAL_UART TRUE - - -//#define BME280_32BIT_ENABLE -//i2c bme280 -//#define OCM_CLK_PORT 1 -//#define OCM_CLK_PIN 6 - -//#define OCM_DATA_PORT 1 -//#define OCM_DATA_PIN 7 - - -//#define DS18B20_PORT 0 -//#define TSENS_SBIT P0_0 -//#define TSENS_BV BV(0) -//#define TSENS_DIR P0DIR - - - - #include "hal_board_cfg.h" diff --git a/Source/zcl_app.c b/Source/zcl_app.c index d527d2f..57547e3 100644 --- a/Source/zcl_app.c +++ b/Source/zcl_app.c @@ -129,44 +129,52 @@ void zclApp_Init(byte task_id) { 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"); - 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"); - osal_start_reload_timer(zclApp_TaskID, APP_RING_RUN_EVT, 500); - } + + if (portAndAction & 0x01) { //P0 Ring + afAddrType_t inderect_DstAddr = {.addrMode = (afAddrMode_t)AddrNotPresent, .endPoint = 0, .addr.shortAddr = 0}; + if (portAndAction & HAL_KEY_PRESS) { + osal_pwrmgr_task_state(zclApp_TaskID, PWRMGR_HOLD); + LREPMaster("Ring start\r\n"); + HalLedSet(LED_PIN, HAL_LED_MODE_BLINK); + zclGeneral_SendOnOff_CmdOn(zclApp_FirstEP.EndPoint, &inderect_DstAddr, FALSE, bdb_getZCLFrameCounter()); + osal_start_reload_timer(zclApp_TaskID, APP_RING_RUN_EVT, 500); + } + if (portAndAction & HAL_KEY_RELEASE) { + zclApp_RingEnd(); + zclGeneral_SendOnOff_CmdOff(zclApp_FirstEP.EndPoint, &inderect_DstAddr, FALSE, bdb_getZCLFrameCounter()); + osal_pwrmgr_task_state(zclApp_TaskID, PWRMGR_CONSERVE); + } + } - if (portAndAction & HAL_KEY_RELEASE) { + + if (portAndAction & 0x04) { //P2 Btn + zclFactoryResetter_HandleKeys(portAndAction, keyCode); + if (portAndAction & HAL_KEY_PRESS) { + zclApp_State.pressTime = osal_getClock(); + LREPMaster("Key press\r\n"); + LREP("pressTime = %d\r\n", zclApp_State.pressTime); + } + if (portAndAction & HAL_KEY_RELEASE) { #if defined( ZIC_BATTERY_MODE ) - zclBattery_Report(); + zclBattery_Report(); #endif - 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); - } + 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 if (keyCode == 2) { - zclApp_RingEnd(); + else { + osal_start_reload_timer(zclApp_TaskID, APP_BTN_HOLD_EVT, 50); } + } } } + + uint16 zclApp_event_loop(uint8 task_id, uint16 events) { LREP("events 0x%x \r\n", events); if (events & SYS_EVENT_MSG) { @@ -298,7 +306,7 @@ static void zclApp_RingEnd(void) { if (zclApp_Config.ModeOpen == Once) { zclApp_Config.ModeOpen = Never; } - zclApp_OneReport(); + zclApp_OneReport(); } static void zclApp_BtnClick(bool hold) { @@ -352,7 +360,9 @@ static void zclApp_Report(void) { 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); } static void zclApp_BasicResetCB(void) { diff --git a/Source/zcl_app.h b/Source/zcl_app.h index 7e599a0..6c4e8e9 100644 --- a/Source/zcl_app.h +++ b/Source/zcl_app.h @@ -10,6 +10,7 @@ extern "C" { */ #include "version.h" #include "zcl.h" +#include "zcl_general.h" /********************************************************************* * CONSTANTS diff --git a/Source/zcl_app_data.c b/Source/zcl_app_data.c index 5124ca1..eeea7a2 100644 --- a/Source/zcl_app_data.c +++ b/Source/zcl_app_data.c @@ -53,7 +53,7 @@ const uint8 zclApp_StackVersion = 4; const uint8 zclApp_ManufacturerName[] = {6, 'x', 'y', 'z', 'r', 'o', 'e'}; const uint8 zclApp_ModelId[] = {13, 'D', 'I', 'Y', '_', 'Z', 'i', 'n', 't', 'e', 'r', 'c', 'o', 'm'}; -#if defined(ZIC_BATTERY_MODE) +#if defined( ZIC_BATTERY_MODE ) const uint8 zclApp_PowerSource = POWER_SOURCE_BATTERY; #define DEFAULT_TimeReport 30 //minutes #else @@ -89,24 +89,30 @@ device_state_t zclApp_State = { */ CONST zclAttrRec_t zclApp_AttrsFirstEP[] = { + {BASIC, {ATTRID_BASIC_ZCL_VERSION, ZCL_UINT8, R, (void *)&zclApp_ZCLVersion}}, {BASIC, {ATTRID_BASIC_APPL_VERSION, ZCL_UINT8, R, (void *)&zclApp_ApplicationVersion}}, {BASIC, {ATTRID_BASIC_STACK_VERSION, ZCL_UINT8, R, (void *)&zclApp_StackVersion}}, {BASIC, {ATTRID_BASIC_HW_VERSION, ZCL_UINT8, R, (void *)&zclApp_HWRevision}}, - {BASIC, {ATTRID_BASIC_ZCL_VERSION, ZCL_UINT8, R, (void *)&zclApp_ZCLVersion}}, {BASIC, {ATTRID_BASIC_MANUFACTURER_NAME, ZCL_DATATYPE_CHAR_STR, R, (void *)zclApp_ManufacturerName}}, {BASIC, {ATTRID_BASIC_MODEL_ID, ZCL_DATATYPE_CHAR_STR, R, (void *)zclApp_ModelId}}, - {BASIC, {ATTRID_BASIC_POWER_SOURCE, ZCL_DATATYPE_ENUM8, R, (void *)&zclApp_PowerSource}}, - {BASIC, {ATTRID_CLUSTER_REVISION, ZCL_UINT16, R, (void *)&zclApp_clusterRevision_all}}, {BASIC, {ATTRID_BASIC_DATE_CODE, ZCL_DATATYPE_CHAR_STR, R, (void *)zclApp_DateCode}}, - {BASIC, {ATTRID_BASIC_SW_BUILD_ID, ZCL_DATATYPE_CHAR_STR, R, (void *)zclApp_DateCode}}, - -#if defined(ZIC_BATTERY_MODE) + {BASIC, {ATTRID_BASIC_POWER_SOURCE, ZCL_DATATYPE_ENUM8, R, (void *)&zclApp_PowerSource}}, + + +//#if defined( ZIC_BATTERY_MODE ) {POWER_CFG, {ATTRID_POWER_CFG_BATTERY_VOLTAGE, ZCL_UINT8, RR, (void *)&zclBattery_Voltage}}, -/** - * FYI: calculating battery percentage can be tricky, since this device can be powered from 2xAA or 1xCR2032 batteries - * */ + /** + * FYI: calculating battery percentage can be tricky, since this device can be powered from 2xAA or 1xCR2032 batteries + * */ {POWER_CFG, {ATTRID_POWER_CFG_BATTERY_PERCENTAGE_REMAINING, ZCL_UINT8, RR, (void *)&zclBattery_PercentageRemainig}}, -#endif +//#endif + + {BASIC, {ATTRID_BASIC_SW_BUILD_ID, ZCL_DATATYPE_CHAR_STR, R, (void *)zclApp_DateCode}}, + {BASIC, {ATTRID_CLUSTER_REVISION, ZCL_UINT16, R, (void *)&zclApp_clusterRevision_all}}, + + + + {ZCL_INTERCOM, {ATTRID_STATE, ZCL_DATATYPE_ENUM8, RRW, (void *)&zclApp_State.State}}, {ZCL_INTERCOM, {ATTRID_MODEOPEN, ZCL_DATATYPE_ENUM8, RRW, (void *)&zclApp_Config.ModeOpen}}, @@ -125,7 +131,7 @@ const cId_t zclApp_InClusterList[] = {ZCL_CLUSTER_ID_GEN_BASIC}; #define APP_MAX_INCLUSTERS (sizeof(zclApp_InClusterList) / sizeof(zclApp_InClusterList[0])) -const cId_t zclApp_OutClusterList[] = {ZCL_INTERCOM}; +const cId_t zclApp_OutClusterList[] = {ZCL_INTERCOM, GEN_ON_OFF}; #define APP_MAX_OUT_CLUSTERS (sizeof(zclApp_OutClusterList) / sizeof(zclApp_OutClusterList[0]))