Commit e2e7b5d7 authored by chen.weican's avatar chen.weican

【修改内容】zigbee端通过clusterID和attributeID找到对应的Identity,并上报

【提交人】陈伟灿
parent 9240474e
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#include "kk_sub_tsl.h" #include "kk_sub_tsl.h"
#include "kk_tsl_zigbee_map.h" #include "kk_tsl_zigbee_map.h"
extern kk_tsl_zigbee_map_t g_tsl_zigbee_map [];
static void kk_rpc_send_message(cJSON *data,char *method,EmberEUI64 mac) static void kk_rpc_send_message(cJSON *data,char *method,EmberEUI64 mac)
{ {
...@@ -21,7 +22,6 @@ static void kk_rpc_send_message(cJSON *data,char *method,EmberEUI64 mac) ...@@ -21,7 +22,6 @@ static void kk_rpc_send_message(cJSON *data,char *method,EmberEUI64 mac)
char* p = rpc_cJSON_Print(item); char* p = rpc_cJSON_Print(item);
emberAfAppPrintln("send json:\n%s\n",p); emberAfAppPrintln("send json:\n%s\n",p);
free(p); free(p);
jrpc_send_msg(item); jrpc_send_msg(item);
} }
void kk_rpc_report_devices(cJSON *data,EmberEUI64 mac) void kk_rpc_report_devices(cJSON *data,EmberEUI64 mac)
...@@ -58,18 +58,42 @@ void kk_rpc_reportDevices(kk_report_device_s device) ...@@ -58,18 +58,42 @@ void kk_rpc_reportDevices(kk_report_device_s device)
kk_sub_tsl_add(device.mac,PRODUCT_TYPE); kk_sub_tsl_add(device.mac,PRODUCT_TYPE);
kk_rpc_report_devices(devicesJson,device.mac); kk_rpc_report_devices(devicesJson,device.mac);
} }
bool kk_rpc_report_LightStatus(EmberEUI64 mac,bool LightStatus) int kk_rpc_report_LightStatus(EmberEUI64 mac,int status,uint16_t clusterId,uint16_t attributeId)
{ {
cJSON* root; cJSON* root;
int res = 0;
int num = 0;
int pCtrlIdx = 0;
uint16_t clusterId_tmp = 0;
uint16_t attributeId_tmp = 0;
int i = 0;
sub_dev_node_t *node = NULL;
root = rpc_cJSON_CreateObject(); root = rpc_cJSON_CreateObject();
if(LightStatus==true){
rpc_cJSON_AddNumberToObject(root, "LightStatus",1);
}else{
rpc_cJSON_AddNumberToObject(root, "LightStatus",0);
}
res = kk_sub_tsl_get_device_by_mac(mac, &node);
if (res != SUCCESS_RETURN) {
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return -1;
}
pCtrlIdx = kk_find_ctrl_obj(node->product_type);
if(pCtrlIdx == -1){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return -1;
}
num = kk_get_Identity_Num(pCtrlIdx);
for(i = 0; i < num; i++)
{
clusterId_tmp = g_tsl_zigbee_map[pCtrlIdx].zigbee_ctrl[i].clusterId;
attributeId_tmp = g_tsl_zigbee_map[pCtrlIdx].zigbee_ctrl[i].attributeId;
if(clusterId_tmp == clusterId && attributeId_tmp == attributeId)
{
rpc_cJSON_AddNumberToObject(root, g_tsl_zigbee_map[pCtrlIdx].zigbee_ctrl[i].Identity,status);
break;
}
}
kk_rpc_report_status(root,mac); kk_rpc_report_status(root,mac);
return 0;
} }
int lightStatusSet(jrpc_context * ctx,const char *mac,void* data) int lightStatusSet(jrpc_context * ctx,const char *mac,void* data)
{ {
...@@ -117,7 +141,7 @@ error_return: ...@@ -117,7 +141,7 @@ error_return:
} }
extern kk_tsl_zigbee_map_t g_tsl_zigbee_map [];
int kk_test_fuc(char *mac,const char *params) int kk_test_fuc(char *mac,const char *params)
{ {
sub_dev_node_t *node = NULL; sub_dev_node_t *node = NULL;
...@@ -151,7 +175,7 @@ int kk_test_fuc(char *mac,const char *params) ...@@ -151,7 +175,7 @@ int kk_test_fuc(char *mac,const char *params)
{ {
int value = rpc_get_u8(propertyItem->valuestring); int value = rpc_get_u8(propertyItem->valuestring);
printf("[%s][%d]value:%d\n",__FUNCTION__,__LINE__,value); printf("[%s][%d]value:%d\n",__FUNCTION__,__LINE__,value);
res = g_tsl_zigbee_map[pCtrlIdx].zigbee_ctrl[index].zigbee_cb(NULL,mac,&value); res = g_tsl_zigbee_map[pCtrlIdx].zigbee_ctrl[index].zigbee_set(NULL,mac,&value);
if(res < 0){ if(res < 0){
printf("[%s][%d]\n",__FUNCTION__,__LINE__); printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return -1; return -1;
...@@ -195,7 +219,7 @@ cJSON *rpc_read_attribue(jrpc_context * ctx, cJSON *params, cJSON *id,cJSON *mac ...@@ -195,7 +219,7 @@ cJSON *rpc_read_attribue(jrpc_context * ctx, cJSON *params, cJSON *id,cJSON *mac
if(propertyItem != NULL) if(propertyItem != NULL)
{ {
int value = rpc_get_u8(propertyItem->valuestring); int value = rpc_get_u8(propertyItem->valuestring);
res = g_tsl_zigbee_map[pCtrlIdx].zigbee_ctrl[index].zigbee_cb(ctx,mac,&value); res = g_tsl_zigbee_map[pCtrlIdx].zigbee_ctrl[index].zigbee_set(ctx,mac->valuestring,&value);
if(ret < 0){ if(ret < 0){
goto error_return; goto error_return;
} }
...@@ -246,7 +270,7 @@ cJSON *rpc_Control(jrpc_context * ctx, cJSON *params, cJSON *id,cJSON *mac) ...@@ -246,7 +270,7 @@ cJSON *rpc_Control(jrpc_context * ctx, cJSON *params, cJSON *id,cJSON *mac)
if(propertyItem != NULL) if(propertyItem != NULL)
{ {
int value = rpc_get_u8(propertyItem->valuestring); int value = rpc_get_u8(propertyItem->valuestring);
res = g_tsl_zigbee_map[pCtrlIdx].zigbee_ctrl[index].zigbee_cb(ctx,mac->valuestring,&value); res = g_tsl_zigbee_map[pCtrlIdx].zigbee_ctrl[index].zigbee_set(ctx,mac->valuestring,&value);
if(res < 0){ if(res < 0){
set_json_error_type(ctx,JRPC_INVALID_PARAMS,MSG_INVALID_PARAMS); set_json_error_type(ctx,JRPC_INVALID_PARAMS,MSG_INVALID_PARAMS);
goto error_return; goto error_return;
......
...@@ -6,19 +6,19 @@ kk_tsl_zigbee_map_t g_tsl_zigbee_map [] = { ...@@ -6,19 +6,19 @@ kk_tsl_zigbee_map_t g_tsl_zigbee_map [] = {
PRODUCT_TYPE, PRODUCT_TYPE,
3, 3,
{ {
{KK_TSL_DATA_TYPE_TEXT,"LightStatus",lightStatusSet}, {KK_TSL_DATA_TYPE_TEXT,"LightStatus",lightStatusSet,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID},
{KK_TSL_DATA_TYPE_TEXT,"LightAdjustLevel",lightStatusSet}, {KK_TSL_DATA_TYPE_TEXT,"LightAdjustLevel",lightStatusSet,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID},
{KK_TSL_DATA_TYPE_TEXT,"LightAlias",lightStatusSet}, {KK_TSL_DATA_TYPE_TEXT,"LightAlias",lightStatusSet,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID},
} }
}, },
{ {
"testtype", "testtype",
4, 4,
{ {
{KK_TSL_DATA_TYPE_TEXT,"test1",lightStatusSet}, {KK_TSL_DATA_TYPE_TEXT,"test1",lightStatusSet,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID},
{KK_TSL_DATA_TYPE_TEXT,"test12",lightStatusSet}, {KK_TSL_DATA_TYPE_TEXT,"test12",lightStatusSet,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID},
{KK_TSL_DATA_TYPE_TEXT,"test123",lightStatusSet}, {KK_TSL_DATA_TYPE_TEXT,"test123",lightStatusSet,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID},
{KK_TSL_DATA_TYPE_TEXT,"test1234",lightStatusSet}, {KK_TSL_DATA_TYPE_TEXT,"test1234",lightStatusSet,ZCL_ON_OFF_CLUSTER_ID,ZCL_ON_OFF_ATTRIBUTE_ID},
} }
}, },
......
...@@ -5,12 +5,16 @@ ...@@ -5,12 +5,16 @@
#define PROPERTIES_MAX_NUM 20 #define PROPERTIES_MAX_NUM 20
typedef int (*zigbee_ctrl_cb)(jrpc_context * ctx,const char *mac,void* data); typedef int (*zigbee_property_set)(jrpc_context * ctx,const char *mac,void* data);
//typedef int (*zigbee_property_report)(EmberEUI64 mac,bool LightStatus,uint16_t clusterId,uint16_t attributeId);
typedef struct{ typedef struct{
int type; int type;
char* Identity; char* Identity;
zigbee_ctrl_cb zigbee_cb; zigbee_property_set zigbee_set;
unsigned short clusterId;
unsigned short attributeId;
//zigbee_property_report zigbee_report;
}kk_zigbee_ctrl_map_t; }kk_zigbee_ctrl_map_t;
typedef struct{ typedef struct{
......
...@@ -391,7 +391,7 @@ bool rpc_ReportAttributesCallback(EmberAfClusterId clusterId, ...@@ -391,7 +391,7 @@ bool rpc_ReportAttributesCallback(EmberAfClusterId clusterId,
if(bufferTemp[ATTRIBUTE_BUFFER_REPORT_DATA_TYPE]==ZCL_BOOLEAN_ATTRIBUTE_TYPE){ if(bufferTemp[ATTRIBUTE_BUFFER_REPORT_DATA_TYPE]==ZCL_BOOLEAN_ATTRIBUTE_TYPE){
uint8_t LightStatus = bufferTemp[ATTRIBUTE_BUFFER_REPORT_DATA_TYPE+1]; uint8_t LightStatus = bufferTemp[ATTRIBUTE_BUFFER_REPORT_DATA_TYPE+1];
if(LightStatus==0||LightStatus==1){ if(LightStatus==0||LightStatus==1){
kk_rpc_report_LightStatus(eui64,LightStatus); kk_rpc_report_LightStatus(eui64,LightStatus,clusterId,attributeId);
} }
} }
} }
......
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