Commit 0de6644f authored by 黄振令's avatar 黄振令
parents 1e3c7b60 bab0bf4f
...@@ -320,7 +320,7 @@ static void read_cb(struct ev_loop *loop, struct ev_io *watcher, int revents) ...@@ -320,7 +320,7 @@ static void read_cb(struct ev_loop *loop, struct ev_io *watcher, int revents)
} }
int res = 0; int res = 0;
kk_tcp_ctrl_t* tcp_ctrl = (kk_tcp_ctrl_t*)watcher->data; kk_tcp_ctrl_t* tcp_ctrl = (kk_tcp_ctrl_t*)watcher->data;
int32_t bytes = read(watcher->fd, buffer, sizeof(buffer)); int32_t bytes = recv(watcher->fd, buffer, sizeof(buffer),0);
if (-1 == bytes) { if (-1 == bytes) {
//tcp Error //tcp Error
if (EINTR != errno && EAGAIN != errno) { if (EINTR != errno && EAGAIN != errno) {
...@@ -659,6 +659,7 @@ static void loop_tcp_client_thread(void *arg){ ...@@ -659,6 +659,7 @@ static void loop_tcp_client_thread(void *arg){
{ {
//接受网络数据 //接受网络数据
_MutexLock(g_client_ctrl.mutex); _MutexLock(g_client_ctrl.mutex);
memset(buf,0x0,sizeof(buf));
ret = read(g_client_ctrl.sd, buf, sizeof(buf)); ret = read(g_client_ctrl.sd, buf, sizeof(buf));
_MutexUnlock(g_client_ctrl.mutex); _MutexUnlock(g_client_ctrl.mutex);
...@@ -670,7 +671,7 @@ static void loop_tcp_client_thread(void *arg){ ...@@ -670,7 +671,7 @@ static void loop_tcp_client_thread(void *arg){
break; break;
} }
}else if(ret > 0){ }else if(ret > 0){
printf("buf = %s\n",buf); //printf("11buf = %s\n",buf);
if (g_client_ctrl.cb != NULL){ if (g_client_ctrl.cb != NULL){
g_client_ctrl.cb(buf,ret,""); g_client_ctrl.cb(buf,ret,"");
} }
...@@ -701,6 +702,7 @@ int kk_reset_retry_num(){ ...@@ -701,6 +702,7 @@ int kk_reset_retry_num(){
int kk_tcp_client_send(char* data, int len){ int kk_tcp_client_send(char* data, int len){
int ret = 0; int ret = 0;
int cnt = 0; int cnt = 0;
if ( data != NULL){ if ( data != NULL){
while(g_client_ctrl.sd == -1 && cnt < 5){ while(g_client_ctrl.sd == -1 && cnt < 5){
printf("[%s] tcp don't connect, sleep 1s !!!! \n",__FUNCTION__); printf("[%s] tcp don't connect, sleep 1s !!!! \n",__FUNCTION__);
......
...@@ -2885,7 +2885,7 @@ static int MQTTAsync_cleanSession(Clients* client) ...@@ -2885,7 +2885,7 @@ static int MQTTAsync_cleanSession(Clients* client)
static int MQTTAsync_deliverMessage(MQTTAsyncs* m, char* topicName, size_t topicLen, MQTTAsync_message* mm) static int MQTTAsync_deliverMessage(MQTTAsyncs* m, char* topicName, size_t topicLen, MQTTAsync_message* mm)
{ {
int rc; int rc;
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
Log(TRACE_MIN, -1, "Calling messageArrived for client %s, queue depth %d", Log(TRACE_MIN, -1, "Calling messageArrived for client %s, queue depth %d",
m->c->clientID, m->c->messageQueue->count); m->c->clientID, m->c->messageQueue->count);
rc = (*(m->ma))(m->maContext, topicName, (int)topicLen, mm); rc = (*(m->ma))(m->maContext, topicName, (int)topicLen, mm);
...@@ -2902,7 +2902,6 @@ void Protocol_processPublication(Publish* publish, Clients* client, int allocate ...@@ -2902,7 +2902,6 @@ void Protocol_processPublication(Publish* publish, Clients* client, int allocate
MQTTAsync_message* mm = NULL; MQTTAsync_message* mm = NULL;
MQTTAsync_message initialized = MQTTAsync_message_initializer; MQTTAsync_message initialized = MQTTAsync_message_initializer;
int rc = 0; int rc = 0;
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
FUNC_ENTRY; FUNC_ENTRY;
if ((mm = malloc(sizeof(MQTTAsync_message))) == NULL) if ((mm = malloc(sizeof(MQTTAsync_message))) == NULL)
......
...@@ -304,7 +304,6 @@ int MQTTProtocol_handlePublishes(void* pack, int sock) ...@@ -304,7 +304,6 @@ int MQTTProtocol_handlePublishes(void* pack, int sock)
Clients* client = NULL; Clients* client = NULL;
char* clientid = NULL; char* clientid = NULL;
int rc = TCPSOCKET_COMPLETE; int rc = TCPSOCKET_COMPLETE;
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
FUNC_ENTRY; FUNC_ENTRY;
client = (Clients*)(ListFindItem(bstate->clients, &sock, clientSocketCompare)->content); client = (Clients*)(ListFindItem(bstate->clients, &sock, clientSocketCompare)->content);
...@@ -313,7 +312,6 @@ int MQTTProtocol_handlePublishes(void* pack, int sock) ...@@ -313,7 +312,6 @@ int MQTTProtocol_handlePublishes(void* pack, int sock)
publish->header.bits.retain, publish->payloadlen, min(20, publish->payloadlen), publish->payload); publish->header.bits.retain, publish->payloadlen, min(20, publish->payloadlen), publish->payload);
if (publish->header.bits.qos == 0){ if (publish->header.bits.qos == 0){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
Protocol_processPublication(publish, client, 1); Protocol_processPublication(publish, client, 1);
} }
else if (!Socket_noPendingWrites(sock)) else if (!Socket_noPendingWrites(sock))
...@@ -324,7 +322,6 @@ int MQTTProtocol_handlePublishes(void* pack, int sock) ...@@ -324,7 +322,6 @@ int MQTTProtocol_handlePublishes(void* pack, int sock)
rc = MQTTPacket_send_puback(publish->MQTTVersion, publish->msgId, &client->net, client->clientID); rc = MQTTPacket_send_puback(publish->MQTTVersion, publish->msgId, &client->net, client->clientID);
/* if we get a socket error from sending the puback, should we ignore the publication? */ /* if we get a socket error from sending the puback, should we ignore the publication? */
Protocol_processPublication(publish, client, 1); Protocol_processPublication(publish, client, 1);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
} }
else if (publish->header.bits.qos == 2) else if (publish->header.bits.qos == 2)
{ {
...@@ -374,7 +371,6 @@ int MQTTProtocol_handlePublishes(void* pack, int sock) ...@@ -374,7 +371,6 @@ int MQTTProtocol_handlePublishes(void* pack, int sock)
publish1.payloadlen = m->publish->payloadlen; publish1.payloadlen = m->publish->payloadlen;
publish1.MQTTVersion = m->MQTTVersion; publish1.MQTTVersion = m->MQTTVersion;
publish1.properties = m->properties; publish1.properties = m->properties;
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
Protocol_processPublication(&publish1, client, 1); Protocol_processPublication(&publish1, client, 1);
ListRemove(&(state.publications), m->publish); ListRemove(&(state.publications), m->publish);
......
...@@ -148,9 +148,10 @@ static int _dm_init_tsl_params(kk_tsl_t * dev_shadow) ...@@ -148,9 +148,10 @@ static int _dm_init_tsl_params(kk_tsl_t * dev_shadow)
} }
return res; return res;
} }
/*目前支持到三级结构体的属性解析保存到数据库*/
int dm_mgr_properities_db_create(kk_tsl_t* dev_shadow,char *deviceCode,int devType ) int dm_mgr_properities_db_create(kk_tsl_t* dev_shadow,char *deviceCode,int devType )
{ {
int num = 0,idx = 0,index = 0; int num = 0,idx = 0,index = 0,index1 = 0;
kk_tsl_data_t *pProperty = NULL; kk_tsl_data_t *pProperty = NULL;
kk_tsl_data_t *current_data = NULL; kk_tsl_data_t *current_data = NULL;
char tmp_identifiers[256] = {0}; char tmp_identifiers[256] = {0};
...@@ -170,10 +171,28 @@ int dm_mgr_properities_db_create(kk_tsl_t* dev_shadow,char *deviceCode,int devTy ...@@ -170,10 +171,28 @@ int dm_mgr_properities_db_create(kk_tsl_t* dev_shadow,char *deviceCode,int devTy
complex_struct = pProperty->data_value.value; complex_struct = pProperty->data_value.value;
for (index = 0; index < complex_struct->size; index++) { for (index = 0; index < complex_struct->size; index++) {
current_data = (kk_tsl_data_t *)complex_struct->value + index; current_data = (kk_tsl_data_t *)complex_struct->value + index;
memset(tmp_identifiers,0x0,sizeof(tmp_identifiers)); if(current_data->data_value.type != KK_TSL_DATA_TYPE_STRUCT ){
sprintf(tmp_identifiers,"%s.%s",pProperty->identifier,current_data->identifier); memset(tmp_identifiers,0x0,sizeof(tmp_identifiers));
INFO_PRINT("dm_mgr_properities_db_create tmp_identifiers:%s!!\n",tmp_identifiers); sprintf(tmp_identifiers,"%s.%s",pProperty->identifier,current_data->identifier);
kk_property_db_insert(deviceCode,tmp_identifiers,current_data->data_value.type,devType); INFO_PRINT("dm_mgr_properities_db_create tmp_identifiers:%s!!\n",tmp_identifiers);
kk_property_db_insert(deviceCode,tmp_identifiers,current_data->data_value.type,devType);
}
else{
kk_tsl_data_value_complex_t *complex_struct_1 = NULL;
complex_struct_1 = current_data->data_value.value;
for(index1 = 0; index1 < complex_struct_1->size; index1++){
kk_tsl_data_t *current_data_1 = NULL;
current_data_1 = (kk_tsl_data_t *)complex_struct_1->value + index1;
if(current_data_1->data_value.type != KK_TSL_DATA_TYPE_STRUCT ){
memset(tmp_identifiers,0x0,sizeof(tmp_identifiers));
sprintf(tmp_identifiers,"%s.%s.%s",pProperty->identifier,current_data->identifier,current_data_1->identifier);
INFO_PRINT("dm_mgr_properities_db_create tmp_identifiers:%s!!\n",tmp_identifiers);
kk_property_db_insert(deviceCode,tmp_identifiers,current_data_1->data_value.type,devType);
}
}
}
} }
}else }else
{ {
...@@ -452,9 +471,8 @@ int dm_mgr_init(void) ...@@ -452,9 +471,8 @@ int dm_mgr_init(void)
/* Init Device List */ /* Init Device List */
INIT_LIST_HEAD(&ctx->dev_list); INIT_LIST_HEAD(&ctx->dev_list);
//HAL_GetProduct_Type(product_key);
//HAL_GetProduct_Code(device_name);
HAL_Get_mac(mac); HAL_Get_mac(mac);
res = dm_mgr_device_create(KK_DM_DEVICE_CCU,KK_DM_CCU_DEVICE_PRODUCT_CODE,"CCU_66666",mac,"",&devId); res = dm_mgr_device_create(KK_DM_DEVICE_CCU,KK_DM_CCU_DEVICE_PRODUCT_CODE,"CCU_66666",mac,"",&devId);
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
goto ERROR; goto ERROR;
......
...@@ -908,6 +908,44 @@ int dm_msg_thing_property_post_by_identify(char *deviceCode,cJSON *params) ...@@ -908,6 +908,44 @@ int dm_msg_thing_property_post_by_identify(char *deviceCode,cJSON *params)
current_data->data_value.type == KK_TSL_DATA_TYPE_DATE){ current_data->data_value.type == KK_TSL_DATA_TYPE_DATE){
kk_property_db_update_value(deviceCode,tmp_identifiers,current_data->data_value.value); kk_property_db_update_value(deviceCode,tmp_identifiers,current_data->data_value.value);
} }
else if(current_data->data_value.type == KK_TSL_DATA_TYPE_STRUCT){
kk_tsl_data_value_complex_t *complex_struct_1 = NULL;
complex_struct_1 = current_data->data_value.value;
int index1 = 0;
kk_tsl_data_t *current_data_1 = NULL;
cJSON *propertyItem_2 = NULL;
for(index1 = 0; index1 < complex_struct_1->size; index1++){
current_data_1 = (kk_tsl_data_t *)complex_struct_1->value + index1;
propertyItem_2 = cJSON_GetObjectItem(propertyItem_1, current_data_1->identifier);
if(propertyItem_2 != NULL){
memset(tmp_identifiers,0x0,sizeof(tmp_identifiers));
sprintf(tmp_identifiers,"%s.%s.%s",property->identifier,current_data->identifier,current_data_1->identifier);
if(current_data_1->data_value.type == KK_TSL_DATA_TYPE_INT ||
current_data_1->data_value.type == KK_TSL_DATA_TYPE_ENUM||
current_data_1->data_value.type == KK_TSL_DATA_TYPE_BOOL){
sprintf(tmpValue,"%d",current_data_1->data_value.value_int);
kk_property_db_update_value(deviceCode,tmp_identifiers,tmpValue);
}
else if(current_data_1->data_value.type == KK_TSL_DATA_TYPE_FLOAT){
sprintf(tmpValue,"%d",current_data_1->data_value.value_float);
kk_property_db_update_value(deviceCode,tmp_identifiers,tmpValue);
}
else if(current_data_1->data_value.type == KK_TSL_DATA_TYPE_DOUBLE){
sprintf(tmpValue,"%d",current_data_1->data_value.value_double);
kk_property_db_update_value(deviceCode,tmp_identifiers,tmpValue);
}
else if(current_data_1->data_value.type == KK_TSL_DATA_TYPE_TEXT||
current_data_1->data_value.type == KK_TSL_DATA_TYPE_DATE){
kk_property_db_update_value(deviceCode,tmp_identifiers,current_data_1->data_value.value);
}
else{
ERROR_PRINT("Unsupport Type ~~\n");
}
}
}
}
else{ else{
ERROR_PRINT("Unsupport Type\n"); ERROR_PRINT("Unsupport Type\n");
} }
......
...@@ -403,5 +403,28 @@ int kk_property_delete_by_dcode(char deviceCode[DEVICE_CODE_MAXLEN]) ...@@ -403,5 +403,28 @@ int kk_property_delete_by_dcode(char deviceCode[DEVICE_CODE_MAXLEN])
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
int kk_property_delete_by_identify(char *identify)
{
const char *deleteCmd = "delete from PropertiesInfo where identifier = '%s';";
char *sqlCmd = NULL;
int rc = 0;
char *zErrMsg = 0;
kk_property_db_ctx_t *ctx = _kk_property_db_get_ctx();
_kk_property_db_lock();
sqlCmd = sqlite3_mprintf(deleteCmd,identify);
INFO_PRINT("Table delete data sqlCmd:%s\n",sqlCmd);
rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( rc != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}else{
INFO_PRINT("Table delete data successfully\n");
}
sqlite3_free(sqlCmd);
_kk_property_db_unlock();
return SUCCESS_RETURN;
}
......
...@@ -78,6 +78,7 @@ char* kk_load_json(const char *productCode,int type) ...@@ -78,6 +78,7 @@ char* kk_load_json(const char *productCode,int type)
fread(buf, 1, filesize, fp); fread(buf, 1, filesize, fp);
//printf("%s!!!\n",buf); //printf("%s!!!\n",buf);
free(tslPath); free(tslPath);
fclose(fp);
return buf; return buf;
} }
...@@ -10,21 +10,41 @@ const char *kk_tsl_rpt_status_string[] = { ...@@ -10,21 +10,41 @@ const char *kk_tsl_rpt_status_string[] = {
}; };
static cJSON* kk_check_identify(const char * identify,cJSON* root,int index,int status) static cJSON* kk_check_identify(const char * identify,cJSON* root,int index,int status)
{ {
int rev = 0,startIdx = 0; int rev = 0,startIdx2 = 0,startIdx1 = 0;
char *Identify_str; char *Identify_str;
char tmp_Identity[64] = {0}; char tmp_Identity[64] = {0};
rev = kk_tsl_utils_memtok(identify,".",1,&startIdx); rev = kk_tsl_utils_memtok(identify,'.',2,&startIdx2);
if(!rev){ if(!rev){
cJSON* str = NULL; cJSON* str = NULL;
cJSON* str_r = NULL;
kk_tsl_utils_memtok(identify,'.',1,&startIdx1);
str = rpc_cJSON_CreateObject(); str = rpc_cJSON_CreateObject();
Identify_str = identify + 1 + startIdx; Identify_str = identify + 1 + startIdx2;
memset(tmp_Identity,0x0,sizeof(tmp_Identity)); memset(tmp_Identity,0x0,sizeof(tmp_Identity));
memcpy(tmp_Identity,identify,startIdx); memcpy(tmp_Identity,identify+startIdx1+1,startIdx2-startIdx1);
rpc_cJSON_AddNumberToObject(str, Identify_str,status); rpc_cJSON_AddNumberToObject(str, Identify_str,status);
rpc_cJSON_AddItemToObject(root,tmp_Identity,str); str_r = rpc_cJSON_CreateObject();
rpc_cJSON_AddItemToObject(str_r,tmp_Identity,str);
memset(tmp_Identity,0x0,sizeof(tmp_Identity));
memcpy(tmp_Identity,identify,startIdx1);
rpc_cJSON_AddItemToObject(root,tmp_Identity,str_r);
return root; return root;
} }
else{
rev = kk_tsl_utils_memtok(identify,'.',1,&startIdx1);
if(!rev){
cJSON* str = NULL;
str = rpc_cJSON_CreateObject();
Identify_str = identify + 1 + startIdx1;
memset(tmp_Identity,0x0,sizeof(tmp_Identity));
memcpy(tmp_Identity,identify,startIdx1);
rpc_cJSON_AddNumberToObject(str, Identify_str,status);
rpc_cJSON_AddItemToObject(root,tmp_Identity,str);
return root;
}
}
return NULL; return NULL;
...@@ -54,7 +74,6 @@ static int kk_tsl_report(EmberEUI64 mac,uint8_t EP,int status,uint16_t clusterId ...@@ -54,7 +74,6 @@ static int kk_tsl_report(EmberEUI64 mac,uint8_t EP,int status,uint16_t clusterId
root_tmp = kk_check_identify(g_tsl_zigbee_map_glb[index].map.Identity,root,index,status); root_tmp = kk_check_identify(g_tsl_zigbee_map_glb[index].map.Identity,root,index,status);
if(root_tmp != NULL){ if(root_tmp != NULL){
kk_rpc_report_status(root_tmp,mac); kk_rpc_report_status(root_tmp,mac);
//rpc_cJSON_Delete(root_tmp);
return tsl_rpt_success; return tsl_rpt_success;
} }
else{ else{
...@@ -65,7 +84,6 @@ static int kk_tsl_report(EmberEUI64 mac,uint8_t EP,int status,uint16_t clusterId ...@@ -65,7 +84,6 @@ static int kk_tsl_report(EmberEUI64 mac,uint8_t EP,int status,uint16_t clusterId
root_tmp = kk_check_identify(g_tsl_zigbee_map[index].Identity,root,index,status); root_tmp = kk_check_identify(g_tsl_zigbee_map[index].Identity,root,index,status);
if(root_tmp != NULL){ if(root_tmp != NULL){
kk_rpc_report_status(root_tmp,mac); kk_rpc_report_status(root_tmp,mac);
//rpc_cJSON_Delete(root_tmp);
return tsl_rpt_success; return tsl_rpt_success;
} }
else{ else{
...@@ -74,7 +92,6 @@ static int kk_tsl_report(EmberEUI64 mac,uint8_t EP,int status,uint16_t clusterId ...@@ -74,7 +92,6 @@ static int kk_tsl_report(EmberEUI64 mac,uint8_t EP,int status,uint16_t clusterId
} }
rpc_cJSON_AddNumberToObject(root, Identify,status); rpc_cJSON_AddNumberToObject(root, Identify,status);
kk_rpc_report_status(root,mac); kk_rpc_report_status(root,mac);
//rpc_cJSON_Delete(root);
return tsl_rpt_success; return tsl_rpt_success;
} }
...@@ -105,7 +122,7 @@ void kk_tsl_report_attribute(EmberEUI64 eui64, ...@@ -105,7 +122,7 @@ void kk_tsl_report_attribute(EmberEUI64 eui64,
g_tsl_zigbee_map[i].attributeId == attributeId && g_tsl_zigbee_map[i].attributeId == attributeId &&
g_tsl_zigbee_map[i].zigbee_report!=NULL){ g_tsl_zigbee_map[i].zigbee_report!=NULL){
status = g_tsl_zigbee_map[i].zigbee_report(eui64,EP,clusterId,attributeId,dataType,len,data); status = g_tsl_zigbee_map[i].zigbee_report(eui64,EP,clusterId,attributeId,dataType,len,data);
emberAfDebugPrintln("report status:%s",kk_tsl_rpt_status_string[status]); emberAfDebugPrintln("report status:%d",status);
return ; return ;
} }
} }
...@@ -129,6 +146,38 @@ void kk_tsl_report_attribute(EmberEUI64 eui64, ...@@ -129,6 +146,38 @@ void kk_tsl_report_attribute(EmberEUI64 eui64,
} }
} }
int kk_tsl_report_global_Brightness(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data)
{
uint8_t value = data[0];
emberAfAppPrintln("[tsl report:kk_tsl_report_global_Brightness] value:%d\n",value);
printf("[%s][%d]dataType:%d\n",__FUNCTION__,__LINE__,dataType);
if(dataType == ZCL_INT8U_ATTRIBUTE_TYPE){
printf("[%s][%d]len:%d\n",__FUNCTION__,__LINE__,len);
if(len==1){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_tsl_report(eui64,EP,value,clusterId,attributeId);
return tsl_rpt_success;
}
return tsl_rpt_invaild_len;
}
return tsl_rpt_invaild_type;
}
int kk_tsl_report_global_RGB(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data)
{
uint8_t value = data[0];
emberAfAppPrintln("[tsl report:kk_tsl_report_global_RGB] value:%d\n",value);
printf("[%s][%d]dataType:%d\n",__FUNCTION__,__LINE__,dataType);
if(dataType == ZCL_INT8U_ATTRIBUTE_TYPE){
printf("[%s][%d]len:%d\n",__FUNCTION__,__LINE__,len);
if(len==1){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_tsl_report(eui64,EP,value,clusterId,attributeId);
return tsl_rpt_success;
}
return tsl_rpt_invaild_len;
}
return tsl_rpt_invaild_type;
}
int kk_tsl_report_global_onoff(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data) int kk_tsl_report_global_onoff(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data)
{ {
......
#ifndef __KK_TSL_PROPERTY_REPORT_H #ifndef __KK_TSL_PROPERTY_REPORT_H
#define __KK_TSL_PROPERTY_REPORT_H #define __KK_TSL_PROPERTY_REPORT_H
#include "kk_test.h" #include "kk_test.h"
typedef enum{ typedef enum{
tsl_rpt_success = 0, tsl_rpt_success = 0,
tsl_rpt_err = -1, tsl_rpt_err = -1,
tsl_rpt_invaild_val = -2, tsl_rpt_invaild_val = -2,
tsl_rpt_invaild_len = -3, tsl_rpt_invaild_len = -3,
tsl_rpt_invaild_type = -4, tsl_rpt_invaild_type = -4,
}kk_tsl_rpt_status; }kk_tsl_rpt_status;
void kk_tsl_report_attribute(EmberEUI64 eui64, void kk_tsl_report_attribute(EmberEUI64 eui64,
uint8_t EP, uint8_t EP,
EmberAfClusterId clusterId, EmberAfClusterId clusterId,
EmberAfAttributeId attributeId, EmberAfAttributeId attributeId,
uint8_t dataType, uint8_t dataType,
uint8_t len, uint8_t len,
uint8_t *data); uint8_t *data);
int kk_tsl_report_global_onoff(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data); int kk_tsl_report_global_onoff(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data);
int kk_tsl_report_windowCovering_mode(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data); int kk_tsl_report_windowCovering_mode(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data);
int kk_tsl_report_windowCovering_position(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data); int kk_tsl_report_windowCovering_position(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data);
int kk_tsl_report_global_Brightness(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data);
int kk_tsl_report_global_RGB(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data);
#endif
#endif
#include "kk_tsl_property_set.h" #include "kk_tsl_property_set.h"
static uint8_t s_Red = 0xff;
static uint8_t s_Green = 0xff;
static uint8_t s_Blue = 0xff;
static uint8_t s_RgbCount = 0;
//emberAfAppPrintln("[tsl report:Gloabl] OnOff~~~~~~~~~"); //emberAfAppPrintln("[tsl report:Gloabl] OnOff~~~~~~~~~");
...@@ -40,7 +44,7 @@ cJSON *kk_topo_change_operation(jrpc_context * ctx, cJSON *params, cJSON *id,cJS ...@@ -40,7 +44,7 @@ cJSON *kk_topo_change_operation(jrpc_context * ctx, cJSON *params, cJSON *id,cJS
error_return: error_return:
return rpc_cJSON_CreateNull(); return rpc_cJSON_CreateNull();
} }
int kk_tsl_utils_memtok(_IN_ char *input, _IN_ char delimiter, _IN_ int index, _OU_ int *offset) int kk_tsl_utils_memtok(_IN_ char *input, _IN_ char *delimiter, _IN_ int index, _OU_ int *offset)
{ {
int item_index = 0; int item_index = 0;
int count = 0; int count = 0;
...@@ -62,6 +66,36 @@ int kk_tsl_utils_memtok(_IN_ char *input, _IN_ char delimiter, _IN_ int index, _ ...@@ -62,6 +66,36 @@ int kk_tsl_utils_memtok(_IN_ char *input, _IN_ char delimiter, _IN_ int index, _
return -1; return -1;
} }
static int kk_tsl_property_execute(jrpc_context * ctx,cJSON * propertyItem,cJSON *mac,int index,int findFlag)
{
int value = 0;
EmberEUI64 eui64;
EmberNodeId nodeId = EMBER_AF_PLUGIN_DEVICE_TABLE_NULL_NODE_ID;
int res = 0;
if(propertyItem == NULL || mac == NULL){
return -1;
}
if(propertyItem->type != cJSON_Number){
value = rpc_get_u8(propertyItem->valuestring);
}else{
value = propertyItem->valueint;
}
if(rpc_get_mac(mac->valuestring,eui64)==false){
return -1;
}
printf("[%s][%d]g_tsl_zigbee_map[index].endpoint:%d\n",__FUNCTION__,__LINE__,g_tsl_zigbee_map[index].endpoint);
nodeId = emberAfDeviceTableGetNodeIdFromEui64(eui64);
if(findFlag==1)
res = g_tsl_zigbee_map[index].zigbee_set(ctx,nodeId,g_tsl_zigbee_map[index].endpoint,&value);
else if(findFlag==2)
res = g_tsl_zigbee_map_glb[index].map.zigbee_set(ctx,nodeId,g_tsl_zigbee_map_glb[index].map.endpoint,&value);
else
res = -1;
printf("[%s][%d]res:%d\n",__FUNCTION__,__LINE__,res);
return res;
}
cJSON *kk_tsl_property_operation(jrpc_context * ctx, cJSON *params, cJSON *id,cJSON *mac) cJSON *kk_tsl_property_operation(jrpc_context * ctx, cJSON *params, cJSON *id,cJSON *mac)
{ {
sub_dev_node_t *node = NULL; sub_dev_node_t *node = NULL;
...@@ -73,9 +107,9 @@ cJSON *kk_tsl_property_operation(jrpc_context * ctx, cJSON *params, cJSON *id,cJ ...@@ -73,9 +107,9 @@ cJSON *kk_tsl_property_operation(jrpc_context * ctx, cJSON *params, cJSON *id,cJ
int num; int num;
uint8_t findFlag = 0xff; uint8_t findFlag = 0xff;
cJSON *propertyItem = NULL; cJSON *propertyItem = NULL;
cJSON *propertyItem1 = NULL; cJSON *propertyItem1 = NULL;
EmberEUI64 eui64; int startIdx_1 = 0;
EmberNodeId nodeId = EMBER_AF_PLUGIN_DEVICE_TABLE_NULL_NODE_ID; cJSON *propertyItem2 = NULL;
int startIdx = 0; int startIdx = 0;
char tmp_Identity[64] = {0}; char tmp_Identity[64] = {0};
UTIL_LOG_INFO("\n********************kk tsl property operation********************\n"); UTIL_LOG_INFO("\n********************kk tsl property operation********************\n");
...@@ -93,96 +127,262 @@ cJSON *kk_tsl_property_operation(jrpc_context * ctx, cJSON *params, cJSON *id,cJ ...@@ -93,96 +127,262 @@ cJSON *kk_tsl_property_operation(jrpc_context * ctx, cJSON *params, cJSON *id,cJ
num = kk_get_tsl_num(); num = kk_get_tsl_num();
for(index = 0; index < num; index++){ for(index = 0; index < num; index++){
rev = kk_tsl_utils_memtok(g_tsl_zigbee_map[index].Identity,".",1,&startIdx);
rev = kk_tsl_utils_memtok(g_tsl_zigbee_map[index].Identity,'.',2,&startIdx);
if(!rev){ if(!rev){
kk_tsl_utils_memtok(g_tsl_zigbee_map[index].Identity,'.',1,&startIdx_1);
memset(tmp_Identity,0x0,sizeof(tmp_Identity)); memset(tmp_Identity,0x0,sizeof(tmp_Identity));
memcpy(tmp_Identity, g_tsl_zigbee_map[index].Identity, startIdx); memcpy(tmp_Identity, g_tsl_zigbee_map[index].Identity, startIdx_1);
propertyItem1 = rpc_cJSON_GetObjectItem(params,tmp_Identity); propertyItem2 = rpc_cJSON_GetObjectItem(params,tmp_Identity);
if(propertyItem1 != NULL){ if(propertyItem2 != NULL){
propertyItem = rpc_cJSON_GetObjectItem(propertyItem1,g_tsl_zigbee_map[index].Identity+startIdx+1); memset(tmp_Identity,0x0,sizeof(tmp_Identity));
if(propertyItem != NULL){ memcpy(tmp_Identity, g_tsl_zigbee_map[index].Identity+startIdx_1+1, startIdx-startIdx_1);
findFlag = 1; propertyItem1 = rpc_cJSON_GetObjectItem(propertyItem2,tmp_Identity);
break; if(propertyItem1 != NULL){
propertyItem = rpc_cJSON_GetObjectItem(propertyItem1,g_tsl_zigbee_map[index].Identity+startIdx+1);
if(propertyItem != NULL){
findFlag = 1;
}
//break;
} }
} }
} }
else{ else{
propertyItem = rpc_cJSON_GetObjectItem(params, g_tsl_zigbee_map[index].Identity); rev = kk_tsl_utils_memtok(g_tsl_zigbee_map[index].Identity,'.',1,&startIdx);
if(propertyItem != NULL){
findFlag = 1;
break;
}
}
}
if(findFlag==0xff){
num = kk_get_tsl_glb_num();
for(index = 0; index < num; index++){
rev = kk_tsl_utils_memtok(g_tsl_zigbee_map_glb[index].map.Identity,".",1,&startIdx);
if(!rev){ if(!rev){
memset(tmp_Identity,0x0,sizeof(tmp_Identity)); memset(tmp_Identity,0x0,sizeof(tmp_Identity));
memcpy(tmp_Identity, g_tsl_zigbee_map_glb[index].map.Identity, startIdx); memcpy(tmp_Identity, g_tsl_zigbee_map[index].Identity, startIdx);
propertyItem1 = rpc_cJSON_GetObjectItem(params,tmp_Identity); propertyItem1 = rpc_cJSON_GetObjectItem(params,tmp_Identity);
if(propertyItem1 != NULL){ if(propertyItem1 != NULL){
propertyItem = rpc_cJSON_GetObjectItem(propertyItem1,g_tsl_zigbee_map_glb[index].map.Identity+startIdx+1); propertyItem = rpc_cJSON_GetObjectItem(propertyItem1,g_tsl_zigbee_map[index].Identity+startIdx+1);
if(propertyItem != NULL){ if(propertyItem != NULL){
findFlag = 2; findFlag = 1;
break; //break;
} }
} }
} }
else{ else{
propertyItem = rpc_cJSON_GetObjectItem(params, g_tsl_zigbee_map_glb[index].map.Identity); propertyItem = rpc_cJSON_GetObjectItem(params, g_tsl_zigbee_map[index].Identity);
if(propertyItem != NULL){ if(propertyItem != NULL){
findFlag = 2; findFlag = 1;
break; //break;
} }
} }
} }
} if(findFlag == 1){
res = kk_tsl_property_execute(ctx,propertyItem,mac,index,findFlag);
if(findFlag!=0xff) if(res < 0){
{ set_json_error_type(ctx,JRPC_INVALID_PARAMS,MSG_INVALID_PARAMS);
int value = 0; goto error_return;
if(propertyItem->type != cJSON_Number){ }
value = rpc_get_u8(propertyItem->valuestring); else{
}else{ findFlag = 0;
value = propertyItem->valueint; }
}
if(rpc_get_mac(mac->valuestring,eui64)==false){
set_json_error_type(ctx,JRPC_INVALID_PARAMS,MSG_INVALID_PARAMS);
goto error_return;
}
nodeId = emberAfDeviceTableGetNodeIdFromEui64(eui64);
emberAfDebugPrint("mac:");
emberAfPrintBigEndianEui64(eui64);
emberAfDebugPrintln(",node:0x%04X",nodeId);
if(findFlag==1)
res = g_tsl_zigbee_map[index].zigbee_set(ctx,nodeId,g_tsl_zigbee_map[index].endpoint,&value);
else if(findFlag==2)
res = g_tsl_zigbee_map_glb[index].map.zigbee_set(ctx,nodeId,g_tsl_zigbee_map_glb[index].map.endpoint,&value);
if(res < 0)
{
set_json_error_type(ctx,JRPC_INVALID_PARAMS,MSG_INVALID_PARAMS);
goto error_return;
} }
else{
return rpc_cJSON_CreateNumber(res);
}
} }
if(findFlag==0xff){
num = kk_get_tsl_glb_num();
for(index = 0; index < num; index++){
rev = kk_tsl_utils_memtok(g_tsl_zigbee_map_glb[index].map.Identity,'.',2,&startIdx);
if(!rev){
kk_tsl_utils_memtok(g_tsl_zigbee_map_glb[index].map.Identity,'.',1,&startIdx_1);
memset(tmp_Identity,0x0,sizeof(tmp_Identity));
memcpy(tmp_Identity, g_tsl_zigbee_map_glb[index].map.Identity, startIdx_1);
propertyItem2 = rpc_cJSON_GetObjectItem(params,tmp_Identity);
if(propertyItem2!= NULL){
memset(tmp_Identity,0x0,sizeof(tmp_Identity));
memcpy(tmp_Identity, g_tsl_zigbee_map_glb[index].map.Identity+startIdx_1+1, startIdx-startIdx_1);
propertyItem1 = rpc_cJSON_GetObjectItem(propertyItem2,tmp_Identity);
if(propertyItem1 != NULL){
propertyItem = rpc_cJSON_GetObjectItem(propertyItem1,g_tsl_zigbee_map_glb[index].map.Identity+startIdx+1);
if(propertyItem != NULL){
findFlag = 2;
}
}
}
}
else{
rev = kk_tsl_utils_memtok(g_tsl_zigbee_map_glb[index].map.Identity,'.',1,&startIdx);
if(!rev){
memset(tmp_Identity,0x0,sizeof(tmp_Identity));
memcpy(tmp_Identity, g_tsl_zigbee_map_glb[index].map.Identity, startIdx);
propertyItem1 = rpc_cJSON_GetObjectItem(params,tmp_Identity);
if(propertyItem1 != NULL){
propertyItem = rpc_cJSON_GetObjectItem(propertyItem1,g_tsl_zigbee_map_glb[index].map.Identity+startIdx+1);
if(propertyItem != NULL){
findFlag = 2;
}
}
}
else{
propertyItem = rpc_cJSON_GetObjectItem(params, g_tsl_zigbee_map_glb[index].map.Identity);
if(propertyItem != NULL){
findFlag = 2;
}
}
}
if(findFlag == 2){
res = kk_tsl_property_execute(ctx,propertyItem,mac,index,findFlag);
if(res < 0){
set_json_error_type(ctx,JRPC_INVALID_PARAMS,MSG_INVALID_PARAMS);
goto error_return;
}
else{
findFlag = 0;
}
}
}
}
return rpc_cJSON_CreateNumber(res);
} }
error_return: error_return:
return rpc_cJSON_CreateNull(); return rpc_cJSON_CreateNull();
} }
int kk_tsl_set_colorlight_ModeType(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data)
{
int value = *(uint8_t*)data;
emberAfAppPrintln("[tsl set:kk_tsl_set_colorloght_ModeType],value=0x%02x",value);
return 0;
}
int kk_tsl_set_colorlight_Mode(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data)
{
EmberStatus status = 0;
int value = *(uint8_t*)data;
emberAfAppPrintln("[tsl set:kk_tsl_set_colorloght_Mode],value=0x%02x",value);
if(node==EMBER_AF_PLUGIN_DEVICE_TABLE_NULL_NODE_ID){
if(ctx)
set_json_error_type(ctx,JRPC_INVALID_PARAMS,MSG_INVALID_PARAMS);
goto error_return;
}
status = zclColorControlLoopSet(node,ep,value,0,0,1,55,0,0,0);
return status;
error_return:
return -1;
}
int kk_tsl_set_colorlight_Brightness(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data)
{
int value = *(uint8_t*)data;
EmberStatus status = 0;
emberAfAppPrintln("[tsl set:kk_tsl_set_colorloght_Brightness],value=0x%02x",value);
if(node==EMBER_AF_PLUGIN_DEVICE_TABLE_NULL_NODE_ID){
if(ctx)
set_json_error_type(ctx,JRPC_INVALID_PARAMS,MSG_INVALID_PARAMS);
goto error_return;
}
#if 0
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
value |= BIT(1);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
status = zclGWrite(node,1,ep,false,0x08,
0,
ZCL_BITMAP8_ATTRIBUTE_TYPE,
1,
value,
true);
emberAfAppPrintln("status=0x%02x",status);
#else
status = zclLevel_MoveToLevel(node,ep,value,0,NULL,NULL);
#endif
return status;
error_return:
return -1;
}
int kk_tsl_set_colorlight_WhiteBrightness(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data)
{
int value = *(uint8_t*)data;
emberAfAppPrintln("[tsl set:kk_tsl_set_colorloght_WhiteBrightness],value=0x%02x",value);
return 0;
}
int kk_tsl_set_colorlight_RGB_red(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data)
{
int value = *(uint8_t*)data;
EmberStatus status = 0;
emberAfAppPrintln("[tsl set:kk_tsl_set_colorloght_RGB_red],value=0x%02x",value);
s_Red = value;
s_RgbCount++;
if(s_RgbCount >= 3){
status = zclColorControlMovetohueandsat(node,ep,s_Red,s_Green,s_Blue,0,0,0);
s_RgbCount = 0;
}
return status;
}
int kk_tsl_set_colorlight_RGB_green(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data)
{
int value = *(uint8_t*)data;
EmberStatus status = 0;
emberAfAppPrintln("[tsl set:kk_tsl_set_colorloght_RGB_green],value=0x%02x",value);
s_Green = value;
s_RgbCount++;
if(s_RgbCount >= 3){
status = zclColorControlMovetohueandsat(node,ep,s_Red,s_Green,s_Blue,0,0,0);
s_RgbCount = 0;
}
return status;
}
int kk_tsl_set_colorlight_RGB_blue(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data)
{
int value = *(uint8_t*)data;
EmberStatus status = 0;
emberAfAppPrintln("[tsl set:kk_tsl_set_colorloght_RGB_blue],value=0x%02x",value);
s_Blue = value;
s_RgbCount++;
if(s_RgbCount >= 3){
status = zclColorControlMovetohueandsat(node,ep,s_Red,s_Green,s_Blue,0,0,0);
s_RgbCount = 0;
}
return status;
}
int kk_tsl_set_colorlight_OnOff(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data)
{
uint8_t Onoff = 0;
EmberStatus status = 0;
Onoff = *(uint8_t*)data;
emberAfAppPrintln("[tsl set:OnOff],Onoff=0x%02x",Onoff);
if(node==EMBER_AF_PLUGIN_DEVICE_TABLE_NULL_NODE_ID){
if(ctx)
set_json_error_type(ctx,JRPC_INVALID_PARAMS,MSG_INVALID_PARAMS);
goto error_return;
}
if(Onoff==1){
//status = zclGWrite(node,1,1,false,0xFCC0,0,ZCL_BITMAP8_ATTRIBUTE_TYPE,1,Onoff,true);
status = zclOnOff_On(node,ep);
emberAfAppPrintln("On");
}else if(Onoff==0){
//status = zclGWrite(node,1,1,false,0xFCC0,0,ZCL_BITMAP8_ATTRIBUTE_TYPE,1,Onoff,true);
status = zclOnOff_Off(node,ep);
emberAfAppPrintln("Off");
}else{
if(ctx)
set_json_error_type(ctx,JRPC_INVALID_PARAMS,MSG_INVALID_PARAMS);
goto error_return;
}
emberAfAppPrintln("status=0x%02x",status);
return status;
error_return:
return -1;
}
int kk_tsl_set_gloabl_OnOff(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data) int kk_tsl_set_gloabl_OnOff(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data)
{ {
......
...@@ -13,9 +13,14 @@ int kk_tsl_set_windowCovering_OperationMode(jrpc_context * ctx,EmberNodeId node, ...@@ -13,9 +13,14 @@ int kk_tsl_set_windowCovering_OperationMode(jrpc_context * ctx,EmberNodeId node,
int kk_tsl_set_windowCovering_mode(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data); int kk_tsl_set_windowCovering_mode(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data);
int kk_tsl_set_windowCovering_position(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data); int kk_tsl_set_windowCovering_position(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data);
int kk_tsl_set_colorlight_OnOff(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data);
int kk_tsl_set_colorlight_ModeType(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data);
int kk_tsl_set_colorlight_Mode(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data);
int kk_tsl_set_colorlight_Brightness(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data);
int kk_tsl_set_colorlight_WhiteBrightness(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data);
int kk_tsl_set_colorlight_RGB_red(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data);
int kk_tsl_set_colorlight_RGB_green(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data);
int kk_tsl_set_colorlight_RGB_blue(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data);
......
#include "kk_zigbee_api.h" #include "kk_zigbee_api.h"
// network leave // network leave
EmberStatus kk_network_leave(void) EmberStatus kk_network_leave(void)
{ {
EmberStatus status = ezspLeaveNetwork(); EmberStatus status = ezspLeaveNetwork();
if (status == EMBER_SUCCESS) { if (status == EMBER_SUCCESS) {
emberAfAppPrintln("net_leave: Left network\r\n"); emberAfAppPrintln("net_leave: Left network\r\n");
} else { } else {
emberAfAppPrintln("net_leave: Error 0x%X\r\n", status); emberAfAppPrintln("net_leave: Error 0x%X\r\n", status);
} }
return status; return status;
} }
EmberStatus kk_network_form(bool centralized,EmberPanId panId,int8_t radioTxPower,uint8_t channel) EmberStatus kk_network_form(bool centralized,EmberPanId panId,int8_t radioTxPower,uint8_t channel)
{ {
EmberStatus status = emberAfPluginNetworkCreatorNetworkForm(centralized, EmberStatus status = emberAfPluginNetworkCreatorNetworkForm(centralized,
panId, panId,
radioTxPower, radioTxPower,
channel); channel);
emberAfAppPrintln("[network form]centralized:%p,PAN ID:0x%2x,TxPower:%d,channel:0x%x,status=0x%x", emberAfAppPrintln("[network form]centralized:%p,PAN ID:0x%2x,TxPower:%d,channel:0x%x,status=0x%x",
(centralized==true)?"yes":"no", (centralized==true)?"yes":"no",
panId, panId,
radioTxPower, radioTxPower,
channel, channel,
status); status);
return status; return status;
} }
void kk_print_network_info(void) void kk_print_network_info(void)
{ {
emberAfAppPrint("\r\nMAC Address = " ); emberAfAppPrint("\r\nMAC Address = " );
EmberEUI64 eui64; EmberEUI64 eui64;
emberAfGetEui64(eui64); emberAfGetEui64(eui64);
emberAfPrintBigEndianEui64(eui64); emberAfPrintBigEndianEui64(eui64);
emberAfAppFlush(); emberAfAppFlush();
EmberNetworkStatus status = ezspNetworkState(); EmberNetworkStatus status = ezspNetworkState();
if (status== EMBER_JOINED_NETWORK ){ if (status== EMBER_JOINED_NETWORK ){
emberAfAppPrintln("\r\nNode ID = 0x%2x", emberAfGetNodeId() ); emberAfAppPrintln("\r\nNode ID = 0x%2x", emberAfGetNodeId() );
emberAfAppPrintln("\r\nPANID = 0x%2x", emberAfGetPanId() ); emberAfAppPrintln("\r\nPANID = 0x%2x", emberAfGetPanId() );
emberAfAppPrintln("\r\nChannel = 0x%x", emberAfGetRadioChannel() ); emberAfAppPrintln("\r\nChannel = 0x%x", emberAfGetRadioChannel() );
emberAfAppPrintln("\r\nTX Power(dBm) = %d", emberAfGetRadioChannel() ); emberAfAppPrintln("\r\nTX Power(dBm) = %d", emberAfGetRadioChannel() );
emberAfAppFlush(); emberAfAppFlush();
EmberKeyStruct nwkKey; EmberKeyStruct nwkKey;
if ( emberGetKey(EMBER_CURRENT_NETWORK_KEY,&nwkKey) == EMBER_SUCCESS ) if ( emberGetKey(EMBER_CURRENT_NETWORK_KEY,&nwkKey) == EMBER_SUCCESS )
{ {
emberAfAppPrintln("\r\nNetwork Key = " ); emberAfAppPrintln("\r\nNetwork Key = " );
emberAfPrintZigbeeKey(emberKeyContents(&nwkKey.key)); emberAfPrintZigbeeKey(emberKeyContents(&nwkKey.key));
emberAfAppFlush(); emberAfAppFlush();
} }
}else{ }else{
emberAfAppPrintln( "\r\nNot joined network: Network Satus: 0x%x\r\n", status ); emberAfAppPrintln( "\r\nNot joined network: Network Satus: 0x%x\r\n", status );
} }
} }
EmberStatus kk_zdo_leave_request(EmberNodeId target,bool removeChildren,bool rejoin) EmberStatus kk_zdo_leave_request(EmberNodeId target,bool removeChildren,bool rejoin)
{ {
EmberEUI64 nullEui64 = { 0, 0, 0, 0, 0, 0, 0, 0 }; EmberEUI64 nullEui64 = { 0, 0, 0, 0, 0, 0, 0, 0 };
EmberStatus status; EmberStatus status;
uint8_t options = 0; uint8_t options = 0;
if (rejoin) { if (rejoin) {
options |= EMBER_ZIGBEE_LEAVE_AND_REJOIN; options |= EMBER_ZIGBEE_LEAVE_AND_REJOIN;
} }
if (removeChildren) { if (removeChildren) {
options |= EMBER_ZIGBEE_LEAVE_AND_REMOVE_CHILDREN; options |= EMBER_ZIGBEE_LEAVE_AND_REMOVE_CHILDREN;
} }
status = emberLeaveRequest(target, status = emberLeaveRequest(target,
nullEui64, nullEui64,
options, options,
EMBER_APS_OPTION_RETRY); EMBER_APS_OPTION_RETRY);
emberAfAppPrintln("Leave %p0x%X", "Request: ", status); emberAfAppPrintln("Leave %p0x%X", "Request: ", status);
} }
EmberStatus zclGRead(uint16_t node, EmberStatus zclGRead(uint16_t node,
uint8_t srcEP, uint8_t srcEP,
uint8_t dstEP, uint8_t dstEP,
bool multicast, bool multicast,
uint16_t clusterId, uint16_t clusterId,
uint16_t attrId, uint16_t attrId,
bool svr) bool svr)
{ {
EmberStatus status; EmberStatus status;
zclBufferSetup(ZCL_GLOBAL_COMMAND | ((svr==true)? zclBufferSetup(ZCL_GLOBAL_COMMAND | ((svr==true)?
ZCL_FRAME_CONTROL_CLIENT_TO_SERVER ZCL_FRAME_CONTROL_CLIENT_TO_SERVER
:ZCL_FRAME_CONTROL_SERVER_TO_CLIENT), :ZCL_FRAME_CONTROL_SERVER_TO_CLIENT),
clusterId, clusterId,
ZCL_READ_ATTRIBUTES_COMMAND_ID); ZCL_READ_ATTRIBUTES_COMMAND_ID);
zclBufferAddByte(LOW_BYTE(attrId)); zclBufferAddByte(LOW_BYTE(attrId));
zclBufferAddByte(HIGH_BYTE(attrId)); zclBufferAddByte(HIGH_BYTE(attrId));
rpcBufferPrint(); rpcBufferPrint();
status = rpcSendCommand(node,srcEP,dstEP,multicast); status = rpcSendCommand(node,srcEP,dstEP,multicast);
return status; return status;
} }
EmberStatus zclGWrite(uint16_t node, EmberStatus zclGWrite(uint16_t node,
uint8_t srcEP, uint8_t srcEP,
uint8_t dstEP, uint8_t dstEP,
bool multicast, bool multicast,
uint16_t clusterId, uint16_t clusterId,
uint16_t attrId, uint16_t attrId,
uint8_t dataType, uint8_t dataType,
uint8_t dataLen, uint8_t dataLen,
uint8_t *data, uint8_t *data,
bool svr) bool svr)
{ {
EmberStatus status = EMBER_ERR_FATAL; EmberStatus status = EMBER_ERR_FATAL;
int i; int i;
if(data==NULL||dataLen==0) return status; if(data==NULL||dataLen==0) return status;
zclBufferSetup(ZCL_GLOBAL_COMMAND | ((svr==true)? zclBufferSetup(ZCL_GLOBAL_COMMAND | ((svr==true)?
ZCL_FRAME_CONTROL_CLIENT_TO_SERVER ZCL_FRAME_CONTROL_CLIENT_TO_SERVER
:ZCL_FRAME_CONTROL_SERVER_TO_CLIENT), :ZCL_FRAME_CONTROL_SERVER_TO_CLIENT),
clusterId, clusterId,
ZCL_WRITE_ATTRIBUTES_COMMAND_ID); ZCL_WRITE_ATTRIBUTES_COMMAND_ID);
zclBufferAddByte(LOW_BYTE(attrId)); zclBufferAddByte(LOW_BYTE(attrId));
zclBufferAddByte(HIGH_BYTE(attrId)); zclBufferAddByte(HIGH_BYTE(attrId));
zclBufferAddByte(dataType); zclBufferAddByte(dataType);
for(i=0;i<dataLen;i++){ for(i=0;i<dataLen;i++){
zclBufferAddByte(data[i]); zclBufferAddByte(data[i]);
} }
rpcBufferPrint(); rpcBufferPrint();
status = rpcSendCommand(node,srcEP,dstEP,multicast); status = rpcSendCommand(node,srcEP,dstEP,multicast);
return status; return status;
} }
// //
EmberStatus WindowCover_UpOpen(uint16_t node,uint8_t ep) EmberStatus WindowCover_UpOpen(uint16_t node,uint8_t ep)
{ {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_WINDOW_COVERING_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_WINDOW_COVERING_CLUSTER_ID,
ZCL_WINDOW_COVERING_UP_OPEN_COMMAND_ID); ZCL_WINDOW_COVERING_UP_OPEN_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Up/Open]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status); kk_print_debug("[Up/Open]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status; return status;
} }
EmberStatus WindowCover_DownClose(uint16_t node,uint8_t ep) EmberStatus WindowCover_DownClose(uint16_t node,uint8_t ep)
{ {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_WINDOW_COVERING_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_WINDOW_COVERING_CLUSTER_ID,
ZCL_WINDOW_COVERING_DOWN_CLOSE_COMMAND_ID); ZCL_WINDOW_COVERING_DOWN_CLOSE_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Down/Close]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status); kk_print_debug("[Down/Close]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status; return status;
} }
EmberStatus WindowCover_Stop(uint16_t node,uint8_t ep) EmberStatus WindowCover_Stop(uint16_t node,uint8_t ep)
{ {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_WINDOW_COVERING_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_WINDOW_COVERING_CLUSTER_ID,
ZCL_WINDOW_COVERING_STOP_COMMAND_ID); ZCL_WINDOW_COVERING_STOP_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Stop]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status); kk_print_debug("[Stop]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status; return status;
} }
EmberStatus WindowCover_GotoLiftPercentage(uint16_t node,uint8_t ep,uint8_t position) EmberStatus WindowCover_GotoLiftPercentage(uint16_t node,uint8_t ep,uint8_t position)
{ {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_WINDOW_COVERING_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_WINDOW_COVERING_CLUSTER_ID,
ZCL_WINDOW_COVERING_GO_TO_LIFT_PERCENTAGE_COMMAND_ID); ZCL_WINDOW_COVERING_GO_TO_LIFT_PERCENTAGE_COMMAND_ID);
zclBufferAddByte(position); zclBufferAddByte(position);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[GotoLiftPercentage]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status); kk_print_debug("[GotoLiftPercentage]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status; return status;
} }
EmberStatus zclOnOff_On(uint16_t node,uint8_t ep) EmberStatus zclOnOff_On(uint16_t node,uint8_t ep)
{ {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID,
ZCL_ON_COMMAND_ID); ZCL_ON_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[On]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status); kk_print_debug("[On]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status; return status;
} }
EmberStatus zclOnOff_Off(uint16_t node,uint8_t ep) EmberStatus zclOnOff_Off(uint16_t node,uint8_t ep)
{ {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID,
ZCL_OFF_COMMAND_ID); ZCL_OFF_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Off]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status); kk_print_debug("[Off]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status; return status;
} }
EmberStatus zclOnOff_Toggle(uint16_t node,uint8_t ep) EmberStatus zclOnOff_Toggle(uint16_t node,uint8_t ep)
{ {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID,
ZCL_TOGGLE_COMMAND_ID); ZCL_TOGGLE_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Toggle]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status); kk_print_debug("[Toggle]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status; return status;
} }
EmberStatus zclOnOff_OffWithEffect(uint16_t node,uint8_t ep,uint8_t id,uint8_t var) EmberStatus zclOnOff_OffWithEffect(uint16_t node,uint8_t ep,uint8_t id,uint8_t var)
{ {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID,
ZCL_OFF_WITH_EFFECT_COMMAND_ID); ZCL_OFF_WITH_EFFECT_COMMAND_ID);
zclBufferAddByte(id); zclBufferAddByte(id);
zclBufferAddByte(var); zclBufferAddByte(var);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[off with effect]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status); kk_print_debug("[off with effect]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status; return status;
} }
EmberStatus zclOnOff_OnWithRecallGlobalScene(uint16_t node,uint8_t ep) EmberStatus zclOnOff_OnWithRecallGlobalScene(uint16_t node,uint8_t ep)
{ {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID,
ZCL_ON_WITH_RECALL_GLOBAL_SCENE_COMMAND_ID); ZCL_ON_WITH_RECALL_GLOBAL_SCENE_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false); 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); kk_print_debug("[On with recall global scene]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status; return status;
} }
EmberStatus zclOnOff_OnWithTimedOff(uint16_t node,uint8_t ep,uint8_t Control,uint16_t OnTime,uint16_t OffWaitTime) EmberStatus zclOnOff_OnWithTimedOff(uint16_t node,uint8_t ep,uint8_t Control,uint16_t OnTime,uint16_t OffWaitTime)
{ {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_ON_OFF_CLUSTER_ID,
ZCL_ON_WITH_TIMED_OFF_COMMAND_ID); ZCL_ON_WITH_TIMED_OFF_COMMAND_ID);
zclBufferAddByte(Control); zclBufferAddByte(Control);
zclBufferAddWord(OnTime); zclBufferAddWord(OnTime);
zclBufferAddWord(OffWaitTime); zclBufferAddWord(OffWaitTime);
status = rpcSendCommand(node,1,ep,false); 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); kk_print_debug("[on with timed off]node=0x%02X,ep=%d,status=0x%02X\n",node,ep,status);
return status; return status;
} }
EmberStatus zclColorControlMovetohue(uint16_t node, EmberStatus zclColorControlMovetohue(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t hue, uint8_t hue,
uint8_t dir, uint8_t dir,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) { uint8_t Override) {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_MOVE_TO_HUE_COMMAND_ID); ZCL_MOVE_TO_HUE_COMMAND_ID);
zclBufferAddByte(hue); zclBufferAddByte(hue);
zclBufferAddByte(dir); zclBufferAddByte(dir);
zclBufferAddWord(trsTime); zclBufferAddWord(trsTime);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
kk_print_debug("hue=%d,dir=%d,trsTime=%d,mask=%d,Override=%d\r\n", kk_print_debug("hue=%d,dir=%d,trsTime=%d,mask=%d,Override=%d\r\n",
hue,dir,trsTime,mask,Override); hue,dir,trsTime,mask,Override);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Move to hue]status=0x%02X\n",status); kk_print_debug("[Move to hue]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlMovehue(uint16_t node, EmberStatus zclColorControlMovehue(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t mode, uint8_t mode,
uint8_t rate, uint8_t rate,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) { uint8_t Override) {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_MOVE_HUE_COMMAND_ID); ZCL_MOVE_HUE_COMMAND_ID);
zclBufferAddByte(mode); zclBufferAddByte(mode);
zclBufferAddByte(rate); zclBufferAddByte(rate);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("mode=0x%02x,rate=0x%02x,mask=0x%02x,Override=0x%02x\r\n", emberAfCorePrintln("mode=0x%02x,rate=0x%02x,mask=0x%02x,Override=0x%02x\r\n",
mode,rate,mask,Override); mode,rate,mask,Override);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Move hue]status=0x%02X\n",status); kk_print_debug("[Move hue]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlStephue(uint16_t node, EmberStatus zclColorControlStephue(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t mode, uint8_t mode,
uint8_t size, uint8_t size,
uint8_t trsTime, uint8_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) { uint8_t Override) {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_STEP_HUE_COMMAND_ID); ZCL_STEP_HUE_COMMAND_ID);
zclBufferAddByte(mode); zclBufferAddByte(mode);
zclBufferAddByte(size); zclBufferAddByte(size);
zclBufferAddByte(trsTime); zclBufferAddByte(trsTime);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("step mode=%d,step size=%d,transition time=%d,mask=%d,override=%d\r\n", emberAfCorePrintln("step mode=%d,step size=%d,transition time=%d,mask=%d,override=%d\r\n",
mode,size,trsTime,mask,Override); mode,size,trsTime,mask,Override);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Step hue]status=0x%02X\n",status); kk_print_debug("[Step hue]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlMovetosat(uint16_t node, EmberStatus zclColorControlMovetosat(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t saturation, uint8_t saturation,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) { uint8_t Override) {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_MOVE_TO_SATURATION_COMMAND_ID); ZCL_MOVE_TO_SATURATION_COMMAND_ID);
zclBufferAddByte(saturation); zclBufferAddByte(saturation);
zclBufferAddWord(trsTime); zclBufferAddWord(trsTime);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("saturation=%d,trsTime=%d,options mask=%d,options override=%d\r\n", emberAfCorePrintln("saturation=%d,trsTime=%d,options mask=%d,options override=%d\r\n",
saturation,trsTime,mask,Override); saturation,trsTime,mask,Override);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Move to Saturation]status=0x%02X\n",status); kk_print_debug("[Move to Saturation]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlMovesat(uint16_t node, EmberStatus zclColorControlMovesat(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t mode, uint8_t mode,
uint8_t rate, uint8_t rate,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) { uint8_t Override) {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_MOVE_SATURATION_COMMAND_ID); ZCL_MOVE_SATURATION_COMMAND_ID);
zclBufferAddByte(mode); zclBufferAddByte(mode);
zclBufferAddByte(rate); zclBufferAddByte(rate);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("move mode=0x%02x,rate=0x%02x,mask=0x%02x,Override=0x%02x\r\n", emberAfCorePrintln("move mode=0x%02x,rate=0x%02x,mask=0x%02x,Override=0x%02x\r\n",
mode,rate,mask,Override); mode,rate,mask,Override);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Move Saturation]status=0x%02X\n",status); kk_print_debug("[Move Saturation]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlStepsat(uint16_t node, EmberStatus zclColorControlStepsat(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t mode, uint8_t mode,
uint8_t size, uint8_t size,
uint8_t trsTime, uint8_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) { uint8_t Override) {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_STEP_SATURATION_COMMAND_ID); ZCL_STEP_SATURATION_COMMAND_ID);
zclBufferAddByte(mode); zclBufferAddByte(mode);
zclBufferAddByte(size); zclBufferAddByte(size);
zclBufferAddByte(trsTime); zclBufferAddByte(trsTime);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("step mode=%d,step size=%d,transition time=%d,mask=%d,override=%d\r\n", emberAfCorePrintln("step mode=%d,step size=%d,transition time=%d,mask=%d,override=%d\r\n",
mode,size,trsTime,mask,Override); mode,size,trsTime,mask,Override);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Move Saturation]status=0x%02X\n",status); kk_print_debug("[Move Saturation]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlMovetohueandsat(uint16_t node, EmberStatus zclColorControlMovetohueandsat(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t hue, uint8_t hue,
uint8_t saturation, uint8_t saturation,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) { uint8_t Override) {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID); ZCL_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID);
zclBufferAddByte(hue); zclBufferAddByte(hue);
zclBufferAddByte(saturation); zclBufferAddByte(saturation);
zclBufferAddWord(trsTime); zclBufferAddWord(trsTime);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("hue=%d,saturation=%d,trsTime=%d,mask=%d,Override=%d\r\n", emberAfCorePrintln("hue=%d,saturation=%d,trsTime=%d,mask=%d,Override=%d\r\n",
hue,saturation,trsTime,mask,Override); hue,saturation,trsTime,mask,Override);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Move to hue and Saturation]status=0x%02X\n",status); kk_print_debug("[Move to hue and Saturation]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlMovetocolor(uint16_t node, EmberStatus zclColorControlMovetocolor(uint16_t node,
uint8_t ep, uint8_t ep,
uint16_t colorX, uint16_t colorX,
uint16_t colorY, uint16_t colorY,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) { uint8_t Override) {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_MOVE_TO_COLOR_COMMAND_ID); ZCL_MOVE_TO_COLOR_COMMAND_ID);
zclBufferAddWord(colorX); zclBufferAddWord(colorX);
zclBufferAddWord(colorY); zclBufferAddWord(colorY);
zclBufferAddWord(trsTime); zclBufferAddWord(trsTime);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("color x=%d,color y=%d,transition time=%d,options mask=0x%02x,options override=0x%02x\r\n", emberAfCorePrintln("color x=%d,color y=%d,transition time=%d,options mask=0x%02x,options override=0x%02x\r\n",
colorX,colorY,trsTime,mask,Override); colorX,colorY,trsTime,mask,Override);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Move to color]status=0x%02X\n",status); kk_print_debug("[Move to color]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlMovecolor(uint16_t node, EmberStatus zclColorControlMovecolor(uint16_t node,
uint8_t ep, uint8_t ep,
uint16_t rateX, uint16_t rateX,
uint16_t rateY, uint16_t rateY,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) uint8_t Override)
{ {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_MOVE_COLOR_COMMAND_ID); ZCL_MOVE_COLOR_COMMAND_ID);
zclBufferAddWord(rateX); zclBufferAddWord(rateX);
zclBufferAddWord(rateY); zclBufferAddWord(rateY);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("rateX=%d,rateY=%d,mask=%d,override=%d\r\n",rateX,rateY,mask,Override); emberAfCorePrintln("rateX=%d,rateY=%d,mask=%d,override=%d\r\n",rateX,rateY,mask,Override);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Move color]status=0x%02X\n",status); kk_print_debug("[Move color]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlStepcolor(uint16_t node, EmberStatus zclColorControlStepcolor(uint16_t node,
uint8_t ep, uint8_t ep,
uint16_t stepX, uint16_t stepX,
uint16_t stepY, uint16_t stepY,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) { uint8_t Override) {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_STEP_COLOR_COMMAND_ID); ZCL_STEP_COLOR_COMMAND_ID);
zclBufferAddWord(stepX); zclBufferAddWord(stepX);
zclBufferAddWord(stepY); zclBufferAddWord(stepY);
zclBufferAddWord(trsTime); zclBufferAddWord(trsTime);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("step x=%d,step y=%d,transition time=%d,options mask=%d,options override=%d\r\n", emberAfCorePrintln("step x=%d,step y=%d,transition time=%d,options mask=%d,options override=%d\r\n",
stepX,stepY,trsTime,mask,Override); stepX,stepY,trsTime,mask,Override);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Step color]status=0x%02X\n",status); kk_print_debug("[Step color]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlMovetocolortemp(uint16_t node, EmberStatus zclColorControlMovetocolortemp(uint16_t node,
uint8_t ep, uint8_t ep,
uint16_t colorTemp, uint16_t colorTemp,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) { uint8_t Override) {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_MOVE_TO_COLOR_TEMPERATURE_COMMAND_ID); ZCL_MOVE_TO_COLOR_TEMPERATURE_COMMAND_ID);
zclBufferAddWord(colorTemp); zclBufferAddWord(colorTemp);
zclBufferAddWord(trsTime); zclBufferAddWord(trsTime);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("colorTemp=%d,trsTime=%d,mask=%d,Override=%d\r\n", emberAfCorePrintln("colorTemp=%d,trsTime=%d,mask=%d,Override=%d\r\n",
colorTemp,trsTime,mask,Override); colorTemp,trsTime,mask,Override);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Move to color temperature]status=0x%02X\n",status); kk_print_debug("[Move to color temperature]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlEmovetohue(uint16_t node, EmberStatus zclColorControlEmovetohue(uint16_t node,
uint8_t ep, uint8_t ep,
uint16_t hue, uint16_t hue,
uint8_t dir, uint8_t dir,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) { uint8_t Override) {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_ENHANCED_MOVE_TO_HUE_COMMAND_ID); ZCL_ENHANCED_MOVE_TO_HUE_COMMAND_ID);
zclBufferAddWord(hue); zclBufferAddWord(hue);
zclBufferAddByte(dir); zclBufferAddByte(dir);
zclBufferAddWord(trsTime); zclBufferAddWord(trsTime);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("hue=%d,dir=%d,trsTime=%d\r\n",hue,dir,trsTime); emberAfCorePrintln("hue=%d,dir=%d,trsTime=%d\r\n",hue,dir,trsTime);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Enhanced Move to hue]status=0x%02X\n",status); kk_print_debug("[Enhanced Move to hue]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlEmovehue( uint16_t node, EmberStatus zclColorControlEmovehue( uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t mode, uint8_t mode,
uint16_t rate, uint16_t rate,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override){ uint8_t Override){
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup(ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup(ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_ENHANCED_MOVE_HUE_COMMAND_ID); ZCL_ENHANCED_MOVE_HUE_COMMAND_ID);
zclBufferAddByte(mode); zclBufferAddByte(mode);
zclBufferAddWord(rate); zclBufferAddWord(rate);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("mode=%d,rate=%d\r\n",mode,rate); emberAfCorePrintln("mode=%d,rate=%d\r\n",mode,rate);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Enhanced Move hue]status=0x%02X\n",status); kk_print_debug("[Enhanced Move hue]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlEstephue(uint16_t node, EmberStatus zclColorControlEstephue(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t mode, uint8_t mode,
uint16_t size, uint16_t size,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) { uint8_t Override) {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_ENHANCED_STEP_HUE_COMMAND_ID); ZCL_ENHANCED_STEP_HUE_COMMAND_ID);
zclBufferAddByte(mode); zclBufferAddByte(mode);
zclBufferAddWord(size); zclBufferAddWord(size);
zclBufferAddWord(trsTime); zclBufferAddWord(trsTime);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("mode=%d,size=%d,trsTime=%d\r\n",mode,size,trsTime); emberAfCorePrintln("mode=%d,size=%d,trsTime=%d\r\n",mode,size,trsTime);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Enhanced step hue]status=0x%02X\n",status); kk_print_debug("[Enhanced step hue]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlEmovetohueandsat(uint16_t node, EmberStatus zclColorControlEmovetohueandsat(uint16_t node,
uint8_t ep, uint8_t ep,
uint16_t hue, uint16_t hue,
uint8_t saturation, uint8_t saturation,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) { uint8_t Override) {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_ENHANCED_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID); ZCL_ENHANCED_MOVE_TO_HUE_AND_SATURATION_COMMAND_ID);
zclBufferAddWord(hue); zclBufferAddWord(hue);
zclBufferAddByte(saturation); zclBufferAddByte(saturation);
zclBufferAddWord(trsTime); zclBufferAddWord(trsTime);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("hue=%d,saturation=%d,trsTime=%d\r\n",hue,saturation,trsTime); emberAfCorePrintln("hue=%d,saturation=%d,trsTime=%d\r\n",hue,saturation,trsTime);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
kk_print_debug("[Enhanced move hue and sauturation]status=0x%02X\n",status); kk_print_debug("[Enhanced move hue and sauturation]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlLoopSet(uint16_t node, EmberStatus zclColorControlLoopSet(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t flags, uint8_t flags,
uint8_t action, uint8_t action,
uint8_t dir, uint8_t dir,
uint16_t time, uint16_t time,
uint16_t sHue, uint16_t sHue,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) { uint8_t Override) {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_COLOR_LOOP_SET_COMMAND_ID); ZCL_COLOR_LOOP_SET_COMMAND_ID);
zclBufferAddByte(flags); zclBufferAddByte(flags);
zclBufferAddByte(action); zclBufferAddByte(action);
zclBufferAddByte(dir); zclBufferAddByte(dir);
zclBufferAddWord(time); zclBufferAddWord(time);
zclBufferAddWord(sHue); zclBufferAddWord(sHue);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("update flags=%d,action=%d,direction=%d,time=%d,start hue=%d\r\n", emberAfCorePrintln("update flags=%d,action=%d,direction=%d,time=%d,start hue=%d\r\n",
flags,action,dir,time,sHue); flags,action,dir,time,sHue);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Color loop set]status=0x%02X\n",status); emberAfCorePrintln("[Color loop set]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlStopmovestep(uint16_t node, EmberStatus zclColorControlStopmovestep(uint16_t node,
uint8_t ep, uint8_t ep,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) { uint8_t Override) {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_STOP_MOVE_STEP_COMMAND_ID); ZCL_STOP_MOVE_STEP_COMMAND_ID);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("options mask=%d,options override=%d\r\n",mask,Override); emberAfCorePrintln("options mask=%d,options override=%d\r\n",mask,Override);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Stop Move step]status=0x%02X\n",status); emberAfCorePrintln("[Stop Move step]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlMovecolortemp(uint16_t node, EmberStatus zclColorControlMovecolortemp(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t mode, uint8_t mode,
uint16_t rate, uint16_t rate,
uint16_t Tmin, uint16_t Tmin,
uint16_t Tmax, uint16_t Tmax,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) uint8_t Override)
{ {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_MOVE_COLOR_TEMPERATURE_COMMAND_ID); ZCL_MOVE_COLOR_TEMPERATURE_COMMAND_ID);
zclBufferAddByte(mode); zclBufferAddByte(mode);
zclBufferAddWord(rate); zclBufferAddWord(rate);
zclBufferAddWord(Tmin); zclBufferAddWord(Tmin);
zclBufferAddWord(Tmax); zclBufferAddWord(Tmax);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("mode=%d,rate=%d,Tmin=%d,Tmax=%d,mask=%d,Override=%d\r\n", emberAfCorePrintln("mode=%d,rate=%d,Tmin=%d,Tmax=%d,mask=%d,Override=%d\r\n",
mode,rate,Tmin,Tmax,mask,Override); mode,rate,Tmin,Tmax,mask,Override);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Move color temperature]status=0x%02X\n",status); emberAfCorePrintln("[Move color temperature]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclColorControlStepcolortemp(uint16_t node, EmberStatus zclColorControlStepcolortemp(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t mode, uint8_t mode,
uint16_t size, uint16_t size,
uint16_t trsTime, uint16_t trsTime,
uint16_t minimum, uint16_t minimum,
uint16_t maximum, uint16_t maximum,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override) { uint8_t Override) {
EmberStatus status; EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID, zcl_clu_client_cmd_buffer_setup( ZCL_COLOR_CONTROL_CLUSTER_ID,
ZCL_STEP_COLOR_TEMPERATURE_COMMAND_ID); ZCL_STEP_COLOR_TEMPERATURE_COMMAND_ID);
zclBufferAddByte(mode); zclBufferAddByte(mode);
zclBufferAddWord(size); zclBufferAddWord(size);
zclBufferAddWord(trsTime); zclBufferAddWord(trsTime);
zclBufferAddWord(minimum); zclBufferAddWord(minimum);
zclBufferAddWord(maximum); zclBufferAddWord(maximum);
if(options==true){ if(options==true){
zclBufferAddByte(mask); zclBufferAddByte(mask);
zclBufferAddByte(Override); zclBufferAddByte(Override);
} }
emberAfCorePrintln("step mode=%d,step size=%d,transition time=%d,minimum=%d,maximum=%d,mask=%d,override=%d\r\n", emberAfCorePrintln("step mode=%d,step size=%d,transition time=%d,minimum=%d,maximum=%d,mask=%d,override=%d\r\n",
mode,size,trsTime,minimum,maximum,mask,Override); mode,size,trsTime,minimum,maximum,mask,Override);
status = rpcSendCommand(node,1,ep,false); status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Step color temperature]status=0x%02X\n",status); emberAfCorePrintln("[Step color temperature]status=0x%02X\n",status);
return status; return status;
} }
EmberStatus zclGroupsAddGroup(uint16_t node,
uint8_t ep,
uint16_t id,
char *name) {
uint8_t i,len;
EmberStatus status;
if(name==NULL) return EMBER_INVALID_CALL;
len = strlen(name);
zcl_clu_client_cmd_buffer_setup( ZCL_GROUPS_CLUSTER_ID,
ZCL_ADD_GROUP_COMMAND_ID);
zclBufferAddWord(id);
for(i=0;i<len;i++){
zclBufferAddByte(name[i]);
}
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Add Group] id:%d,Name:%s,status:0x%02x\r\n",id,name,status);
return status;
}
EmberStatus zclGroupsViewGroup(uint16_t node,
uint8_t ep,
uint16_t id) {
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_GROUPS_CLUSTER_ID,
ZCL_VIEW_GROUP_COMMAND_ID);
zclBufferAddWord(id);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[View Group] id:%d,status:0x%02x\r\n",id,status);
return status;
}
EmberStatus zclGroupsGetGroupMembership(uint16_t node,
uint8_t ep,
uint16_t count,
uint16_t *list) {
uint8_t i;
EmberStatus status;
if(count==0||list==NULL) return EMBER_INVALID_CALL;
zcl_clu_client_cmd_buffer_setup( ZCL_GROUPS_CLUSTER_ID,
ZCL_GET_GROUP_MEMBERSHIP_COMMAND_ID);
zclBufferAddWord(count);
for(i=0;i<count;i++){
zclBufferAddWord(list[i]);
}
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Get Group Membership] count:%d,status:0x%02x\r\n",count,status);
return status;
}
EmberStatus zclGroupsRemoveGroup(uint16_t node,
uint8_t ep,
uint16_t id) {
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_GROUPS_CLUSTER_ID,
ZCL_REMOVE_GROUP_COMMAND_ID);
zclBufferAddWord(id);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Remove Group] id:%d,status:0x%02x\r\n",id,status);
return status;
}
EmberStatus zclGroupsRemoveAllGroups(uint16_t node,
uint8_t ep) {
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_GROUPS_CLUSTER_ID,
ZCL_REMOVE_ALL_GROUPS_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Remove All Groups]status:0x%02x\r\n",status);
return status;
}
EmberStatus zclGroupsAddGroupIfIdentifying(uint16_t node,
uint8_t ep,
uint16_t id,
char *name) {
uint8_t i,len;
EmberStatus status;
if(name==NULL) return EMBER_INVALID_CALL;
len = strlen(name);
zcl_clu_client_cmd_buffer_setup( ZCL_GROUPS_CLUSTER_ID,
ZCL_ADD_GROUP_IF_IDENTIFYING_COMMAND_ID);
zclBufferAddWord(id);
for(i=0;i<len;i++){
zclBufferAddByte(name[i]);
}
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Add Group if Identifying] id:%d,Name:%s,status:0x%02x\r\n",id,name,status);
return status;
}
EmberStatus zclScenesAddScene(uint16_t node,
uint8_t ep,
uint16_t g_id,
uint16_t s_id,
uint16_t trs_time,
char *name,
uint8_t extLen,
uint8_t* extData) {
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_SCENES_CLUSTER_ID,
ZCL_ADD_SCENE_COMMAND_ID);
zclBufferAddWord(g_id);
zclBufferAddWord(s_id);
zclBufferAddWord(trs_time);
if(name!=NULL){
len = strlen(name);
for(i=0;i<len;i++){
zclBufferAddByte(name[i]);
}
for(i=0;i<extLen;i++){
zclBufferAddByte(extData[i]);
}
}
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Add Scene] g_id:%d,s_id:%d,status:0x%02x\r\n",g_id,s_id,status);
return status;
}
EmberStatus zclScenesViewScene(uint16_t node,
uint8_t ep,
uint16_t g_id,
uint16_t s_id)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_SCENES_CLUSTER_ID,
ZCL_VIEW_SCENE_COMMAND_ID);
zclBufferAddWord(g_id);
zclBufferAddWord(s_id);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[View Scene] g_id:%d,s_id:%d,status:0x%02x\r\n",g_id,s_id,status);
return status;
}
EmberStatus zclScenesRemoveScene(uint16_t node,
uint8_t ep,
uint16_t g_id,
uint16_t s_id)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_SCENES_CLUSTER_ID,
ZCL_REMOVE_SCENE_COMMAND_ID);
zclBufferAddWord(g_id);
zclBufferAddWord(s_id);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Remove Scene] g_id:%d,s_id:%d,status:0x%02x\r\n",g_id,s_id,status);
return status;
}
EmberStatus zclScenesRemoveAllScene(uint16_t node,
uint8_t ep,
uint16_t g_id)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_SCENES_CLUSTER_ID,
ZCL_REMOVE_ALL_SCENES_COMMAND_ID);
zclBufferAddWord(g_id);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Remove All Scene] g_id:%d,status:0x%02x\r\n",g_id,status);
return status;
}
EmberStatus zclScenesStoreScene(uint16_t node,
uint8_t ep,
uint16_t g_id,
uint16_t s_id)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_SCENES_CLUSTER_ID,
ZCL_STORE_SCENE_COMMAND_ID);
zclBufferAddWord(g_id);
zclBufferAddWord(s_id);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Store Scene] g_id:%d,s_id:%d,status:0x%02x\r\n",g_id,s_id,status);
return status;
}
EmberStatus zclScenesRecallScene(uint16_t node,
uint8_t ep,
uint16_t g_id,
uint16_t s_id,
uint16_t trsTime)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_SCENES_CLUSTER_ID,
ZCL_RECALL_SCENE_COMMAND_ID);
zclBufferAddWord(g_id);
zclBufferAddWord(s_id);
zclBufferAddWord(trsTime);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Recall Scene] g_id:%d,s_id:%d,trsTime:%d,status:0x%02x\r\n",g_id,s_id,trsTime,status);
return status;
}
EmberStatus zclScenesGetSceneMembership(uint16_t node,
uint8_t ep,
uint16_t g_id)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_SCENES_CLUSTER_ID,
ZCL_GET_SCENE_MEMBERSHIP_COMMAND_ID);
zclBufferAddWord(g_id);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[View Scene] g_id:%d,status:0x%02x\r\n",g_id,status);
return status;
}
EmberStatus zclScenesEnhancedAddScene(uint16_t node,
uint8_t ep,
uint16_t g_id,
uint16_t s_id,
uint16_t trs_time,
char *name,
uint8_t extLen,
uint8_t* extData) {
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_SCENES_CLUSTER_ID,
ZCL_ENHANCED_ADD_SCENE_COMMAND_ID);
zclBufferAddWord(g_id);
zclBufferAddWord(s_id);
zclBufferAddWord(trs_time);
if(name!=NULL){
len = strlen(name);
for(i=0;i<len;i++){
zclBufferAddByte(name[i]);
}
for(i=0;i<extLen;i++){
zclBufferAddByte(extData[i]);
}
}
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Enhanced Add Scene] g_id:%d,s_id:%d,status:0x%02x\r\n",g_id,s_id,status);
return status;
}
EmberStatus zclScenesEnhancedViewScene(uint16_t node,
uint8_t ep,
uint16_t g_id,
uint16_t s_id)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_SCENES_CLUSTER_ID,
ZCL_ENHANCED_VIEW_SCENE_COMMAND_ID);
zclBufferAddWord(g_id);
zclBufferAddWord(s_id);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Enhanced View Scene] g_id:%d,s_id:%d,status:0x%02x\r\n",g_id,s_id,status);
return status;
}
EmberStatus zclScenesCopyScene(uint16_t node,
uint8_t ep,
uint8_t mode,
uint16_t gidFrom,
uint16_t sidFrom,
uint16_t gidTo,
uint16_t sidTo)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_SCENES_CLUSTER_ID,
ZCL_COPY_SCENE_COMMAND_ID);
zclBufferAddByte(mode);
zclBufferAddWord(gidFrom);
zclBufferAddWord(sidFrom);
zclBufferAddWord(gidTo);
zclBufferAddWord(sidTo);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Copy Scene] mode:%d,gidFrom:%d,sidFrom:%d,gidTo:%d,sidTo:%d,status:0x%02x\r\n",mode,gidFrom,sidFrom,gidTo,sidTo,status);
return status;
}
EmberStatus zclLevel_MoveToLevel(uint16_t node,
uint8_t ep,
uint8_t level,
uint16_t trsTime,
uint8_t *mask,
uint8_t *override)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_LEVEL_CONTROL_CLUSTER_ID,
ZCL_MOVE_TO_LEVEL_COMMAND_ID);
zclBufferAddByte(level);
zclBufferAddWord(trsTime);
if(mask!=NULL){
zclBufferAddByte(mask);
if(override!=NULL){
zclBufferAddByte(override);
}
}
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Move To Level] status:0x%02x\r\n",status);
return status;
}
EmberStatus zclLevel_Move(uint16_t node,
uint8_t ep,
uint8_t mode,
uint8_t rate,
uint8_t *mask,
uint8_t *override)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_LEVEL_CONTROL_CLUSTER_ID,
ZCL_STEP_COMMAND_ID);
zclBufferAddByte(mode);
zclBufferAddByte(rate);
if(mask!=NULL){
zclBufferAddByte(mask);
if(override!=NULL){
zclBufferAddByte(override);
}
}
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Move] status:0x%02x\r\n",status);
return status;
}
EmberStatus zclLevel_Step(uint16_t node,
uint8_t ep,
uint8_t mode,
uint8_t size,
uint16_t trsTime,
uint8_t *mask,
uint8_t *override)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_LEVEL_CONTROL_CLUSTER_ID,
ZCL_STEP_COMMAND_ID);
zclBufferAddByte(mode);
zclBufferAddByte(size);
zclBufferAddWord(trsTime);
if(mask!=NULL){
zclBufferAddByte(mask);
if(override!=NULL){
zclBufferAddByte(override);
}
}
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Move] step:0x%02x\r\n",status);
return status;
}
EmberStatus zclLevel_Stop(uint16_t node,
uint8_t ep,
uint8_t *mask,
uint8_t *override)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_LEVEL_CONTROL_CLUSTER_ID,
ZCL_STOP_COMMAND_ID);
if(mask!=NULL){
zclBufferAddByte(mask);
if(override!=NULL){
zclBufferAddByte(override);
}
}
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Move] step:0x%02x\r\n",status);
return status;
}
EmberStatus zclLevel_MoveToLevelWithOnOff(uint16_t node,
uint8_t ep,
uint8_t level,
uint16_t trsTime,
uint8_t *mask,
uint8_t *override)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_LEVEL_CONTROL_CLUSTER_ID,
ZCL_MOVE_TO_LEVEL_WITH_ON_OFF_COMMAND_ID);
zclBufferAddByte(level);
zclBufferAddWord(trsTime);
if(mask!=NULL){
zclBufferAddByte(mask);
if(override!=NULL){
zclBufferAddByte(override);
}
}
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Move To Level] status:0x%02x\r\n",status);
return status;
}
EmberStatus zclLevel_MoveWithOnOff(uint16_t node,
uint8_t ep,
uint8_t mode,
uint8_t rate,
uint8_t *mask,
uint8_t *override)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_LEVEL_CONTROL_CLUSTER_ID,
ZCL_MOVE_WITH_ON_OFF_COMMAND_ID);
zclBufferAddByte(mode);
zclBufferAddByte(rate);
if(mask!=NULL){
zclBufferAddByte(mask);
if(override!=NULL){
zclBufferAddByte(override);
}
}
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Move] status:0x%02x\r\n",status);
return status;
}
EmberStatus zclLevel_StepWithOnOff(uint16_t node,
uint8_t ep,
uint8_t mode,
uint8_t size,
uint16_t trsTime,
uint8_t *mask,
uint8_t *override)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_LEVEL_CONTROL_CLUSTER_ID,
ZCL_STEP_WITH_ON_OFF_COMMAND_ID);
zclBufferAddByte(mode);
zclBufferAddByte(size);
zclBufferAddWord(trsTime);
if(mask!=NULL){
zclBufferAddByte(mask);
if(override!=NULL){
zclBufferAddByte(override);
}
}
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Move] step:0x%02x\r\n",status);
return status;
}
EmberStatus zclLevel_StopWithOnOff(uint16_t node,
uint8_t ep,
uint8_t *mask,
uint8_t *override)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_LEVEL_CONTROL_CLUSTER_ID,
ZCL_STOP_WITH_ON_OFF_COMMAND_ID);
if(mask!=NULL){
zclBufferAddByte(mask);
if(override!=NULL){
zclBufferAddByte(override);
}
}
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Move] step:0x%02x\r\n",status);
return status;
}
EmberStatus zclWD_StartWarning(uint16_t node,
uint8_t ep,
uint8_t mode,
uint16_t duration,
uint8_t cycle,
uint8_t level)
{
uint8_t i,len;
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_IAS_WD_CLUSTER_ID,
ZCL_START_WARNING_COMMAND_ID);
zclBufferAddByte(mode);
zclBufferAddWord(duration);
zclBufferAddByte(cycle);
zclBufferAddByte(level);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Start Warning] status:0x%02x\r\n",status);
return status;
}
EmberStatus zclWD_Squawk(uint16_t node,
uint8_t ep,
uint8_t mode)
{
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_IAS_WD_CLUSTER_ID,
ZCL_SQUAWK_COMMAND_ID);
zclBufferAddByte(mode);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Squawk] status:0x%02x\r\n",status);
return status;
}
EmberStatus zclThermostat_Setpoint_Raise_Lower(uint16_t node,
uint8_t ep,
uint8_t mode,
uint8_t amount)
{
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_THERMOSTAT_CLUSTER_ID,
ZCL_SETPOINT_RAISE_LOWER_COMMAND_ID);
zclBufferAddByte(mode);
zclBufferAddByte(amount);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Setpoint Raise/Lower] status:0x%02x\r\n",status);
return status;
}
/*
EmberStatus zclThermostat_Set_Weekly_Schedule(uint16_t node,
uint8_t ep,
uint8_t mode,
uint8_t amount)
{
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_THERMOSTAT_CLUSTER_ID,
ZCL_SET_WEEKLY_SCHEDULE_COMMAND_ID);
zclBufferAddByte(mode);
zclBufferAddByte(amount);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Setpoint Raise/Lower] status:0x%02x\r\n",status);
return status;
}*/
EmberStatus zclThermostat_GetWeeklySchedule(uint16_t node,
uint8_t ep,
uint8_t days,
uint8_t mode)
{
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_THERMOSTAT_CLUSTER_ID,
ZCL_GET_WEEKLY_SCHEDULE_COMMAND_ID);
zclBufferAddByte(days);
zclBufferAddByte(mode);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Get Weekly Schedule] status:0x%02x\r\n",status);
return status;
}
EmberStatus zclThermostat_ClearWeeklySchedule(uint16_t node,
uint8_t ep)
{
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_THERMOSTAT_CLUSTER_ID,
ZCL_CLEAR_WEEKLY_SCHEDULE_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Clear Weekly Schedule] status:0x%02x\r\n",status);
return status;
}
EmberStatus zclThermostat_GetRelayStatusLog(uint16_t node,
uint8_t ep)
{
EmberStatus status;
zcl_clu_client_cmd_buffer_setup( ZCL_THERMOSTAT_CLUSTER_ID,
ZCL_GET_RELAY_STATUS_LOG_COMMAND_ID);
status = rpcSendCommand(node,1,ep,false);
emberAfCorePrintln("[Get Relay Status Log] status:0x%02x\r\n",status);
return status;
}
#ifndef __KK_ZIGBEE_API_H #ifndef __KK_ZIGBEE_API_H
#define __KK_ZIGBEE_API_H #define __KK_ZIGBEE_API_H
#include "kk_test.h" #include "kk_test.h"
EmberStatus kk_network_leave(void); EmberStatus kk_network_leave(void);
EmberStatus kk_network_form(bool centralized,EmberPanId panId,int8_t radioTxPower,uint8_t channel); EmberStatus kk_network_form(bool centralized,EmberPanId panId,int8_t radioTxPower,uint8_t channel);
void kk_print_network_info(void); void kk_print_network_info(void);
EmberStatus kk_zdo_leave_request(EmberNodeId target,bool removeChildren,bool rejoin); EmberStatus kk_zdo_leave_request(EmberNodeId target,bool removeChildren,bool rejoin);
EmberStatus zclGRead(uint16_t node, EmberStatus zclGRead(uint16_t node,
uint8_t srcEP, uint8_t srcEP,
uint8_t dstEP, uint8_t dstEP,
bool multicast, bool multicast,
uint16_t clusterId, uint16_t clusterId,
uint16_t attrId, uint16_t attrId,
bool svr); bool svr);
EmberStatus zclGWrite(uint16_t node, EmberStatus zclGWrite(uint16_t node,
uint8_t srcEP, uint8_t srcEP,
uint8_t dstEP, uint8_t dstEP,
bool multicast, bool multicast,
uint16_t clusterId, uint16_t clusterId,
uint16_t attrId, uint16_t attrId,
uint8_t dataType, uint8_t dataType,
uint8_t dataLen, uint8_t dataLen,
uint8_t *data, uint8_t *data,
bool svr); bool svr);
EmberStatus zclOnOff_On(uint16_t node,uint8_t ep); EmberStatus zclOnOff_On(uint16_t node,uint8_t ep);
EmberStatus zclOnOff_Off(uint16_t node,uint8_t ep); EmberStatus zclOnOff_Off(uint16_t node,uint8_t ep);
EmberStatus zclOnOff_Toggle(uint16_t node,uint8_t ep); EmberStatus zclOnOff_Toggle(uint16_t node,uint8_t ep);
EmberStatus zclOnOff_OffWithEffect(uint16_t node,uint8_t ep,uint8_t id,uint8_t var); EmberStatus zclOnOff_OffWithEffect(uint16_t node,uint8_t ep,uint8_t id,uint8_t var);
EmberStatus zclOnOff_OnWithRecallGlobalScene(uint16_t node,uint8_t ep); EmberStatus zclOnOff_OnWithRecallGlobalScene(uint16_t node,uint8_t ep);
EmberStatus zclOnOff_OnWithTimedOff(uint16_t node,uint8_t ep,uint8_t Control,uint16_t OnTime,uint16_t OffWaitTime); EmberStatus zclOnOff_OnWithTimedOff(uint16_t node,uint8_t ep,uint8_t Control,uint16_t OnTime,uint16_t OffWaitTime);
EmberStatus WindowCover_UpOpen(uint16_t node,uint8_t ep); EmberStatus WindowCover_UpOpen(uint16_t node,uint8_t ep);
EmberStatus WindowCover_DownClose(uint16_t node,uint8_t ep); EmberStatus WindowCover_DownClose(uint16_t node,uint8_t ep);
EmberStatus WindowCover_Stop(uint16_t node,uint8_t ep); EmberStatus WindowCover_Stop(uint16_t node,uint8_t ep);
EmberStatus WindowCover_GotoLiftPercentage(uint16_t node,uint8_t ep,uint8_t position); EmberStatus WindowCover_GotoLiftPercentage(uint16_t node,uint8_t ep,uint8_t position);
EmberStatus zclColorControlMovetohue(uint16_t node, EmberStatus zclColorControlMovetohue(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t hue, uint8_t hue,
uint8_t dir, uint8_t dir,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlMovehue(uint16_t node, EmberStatus zclColorControlMovehue(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t mode, uint8_t mode,
uint8_t rate, uint8_t rate,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlStephue(uint16_t node, EmberStatus zclColorControlStephue(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t mode, uint8_t mode,
uint8_t size, uint8_t size,
uint8_t trsTime, uint8_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlMovetosat(uint16_t node, EmberStatus zclColorControlMovetosat(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t saturation, uint8_t saturation,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlMovesat(uint16_t node, EmberStatus zclColorControlMovesat(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t mode, uint8_t mode,
uint8_t rate, uint8_t rate,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlStepsat(uint16_t node, EmberStatus zclColorControlStepsat(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t mode, uint8_t mode,
uint8_t size, uint8_t size,
uint8_t trsTime, uint8_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlMovetohueandsat(uint16_t node, EmberStatus zclColorControlMovetohueandsat(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t hue, uint8_t hue,
uint8_t saturation, uint8_t saturation,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlMovetocolor(uint16_t node, EmberStatus zclColorControlMovetocolor(uint16_t node,
uint8_t ep, uint8_t ep,
uint16_t colorX, uint16_t colorX,
uint16_t colorY, uint16_t colorY,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlMovecolor(uint16_t node, EmberStatus zclColorControlMovecolor(uint16_t node,
uint8_t ep, uint8_t ep,
uint16_t rateX, uint16_t rateX,
uint16_t rateY, uint16_t rateY,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlStepcolor(uint16_t node, EmberStatus zclColorControlStepcolor(uint16_t node,
uint8_t ep, uint8_t ep,
uint16_t stepX, uint16_t stepX,
uint16_t stepY, uint16_t stepY,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlMovetocolortemp(uint16_t node, EmberStatus zclColorControlMovetocolortemp(uint16_t node,
uint8_t ep, uint8_t ep,
uint16_t colorTemp, uint16_t colorTemp,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlEmovetohue(uint16_t node, EmberStatus zclColorControlEmovetohue(uint16_t node,
uint8_t ep, uint8_t ep,
uint16_t hue, uint16_t hue,
uint8_t dir, uint8_t dir,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlEmovehue( uint16_t node, EmberStatus zclColorControlEmovehue( uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t mode, uint8_t mode,
uint16_t rate, uint16_t rate,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlEstephue(uint16_t node, EmberStatus zclColorControlEstephue(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t mode, uint8_t mode,
uint16_t size, uint16_t size,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlEmovetohueandsat(uint16_t node, EmberStatus zclColorControlEmovetohueandsat(uint16_t node,
uint8_t ep, uint8_t ep,
uint16_t hue, uint16_t hue,
uint8_t saturation, uint8_t saturation,
uint16_t trsTime, uint16_t trsTime,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlLoopSet(uint16_t node, EmberStatus zclColorControlLoopSet(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t flags, uint8_t flags,
uint8_t action, uint8_t action,
uint8_t dir, uint8_t dir,
uint16_t time, uint16_t time,
uint16_t sHue, uint16_t sHue,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlStopmovestep(uint16_t node, EmberStatus zclColorControlStopmovestep(uint16_t node,
uint8_t ep, uint8_t ep,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlMovecolortemp(uint16_t node, EmberStatus zclColorControlMovecolortemp(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t mode, uint8_t mode,
uint16_t rate, uint16_t rate,
uint16_t Tmin, uint16_t Tmin,
uint16_t Tmax, uint16_t Tmax,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclColorControlStepcolortemp(uint16_t node, EmberStatus zclColorControlStepcolortemp(uint16_t node,
uint8_t ep, uint8_t ep,
uint8_t mode, uint8_t mode,
uint16_t size, uint16_t size,
uint16_t trsTime, uint16_t trsTime,
uint16_t minimum, uint16_t minimum,
uint16_t maximum, uint16_t maximum,
bool options, bool options,
uint8_t mask, uint8_t mask,
uint8_t Override); uint8_t Override);
EmberStatus zclGroupsAddGroup(uint16_t node,
uint8_t ep,
uint16_t id,
char *name);
EmberStatus zclGroupsViewGroup(uint16_t node,
uint8_t ep,
#endif uint16_t id);
EmberStatus zclGroupsGetGroupMembership(uint16_t node,
uint8_t ep,
uint16_t count,
uint16_t *list);
EmberStatus zclGroupsRemoveGroup(uint16_t node,
uint8_t ep,
uint16_t id);
EmberStatus zclGroupsRemoveAllGroups(uint16_t node,
uint8_t ep);
EmberStatus zclGroupsAddGroupIfIdentifying(uint16_t node,
uint8_t ep,
uint16_t id,
char *name);
EmberStatus zclScenesAddScene(uint16_t node,
uint8_t ep,
uint16_t g_id,
uint16_t s_id,
uint16_t trs_time,
char *name,
uint8_t extLen,
uint8_t* extData);
EmberStatus zclScenesViewScene(uint16_t node,
uint8_t ep,
uint16_t g_id,
uint16_t s_id);
EmberStatus zclScenesRemoveScene(uint16_t node,
uint8_t ep,
uint16_t g_id,
uint16_t s_id);
EmberStatus zclScenesRemoveAllScene(uint16_t node,
uint8_t ep,
uint16_t g_id);
EmberStatus zclScenesStoreScene(uint16_t node,
uint8_t ep,
uint16_t g_id,
uint16_t s_id);
EmberStatus zclScenesRecallScene(uint16_t node,
uint8_t ep,
uint16_t g_id,
uint16_t s_id,
uint16_t trsTime);
EmberStatus zclScenesGetSceneMembership(uint16_t node,
uint8_t ep,
uint16_t g_id);
EmberStatus zclScenesEnhancedAddScene(uint16_t node,
uint8_t ep,
uint16_t g_id,
uint16_t s_id,
uint16_t trs_time,
char *name,
uint8_t extLen,
uint8_t* extData);
EmberStatus zclScenesEnhancedViewScene(uint16_t node,
uint8_t ep,
uint16_t g_id,
uint16_t s_id);
EmberStatus zclScenesCopyScene(uint16_t node,
uint8_t ep,
uint8_t mode,
uint16_t gidFrom,
uint16_t sidFrom,
uint16_t gidTo,
uint16_t sidTo);
EmberStatus zclLevel_MoveToLevel(uint16_t node,
uint8_t ep,
uint8_t level,
uint16_t trsTime,
uint8_t *mask,
uint8_t *override);
EmberStatus zclLevel_Move(uint16_t node,
uint8_t ep,
uint8_t mode,
uint8_t rate,
uint8_t *mask,
uint8_t *override);
EmberStatus zclLevel_Step(uint16_t node,
uint8_t ep,
uint8_t mode,
uint8_t size,
uint16_t trsTime,
uint8_t *mask,
uint8_t *override);
EmberStatus zclLevel_Stop(uint16_t node,
uint8_t ep,
uint8_t *mask,
uint8_t *override);
EmberStatus zclLevel_MoveToLevelWithOnOff(uint16_t node,
uint8_t ep,
uint8_t level,
uint16_t trsTime,
uint8_t *mask,
uint8_t *override);
EmberStatus zclLevel_MoveWithOnOff(uint16_t node,
uint8_t ep,
uint8_t mode,
uint8_t rate,
uint8_t *mask,
uint8_t *override);
EmberStatus zclLevel_StepWithOnOff(uint16_t node,
uint8_t ep,
uint8_t mode,
uint8_t size,
uint16_t trsTime,
uint8_t *mask,
uint8_t *override);
EmberStatus zclLevel_StopWithOnOff(uint16_t node,
uint8_t ep,
uint8_t *mask,
uint8_t *override);
EmberStatus zclWD_StartWarning(uint16_t node,
uint8_t ep,
uint8_t mode,
uint16_t duration,
uint8_t cycle,
uint8_t level);
EmberStatus zclWD_Squawk(uint16_t node,
uint8_t ep,
uint8_t mode);
EmberStatus zclThermostat_Setpoint_Raise_Lower(uint16_t node,
uint8_t ep,
uint8_t mode,
uint8_t amount);
EmberStatus zclThermostat_GetWeeklySchedule(uint16_t node,
uint8_t ep,
uint8_t days,
uint8_t mode);
EmberStatus zclThermostat_ClearWeeklySchedule(uint16_t node,
uint8_t ep);
EmberStatus zclThermostat_GetRelayStatusLog(uint16_t node,
uint8_t ep);
#endif
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