Commit d7b3a49f authored by limm's avatar limm

V1.1

parent 44bb2d63
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -380,6 +380,21 @@
<type>1</type>
<locationURI>STUDIO_SDK_LOC/protocol/zigbee/app/util/common/form-and-join.c</locationURI>
</link>
<link>
<name>green-power-client/green-power-client-cli.c</name>
<type>1</type>
<locationURI>STUDIO_SDK_LOC/protocol/zigbee/app/framework/plugin/green-power-client/green-power-client-cli.c</locationURI>
</link>
<link>
<name>green-power-client/green-power-client.c</name>
<type>1</type>
<locationURI>STUDIO_SDK_LOC/protocol/zigbee/app/framework/plugin/green-power-client/green-power-client.c</locationURI>
</link>
<link>
<name>green-power-common/green-power-common.c</name>
<type>1</type>
<locationURI>STUDIO_SDK_LOC/protocol/zigbee/app/framework/plugin/green-power-common/green-power-common.c</locationURI>
</link>
<link>
<name>groups-server/groups-server-cli.c</name>
<type>1</type>
......@@ -425,11 +440,6 @@
<type>1</type>
<locationURI>STUDIO_SDK_LOC/protocol/zigbee/app/framework/plugin/network-steering/network-steering-v2.c</locationURI>
</link>
<link>
<name>network-steering/network-steering.c</name>
<type>1</type>
<locationURI>STUDIO_SDK_LOC/protocol/zigbee/app/framework/plugin/network-steering/network-steering.c</locationURI>
</link>
<link>
<name>nvm3/nvm3_lock.c</name>
<type>1</type>
......
......@@ -52,12 +52,17 @@ EmberStatus Write_Attr(bool Report,uint8_t ep,uint16_t cluster,uint16_t attr, ui
#define Write_MinTemp_Attr(x,ep,data) Write_Attr(x,ep,ZCL_THERMOSTAT_CLUSTER_ID,ZCL_MIN_HEAT_SETPOINT_LIMIT_ATTRIBUTE_ID,(uint8_t*)data,ZCL_INT16S_ATTRIBUTE_TYPE)
typedef struct
{
EmberEUI64 addr1,addr2;
uint8_t bind_flag1,bind_flag2;
}BIND_Info_Store;
typedef struct
{
uint8_t Device_Type;
uint8_t Device_subType;
uint8_t Binding_Device_SrcEP;
uint8_t is_support_winddirect;
uint8_t Binding_Device_SrcEP[2];
uint8_t mcu_software_version;
uint8_t mcu_hardware_version;
}DEVICVE_INFO_ST;
......@@ -65,7 +70,8 @@ typedef struct
extern DEVICVE_INFO_ST g_sDevice_Info;
uint8_t Read_Zigbee_Version(void);
kk_err_t PrivateClusterHandler(EmberAfClusterCommand* cmd);
void kGetBindConfigInfo(void);
void Reset_Binding_Token(void);
/**********************common interface*******************************/
uint8_t Get_Device_Endpoint(void);
uint8_t Get_Binding_Device_EP(void);
......
......@@ -14,7 +14,7 @@
#define Z30_DEVICE_OTA_ENABLE true
//产测总开关, 是否有老化或单板和整机测试
#define Z30_DEVICE_FACTORY_TEST_ENABLE true
#define Z30_DEVICE_FACTORY_TEST_ENABLE false
// 定义是否需要老化,目前一般路由设备需要
#define Z30_DEVICE_AGING_ENABLE false
//单板测试,目前一般是休眠设备需要
......
......@@ -674,12 +674,13 @@ void kNwkFactoryReset(bool is_nwk_indicator)
kk_err_t kNwkClusterBindingObjIsOK(uint8_t endpoint, uint16_t cluster )
{
EmberBindingTableEntry result;
kNwkGetGateWayEui64(g_Eui64GatewayAddr);
for(int index = 0; index < emberAfGetBindingTableSize(); ++index ) {
EmberStatus status = emberGetBinding(index, &result);
if( status == EMBER_SUCCESS && result.type == EMBER_UNICAST_BINDING ) {
if( result.local == endpoint && result.clusterId == cluster ) {
if( result.local == endpoint && result.clusterId == cluster && !MEMCOMPARE(result.identifier, g_Eui64GatewayAddr, EUI64_SIZE)) {
return KET_OK;
}
}
......@@ -700,7 +701,6 @@ kk_err_t kNwkClusterBindingObjIsOK(uint8_t endpoint, uint16_t cluster )
static kk_err_t kNwkClusterBindingObjSet(uint8_t endpoint, uint16_t cluster_id, EmberEUI64 eui64 )
{
kk_err_t err = KET_OK;
EmberStatus status = emberAfPushEndpointNetworkIndex(1);
if( status == EMBER_SUCCESS ) {
......@@ -714,7 +714,7 @@ static kk_err_t kNwkClusterBindingObjSet(uint8_t endpoint, uint16_t cluster_id,
if( EMBER_SUCCESS == status ) {
if( entry.type == EMBER_UNICAST_BINDING ) {
if( entry.local == endpoint && entry.clusterId == cluster_id ) {
if( entry.local == endpoint && entry.clusterId == cluster_id && !MEMCOMPARE(entry.identifier, eui64, EUI64_SIZE)) {
valid_index = index;
break;
}
......@@ -765,7 +765,7 @@ kk_err_t kNwkClusterBindingInspect(void )
for(int ix = 0; ix < BINDING_CLUSTER_MAXN; ++ix ) {
if( g_lstBindingClusterConf[ix].cluster != CLUSTER_UNKNOW ) {
kk_err_t err = kNwkClusterBindingObjIsOK(g_lstBindingClusterConf[ix].endpoint, g_lstBindingClusterConf[ix].cluster);
if( err == KET_ERR_NON_EXIST ) {
if( err != KET_OK ) {
kNwkClusterBindingObjSet(g_lstBindingClusterConf[ix].endpoint, g_lstBindingClusterConf[ix].cluster, g_Eui64GatewayAddr);
}
}else {
......@@ -1810,6 +1810,7 @@ void kUserJoinSucceedProcedureEventHandler(void )
default: break;
}
}
/** @brief Incoming Packet Filter
*
* ** REQUIRES INCLUDING THE PACKET-HANDOFF PLUGIN **
......
......@@ -907,6 +907,7 @@ void kOptTunnelWriteAttributeResponseToGateway(uint8_t recordedZclSeq, uint8_t a
//}
emberAfSendResponse(); // sending...
emberAfClearResponseData();
}
/* DESP: Private protocol message(command) write attribute interface
......
......@@ -45,6 +45,7 @@ void kSetOTAStatus(OTAStatusEnum status)
void kOTAMoudleInit(pOTACallback callback, uint8_t led_id)
{
g_pOTACallback = callback;
iKonkeAfSelfPrint("kOTAMoudleInit = 0x%4x\r\n", g_pOTACallback);
g_u8OtaLedId = led_id;
}
......@@ -52,7 +53,7 @@ static bool kOtaGetGpioStatus(GPIO_Port_TypeDef port, unsigned int pin)
{
return GPIO_PinOutGet(port, pin);
}
extern void kOTAMoudleUserCallback(OTAStatusEnum status);
void kOTAMoudleCallback(OTAStatusEnum status)
{
......@@ -72,9 +73,9 @@ void kOTAMoudleCallback(OTAStatusEnum status)
stOTAGpioStatus.gpio[1].port, stOTAGpioStatus.gpio[1].pin);
#endif
}
if (g_pOTACallback){
g_pOTACallback(status);
iKonkeAfSelfPrint("lmmmm -----OTA GPIO KEEP status(%d),addr = 0x%4x\r\n", g_eOTAStatus,kOTAMoudleUserCallback);
if (kOTAMoudleUserCallback){
kOTAMoudleUserCallback(status);
}else {
if (g_u8OtaLedId != LED_UNKNOW_ID){
kOTAMoudleOptCallback(status);
......
......@@ -27,7 +27,8 @@
#define CREATOR_IS_KONKE_GATEWAY (0x0007)
#define NVM3KEY_IS_KONKE_GATEWAY ( NVM3KEY_DOMAIN_USER | 0x0007 )
#define CREATOR_BINDIND_ADDR_TABLE (0x0008)
#define NVM3KEY_BINDIND_ADDR_TABLE ( NVM3KEY_DOMAIN_USER | 0x0008 )
//#define CREATOR_OPTTUNNEL_CMEI_FLG 0x0007
//#define NVM3KEY_OPTTUNNEL_CMEI_FLG ( NVM3KEY_DOMAIN_USER | 0x0007 )
......@@ -40,6 +41,13 @@
#endif
#ifdef DEFINETYPES
typedef struct{
EmberEUI64 addr1;
EmberEUI64 addr2;
uint8_t bind_flag1;
uint8_t bind_flag2;
}BIND_Info;
typedef BIND_Info tokTypeBindInfo;
//typedef uint8_t tokTypeChunk[33];
#endif //DEFINETYPES
......@@ -51,7 +59,7 @@ DEFINE_BASIC_TOKEN(SINGLE_BOARD_TEST_FLG, uint8_t, 0)
DEFINE_BASIC_TOKEN(FULL_DEVICE_TEST_FLG, uint8_t, 0)
DEFINE_BASIC_TOKEN(AGING_TEST_FLG , uint8_t, 0)
DEFINE_BASIC_TOKEN(INDICATOR_NOT_DISTURB_MODE_FLG, uint8_t, 0)
DEFINE_BASIC_TOKEN(BINDIND_ADDR_TABLE, tokTypeBindInfo, {{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},0,0})
DEFINE_BASIC_TOKEN(NODE_ID, uint16_t, 0xFFFF)
DEFINE_BASIC_TOKEN(IS_KONKE_GATEWAY, uint8_t, 0)
......
......@@ -34,7 +34,7 @@ static uint8_t g_u8MessageSeqRecord = 0XFF;
#define HEART_RAND_MAX_NUM (300 * 1000)
#define MIN_JOINED_NWK_DELAY_TIME_MS (7 * 1000) //重新上电后最短时间,用于判断是否随机延时10~40S上报心跳和CMEI和ISN
#define BOOT_DONE_TIME_MS (2 * 1000)
#define BOOT_DONE_TIME_MS (10)
#if HEART_DEBUG
#define HEARTBEAT_TIME_MS (1 * 60 * 1000)
......@@ -135,13 +135,15 @@ SensorStatusSt g_stSensorStatusBuffer = {
};
extern uint8_t generatedDefaults[];
#define Software_Version 0x10
#define Software_Version 0x11
#define Hardware_Version 0x10
#define MODEID_AIR_MEIDI 0x03008611 //美的线控器
#define MODEID_FAN_Pannel 0x03008604 //新风面板
#define MODEID_ELECTRIC_FLOOR_HEATING 0x03008603 //电地暖
#define MODEID_FAN_CONTROL_PANNEL 0x03008601 //风机盘管
extern BIND_Info_Store Bind_Addr_Table;
void Rewrite_Modeid(uint8_t *modeid,uint8_t software,uint8_t hardware)
{
uint8_t Modeid_Temp[] = "3AFE101003008611" ;
......@@ -186,6 +188,7 @@ void Rewrite_Modeid(uint8_t *modeid,uint8_t software,uint8_t hardware)
iKonkeAfSelfPrint("Finish Rewrite Modeid :\r\n");
iKonkeAfSelfPrintBuffer(Modeid_Temp,sizeof(Modeid_Temp)-1,1);
}
typedef struct {
_IO uint8_t src_endpoint;
_IO uint16_t group_id;
......@@ -425,6 +428,9 @@ void kUserNetworkStatusNotify(NwkStatusEnum nwkst )
//恢复所有绑定属性上报使能
//kSystemSetupStatusSet(SETUP_STATUS_EXIT, 10);
Push_Netwaork_Status(IN_LINE);
iKonkeAfSelfPrint("mac 1,falge=%d mac=%x-%x-%x\r\n",Bind_Addr_Table.bind_flag1, Bind_Addr_Table.addr1[0], Bind_Addr_Table.addr1[1],Bind_Addr_Table.addr1[3]);
iKonkeAfSelfPrint("mac 2,falge=%d mac=%x-%x-%x\r\n",Bind_Addr_Table.bind_flag2, Bind_Addr_Table.addr1[0], Bind_Addr_Table.addr2[1],Bind_Addr_Table.addr2[3]);
emberEventControlSetActive(ikkGetBindInfoEventControl);
iKonkeAfSelfPrint("Joined Network RandTime(%dms) CurrentTime(%ld)\r\n", randTimeMS, currentTimeMS);
......@@ -445,6 +451,7 @@ void kUserNetworkStatusNotify(NwkStatusEnum nwkst )
case (ENS_LEAVED):
{
Push_Netwaork_Status(OUT_LINE);
Reset_Binding_Token();
//network leave open led blink when humanbody exist
//打开打扰模式,即感应到人后快闪2次
kSetIndicatorNotDisturbModeFlg(false);
......@@ -665,7 +672,7 @@ bool kZclClusterReportChangeCallback(uint8_t endpoint, EmberAfClusterId clusterI
//bool kZclClusterReportChangeCallback(uint8_t endpoint, EmberAfClusterId clusterId, EmberAfAttributeId attributeId, EmberAfDifferenceType *difference, uint32_t reportableChange)
{
iKonkeAfSelfPrint("kZclClusterReportChangeCallback: endpoint(%d), clusterId(0x%2x), attributeId(0x%2x).", endpoint, clusterId, attributeId);
if (clusterId == ZCL_DIAGNOSTICS_CLUSTER_ID || clusterId == ZCL_ON_OFF_CLUSTER_ID ||
if (clusterId == ZCL_DIAGNOSTICS_CLUSTER_ID || clusterId == ZCL_ON_OFF_CLUSTER_ID || clusterId == ZCL_TEMP_MEASUREMENT_CLUSTER_ID ||
clusterId == ZCL_FAN_CONTROL_CLUSTER_ID || clusterId == ZCL_THERMOSTAT_CLUSTER_ID ||clusterId == 0xFCC0){
ZclReportTableSt zclReportInfo;
bool status = kZclClusterGetPermitReportInfo(endpoint, clusterId, &zclReportInfo);
......@@ -723,11 +730,11 @@ bool kZclClusterReportChangeCallback(uint8_t endpoint, EmberAfClusterId clusterI
emberEventControlSetInactive(kTargetTemperDelayReportAttrEventControl);
}
//有多控绑定发给其它子设备, 不发给网关
if( kZclNodeIsBindNotGatewayIeeeAddress(endpoint, ZCL_OPT_TUNNEL_CLUSTER_ID) == true) {
iKonkeAfSelfPrint("Multi Control,none report gateway!!!\r\n");
//kOptTunnelReportingPlagiarizeOriginal(endpoint, clusterId, attributeId, CLUSTER_MASK_SERVER);
return false;
}
// if( kZclNodeIsBindNotGatewayIeeeAddress(endpoint, ZCL_OPT_TUNNEL_CLUSTER_ID) == true) {
// iKonkeAfSelfPrint("Multi Control,none report gateway!!!\r\n");
// //kOptTunnelReportingPlagiarizeOriginal(endpoint, clusterId, attributeId, CLUSTER_MASK_SERVER);
// return false;
// }
//kZclClusterSetPermitReportInfo(endpoint, clusterId, true, false, true, false);
return true;
}
......@@ -885,10 +892,10 @@ void kOTAMoudleUserCallback(OTAStatusEnum status)
//退网5S快闪结束后的回调函数,一般用于面板、插座和窗帘面板退网完成后在全部关闭时复位
void kUserNetworkExitCompleteCallback(void)
{
if (kGetFactoryTestStatus() == FTS_FULL_DEVICE_TEST_DONE){
return;
}
emberEventControlSetDelayMS(ikkDelayRebootEventControl, 3000);
// if (kGetFactoryTestStatus() == FTS_FULL_DEVICE_TEST_DONE){
// return;
// }
emberEventControlSetDelayMS(ikkDelayRebootEventControl, 2000);
}
void ikkDelayRebootEventHandler(void)
......@@ -965,14 +972,18 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i
}
iKonkeAfSelfPrint("--------------------------------------\r\n"); //test
if( g_sDevice_Info.mcu_software_version == 0xff) //未读取到版本,重新请求一次
if( (g_sDevice_Info.mcu_software_version == 0xff)) //|| //未读取到版本,重新请求一次
// ((g_sDevice_Info.Device_Type == Device_Type_Air_Condition)&&(g_sDevice_Info.Device_subType == 0)&&
// (sDevice_attr_last.air_condition.air_brand == 0xff) ) ) //未读到空调品牌
{
Query_MCU_Info();
Rewite_Attr_Witchout_Report();
}
switch(opcode) {
case (0x00): // get the device snap.
{
uint8_t i = 0;
if(g_sDevice_Info.Device_Type == 1)
{
args_in_out[i++] = sDevice_attr_last.air_condition.error;
args_in_out[i++] = g_sDevice_Info.mcu_software_version;
args_in_out[i++] = g_sDevice_Info.mcu_hardware_version;
......@@ -987,16 +998,15 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i
args_in_out[i++] = sDevice_attr_last.air_condition.lock_flage;
args_in_out[i++] = sDevice_attr_last.air_condition.correct_temperature;
args_in_out[i++] = sDevice_attr_last.air_condition.screen_save_time;
args_in_out[i++] = sDevice_attr_last.air_condition.air_wind_direct;
args_in_out[i++] = (g_sDevice_Info.is_support_winddirect)?(sDevice_attr_last.air_condition.air_wind_direct):(0xff);
args_in_out[i++] = sDevice_attr_last.air_condition.filter_wash_time >>8;
args_in_out[i++] = sDevice_attr_last.air_condition.filter_wash_time &0xff;
args_in_out[i++] = sDevice_attr_last.air_condition.no_disturb_mode;
}
else if( g_sDevice_Info.Device_Type == 2)
{
//空调线控器
args_in_out[i++] = sDevice_attr_last.air_condition.air_brand;
args_in_out[i++] = sDevice_attr_last.air_condition.air_type;
args_in_out[i++] = sDevice_attr_last.floor_heating.error;
args_in_out[i++] = g_sDevice_Info.mcu_software_version;
args_in_out[i++] = g_sDevice_Info.mcu_hardware_version;
args_in_out[i++] = sDevice_attr_last.floor_heating.on_off;
args_in_out[i++] = sDevice_attr_last.floor_heating.system_type;
args_in_out[i++] = sDevice_attr_last.floor_heating.set_temperature>>8;
......@@ -1008,12 +1018,8 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i
args_in_out[i++] = sDevice_attr_last.floor_heating.correct_temperature;
args_in_out[i++] = sDevice_attr_last.floor_heating.screen_save_time;
args_in_out[i++] = sDevice_attr_last.floor_heating.no_disturb_mode;
}
else if( g_sDevice_Info.Device_Type == 3)
{
args_in_out[i++] = sDevice_attr_last.fan.error;
args_in_out[i++] = g_sDevice_Info.mcu_software_version;
args_in_out[i++] = g_sDevice_Info.mcu_hardware_version;
args_in_out[i++] = sDevice_attr_last.fan.on_off;
args_in_out[i++] = sDevice_attr_last.fan.system_type;
args_in_out[i++] = sDevice_attr_last.fan.real_temperature>>8;
......@@ -1026,7 +1032,7 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i
args_in_out[i++] = sDevice_attr_last.fan.filter_wash_time >>8;
args_in_out[i++] = sDevice_attr_last.fan.filter_wash_time &0xff;
args_in_out[i++] = sDevice_attr_last.fan.no_disturb_mode;
}
iKonkeAfSelfPrint("OOOOOOPCODE: 1(%d), 2(%d), 3(%d)\r\n", args_in_out[1], args_in_out[2], args_in_out[3]);
*length_in_out = i;
break;
......@@ -1055,7 +1061,10 @@ kk_err_t kUserOODMessageIncoming(uint8_t channel, uint8_t opcode, uint8_t args_i
args_in_out[0] = ERR_NO_COMMAND_FORMAT;
}else {
kSetIndicatorNotDisturbModeFlg(mode);
Set_No_Disturb_Mode(mode);
if(channel == 0)
Set_No_Disturb_Mode(g_sDevice_Info.Device_Type,mode);
else
Set_No_Disturb_Mode(channel,mode);
args_in_out[0] = ERR_NO_NONE;
}
iKonkeAfSelfPrint("Disturb Mode(%d)\r\n", mode);
......@@ -1103,6 +1112,7 @@ void kkSystemSetUpEventHandler(void )
{
case SETUP_STATUS_INIT:
if( emberAfNetworkState() == EMBER_JOINED_NETWORK ) {
kGetBindConfigInfo();
}else {
}
iKonkeAfSelfPrint("System setup event.\r\n");
......@@ -1112,8 +1122,8 @@ void kkSystemSetUpEventHandler(void )
kOptTunnelTrytoWriteInstallCode();
kOptTunnelTrytoWriteModelIdenfierMfgToken();
kZclClusterSetPermitReportInfo(1, ZCL_IAS_ZONE_CLUSTER_ID, true, false, true, false);
kZclClusterSetPermitReportInfo(1, ZCL_POWER_CONFIG_CLUSTER_ID, true, false, false, false);
Query_MCU_Info(); //请求mcu版本信息,基本属性类似的;
Rewite_Attr_Witchout_Report();
kSystemSetupStatusSet(SETUP_STATUS_RECOVERY_RELAY, 3000);
break;
......@@ -1314,7 +1324,7 @@ void Process_Device_TypeCallback(uint8_t device_type,uint8_t device_subtype)
{
case Device_Type_Air_Condition:
{
modeid = MODEID_FAN_CONTROL_PANNEL;
modeid = MODEID_AIR_MEIDI;
}
break;
case Device_Type_Floor_Heating:
......
......@@ -63,7 +63,7 @@
#define Contro_No_Disturb_Mode(x) CMD_Control_Emplement(CMD_NO_DISTURB_MODE,(uint8_t *)&x,1)
#define Uart_Send(st,data) uart_send_data(st,0x30,0xff,data,true)
#define Uart_Send(st,data) uart_send_data(st,0x30,0xff,data,false)
#define Uart_Resp(st,seq,data) uart_send_data(st,0x20,seq,data,false)
......@@ -94,6 +94,8 @@ typedef struct
uint16_t screen_save_time; //屏保时间
int8_t correct_temperature; //温度校准值
uint8_t no_disturb_mode; //勿扰模式
uint8_t air_brand; //空调品牌
uint8_t air_type; //空调类型
}__attribute__((packed))AIR_ATTR_ST;
typedef struct
{
......@@ -119,7 +121,7 @@ typedef struct
uint8_t wind_speed; //风速 0 关 1 低 2 中 3 高,4 开,5,自动 ,6 智能 7,中低,8 中高 ,9 超高
uint8_t power_off_time; //倒计时时间
uint16_t filter_wash_time; //滤网清洗时间
uint8_t screen_save_time; //屏保时间
uint16_t screen_save_time; //屏保时间
int8_t correct_temperature; //温度校准值
uint8_t no_disturb_mode; //勿扰模式
}__attribute__((packed))FAN_ATTR_ST;
......@@ -163,8 +165,8 @@ typedef struct
uint8_t uiPaload[50];
}DATA_FIELDED;
void Query_MCU_Info(void);
void Binging_Info_Notify(uint8_t device_type);
void Set_No_Disturb_Mode(uint8_t mode);
void Binging_Info_Notify(uint8_t bind_or_unbind,uint8_t device_type);
void Set_No_Disturb_Mode(uint8_t channel_id,uint8_t mode);
void Set_LCD_OFF(void);
void Set_OTA_CMD(uint8_t OTA_Status);
void Rewite_Attr_Witchout_Report(void);
......
......@@ -46,9 +46,17 @@ on
off
area name off
appSerial=1
compile,EMBER_AF_PLUGIN_NVM3
compile,EMBER_AF_PLUGIN_REPORTING
compile,EMBER_AF_PLUGIN_UPDATE_TC_LINK_KEY
compile,EMBER_AF_PLUGIN_ZIGBEE_PRO_LIBRARY
compile,ON_OFF_CLUSTER
compile,SCENES_CLUSTER
compile,ZDO
enable,EMBER_AF_PLUGIN_NVM3
enable,EMBER_AF_PLUGIN_REPORTING
enable,EMBER_AF_PLUGIN_UPDATE_TC_LINK_KEY
enable,EMBER_AF_PLUGIN_ZIGBEE_PRO_LIBRARY
enable,ON_OFF_CLUSTER
enable,SCENES_CLUSTER
}
......@@ -103,8 +111,8 @@ useHwConfigurator=true
--version:2
}
{setupId:token
application=PATH(ABSOLUTE):D:\Users\11730\SimplicityStudio\v4_workspace\KKAllToOneThermostatPanelMG21SDK665\00ikonke-app\ikk-tokens.h
manufacturing=PATH(ABSOLUTE):D:\Users\11730\SimplicityStudio\v4_workspace\KKAllToOneThermostatPanelMG21SDK665\00ikonke-app\ikk-mfgtokens.h
application=PATH(ISC_RELATIVE):00ikonke-app/ikk-tokens.h
manufacturing=PATH(ISC_RELATIVE):00ikonke-app/ikk-mfgtokens.h
}
{setupId:zclAfv2
intMap:ManufacturingCode = 4712
......@@ -157,7 +165,7 @@ beginAttrList:REPORTABLE
cl:0xFCC0, at:0x100C, di:server, mf:0x0000
endAttrList:REPORTABLE
beginAttributeDefaults
cl:0x0000, at:0x0001, di:server, mf:0x0000 => 0x10
cl:0x0000, at:0x0001, di:server, mf:0x0000 => 0x11
cl:0x0000, at:0x0003, di:server, mf:0x0000 => 0x10
cl:0x0000, at:0x0004, di:server, mf:0x0000 => Konke
cl:0x0000, at:0x0005, di:server, mf:0x0000 => 3AFE101003008611
......@@ -415,15 +423,23 @@ overrideServerCluster:0x0004,yes
overrideServerCluster:0x0005,yes
overrideServerCluster:0x0006,yes
overrideServerCluster:0x0201,yes
overrideServerCluster:0x0202,yes
overrideServerCluster:0x0202,no
overrideMfgServerCluster:0xFCC0,0x0000,yes
endEndpointType
beginEndpointType:Fan
device:zcustom
deviceId:-1
profileId:-1
overrideClientCluster:0x0003,yes
overrideClientCluster:0x0019,yes
overrideServerCluster:0x0000,yes
overrideServerCluster:0x0003,yes
overrideServerCluster:0x0004,yes
overrideServerCluster:0x0005,yes
overrideServerCluster:0x0006,yes
overrideServerCluster:0x0202,yes
overrideServerCluster:0x0402,yes
overrideMfgServerCluster:0xFCC0,0x0000,yes
endEndpointType
beginEndpointType:GP
device:GP-proxy-basic
......@@ -556,11 +572,14 @@ appPlugin:generic-interrupt-control,true
appPlugin:generic-interrupt-control-stub,false
appPlugin:glib,false
appPlugin:gp-library,false
appPlugin:gp-library,true
appPlugin:gpio-sensor,false
appPlugin:gpio-sensor-stub,false
appPlugin:green-power-client,false
appPlugin:green-power-common,false
appPlugin:green-power-client,true
appPlugin:green-power-common,true
appPlugin:green-power-server,false
appPlugin:groups-client,false
appPlugin:groups-server,true
......@@ -784,8 +803,9 @@ AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_NETWORK_STEERING_CHANNEL_MASK,0x02108000
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_NVM3_FLASH_PAGES,8
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_UPDATE_TC_LINK_KEY_MAX_ATTEMPTS,10
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_NVM3_CACHE_SIZE,300
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_REPORTING_TABLE_SIZE,50
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_HARDWARE_VERSION,0x10
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_IMAGE_TYPE_ID,17061
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_NVM3_MAX_OBJECT_SIZE,254
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_REPORTING_TABLE_SIZE,62
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_NVM3_CACHE_SIZE,335
AppPluginOption(efr32~family[M]~series[2]~device_configuration[1]~performance[A]~radio[020]~flash[768K]~temp[I]~package[M]~pins[32]~!module+iar):EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_FIRMWARE_VERSION,0x11
......@@ -13,7 +13,11 @@
EmberEventControl emberAfOtaBootloadClusterClientTickCallbackControl1; \
EmberEventControl emberAfIdentifyClusterServerTickCallbackControl2; \
EmberEventControl emberAfOtaBootloadClusterClientTickCallbackControl2; \
EmberEventControl emberAfIdentifyClusterServerTickCallbackControl3; \
EmberEventControl emberAfOtaBootloadClusterClientTickCallbackControl3; \
extern EmberEventControl emberAfPluginFormAndJoinCleanupEventControl; \
extern EmberEventControl emberAfPluginGreenPowerClientChannelEventControl; \
extern EmberEventControl emberAfPluginGreenPowerClientExitCommissioningEventControl; \
extern EmberEventControl emberAfPluginNetworkSteeringFinishSteeringEventControl; \
extern EmberEventControl emberAfPluginOtaStorageSimpleEepromPageEraseEventControl; \
extern EmberEventControl emberAfPluginReportingTickEventControl; \
......@@ -37,6 +41,8 @@
extern EmberEventControl kUserJoinSucceedProcedureEventControl; \
extern EmberEventControl kkSystemSetUpEventControl; \
extern void emberAfPluginFormAndJoinCleanupEventHandler(void); \
extern void emberAfPluginGreenPowerClientChannelEventHandler(void); \
extern void emberAfPluginGreenPowerClientExitCommissioningEventHandler(void); \
extern void emberAfPluginNetworkSteeringFinishSteeringEventHandler(void); \
extern void emberAfPluginOtaStorageSimpleEepromPageEraseEventHandler(void); \
extern void emberAfPluginReportingTickEventHandler(void); \
......@@ -70,6 +76,8 @@
void emberAfOtaBootloadClusterClientTickCallbackWrapperFunction1(void) { clusterTickWrapper(&emberAfOtaBootloadClusterClientTickCallbackControl1, emberAfOtaBootloadClusterClientTickCallback, 1); } \
void emberAfIdentifyClusterServerTickCallbackWrapperFunction2(void) { clusterTickWrapper(&emberAfIdentifyClusterServerTickCallbackControl2, emberAfIdentifyClusterServerTickCallback, 2); } \
void emberAfOtaBootloadClusterClientTickCallbackWrapperFunction2(void) { clusterTickWrapper(&emberAfOtaBootloadClusterClientTickCallbackControl2, emberAfOtaBootloadClusterClientTickCallback, 2); } \
void emberAfIdentifyClusterServerTickCallbackWrapperFunction3(void) { clusterTickWrapper(&emberAfIdentifyClusterServerTickCallbackControl3, emberAfIdentifyClusterServerTickCallback, 3); } \
void emberAfOtaBootloadClusterClientTickCallbackWrapperFunction3(void) { clusterTickWrapper(&emberAfOtaBootloadClusterClientTickCallbackControl3, emberAfOtaBootloadClusterClientTickCallback, 3); } \
// EmberEventData structs used to populate the EmberEventData table
......@@ -78,7 +86,11 @@
{ &emberAfOtaBootloadClusterClientTickCallbackControl1, emberAfOtaBootloadClusterClientTickCallbackWrapperFunction1 }, \
{ &emberAfIdentifyClusterServerTickCallbackControl2, emberAfIdentifyClusterServerTickCallbackWrapperFunction2 }, \
{ &emberAfOtaBootloadClusterClientTickCallbackControl2, emberAfOtaBootloadClusterClientTickCallbackWrapperFunction2 }, \
{ &emberAfIdentifyClusterServerTickCallbackControl3, emberAfIdentifyClusterServerTickCallbackWrapperFunction3 }, \
{ &emberAfOtaBootloadClusterClientTickCallbackControl3, emberAfOtaBootloadClusterClientTickCallbackWrapperFunction3 }, \
{ &emberAfPluginFormAndJoinCleanupEventControl, emberAfPluginFormAndJoinCleanupEventHandler }, \
{ &emberAfPluginGreenPowerClientChannelEventControl, emberAfPluginGreenPowerClientChannelEventHandler }, \
{ &emberAfPluginGreenPowerClientExitCommissioningEventControl, emberAfPluginGreenPowerClientExitCommissioningEventHandler }, \
{ &emberAfPluginNetworkSteeringFinishSteeringEventControl, emberAfPluginNetworkSteeringFinishSteeringEventHandler }, \
{ &emberAfPluginOtaStorageSimpleEepromPageEraseEventControl, emberAfPluginOtaStorageSimpleEepromPageEraseEventHandler }, \
{ &emberAfPluginReportingTickEventControl, emberAfPluginReportingTickEventHandler }, \
......@@ -108,7 +120,11 @@
"Over the Air Bootloading Cluster Client EP 1", \
"Identify Cluster Server EP 2", \
"Over the Air Bootloading Cluster Client EP 2", \
"Identify Cluster Server EP 3", \
"Over the Air Bootloading Cluster Client EP 3", \
"Form and Join Library Plugin Cleanup", \
"Green Power Client Plugin Channel", \
"Green Power Client Plugin ExitCommissioning", \
"Network Steering Plugin FinishSteering", \
"OTA Simple Storage EEPROM Driver Plugin PageErase", \
"Reporting Plugin Tick", \
......@@ -134,13 +150,15 @@
// The length of the event context table used to track and retrieve cluster events
#define EMBER_AF_EVENT_CONTEXT_LENGTH 4
#define EMBER_AF_EVENT_CONTEXT_LENGTH 6
// EmberAfEventContext structs used to populate the EmberAfEventContext table
#define EMBER_AF_GENERATED_EVENT_CONTEXT { 0x1, 0x3, false, EMBER_AF_LONG_POLL, EMBER_AF_OK_TO_SLEEP, &emberAfIdentifyClusterServerTickCallbackControl1}, \
{ 0x1, 0x19, true, EMBER_AF_LONG_POLL, EMBER_AF_OK_TO_SLEEP, &emberAfOtaBootloadClusterClientTickCallbackControl1}, \
{ 0x2, 0x3, false, EMBER_AF_LONG_POLL, EMBER_AF_OK_TO_SLEEP, &emberAfIdentifyClusterServerTickCallbackControl2}, \
{ 0x2, 0x19, true, EMBER_AF_LONG_POLL, EMBER_AF_OK_TO_SLEEP, &emberAfOtaBootloadClusterClientTickCallbackControl2}
{ 0x2, 0x19, true, EMBER_AF_LONG_POLL, EMBER_AF_OK_TO_SLEEP, &emberAfOtaBootloadClusterClientTickCallbackControl2}, \
{ 0x3, 0x3, false, EMBER_AF_LONG_POLL, EMBER_AF_OK_TO_SLEEP, &emberAfIdentifyClusterServerTickCallbackControl3}, \
{ 0x3, 0x19, true, EMBER_AF_LONG_POLL, EMBER_AF_OK_TO_SLEEP, &emberAfOtaBootloadClusterClientTickCallbackControl3}
#endif // __AF_GEN_EVENT__
......@@ -13,6 +13,8 @@
EmberEventControl emberAfOtaBootloadClusterClientTickCallbackControl1; \
EmberEventControl emberAfIdentifyClusterServerTickCallbackControl2; \
EmberEventControl emberAfOtaBootloadClusterClientTickCallbackControl2; \
EmberEventControl emberAfIdentifyClusterServerTickCallbackControl3; \
EmberEventControl emberAfOtaBootloadClusterClientTickCallbackControl3; \
extern EmberEventControl emberAfPluginFormAndJoinCleanupEventControl; \
extern EmberEventControl emberAfPluginNetworkSteeringFinishSteeringEventControl; \
extern EmberEventControl emberAfPluginOtaStorageSimpleEepromPageEraseEventControl; \
......@@ -70,6 +72,8 @@
void emberAfOtaBootloadClusterClientTickCallbackWrapperFunction1(void) { clusterTickWrapper(&emberAfOtaBootloadClusterClientTickCallbackControl1, emberAfOtaBootloadClusterClientTickCallback, 1); } \
void emberAfIdentifyClusterServerTickCallbackWrapperFunction2(void) { clusterTickWrapper(&emberAfIdentifyClusterServerTickCallbackControl2, emberAfIdentifyClusterServerTickCallback, 2); } \
void emberAfOtaBootloadClusterClientTickCallbackWrapperFunction2(void) { clusterTickWrapper(&emberAfOtaBootloadClusterClientTickCallbackControl2, emberAfOtaBootloadClusterClientTickCallback, 2); } \
void emberAfIdentifyClusterServerTickCallbackWrapperFunction3(void) { clusterTickWrapper(&emberAfIdentifyClusterServerTickCallbackControl3, emberAfIdentifyClusterServerTickCallback, 3); } \
void emberAfOtaBootloadClusterClientTickCallbackWrapperFunction3(void) { clusterTickWrapper(&emberAfOtaBootloadClusterClientTickCallbackControl3, emberAfOtaBootloadClusterClientTickCallback, 3); } \
// EmberEventData structs used to populate the EmberEventData table
......@@ -78,6 +82,8 @@
{ &emberAfOtaBootloadClusterClientTickCallbackControl1, emberAfOtaBootloadClusterClientTickCallbackWrapperFunction1 }, \
{ &emberAfIdentifyClusterServerTickCallbackControl2, emberAfIdentifyClusterServerTickCallbackWrapperFunction2 }, \
{ &emberAfOtaBootloadClusterClientTickCallbackControl2, emberAfOtaBootloadClusterClientTickCallbackWrapperFunction2 }, \
{ &emberAfIdentifyClusterServerTickCallbackControl3, emberAfIdentifyClusterServerTickCallbackWrapperFunction3 }, \
{ &emberAfOtaBootloadClusterClientTickCallbackControl3, emberAfOtaBootloadClusterClientTickCallbackWrapperFunction3 }, \
{ &emberAfPluginFormAndJoinCleanupEventControl, emberAfPluginFormAndJoinCleanupEventHandler }, \
{ &emberAfPluginNetworkSteeringFinishSteeringEventControl, emberAfPluginNetworkSteeringFinishSteeringEventHandler }, \
{ &emberAfPluginOtaStorageSimpleEepromPageEraseEventControl, emberAfPluginOtaStorageSimpleEepromPageEraseEventHandler }, \
......@@ -108,6 +114,8 @@
"Over the Air Bootloading Cluster Client EP 1", \
"Identify Cluster Server EP 2", \
"Over the Air Bootloading Cluster Client EP 2", \
"Identify Cluster Server EP 3", \
"Over the Air Bootloading Cluster Client EP 3", \
"Form and Join Library Plugin Cleanup", \
"Network Steering Plugin FinishSteering", \
"OTA Simple Storage EEPROM Driver Plugin PageErase", \
......@@ -119,28 +127,30 @@
"Ikk uart msg dispatch event control", \
"Ikk uart recv loop check event control", \
"Ikk uart sent loop check event control", \
"Event data", \
"K delay clear flag event control", \
"K delay clear sequence event control", \
"K delay set led status event control", \
"K factory test event control", \
"K nwk rejoin procedure event control", \
"K endpoint1 delay report attr event control", \
"K on off delay report attr event control", \
"K opt tunnel mto r r delay rsp event control", \
"K endpoint2 delay report attr event control", \
"K endpoint3 delay report attr event control", \
"K system mode delay report attr event control", \
"K target temper delay report attr event control", \
"K tick event control", \
"K user join succeed procedure event control", \
"Kk system set up event control", \
// The length of the event context table used to track and retrieve cluster events
#define EMBER_AF_EVENT_CONTEXT_LENGTH 4
#define EMBER_AF_EVENT_CONTEXT_LENGTH 6
// EmberAfEventContext structs used to populate the EmberAfEventContext table
#define EMBER_AF_GENERATED_EVENT_CONTEXT { 0x1, 0x3, false, EMBER_AF_LONG_POLL, EMBER_AF_OK_TO_SLEEP, &emberAfIdentifyClusterServerTickCallbackControl1}, \
{ 0x1, 0x19, true, EMBER_AF_LONG_POLL, EMBER_AF_OK_TO_SLEEP, &emberAfOtaBootloadClusterClientTickCallbackControl1}, \
{ 0x2, 0x3, false, EMBER_AF_LONG_POLL, EMBER_AF_OK_TO_SLEEP, &emberAfIdentifyClusterServerTickCallbackControl2}, \
{ 0x2, 0x19, true, EMBER_AF_LONG_POLL, EMBER_AF_OK_TO_SLEEP, &emberAfOtaBootloadClusterClientTickCallbackControl2}
{ 0x2, 0x19, true, EMBER_AF_LONG_POLL, EMBER_AF_OK_TO_SLEEP, &emberAfOtaBootloadClusterClientTickCallbackControl2}, \
{ 0x3, 0x3, false, EMBER_AF_LONG_POLL, EMBER_AF_OK_TO_SLEEP, &emberAfIdentifyClusterServerTickCallbackControl3}, \
{ 0x3, 0x19, true, EMBER_AF_LONG_POLL, EMBER_AF_OK_TO_SLEEP, &emberAfOtaBootloadClusterClientTickCallbackControl3}
#endif // __AF_GEN_EVENT__
......@@ -25,6 +25,9 @@ EmberAfStatus emberAfScenesClusterServerCommandParse(EmberAfClusterCommand *cmd)
// Cluster: On/off, server
EmberAfStatus emberAfOnOffClusterServerCommandParse(EmberAfClusterCommand *cmd);
// Cluster: Green Power, client
EmberAfStatus emberAfGreenPowerClusterClientCommandParse(EmberAfClusterCommand *cmd);
// Cluster: Thermostat, server
EmberAfStatus emberAfThermostatClusterServerCommandParse(EmberAfClusterCommand *cmd);
......
......@@ -90,14 +90,14 @@ def GBL():
def OTA():
if not '"%PROJECT_DIR%\..\\..\\..\\..\\..\\..\\SiliconLabs\\SimplicityStudio\\v4\\developer\\sdks\\gecko_sdk_suite\\v2.6\\protocol\\zigbee\\tool\\image-builder\\image-builder-windows.exe" --create "%TARGET_BPATH%.ota" --version 0x10 --manuf-id 0x1268 --image-type 17061 --tag-id 0x0000 --tag-file "%TARGET_BPATH%.gbl" --string "EBL kkAllInOneFloorHeatingMG21SDK665V1"':
if not '"%PROJECT_DIR%\..\\..\\..\\..\\..\\..\\SiliconLabs\\SimplicityStudio\\v4\\developer\\sdks\\gecko_sdk_suite\\v2.6\\protocol\\zigbee\\tool\\image-builder\\image-builder-windows.exe" --create "%TARGET_BPATH%.ota" --version 0x12 --manuf-id 0x1268 --image-type 17061 --tag-id 0x0000 --tag-file "%TARGET_BPATH%.gbl" --string "EBL kkAllInOneFloorHeatingMG21SDK665V1"':
sys.exit(0)
print (" ")
print ("This creates a ZigBee OTA file if the OTA Client Policy Plugin has been enabled.")
print ("It uses the parameters defined there. ")
print (" ")
# wine needed by postbuild script under studio for mac/linux
IMAGE_BUILDER = '"%PROJECT_DIR%\..\\..\\..\\..\\..\\..\\SiliconLabs\\SimplicityStudio\\v4\\developer\\sdks\\gecko_sdk_suite\\v2.6\\protocol\\zigbee\\tool\\image-builder\\image-builder-windows.exe" --create "%TARGET_BPATH%.ota" --version 0x10 --manuf-id 0x1268 --image-type 17061 --tag-id 0x0000 --tag-file "%TARGET_BPATH%.gbl" --string "EBL kkAllInOneFloorHeatingMG21SDK665V1"'.replace("\t", "\\t")
IMAGE_BUILDER = '"%PROJECT_DIR%\..\\..\\..\\..\\..\\..\\SiliconLabs\\SimplicityStudio\\v4\\developer\\sdks\\gecko_sdk_suite\\v2.6\\protocol\\zigbee\\tool\\image-builder\\image-builder-windows.exe" --create "%TARGET_BPATH%.ota" --version 0x12 --manuf-id 0x1268 --image-type 17061 --tag-id 0x0000 --tag-file "%TARGET_BPATH%.gbl" --string "EBL kkAllInOneFloorHeatingMG21SDK665V1"'.replace("\t", "\\t")
WINE_CMD = WINE.replace("cmd /C ","") if not "echo" in IMAGE_BUILDER else WINE
OTA_COMMAND = WINE_CMD + IMAGE_BUILDER
OTA_COMMAND = OTA_COMMAND.replace("%PROJECT_DIR%", PROJECT_DIR)
......
......@@ -222,7 +222,7 @@
<state>APPLICATION_MFG_TOKEN_HEADER="znet-mfg-token.h"</state>
<state>MBEDTLS_DEVICE_ACCELERATION_CONFIG_FILE="configs/config-device-acceleration.h"</state>
<state>MBEDTLS_DEVICE_ACCELERATION_CONFIG_APP_FILE="config-device-acceleration-app.h"</state>
<state>NVM3_FLASH_PAGES=8</state><state>NVM3_DEFAULT_CACHE_SIZE=300</state><state>NVM3_MAX_OBJECT_SIZE=254</state><state>NVM3_DEFAULT_REPACK_HEADROOM=0</state><state>PHY_RAIL=1</state>
<state>NVM3_FLASH_PAGES=8</state><state>NVM3_DEFAULT_CACHE_SIZE=335</state><state>NVM3_MAX_OBJECT_SIZE=254</state><state>NVM3_DEFAULT_REPACK_HEADROOM=0</state><state>PHY_RAIL=1</state>
</option>
<option>
<name>CCPreprocFile</name>
......@@ -610,7 +610,7 @@
<state>APPLICATION_MFG_TOKEN_HEADER="znet-mfg-token.h"</state>
<state>MBEDTLS_DEVICE_ACCELERATION_CONFIG_FILE="configs/config-device-acceleration.h"</state>
<state>MBEDTLS_DEVICE_ACCELERATION_CONFIG_APP_FILE="config-device-acceleration-app.h"</state>
<state>NVM3_FLASH_PAGES=8</state><state>NVM3_DEFAULT_CACHE_SIZE=300</state><state>NVM3_MAX_OBJECT_SIZE=254</state><state>NVM3_DEFAULT_REPACK_HEADROOM=0</state><state>PHY_RAIL=1</state>
<state>NVM3_FLASH_PAGES=8</state><state>NVM3_DEFAULT_CACHE_SIZE=335</state><state>NVM3_MAX_OBJECT_SIZE=254</state><state>NVM3_DEFAULT_REPACK_HEADROOM=0</state><state>PHY_RAIL=1</state>
</option>
<option>
<name>AList</name>
......@@ -1256,7 +1256,7 @@
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/protocol\zigbee\build\debug-basic-stub-library-cortexm3-iar-efr32mg21-rail\debug-basic-stub-library.a</name></file>
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/protocol\zigbee\build\debug-extended-stub-library-cortexm3-iar-efr32mg21-rail\debug-extended-stub-library.a</name></file>
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/protocol\zigbee\build\end-device-bind-stub-library-cortexm3-iar-efr32mg21-rail\end-device-bind-stub-library.a</name></file>
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/protocol\zigbee\build\gp-stub-library-cortexm3-iar-efr32mg21-rail\gp-stub-library.a</name></file>
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/protocol\zigbee\build\gp-library-cortexm3-iar-efr32mg21-rail\gp-library.a</name></file>
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/protocol\zigbee\build\hal-library-cortexm3-iar-efr32mg21-rail\hal-library.a</name></file>
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/protocol\zigbee\build\install-code-library-cortexm3-iar-efr32mg21-rail\install-code-library.a</name></file>
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/protocol\zigbee\build\mfglib-library-cortexm3-iar-efr32mg21-rail\mfglib-library.a</name></file>
......@@ -1304,6 +1304,9 @@
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/protocol\zigbee\app\util\common\form-and-join.c</name></file>
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/protocol\zigbee\app\util\common\form-and-join-node-adapter.c</name></file>
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/util\plugin\plugin-common\generic-interrupt-control\generic-interrupt-control-efr32.c</name></file>
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/protocol\zigbee\app\framework\plugin\green-power-client\green-power-client.c</name></file>
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/protocol\zigbee\app\framework\plugin\green-power-client\green-power-client-cli.c</name></file>
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/protocol\zigbee\app\framework\plugin\green-power-common\green-power-common.c</name></file>
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/protocol\zigbee\app\framework\plugin\groups-server\groups-server.c</name></file>
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/protocol\zigbee\app\framework\plugin\groups-server\groups-server-cli.c</name></file>
<file><name>$PROJ_DIR$/../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/platform\base\hal\micro\cortexm3\efm32\hal-config.c</name></file>
......
......@@ -68,20 +68,20 @@
#define EMBER_AF_DEFAULT_RESPONSE_POLICY_CONDITIONAL
/**** Cluster endpoint counts ****/
#define EMBER_AF_BASIC_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_IDENTIFY_CLUSTER_CLIENT_ENDPOINT_COUNT (2)
#define EMBER_AF_IDENTIFY_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_GROUPS_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_SCENES_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_ON_OFF_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_OTA_BOOTLOAD_CLUSTER_CLIENT_ENDPOINT_COUNT (2)
#define EMBER_AF_BASIC_CLUSTER_SERVER_ENDPOINT_COUNT (3)
#define EMBER_AF_IDENTIFY_CLUSTER_CLIENT_ENDPOINT_COUNT (3)
#define EMBER_AF_IDENTIFY_CLUSTER_SERVER_ENDPOINT_COUNT (3)
#define EMBER_AF_GROUPS_CLUSTER_SERVER_ENDPOINT_COUNT (3)
#define EMBER_AF_SCENES_CLUSTER_SERVER_ENDPOINT_COUNT (3)
#define EMBER_AF_ON_OFF_CLUSTER_SERVER_ENDPOINT_COUNT (3)
#define EMBER_AF_OTA_BOOTLOAD_CLUSTER_CLIENT_ENDPOINT_COUNT (3)
#define EMBER_AF_GREEN_POWER_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
#define EMBER_AF_THERMOSTAT_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_FAN_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT (3)
#define EMBER_AF_FAN_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_TEMP_MEASUREMENT_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_DIAGNOSTICS_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_OPT_TUNNEL_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
#define EMBER_AF_OPT_TUNNEL_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_OPT_TUNNEL_CLUSTER_SERVER_ENDPOINT_COUNT (3)
/**** Cluster Endpoint Summaries ****/
#define EMBER_AF_MAX_SERVER_CLUSTER_COUNT (9)
......@@ -150,6 +150,12 @@
#define EMBER_CALLBACK_GROUPS_CLUSTER_ADD_GROUP_IF_IDENTIFYING
#define EMBER_CALLBACK_GROUPS_CLUSTER_ENDPOINT_IN_GROUP
#define EMBER_CALLBACK_GROUPS_CLUSTER_CLEAR_GROUP_TABLE
#define EMBER_CALLBACK_GREEN_POWER_CLUSTER_GP_NOTIFICATION_RESPONSE
#define EMBER_CALLBACK_GREEN_POWER_CLUSTER_GP_PAIRING
#define EMBER_CALLBACK_GREEN_POWER_CLUSTER_GP_PROXY_COMMISSIONING_MODE
#define EMBER_CALLBACK_GREEN_POWER_CLUSTER_GP_RESPONSE
#define EMBER_CALLBACK_GREEN_POWER_CLUSTER_GP_SINK_TABLE_RESPONSE
#define EMBER_CALLBACK_GREEN_POWER_CLUSTER_GP_PROXY_TABLE_REQUEST
#define EMBER_CALLBACK_CONFIGURE_REPORTING_COMMAND
#define EMBER_CALLBACK_READ_REPORTING_CONFIGURATION_COMMAND
#define EMBER_CALLBACK_CLEAR_REPORT_TABLE
......@@ -271,6 +277,25 @@
// Use this macro to check if Generic GPIO Interrupt Controller plugin is included
#define EMBER_AF_PLUGIN_GENERIC_INTERRUPT_CONTROL
// Use this macro to check if Green Power Library plugin is included
#define EMBER_AF_PLUGIN_GP_LIBRARY
// User options for plugin Green Power Library
#define EMBER_GP_PROXY_TABLE_SIZE 5
#define EMBER_GP_SINK_TABLE_SIZE 0
// Use this macro to check if Green Power Client plugin is included
#define EMBER_AF_PLUGIN_GREEN_POWER_CLIENT
#define EZSP_APPLICATION_HAS_GPEP_INCOMING_MESSAGE_HANDLER
#define EZSP_APPLICATION_HAS_DGP_SENT_HANDLER
// User options for plugin Green Power Client
#define EMBER_AF_PLUGIN_GREEN_POWER_CLIENT_GPP_COMMISSIONING_WINDOW 160
#define EMBER_AF_PLUGIN_GREEN_POWER_CLIENT_GPP_DUPLICATE_TIMEOUT_SEC 160
#define EMBER_AF_PLUGIN_GREEN_POWER_CLIENT_MAX_ADDR_ENTRIES 3
#define EMBER_AF_PLUGIN_GREEN_POWER_CLIENT_MAX_SEQ_NUM_ENTRIES_PER_ADDR 4
// Use this macro to check if Green Power Common plugin is included
#define EMBER_AF_PLUGIN_GREEN_POWER_COMMON
// Use this macro to check if Groups Server Cluster plugin is included
#define EMBER_AF_PLUGIN_GROUPS_SERVER
......@@ -308,7 +333,7 @@
#define EMBER_AF_PLUGIN_NVM3
// User options for plugin NVM3 Library
#define EMBER_AF_PLUGIN_NVM3_FLASH_PAGES 8
#define EMBER_AF_PLUGIN_NVM3_CACHE_SIZE 300
#define EMBER_AF_PLUGIN_NVM3_CACHE_SIZE 335
#define EMBER_AF_PLUGIN_NVM3_MAX_OBJECT_SIZE 254
#define EMBER_AF_PLUGIN_NVM3_USER_REPACK_HEADROOM 0
......@@ -386,7 +411,7 @@
// Use this macro to check if Reporting plugin is included
#define EMBER_AF_PLUGIN_REPORTING
// User options for plugin Reporting
#define EMBER_AF_PLUGIN_REPORTING_TABLE_SIZE 50
#define EMBER_AF_PLUGIN_REPORTING_TABLE_SIZE 62
#define EMBER_AF_PLUGIN_REPORTING_ENABLE_GROUP_BOUND_REPORTS
// Use this macro to check if Scan Dispatch plugin is included
......
......@@ -68,20 +68,20 @@
#define EMBER_AF_DEFAULT_RESPONSE_POLICY_CONDITIONAL
/**** Cluster endpoint counts ****/
#define EMBER_AF_BASIC_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_IDENTIFY_CLUSTER_CLIENT_ENDPOINT_COUNT (2)
#define EMBER_AF_IDENTIFY_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_GROUPS_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_SCENES_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_ON_OFF_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_OTA_BOOTLOAD_CLUSTER_CLIENT_ENDPOINT_COUNT (2)
#define EMBER_AF_BASIC_CLUSTER_SERVER_ENDPOINT_COUNT (3)
#define EMBER_AF_IDENTIFY_CLUSTER_CLIENT_ENDPOINT_COUNT (3)
#define EMBER_AF_IDENTIFY_CLUSTER_SERVER_ENDPOINT_COUNT (3)
#define EMBER_AF_GROUPS_CLUSTER_SERVER_ENDPOINT_COUNT (3)
#define EMBER_AF_SCENES_CLUSTER_SERVER_ENDPOINT_COUNT (3)
#define EMBER_AF_ON_OFF_CLUSTER_SERVER_ENDPOINT_COUNT (3)
#define EMBER_AF_OTA_BOOTLOAD_CLUSTER_CLIENT_ENDPOINT_COUNT (3)
#define EMBER_AF_GREEN_POWER_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
#define EMBER_AF_THERMOSTAT_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_FAN_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT (3)
#define EMBER_AF_FAN_CONTROL_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_TEMP_MEASUREMENT_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_DIAGNOSTICS_CLUSTER_SERVER_ENDPOINT_COUNT (1)
#define EMBER_AF_OPT_TUNNEL_CLUSTER_CLIENT_ENDPOINT_COUNT (1)
#define EMBER_AF_OPT_TUNNEL_CLUSTER_SERVER_ENDPOINT_COUNT (2)
#define EMBER_AF_OPT_TUNNEL_CLUSTER_SERVER_ENDPOINT_COUNT (3)
/**** Cluster Endpoint Summaries ****/
#define EMBER_AF_MAX_SERVER_CLUSTER_COUNT (9)
......@@ -150,6 +150,12 @@
#define EMBER_CALLBACK_GROUPS_CLUSTER_ADD_GROUP_IF_IDENTIFYING
#define EMBER_CALLBACK_GROUPS_CLUSTER_ENDPOINT_IN_GROUP
#define EMBER_CALLBACK_GROUPS_CLUSTER_CLEAR_GROUP_TABLE
#define EMBER_CALLBACK_GREEN_POWER_CLUSTER_GP_NOTIFICATION_RESPONSE
#define EMBER_CALLBACK_GREEN_POWER_CLUSTER_GP_PAIRING
#define EMBER_CALLBACK_GREEN_POWER_CLUSTER_GP_PROXY_COMMISSIONING_MODE
#define EMBER_CALLBACK_GREEN_POWER_CLUSTER_GP_RESPONSE
#define EMBER_CALLBACK_GREEN_POWER_CLUSTER_GP_SINK_TABLE_RESPONSE
#define EMBER_CALLBACK_GREEN_POWER_CLUSTER_GP_PROXY_TABLE_REQUEST
#define EMBER_CALLBACK_CONFIGURE_REPORTING_COMMAND
#define EMBER_CALLBACK_READ_REPORTING_CONFIGURATION_COMMAND
#define EMBER_CALLBACK_CLEAR_REPORT_TABLE
......@@ -271,6 +277,25 @@
// Use this macro to check if Generic GPIO Interrupt Controller plugin is included
#define EMBER_AF_PLUGIN_GENERIC_INTERRUPT_CONTROL
// Use this macro to check if Green Power Library plugin is included
#define EMBER_AF_PLUGIN_GP_LIBRARY
// User options for plugin Green Power Library
#define EMBER_GP_PROXY_TABLE_SIZE 5
#define EMBER_GP_SINK_TABLE_SIZE 0
// Use this macro to check if Green Power Client plugin is included
#define EMBER_AF_PLUGIN_GREEN_POWER_CLIENT
#define EZSP_APPLICATION_HAS_GPEP_INCOMING_MESSAGE_HANDLER
#define EZSP_APPLICATION_HAS_DGP_SENT_HANDLER
// User options for plugin Green Power Client
#define EMBER_AF_PLUGIN_GREEN_POWER_CLIENT_GPP_COMMISSIONING_WINDOW 160
#define EMBER_AF_PLUGIN_GREEN_POWER_CLIENT_GPP_DUPLICATE_TIMEOUT_SEC 160
#define EMBER_AF_PLUGIN_GREEN_POWER_CLIENT_MAX_ADDR_ENTRIES 3
#define EMBER_AF_PLUGIN_GREEN_POWER_CLIENT_MAX_SEQ_NUM_ENTRIES_PER_ADDR 4
// Use this macro to check if Green Power Common plugin is included
#define EMBER_AF_PLUGIN_GREEN_POWER_COMMON
// Use this macro to check if Groups Server Cluster plugin is included
#define EMBER_AF_PLUGIN_GROUPS_SERVER
......@@ -308,7 +333,7 @@
#define EMBER_AF_PLUGIN_NVM3
// User options for plugin NVM3 Library
#define EMBER_AF_PLUGIN_NVM3_FLASH_PAGES 8
#define EMBER_AF_PLUGIN_NVM3_CACHE_SIZE 300
#define EMBER_AF_PLUGIN_NVM3_CACHE_SIZE 335
#define EMBER_AF_PLUGIN_NVM3_MAX_OBJECT_SIZE 254
#define EMBER_AF_PLUGIN_NVM3_USER_REPACK_HEADROOM 0
......@@ -344,7 +369,7 @@
#define CUSTOMER_APPLICATION_VERSION EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_FIRMWARE_VERSION
// User options for plugin OTA Bootload Cluster Client Policy
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_IMAGE_TYPE_ID 17061
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_FIRMWARE_VERSION 16
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_FIRMWARE_VERSION 18
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_HARDWARE_VERSION 16
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_EBL_VERIFICATION
#define EMBER_AF_PLUGIN_OTA_CLIENT_POLICY_DELETE_FAILED_DOWNLOADS
......@@ -386,7 +411,7 @@
// Use this macro to check if Reporting plugin is included
#define EMBER_AF_PLUGIN_REPORTING
// User options for plugin Reporting
#define EMBER_AF_PLUGIN_REPORTING_TABLE_SIZE 50
#define EMBER_AF_PLUGIN_REPORTING_TABLE_SIZE 62
#define EMBER_AF_PLUGIN_REPORTING_ENABLE_GROUP_BOUND_REPORTS
// Use this macro to check if Scan Dispatch plugin is included
......
......@@ -12,6 +12,9 @@
// Creator for attribute: on/off, endpoint: 2
#define CREATOR_ON_OFF_2 0xB001
#define NVM3KEY_ON_OFF_2 ( NVM3KEY_DOMAIN_ZIGBEE | 0xB001 )
// Creator for attribute: on/off, endpoint: 3
#define CREATOR_ON_OFF_3 0xB002
#define NVM3KEY_ON_OFF_3 ( NVM3KEY_DOMAIN_ZIGBEE | 0xB002 )
// Types for the tokens
......@@ -24,6 +27,7 @@ typedef uint8_t tokType_on_off;
#ifdef DEFINETOKENS
DEFINE_BASIC_TOKEN(ON_OFF_1, tokType_on_off, 0x00)
DEFINE_BASIC_TOKEN(ON_OFF_2, tokType_on_off, 0x00)
DEFINE_BASIC_TOKEN(ON_OFF_3, tokType_on_off, 0x00)
#endif // DEFINETOKENS
......@@ -42,6 +46,11 @@ DEFINE_BASIC_TOKEN(ON_OFF_2, tokType_on_off, 0x00)
halCommonGetToken((tokType_on_off *)ptr, TOKEN_ON_OFF_2); \
emberAfWriteServerAttribute(2, ZCL_ON_OFF_CLUSTER_ID, ZCL_ON_OFF_ATTRIBUTE_ID, (uint8_t*)ptr, ZCL_BOOLEAN_ATTRIBUTE_TYPE); \
} \
epNetwork = emberAfNetworkIndexFromEndpoint(3); \
if((endpoint) == 3 || ((endpoint) == EMBER_BROADCAST_ENDPOINT && epNetwork == curNetwork)) { \
halCommonGetToken((tokType_on_off *)ptr, TOKEN_ON_OFF_3); \
emberAfWriteServerAttribute(3, ZCL_ON_OFF_CLUSTER_ID, ZCL_ON_OFF_ATTRIBUTE_ID, (uint8_t*)ptr, ZCL_BOOLEAN_ATTRIBUTE_TYPE); \
} \
} while(false)
......@@ -60,6 +69,11 @@ DEFINE_BASIC_TOKEN(ON_OFF_2, tokType_on_off, 0x00)
if ( metadata->attributeId == 0x0000 && 0x0000 == emberAfGetMfgCode(metadata) &&!emberAfAttributeIsClient(metadata) ) \
halCommonSetToken(TOKEN_ON_OFF_2, data); \
} \
} else if ( endpoint == 3) { \
if ( clusterId == 0x06 ) { \
if ( metadata->attributeId == 0x0000 && 0x0000 == emberAfGetMfgCode(metadata) &&!emberAfAttributeIsClient(metadata) ) \
halCommonSetToken(TOKEN_ON_OFF_3, data); \
} \
} \
} while(false)
......
......@@ -1063,7 +1063,9 @@ void emAfStackStatusHandler(EmberStatus status)
emberAfRegistrationAbortCallback();
emberAfRegistrationStartCallback();
} else {
halInternalDisableWatchDog(MICRO_DISABLE_WATCH_DOG_KEY); //lmm add for long reporttablesize cause watchdog reset
emberStartWritingStackTokens();
halInternalWatchDogEnabled();
}
// This kicks off registration for newly joined devices. If registration
......
......@@ -46,9 +46,12 @@ bool emAfPreZDOMessageReceived(EmberNodeId emberNodeId,EmberApsFrame* apsFrame,u
return emberAfPreZDOMessageReceivedCallback(emberNodeId, apsFrame, message, length); // Global
}
// RetrieveAttributeAndCraftResponse function declarations.
bool emAfPluginGreenPowerClientRetrieveAttributeAndCraftResponse(uint8_t endpoint, EmberAfClusterId clusterId, EmberAfAttributeId attrId, uint8_t mask, uint16_t maunfacturerCode, uint16_t readLength); // Plugin: green-power-client
bool emAfRetrieveAttributeAndCraftResponse(uint8_t endpoint, EmberAfClusterId clusterId, EmberAfAttributeId attrId, uint8_t mask, uint16_t maunfacturerCode, uint16_t readLength)
{
return 0; // false
return emAfPluginGreenPowerClientRetrieveAttributeAndCraftResponse(endpoint, clusterId, attrId, mask, maunfacturerCode, readLength); // Plugin: green-power-client
}
// ZigbeeKeyEstablishment function declarations.
......
......@@ -999,6 +999,78 @@
/** @} */ // end group plugin-eeprom
/** @addtogroup plugin-green-power-client Plugin Commands: Green Power Client
* @ingroup cli
* The Green Power Client plugin contributes CLI commands to the application
* framework to be used for getting, setting, and displaying information
* relevant to the Green Power Client cluster.
*
* @{
*/
/** @brief <b>plugin green-power-client add-group-sink [sourceID:4] [sinkGroup:2] </b>
* - <i>Add a groupcast sink for a given GPD</i>
* - sourceID - INT32U - GPD Source ID
* - sinkGroup - INT16U - Sink group
*/
#define EMBER_AF_DOXYGEN_CLI_COMMAND_PLUGIN_GREEN_POWER_CLIENT_PLUGIN_GREEN_POWER_CLIENT_ADD_GROUP_SINK
/** @brief <b>plugin green-power-client add-sink [sourceID:4] [sinkIeee:8] </b>
* - <i>Add a sink for a given GPD</i>
* - sourceID - INT32U - GPD Source ID
* - sinkIeee - IEEE_ADDRESS - Sink's IEEE address
*/
#define EMBER_AF_DOXYGEN_CLI_COMMAND_PLUGIN_GREEN_POWER_CLIENT_PLUGIN_GREEN_POWER_CLIENT_ADD_SINK
/** @brief <b>plugin green-power-client clear-proxy-table </b>
* - <i>clear the proxy table</i>
*/
#define EMBER_AF_DOXYGEN_CLI_COMMAND_PLUGIN_GREEN_POWER_CLIENT_PLUGIN_GREEN_POWER_CLIENT_CLEAR_PROXY_TABLE
/** @brief <b>plugin green-power-client duplicate-filter-test [endpoint:1] [sourceId:4] [sequenceNumber:1] </b>
* - <i>This is used to instrument the current device receiving a message in order to test the duplicate message filtering functionality.</i>
* - endpoint - INT8U
* - sourceId - INT32U - source Id of the fake incoming message
* - sequenceNumber - INT8U
*/
#define EMBER_AF_DOXYGEN_CLI_COMMAND_PLUGIN_GREEN_POWER_CLIENT_PLUGIN_GREEN_POWER_CLIENT_DUPLICATE_FILTER_TEST
/** @brief <b>plugin green-power-client print-proxy-table </b>
* - <i>Print the proxy table</i>
*/
#define EMBER_AF_DOXYGEN_CLI_COMMAND_PLUGIN_GREEN_POWER_CLIENT_PLUGIN_GREEN_POWER_CLIENT_PRINT_PROXY_TABLE
/** @brief <b>plugin green-power-client rm-gpd [sourceID:4] </b>
* - <i>Remove a given GPD from the proxy table</i>
* - sourceID - INT32U - GPD Source ID
*/
#define EMBER_AF_DOXYGEN_CLI_COMMAND_PLUGIN_GREEN_POWER_CLIENT_PLUGIN_GREEN_POWER_CLIENT_RM_GPD
/** @brief <b>plugin green-power-client rm-sink [sourceID:4] [sinkIeee:8] </b>
* - <i>remove a sink for a given GPD. If that's the last sink, remove the proxy table entry</i>
* - sourceID - INT32U - GPD Source ID
* - sinkIeee - IEEE_ADDRESS - Sink's IEEE address
*/
#define EMBER_AF_DOXYGEN_CLI_COMMAND_PLUGIN_GREEN_POWER_CLIENT_PLUGIN_GREEN_POWER_CLIENT_RM_SINK
/** @brief <b>plugin green-power-client set-key [index:1] [key:16] </b>
* - <i>This is used to set the key for a proxy table entry</i>
* - index - INT8U
* - key - SECURITY_KEY - source Id of the fake incoming message
*/
#define EMBER_AF_DOXYGEN_CLI_COMMAND_PLUGIN_GREEN_POWER_CLIENT_PLUGIN_GREEN_POWER_CLIENT_SET_KEY
/** @brief <b>plugin green-power-client set-proxy-entry [index:1] [sourceID:4] [sinkNodeId:2] [options:4] </b>
* - <i>Set a proxy table entry</i>
* - index - INT8U - index to proxy table
* - sourceID - INT32U - GPD Source ID
* - sinkNodeId - INT16U - Sink's node address
* - options - INT32U
*/
#define EMBER_AF_DOXYGEN_CLI_COMMAND_PLUGIN_GREEN_POWER_CLIENT_PLUGIN_GREEN_POWER_CLIENT_SET_PROXY_ENTRY
/** @} */ // end group plugin-green-power-client
/** @addtogroup plugin-groups-server Plugin Commands: Groups Server
* @ingroup cli
* The groups server plugin contributes a CLI command to the application
......@@ -1581,6 +1653,17 @@
/** @} */ // end group plugin-eeprom
/** @addtogroup plugin-green-power-client Plugin Commands: Green Power Client
* @ingroup cli
* The Green Power Client plugin contributes CLI commands to the application
* framework to be used for getting, setting, and displaying information
* relevant to the Green Power Client cluster.
*
* @{
*/
/** @} */ // end group plugin-green-power-client
/** @addtogroup plugin-groups-server Plugin Commands: Groups Server
* @ingroup cli
* The groups server plugin contributes a CLI command to the application
......
......@@ -15,7 +15,7 @@
// Token header for the Reporting plugin.
// Custom MFG token header file
#include "../../KKAllToOneThermostatPanelMG21SDK665/00ikonke-app/ikk-mfgtokens.h"
#include "00ikonke-app/ikk-mfgtokens.h"
#ifdef CUSTOM_TOKEN_HEADER
#include CUSTOM_TOKEN_HEADER
......
......@@ -19,7 +19,7 @@
#include "../../../../../../SiliconLabs/SimplicityStudio/v4/developer/sdks/gecko_sdk_suite/v2.6/protocol/zigbee/app/framework/plugin/reporting/reporting-tokens.h"
// Custom token header file
#include "../../KKAllToOneThermostatPanelMG21SDK665/00ikonke-app/ikk-tokens.h"
#include "00ikonke-app/ikk-tokens.h"
#ifdef CUSTOM_TOKEN_HEADER
#include CUSTOM_TOKEN_HEADER
......
......@@ -135,11 +135,6 @@
<Key>ARMDBGFLAGS</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key></Key>
<Name></Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint>
<Bp>
......@@ -535,7 +530,7 @@
<GroupNumber>3</GroupNumber>
<FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\User\src\BL55072A.c</PathWithFileName>
......
[Version]
Nu_LinkVersion=V5.14
[Process]
ProcessID=0x00004528
ProcessCreationTime_L=0xe7daa86f
ProcessCreationTime_H=0x01d6c6e0
ProcessID=0x00001054
ProcessCreationTime_L=0xc8cc9aaa
ProcessCreationTime_H=0x01d6dcdf
NuLinkID=0x18101887
NuLinkID0=0x18101887
NuLinkIDs_Count=0x00000001
......
#ifndef __DEBUG_H__
#define __DEBUG_H__
#endif
#ifndef __BL55072A_H__
#define __BL55072A_H__
#include <stdlib.h>
#include <stdint.h>
#include "control_comm.h"
typedef enum{
BL55072A_SET_END =0x7F,
BL55072A_CMD_MODESET_ON =0xC8,
BL55072A_CMD_MODESET_OFF =0xC0,
BL55072A_CMD_ADSET =0x00,
BL55072A_CMD_DISCTL_DEF =0xB6,
BL55072A_CMD_DISCTL_PSM1 =0xA4,
BL55072A_CMD_ICSET =0xE8,
BL55072A_CMD_ICSET_RST =0xEA,
BL55072A_CMD_BLKCTL_OFF =0x80,
BL55072A_CMD_BLKCTL_HZ5 =0x81,
BL55072A_CMD_BLKCTL_1HZ =0x82,
BL55072A_CMD_BLKCTL_2HZ =0x83,
BL55072A_CMD_BLKCTL_HZ3 =0x84,
BL55072A_CMD_BLKCTL_HZ2 =0x85,
BL55072A_CMD_APCTL_ON =0xFE,
BL55072A_CMD_APCTL_OFF =0xFF,
}blCommands;
typedef enum{
BL55072A_SEG0 = 0x00,
BL55072A_SEG1,
BL55072A_SEG2,
BL55072A_SEG3,
BL55072A_SEG4,
BL55072A_SEG5,
BL55072A_SEG6,
BL55072A_SEG7,
BL55072A_SEG8,
BL55072A_SEG9,
BL55072A_SEG10,
BL55072A_SEG11,
BL55072A_SEG12,
BL55072A_SEG13,
BL55072A_SEG14,
BL55072A_SEG15,
BL55072A_SEG16,
BL55072A_SEG17,
BL55072A_SEG18,
BL55072A_SEG19,
BL55072A_SEG20,
BL55072A_SEG21,
BL55072A_SEG22,
BL55072A_SEG23,
BL55072A_SEG24,
BL55072A_SEG25,
BL55072A_SEG26,
BL55072A_SEG27,
BL55072A_SEG28,
BL55072A_SEG29,
BL55072A_SEG30,
BL55072A_SEG31,
BL55072A_SEG32,
BL55072A_SEG33,
BL55072A_SEG34,
BL55072A_SEG35,
BL55072A_SEG36,
}blSeg;
#define DisplayChar0 0x5F
#define DisplayChar1 0x06
#define DisplayChar2 0x3D
#define DisplayChar3 0x2F
#define DisplayChar4 0x66
#define DisplayChar5 0x6B
#define DisplayChar6 0x7B
#define DisplayChar7 0x0E
#define DisplayChar8 0x7F
#define DisplayChar9 0x6F
#define DisplayCharA 0x7E
#define DisplayCharB 0x73 // ???
#define DisplayCharE 0x79 // E
#define DisplayCharF 0x78 // F
#define DisplayCharr 0x58 // r
#define DisplayCharL 0x51
#define DisplayCharo 0x33
#define OFF 0
#define ON 1
#define FLASHING 2
#define DFLASHING 3
#define LCDDisplayInvalidParameter 0XFFFF
#define SysLCDShowTimer 10
typedef struct Lcd_Display_Status
{
u8 LCD_place; // 需要点亮部分位置,LCDDisplayInvalidParameter/0XFF为无效值
u8 LCD_code_data; // 参数--当前只有温度部分需要使用此参数 范围( NULL - ShowCharNumLitd ),超出此 范围无效,LCDDisplayInvalidParameter/0XFFFF为无效值
u8 LCD_state; // 亮、灭、闪,双闪LCDDisplayInvalidParameter/0XFF为无效值,不包括数码管1、2、3、4、5、6
u16 LCD_display_timer; // 闪烁间隔时间,单位10ms,LCDDisplayInvalidParameter/0XFFFF/NULL为无效值
u16 LCD_display_count; // 部分液晶只需要闪烁几次,一个跳变为一次,LCDDisplayInvalidParameter /0xFFFF为无效值,不使用填充无效值
} Lcd_Status_Info_t;
/*****************************************************************
LCD屏位置定义
*******************************************************************/
#define SYSTEM_MANUAL_OUTLINE_DISPLAY 0X01 //手动模式外圈(S1)
#define SYSTEM_MANUAL_CHAR_DISPLAY 0X02 //手动模式内圈(S2)
#define SYSTEM_ROLLING_OUTLINE_DISPLAY 0X03 //循环模式外圈(S3)
#define SYSTEM_ROLLING_CHAR_DISPLAY 0X04 //循环模式内圈(S4)
#define SYSTEM_AUTO_OUTLINE_DISPLAY 0X05 //自动模式外圈(S13)
#define SYSTEM_AUTO_CHAR_DISPLAY 0X06 //自动模式内圈(S14)
#define DEVICE_TYPE_HEATING_OUTLINE_DISPLAY 0X07 //地暖模式外圈(S5)
#define DEVICE_TYPE_HEATING_CHAR_DISPLAY 0X08 //地暖模式内圈(S6)
#define DEVICE_TYPE_AIRCONDITION_OUTLINE_DISPLAY 0X09 //空调模式外圈(S7)
#define DEVICE_TYPE_AIRCONDITION_CHAR_DISPLAY 0X0A //空调模式内圈(S8)
#define DEVICE_TYPE_FAN_OUTLINE_DISPLAY 0X0B //新风模式外圈(S9)
#define DEVICE_TYPE_FAN_CHAR_DISPLAY 0X0C //新风模式内圈(S10)
#define SETTING_TIMER_DISPLAY 0X0D //定时图标(S12)
#define CURRENT_TEMPER_CHAR_DISPLAY 0X0E //当前温度字符(S15)
#define SETTING_TIMER_CHAR_DISPLAY 0X0F //设定时长字符(S16)
#define H_CHAR_DISPLAY 0X10 //小时“H”字符(S17)
#define UPPER_TEMPER_UNIT_DISPLAY 0X11 //上方摄氏度℃(S18)
#define ZIGBEE_NET_CAHR_DISPLAY 0X12 //zigbee网络灯(S19)
#define CHILD_LOCK_DISPLAY 0X13 //童锁图标(S20)
#define MIDDLE_TEMPER_UNIT_DISPLAY 0X14 //中间摄氏度℃(S21)
#define SYSTEM_HEATING_OUTLINE_DISPLAY 0X15 //制热模式外圈(S22)
#define SYSTEM_HEATING_CHAR_DISPLAY 0X16 //制热模式内圈(S23)
#define SYSTEM_DRY_OUTLINE_DISPLAY 0X17 //除湿模式外圈(S24)
#define SYSTEM_DRY_CHAR_DISPLAY 0X18 //除湿模式内圈(S25)
#define SYSTEM_COOL_OUTLINE_DISPLAY 0X19 //制冷模式外圈(S26)
#define SYSTEM_COOL_CHAR_DISPLAY 0X1A //制冷模式内圈(S27)
#define SYSTEM_FAN_OUTLINE_DISPLAY 0X1B //通风模式外圈(S28)
#define SYSTEM_FAN_CHAR_DISPLAY 0X1C //通风模式内圈(S29)
#define SYSTEM_SLEEP_OUTLINE_DISPLAY 0X1D //睡眠模式外圈(S30)
#define SYSTEM_SLEEP_CHAR_DISPLAY 0X1E //睡眠模式内圈(S31)
#define WIND_DIRECTION_UP_DISPLAY 0X1F //风向上图标(S32)
#define WIND_DIRECTION_MIDDLE_DISPLAY 0X20 //风向中图标(S33)
#define WIND_DIRECTION_DOWN_DISPLAY 0X21 //风向下图标(S34)
#define WIND_DIRECT_CHAR_DISPLAY 0X22 //风向字符图标(S35)
#define WIND_SPEED_CHAR_DISPLAY 0X23 //风速字符图标(S36)
#define MIDDLE_POINT_DISPLAY 0X24 //中间小数点(P0)
#define UPPER_POINT_DISPLAY 0X25 //上方小数点(P1)
#define SET_MIDDLE_DIGITRON_DISPLAY_01 0X26 //中间第一个段码(1)
#define SET_MIDDLE_DIGITRON_DISPLAY_02 0X27 //中间第二个段码(2)
#define SET_MIDDLE_DIGITRON_DISPLAY_03 0X28 //中间第三个段码(3)
#define SET_UPPER_DIGITRON_DISPLAY_01 0X29 //上方第一个段码(4)
#define SET_UPPER_DIGITRON_DISPLAY_02 0X2A //上方第二个段码(5)
#define SET_UPPER_DIGITRON_DISPLAY_03 0X2B //上方第三个段码(6)
#define FAN_SPEED_DIGITRON_DISPLAY_01 0X2C //当前风速第1个段码(7)
#define DELAY_OFF_TIME_DISPLAY 0X2D //延时关机时间显示
#define CALIBRATE_TEMPER_DISPLAY 0X2E //校准温度显示
#define LCD_CONTROL(X) ((X>0)? (P52 = 1):(P52 = 0) );
void PWM_init(void);
void LcdShowCTR( Lcd_Status_Info_t LCDShowTemp_t );
void BL55072A_DisplayON(void);
void BL55072A_Clear(void);
void BL55072A_DisplayALL(void);
void BL55072A_Init(uint8_t slaver_addr,u32 freq);
void BL55072A_DisplayGeneral(u8 addr,u8 control_bits,u8 display_bits);
void LcdShowRunningAll( void );
u16 GetLCDShowTime( void );
void SetLCDShowTime(u16 uSetLCDShowTime);
void Test(void);
#endif
/**
******************************************************************************
* @file USART.h
* @author lo_
* @version V0.0.1
* @date 2018.5.16
* @brief
*
*
******************************************************************************
* @attention
*
******************************************************************************
*/
#ifndef _CC2530_TRANSPARENT_ANALYZE_H
#define _CC2530_TRANSPARENT_ANALYZE_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
//#include "stm32f10x.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
/* Exported macro ------------------------------------------------------------*/
//#define USATR_1_DEBUG 1
#if (USATR_1_DEBUG == 1)
#define DEBUG_USATR1(format,...) printf(format,##__VA_ARGS__)
#else
#define DEBUG_USATR1(format,...)
#endif
typedef unsigned int TP_u32;
typedef unsigned short TP_u16;
typedef unsigned char TP_u8;
typedef signed char TP_s8;
typedef int16_t TP_s16;
typedef TP_u32 TP_uc32; /*!< Read Only */
typedef TP_u16 TP_uc16; /*!< Read Only */
typedef TP_u8 TP_uc8; /*!< Read Only */
typedef enum {TP_false = 0, TP_true = !TP_false} TP_bool;
typedef enum {TP_ERROR = 0, TP_SUCCESS = !TP_ERROR} TP_ErrorStatus;
//定时向cc2530 查询网络状态,如果定时为0,代表不查询
#define DEF_STATUS_CHECK_INTERVAL_TIME 5000 //(MS)
#define BYTE_MOVE(high_byte,low_byte) ((high_byte << 8) | low_byte)
/**************************************************************************************************************
公共部分
***************************************************************************************************************/
#define SOF_HIGH_BYTE_DEF 0XAA
#define SOF_LOW_BYTE_DEF 0X55
#define USART_RECIVE_LEN_DEF 40 //串口最多一次接受的数据量
#define USART_RECIVE_DEPTH 5 //缓存的深度
//透传数据接受最大间隔时间,超时未接收到数据,停止一串数据接收
#define DEF_TRANSPARENT_MAXIMUM_INTERVAL 100 //(ms)
enum NET_STATUS
{
//未入网
no_network = 0,
//组网中
networking,
//已组网
in_network,
};
//usart 数据接受
typedef struct _Recive_usart_data_deal
{
TP_u8 Data[USART_RECIVE_LEN_DEF]; //中断中接受到的数据
TP_u8 Recive_len; //接收到数据的长度
TP_u8 Data_len; //需要接受的数据
TP_u8 time; //时间
}RECIVE_USART_DATA_DEAL;
//homebuf buf缓存
typedef struct _Recive_usart_buff
{
TP_u8 Usart_buff[USART_RECIVE_DEPTH][USART_RECIVE_LEN_DEF]; //homebus 缓存存放区
TP_u8 Usart_buff_len[USART_RECIVE_DEPTH]; //homebus 缓存区长度
TP_u8 Buff_send_serial_num; //BUFF发送序列
TP_u8 Download_serial_num; //BUFF缓存序列
}RECIVE_USART_BUFF;
//协议中的功能码
typedef struct Protocol_
{
//序列号
TP_u16 SEQ;
//通道
TP_u8 Channel_ID;//
//功能呢个码
TP_u16 Opcode;
//控制位
TP_u8 ControlField;
//数据
TP_uc8* ARG;
//长高度
TP_u8 ARG_len;
}PROTOCOL_DEAL;
//协议中的功能码
typedef struct Protocol_send_
{
//序列号
//TP_u16 SEQ;
//通道
TP_u8 Channel_ID;//
//功能呢个码
TP_u16 Opcode;
//控制位
TP_u8 ControlField;
//数据
TP_uc8* ARG;
//长高度
TP_u8 ARG_len;
}PROTOCOL_SEND;
/* Exported constants --------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
/**************************************************************************************************************
外部使用的函数
***************************************************************************************************************/
void transparent_msg_deal(void);
void transparent_time_manage(TP_uc8 timer);
void transparent_msg_recive(TP_uc8 RcvChar);
void ack_dev_info(PROTOCOL_DEAL recv_data, TP_uc8* arg, TP_u8 len);
TP_ErrorStatus tp_function_init(void (*send_drive)(TP_uc8* msg,TP_u32 len),
void (*transparent_function_point)(PROTOCOL_DEAL protocol_data),
void (*non_permeable_function_point)(PROTOCOL_DEAL protocol_data));
void transparent_protocol_send(PROTOCOL_SEND send_protocol,TP_u16 SEQ);
void tp_usart_init(void (*usart_init)());
void opcode_check_status_report(TP_uc8 *recive_data);
//ADD BY YWQ
extern void transparent_data_analyze(PROTOCOL_DEAL recv_data);
extern void not_transparent_data_analyze(PROTOCOL_DEAL recv_data);
extern void UART1_Send_Bytes(TP_uc8* bffs, TP_u32 n);
#ifdef _DEBUG
#define DEBUG(format,...) printf(format,##__VA_ARGS__)
#else
#define DEBUG(format,...)
#endif
#ifdef __cplusplus
}
#endif
#ifdef USE_PRINTF
#include<stdio.h>
int fputc(int ch, FILE *f);
#endif
#endif
#ifndef __DEBUG_H__
#define __DEBUG_H__
#endif
#ifndef __KEY_H__
#define __KEY_H__
#include <stdlib.h>
#include <stdint.h>
#include "control_comm.h"
#define KEY1 P36
#define KEY2 P31
#define KEY3 P30
#define KEY4 P07
#define KEY5 P05
#define KEY6 P01
#define LED1 P55
#define LED2 P32
#define LED3 P54
#define LED4 P06
#define LED5 P04
#define LED6 P00
#define K1 P10
#define K2 P24
#define K3 P13
#define K4 P24
#define K5 P26
#define ZERO_INIT P25
#define KEY(X) (KEY##X)
typedef int32_t s32;
typedef int16_t s16;
typedef int8_t s8;
typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t u8;
typedef struct Time_To_Power_Off
{
u8 timekey_start_status; //按下定时键
u8 timer_status; //定时器开启状态
u8 power_switch_status; //开关按键状态
u8 time_data; //倒计时时间
u8 set_up_status; //进入长按设置状态
u8 set_up_option; //设置选项
s8 temperature_correct; //温度校准值
s16 temperature_value; //实际温度值
u16 temperature_set_value; //设定温度值
u8 system_type; //系统类型
u8 wind_auto_air_status; //风速自动通风状态
u8 lock_status; //按键锁定状态
}TIMEING_INFO;
typedef struct
{
volatile u32 operate_delay_off_ms;
volatile u32 operate_delay_off_s;
volatile u32 operate_delay_off_min;
volatile u32 operate_delay_off_h;
}Filter_Wash_Calc;
typedef struct KEY_OPERATE
{
u8 operate_delay_off_status; //延时关机操作期间标志位判断
volatile u32 operate_delay_off_ms;
volatile u32 operate_delay_off_s;
volatile u32 operate_delay_off_min;
volatile u32 operate_delay_off_h;
u8 operate_join_net ;
uint64_t operate_last_timer ;
s8 operate_calibrate_temp;
u8 operate_calibrate_temper;
u8 record_adjust_delay_off;
Filter_Wash_Calc filter_calc;
u16 set_temper_temp;
}KEY_OPERATE;
typedef void (*KeyProcessCallback)(u8 key_id,u8 KeyPressEvent);
#define Low 0
#define High 1
#define NULL 0
#define AntiShakeTime 6 //30ms = 6*5ms 按键防止抖动时间
#define PressLongTime 800 // 4s = 800*5ms 按键长按时间
#define Press10sLongTime 2000 // 10s = 2000*5ms 退出老化
#define SyskeyScanTimer 5 //5ms
#define KeyEventBufferNum 30
#define HOT_AND_COLD_APART 0
#define ONLY_COLD 1
#define ONLY_HOT 2
#define HOT_AND_COLD_SHARED 3
enum{
SYSTEM_MODE_OFF = 0,
SYSTEM_MODE_AUTO = 1,
SYSTEM_MODE_MANUAL = 2,
SYSTEM_MODE_COOLING = 3,
SYSTEM_MODE_HEATING = 4,
SYSTEM_MODE_EMERGENCY_HEATING = 5,
SYSTEM_MODE_PRE_COOLING = 6,
SYSTEM_MODE_AIR = 7,
SYSTEM_MODE_DRY = 8,
SYSTEM_MODE_SLEEP = 9,
SYSTEM_MODE_ROLL = 10,
};
enum{
WIND_DIRECT_DOWN = 0,
WIND_DIRECT_MIDDLE = 1,
WIND_DIRECT_UP = 2,
};
#define COLD_MODE 0X01 //制冷模式 //wait to modefied lmm test
#define HEAT_MODE 0X02 //加热模式
#define AIR_MODE 0X03 //通风模式
#define AREFACTION 0X04 //除湿模式 /Modify by YWQ
#define WIND_SPEED_LOW 0x01 //低速
#define WIND_SPEED_MID 0x02 //中速
#define WIND_SPEED_HIGH 0x03 //高速
#define WIND_SPEED_AUTO 0x05 //自动
#define SET_LONG_TIME 0X01 //长按SET键
#define SET_SHORT_TIME 0X02 //短按SET键
#define AIR_MODE_CHANGE 0X01 //模式按键
#define WIND_SPEED_CHANGE 0X02 //风速按键
#define TIMING_CHANGE 0X03 //定时按键
#define POWER_SWITCH_CHANGE 0X04 //开关按键
#define SET_CHANGE 0X05 //SET按键
#define RELAY1 0X00
#define RELAY2 0X01
#define RELAY3 0X02
#define RELAY4 0X03
#define RELAY5 0X04
#define RELAY_ALL 0X05
/*
向右
L M H
A = 1 B = 1 C = 0
A = 1 B = 0 C = 1
A = 0 B = 1 C = 1
A = 1 B = 1 C = 0
A = 1 B = 0 C = 1
A = 0 B = 1 C = 1
A = 1 B = 1 C = 0
A = 1 B = 0 C = 1
A = 0 B = 1 C = 1
A = 1 B = 1 C = 0
A = 1 B = 0 C = 1
A = 0 B = 1 C = 1
向左
A = 1 B = 1 C = 0
A = 0 B = 1 C = 1
A = 1 B = 0 C = 1
A = 1 B = 1 C = 0
A = 0 B = 1 C = 1
A = 1 B = 0 C = 1
A = 1 B = 1 C = 0
A = 0 B = 1 C = 1
A = 1 B = 0 C = 1
A = 1 B = 1 C = 0
A = 0 B = 1 C = 1
*/
#define KeyTotalNum 6
#define Key_Button 0x01
#define Key_Rotary 0x02
#define NoButtonEvent 0x00
#define ButtonShortEvent 0x80
#define ButtonLongEvent 0x90
#define ButtonLongUpEvent 0xa0
#define Button10sLongEvent 0xb0
#define AIR_CMD_ONOFF 1
#define AIR_CMD_SYSTEM_MODE 2
#define AIR_CMD_FAN_SPEED 3
#define AIR_CMD_FAN_DIRECT 4
#define AIR_CMD_SET_TEMPER 5
typedef struct key_t
{
/* 上次按下的按键状态 */
u8 PreState;
/* 当前按下的按键状态 */
u8 LastState;
/* 当前按下的按键状态 */
u8 PreKeyEvent;
u16 KeyTime; //消除抖动时间
} KeyScan_t;
typedef struct key_init
{
/* key id */
u8 KeyId;
GPIO_T *port;
/* key pin */
uint32_t u32Pin;
/* 有效电平 */
u8 Valid_Level;
} KeyConfigInit_t;
typedef struct
{
/* key id */
u8 support_tap_num;
u8 save_tap_status[6];
u8 tap_to_do[6]; //对应(K1,K2,K3,K4,K5)
u8 set_tap ;
u8 tap_end_flage ;
} TAP_CONTROL_ST;
extern TAP_CONTROL_ST Tap_Control;
extern u8 InputKeyEvent(u8 Key_index,u8 Event);
extern void SetkeyScanTime(u16 uSetkeyScanTime);
void Delay_OFF_Rel_Display(u8 stop_flash,u8 delay_timer,u8 dispaly_data,u8 H_char,u8 bell_char,u8 setting_time_char);
void Control_OnOff_handler(u8 device_type,u8 onoff);
extern u16 GetkeyScanTime( void );
extern void InputButtonInit(void);
extern void key_scan(void);
extern void display_power_off(u8 ds_type) ;
extern void display_power_off_flage(void);
void KeyEventHandle( s16 SetMode ,u8 Rank);
void Oled_Display_whole(void);
void Tap_Status_Scan(void);
void Save_Tap_Switch(void);
void Tap_Switch(void);
void Auto_Wind (void);
void display_real_temp(int temp_value);
extern void Aging_test(void);
#endif
#ifndef __DEBUG_H__
#define __DEBUG_H__
#endif
#ifndef __SHTC3_H__
#define __SHTC3_H__
#include <stdlib.h>
#include <stdint.h>
#include "control_comm.h"
#include <stdbool.h>
typedef enum{
READ_ID = 0xEFC8, // command: read ID register
SOFT_RESET = 0x805D, // soft reset
SLEEP = 0xB098, // sleep
WAKEUP = 0x3517, // wakeup
MEAS_T_RH_POLLING = 0x7866, // meas. read T first, clock stretching disabled
MEAS_T_RH_CLOCKSTR = 0x7CA2, // meas. read T first, clock stretching enabled
MEAS_T_RH_NOCLOCKSTR = 0x7688, // meas. read T first, clock stretching enabled
MEAS_T_RH_POLLING_LPM = 0x609C,
MEAS_T_RH_CLOCKSTR_LPM = 0x6458,
MEAS_RH_T_POLLING_LPM = 0x44DE,
MEAS_RH_T_CLOCKSTR_LPM = 0x401A,
MEAS_RH_T_POLLING = 0x58E0, // meas. read RH first, clock stretching disabled
MEAS_RH_T_CLOCKSTR = 0x5C24 // meas. read RH first, clock stretching enabled
}etCommands;
typedef enum
{
SHTC3_NO_ERROR = 0x00, // no error
SHTC3_ACK_ERROR = 0x01, // no acknowledgment error
SHTC3_CHECKSUM_ERROR = 0x02, // checksum mismatch error
SHTC3_TIMEOUT_ERROR = 0x04, // timeout error
SHTC3_PARM_ERROR = 0x80, // parameter out of range error
}GetError;
void SHTC3_Init(u8 i2cAddress);
u32 SHTC3_ReadID(u16* id);
u32 SHTC3_GetTempAndHumi(s16* temperature, u16* humidity, bool lowPowerEnable);
u32 SHTC3_SoftReset(void);
u32 SHTC3_GetTemp(s16* temperature);
#define SHTC3_GET_TEMP(X) SHTC3_GetTemp(X)
#endif
#ifndef __DEBUG_H__
#define __DEBUG_H__
#endif
#ifndef __VCNL3040_H__
#define __VCNL3040_H__
#include <stdlib.h>
#include <stdint.h>
#include "control_comm.h"
#include <stdbool.h>
typedef enum{
PS_CONF1_2 = 0X03,
PS_CONF3_PS_MS = 0X04,
PS_CANC = 0X05,
PS_THDL = 0X06,
PS_THDH = 0X07,
PS_DATA = 0X08,
PS_RES_INT_FLGA = 0X0B,
PS_ID = 0X0C,
}ECommand_ID;
void VCNL3040_Init(u8 i2cAddress);
u16 VCNL3040_ReadBytes(ECommand_ID command);
#define VCNL3040_Get_Current_Data() VCNL3040_ReadBytes(PS_DATA)
#define VCNL3040_GetID() VCNL3040_ReadBytes(PS_ID)
#endif
#ifndef _ZH_PROTOCOL_H
#define _ZH_PROTOCOL_H
#include "Mini58Series.h"
#define BUF_COUNT 2
#define FRAME_LEN 10
enum ops_type_e
{
NET_ADDR = 0,
SWITCH,
MODE,
TEMPERATURE,
WIND_SPEED,
WIND_DIRECTION,
ROOM_TEMP,
MALFUNCTION,
STATE,
CRC,
POLL_CHECK,
DELAY_TIME
};
enum sw_state_e
{
SW_OFF = 0,
SW_ON = 1
};
enum mode_e
{
HEATINF = 1,
REFRIGERATION = 2,
SUPPLY_AIR = 4,
XERANSIS = 8
};
enum wind_speed
{
AUTOMATIC = 0,
LOW_SPEED = 1,
INTERMEDIATE_SPEED = 2,
HIGH_SPEED = 3
};
enum wind_direction_e
{
NO_WIND_DIRECTION = 0,
ANGLE_30 = 1,
ANGLE_45 = 2,
ANGLE_60 = 4,
SWING = 7
};
struct ZH_protocol_t
{
uint8_t send_times;
uint8_t buf_handle_flag[BUF_COUNT];
uint8_t send_buf[FRAME_LEN];
uint8_t receive_buf[BUF_COUNT][FRAME_LEN];
uint8_t poll_check_receive[FRAME_LEN];
enum ops_type_e ops_type;
void (*uart_init)(void (*send_uart)(uint8_t *buf, uint8_t len));
void (*send)(enum ops_type_e type, uint8_t state);
void (*receive)(uint8_t re_data);
void (*send_all)(uint8_t On_OFF, uint8_t temperature, uint8_t windspeed,uint8_t mode,uint8_t wind_direct);
};
extern struct ZH_protocol_t *ZH_protocol_i;
#endif
#ifndef __DEBUG_H__
#define __DEBUG_H__
#endif
#ifndef __AIR_CONDITION_H__
#define __AIR_CONDITION_H__
#include <stdlib.h>
#include <stdint.h>
#include "control_comm.h"
#define MIDEA_PRODUCT_ID 142//美的
#define MIDEA_OPERATE_ID 15003//美的
#define MIDEA_COOL_WIND_PRODUCT_ID 143//美的酷风
#define MIDEA_COOL_WIND_OPERATE_ID 15004//美的酷风
#define DAIKIN_PRODUCT_ID 143//大金
#define DAIKIN_OPERATE_ID 15004//大金
#define DAIKIN_MX_PRODUCT_ID 143//大金MX
#define DAIKIN_MX_OPERATE_ID 15004//大金MX
#define DAIKIN_NEW_WIND_PRODUCT_ID 143//大金新风
#define DAIKIN_NEW_WIND_OPERATE_ID 15004//大金新风
#define HITACHI_PRODUCT_ID 143//日立
#define HITACHI_OPERATE_ID 15004//日立
#define HITACHI_US_PRODUCT_ID 143//日立US
#define HITACHI_US_OPERATE_ID 15004//日立US
#define HITACHI_NEW_WIND_PRODUCT_ID 143//日立新风
#define HITACHI_NEW_WIND_OPERATE_ID 15004//日立新风
#define TOSHIBA_PRODUCT_ID 143//东芝
#define TOSHIBA_OPERATE_ID 15004//东芝
#define MITSUBISHI_PRODUCT_ID 143//三菱
#define MITSUBISHI_OPERATE_ID 15004//三菱
#define MITSUBISHI_ELECTRIC_PRODUCT_ID 143//三菱电机
#define MITSUBISHI_ELECTRIC_OPERATE_ID 15004//三菱电机
#define GREE_PRODUCT_ID 143//格力
#define GREE_OPERATE_ID 15004//格力
#define GREE_A_PAD_PRODUCT_ID 143//格力A型风管
#define GREE_A_PAD_OPERATE_ID 15004//格力A型风管
#define GREE_C1_PAD_PRODUCT_ID 143//格力C1型风管
#define GREE_C1_PAD_OPERATE_ID 15004//格力C1型风管
#define GREE_HOTEL_PAD_PRODUCT_ID 143//格力酒店风管
#define GREE_HOTEL_PAD_OPERATE_ID 15004//格力酒店风管
#define GREE_NEW_WIND_AREFACTION_PRODUCT_ID 143//格力新风除湿
#define GREE_NEW_WIND_AREFACTION_OPERATE_ID 15004//格力新风除湿
#define PANASONIC_NEW_WIND_PRODUCT_ID 143//松下新风
#define PANASONIC_NEW_WIND_OPERATE_ID 15004//松下新风
#define YORK_PRODUCT_ID 143//约克
#define YORK_OPERATE_ID 15004//约克
#define MCQUARY_PRODUCT_ID 143//麦克维尔
#define MCQUARY_PAD_OPERATE_ID 15004//麦克维尔
#define TRANE_PRODUCT_ID 143//特灵一拖一
#define TRANE_OPERATE_ID 15004//特灵一拖一
#define HAIER_PRODUCT_ID 143//海尔一拖一
#define HAIER_OPERATE_ID 15004//海尔一拖一
#define SIMULATOR 0 //模拟器
#define DAIKIN 1 //品牌 :大金
#define HITACHI 2 //品牌 :日立
#define TOSHIBA 3 //东芝
#define MITSUBISHI 4 //三菱重工
#define MITSUBISHI_ELECTRIC 5 //三菱电机
#define GREE 6 //格力
#define MIDEA_TRADEMARK 7 //美的
#define DAIKIN_MX 8 //大金MX
#define HITACHI_US 9 //日立US
#define DAIKIN_NEW_WIND 10 //大金新风
#define HITACHI_NEW_WIND 11 //日立新风
#define PANASONIC_NEW_WIND 12 //松下新风
#define GREE_A_PAD 13 //格力A 型风管
#define YORK 14 //约克
#define MCQUARY 15 //麦克斯韦尔
#define GREE_HOTEL_PAD 16 //格力酒店风管
#define TRANE 17 //特灵一拖一
#define HAIER 18 //海尔一拖一
#define MIDEA_COOL_WIND 19 //美的酷风
#define GREE_C1_PAD 20 //格力C1风管
#define GREE_NEW_WIND_AREFACTION 21 //格力新风除湿
u8 air_condition_mode2Standard_mode(uint8_t mode);
u8 Standard_mode2Air_condition_mode(uint8_t mode);
u8 Standard_fan_speed2Air_condition(uint8_t fan_speed);
u8 air_condition_fan_speed2Standard_fan_speed(uint8_t fan_speed);
void Control_AIR_CONDITION_By_RS485(u8 cmd_type,u16 data);
void ZH_msg_deal(void);
#endif
#ifndef __CONTROL_COMM_H__
#define __CONTROL_COMM_H__
#include "mini58series.h"
#include "CC2530_transparent_analyze.h"
typedef int32_t s32;
typedef int16_t s16;
typedef int8_t s8;
typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t u8;
typedef signed char INT8S, S8;
typedef unsigned char BYTE, INT8U;
typedef signed short int INT16S;
typedef unsigned short int WORD, INT16U, U16;
typedef signed long LONG, INT32S, S32;
typedef unsigned long DWORD, INT32U, U32;
#define ABS(a,b) ((a>b) ?(a-b) :(b-a))
typedef struct Power_Off_Time
{
u16 time_ms;
u8 time_sec;
u8 time_min;
u8 time_hour;
}TIMEING_OPTION;
typedef struct
{
u8 blacklight_flag;
volatile u32 time_blacklight_ms;
volatile u8 time_blacklight_s;
u8 blacklight_save_time;
}BACKLIGHT_CONTROL;
extern TIMEING_OPTION _Time_Power_Off;
#define TEMP_SUCCESS 0X0000
#define SWITCH_ON 1
#define SWITCH_OFF 0
#define RUN_FLAG_1 1
#define RUN_FLAG_0 0
#define ALWAYS_RUN 0xFF
#define CLEAR_TO_ZERO 0
#define SET_FLAG_0 0
#define SET_FLAG_1 1
#define Min_1 60000
#define Sec_15 15000
#define Sec_10 10000
#define Sec_8 8000
#define Sec_5 5000
#define Sec_3 3000
#define Sec_2 2000
#define Sec_1_5 1500
#define Sec_1 1000
#define Ms_700 700
#define Ms_500 500
#define Ms_300 300
#define Ms_200 200
#define Ms_100 100
#define Ms_50 50
#define Ms_20 20
#define Ms_15 15
#define Ms_10 10
#define Ms_5 5
#define Ms_2 2
#define Ms_1 1
#define TIMER_ZERO 0 //当设置时间为0时,表面此任务不执行
//但此任务可以在需要时开起
#define task_Hour_48 172800
#define Task_Hour_8 28800
#define Task_Min_1 60
#define Task_Sec_30 30
#define Task_Sec_15 15
#define Task_Sec_10 10
#define Task_Sec_5 5
#define Task_Sec_2 2
#define Task_leave_net_3s 60
#define Task_leave_net_8s 160
#define ENABLE_FAST_AGING_TEST 1
#if ENABLE_FAST_AGING_TEST
#define FAST_AGING_STEP1_TIME 60 //1min
#define FAST_AGING_STEP2_TIME 150 //2.5min
#else
#define FAST_AGING_STEP1_TIME (15*60) //15min
#define FAST_AGING_STEP2_TIME (60*60*4) //4h
#endif
struct task_components_t
{
u8 serial_number; // 任务编号
u8 task_switch; // 任务开关
u8 run_flag; // 执行任务标志---0不执行,1执行
u8 external_open_flag; // 任务已开启标志(避免多次开启此任务,选用)
u16 timer; // 计时器
u16 interval_time; // 任务运行间隔时间(和计时器时间相同,为不变值)
void (*task_hook)(void); // 要运行的任务函数
};
extern struct task_components_t task_comps[];
typedef union
{
u16 u16; // element specifier for accessing whole u16
s16 i16; // element specifier for accessing whole i16
struct
{
u8 u8L; // element specifier for accessing low u8
u8 u8H; // element specifier for accessing high u8
} s16_t; // element spec. for acc. struct with low or high u8
} nt16;
typedef enum
{
Ack = 0,
NO_ACK = 1,
} etI2cAck;
typedef enum
{
ACK_ERROR = 0x01,
TIME_OUT_ERROR = 0x02,
CHECKSUM_ERROR = 0x04,
UNIT_ERROR = 0x08
} etError;
struct device_t
{
u8 channel;
u8 product_id;
u16 type;
};
//typedef struct Strainer_Net_Time
//{
// u8 time_sec;
// u8 time_min;
// u8 time_hour;
//
//}STRAINER_OPTION;
//extern STRAINER_OPTION Strainer_Net_Used_Time;
#define PRODUCTID 92
#define OPERATEID 15002
#define HI_UINT16(a) (((a) >> 8) & 0xFF)
#define LO_UINT16(a) ((a) & 0xFF)
#define DISABLE_DEBUG 1 //lmm debug
/***************** 版本控制 ***************/
#define KK_PANEL_VERSION "v1.1.8"
#define PROTOCOL_VER 0
#define VER_1 1
#define VER_2 1
#define VER_3 8
/*****************************************/
////////////////////////非透传协议四个网络状态/////////////////////////////
#define OUT_LINE 0 //未入网
#define IN_LINE 1 //已入网
#define IN_LINE_NETWORKING 2 //已入网且允许其他设备入网
#define OUT_LINE_NETWORKING 3 //未入网且准备入网
///////////////////////////////////////////////////////////////////////////
#define RECV_ACK_SUCC 0 //执行成功
#define RECV_ACK_FAILED 1 //执行失败
#define RCV_MAX 100
////////////////////////////////透传类opcode////////////////////////////////////
#define OPCODE_GENERAL_MODEID_REPORT 0x100A //设备modeid上报
#define OPCODE_GENERAL_SWITCH 0x1010 //执行开关动作
#define OPCODE_GENERAL_OPERATION_MODE 0x1011 //设定运行模式
#define OPCODE_GENERAL_SET_TEMPERATURE 0x1012 //设定温度
#define OPCODE_GENERAL_SET_WIND_SPEED 0x1013 //设定风速
#define OPCODE_GENERAL_ERROR_CODE 0x1014 //故障码
#define OPCODE_GENERAL_SET_CHILD_LOCK 0x1015 //童锁
#define OPCODE_GENERAL_SET_DELAY_OFF_TIME 0x1016 //延时关机
#define OPCODE_GENERAL_SET_SWING_MODE 0x1017 //设置摆风模式
#define OPCODE_GENERAL_SET_SCREEN_SAVE_TIME 0x1018 //设置屏保时间
#define OPCODE_GENERAL_SET_FILTER_CLEANING_TIME 0x1019 //设置滤网清洗时间
#define OPCODE_GENERAL_CURRENT_REAL_TEMPER 0x101A //当前环境温度
#define OPCODE_GENERAL_SET_TEMPER_CALIBRATION 0x101B //设置校准温度
#define OPCODE_GENERAL_SET_NO_DISTURB_MODE 0x101C //设置勿扰模式
#define OPCODE_GENERAL_STATUS_QUERY 0x101D //查询设备状态
#define OPCODE_GENERAL_BING_DEVICE 0x101E //绑定设备
#define OPCODE_GENERAL_MCU_DATA_QUERY 0x101F //同步mcu信息
#define OPCODE_GENERAL_REPORT_STATUS 0x1020 //状态改变上报
#define OPCODE_GENERAL_LCD_OFF 0x1030 //息屏控制指令
#define OPCODE_GENERAL_PROXIMITY_TRIAGGER_REPORT 0x1031 //接近感应触发上报
#define OPCODE_GENERAL_OPCODE_TEST_PASS 0x01FF //产测通过标志
////////////////////////////////通用透传类opcode////////////////////////////////////
#define OPCODE_GENERAL_STARTUP 0x0007 //上电上报
#define OPCODE_GENERAL_NIGHT_OFF 0x0011 //夜间模式
#define OPCODE_GENERAL_INDENTIFY_DEV 0x000C //设备定位
#define OPCODE_GENERAL_GET_VERSION 0x0012 //查看版本号
#define OPCODE_GENERAL_GET_DEV_INFO 0x000B //查看设备通道信息
////////////////////////////////非透传opcode////////////////////////////////
#define _OPCODE_CHECK_STATUS 0X0000 //查询设备状态
#define _OPCODE_NETWORK_BACK 0X0001 //设备退网
#define _OPCODE_FORCE_TO_RESTART 0X0002 //设备强制重启
#define _OPCODE_PUSH_NET_STATE 0X0003 //2530推送网络状态
#define _OPCODE_INQUIRE_NET_STATE 0X0004 //查询网络状态
#define _OPCODE_SET_DEV_RUN_STATE 0X0005 //配置设备运行状态入网状态
#define _OPCODE_UART_TEST 0X0006 //串口测试
#define _OPCODE_SET_NET_STATE 0X1000 //配置设备入网
#define _OPCODE_PUSH_NETWORK_STATE 0X1002 //网络状态推送
void Send_Device_Data(u8 channel_id,u16 opcode ,u8 *arg,u8 len);
static void network_state_machine(TP_uc8 recv_network_state);
void state_change_report(TP_u16 opcode, TP_u8 channel);
void Setup_Task_Start(void);
u8 Get_Channel_Id(u8 device_type);
void delay_operate_calibrate_temper_Task_Start(void);
void operate_calibrate_temper_delay_2s_off_Task_Start(void);
void send_read_operateID_productID(void);
void aging_test_start(void);
void aging_test_stop(void);
u8 Get_Display_Status(void);
#define Network_Control(join_or_leave) Send_Device_Data(0,_OPCODE_SET_NET_STATE,&join_or_leave,1)
#define proximity_triagger_report_zigbee() do{ uint8_t res = 1; \
Send_Device_Data(0,OPCODE_GENERAL_PROXIMITY_TRIAGGER_REPORT,&res,1);}while(0);
#define Query_Device_Info(res) Send_Device_Data(0,OPCODE_GENERAL_STATUS_QUERY,&res,1);
void Update_Dev_Info(u8 channel_id);
extern void Delay_ms(u16 sec);
extern void delay_us( u32 time);
extern void Reset_Back_Light(void);
extern void recover_current_state(void);
extern void save_data(void);
extern void temp_init(void);
extern void synch_temp(void);
extern void check_error_report(TP_u16 opcode, TP_u8 channel);
extern void Ararm_Init(void);
extern void Tap_Init(void);
void set_2530_net_state(void);
void CC2530_leave_net_check(void);
void task_CC2530_state_check(void);
void tm_change_report(TP_u16 opcode, TP_u8 channel);
static void send_ack(PROTOCOL_DEAL recv_data, TP_uc8* arg, TP_u8 len);
void power_on_report(void);
void Spake_Start(void);
void delay_confirm_system_control(u8 start);
void delay_confirm_fan_speed_control(u8 start);
void Print_Buff(u8 *data,u8 len);
#endif
#ifndef __DEBUG_H__
#define __DEBUG_H__
#endif
#ifndef __DISPLAY_COMMON_H__
#define __DISPLAY_COMMON_H__
#include <stdlib.h>
#include <stdint.h>
#include "control_comm.h"
#define AIR_CONDITION 1
#define FLOOR_HEATING 2
#define FAN 3
//enum{
// SYSTEM_MODE_OFF = 0,
// SYSTEM_MODE_AUTO = 1,
// SYSTEM_MODE_MANUAL = 2,
// SYSTEM_MODE_COOLING = 3,
// SYSTEM_MODE_HEATING = 4,
// SYSTEM_MODE_EMERGENCY_HEATING = 5,
// SYSTEM_MODE_PRE_COOLING = 6,
// SYSTEM_MODE_AIR = 7,
// SYSTEM_MODE_DRY = 8,
// SYSTEM_MODE_SLEEP = 9,
// SYSTEM_MODE_ROLL = 10,
//};
enum{
ERROR_CODE_NONE = 0,
ERROR_CODE_SENSOR_WRONG = 1,
ERROR_CODE_ZIGBEE_WRONG = 2,
ERROR_CODE_FILTER_WASH = 3,
ERROR_CODE_COOL_DEFIND = 4,
ERROR_CODE_AIR_CONDITION = 5,
};
typedef struct
{
u8 on_off; //开关
u8 power_off_time; //倒计时时间
u8 power_off_flage; //延时关机图标
s16 real_temperature; //环境温度
u16 set_temperature; //设置温度
s8 correct_temperature; //温度校准值
u8 system_type; //系统类型
u8 operation_mode; //运行模式
u8 wind_speed; //风速 0 关 1 低 2 中 3 高,4 开,5,自动 ,6 智能 7,中低,8 中高 ,9 超高 默认自动
u8 lock_flage; //儿童锁显示图标
u8 air_cond_type; //空调类型 1.风机盘管 2,线控器
u8 air_wind_direct; //风向 0 下 1,中 2,高 有 1
u8 error; //error code
u16 screen_save_time; //屏保时间 00 代表30
u16 filter_wash_time; //滤网清洗时间 3000
u8 no_disturb_mode; //勿扰模式 0
}OLED_AIR_DSD;
typedef struct
{
u8 on_off; //开关 1
u8 power_off_time; //倒计时时间
u8 power_off_flage; //延时关机图标
s16 real_temperature; //环境温度
u16 set_temperature; //设置温度 26
s8 correct_temperature; //温度校准值
u8 system_type; //系统类型 手动
u8 lock_flage; //儿童锁显示图标
u8 floor_heating_type; //地暖类型 1.水地暖 2,电地暖
u8 error; //error code
u16 screen_save_time; //屏保时间
u8 no_disturb_mode; //勿扰模式
}OLED_FLOOR_HEATING_DSD;
typedef struct
{
u8 on_off; //开关
u8 power_off_time; //倒计时时间
u8 power_off_flage; //延时关机图标
s16 real_temperature; //环境温度
s8 correct_temperature; //温度校准值
u8 system_type; //系统类型
u8 wind_speed; //风速 1 低 2 中 3 高,5,自动 自动
u8 lock_flage; //儿童锁显示图标
u8 error; //error code
u16 screen_save_time; //屏保时间
u16 filter_wash_time; //滤网清洗时间
u8 no_disturb_mode; //勿扰模式
}OLED_FAN_DSD;
typedef struct Display_Data
{
u8 device_type;
u8 net_work_flage; //ZigBee通信状态图标
u8 screen_page;
u8 aging_test_flag; //老化标志位 0 进入0-15min前的老化,1,进入15min - 4小时老化 2,表示老化完成
uint64_t local_timer; //当前时间(从上电开始计算)
u8 mcu_Version; //min58版本
u8 zigbee_Version; //zigbee版本
u8 binding_device; //0 未绑定 1,绑定空调,2,地暖,3,绑定新风
OLED_AIR_DSD Air_Device;
OLED_FLOOR_HEATING_DSD FLOOR_Device;
OLED_FAN_DSD FAN_Device;
}OLED_ALL_DSD;
typedef struct
{
u8 adjust_fan_speed_status; //按下风速按键 (key2)
u8 presss_status; //按下风速按键 (key2)
}Key_Operation_Status;
extern OLED_ALL_DSD Oled_Display_Info;
extern BACKLIGHT_CONTROL sBacklight;
extern Key_Operation_Status gKey_Press_Info;
extern void display_power_off_time(int time_value);
extern void display_error(u8 error_value);
void Operate_Led_Button(u8 device_type,u8 on_off);
void Set_CMD_Handler(u8 device_type,u16 opcode,u8 *arg,u8 arg_len);
void display_current_page(void);
void display_set_temp(int temp_value,u8 ararm_f);
void display_system_mode(u8 heat,u8 dry,u8 cold ,u8 air,u8 sleep,u8 manufture,u8 Auto,u8 Roll);
void display_wind_speed(u8 wind_speed,u8 support_type);
void display_wind_direct(u8 low,u8 mediu,u8 high);
void Displayt_System_Mode(u8 system_mode);
void Oled_Display_whole(void);
void PowerOff(void);
void EnterScreenSaveMode(void);
void Detect_Human_Dispaly(void);
u8 System_Mode_Trans(u8 device_type,u8 is_support_sleep);
void Fan_Button_Handler(void);
void delay_confirm_fan_speed(void); //提前打断延时,
#define Operation_LED(X) Operate_Led_Button(Oled_Display_Info.screen_page,X)
#define Reload_Save_Time() do{ sBacklight.blacklight_flag = 1;\
sBacklight.time_blacklight_ms = 0;\
sBacklight.time_blacklight_s = 0;\
LCD_CONTROL(1); \
Operation_LED(1);}while(0);
#endif
#ifndef __HARDWARE_INIT_H__
#define __HARDWARE_INIT_H__
#include "Key.h"
#define Flash_Base_Addr 0x00007000
#define NO_FMC_WRITE 0xFFFFFFFF
#define OFFSET_ADDR 4
#define BYTE_ADDR 8
#define SAVE_INDEX_ADDR 0x000071F8 //504
#define SAVE_FLAGE 0xAA000000
#define ALARM_FLAGE 0x55555555
/***************************** 外部声明 ***********************************/
extern void hardware_init(void);
extern enum panel_type_e get_panel_type(void);
extern void Timer1_Open(u16 input_time);
extern void Timer1_Close(void);
extern void Timer0_Close(void);
extern void EINT_start(void);
extern void UART1_Send_Byte(uint8_t byte);
extern void UART0_Send_Bytes(u8* bffs, u8 n);
#endif
......@@ -2,7 +2,7 @@
#define __HARDWARE_INIT_H__
#include "Key.h"
#define Flash_Base_Addr 0x00007000
#define Flash_Base_Addr 0x00007400
#define NO_FMC_WRITE 0xFFFFFFFF
#define OFFSET_ADDR 4
#define BYTE_ADDR 8
......
......@@ -99,7 +99,7 @@ static void send_temperature(uint8_t state)
static void send_poll_check(void)
{
uint8_t data[FRAME_LEN] = {0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
static uint8_t data[FRAME_LEN] = {0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
data[9] = CRC_check(data, 9);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment