Commit ef9e834f authored by 陈伟灿's avatar 陈伟灿

Merge branch 'yjq' into 'master'

Yjq

See merge request chenweican/k-sdk!109
parents 52797464 a8d1c966
This diff is collapsed.
#include <stdint.h>
#ifndef __SERIAL_H__
#define __SERIAL_H__
#include <syslog.h>
#if defined __cplusplus
extern "C" {
#endif
/****************************************************************************/
/*** Include files ***/
/****************************************************************************/
/****************************************************************************/
/*** Macro Definitions ***/
/****************************************************************************/
#define _SERIAL_LOG(level, fmt, args...) \
do \
{ \
syslog(level, fmt, ##args); \
printf("\n["__FILE__":%d] "fmt,__LINE__, ##args); \
} while(0)
#define SERIAL_LOG_DBG(fmt, args...) _SERIAL_LOG(LOG_DEBUG, fmt, ##args)
#define SERIAL_LOG_ERR(fmt, args...) _SERIAL_LOG(LOG_ERR, fmt, ##args)
#define SERIAL_NAME "/dev/ttyUSB0"//"/dev/ttyS0"
#define SERIAL_BAUD 115200
/****************************************************************************/
/*** Type Definitions ***/
/****************************************************************************/
typedef enum
{
E_ERROR = -1,
E_SERIAL_OK = 0,
E_SERIAL_ERROR,
E_SERIAL_NODATA,
E_SERIAL_FD_ERROR,
} teSerial_Status;
/****************************************************************************/
/*** Local Function Prototypes ***/
/****************************************************************************/
/****************************************************************************/
/*** Exported Variables ***/
/****************************************************************************/
extern int serial_fd;
/****************************************************************************/
/*** Local Variables ***/
/****************************************************************************/
/****************************************************************************/
/*** Exported Functions ***/
/****************************************************************************/
void eSerial_start();
void eSerial_stop();
teSerial_Status eSerial_Init(char *name, uint32_t baud, int *piserial_fd);
teSerial_Status eSerial_Read(unsigned char *data);
teSerial_Status eSerial_Write(const unsigned char data);
teSerial_Status eSerial_ReadBuffer(unsigned char *data, int *count);
teSerial_Status eSerial_WriteBuffer(unsigned char *data, uint32_t count);
/****************************************************************************/
/*** Local Functions ***/
/****************************************************************************/
/****************************************************************************/
/*** END OF FILE ***/
/****************************************************************************/
#if defined __cplusplus
}
#endif
#endif /* __SERIAL_H__ */
...@@ -18,6 +18,9 @@ ...@@ -18,6 +18,9 @@
#include "kk_lan_ctrl.h" #include "kk_lan_ctrl.h"
#include "kk_lan_sync.h" #include "kk_lan_sync.h"
#include "kk_voice_panel_handle.h"
const char DM_MSG_TO_MIDDWARE[] = "{\"msgtype\":\"%s\",\"productCode\":\"%s\",\"deviceCode\":\"%s\"}"; const char DM_MSG_TO_MIDDWARE[] = "{\"msgtype\":\"%s\",\"productCode\":\"%s\",\"deviceCode\":\"%s\"}";
char *strrpl(char *in, char *out, int outlen, char *src, char *dst) char *strrpl(char *in, char *out, int outlen, char *src, char *dst)
{ {
...@@ -450,6 +453,7 @@ int is_arming_status_notify(cJSON *payload) ...@@ -450,6 +453,7 @@ int is_arming_status_notify(cJSON *payload)
return -1; return -1;
} }
extern int vp_syncinfo(cJSON *payload);
void KK_Data_FromMid(void* str,int len) void KK_Data_FromMid(void* str,int len)
{ {
...@@ -486,6 +490,7 @@ void KK_Data_FromMid(void* str,int len) ...@@ -486,6 +490,7 @@ void KK_Data_FromMid(void* str,int len)
if (strstr(msgtype->valuestring,SYNC_MSG_TYPE_REPLY) != NULL){ if (strstr(msgtype->valuestring,SYNC_MSG_TYPE_REPLY) != NULL){
kk_parse_syncinfo(payload); kk_parse_syncinfo(payload);
kk_create_syncinfo_to_sdk(payload); kk_create_syncinfo_to_sdk(payload);
kk_vp_syncinfo_handle(payload);
} }
else if(strstr(msgtype->valuestring,"/thing/event/property/post")!= NULL){ else if(strstr(msgtype->valuestring,"/thing/event/property/post")!= NULL){
...@@ -496,7 +501,7 @@ void KK_Data_FromMid(void* str,int len) ...@@ -496,7 +501,7 @@ void KK_Data_FromMid(void* str,int len)
arming_status_notify(type); arming_status_notify(type);
} }
}else{ }else{
//property_post_deal(deviceCode->valuestring,payload); property_post_deal(deviceCode->valuestring,payload);
} }
}else if(strstr(msgtype->valuestring,"/thing/topo/delete")!= NULL){ }else if(strstr(msgtype->valuestring,"/thing/topo/delete")!= NULL){
device_delete_sync(payload); device_delete_sync(payload);
......
...@@ -193,7 +193,7 @@ static char *kk_open_lan_cfg_file(char *deviceCode) ...@@ -193,7 +193,7 @@ static char *kk_open_lan_cfg_file(char *deviceCode)
return buf; return buf;
} }
//todo: //todo:
int kk_creater_nodeid(char *deviceCode,int channel,char *nodeId) int kk_creater_nodeid(char *deviceCode,int channel,char *nodeId,int operate_type)
{ {
static int next = 1; static int next = 1;
int node=-1; int node=-1;
...@@ -212,7 +212,7 @@ int kk_creater_nodeid(char *deviceCode,int channel,char *nodeId) ...@@ -212,7 +212,7 @@ int kk_creater_nodeid(char *deviceCode,int channel,char *nodeId)
while(kk_check_lan_node(next)){ while(kk_check_lan_node(next)){
++next; ++next;
} }
if(0==kk_lan_db_node_insert(deviceCode,channel,next)){ if(0==kk_lan_db_node_insert(deviceCode,channel,next,operate_type)){
node=next; node=next;
} }
} }
......
...@@ -34,6 +34,7 @@ int kk_create_devices_to_sdk(cJSON *root); ...@@ -34,6 +34,7 @@ int kk_create_devices_to_sdk(cJSON *root);
int _deviceCode_switchto_mac(char * deviceCode,char *mac); int _deviceCode_switchto_mac(char * deviceCode,char *mac);
int mac_switchto_deviceCode(char *mac,char * deviceCode); int mac_switchto_deviceCode(char *mac,char * deviceCode);
int kk_map_dev_search_by_deviceCode(char *deviceCode, kk_map_dev_node_t **node);
kk_map_dev_ctx *_kk_map_dev_ctx(void); kk_map_dev_ctx *_kk_map_dev_ctx(void);
int kk_map_dev_init(void); int kk_map_dev_init(void);
#endif #endif
\ No newline at end of file
...@@ -151,10 +151,14 @@ int kk_ccu_opcode_handle(cJSON *root) ...@@ -151,10 +151,14 @@ int kk_ccu_opcode_handle(cJSON *root)
kk_lan_db_deviceCode_get(atoi(nodeId->valuestring),deviceCode); kk_lan_db_deviceCode_get(atoi(nodeId->valuestring),deviceCode);
//execute scene
if((requester!=NULL) &&(strcmp(requester->valuestring,HJ_PROFILE)==0) && if((requester!=NULL) &&(strcmp(requester->valuestring,HJ_PROFILE)==0) &&
(strcmp(opcode->valuestring,"SWITCH")==0)){ (strcmp(opcode->valuestring,"SWITCH")==0)){
msg=scene_execute(nodeId->valuestring); msg=scene_execute(nodeId->valuestring);
kk_ipc_send_json(msg); kk_ipc_send_json(msg);
return 0; return 0;
......
...@@ -19,6 +19,10 @@ ...@@ -19,6 +19,10 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <pthread.h> #include <pthread.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "com_api.h" #include "com_api.h"
#include "kk_product.h" #include "kk_product.h"
#include "kk_findccu_handle.h" #include "kk_findccu_handle.h"
...@@ -27,32 +31,35 @@ ...@@ -27,32 +31,35 @@
//#include "kk_lan_queue.h" //#include "kk_lan_queue.h"
#include "kk_lan_node_db.h" #include "kk_lan_node_db.h"
#include "kk_lan_voice_panel.h"
#include "kk_data_mng.h"
static char s_ccuid[DEVICE_CODE_LEN] = {0}; static char s_ccuid[DEVICE_CODE_LEN] = {0};
int kk_lan_get_ccuid(_OU_ char *device_code) int kk_lan_get_ccuid(_OU_ char *device_code)
{ {
strncpy(device_code, s_ccuid, strlen(s_ccuid)); strncpy(device_code, s_ccuid, strlen(s_ccuid));
printf("kk_lan_get_ccuid:%s\n",s_ccuid); printf("kk_lan_get_ccuid:%s\n",s_ccuid);
return strlen(s_ccuid); return strlen(s_ccuid);
} }
static int _setDevice_Code(_IN_ char *device_code,int len) static int _setDevice_Code(_IN_ char *device_code,int len)
{ {
memset(s_ccuid, 0x0, DEVICE_CODE_LEN); memset(s_ccuid, 0x0, DEVICE_CODE_LEN);
printf("_setDevice_Code:%s\n",device_code); printf("_setDevice_Code:%s\n",device_code);
strncpy(s_ccuid, device_code, len); strncpy(s_ccuid, device_code, len);
return len; return len;
} }
extern int HAL_Execel_cmd(char * cmd,char * buf,int buf_len,int* ret_len);
static void kk_lan_ccuid_init(void) static void kk_lan_ccuid_init(void)
{ {
uint8_t ccuid[DEVICE_CODE_LEN] = {0}; uint8_t ccuid[DEVICE_CODE_LEN] = {0};
int ccuid_len = 0; int ccuid_len = 0;
HAL_Execel_cmd(GET_CCUID_CMD,(char *)ccuid,sizeof(ccuid),&ccuid_len); HAL_Execel_cmd(GET_CCUID_CMD,(char *)ccuid,sizeof(ccuid),&ccuid_len);
printf("GET_CCUID_CMD:%s\n",ccuid); printf("GET_CCUID_CMD:%s\n",ccuid);
if(ccuid_len > 0 && ccuid_len <= DEVICE_CODE_LEN){ if(ccuid_len > 0 && ccuid_len <= DEVICE_CODE_LEN){
_setDevice_Code(ccuid,ccuid_len-1); _setDevice_Code((char *)ccuid,ccuid_len-1);
}else{ }else{
_setDevice_Code(KK_CCU_ID,strlen(KK_CCU_ID)); _setDevice_Code(KK_CCU_ID,strlen(KK_CCU_ID));
} }
} }
...@@ -71,6 +78,7 @@ int main(int argc, char* argv[]) ...@@ -71,6 +78,7 @@ int main(int argc, char* argv[])
kk_findccu_handle_init(); kk_findccu_handle_init();
kk_map_dev_init(); kk_map_dev_init();
kk_login_init(); kk_login_init();
kk_voice_panel_init();
//lan_queue_init(); //lan_queue_init();
kk_lan_db_node_init(); kk_lan_db_node_init();
......
...@@ -46,7 +46,8 @@ static int _kk_lan_node_db_Init(void) ...@@ -46,7 +46,8 @@ static int _kk_lan_node_db_Init(void)
idx INTEGER PRIMARY KEY, \ idx INTEGER PRIMARY KEY, \
deviceCode varchar(33), \ deviceCode varchar(33), \
channel INTEGER, \ channel INTEGER, \
nodeId INTEGER)"; nodeId INTEGER, \
operate_type INTEGER)";
char *pcErr; char *pcErr;
...@@ -233,10 +234,10 @@ static int kk_lan_db_node_update(const char *deviceCode,int channel,int node) ...@@ -233,10 +234,10 @@ static int kk_lan_db_node_update(const char *deviceCode,int channel,int node)
*返 回 值: 0:成功;其他:失败 *返 回 值: 0:成功;其他:失败
*其他说明:属性的值插入的时候先置空,后续再update *其他说明:属性的值插入的时候先置空,后续再update
*************************************************************/ *************************************************************/
int kk_lan_db_node_insert(const char *deviceCode,int channel,int node) int kk_lan_db_node_insert(const char *deviceCode,int channel,int node,int operate_type)
{ {
const char *insertCmd = "insert into Map2Node (deviceCode,channel,nodeId) \ const char *insertCmd = "insert into Map2Node (deviceCode,channel,nodeId,operate_type) \
values ('%s','%d','%d');"; values ('%s','%d','%d','%d');";
char *sqlCmd = NULL; char *sqlCmd = NULL;
int rc = 0; int rc = 0;
char *zErrMsg = 0; char *zErrMsg = 0;
...@@ -250,7 +251,7 @@ int kk_lan_db_node_insert(const char *deviceCode,int channel,int node) ...@@ -250,7 +251,7 @@ int kk_lan_db_node_insert(const char *deviceCode,int channel,int node)
} }
_kk_lan_node_db_lock(); _kk_lan_node_db_lock();
sqlCmd = sqlite3_mprintf(insertCmd,deviceCode,channel,node); sqlCmd = sqlite3_mprintf(insertCmd,deviceCode,channel,node,operate_type);
rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg); rc = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( rc != SQLITE_OK ){ if( rc != SQLITE_OK ){
......
...@@ -18,7 +18,7 @@ enum{ ...@@ -18,7 +18,7 @@ enum{
}; };
int kk_lan_db_node_init(void); int kk_lan_db_node_init(void);
int kk_lan_db_node_insert(const char *deviceCode,int channel,int node); int kk_lan_db_node_insert(const char *deviceCode,int channel,int node,int operate_type);
int kk_lan_db_node_get(const char *deviceCode,int channel); int kk_lan_db_node_get(const char *deviceCode,int channel);
int kk_lan_db_node_get_all(const char *deviceCode,int *nodes); int kk_lan_db_node_get_all(const char *deviceCode,int *nodes);
......
...@@ -226,10 +226,9 @@ static int kk_sync_scene_condition(cJSON *condition,SYN_SCENE_ITEM **build) ...@@ -226,10 +226,9 @@ static int kk_sync_scene_condition(cJSON *condition,SYN_SCENE_ITEM **build)
int get_flag = 0; int get_flag = 0;
SYN_SCENE_ITEM *ptr=*build; SYN_SCENE_ITEM *ptr=*build;
printf("kk_sync_scene_condition,num=%d\n",num);
for(i=0;i<num;i++){ for(i=0;i<num;i++){
cJSON *item; cJSON *item;
printf("i=%d\n",i);
item = cJSON_GetArrayItem(condition,i); item = cJSON_GetArrayItem(condition,i);
startTime = cJSON_GetObjectItem(item,"startTime"); startTime = cJSON_GetObjectItem(item,"startTime");
...@@ -293,20 +292,18 @@ cJSON *kk_sync_scence_to_sdk(cJSON *root,cJSON *data) ...@@ -293,20 +292,18 @@ cJSON *kk_sync_scence_to_sdk(cJSON *root,cJSON *data)
if(strcmp(sceneType->valuestring,"")==){ if(strcmp(sceneType->valuestring,"")==){
}*/ }*/
//printf("--------------------------->[%s][%d]\n",__FUNCTION__,__LINE__);
pScene->act_num = kk_sync_actions(actions,&pScene->act,&pScene->room_id); pScene->act_num = kk_sync_actions(actions,&pScene->act,&pScene->room_id);
//printf("--------------------------->[%s][%d]\n",__FUNCTION__,__LINE__);
kk_sync_scene_condition(condition,&pScene); kk_sync_scene_condition(condition,&pScene);
//printf("--------------------------->[%s][%d]\n",__FUNCTION__,__LINE__);
pScene->scene_id = sceneId->valuestring; pScene->scene_id = sceneId->valuestring;
pScene->name = name->valuestring; pScene->name = name->valuestring;
pScene->pannel_id = NULL; pScene->pannel_id = NULL;
sceneItem = kk_scene_build(&pScene); sceneItem = kk_scene_build(&pScene);
//printf("--------------------------->[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddItemToArray(scenesAry,sceneItem); cJSON_AddItemToArray(scenesAry,sceneItem);
// printf("[%s][%d]%s\n",__FUNCTION__,__LINE__,cJSON_Print(sceneItem));
} }
...@@ -332,10 +329,8 @@ int _kk_sync_device_item(cJSON *deviceCode,cJSON *epNum,cJSON *name,cJSON *roomI ...@@ -332,10 +329,8 @@ int _kk_sync_device_item(cJSON *deviceCode,cJSON *epNum,cJSON *name,cJSON *roomI
list_for_each_entry(node, &ctx->dev_list, linked_list, kk_map_dev_node_t) { list_for_each_entry(node, &ctx->dev_list, linked_list, kk_map_dev_node_t) {
if (node != NULL) { if (node != NULL) {
printf("node->deviceCode=%s,%s\n",node->deviceCode,deviceCode->valuestring);
if(strlen(node->deviceCode)==strlen(deviceCode->valuestring) && if(strlen(node->deviceCode)==strlen(deviceCode->valuestring) &&
!strcmp(node->deviceCode,deviceCode->valuestring)){ !strcmp(node->deviceCode,deviceCode->valuestring)){
cJSON *subdevicesItem = cJSON_CreateObject(); cJSON *subdevicesItem = cJSON_CreateObject();
if(epNum==NULL ||epNum->type!=cJSON_String){ if(epNum==NULL ||epNum->type!=cJSON_String){
......
#include <stdio.h>
#include <syslog.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include "kk_log.h"
#include "kk_lan_voice_panel.h"
#include "kk_voice_panel_cfg.h"
#include "kk_voice_panel_handle.h"
#include "Serial.h"
#include "uart_proto.h"
static pthread_mutex_t v_mux;
extern int serial_fd;
static void *kk_vp_uart_thread(void *arg)
{
fd_set rd;
int nFlag;
struct timeval tval = {2,0};
int count = 0;
unsigned char data_buf[512];
teSerial_Status ret = E_SERIAL_ERROR;
INFO_PRINT("[%s] start...\n",__FUNCTION__);
eSerial_start();
while (1)
{
FD_ZERO(&rd);
FD_SET(serial_fd,&rd);
nFlag = select(serial_fd + 1, &rd, NULL, NULL, &tval);
if(0 > nFlag)
{
ERROR_PRINT("uartRecv():select error !\n");
ERROR_PRINT("uartRecv errno = %d", errno);
usleep( 100000 );
}
else if(0 == nFlag)
{
usleep( 100000 );
}
else
{
if(FD_ISSET(serial_fd, &rd))
{
ret = eSerial_Read(&data_buf[count]);
if(ret == E_SERIAL_OK)
{
if(get_uart_frame((uint8_t *)data_buf,1))
{
uart_frame_handle();
}
}
else if(ret == E_SERIAL_FD_ERROR)
{
eSerial_start();
}
}
}
}
ERROR_PRINT("[%s]thread end...\n",__FUNCTION__);
}
typedef struct {
int next_ver;
int f_ver;
int f_size;
int crc32;
}vpCFGInfo;
typedef struct{
int state;
vpCFGInfo cfg_info;
int updateFlag;
}VP_MANAGE;
VP_MANAGE vp_mag;
char *vp_file_load(const char *path)
{
char *buff = NULL;
char *pRead = NULL;
int t_len = 0;
int remain = 0;
int r_len = 0;
FILE *fp = NULL;
int size = 0;
INFO_PRINT("[%s]vp load file(%s)\n",__FUNCTION__,path);
fp = fopen (path,"r");
if(fp==NULL){
printf("open err.\n");
return NULL;
}
fseek (fp, 0, SEEK_END);
size=ftell(fp);
printf("size=%d\n",size);
fseek (fp, 0, SEEK_SET);
buff = malloc(size+1);
memset(buff,0,size+1);
pRead = buff;
remain = size;
while(remain>0){
r_len = fread(pRead, 1, size, fp);
if(remain>=r_len){
remain -= r_len;
pRead+=r_len;
}else{
remain = 0;
pRead[size] = '\0';
}
}
fclose(fp);
return buff;
}
static int _vp_config_file_version_load(void)
{
cJSON *json = NULL;
cJSON *version = NULL;
char *pFile = vp_file_load(VP_CONFIG_FILE);
if(pFile==NULL){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return 0;
}
if((json = cJSON_Parse(pFile))==NULL){
free(pFile);
return 0;
}
version = cJSON_GetObjectItem(json,"version");
if(version!=NULL &&version->type==cJSON_Number){
vp_mag.cfg_info.f_ver = version->valueint;
vp_mag.cfg_info.next_ver = version->valueint;
printf("[vp load config version]%d\n",vp_mag.cfg_info.f_ver);
}
cJSON_Delete(json);
free(pFile);
}
void kk_vp_set_updateFlag(int flag)
{
vp_mag.updateFlag = (flag!=0)?1:0;
}
void kk_vp_config_file_update(void)
{
if(vp_mag.updateFlag==0){
return ;
}
if(vp_mag.state == UPDATING_8009_CONFIG_FILE_INFO||
vp_mag.state == START_8009_CONFIG_FILE_UPDATE){
kk_vp_set_state_machine(STOP_8009_CONFIG_FILE_UPDATE);
}else{
kk_vp_set_state_machine(START_8009_CONFIG_FILE_UPDATE);
}
kk_vp_set_updateFlag(0);
}
void kk_vp_set_state_machine(int state)
{
if(vp_mag.state!=state){
INFO_PRINT("[vp state machine]%d->%d\n",vp_mag.state,state);
vp_mag.state = state;
}
}
void kk_vp_get_config_file_version(int ver)
{
return vp_mag.cfg_info.next_ver;
}
void kk_vp_set_config_file_version(int ver)
{
vp_mag.cfg_info.f_ver = (vp_mag.cfg_info.f_ver>ver)?vp_mag.cfg_info.f_ver:ver;
printf("[cfg ver]File Version=%08x\n",vp_mag.cfg_info.f_ver);
}
void kk_vp_cfg_info_set(uint32_t f_ver,uint32_t f_size,uint32_t crc32)
{
vp_mag.cfg_info.next_ver = f_ver;
vp_mag.cfg_info.f_ver = f_ver;
vp_mag.cfg_info.f_size = f_size;
vp_mag.cfg_info.crc32 = crc32;
printf("[set cfg info]File Version=%08x,File Size=%08x,CRC32=%08x\n",f_ver,f_size,crc32);
}
void kk_vp_cfg_info_check(uint32_t f_ver,uint32_t f_size,uint32_t crc32)
{
if(vp_mag.cfg_info.f_ver!=f_ver ||
vp_mag.cfg_info.crc32!=crc32){
printf("[VP]File Version=%08x,File Size=%08x,CRC32=%08x\n",f_ver,f_size,crc32);
printf("[LAN]File Version=%08x,File Size=%08x,CRC32=%08x\n",vp_mag.cfg_info.f_ver,vp_mag.cfg_info.f_size,vp_mag.cfg_info.crc32);
kk_vp_set_updateFlag(1);
printf("[%s][%d]update config file.\n",__FUNCTION__,__LINE__);
}
}
void kk_vp_update_result_check(uint8_t status,uint32_t f_ver)
{
if(status==0 && (vp_mag.cfg_info.f_ver==f_ver) ){
vp_mag.cfg_info.next_ver=vp_mag.cfg_info.f_ver+1;
printf("[cfg ver]File Version=%08x\n",vp_mag.cfg_info.f_ver);
kk_vp_set_state_machine(GET_8009_CONFIG_FILE_INFO);
}else{
kk_vp_set_updateFlag(1);
printf("[%s][%d]update config file.\n",__FUNCTION__,__LINE__);
}
}
int kk_vp_config_file_info_check(int f_ver,int f_size,int crc32)
{
kk_vp_set_state_machine(UPDATING_8009_CONFIG_FILE_INFO);
if(vp_mag.cfg_info.f_ver==f_ver &&
vp_mag.cfg_info.f_size==f_size &&
vp_mag.cfg_info.crc32==crc32){
kk_vp_set_state_machine(UPDATING_8009_CONFIG_FILE_INFO);
return 1;
}
return 0;
}
void kk_vp_manage_init(void)
{
vp_scene_id_map_load();
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
_vp_config_file_version_load();
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
vp_mag.cfg_info.f_size = _vp_get_cfg_file_size();
vp_mag.cfg_info.crc32 = _vp_get_cfg_file_crc32();
}
void *kk_vp_manage_thread(void *arg)
{
INFO_PRINT("[%s] start...\n",__FUNCTION__);
kk_vp_manage_init();
while (1)
{
kk_vp_config_file_update();
switch(vp_mag.state){
case GET_8009_SNAPSHOOT_STATE:
kk_vp_get_8009_snapshoot();
sleep(5);
break;
case SET_8009_SYSTEM:
kk_vp_set_8009_system_time();
sleep(5);
break;
case START_8009_CONFIG_FILE_UPDATE:
kk_vp_config_file_update_start(vp_mag.cfg_info.next_ver);
kk_vp_set_state_machine(UPDATING_8009_CONFIG_FILE_INFO);
break;
case UPDATING_8009_CONFIG_FILE_INFO:
//todo :超时取消
break;
case STOP_8009_CONFIG_FILE_UPDATE:
kk_vp_config_file_update_stop(vp_mag.cfg_info.f_ver);
if(vp_mag.updateFlag==1){
kk_vp_set_state_machine(UPDATING_8009_CONFIG_FILE_INFO);
}else{
kk_vp_set_state_machine(GET_8009_CONFIG_FILE_INFO);
}
sleep(3);
break;
case GET_8009_CONFIG_FILE_INFO:
kk_vp_get_config_file_info();
sleep(15);
break;
default:
break;
}
usleep(50*1000);
}
ERROR_PRINT("[%s]thread end...\n",__FUNCTION__);
}
int kk_voice_panel_init(void)
{
size_t s = 1500;
pthread_t uart_tid = 0;
pthread_t mag_tid = 0;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setstacksize(&attr, s);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
if (pthread_mutex_init(&v_mux, NULL) != 0) {
pthread_attr_destroy(&attr);
ERROR_PRINT("pthread_mutex_init v_mux fail.\n");
return -1;
}
if((pthread_create(&uart_tid, &attr, kk_vp_uart_thread, NULL))!= 0 ) {
pthread_attr_destroy(&attr);
ERROR_PRINT("pthread_create kk_voice_panel fail\n");
return -2;
}
if((pthread_create(&mag_tid, NULL, kk_vp_manage_thread, NULL))!= 0 ) {
ERROR_PRINT("pthread_create kk_voice_panel fail\n");
return -3;
}
/*if((pthread_create(&tid3, NULL, kk_voice_panel_333, NULL))!= 0 ) {
ERROR_PRINT("pthread_create kk_voice_panel fail\n");
return -4;
}*/
return 0;
}
#ifndef _KK_LAN_VOICE_PANEL_H
#define _KK_LAN_VOICE_PANEL_H
int kk_voice_panel_init(void);
#define GET_8009_SNAPSHOOT_STATE 0
#define SET_8009_SYSTEM 1
#define START_8009_CONFIG_FILE_UPDATE 2
#define UPDATING_8009_CONFIG_FILE_INFO 3
#define STOP_8009_CONFIG_FILE_UPDATE 4
#define GET_8009_CONFIG_FILE_INFO 5
void kk_vp_set_state_machine(int state);
void kk_vp_set_config_file_version(int ver);
int kk_vp_config_file_info_check(int f_ver,int f_size,int crc32);
void kk_vp_update_result_check(uint8_t status,uint32_t f_ver);
void kk_vp_set_config_file_version(int ver);
void kk_vp_cfg_info_check(uint32_t f_ver,uint32_t f_size,uint32_t crc32);
void kk_vp_cfg_info_set(uint32_t f_ver,uint32_t f_size,uint32_t crc32);
void kk_vp_set_updateFlag(int flag);
#endif
#include "kk_data_mng.h"
#include "kk_lan_vp_ctrl.h"
#include "cJSON.h"
cJSON *PowerSwitch_msg_build(int ep,int onoff)
{
char epNum[12] = {0};
cJSON *params = cJSON_CreateObject();
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
memset(epNum,0,sizeof(epNum));
snprintf(epNum,sizeof(epNum),"%d",ep);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddStringToObject(params,"epNum",epNum);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddNumberToObject(params,"PowerSwitch",onoff);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return params;
}
static int is_light_dev(int pid);
static cJSON *light_dev(int ep,int onoff);
static cJSON *light_dev_handle(int ep,uint8_t *arg);
static int is_curtain_dev(int pid);
static cJSON *curtain_dev_msg_build(int ep,int OperationMode);
static cJSON *curtain_dev_handle(int ep,uint8_t *arg);
static int is_outlet_dev(int pid);
static cJSON *outlet_msg_build(int ep,int onoff);
static cJSON *outlet_dev_handle(int ep,uint8_t *arg);
typedef int (*pid_mth_func)(int pid);
typedef cJSON *(*dev_handle)(int ep,uint8_t *arg);
typedef struct{
pid_mth_func mth;
dev_handle handle;
}KK_VP_CTRL;
static KK_VP_CTRL vp_ctrl_table[]={
{is_light_dev,light_dev_handle},
{is_curtain_dev,curtain_dev_handle},
{is_outlet_dev,outlet_dev_handle}
};
static int light_dev_pid[]={
3023,3024
};
static int curtain_dev_pid[]={
3067
};
static int outlet_dev_pid[]={
3020
};
static int is_light_dev(int pid)
{
int i;
for(i=0;i<sizeof(light_dev_pid)/sizeof(int);i++){
if(pid==light_dev_pid[i]){
return 1;
}
}
return 0;
}
static int is_curtain_dev(int pid)
{
int i;
for(i=0;i<sizeof(curtain_dev_pid)/sizeof(int);i++){
if(pid==curtain_dev_pid[i]){
return 1;
}
}
return 0;
}
static int is_outlet_dev(int pid)
{
int i;
for(i=0;i<sizeof(outlet_dev_pid)/sizeof(int);i++){
if(pid==outlet_dev_pid[i]){
return 1;
}
}
return 0;
}
static cJSON *light_msg_build(int ep,int onoff)
{
return PowerSwitch_msg_build(ep,onoff);
}
static cJSON *light_dev_handle(int ep,uint8_t *arg)
{
uint8_t skill_type = arg[0];
printf("[%s][%d]skill_type=%d,ep=%d\n",__FUNCTION__,__LINE__,skill_type,ep);
switch(skill_type){
case VP_CTRL_OPEN://
return light_msg_build(ep,1);
case VP_CTRL_CLOSE:
return light_msg_build(ep,0);
default:break;
}
return NULL;
}
static cJSON *curtain_dev_msg_build(int ep,int OperationMode)
{
char epNum[12] = {0};
cJSON *params = cJSON_CreateObject();
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
memset(epNum,0,sizeof(epNum));
snprintf(epNum,sizeof(epNum),"%d",ep);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddStringToObject(params,"epNum",epNum);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
cJSON_AddNumberToObject(params,"OperationMode",OperationMode);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return params;
}
static cJSON *curtain_dev_handle(int ep,uint8_t *arg)
{
uint8_t skill_type = arg[0];
printf("[%s][%d]skill_type=%d,ep=%d\n",__FUNCTION__,__LINE__,skill_type,ep);
switch(skill_type){
case VP_CTRL_OPEN://
return curtain_dev_msg_build(ep,1);
case VP_CTRL_CLOSE:
return curtain_dev_msg_build(ep,0);
case VP_CTRL_STOP:
return curtain_dev_msg_build(ep,2);
default:break;
}
return NULL;
}
static cJSON *outlet_msg_build(int ep,int onoff)
{
return PowerSwitch_msg_build(ep,onoff);
}
static cJSON *outlet_dev_handle(int ep,uint8_t *arg)
{
uint8_t skill_type = arg[0];
printf("[%s][%d]skill_type=%d,ep=%d\n",__FUNCTION__,__LINE__,skill_type,ep);
switch(skill_type){
case VP_CTRL_OPEN://
return outlet_msg_build(ep,1);
case VP_CTRL_CLOSE:
return outlet_msg_build(ep,0);
default:break;
}
return NULL;
}
void kk_lan_vp_control(uint8_t num,uint32_t nodeIdAry[],uint8_t *arg)
{
uint8_t i,j;
int ep;
int pid = 0;
char productCode[32] = {0};
char deviceCode[32] = {0};
cJSON *msg = NULL;
cJSON *params = NULL;
kk_map_dev_node_t *node = NULL;
KK_VP_CTRL *pVpCtr = vp_ctrl_table;
for(i=0;i<num;i++){
memset(deviceCode,0,sizeof(deviceCode));
memset(productCode,0,sizeof(productCode));
kk_lan_db_deviceCode_get(nodeIdAry[i],deviceCode);
kk_lan_db_channel_get(nodeIdAry[i],&ep);
if(kk_map_dev_search_by_deviceCode(deviceCode,&node) != 0){
continue ;
}
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
snprintf(productCode,sizeof(productCode),"%s",node->productCode);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
pid = atoi(productCode);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
params = NULL;
for(j=0;j<sizeof(vp_ctrl_table)/sizeof(KK_VP_CTRL);j++,pVpCtr++){
if(pVpCtr->mth!=NULL && pVpCtr->handle!=NULL){
if(pVpCtr->mth(pid)){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
params = pVpCtr->handle(ep,arg);
break;
}
}
}
if(params!=NULL){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
msg=property_set(productCode,deviceCode,"*","*",params);
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_ipc_send_json(msg);
}
}
}
#ifndef _KK_LAN_VP_CTRL_H
#define _KK_LAN_VP_CTRL_H
#include "kk_newccu_msg.h"
#include "kk_lan_node_db.h"
#define VP_CTRL_OPEN 0X01
#define VP_CTRL_CLOSE 0X02
#define VP_CTRL_STOP 0X03
#define VP_CTRL_GO_ON 0X04
#define VP_CTRL_QUERY_ONOFF_STATUS 0X05
#define VP_CTRL_QUERY_AIR_QUALITY 0X06
#define VP_CTRL_QUERY_HUMIDITY 0X07
#define VP_CTRL_QUERY_WATER_TMP 0X08
#define VP_CTRL_QUERY_TMP 0X09
#define VP_CTRL_QUERY_WEATHER 0X0A
#define VP_CTRL_PLAY 0X0C
#define VP_CTRL_LEAVE_UP 0X0D
#define VP_CTRL_LEAVE_DOWN 0X0E
#define VP_CTRL_LEAVE_SET 0X0F
#define VP_CTRL_WINDSPEE_UP 0X10
#define VP_CTRL_WINDSPEE_DOWN 0X11
#define VP_CTRL_WINDSPEE_SET 0X12
#define VP_CTRL_OPEN_LITTLE 0X16
#define VP_CTRL_UP 0X17
#define VP_CTRL_DOWN 0X18
#define VP_CTRL_BRIGHTNESS_DOWN 0X19
#define VP_CTRL_BRIGHTNESS_UP 0X1A
#define VP_CTRL_BRIGHTNESS_SET 0X1B
#define VP_CTRL_MODE 0X1C
#define VP_CTRL_PREVIOUS 0X1E
#define VP_CTRL_NEXT 0X1F
#define VP_CTRL_WIND_DIR 0x20
#define VP_CTRL_TMP_UP 0X23
#define VP_CTRL_TMP_DOWN 0x24
#define VP_CTRL_TMP_SET 0x25
#define VP_CTRL_SET_COLOR 0x26
#define VP_CTRL_SET_COLOR_TMP 0x27
#define VP_CTRL_ALTITUDE 0x28
void kk_lan_vp_control(uint8_t num,uint32_t nodeIdAry[],uint8_t *arg);
#endif
...@@ -199,7 +199,7 @@ void *TCPServer() ...@@ -199,7 +199,7 @@ void *TCPServer()
struct timeval timeout = {1, 0}; struct timeval timeout = {1, 0};
ret = select(Listenfd + 1, &fds,NULL, NULL, &timeout ); ret = select(Listenfd + 1, &fds,NULL, NULL, &timeout );
if(ret <= 0){ if(ret <= 0){
DEBUG_PRINT("TCPServer:TCP receiving nothing......\n"); //DEBUG_PRINT("TCPServer:TCP receiving nothing......\n");
//break; //break;
}else{ }else{
printf("[%s][%d]\n",__FUNCTION__,__LINE__); printf("[%s][%d]\n",__FUNCTION__,__LINE__);
......
...@@ -12,6 +12,25 @@ ...@@ -12,6 +12,25 @@
#include "kk_newccu_msg.h" #include "kk_newccu_msg.h"
#include "kk_product.h" #include "kk_product.h"
static pthread_mutex_t *mutex = NULL;
int kk_new_msg_init(void)
{
int err = 0;
mutex = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
if (0 != (err = pthread_mutex_init(mutex, NULL))) {
free(mutex);
mutex = NULL;
printf("mutex init fail.");
}
return err;
}
cJSON *property_info_build(const char *msgtype,const char *productCode,const char *deviceCode) cJSON *property_info_build(const char *msgtype,const char *productCode,const char *deviceCode)
...@@ -113,13 +132,22 @@ int kk_ipc_send_json(cJSON *root) ...@@ -113,13 +132,22 @@ int kk_ipc_send_json(cJSON *root)
if(root==NULL){ if(root==NULL){
return -1; return -1;
} }
if(mutex==NULL){
kk_new_msg_init();
}
msg=cJSON_Print(root); msg=cJSON_Print(root);
printf("[lan->midware]json:\n%s\n",msg); printf("[lan->midware]json:\n%s\n",msg);
cJSON_Minify(msg); cJSON_Minify(msg);
pthread_mutex_lock(mutex);
kk_ipc_send(IPC_APP2MID, msg, strlen(msg)+1); kk_ipc_send(IPC_APP2MID, msg, strlen(msg)+1);
pthread_mutex_unlock(mutex);
free(msg); free(msg);
cJSON_Delete(root); cJSON_Delete(root);
return 0; return 0;
} }
......
...@@ -13,6 +13,9 @@ cJSON * property_report(const char *productCode,const char *deviceCode,const cha ...@@ -13,6 +13,9 @@ cJSON * property_report(const char *productCode,const char *deviceCode,const cha
int kk_ipc_send_json(cJSON *root); int kk_ipc_send_json(cJSON *root);
cJSON * scene_execute(const char *sceneId);
......
...@@ -171,7 +171,7 @@ cJSON *kk_devicestatus_build(kk_map_dev_node_t *node) ...@@ -171,7 +171,7 @@ cJSON *kk_devicestatus_build(kk_map_dev_node_t *node)
status = cJSON_CreateObject(); status = cJSON_CreateObject();
kk_creater_nodeid(node->deviceCode,1,nodeid); kk_creater_nodeid(node->deviceCode,1,nodeid,atoi(node->opearteType));
cJSON_AddStringToObject(status, OPCODE_STRING, node->syn_opcode); cJSON_AddStringToObject(status, OPCODE_STRING, node->syn_opcode);
cJSON_AddNumberToObject(status, NODEID_STRING, atoi(nodeid)); cJSON_AddNumberToObject(status, NODEID_STRING, atoi(nodeid));
......
This diff is collapsed.
#ifndef _KK_VOICE_PANEL_CFG_H
#define _KK_VOICE_PANEL_CFG_H
#include "cJSON.h"
#define _OUT
#define _IN
typedef struct{
char nodeId[17];
char name[32];
char ch[8];
char operateType[12];
char room[24];
char mac[24];
char online[6];
char pid[17];
}VP_ZB_DEV_ITEM;
typedef struct{
char id[24];
char name[32];
char room[24];
char type[12];
}VP_SCENE_ITEM;
typedef struct{
char id[24];
char name[32];
}VP_ROOM_ITEM;
typedef struct{
char *ac_gw_nodeId;
char *addr;
char *nodeId;
char *name;
char *operateType;
char *room;
int online;
}VP_AC_INDOOR_ITEM;
typedef struct{
char nodeId[12];
char mac[24];
char name[32];
}VP_GW_ITEM;
typedef struct{
cJSON *controller_buttons_config;
cJSON *gws;
cJSON *infrared_codelib_info;
cJSON *other_devices;
cJSON *rooms;
cJSON *scenes;
cJSON *zigbee_devices;
}VP_CFG_JSON;
int kk_vp_cfg_init(void);
_OUT int kk_vp_syncinfo(_IN cJSON *payload,_IN int ver,_OUT cJSON **root);
#endif
This diff is collapsed.
#ifndef _KK_VOICE_PANEL_HANDLE_H
#define _KK_VOICE_PANEL_HANDLE_H
#include "uart_proto.h"
#include "kk_lan_voice_panel.h"
#include "kk_voice_panel_cfg.h"
#define VP_CONFIG_FILE_MD5 "voice_data.MD5"
#define VP_CONFIG_FILE "/etc/smarthome/voice_data.json"
#define VP_CONFIG_FILE_TAR_GZ "voice_data.tar.gz"
#define OPCODE_8009_SNAPSHOOT 0x1000
#define OPCODE_SNAPSHOOT 0x1001
#define OPCODE_SCENE_ID_NOTIFY 0x1003
#define OPCODE_SYSTEM_TIME_SET 0x1009
#define OPCODE_SYSTEM_TIME_GET 0x100A
#define OPCODE_ACTION_NOTIFY 0x100B
#define OPCODE_CONFIG_FILE_UPDATE_NOTIFY 0x100C
#define OPCODE_CONFIG_DATA_REQUEST 0x100D
#define OPCODE_CONFIG_FILE_UPDATE_STOP 0x100E
#define OPCODE_CONFIG_FILE_INFO_GET 0x100F
#define OPCODE_CONFIG_FILE_UPDATE_STATUS 0x1010
#define EXECUTE_CMD(cmd) do {\
printf("\n[%s][%d]------------------execte cmd------------------\n",__FUNCTION__,__LINE__);\
printf("%s\n",cmd);\
}while(0)
#define VP_SEND_PRINT(format,...) printf("\n\033[33;32m"format"\033[0m\n",##__VA_ARGS__)
#define VP_RECV_PRINT(format,...) printf("\n\033[33;34m"format"\033[0m\n",##__VA_ARGS__)
typedef void (*vp_handle_func)(pro_data_t *pro_data);
typedef struct
{
uint16_t opcode;
vp_handle_func func;
}VP_OPCODE_HANDLE;
int vp_scene_id_map_load(void);
void vp_scene_id_map_deinit(void);
int vp_scene_id_item_add(int scene_id);
//主机快照请求
void vp_8009_snapshoot_get(void);
void kk_vp_set_8009_system_time(void);
void kk_vp_config_file_update_start(uint32_t ver);
void kk_vp_config_file_update_stop(uint32_t ver);
void kk_vp_get_config_file_info(void);
void kk_vp_get_8009_snapshoot(void);
void kk_vp_syncinfo_handle(_IN cJSON *payload);
int kk_vp_opcode_handle(_IN pro_data_t *pro_data);
int _vp_get_cfg_file_crc32(void);
int _vp_get_cfg_file_size(void);
#endif
This diff is collapsed.
This diff is collapsed.
...@@ -60,7 +60,7 @@ int HAL_Execel_cmd(char * cmd,char * buf,int buf_len,int* ret_len) ...@@ -60,7 +60,7 @@ int HAL_Execel_cmd(char * cmd,char * buf,int buf_len,int* ret_len)
} }
void *HAL_Malloc(_IN_ uint32_t size) void *HAL_Malloc(_IN_ uint32_t size)
{ {
return malloc(size); return malloc(size);
} }
void *HAL_Realloc(_IN_ void *ptr, _IN_ uint32_t size) void *HAL_Realloc(_IN_ void *ptr, _IN_ uint32_t size)
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
File added
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