1
0
mirror of https://github.com/Utyff/Zintercom.git synced 2026-01-12 09:17:41 +03:00
fixed the work of inputs and outputs on the target board (button and call)
implemented sleep mode in battery mode (end device)
power attributes are always advertised, (used only in battery mode)
implemented bind to another device (notify about a call to the intercom)
minor changes in the code (syntactic)
This commit is contained in:
lost
2021-01-15 17:13:14 +02:00
parent 0d076dfa6e
commit 8ac322e25f
6 changed files with 73 additions and 86 deletions

View File

@@ -61,7 +61,7 @@ void osalInitTasks(void) {
zclApp_Init(taskID++); zclApp_Init(taskID++);
zclCommissioning_Init(taskID++); zclCommissioning_Init(taskID++);
zclFactoryResetter_Init(taskID++); zclFactoryResetter_Init(taskID++);
#ifdef ZIC_BATTERY_MODE #if defined( ZIC_BATTERY_MODE )
zclBattery_Init(taskID++); zclBattery_Init(taskID++);
#endif #endif
} }

View File

@@ -100,7 +100,7 @@
#define LED3_DDR P1DIR #define LED3_DDR P1DIR
#define LED3_POLARITY ACTIVE_LOW #define LED3_POLARITY ACTIVE_LOW
//ex //ex
#define LED4_BV BV(4) #define LED4_BV BV(5)
#define LED4_SBIT P1_5 #define LED4_SBIT P1_5
#define LED4_DDR P1DIR #define LED4_DDR P1DIR
#define LED4_POLARITY ACTIVE_LOW #define LED4_POLARITY ACTIVE_LOW

View File

@@ -4,7 +4,7 @@
#define TP2_LEGACY_ZC #define TP2_LEGACY_ZC
// patch sdk // patch sdk
// #define ZDSECMGR_TC_ATTEMPT_DEFAULT_KEY TRUE //#define ZDSECMGR_TC_ATTEMPT_DEFAULT_KEY TRUE
#define NWK_AUTO_POLL #define NWK_AUTO_POLL
#define MULTICAST_ENABLED FALSE #define MULTICAST_ENABLED FALSE
@@ -14,9 +14,10 @@
#define ZCL_BASIC #define ZCL_BASIC
#define ZCL_IDENTIFY #define ZCL_IDENTIFY
#define ZCL_REPORTING_DEVICE #define ZCL_REPORTING_DEVICE
#define ZCL_ON_OFF
#define DISABLE_GREENPOWER_BASIC_PROXY #define DISABLE_GREENPOWER_BASIC_PROXY
//#define BDB_FINDING_BINDING_CAPABILITY_ENABLED 1 #define BDB_FINDING_BINDING_CAPABILITY_ENABLED 1
#define BDB_REPORTING TRUE #define BDB_REPORTING TRUE
@@ -25,73 +26,42 @@
#define ISR_KEYINTERRUPT #define ISR_KEYINTERRUPT
#define HAL_LED TRUE #define HAL_LED TRUE
#define HAL_LCD FALSE #define HAL_LCD FALSE
#define BLINK_LEDS TRUE #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) #if !defined(HAL_BOARD_TARGET) && !defined(HAL_BOARD_CHDTECH_DEV)
#error "Board type must be defined" #error "Board type must be defined"
#endif #endif
#if defined( ZIC_BATTERY_MODE )
#ifdef ZIC_BATTERY_MODE #define POWER_SAVING
#define POWER_SAVING
#endif #endif
#if defined(HAL_BOARD_TARGET) #if defined( HAL_BOARD_TARGET )
#define HAL_KEY_P0_INPUT_PINS BV(1) #define HAL_KEY_P0_INPUT_PINS BV(0)
#define HAL_KEY_P0_INPUT_PINS_EDGE HAL_KEY_FALLING_EDGE #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 BV(0)
#define HAL_KEY_P2_INPUT_PINS_EDGE HAL_KEY_FALLING_EDGE #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 #define INT_HEAP_LEN 2256
#elif defined(HAL_BOARD_CHDTECH_DEV) #elif defined( HAL_BOARD_CHDTECH_DEV )
#define HAL_UART_DMA 1
#define HAL_UART_ISR 2
#define HAL_KEY_P0_INPUT_PINS BV(1) #define HAL_KEY_P0_INPUT_PINS BV(1)
#define HAL_KEY_P0_INPUT_PINS_EDGE HAL_KEY_FALLING_EDGE #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 BV(0)
#define HAL_KEY_P2_INPUT_PINS_EDGE HAL_KEY_FALLING_EDGE #define HAL_KEY_P2_INPUT_PINS_EDGE HAL_KEY_FALLING_EDGE
#define DO_DEBUG_UART #define DO_DEBUG_UART
#define INT_HEAP_LEN 2060
#endif #endif
#define FACTORY_RESET_HOLD_TIME_LONG 5000 #define FACTORY_RESET_HOLD_TIME_LONG 5000
#if defined( DO_DEBUG_UART )
#ifdef DO_DEBUG_UART #define HAL_UART_ISR 2
#define HAL_UART TRUE #define HAL_UART TRUE
#define HAL_UART_DMA 1 #define HAL_UART_DMA 1
#define INT_HEAP_LEN 2060
#endif #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" #include "hal_board_cfg.h"

View File

@@ -129,27 +129,36 @@ void zclApp_Init(byte task_id) {
static void zclApp_HandleKeys(byte portAndAction, byte keyCode) { static void zclApp_HandleKeys(byte portAndAction, byte keyCode) {
LREP("zclApp_HandleKeys portAndAction=0x%X keyCode=0x%X\r\n", portAndAction, 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); zclCommissioning_HandleKeys(portAndAction, keyCode);
if (portAndAction & 0x01) { //P0 Ring
afAddrType_t inderect_DstAddr = {.addrMode = (afAddrMode_t)AddrNotPresent, .endPoint = 0, .addr.shortAddr = 0};
if (portAndAction & HAL_KEY_PRESS) { if (portAndAction & HAL_KEY_PRESS) {
zclApp_State.pressTime = osal_getClock(); osal_pwrmgr_task_state(zclApp_TaskID, PWRMGR_HOLD);
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"); 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); 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 & 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 (portAndAction & HAL_KEY_RELEASE) {
#if defined( ZIC_BATTERY_MODE ) #if defined( ZIC_BATTERY_MODE )
zclBattery_Report(); zclBattery_Report();
#endif #endif
if (keyCode == 1) {
LREPMaster("Key release\r\n"); LREPMaster("Key release\r\n");
uint32 holdTime = osal_getClock() - zclApp_State.pressTime; uint32 holdTime = osal_getClock() - zclApp_State.pressTime;
LREP("holdTime = %d \r\n", holdTime); LREP("holdTime = %d \r\n", holdTime);
@@ -160,13 +169,12 @@ static void zclApp_HandleKeys(byte portAndAction, byte keyCode) {
osal_start_reload_timer(zclApp_TaskID, APP_BTN_HOLD_EVT, 50); osal_start_reload_timer(zclApp_TaskID, APP_BTN_HOLD_EVT, 50);
} }
} }
else if (keyCode == 2) {
zclApp_RingEnd();
}
} }
} }
uint16 zclApp_event_loop(uint8 task_id, uint16 events) { uint16 zclApp_event_loop(uint8 task_id, uint16 events) {
LREP("events 0x%x \r\n", events); LREP("events 0x%x \r\n", events);
if (events & SYS_EVENT_MSG) { if (events & SYS_EVENT_MSG) {
@@ -352,7 +360,9 @@ static void zclApp_Report(void) {
static void zclApp_OneReport(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_STATE);
bdb_RepChangedAttrValue(zclApp_FirstEP.EndPoint, ZCL_INTERCOM, ATTRID_MODEOPEN); bdb_RepChangedAttrValue(zclApp_FirstEP.EndPoint, ZCL_INTERCOM, ATTRID_MODEOPEN);
bdb_RepChangedAttrValue(zclApp_FirstEP.EndPoint, ZCL_INTERCOM, ATTRID_MODESOUND);
} }
static void zclApp_BasicResetCB(void) { static void zclApp_BasicResetCB(void) {

View File

@@ -10,6 +10,7 @@ extern "C" {
*/ */
#include "version.h" #include "version.h"
#include "zcl.h" #include "zcl.h"
#include "zcl_general.h"
/********************************************************************* /*********************************************************************
* CONSTANTS * CONSTANTS

View File

@@ -53,7 +53,7 @@ const uint8 zclApp_StackVersion = 4;
const uint8 zclApp_ManufacturerName[] = {6, 'x', 'y', 'z', 'r', 'o', 'e'}; 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'}; 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; const uint8 zclApp_PowerSource = POWER_SOURCE_BATTERY;
#define DEFAULT_TimeReport 30 //minutes #define DEFAULT_TimeReport 30 //minutes
#else #else
@@ -89,24 +89,30 @@ device_state_t zclApp_State = {
*/ */
CONST zclAttrRec_t zclApp_AttrsFirstEP[] = { 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_APPL_VERSION, ZCL_UINT8, R, (void *)&zclApp_ApplicationVersion}},
{BASIC, {ATTRID_BASIC_STACK_VERSION, ZCL_UINT8, R, (void *)&zclApp_StackVersion}}, {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_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_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_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_DATE_CODE, ZCL_DATATYPE_CHAR_STR, R, (void *)zclApp_DateCode}},
{BASIC, {ATTRID_BASIC_SW_BUILD_ID, ZCL_DATATYPE_CHAR_STR, R, (void *)zclApp_DateCode}}, {BASIC, {ATTRID_BASIC_POWER_SOURCE, ZCL_DATATYPE_ENUM8, R, (void *)&zclApp_PowerSource}},
#if defined(ZIC_BATTERY_MODE)
//#if defined( ZIC_BATTERY_MODE )
{POWER_CFG, {ATTRID_POWER_CFG_BATTERY_VOLTAGE, ZCL_UINT8, RR, (void *)&zclBattery_Voltage}}, {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}}, {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_STATE, ZCL_DATATYPE_ENUM8, RRW, (void *)&zclApp_State.State}},
{ZCL_INTERCOM, {ATTRID_MODEOPEN, ZCL_DATATYPE_ENUM8, RRW, (void *)&zclApp_Config.ModeOpen}}, {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])) #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])) #define APP_MAX_OUT_CLUSTERS (sizeof(zclApp_OutClusterList) / sizeof(zclApp_OutClusterList[0]))