Commit 64166551 authored by 尹佳钦's avatar 尹佳钦

根据modle id 识别设备

parent 87d2de68
......@@ -282,6 +282,7 @@ APPLICATION_FILES= \
./ZB/kk_device_manager.c\
./ZB/kk_product_code.c\
./ZB/kk_device_control.c\
./ZB/kk_zigbee_api.c\
./kk_test.c\
./kk_sub_tsl.c\
./kk_tsl_zigbee_map.c\
......
......@@ -223,6 +223,10 @@
// Individual areas
#define EMBER_AF_PRINT_CORE 0x0001
#define EMBER_AF_PRINT_APP 0x0002
#define EMBER_AF_PRINT_DEBUG 0x0002
#define EMBER_AF_PRINT_SECURITY 0x0004
#define EMBER_AF_PRINT_ATTRIBUTES 0x0008
#define EMBER_AF_PRINT_OTA_BOOTLOAD_CLUSTER 0x0010
......
......@@ -6,12 +6,12 @@
*************************************************************************************/
#define KK_GP_EP 242
static int kk_get_device_ep_number(EmberEUI64 mac,uint8_t *buffer,uint8_t maxLen,bool *over);
kk_device_table_s *kk_zb_device_table=NULL;
static void kk_device_table_save(void);
static void kk_device_table_load(void);
void kk_print_device_table(void)
{
......@@ -24,18 +24,15 @@ void kk_print_device_table(void)
emberAfAppPrint("\nMAC = " );
emberAfPrintBigEndianEui64(ptr->mac);
emberAfAppPrint("\nproductCode = %s",(ptr->productCode!=NULL)?ptr->productCode:"unknow");
emberAfAppPrint("\nEP Number = %d",ptr->epNumber);
for(i=0;i<ptr->epNumber;i++){
if(i==0) emberAfAppPrint("\nEP=" );
emberAfAppPrint("%d ",ptr->epValue[i]);
}
emberAfAppPrint("\nidentifyCnt = %d",ptr->identifyCnt);
ptr = ptr->next;
}
}
static kk_device_table_s *kk_device_table_create()
{
emberAfCorePrintln("[KK device table] create!");
emberAfCorePrintln("\n[KK device table] add!");
kk_device_table_s *node = (kk_device_table_s *)malloc(sizeof(kk_device_table_s));
......@@ -61,15 +58,14 @@ static kk_device_table_s *kk_device_table_find_next_empty()
}
}
static void kk_device_fill(kk_device_table_s *ptr,EmberEUI64 mac,uint8_t epNum,uint8_t* epVal,char *productCode)
static void kk_device_fill(kk_device_table_s *ptr,EmberEUI64 mac,EmberNodeId nodeId,char *productCode,uint16_t deviceId)
{
emberAfPrintBigEndianEui64(mac);
memcpy(ptr->mac,mac,sizeof(EmberEUI64));
ptr->epNumber = epNum;
ptr->epValue = (uint8_t *)malloc(epNum);
memcpy(ptr->epValue,epVal,epNum);
ptr->productCode = productCode;
ptr->nodeId = nodeId;
ptr->deviceId = deviceId;
ptr->identifyCnt = KK_MAX_READ_MODLE_ID_COUNT;
ptr->productCode = productCode;
}
kk_device_table_s * kk_device_find_by_mac(EmberEUI64 mac)
......@@ -84,6 +80,20 @@ kk_device_table_s * kk_device_find_by_mac(EmberEUI64 mac)
}
return NULL;
}
kk_device_table_s * kk_device_find_by_node(EmberNodeId node)
{
kk_device_table_s *ptr = kk_zb_device_table;
while(ptr!=NULL){
if(ptr->nodeId==node){
return ptr;
}
ptr = ptr->next;
}
return NULL;
}
bool kk_device_find_by_mac11111(EmberEUI64 mac)
{
kk_device_table_s *ptr = kk_zb_device_table;
......@@ -97,16 +107,26 @@ bool kk_device_find_by_mac11111(EmberEUI64 mac)
return false;
}
void kk_device_table_add(EmberEUI64 mac,uint8_t epNum,uint8_t* epVal,char *productCode)
void kk_device_table_add(EmberEUI64 mac,EmberNodeId nodeId,const char *productCode,uint16_t deviceId)
{
kk_device_table_s *ptr = kk_zb_device_table;
kk_device_table_s *newNode;
UTIL_LOG_INFO("\n********************kk device table add********************\n");
emberAfAppPrint("mac:");
emberAfPrintBigEndianEui64(mac);
if(kk_device_find_by_node(nodeId)!=NULL){
emberAfAppPrintln(" is already in device table!!!");
return ;
}
emberAfAppPrintln(",nodeId:0x%02x,productCode:%s,device id:0x%04x",nodeId,(productCode==NULL)?"nukown":productCode,deviceId);
if(ptr==NULL){
kk_zb_device_table = kk_device_table_create();
ptr = kk_zb_device_table;
kk_device_fill(ptr,mac,epNum,epVal,productCode);
kk_device_fill(ptr,mac,nodeId,productCode,deviceId);
return;
}
......@@ -117,7 +137,7 @@ void kk_device_table_add(EmberEUI64 mac,uint8_t epNum,uint8_t* epVal,char *produ
if(newNode!=NULL){
ptr->next = newNode;
kk_device_fill(newNode,mac,epNum,epVal,productCode);
kk_device_fill(newNode,mac,nodeId,productCode,deviceId);
}
}else{
emberAfCorePrintln("[KK device table] fatal!!!%s",__LINE__);
......@@ -135,7 +155,6 @@ void kk_device_table_delete(EmberEUI64 mac)
while(ptr!=NULL){
if(MEMCOMPARE(ptr->mac,mac,sizeof(EmberEUI64))==0){
if(ptr->next==NULL){
free(ptr->epValue);
free(ptr);
kk_zb_device_table = NULL;
emberAfCorePrintln("[KK device table]delete,now is empty !!!");
......@@ -144,12 +163,12 @@ void kk_device_table_delete(EmberEUI64 mac)
if(ptr==kk_zb_device_table){
kk_zb_device_table = ptr->next;
emberAfCorePrintln("[KK device table] delete list header");
free(ptr->epValue);
free(ptr);
return ;
}else{
ptr_temp->next = ptr->next;
free(ptr->epValue);
free(ptr);
emberAfCorePrintln("[KK device table] delete ");
return ;
......@@ -161,26 +180,101 @@ void kk_device_table_delete(EmberEUI64 mac)
}
}
static void kk_device_table_save(void)
{
FILE *fp;
int i;
uint16_t pLen;
kk_device_table_s *ptr = kk_zb_device_table;
fp = fopen("kk_devices.txt", "w");
while(ptr!=NULL){
for (i = 0; i < 8; i++) {
fprintf(fp, "%x ", ptr->mac[i]);
}
fprintf(fp, "%x ",ptr->nodeId);
fprintf(fp, "%x ",ptr->deviceId);
if(ptr->productCode==NULL){
pLen = 0;
}else{
pLen = strlen(ptr->productCode);
}
fprintf(fp,"%x ",pLen);
for(i=0;i<pLen;i++){
fprintf(fp,"%x ",ptr->productCode[i]);
}
ptr = ptr->next;
}
fclose(fp);
}
static void kk_device_table_load(void)
{
int i,flag;
uint8_t epNum = 0;
kk_device_table_s *p;
EmberAfPluginDeviceTableEntry*ptr = emberAfDeviceTablePointer();
uint8_t EP[KK_MAX_SUPPORT_ENDPOINT_NUMBER] = {0};
emberAfCorePrintln("\n-------------kk device table load.-------------\n");
for (i = 0; i < EMBER_AF_PLUGIN_DEVICE_TABLE_DEVICE_TABLE_SIZE; i++) {
if(ptr[i].state!=EMBER_AF_PLUGIN_DEVICE_TABLE_STATE_NULL &&
ptr[i].nodeId!=EMBER_AF_PLUGIN_DEVICE_TABLE_NULL_NODE_ID){
p = kk_device_find_by_mac(ptr[i].eui64);//todo
if(p==NULL){
epNum = kk_get_device_ep_number(ptr[i].eui64,EP,KK_MAX_SUPPORT_ENDPOINT_NUMBER,NULL);
kk_device_table_add(ptr[i].eui64,epNum,EP,TEST_PRODUCT_CODE);
}
UTIL_LOG_INFO("\n********************kk load device table********************\n");
FILE *fp;
int i;
EmberEUI64 mac;
uint16_t nodeId;//to do:诡异
uint16_t deviceId;
uint16_t len;
char pCode[33];
fp = fopen("kk_devices.txt", "r");
if(fp==NULL) return;
while(feof(fp) == false){
emberAfDebugPrintln("111");
for (i = 0; i< 8; i++) {
fscanf(fp, "%x ", &mac[i]);
}
emberAfDebugPrintln("222");
fscanf(fp, "%x", &nodeId);
fscanf(fp, "%x ", &deviceId);
emberAfDebugPrintln("len=%d",len);
fscanf(fp, "%x", &len);
for(i=0;i<len;i++){
fscanf(fp,"%x ",&pCode[i]);
}
pCode[i] = 0;
if(len==0){
kk_device_table_add(mac,nodeId,NULL,deviceId);
}else{
kk_device_table_add(mac,nodeId,pCode,deviceId);
}
}
kk_print_device_table();
fclose(fp);
//kk_device_table_add(EmberEUI64 mac,EmberNodeId nodeId,uint8_t epNum,uint8_t* epVal,char *productCode)
//kk_print_device_table();
}
static const char *kk_match_tsl_productCode(const char* modelId)
{
int i;
int num = kk_get_product_code_table_size();
UTIL_LOG_INFO("device model id:%s\n",modelId);
for(i=0;i<num && kk_product_code[i].modelId!=NULL;i++){
if(strstr(modelId,kk_product_code[i].modelId)!=NULL){
UTIL_LOG_INFO("match model id:%s\n",kk_product_code[i].modelId);
UTIL_LOG_INFO("tsl product code:%s\n",kk_product_code[i].code);
#ifdef KK_PRODUCT_CODE_STRING_ENABLE
UTIL_LOG_INFO("match product:%s",kk_product_code[i].name);
#endif
return kk_product_code[i].code;
}
}
return NULL;
}
////////////////////////////////////////////////////
......@@ -198,9 +292,11 @@ static int kk_match_device_id(uint16_t deviceId)
if(deviceId==0xffff) return -1;
for(i=0;zb_device_id[i].deviceId!=0xffff;i++){
if(zb_device_id[i].deviceId==deviceId){
emberAfDebugPrint("device:");
#ifdef ZIGBEE_DEVICE_ID_STRING_ENABLE
emberAfDebugPrintln("[device]%s",zb_device_id[i].deviceIdString);
emberAfDebugPrintln("%s",zb_device_id[i].deviceIdString);
#endif
return 0;
}
}
return -2;
......@@ -211,51 +307,146 @@ static int kk_match_product_code(uint16_t deviceId,uint8_t num,uint8_t *ep)
}
static int kk_get_device_ep_number(EmberEUI64 mac,uint8_t *buffer,uint8_t maxLen,bool *over)
static void kk_device_modle_id_identify(EmberNodeId nodeId,
uint8_t status,
uint8_t dataType,
uint8_t dataSize,
uint8_t *data)
{
uint16_t i;
uint8_t num = 0;
EmberAfPluginDeviceTableEntry*ptr = emberAfDeviceTablePointer();
for (i = 0; i < EMBER_AF_PLUGIN_DEVICE_TABLE_DEVICE_TABLE_SIZE; i++) {
if(MEMCOMPARE(ptr[i].eui64,mac,sizeof(EmberEUI64))==0 &&
ptr[i].state != EMBER_AF_PLUGIN_DEVICE_TABLE_STATE_NULL &&
ptr[i].nodeId!=EMBER_AF_PLUGIN_DEVICE_TABLE_NULL_NODE_ID){
if(ptr[i].endpoint!=KK_GP_EP){
buffer[num] = ptr[i].endpoint;
++num;
if(num>maxLen){
return;
kk_device_table_s *ptr = kk_zb_device_table;
EmberEUI64 eui64;
uint8_t modelID[33] = {0};
while(ptr!=NULL){
if(ptr->nodeId == nodeId){
emberAfCorePrintln("[match tsl]node:0x%04X,status:0x%02x,dataType:0x%02x",nodeId,status,dataType);
if(status==EMBER_ZCL_STATUS_SUCCESS ){//dataType==ZCL_CHAR_STRING_ATTRIBUTE_TYPE
ptr->identifyCnt = 0;
if(dataSize>=32){
dataSize = 32;
emberAfCorePrintln("[warring]modle id size = %d,max = 32!!!");
}
memcpy(modelID,data,dataSize);
ptr->productCode = kk_match_tsl_productCode(modelID);
if(ptr->productCode!=NULL){
if(emberAfDeviceTableGetEui64FromNodeId(ptr->nodeId,eui64)){
kk_rpc_reportDevices(eui64,ptr->productCode);
}else{
UTIL_LOG_WARNING("not find mac from node in device table!!!");
}
}else{
emberAfCorePrintln("not match tsl!!!");
}
}else if(status==EMBER_ZCL_STATUS_UNSUPPORTED_ATTRIBUTE){
ptr->identifyCnt = 0;
emberAfCorePrintln("nodeId:0x%04X,unsupport model id attr,CNT=%d",nodeId,ptr->identifyCnt);
//to do :zdo leave ???
}else{
emberAfCorePrintln("nodeId:0x%04X,read modle id fail,status=0x%x",nodeId,status);
}
return;
}
ptr = ptr->next;
}
return num;
}
void kk_dispatch_productCode(EmberEUI64 mac)
}
void kk_read_attr_response(EmberNodeId nodeId,
uint8_t ep,
EmberAfClusterId cluster,
EmberAfAttributeId attribute,
uint8_t status,
uint8_t dataType,
uint8_t dataSize,
uint8_t *data)
{
uint16_t deviceTableIndex = emberAfDeviceTableGetFirstIndexFromEui64(mac);
EmberAfPluginDeviceTableEntry*deviceTable = emberAfDeviceTablePointer();
uint16_t deviceId = 0xffff;
bool flag = 0;
uint8_t epNum = 0;
uint8_t EP[KK_MAX_SUPPORT_ENDPOINT_NUMBER] = {0};
if(deviceTableIndex!=EMBER_AF_PLUGIN_DEVICE_TABLE_NULL_INDEX){
deviceId = deviceTable[deviceTableIndex].deviceId;
emberAfAppPrintln("ep=%d,cluster=0x%04X,attribute=0x%04X",ep,cluster,attribute);
if(cluster==ZCL_BASIC_CLUSTER_ID){
if(attribute==ZCL_MODEL_IDENTIFIER_ATTRIBUTE_ID){
if(ep==KK_PRIMARY_EP)
kk_device_modle_id_identify(nodeId,status,dataType,dataSize,data);
}
}
if(kk_match_device_id(deviceId)==0){
epNum = kk_get_device_ep_number(mac,EP,KK_MAX_SUPPORT_ENDPOINT_NUMBER,&flag);
if(flag==true){
emberAfCorePrintln("[Warring]device ep num= %d,max=%d",epNum,KK_MAX_SUPPORT_ENDPOINT_NUMBER);
}
void emberAfPluginDeviceTableNewDeviceCallback(EmberEUI64 nodeEui64)
{
kk_device_joined(emberAfDeviceTableGetNodeIdFromEui64(nodeEui64));
}
void kk_device_joined(EmberNodeId node)
{
EmberEUI64 mac;
uint16_t deviceId;
uint16_t deviceTableIndex;
EmberAfPluginDeviceTableEntry*devPtr;
UTIL_LOG_INFO("\n********************kk device joined********************\n");
if(emberAfDeviceTableGetEui64FromNodeId(node,mac)==false){
deviceTableIndex = emberAfDeviceTableGetIndexFromNodeId(node);
if(deviceTableIndex!=0xffff){
devPtr = emberAfDeviceTablePointer();
kk_add_device_to_table(mac,node,devPtr[deviceTableIndex].deviceId);
}
}else{
emberAfDebugPrintln("[not find 111]");
if(emberLookupEui64ByNodeId(node,mac)==EMBER_SUCCESS){
deviceTableIndex = emberAfDeviceTableGetIndexFromNodeId(node);
if(deviceTableIndex!=0xffff){
devPtr = emberAfDeviceTablePointer();
kk_add_device_to_table(mac,node,devPtr[deviceTableIndex].deviceId);
}
}else{
emberAfDebugPrintln("[not find 222]");
}
kk_device_table_add(mac,epNum,EP,TEST_PRODUCT_CODE);
}
}
void kk_productCode_tick()
{
kk_device_table_s *ptr = kk_zb_device_table;
EmberEUI64 eui64;
EmberStatus status;
while(ptr!=NULL){
if(ptr->productCode == NULL){
if(ptr->nodeId!=0xffff && ptr->identifyCnt!=0){
status = zclGRead(ptr->nodeId,
1,
1,
false,
ZCL_BASIC_CLUSTER_ID,
ZCL_MODEL_IDENTIFIER_ATTRIBUTE_ID,
true);
--ptr->identifyCnt;
emberAfCorePrintln("read model id from node:0x%02x,status=0x%x,cnt=%d",ptr->nodeId,status,ptr->identifyCnt);
}else{
emberAfCorePrintln("not find node!");
}
}
ptr = ptr->next;
}
}
//to do:syn kk device table with ember device table
void kk_add_device_to_table(EmberEUI64 mac,EmberNodeId nodeId,uint16_t deviceId)
{
UTIL_LOG_INFO("\n------------------------kk add device------------------------\n");
emberAfAppPrint("mac:");
emberAfPrintBigEndianEui64(mac);
emberAfAppPrintln("\nnode:0x%04X,device id:0x%04x",nodeId,deviceId);
kk_match_device_id(deviceId);
kk_device_table_add(mac,nodeId,NULL,deviceId);
kk_device_table_save();
}
......@@ -263,6 +454,20 @@ void kk_dispatch_productCode(EmberEUI64 mac)
void emberAfPluginDeviceTableRejoinDeviceCallback(EmberEUI64 nodeEui64)
{
kk_device_table_s *ptr = kk_device_find_by_mac(nodeEui64);
if(ptr == NULL){
UTIL_LOG_INFO("not in device table!!!");
emberAfPrintBigEndianEui64(nodeEui64);
emberAfDebugPrintln("");
return ;
}
if(ptr->productCode!=NULL){
kk_rpc_reportDevices(nodeEui64,ptr->productCode);
}
}
......
......@@ -12,19 +12,33 @@
typedef struct kk_device_table_s{
EmberEUI64 mac;
uint8_t epNumber;
uint8_t *epValue;
EmberNodeId nodeId;
uint16_t deviceId;
uint16_t identifyCnt;
char *productCode;
struct kk_device_table_s *next;
}kk_device_table_s;
#define KK_MAX_SUPPORT_ENDPOINT_NUMBER 32
#define KK_MAX_READ_MODLE_ID_COUNT 30
void kk_print_device_table(void);
kk_device_table_s * kk_device_find_by_mac(EmberEUI64 mac);
void kk_device_table_add(EmberEUI64 mac,uint8_t epNum,uint8_t* epVal,char *productCode);
void kk_device_table_add(EmberEUI64 mac,EmberNodeId nodeId,const char *productCode,uint16_t deviceId);
void kk_device_table_delete(EmberEUI64 mac);
void kk_add_device_to_table(EmberEUI64 mac,EmberNodeId nodeId,uint16_t deviceId);
void kk_productCode_tick();
void kk_read_attr_response(EmberNodeId nodeId,
uint8_t ep,
EmberAfClusterId cluster,
EmberAfAttributeId attribute,
uint8_t status,
uint8_t dataType,
uint8_t dataSize,
uint8_t *data);
......
......@@ -12,52 +12,118 @@
#ifdef KK_PRODUCT_CODE_STRING_ENABLE
kk_product_code_s kk_product_code[]={
{_2EP_ZERO_FIRE_LIGHTING_MODULE_CODE,NULL,_2EP_ZERO_FIRE_LIGHTING_MODULE_NAME},
{DOOYA_CURTAIN_MOTOR_CODE,DOOYA_CURTAIN_MOTOR_MODEL_ID,DOOYA_CURTAIN_MOTOR_NAME},
{_1EP_ZERO_FIRE_PANEL_CODE,NULL,_1EP_ZERO_FIRE_PANEL_NAME},
{_2EP_ZERO_FIRE_PANEL_CODE,NULL,_2EP_ZERO_FIRE_PANEL_NAME},
{_3EP_ZERO_FIRE_PANEL_CODE,NULL,_3EP_ZERO_FIRE_PANE_NAME},
{ADJUSTABLE_LIGHT_KNOB_PANEL_CODE,NULL,ADJUSTABLE_LIGHT_KNOB_PANEL_NAME},
{CHOPIN_WALL_OUTLET_10A_CODE,CHOPIN_WALL_OUTLET_10A_CODE_NAME_MODEL_ID,CHOPIN_WALL_OUTLET_10A_CODE_NAME},
{CHOPIN_WALL_OUTLET_16A_CODE,CHOPIN_WALL_OUTLET_16A_CODE_NAME_MODEL_ID,CHOPIN_WALL_OUTLET_16A_CODE_NAME},
{_1EP_STARS_ZERO_FIRE_PANEL_CODE,_1EP_STARS_ZERO_FIRE_PANEL_MODEL_ID,_1EP_STARS_ZERO_FIRE_PANEL_NAME},
{_2EP_STARS_ZERO_FIRE_PANEL_CODE,_2EP_STARS_ZERO_FIRE_PANEL_MODEL_ID,_2EP_STARS_ZERO_FIRE_PANEL_NAME},
{_3EP_STARS_ZERO_FIRE_PANEL_CODE,_3EP_STARS_ZERO_FIRE_PANEL_MODEL_ID,_3EP_STARS_ZERO_FIRE_PANEL_NAME},
{_1EP_CHOPIN_ZERO_FIRE_PANEL_CODE,_1EP_CHOPIN_ZERO_FIRE_PANEL_MODEL_ID,_1EP_CHOPIN_ZERO_FIRE_PANEL_NAME},
{_2EP_CHOPIN_ZERO_FIRE_PANEL_CODE,_2EP_CHOPIN_ZERO_FIRE_PANEL_MODEL_ID,_2EP_CHOPIN_ZERO_FIRE_PANEL_NAME},
{_3EP_CHOPIN_ZERO_FIRE_PANEL_CODE,_3EP_CHOPIN_ZERO_FIRE_PANEL_MODEL_ID,_3EP_CHOPIN_ZERO_FIRE_PANEL_NAME},
{_1EP_CHOPIN_CURTAIN_MOTOR_CODE,_1EP_CHOPIN_CURTAIN_MOTOR_MODEL_ID,_1EP_CHOPIN_CURTAIN_MOTOR_NAME},
{_2EP_CHOPIN_CURTAIN_MOTOR_CODE,_2EP_CHOPIN_CURTAIN_MOTOR_MODEL_ID,_2EP_CHOPIN_CURTAIN_MOTOR_NAME},
{_1EP_PLATINUM_SWITCH_CODE,_1EP_PLATINUM_SWITCH_MODEL_ID,_1EP_PLATINUM_SWITCH_NAME},
{_2EP_PLATINUM_SWITCH_CODE,_2EP_PLATINUM_SWITCH_MODEL_ID,_2EP_PLATINUM_SWITCH_NAME},
{_3EP_PLATINUM_SWITCH_CODE,_3EP_PLATINUM_SWITCH_MODEL_ID,_3EP_PLATINUM_SWITCH_NAME},
{PLATINUM_ACTUATOR_PANEL_CODE,NULL,PLATINUM_ACTUATOR_PANEL_NAME},
{RGB_LIGHT_CODE,RGB_LIGHT_NAME_MODEL_ID,RGB_LIGHT_NAME},
{"00068611","3001","星辰系列.白色零火线单路灯控面板Z3S(KONKE)"},
{"00068612","3002","星辰系列.白色零火线双路灯控面板Z3S(KONKE)"},
{"00068613","3003","星辰系列.白色零火线三路灯控面板Z3S(KONKE)"},
{"00048611","3004","星辰系列.白色零火线情景面板Z3S(KONKE)"},
{"00038611","3005","星辰系列.白色零火线单路窗帘面板Z3S(KONKE)"},
{"00038612","3006","星辰系列.白色零火线双路窗帘面板Z3S(KONKE)"},
{"00038613","3007","星辰系列·白色干触点单路窗帘面板Z3S(KONKE)"},
{"00038614","3008","星辰系列·白色干触点双路窗帘面板Z3S(KONKE)"},
{"00068601","3009","铂金系列.白色零火线单路灯控面板Z3S(KONKE)"},
{"00068602","3010","铂金系列.白色零火线双路灯控面板Z3S(KONKE)"},
{"00068603","3011","铂金系列.白色零火线三路灯控面板Z3S(KONKE)"},
{"00038601","3012","铂金系列.白色零火线窗帘面板Z3S(KONKE)"},
{"00048601","3013","铂金系列.白色零火线情景面板Z3S(KONKE)"},
{"00048602","3014","铂金系列.白色快捷面板Z3S(KONKE)"},
{"0402802C","3015","铂金系列.白色零火线SOS紧急呼叫面板Z3S(KONKE)"},
{"0402812C","3016","铂金系列.白色紧急呼叫按钮Z3S(KONKE)"},
{"00038603","3017","铂金系列.白色零火线推窗器面板Z3S(KONKE)"},
{"01018601","3018","铂金系列.白色零火线调光面板Z3S(KONKE)"},
{"00518610","3019","铂金系列.白色10A智能插座Z3S(KONKE)"},
{"00518616","3020","铂金系列.白色16A智能插座Z3S(KONKE)"},
{"00038602","3021","铂金系列·白色干触点窗帘面板Z3S(安心加)"},
{"00068621","3022","肖邦系列.白色零火线单路灯控面板Z3S(KONKE)"},
{"00068622","3023","肖邦系列.白色零火线双路灯控面板Z3S(KONKE)"},
{"00068623","3024","肖邦系列.白色零火线三路灯控面板Z3S(KONKE)"},
{"00048621","3025","肖邦系列.白色零火线情景面板Z3S(KONKE)"},
{"00038621","3026","肖邦系列.白色零火线单路窗帘面板Z3S(KONKE)"},
{"00038622","3027","肖邦系列.白色零火线双路窗帘面板Z3S(KONKE)"},
{"00518620","3037","肖邦系列.白色10A智能插座Z3S(KONKE)"},
{"00518626","3038","肖邦系列.白色16A智能插座Z3S(KONKE)"},
{"0402002A","3039","水浸传感器-HZB30S版(KONKE)"},
{"0402002B","3040","燃气报警器-HZ3S版(KONKE)"},
{"04020028","3041","烟雾报警器-HZ3S版(KONKE)"},
{"0402010D","3043","红外幕帘探测器HZ3S版(KONKE)"},
{"03020001","3076","环境传感器KZ3S(KONKE)"},
{"00510001","3046","KIT系列.白色快捷情景按钮"},
{"03020000","3048","KIT系列.白色温湿度传感器"},
{"0402000D","3049","KIT系列.白色人体传感器"},
{"04020015","3050","KIT系列.白色门窗传感器"},
{"04021015","3051","邦德系列.白色门窗传感器(KONKE)"},
{"0402102C","3054","邦德系列.白色SOS按钮(KONKE)"},
{"0402102A","3055","邦德系列.白色水浸传感器(KONKE)"},
{"00040002","3056","邦德系列.白色快捷按键(KONKE)"},
{"04031225","3057","邦德系列.白色声光传感器(KONKE)"},
{"02020000","3067","智能窗帘电机Z3S(KONKE_杜亚款)"},
{"02020001","3068","威刚系列.智能窗帘电机Z3S(KONKE_威士达款)"},
{"01000002","3069","双路智能灯控模块Z3S(KONKE)"},
{"04028301","3070","传感器模块Z3S(KONKE)"},
{"03300001","3071","智能水阀控制器Z3S(KONKE)"},
{"03310001","3072","智能燃气机械臂控制器Z3S(KONKE)"},
{"01020001","3073","幻彩灯带控制器Z3S(KONKE)"},
{"00648631","3077","多功能面板(亚运村临时项目)"},
{NULL,NULL,NULL}
};
#else
kk_product_code_s kk_product_code[]={
{_2EP_ZERO_FIRE_LIGHTING_MODULE_CODE,NULL},
{DOOYA_CURTAIN_MOTOR_CODE,DOOYA_CURTAIN_MOTOR_MODEL_ID},
{_1EP_ZERO_FIRE_PANEL_CODE,NULL},
{_2EP_ZERO_FIRE_PANEL_CODE,NULL},
{_3EP_ZERO_FIRE_PANEL_CODE,NULL},
{ADJUSTABLE_LIGHT_KNOB_PANEL_CODE,NULL},
{CHOPIN_WALL_OUTLET_10A_CODE,CHOPIN_WALL_OUTLET_10A_CODE_NAME_MODEL_ID},
{CHOPIN_WALL_OUTLET_16A_CODE,CHOPIN_WALL_OUTLET_16A_CODE_NAME_MODEL_ID},
{_1EP_STARS_ZERO_FIRE_PANEL_CODE,_1EP_STARS_ZERO_FIRE_PANEL_MODEL_ID},
{_2EP_STARS_ZERO_FIRE_PANEL_CODE,_2EP_STARS_ZERO_FIRE_PANEL_MODEL_ID},
{_3EP_STARS_ZERO_FIRE_PANEL_CODE,_3EP_STARS_ZERO_FIRE_PANEL_MODEL_ID},
{_1EP_CHOPIN_ZERO_FIRE_PANEL_CODE,_1EP_CHOPIN_ZERO_FIRE_PANEL_MODEL_ID},
{_2EP_CHOPIN_ZERO_FIRE_PANEL_CODE,_2EP_CHOPIN_ZERO_FIRE_PANEL_MODEL_ID},
{_3EP_CHOPIN_ZERO_FIRE_PANEL_CODE,_3EP_CHOPIN_ZERO_FIRE_PANEL_MODEL_ID},
{_1EP_CHOPIN_CURTAIN_MOTOR_CODE,_1EP_CHOPIN_CURTAIN_MOTOR_MODEL_ID},
{_2EP_CHOPIN_CURTAIN_MOTOR_CODE,_2EP_CHOPIN_CURTAIN_MOTOR_MODEL_ID},
{_1EP_PLATINUM_SWITCH_CODE,_1EP_PLATINUM_SWITCH_MODEL_ID},
{_2EP_PLATINUM_SWITCH_CODE,_2EP_PLATINUM_SWITCH_MODEL_ID},
{_3EP_PLATINUM_SWITCH_CODE,_3EP_PLATINUM_SWITCH_MODEL_ID},
{PLATINUM_ACTUATOR_PANEL_CODE,NULL},
{RGB_LIGHT_CODE,RGB_LIGHT_NAME_MODEL_ID},
{"00068611","3001"},//"星辰系列.白色零火线单路灯控面板Z3S(KONKE)"
{"00068612","3002"},//"星辰系列.白色零火线双路灯控面板Z3S(KONKE)"
{"00068613","3003"},//"星辰系列.白色零火线三路灯控面板Z3S(KONKE)"
{"00048611","3004"},//"星辰系列.白色零火线情景面板Z3S(KONKE)"
{"00038611","3005"},//"星辰系列.白色零火线单路窗帘面板Z3S(KONKE)"
{"00038612","3006"},//"星辰系列.白色零火线双路窗帘面板Z3S(KONKE)"
{"00038613","3007"},//"星辰系列·白色干触点单路窗帘面板Z3S(KONKE)"
{"00038614","3008"},//"星辰系列·白色干触点双路窗帘面板Z3S(KONKE)"
{"00068601","3009"},//"铂金系列.白色零火线单路灯控面板Z3S(KONKE)"
{"00068602","3010"},//"铂金系列.白色零火线双路灯控面板Z3S(KONKE)"
{"00068603","3011"},//"铂金系列.白色零火线三路灯控面板Z3S(KONKE)"
{"00038601","3012"},//"铂金系列.白色零火线窗帘面板Z3S(KONKE)"
{"00048601","3013"},//"铂金系列.白色零火线情景面板Z3S(KONKE)"
{"00048602","3014"},//"铂金系列.白色快捷面板Z3S(KONKE)"
{"0402802C","3015"},//"铂金系列.白色零火线SOS紧急呼叫面板Z3S(KONKE)"
{"0402812C","3016"},//"铂金系列.白色紧急呼叫按钮Z3S(KONKE)"
{"00038603","3017"},//"铂金系列.白色零火线推窗器面板Z3S(KONKE)"
{"01018601","3018"},//"铂金系列.白色零火线调光面板Z3S(KONKE)"
{"00518610","3019"},//"铂金系列.白色10A智能插座Z3S(KONKE)"
{"00518616","3020"},//"铂金系列.白色16A智能插座Z3S(KONKE)"
{"00038602","3021"},//"铂金系列·白色干触点窗帘面板Z3S(安心加)"
{"00068621","3022"},//"肖邦系列.白色零火线单路灯控面板Z3S(KONKE)"
{"00068622","3023"},//"肖邦系列.白色零火线双路灯控面板Z3S(KONKE)"
{"00068623","3024"},//"肖邦系列.白色零火线三路灯控面板Z3S(KONKE)"
{"00048621","3025"},//"肖邦系列.白色零火线情景面板Z3S(KONKE)"
{"00038621","3026"},//"肖邦系列.白色零火线单路窗帘面板Z3S(KONKE)"
{"00038622","3027"},//"肖邦系列.白色零火线双路窗帘面板Z3S(KONKE)"
{"00518620","3037"},//"肖邦系列.白色10A智能插座Z3S(KONKE)"
{"00518626","3038"},//"肖邦系列.白色16A智能插座Z3S(KONKE)"
{"0402002A","3039"},//"水浸传感器-HZB30S版(KONKE)"
{"0402002B","3040"},//"燃气报警器-HZ3S版(KONKE)"
{"04020028","3041"},//"烟雾报警器-HZ3S版(KONKE)"
{"0402010D","3043"},//"红外幕帘探测器HZ3S版(KONKE)"
{"03020001","3076"},//"环境传感器KZ3S(KONKE)"
{"00510001","3046"},//"KIT系列.白色快捷情景按钮"
{"03020000","3048"},//"KIT系列.白色温湿度传感器"
{"0402000D","3049"},//"KIT系列.白色人体传感器"
{"04020015","3050"},//"KIT系列.白色门窗传感器"
{"04021015","3051"},//"邦德系列.白色门窗传感器(KONKE)"
{"0402102C","3054"},//"邦德系列.白色SOS按钮(KONKE)"
{"0402102A","3055"},//"邦德系列.白色水浸传感器(KONKE)"
{"00040002","3056"},//"邦德系列.白色快捷按键(KONKE)"
{"04031225","3057"},//"邦德系列.白色声光传感器(KONKE)"
{"02020000","3067"},//"智能窗帘电机Z3S(KONKE_杜亚款)"
{"02020001","3068"},//"威刚系列.智能窗帘电机Z3S(KONKE_威士达款)"
{"01000002","3069"},//"双路智能灯控模块Z3S(KONKE)"
{"04028301","3070"},//"传感器模块Z3S(KONKE)"
{"03300001","3071"},//"智能水阀控制器Z3S(KONKE)"
{"03310001","3072"},//"智能燃气机械臂控制器Z3S(KONKE)"
{"01020001","3073"},//"幻彩灯带控制器Z3S(KONKE)"
{"00648631","3077"},//"多功能面板(亚运村临时项目)"
{NULL,NULL}
};
#endif
\ No newline at end of file
#endif
int kk_get_product_code_table_size(void)
{
return sizeof(kk_product_code)/sizeof(kk_product_code_s);
}
\ No newline at end of file
......@@ -9,144 +9,15 @@
#define KK_PRODUCT_CODE_STRING_ENABLE
typedef struct{
char *code;
char *modelId;
char *code;
#ifdef KK_PRODUCT_CODE_STRING_ENABLE
char *name;
#endif
}kk_product_code_s;
#define _2EP_ZERO_FIRE_LIGHTING_MODULE_CODE "11"
#define DOOYA_CURTAIN_MOTOR_CODE "24"
#define _1EP_ZERO_FIRE_PANEL_CODE "83"
#define _2EP_ZERO_FIRE_PANEL_CODE "84"
#define _3EP_ZERO_FIRE_PANEL_CODE "85"
#define ADJUSTABLE_LIGHT_KNOB_PANEL_CODE "89"
#define CHOPIN_WALL_OUTLET_10A_CODE "90"
#define CHOPIN_WALL_OUTLET_16A_CODE "91"
#define _1EP_STARS_ZERO_FIRE_PANEL_CODE "96"
#define _2EP_STARS_ZERO_FIRE_PANEL_CODE "97"
#define _3EP_STARS_ZERO_FIRE_PANEL_CODE "98"
#define _1EP_CHOPIN_ZERO_FIRE_PANEL_CODE "102"
#define _2EP_CHOPIN_ZERO_FIRE_PANEL_CODE "103"
#define _3EP_CHOPIN_ZERO_FIRE_PANEL_CODE "104"
#define _1EP_CHOPIN_CURTAIN_MOTOR_CODE "105"
#define _2EP_CHOPIN_CURTAIN_MOTOR_CODE "106"
#define _1EP_PLATINUM_SWITCH_CODE "1002"
#define _2EP_PLATINUM_SWITCH_CODE "1003"
#define _3EP_PLATINUM_SWITCH_CODE "1004"
#define PLATINUM_ACTUATOR_PANEL_CODE "1007"
#define RGB_LIGHT_CODE "1022"
#define DOOYA_CURTAIN_MOTOR_MODEL_ID "02020000"
#define CHOPIN_WALL_OUTLET_10A_CODE_NAME_MODEL_ID "00518620"
#define CHOPIN_WALL_OUTLET_16A_CODE_NAME_MODEL_ID "00518626"
#define _1EP_STARS_ZERO_FIRE_PANEL_MODEL_ID "00068611"
#define _2EP_STARS_ZERO_FIRE_PANEL_MODEL_ID "00068612"
#define _3EP_STARS_ZERO_FIRE_PANEL_MODEL_ID "00068613"
#define _1EP_PLATINUM_SWITCH_MODEL_ID "00068601"
#define _2EP_PLATINUM_SWITCH_MODEL_ID "00068602"
#define _3EP_PLATINUM_SWITCH_MODEL_ID "00068603"
#define PLATINUM_ACTUATOR_PANEL_NAME_MODEL_ID "00038603"
#define RGB_LIGHT_NAME_MODEL_ID "01020001"
#define _1EP_CHOPIN_ZERO_FIRE_PANEL_MODEL_ID "00068621"
#define _2EP_CHOPIN_ZERO_FIRE_PANEL_MODEL_ID "00068622"
#define _3EP_CHOPIN_ZERO_FIRE_PANEL_MODEL_ID "00068623"
#define _1EP_CHOPIN_CURTAIN_MOTOR_MODEL_ID "00038621"
#define _2EP_CHOPIN_CURTAIN_MOTOR_MODEL_ID "00038622"
#ifdef KK_PRODUCT_CODE_STRING_ENABLE
#define _2EP_ZERO_FIRE_LIGHTING_MODULE_NAME "两路零火灯光模块"
#define DOOYA_CURTAIN_MOTOR_NAME "智能窗帘电机(杜亚)"
#define _1EP_ZERO_FIRE_PANEL_NAME "一路零火面板(肖邦系列)"
#define _2EP_ZERO_FIRE_PANEL_NAME "两路零火面板(肖邦系列)"
#define _3EP_ZERO_FIRE_PANE_NAME "三路零火面板(肖邦系列)"
#define ADJUSTABLE_LIGHT_KNOB_PANEL_NAME "可调光旋钮面板(肖邦系列)"
#define CHOPIN_WALL_OUTLET_10A_CODE_NAME "入墙插座10A(肖邦系列)"
#define CHOPIN_WALL_OUTLET_16A_CODE_NAME "入墙插座16A(肖邦系列)"
#define _1EP_STARS_ZERO_FIRE_PANEL_NAME "星辰一路零火面板"
#define _2EP_STARS_ZERO_FIRE_PANEL_NAME "星辰两路零火面板"
#define _3EP_STARS_ZERO_FIRE_PANEL_NAME "星辰三路零火面板"
#define _1EP_CHOPIN_ZERO_FIRE_PANEL_NAME "一路零火面板(肖邦系列)定制版"
#define _2EP_CHOPIN_ZERO_FIRE_PANEL_NAME "两路零火面板(肖邦系列)定制版"
#define _3EP_CHOPIN_ZERO_FIRE_PANEL_NAME "三路零火面板(肖邦系列)定制版"
#define _1EP_CHOPIN_CURTAIN_MOTOR_NAME "一路窗帘面板(肖邦系列)定制版"
#define _2EP_CHOPIN_CURTAIN_MOTOR_NAME "两路窗帘面板(肖邦系列)定制版"
#define _1EP_PLATINUM_SWITCH_NAME "铂金系列一路灯控"
#define _2EP_PLATINUM_SWITCH_NAME "铂金系列两路灯控"
#define _3EP_PLATINUM_SWITCH_NAME "铂金系列三路灯控"
#define PLATINUM_ACTUATOR_PANEL_NAME "铂金系列推窗面板"
#define RGB_LIGHT_NAME "RGBW灯带"
#endif
/*
Z3D_IASZONE = 0x04020000, // IAS Zone 设备ID,不表示具体设备
Z3D_IASWD = 0x04030000, // IAS WD 设备ID,不表示具体设备
// 高级别状态指示类设备,APP客户端中显示状态需要和设备实际状态保持高度一致!状态上报不允许丢失,所以需要尝试多次上报!
Z3D_SMARTPLUG = 0x00510000, // 智能插座插座
Z3D_IAS_CONTACT_SWITCH = 0x04020015, // 门磁: IAS Zone device id + device type
Z3D_IAS_FIRE_SENSOR = 0x04020028, // 烟雾传感器: IAS Zone device id + device type
Z3D_IAS_WATER_SENSOR = 0x0402002A, // 水浸传感器: IAS Zone device id + device type
Z3D_IAS_GAS_SENSOR = 0x0402002B, // 气体传感器: IAS Zone device id + device type
Z3D_IAS_WD = 0x04030225, // 标准报警器(声光报警等): IAS WD device id + device type[in IAS Zone]
Z3D_WINDOW_COVERING = 0x02020000, // 窗帘电机(杜亚)
// Serial - 铂金
Z3D_BJSP_S1G = 0x00068601, // 铂金开关面板1路
Z3D_BJSP_S2G = 0x00068602, // 铂金开关面板2路
Z3D_BJSP_S3G = 0x00068603, // 铂金开关面板3路
Z3D_BJPP_C20 = 0x00518610, // 铂金墙插面板10A
Z3D_BJPP_C26 = 0x00518616, // 铂金墙插面板16A
Z3D_BJCP_S1G = 0x00038601, // 铂金窗帘面板1路
Z3D_BJOWP_S1G = 0x00038603, // 铂金一路推窗器面板
Z3D_BJDLP_S1G = 0x01018601, // 铂金调光面板
Z3D_BJSCP_S3G = 0x00048601, // 铂金情景面板(3路)
Z3D_BJQKP_S3G = 0x00048602, // 铂金快捷面板(3路)
Z3D_BJSOS_PANEL = 0X0402802C, // 铂金SOS面板(零火线)
Z3D_BJSOS_BUTTON= 0X0402812C, // 铂金SOS按钮(电池)
// Serial - 星辰
Z3D_XCSP_S1G = 0x00068611, // 星辰开关面板1路
Z3D_XCSP_S2G = 0x00068612, // 星辰开关面板2路
Z3D_XCSP_S3G = 0x00068613, // 星辰开关面板3路
Z3D_XCCP_S1G = 0x00038611, // 星辰窗帘面板1路
Z3D_XCCP_S2G = 0x00038612, // 星辰窗帘面板2路
Z3D_XCSCP_S4G = 0x00048611, // 星辰情景面板(4路)
// Serial - 肖邦
Z3D_XBSP_S1G = 0x00068621, // 肖邦开关面板1路
Z3D_XBSP_S2G = 0x00068622, // 肖邦开关面板2路
Z3D_XBSP_S3G = 0x00068623, // 肖邦开关面板3路
Z3D_XBPP_D20 = 0x00518620, // 肖邦墙插面板10A
Z3D_XBPP_D26 = 0x00518626, // 肖邦墙插面板16A
Z3D_XBCP_S1G = 0x00038621, // 肖邦窗帘面板1路
Z3D_XBCP_S2G = 0x00038622, // 肖邦窗帘面板2路
Z3D_XBSCP_S4G = 0x00048621, // 肖邦情景面板(4路)
Z3D_LMCW_LOCK0 = 0x01018000, // 创维门锁不带指纹
Z3D_LMCW_LOCK1 = 0x01018001, // 创维门锁带指纹
// 低等级状态指示类设备,APP客户端中仅记录历史状态,状态上报允许存在丢失
Z3D_ENVI_SENSOR = 0x03020000, // 温度传感器: Temperature device id + model id,注意控客环境同时存在温度和湿度,为了兼容其他厂家仅有温度的传感,这里设备类型仅使用温度device_id+model_id来确定!
// 动作触发类设备,APP客户端中仅记录历史操作,动作触发上报为实时,且允许存在丢失
Z3D_SWITCH = 0x00510001, // 快捷按钮
Z3D_IAS_MOTION_SENSOR = 0x0402000D, // 移动传感器: IAS Zone device id + device type
Z3D_UNKNOW = 0xFFFFFFFF, // 未知类型
*/
int kk_get_product_code_table_size(void);
extern kk_product_code_s kk_product_code[];
......@@ -173,6 +44,7 @@ extern kk_product_code_s kk_product_code[];
#endif
......
......@@ -103,22 +103,23 @@ int kk_sendData2CCU(char* data, int len){
void kk_rpc_reportDevices(EmberEUI64 mac)
void kk_rpc_reportDevices(EmberEUI64 mac,const char* productCode)
{
cJSON* devicesJson;
EmberEUI64 eui64;
emberAfGetEui64(eui64);
char macString[19] = {0};
UTIL_LOG_WARNING("report tsl product code:%s\n",productCode);
emberAfPrintBigEndianEui64(mac);
emberAfDebugPrintln("");
devicesJson = rpc_cJSON_CreateObject();
rpc_eui64ToString(mac,macString);
rpc_cJSON_AddStringToObject(devicesJson, "productCode",TEST_PRODUCT_CODE);
rpc_cJSON_AddStringToObject(devicesJson, "productCode",productCode);
rpc_cJSON_AddStringToObject(devicesJson, "deviceCode",macString);
rpc_cJSON_AddStringToObject(devicesJson, "mac",macString);
//
kk_sub_tsl_add(mac,TEST_PRODUCT_CODE);
kk_rpc_report_devices(devicesJson,eui64);
kk_sub_tsl_add(mac,productCode);
kk_rpc_report_devices(devicesJson,mac);
}
......@@ -555,35 +556,34 @@ error_return:
void emberAfPluginDeviceTableNewDeviceCallback(EmberEUI64 nodeEui64)
{
uint16_t deviceTableIndex = emberAfDeviceTableGetFirstIndexFromEui64(nodeEui64);
if(deviceTableIndex == 0xffff){
kk_print_info("not find item!");
return ;
}
EmberAfPluginDeviceTableEntry *deviceTable = emberAfDeviceTablePointer();
//cJSON* nodeJson = rpc_reportDeviceState("joined",deviceTable[deviceTableIndex].eui64);
//rpc_printfJSON("joined",nodeJson);
//rpc_send_message(nodeJson,"device joined");
//rpc_add_device(deviceTable[deviceTableIndex].nodeId);
//kk_report_device_s device;
//device.mac = nodeEui64;
//device.AppVersion = 0x10;
//memcpy(device.mac,nodeEui64,EUI64_SIZE);
kk_rpc_reportDevices(deviceTable[deviceTableIndex].eui64);
#define KK_NETWORK_PARAMETER_TX_POWER 10
#define KK_NETWORK_PARAMETER_CHANNEL 0x0B
void kk_network_check(void)
{
EmberEUI64 eui64;
EmberPanId panId;
EmberStatus status;
if(ezspNetworkState()!= EMBER_JOINED_NETWORK ){
emberAfGetEui64(eui64);
panId = HIGH_LOW_TO_INT(eui64[1],eui64[0]);
status = kk_network_form(true,panId,KK_NETWORK_PARAMETER_TX_POWER,KK_NETWORK_PARAMETER_CHANNEL);
if(status==EMBER_SUCCESS){
emberAfAppPrintln("network form success~~~~~~");
}else{
emberAfAppPrintln("network form fail!!!,status=0x%x",status);
}
}else{
kk_print_network_info();
}
}
int kk_report_global_onoff_attribute(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data)
{
emberAfAppPrintln("kk_report_global_onoff_attribute");
......@@ -643,14 +643,21 @@ int kk_report_windowCovering_position_attribute(EmberEUI64 eui64,uint8_t EP,Embe
return -3;
}
void emberAfMainTickCallback(void)
{
static int last_time;
int time = halCommonGetInt32uMillisecondTick();
if((time-last_time)>=3000){
if((time-last_time)>=1000){
last_time = time;
//printf("loop 3 test!\n");
kk_productCode_tick();
//printf("kk_productCode_tick!\n");
}
}
......
......@@ -7,6 +7,7 @@
#include "com_api.h"
#include "zb_device_id.h"
#include "kk_device_manager.h"
#include "kk_zigbee_api.h"
#define KK_REPORT_DEVICE_JOINED_TYPE "/thing/topo/add"
#define KK_REPORT_DEVICE_LEFT_TYPE "/thing/topo/delete"
......
#include "kk_tsl_zigbee_map.h"
#include "kk_test.h"
#include "kk_product_code.h"
kk_tsl_zigbee_map_t g_tsl_zigbee_map [] = {
......
......@@ -15,6 +15,7 @@ void ipcHandle(void);
void rpc_reportDevices(void);
void rpc_control_devices(cJSON *data,char *method);
cJSON* rpc_reportDeviceState(char *state,EmberEUI64 eui64);
......
......@@ -266,21 +266,7 @@ int _init_param(struct jrpc_server *server) {
return 0;
}
char g_mac[19] = {0};
char* kk_get_gw_mac(){
int cnt = 0;
EmberEUI64 eui64;
emberAfGetEui64(eui64);
while(eui64[0] ==0 && eui64[1] ==0 && eui64[2] == 0 && cnt++ < 3){
sleep(1);
}
if (eui64[0] ==0 && eui64[1] ==0 && eui64[2] == 0){
printf("get gw mac error !!! \n");
return NULL;
}
rpc_eui64ToString(eui64,g_mac);
return g_mac;
}
int search_ccu(char devcode[33], char ip[16], int* port){
......@@ -297,13 +283,7 @@ int search_ccu(char devcode[33], char ip[16], int* port){
struct sockaddr_in Addrto;
struct sockaddr_in AddrRev;
char* macString = kk_get_gw_mac();
if (macString == NULL){
printf("[%s] get mac fail\n",__FUNCTION__);
return -1;
}
sprintf(sendMessage,sendCmdFmt,macString/*GW_DEVICE_CODE*/,GW2CCU_PROTOCOL);
sprintf(sendMessage,sendCmdFmt,GW_DEVICE_CODE,GW2CCU_PROTOCOL);
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
printf("[%s] socket fail\n",__FUNCTION__);
......@@ -451,12 +431,7 @@ void* _msg_topo_add(){
char msgFmt[] = "{\"info\":{\"msgtype\":\"/thing/topo/add\",\"productCode\":\"%s\",\"deviceCode\":\"%s\"},\
\"payload\":{\"msgId\":\"%d\",\"version\":\"1.0\",\"params\":{\"deviceCode\":\"%s\",\"productCode\":\"%s\",\"mac\":\"%s\"}}}";
char msg[520] = {0};
char* macString = kk_get_gw_mac();
if (macString == NULL){
printf("[%s] get mac fail\n",__FUNCTION__);
return NULL;
}
sprintf(msg, msgFmt, GW_PRODUCT_CODE, macString, 1, macString/*GW_DEVICE_CODE*/, GW_PRODUCT_CODE,macString);
sprintf(msg, msgFmt, GW_PRODUCT_CODE, GW_DEVICE_CODE, 1, GW_DEVICE_CODE, GW_PRODUCT_CODE,GW_MAC);
cJSON* msgObj = cJSON_Parse(msg);
char* outbuf = cJSON_Print(msgObj);
cJSON_Delete(msgObj);
......@@ -472,14 +447,8 @@ void* _msg_event_property_post(char ip[16], int port){
\"time\":1524448722000,\"method\":\"thing.event.property.post\"}\
}";
char msg[620] = {0};
char* macString = kk_get_gw_mac();
if (macString == NULL){
printf("[%s] get mac fail\n",__FUNCTION__);
return NULL;
}
sprintf(msg, msgFmt, GW_PRODUCT_CODE, macString/*GW_DEVICE_CODE*/,
1, 0, 0, 0, "12345", ip,macString, port);
sprintf(msg, msgFmt, GW_PRODUCT_CODE, GW_DEVICE_CODE,
1, 0, 0, 0, "12345", ip,GW_MAC,port);
cJSON* msgObj = cJSON_Parse(msg);
char* outbuf = cJSON_Print(msgObj);
cJSON_Delete(msgObj);
......@@ -492,19 +461,14 @@ void ipcHandle(void)
{
char deviceCode[33] = {0};
char ip[16] = {0};
int port = 0;
int port = 0;
emberAfAppPrint( "Thread rpc Interface Parse create\n" );
search_ccu(deviceCode, ip, &port);
char* macString = kk_get_gw_mac();
if (macString == NULL){
printf("[%s] get mac fail, exit pthread !!!!!!!!!!!!!!!!!\n",__FUNCTION__);
return;
}
_init_param(&my_server);
if(strcmp(GW2CCU_PROTOCOL, "tcp") == 0){
kk_tcp_client_init(ip, port, _cb);
}else{
kk_ipc_init(IPC_PLAT2MID, _cb, macString/*GW_DEVICE_CODE*/, ip);
kk_ipc_init(IPC_PLAT2MID, _cb, GW_DEVICE_CODE, ip);
}
emberAfAppPrint("sizeof(rpc_table)=%d,sizeof(rpc_table_s)=%d,%d\n",sizeof(rpc_table),sizeof(rpc_table_s),sizeof(rpc_table)/sizeof(rpc_table_s));
......@@ -515,11 +479,6 @@ void ipcHandle(void)
//send add gw to ccu
char* outbuf = _msg_topo_add();
if (outbuf == NULL){
printf("[%s] topo add msg failed, exit\n",__FUNCTION__);
return;
}
if (strcmp(GW2CCU_PROTOCOL, "tcp") != 0){
printf("check nanomsg is connect(%d) \n", kk_ipc_isconnect(IPC_PLAT2MID));
}
......@@ -534,14 +493,7 @@ void ipcHandle(void)
cnt++;
if (cnt == 2){
sleep(1);
char gwIp[17] = {0};
HAL_Get_IP(gwIp,NULL);
char* postmsg = _msg_event_property_post(gwIp,port);
if (outbuf == NULL){
printf("[%s] property_post msg failed\n",__FUNCTION__);
continue;
}
char* postmsg = _msg_event_property_post(ip,port);
kk_sendData2CCU(postmsg, strlen(postmsg));
free(postmsg);
}
......@@ -701,6 +653,7 @@ bool rpc_ReadAttributesResponseCallback(EmberAfClusterId clusterId,
uint8_t * bufferTemp;
uint8_t * bufferPtr = buffer;
uint8_t i, bufferSize,typeSize;
EmberAfAttributeId attributeId;
uint8_t cnt=1;
uint8_t Status;
kk_print_debug("\n********************read attributes response callback**********************\n");
......@@ -734,6 +687,7 @@ bool rpc_ReadAttributesResponseCallback(EmberAfClusterId clusterId,
//todo:check
for (i = 0; i < bufLen; ) {
Status = bufferPtr[2];
if(Status == EMBER_ZCL_STATUS_SUCCESS){
if(emberAfIsStringAttributeType(bufferPtr[3])){
......@@ -760,10 +714,11 @@ bool rpc_ReadAttributesResponseCallback(EmberAfClusterId clusterId,
bufferTemp[ATTRIBUTE_BUFFER_ATTRIBUTEID_LOW_BITS],
bufferTemp[ATTRIBUTE_BUFFER_REPORT_DATA_TYPE]);
attributeId = HIGH_LOW_TO_INT(bufferTemp[ATTRIBUTE_BUFFER_ATTRIBUTEID_HIGH_BITS],bufferTemp[ATTRIBUTE_BUFFER_ATTRIBUTEID_LOW_BITS]);
rpc_cJSON_AddStatusToObject(item_attr,Status);
EmberAfAttributeId attributeId = HIGH_LOW_TO_INT(bufferTemp[ATTRIBUTE_BUFFER_ATTRIBUTEID_HIGH_BITS],bufferTemp[ATTRIBUTE_BUFFER_ATTRIBUTEID_LOW_BITS]);
rpc_cJSON_AddAttributeToObject(item_attr,attributeId);
rpc_cJSON_AddDataTypeToObject(item_attr,bufferTemp[3]);
......@@ -773,13 +728,28 @@ bool rpc_ReadAttributesResponseCallback(EmberAfClusterId clusterId,
uint8_t *dataPtr = &bufferTemp[ATTRIBUTE_BUFFER_REPORT_DATA_TYPE+1+1+typeSize];
rpc_cJSON_AddDataToObject(item_attr,dataPtr,dataLen);
//rpc_read_response_process_callback(nodeId,ep,clusterId,attributeId,bufferPtr[3],dataLen,dataPtr);
kk_read_attr_response(nodeId,
ep,
clusterId,
attributeId,
EMBER_ZCL_STATUS_SUCCESS,
bufferPtr[3],
dataLen,
dataPtr);
free(bufferTemp);
}else{
rpc_cJSON_AddStatusToObject(item_attr,Status);
bufferSize += 2;
emberAfAppPrintln("Status=%d\n",Status);
attributeId = HIGH_LOW_TO_INT(bufferPtr[ATTRIBUTE_BUFFER_ATTRIBUTEID_HIGH_BITS],bufferPtr[ATTRIBUTE_BUFFER_ATTRIBUTEID_LOW_BITS]);
kk_read_attr_response(nodeId,
ep,
clusterId,
attributeId,
Status,
0,
0,
NULL);
}
i = i + bufferSize;
}
......@@ -791,7 +761,7 @@ bool rpc_ReadAttributesResponseCallback(EmberAfClusterId clusterId,
static cJSON* rpc_reportDeviceState(char *state,EmberEUI64 eui64)
cJSON* rpc_reportDeviceState(char *state,EmberEUI64 eui64)
{
char euiString[RPC_EUI64_STRING_LENGTH] = { 0 };
cJSON* stateJSON;
......@@ -826,20 +796,7 @@ void emberAfPluginDeviceTableStateChangeCallback(EmberNodeId nodeId,
}
void emberAfPluginDeviceTableRejoinDeviceCallback(EmberEUI64 nodeEui64)
{
uint16_t deviceTableIndex = emberAfDeviceTableGetFirstIndexFromEui64(nodeEui64);
if(deviceTableIndex == EMBER_AF_PLUGIN_DEVICE_TABLE_NULL_INDEX){
return ;
}
EmberAfPluginDeviceTableEntry *deviceTable = emberAfDeviceTablePointer();
cJSON* nodeJson = rpc_reportDeviceState("rejoin",deviceTable[deviceTableIndex].eui64);
rpc_printfJSON("rejoin",nodeJson);
//rpc_send_message(nodeJson,"device rejoin");
kk_rpc_reportDevices(deviceTable[deviceTableIndex].eui64);
}
void emberAfPluginDeviceTableDeviceLeftCallback(EmberEUI64 nodeEui64)
{
......
......@@ -2,120 +2,6 @@
#include "rpc_onoff.h"
EmberStatus WindowCover_UpOpen(uint16_t node,uint8_t ep)
{
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_WINDOW_COVERING_CLUSTER_ID,
ZCL_WINDOW_COVERING_UP_OPEN_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Up/Open]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status;
}
EmberStatus WindowCover_DownClose(uint16_t node,uint8_t ep)
{
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_WINDOW_COVERING_CLUSTER_ID,
ZCL_WINDOW_COVERING_DOWN_CLOSE_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Down/Close]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status;
}
EmberStatus WindowCover_Stop(uint16_t node,uint8_t ep)
{
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_WINDOW_COVERING_CLUSTER_ID,
ZCL_WINDOW_COVERING_STOP_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Stop]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status;
}
EmberStatus WindowCover_GotoLiftPercentage(uint16_t node,uint8_t ep,uint8_t position)
{
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_WINDOW_COVERING_CLUSTER_ID,
ZCL_WINDOW_COVERING_GO_TO_LIFT_PERCENTAGE_COMMAND_ID);
zclBufferAddByte(position);
status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[GotoLiftPercentage]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status;
}
EmberStatus zclOnOff_On(uint16_t node,uint8_t ep)
{
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID,
ZCL_ON_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[On]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status;
}
EmberStatus zclOnOff_Off(uint16_t node,uint8_t ep)
{
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID,
ZCL_OFF_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Off]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status;
}
EmberStatus zclOnOff_Toggle(uint16_t node,uint8_t ep)
{
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID,
ZCL_TOGGLE_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Toggle]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status;
}
EmberStatus zclOnOff_OffWithEffect(uint16_t node,uint8_t ep,uint8_t id,uint8_t var)
{
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID,
ZCL_OFF_WITH_EFFECT_COMMAND_ID);
zclBufferAddByte(id);
zclBufferAddByte(var);
status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[off with effect]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status;
}
EmberStatus zclOnOff_OnWithRecallGlobalScene(uint16_t node,uint8_t ep)
{
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID,
ZCL_ON_WITH_RECALL_GLOBAL_SCENE_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[On with recall global scene]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status;
}
EmberStatus zclOnOff_OnWithTimedOff(uint16_t node,uint8_t ep,uint8_t Control,uint16_t OnTime,uint16_t OffWaitTime)
{
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID,
ZCL_ON_WITH_TIMED_OFF_COMMAND_ID);
zclBufferAddByte(Control);
zclBufferAddWord(OnTime);
zclBufferAddWord(OffWaitTime);
status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[on with timed off]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status;
}
cJSON *rpc_zclOnOff_On(jrpc_context * ctx, cJSON * params, cJSON *id)
......
......@@ -87,7 +87,7 @@ void kk_read_ncp_configuration_without_memory_allocation(void)
extern void kk_print_device_table(void);
extern void kk_device_table_add(EmberEUI64 mac,uint8_t epNum,uint8_t* epVal,char *productCode);
//extern void kk_device_table_add(EmberEUI64 mac,uint8_t epNum,uint8_t* epVal,char *productCode);
extern void kk_device_table_delete(EmberEUI64 mac);
extern bool kk_device_find_by_mac11111(EmberEUI64 mac);
......@@ -109,7 +109,7 @@ void kk_message_process(char *messageString)
static uint8_t aaa =0x00;
EmberEUI64 mac = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77};
mac[0]=++aaa;
kk_device_table_add(mac,2,ep,"24");
//kk_device_table_add(mac,2,ep,"24");
}
if(MEMCOMPARE(messageString,"AT+456\r\n",len)==0){
uint8_t ep[2]={1,242};
......
......@@ -425,6 +425,9 @@ static void checkForIasZoneServer(EmberNodeId emberNodeId, uint8_t* ieeeAddress)
}
}
extern void kk_device_joined(EmberNodeId node);
void emberAfPluginIasZoneClientZdoMessageReceivedCallback(EmberNodeId emberNodeId,
EmberApsFrame* apsFrame,
uint8_t* message,
......
......@@ -542,7 +542,7 @@ int emberAfMain(MAIN_FUNCTION_PARAMETERS)
emberAfGetEui64(eui64);
emberAfCorePrintln("~~~~~~~~~~~~~~~~~~~~~NCP MAC:");
emberAfPrintBigEndianEui64(eui64);
//kk_network_check();
pthread_t tid;
......@@ -551,22 +551,16 @@ int emberAfMain(MAIN_FUNCTION_PARAMETERS)
// initialize the ZCL framework ,(plug in) ,mqtt init is here
emAfInit();
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
COMMAND_READER_INIT();
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
EmberNetworkStatus Status = ezspNetworkState();
kk_print("ezspNetworkState()~~~~~~[%d]\r\n",Status);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
// main loop
while (true) {
halResetWatchdog(); // Periodically reset the watchdog.
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
// see if the NCP has anything waiting to send us
ezspTick();
......
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