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

以配置的方式加载表

parent 9a29244b
{
"mapTable": [
{
"modleId": "00068611",
"productCode": "3001",
"productName": "星辰系列.白色零火线单路灯控面板Z3S(KONKE)"
},{
"modleId": "00068612",
"productCode": "3002",
"productName": "星辰系列.白色零火线双路灯控面板Z3S(KONKE)"
},{
"modleId": "00068613",
"productCode": "3003",
"productName": "星辰系列.白色零火线三路灯控面板Z3S(KONKE)"
},{
"modleId": "01020001",
"productCode": "3073",
"productName": "幻彩灯带控制器Z3S(KONKE)"
}
]
}
...@@ -4,33 +4,21 @@ ...@@ -4,33 +4,21 @@
#include "kk_sub_tsl.h" #include "kk_sub_tsl.h"
#include "kk_tsl_zigbee_map.h" #include "kk_tsl_zigbee_map.h"
#include "kk_product_code.h" #include "kk_product_code.h"
#include "kk_zb_com.h"
/****************** ****************************************************************** /****************** ******************************************************************
* File Name : kk_device_manager.h * File Name : kk_device_manager.h
* Author : yjq * Author : yjq
* data : 2020/09/01 * data : 2020/09/01
*************************************************************************************/ *************************************************************************************/
typedef struct kk_device_table_s{
EmberEUI64 mac;
EmberNodeId nodeId;
uint16_t deviceId;
uint16_t identifyCnt;
char productCode[33];
struct kk_device_table_s *next;
}kk_device_table_s;
#define KK_MAX_SUPPORT_ENDPOINT_NUMBER 32 #define KK_MAX_SUPPORT_ENDPOINT_NUMBER 32
#define KK_MAX_READ_MODLE_ID_COUNT 30 #define KK_MAX_READ_MODLE_ID_COUNT 30
#define KK_NETWORK_PARAMETER_TX_POWER 10 #define KK_NETWORK_PARAMETER_TX_POWER 10
#define KK_NETWORK_PARAMETER_CHANNEL 0x0B #define KK_NETWORK_PARAMETER_CHANNEL 0x0B
void kk_print_device_table(void);
kk_device_table_s * kk_device_find_by_mac(EmberEUI64 mac);
void kk_device_table_add(EmberEUI64 mac,EmberNodeId nodeId,const char *productCode,uint16_t deviceId);
void kk_device_table_delete(EmberEUI64 mac);
void kk_add_device_to_table(EmberEUI64 mac,EmberNodeId nodeId,uint16_t deviceId);
void kk_productCode_tick(); void kk_productCode_tick();
void kk_read_attr_response(EmberNodeId nodeId, void kk_read_attr_response(EmberNodeId nodeId,
...@@ -47,8 +35,12 @@ int kk_permit_join(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* da ...@@ -47,8 +35,12 @@ int kk_permit_join(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* da
void kk_load_dev_map_table(void);
void kk_add_dev_map_table_to_list(cJSON * root);
char *kk_match_productCode(const char* modelId);
bool kk_device_config_map_add(const char *productCode);
......
#include "kk_tsl_property_report.h" #include "kk_tsl_property_report.h"
#include "kk_tsl_zigbee_map.h"
const char *kk_tsl_rpt_status_string[] = { const char *kk_tsl_rpt_status_string[] = {
"Success", "Success",
...@@ -8,6 +8,7 @@ const char *kk_tsl_rpt_status_string[] = { ...@@ -8,6 +8,7 @@ const char *kk_tsl_rpt_status_string[] = {
"Invaild Len", "Invaild Len",
"Invaild Type" "Invaild Type"
}; };
//todo: fix it
static int kk_tsl_report(EmberEUI64 mac,uint8_t EP,int status,uint16_t clusterId,uint16_t attributeId) static int kk_tsl_report(EmberEUI64 mac,uint8_t EP,int status,uint16_t clusterId,uint16_t attributeId)
{ {
cJSON* root; cJSON* root;
...@@ -38,7 +39,7 @@ static int kk_tsl_report(EmberEUI64 mac,uint8_t EP,int status,uint16_t clusterId ...@@ -38,7 +39,7 @@ 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_msg_report_property(root,mac);
return tsl_rpt_success; return tsl_rpt_success;
} }
...@@ -151,14 +152,160 @@ int kk_tsl_report_windowCovering_position(EmberEUI64 eui64,uint8_t EP,EmberAfClu ...@@ -151,14 +152,160 @@ int kk_tsl_report_windowCovering_position(EmberEUI64 eui64,uint8_t EP,EmberAfClu
} }
int kk_tsl_report_metering_summationDelivered(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data)
{
uint64_t summation;
emberAfAppPrintln("[tsl report:meter(Smart Energy)] Summation Delivered~~~~~~~~~");
if(dataType == ZCL_INT48U_ATTRIBUTE_TYPE){
if(len==6){
summation = KK_GET_U48(data);
kk_tsl_report(eui64,EP,summation,clusterId,attributeId);
return tsl_rpt_success;
}
return tsl_rpt_invaild_len;
}
return tsl_rpt_invaild_type;
}
int kk_tsl_report_ias_zoneStatus(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data)
{
uint64_t Status;
emberAfAppPrintln("[tsl report:IAS] Zone Status~~~~~~~~~");
if(dataType == ZCL_BITMAP16_ATTRIBUTE_TYPE){
if(len==2){
Status = KK_GET_U16(data);
kk_tsl_report(eui64,EP,Status,clusterId,attributeId);
return tsl_rpt_success;
}
return tsl_rpt_invaild_len;
}
return tsl_rpt_invaild_type;
}
int kk_tsl_report_global_Level(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data)
{
uint8_t level;
emberAfAppPrintln("[tsl report:Gloabl] Level~~~~~~~~~");
if(dataType == ZCL_INT8U_ATTRIBUTE_TYPE){
if(len==1){
level = data[0];
kk_tsl_report(eui64,EP,level,clusterId,attributeId);
return tsl_rpt_success;
}
return tsl_rpt_invaild_len;
}
return tsl_rpt_invaild_type;
}
int kk_tsl_report_temperature_measure(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data)
{
int16_t Value;
emberAfAppPrintln("[tsl report:temperature measurement] Measure Value~~~~~~~~~");
if(dataType == ZCL_INT16S_ATTRIBUTE_TYPE){
if(len==1){
Value = KK_GET_U16(data);
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_illuminance_measure(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data)
{
uint16_t Value;
emberAfAppPrintln("[tsl report:illuminance measurement] Measure Value~~~~~~~~~");
if(dataType == ZCL_INT16U_ATTRIBUTE_TYPE){
if(len==1){
Value = KK_GET_U16(data);
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_local_temperature(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data)
{
int16_t Value;
emberAfAppPrintln("[tsl report:local temperature] Value~~~~~~~~~");
if(dataType == ZCL_INT16S_ATTRIBUTE_TYPE){
if(len==1){
Value = KK_GET_U16(data);
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_OccupiedHeatingSetpoint(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data)
{
int16_t Value;
emberAfAppPrintln("[tsl report:Occupied Heating Setpoint] Value~~~~~~~~~");
if(dataType == ZCL_INT16S_ATTRIBUTE_TYPE){
if(len==1){
Value = KK_GET_U16(data);
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_Concentration(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data)
{
int32_t Value;
emberAfAppPrintln("[tsl report:Formaldehyde] Value~~~~~~~~~");
if(dataType == ZCL_FLOAT_SINGLE_ATTRIBUTE_TYPE){
if(len==1){
Value = KK_GET_U32(data);
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_Formaldehyde(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data)
{
emberAfAppPrintln("[tsl report:Formaldehyde] Value~~~~~~~~~");
return kk_tsl_report_Concentration(eui64,EP,clusterId,attributeId,dataType,len,data);
}
int kk_tsl_report_PM2_5(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data)
{
emberAfAppPrintln("[tsl report:PM2.5] Value~~~~~~~~~");
return kk_tsl_report_Concentration(eui64,EP,clusterId,attributeId,dataType,len,data);
}
int kk_tsl_report_CO2(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data)
{
emberAfAppPrintln("[tsl report:CO2] Value~~~~~~~~~");
return kk_tsl_report_Concentration(eui64,EP,clusterId,attributeId,dataType,len,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_zb_com.h"
#include "kk_msg_report.h"
typedef enum{ typedef enum{
...@@ -26,11 +27,19 @@ int kk_tsl_report_windowCovering_position(EmberEUI64 eui64,uint8_t EP,EmberAfClu ...@@ -26,11 +27,19 @@ int kk_tsl_report_windowCovering_position(EmberEUI64 eui64,uint8_t EP,EmberAfClu
int kk_tsl_report_ias_zoneStatus(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data);
int kk_tsl_report_metering_summationDelivered(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data);
int kk_tsl_report_global_Level(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data);
int kk_tsl_report_temperature_measure(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data);
int kk_tsl_report_illuminance_measure(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data);
int kk_tsl_report_local_temperature(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data);
int kk_tsl_report_OccupiedHeatingSetpoint(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data);
int kk_tsl_report_Formaldehyde(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data);
int kk_tsl_report_PM2_5(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data);
int kk_tsl_report_CO2(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data);
......
...@@ -12,6 +12,8 @@ int kk_tsl_set_windowCovering_mode(jrpc_context * ctx,EmberNodeId node,unsigned ...@@ -12,6 +12,8 @@ int kk_tsl_set_windowCovering_mode(jrpc_context * ctx,EmberNodeId node,unsigned
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);
#define RPC_KK_TEST_FUNCTION_TABLE \
{(rpc_function*)kk_tsl_property_operation,"/thing/service/property/set"}\
......
...@@ -2,6 +2,41 @@ ...@@ -2,6 +2,41 @@
#define __KK_ZIGBEE_API_H #define __KK_ZIGBEE_API_H
#include "kk_test.h" #include "kk_test.h"
typedef int (*kk_rpc_set)(jrpc_context * ctx,EmberNodeId node,unsigned char ep,void* data);
typedef int(*kk_rpc_report)(EmberEUI64 eui64,uint8_t EP,EmberAfClusterId clusterId,EmberAfAttributeId attributeId,uint8_t dataType,uint8_t len,uint8_t *data);
typedef struct{
const char * name;
kk_rpc_set set;
}kk_rpc_set_api_s;
typedef struct{
const char * name;
kk_rpc_report report;
}kk_rpc_report_api_s;
void kk_rpc_test(void);
#define KK_RPC_SET_FUNCTION_TABLE {\
{"zclOnOff_On",zclOnOff_On},\
{"zclOnOff_Off",zclOnOff_Off}\
}
#define KK_RPC_REPORT_FUNCTION_TABLE {\
{"kk_tsl_report_global_onoff",kk_tsl_report_global_onoff},\
{"kk_tsl_report_global_onoff",kk_tsl_report_global_onoff}\
}
kk_rpc_set_api_s kk_rpc_set_api[];
kk_rpc_report_api_s kk_rpc_report_api[];
uint8_t kk_get_rpc_set_api_size(void );
uint8_t kk_get_rpc_report_api_size(void );
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);
...@@ -199,11 +234,183 @@ EmberStatus zclColorControlStepcolortemp(uint16_t node, ...@@ -199,11 +234,183 @@ EmberStatus zclColorControlStepcolortemp(uint16_t node,
EmberStatus zclGroupsAddGroup(uint16_t node,
uint8_t ep,
uint16_t id,
char *name);
EmberStatus zclGroupsViewGroup(uint16_t node,
uint8_t ep,
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 #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