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

【修改内容】1,增加情景面板的支持

【提交人】陈伟灿
parent a869b387
......@@ -163,6 +163,15 @@ time_t HAL_GetTime_s(char *outStr)
return t;
}
long long HAL_GetTime_ms(char *outStr)
{
struct timeval tv;
gettimeofday(&tv, NULL);
sprintf(outStr,"%ld",tv.tv_sec * 1000 + tv.tv_usec / 1000);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
char *HAL_GetTimeStr(_IN_ char *buf, _IN_ int len)
{
......
......@@ -19,6 +19,7 @@ void HAL_SleepMs(_IN_ uint32_t ms);
uint32_t HAL_Get_IP(char ip_str[NETWORK_ADDR_LEN], const char *ifname);
time_t HAL_GetTime(void);
time_t HAL_GetTime_s(char *outStr);
long long HAL_GetTime_ms(char *outStr);
int HAL_Snprintf(_IN_ char *str, const int len, const char *fmt, ...);
int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, va_list ap);
void *HAL_MutexCreate(void);
......
......@@ -670,9 +670,15 @@ static int _dm_mgr_upstream_service_assemble(_IN_ char* msgid, _IN_ int devid,
static unsigned int g_report_id = 1;
int iotx_report_id(void)
int iotx_report_id(char *msgId)
{
return g_report_id++;
if(msgId == NULL){
return INVALID_PARAMETER;
}
char timerStr[16] = {0};
HAL_GetTime_ms(timerStr);
sprintf(msgId,"6c0645c4-f6d6-46b2-b11e-%s",timerStr);
return SUCCESS_RETURN;
}
int dm_mgr_upstream_thing_property_post(_IN_ int devid, _IN_ char *payload, _IN_ int payload_len,_IN_ int isAsync)
......@@ -686,7 +692,8 @@ int dm_mgr_upstream_thing_property_post(_IN_ int devid, _IN_ char *payload, _IN_
}
memset(&request, 0, sizeof(dm_msg_request_t));
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
res = _dm_mgr_upstream_request_assemble(msgId, devid, "property",
payload, payload_len, (char*)DM_URI_THING_EVENT_PROPERTY_POST_METHOD, &request);
if (res != SUCCESS_RETURN) {
......@@ -715,7 +722,8 @@ int dm_mgr_upstream_thing_event_post(_IN_ int devid, _IN_ char *identifier, _IN_
return INVALID_PARAMETER;
}
memset(&request, 0, sizeof(dm_msg_request_t));
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
res = _dm_mgr_upstream_request_assemble(msgId, devid,identifier,
payload, payload_len, method, &request);
if (res != SUCCESS_RETURN) {
......@@ -773,7 +781,9 @@ int dm_mgr_upstream_thing_service_post(_IN_ int devid, _IN_ char *identifier, _I
return INVALID_PARAMETER;
}
memset(&request, 0, sizeof(dm_msg_request_t));
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
res = _dm_mgr_upstream_service_assemble(msgId, devid,identifier,
payload, payload_len, method, &request);
if (res != SUCCESS_RETURN) {
......@@ -901,7 +911,9 @@ int dm_mgr_upstream_thing_sub_register(_IN_ int devid)
}
/* Get Msg ID */
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
/* Get Dev ID */
......@@ -958,7 +970,9 @@ int dm_mgr_upstream_thing_sub_unregister(_IN_ int devid)
}
/* Get Msg ID */
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
......@@ -1016,7 +1030,9 @@ int dm_mgr_upstream_thing_topo_add(_IN_ int devid)
}
/* Get Msg ID */
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
......@@ -1073,7 +1089,9 @@ int dm_mgr_upstream_thing_topo_delete(_IN_ int devid)
}
/* Get Msg ID */
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
......@@ -1117,7 +1135,9 @@ int dm_mgr_upstream_thing_topo_get(void)
}
/* Get Msg ID */
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
......@@ -1171,7 +1191,8 @@ int dm_mgr_upstream_thing_list_found(_IN_ int devid)
}
/* Get Msg ID */
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
......@@ -1221,7 +1242,8 @@ int dm_mgr_ccu_status_cloud(_IN_ int devid)
}
/* Get Msg ID */
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
......@@ -1285,7 +1307,8 @@ int dm_mgr_upstream_status_online(_IN_ int devid)
}
/* Get Msg ID */
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
......@@ -1345,7 +1368,8 @@ int dm_mgr_upstream_status_offline(_IN_ int devid)
}
/* Get Msg ID */
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
......@@ -1400,7 +1424,8 @@ int dm_mgr_upstream_combine_login(_IN_ int devid)
}
/* Get Msg ID */
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
......@@ -1454,7 +1479,8 @@ int dm_mgr_upstream_combine_logout(_IN_ int devid)
}
/* Get Msg ID */
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
......@@ -1507,7 +1533,8 @@ int dm_mgr_ota_report_version(_IN_ int devid, char *version)
}
/* Get Msg ID */
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
memcpy(request.msgid,msgId,strlen(msgId));
......@@ -1551,7 +1578,7 @@ int dm_mgr_subdev_delete(_IN_ char deviceCode[DEVICE_CODE_MAXLEN])
return FAIL_RETURN;
}
INFO_PRINT("dm_mgr_subdev_delete deviceCode:%s\n",deviceCode);
kk_scene_deleteall_panel_scene_info(deviceCode);//如果是情景面板,删除对应信息
/*房间信息中删除对应的设备*/
kk_room_dev_remove(deviceCode,NULL);
......
......@@ -95,7 +95,7 @@ int dm_mgr_check_heartbeat_timeout(time_t timestamp);
int dm_mgr_get_devId_by_devicecode(_IN_ char deviceCode[DEVICE_CODE_MAXLEN],_OU_ int *devid);
int dm_mgr_init(void);
int dm_mgr_deinit(void);
int iotx_report_id(void);
int iotx_report_id(char *msgId);
int dm_mgr_upstream_thing_property_post(_IN_ int devid, _IN_ char *payload, _IN_ int payload_len,_IN_ int isAsync);
int dm_mgr_upstream_thing_event_post(_IN_ int devid, _IN_ char *identifier, _IN_ int identifier_len, _IN_ char *method,
_IN_ char *payload, _IN_ int payload_len);
......
......@@ -795,7 +795,6 @@ int dm_msg_thing_event_post(const char *deviceCode, const char *identifier,const
}
if(msgId != NULL){
dm_mgr_upstream_thing_event_post_ex(node->devid, (char*)identifier, strlen(identifier), method, payload, strlen(payload),msgId);
}else
{
dm_mgr_upstream_thing_event_post(node->devid, identifier, strlen(identifier), method, payload, strlen(payload));
......@@ -1167,7 +1166,8 @@ int kk_msg_execute_property_set(const char *productCode,const char *deviceCode,c
return MEMORY_NOT_ENOUGH;
}
memset(payload, 0, payload_len);
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
snprintf(payload, payload_len, DM_MSG_REQUEST, msgId,
DM_MSG_VERSION, params,HAL_GetTime(), method);
......@@ -1239,7 +1239,8 @@ int kk_msg_execute_property_get(dm_mgr_dev_node_t *node)
return MEMORY_NOT_ENOUGH;
}
memset(payload, 0, payload_len);
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
snprintf(payload, payload_len, DM_MSG_REQUEST, msgId,
DM_MSG_VERSION, paramS,HAL_GetTime(), method);
cJSON *root=cJSON_CreateObject();
......@@ -1319,7 +1320,8 @@ int kk_msg_execute_scene_set(const char* params,const char *fatherDeviceCode,int
return MEMORY_NOT_ENOUGH;
}
memset(payload, 0, payload_len);
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
snprintf(payload, payload_len, DM_MSG_REQUEST, msgId,
DM_MSG_VERSION, params,HAL_GetTime(), method);
......@@ -1369,7 +1371,8 @@ int kk_msg_execute_scene_action(const char* params,const char *fatherDeviceCode)
return MEMORY_NOT_ENOUGH;
}
memset(payload, 0, payload_len);
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
snprintf(payload, payload_len, DM_MSG_REQUEST, msgId,
DM_MSG_VERSION, params,HAL_GetTime(), method);
......@@ -1418,7 +1421,9 @@ int kk_msg_execute_scene_delete(const char* params,const char *fatherDeviceCode)
return MEMORY_NOT_ENOUGH;
}
memset(payload, 0, payload_len);
sprintf(msgId,"%d",iotx_report_id());
iotx_report_id(msgId);
//sprintf(msgId,"%d",iotx_report_id());
//sprintf(msgId,"%d",iotx_report_id());
snprintf(payload, payload_len, DM_MSG_REQUEST, msgId,
DM_MSG_VERSION, params,HAL_GetTime(), method);
......
......@@ -85,6 +85,9 @@ const char DM_MSG_INFO[] DM_READ_ONLY;
#define KK_THING_EVENT_MESSAGE "/thing/event/"
#define KK_THING_SERVICE_GETGUARDSENSORS "/thing/service/getGuardSensors"
#define KK_THING_EVENT_POST "/post"
#define KK_THING_SERVICE_BINDSCENE "/thing/service/bindScene"
#define KK_THING_SERVICE_UNBINDSBUTTTON "/thing/service/unbindButton"
#define KK_THING_SERVICE_ACTIVEBUTTON "/thing/service/activeButton"
void kk_sendData2app(void *info, void *payload,int isAsync);
int dm_msg_thing_sub_register(_IN_ char productCode[DEVICE_CODE_MAXLEN], _IN_ char deviceCode[DEVICE_CODE_MAXLEN],
......
......@@ -328,10 +328,12 @@ int kk_topo_delete_handle(cJSON *payload)
while(item != NULL){
char *deviceCode = cJSON_GetObjectItem(item,MSG_DEVICE_CODE_STR)->valuestring;
dm_mgr_subdev_delete(deviceCode);
item = item->next;
}
}
return SUCCESS_RETURN;
}
......@@ -922,6 +924,99 @@ static int kk_service_getGuardSensors_handle(cJSON *param,cJSON *msgId)
return res;
}
/************************************************************
*功能描述:情景面板绑定处理
*输入参数:params:云端下发数据
msgId:消息Id
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static int kk_service_bindScene_handle(cJSON *params,char *deviceCodeStr)
{
int res = 0;
int i = 0,num = 0;
char sceneId[32] = {0};
char btnId[16] = {0};
SensorType_t *pList = NULL;
if(params == NULL || deviceCodeStr == NULL){
return INVALID_PARAMETER;
}
cJSON *bindType = cJSON_GetObjectItem(params, "bindType");
if(bindType == NULL || bindType->type != cJSON_Number){
ERROR_PRINT("DATA ERROR!!!");
return FAIL_RETURN;
}
cJSON *ButtonId = cJSON_GetObjectItem(params, "ButtonId");
if(ButtonId == NULL || ButtonId->type != cJSON_Number){
ERROR_PRINT("DATA ERROR!!!");
return FAIL_RETURN;
}
sprintf(btnId,"%d",ButtonId->valueint);
kk_scene_delete_panel_scene_info(btnId,deviceCodeStr);//如果已经关联,先删除关联
if(bindType->valueint == 2 || bindType->valueint == 3 ){
HAL_GetTime_s(sceneId);//use time to create the sceneId
kk_scene_parse_scene_action(params,sceneId,0);
kk_scene_insert_panel_scene_info(bindType->valueint,btnId,deviceCodeStr,sceneId);
}
else if(bindType->valueint == 1){
cJSON * action = cJSON_GetObjectItem(params,MSG_SCENE_ACTIONS);
if(action == NULL || action->type != cJSON_Array){
ERROR_PRINT("DATA ERROR!!!");
return FAIL_RETURN;
}
cJSON *client_list = action->child;
while( client_list != NULL ){
int isceneId = cJSON_GetObjectItem( client_list ,"sceneId")->valueint ;
sprintf(sceneId,"%d",isceneId);
kk_scene_insert_panel_scene_info(bindType->valueint,btnId,deviceCodeStr,sceneId);
client_list = client_list->next ;
}
}else if(bindType->valueint == 4){
HAL_GetTime_s(sceneId);//use time to create the sceneId
cJSON * action = cJSON_GetObjectItem(params,MSG_SCENE_ACTIONS);
if(action == NULL || action->type != cJSON_Array) {
ERROR_PRINT("DATA ERROR!!!");
return FAIL_RETURN;
}
cJSON *item = action->child;
while(item != NULL){
cJSON *type = cJSON_GetObjectItem(item,MSG_SCENE_TYPE);
if(type == NULL) return FAIL_RETURN;
cJSON *propertyName = cJSON_GetObjectItem(item,MSG_SCENE_PROPERTYNAME);
if(propertyName == NULL) return FAIL_RETURN;
cJSON *propertyValue = cJSON_GetObjectItem(item,MSG_SCENE_PROPERTYVALUE);
if(propertyValue == NULL) return FAIL_RETURN;
cJSON *deviceCode = cJSON_GetObjectItem(item,MSG_DEVICE_CODE_STR);
if(deviceCode == NULL) return FAIL_RETURN;
res = kk_scene_insert_scene_action(type->valuestring,deviceCode->valuestring,1,
propertyName->valuestring,propertyValue->valuestring,0,sceneId,deviceCode->valuestring);
kk_scene_insert_panel_scene_info(bindType->valueint,btnId,deviceCodeStr,sceneId);
item = item->next;
}
}
return res;
}
int kk_service_arming_set(char *state)
{
int res = 0;
dm_mgr_dev_node_t *node = NULL;
dm_mgr_search_dev_by_devid(KK_DM_DEVICE_CCU_DEVICEID,&node);
res = kk_tsl_set_value(kk_tsl_set_property_value,node->dev_shadow,KK_TSL_CCU_ARMINGSTATE_IDENTIFIER,NULL,state);
if(res != SUCCESS_RETURN)
{
ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
}
//HAL_Get_ccuid(ccuid);
kk_property_db_update(node->deviceCode);
//dm_msg_thing_property_set_reply(deviceCode->valuestring,payload_Str, strlen(payload_Str), NULL);
dm_msg_ccu_property_post(node);
}
/************************************************************
*功能描述:收到云端数据后的回调处理
*输入参数:type:数据类型
data:具体数据
......@@ -1010,16 +1105,7 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
}
}
dm_mgr_search_dev_by_devid(KK_DM_DEVICE_CCU_DEVICEID,&node);
res = kk_tsl_set_value(kk_tsl_set_property_value,node->dev_shadow,KK_TSL_CCU_ARMINGSTATE_IDENTIFIER,NULL,state->valuestring);
if(res != SUCCESS_RETURN)
{
ERROR_PRINT("[%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
}
HAL_Get_ccuid(ccuid);
kk_property_db_update(ccuid);
//dm_msg_thing_property_set_reply(deviceCode->valuestring,payload_Str, strlen(payload_Str), NULL);
dm_msg_ccu_property_post(node);
kk_service_arming_set(state->valuestring);
}
}else if (strstr(typeJson->valuestring,KK_THING_CLOUDSTATE_MSG)){
INFO_PRINT("cloud state notify \n");
......@@ -1145,6 +1231,41 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT("SYNCINFO service \n");
dm_msg_thing_syncinfo_reply();
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_BINDSCENE) == 0){
INFO_PRINT("bind scene \n");
cJSON *paramStr = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(paramStr != NULL){
kk_service_bindScene_handle(paramStr,deviceCode->valuestring);
}
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_UNBINDSBUTTTON) == 0){
INFO_PRINT("unbind button \n");
cJSON *paramStr = cJSON_GetObjectItem(payload,MSG_PARAMS_STR);
if(paramStr != NULL){
char btnId[16] = {0};
cJSON *buttonId = cJSON_GetObjectItem(paramStr, "ButtonId");
if(buttonId == NULL || buttonId->type != cJSON_Number){
ERROR_PRINT("DATA ERROR!!!\n");
goto directReturn;
}
sprintf(btnId,"%d",buttonId->valueint);
kk_scene_delete_panel_scene_info(btnId,deviceCode->valuestring);
}
}
else if(strcmp(typeJson->valuestring,KK_THING_SERVICE_ACTIVEBUTTON) == 0){
INFO_PRINT("active button \n");
cJSON *paramStr = cJSON_GetObjectItem(payload,MSG_PARAMS_STR);
if(paramStr != NULL){
char btnId[16] = {0};
cJSON *buttonId = cJSON_GetObjectItem(paramStr, "ButtonId");
if(buttonId == NULL || buttonId->type != cJSON_Number){
ERROR_PRINT("DATA ERROR!!!\n");
goto directReturn;
}
sprintf(btnId,"%d",buttonId->valueint);
kk_scene_execute_quickpanel(btnId,deviceCode->valuestring);
}
}
else{
INFO_PRINT("Error msgtype!!! \n");
}
......
......@@ -548,7 +548,7 @@ char *kk_sync_get_info()
kk_get_scenes_info(data);
HAL_GetDevice_Code(ccu_deviceCode);
HAL_Get_ccuid(ccu_deviceCode);
HAL_GetProduct_Code(ccu_productCode);
......
......@@ -60,6 +60,9 @@ char * g_filerToPlatTable[] =
(char *){KK_THING_SERVICE_DELETESCENC},
(char *){KK_THING_SERVICE_NEGATIVE},
(char *){KK_THING_SERVICE_SYNCINFO},
(char *){KK_THING_SERVICE_BINDSCENE},
(char *){KK_THING_SERVICE_UNBINDSBUTTTON},
(char *){KK_THING_SERVICE_ACTIVEBUTTON},
};
static char s_ccuid[DEVICE_CODE_LEN] = {0};
int HAL_Get_ccuid(_OU_ char *device_code)
......@@ -714,6 +717,16 @@ void kk_platMsg_handle(void* data, char* chalMark){
if(strcmp(node->productType ,"sensor") == 0){
sensorDev = 1;
}
if(strcmp(msgType->valuestring, "/thing/event/SceneRecall/post") == 0){
char btnId[16] = {0};
cJSON *buttonId = cJSON_GetObjectItem(jsonPay, "SceneNum");
if(buttonId == NULL || buttonId->type != cJSON_Number){
ERROR_PRINT("DATA ERROR!!!\n");
goto error;
}
sprintf(btnId,"%d",buttonId->valueint);
kk_scene_execute_quickpanel(btnId,info_dcode->valuestring);
}
INFO_PRINT("kk_platMsg_handle event post enters \n");
for(idx = 0; idx < node->dev_shadow->event_number; idx++){
eventItem = node->dev_shadow->events + idx;
......
......@@ -162,6 +162,21 @@ int kk_scene_db_init(void)
_kk_scene_unlock();
return FAIL_RETURN;
}
//情景面板场景关联
const char *pPanelScene = "CREATE TABLE IF NOT EXISTS QuickPanelScene( \
buttonId varchar(255), \
bindType INTEGER, \
deviceCode varchar(255), \
sceneId varchar(255) UNIQUE)";
if (sqlite3_exec(ctx->pDb, pPanelScene, NULL, NULL, &pcErr) != SQLITE_OK)
{
ERROR_PRINT("Error creating table (%s)\n", pcErr);
sqlite3_free(pcErr);
//eUtils_LockUnlock(&sLock);
_kk_scene_unlock();
return FAIL_RETURN;
}
_kk_scene_unlock();
return SUCCESS_RETURN;
......@@ -234,6 +249,121 @@ int kk_scene_insert_scene_info(const char* roomId,const char* sceneName,int scen
return SUCCESS_RETURN;
}
/************************************************************
*功能描述: 添加情景面板信息到数据库
*输入参数: name:场景名称
enable: 1,使能;0,不使能
sceneType:场景类型
sceneId:场景Id
*输出参数: 无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_scene_insert_panel_scene_info(int bindType,char *buttonId,char *deviceCode,const char* sceneId)
{
int res = 0;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL;
char *zErrMsg = 0;
const char *insertCmd = "insert into QuickPanelScene (buttonId,bindType,deviceCode,sceneId) \
values ('%s','%d','%s','%s');";
_kk_scene_lock();
sqlCmd = sqlite3_mprintf(insertCmd,buttonId,bindType,deviceCode,sceneId);
res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( res != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
sqlite3_free(sqlCmd);
_kk_scene_unlock();
return FAIL_RETURN;
}
sqlite3_free(sqlCmd);
_kk_scene_unlock();
return SUCCESS_RETURN;
}
/************************************************************
*功能描述: 取消关联
*输入参数: name:场景名称
enable: 1,使能;0,不使能
sceneType:场景类型
sceneId:场景Id
*输出参数: 无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_scene_delete_panel_scene_info(char *buttonId,char *deviceCode)
{
int res = 0;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL;
sqlite3_stmt *stmt;
char *zErrMsg = 0;
char *pSceneId = NULL;
int bindType = 0;
const char *selectCmd = "select * from QuickPanelScene WHERE deviceCode = '%s' and buttonId = '%s';";
sqlCmd = sqlite3_mprintf(selectCmd,deviceCode,buttonId);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
pSceneId = (char*)sqlite3_column_text(stmt, DB_QUICKPANEL_SCENEID);
bindType = sqlite3_column_int(stmt, DB_QUICKPANEL_BINDTYPE);
if(bindType == 4){
kk_scene_delete_scene_action(pSceneId,0);
}else if(bindType == 2 || bindType == 3){
kk_scene_delete_scene_action(pSceneId,1);
}
kk_scene_delete_quickpanel_info(buttonId,deviceCode);
break;
}
sqlite3_finalize(stmt);
sqlite3_free(sqlCmd);
return SUCCESS_RETURN;
}
/************************************************************
*功能描述: 取消所有关联
*输入参数: name:场景名称
enable: 1,使能;0,不使能
sceneType:场景类型
sceneId:场景Id
*输出参数: 无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_scene_deleteall_panel_scene_info(char *deviceCode)
{
int res = 0;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL;
sqlite3_stmt *stmt;
char *zErrMsg = 0;
char *pSceneId = NULL;
char *buttonId = NULL;
int bindType = 0;
const char *selectCmd = "select * from QuickPanelScene WHERE deviceCode = '%s';";
sqlCmd = sqlite3_mprintf(selectCmd,deviceCode);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
pSceneId = (char*)sqlite3_column_text(stmt, DB_QUICKPANEL_SCENEID);
bindType = sqlite3_column_int(stmt, DB_QUICKPANEL_BINDTYPE);
buttonId = (char*)sqlite3_column_text(stmt, DB_QUICKPANEL_BUTTONID);
if(bindType == 4){
kk_scene_delete_scene_action(pSceneId,0);
}else if(bindType == 2 || bindType == 3){
kk_scene_delete_scene_action(pSceneId,1);
}
kk_scene_delete_quickpanel_info(buttonId,deviceCode);
}
sqlite3_finalize(stmt);
sqlite3_free(sqlCmd);
return SUCCESS_RETURN;
}
/************************************************************
*功能描述: 检查场景触发是否已经存在
*输入参数: deviceCode:设备deviceCode
epNum: 设备路数
......@@ -516,6 +646,35 @@ int kk_scene_insert_scene_action(const char* type,const char* deviceCode,int epN
}
/************************************************************
*功能描述: 从数据库删除情景面板的基本数据
*输入参数: sceneId:场景Id
*输出参数: 无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_scene_delete_quickpanel_info(char *buttonId,char* deviceCode)
{
int res = 0;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
char *sqlCmd = NULL;
char *zErrMsg = 0;
const char *deleteCmd = "delete from QuickPanelScene where buttonId = '%s' and deviceCode = '%s';";
_kk_scene_lock();
sqlCmd = sqlite3_mprintf(deleteCmd,buttonId,deviceCode);
res = sqlite3_exec(ctx->pDb, sqlCmd, NULL, NULL, &zErrMsg);
if( res != SQLITE_OK ){
ERROR_PRINT("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
sqlite3_free(sqlCmd);
_kk_scene_unlock();
return FAIL_RETURN;
}
sqlite3_free(sqlCmd);
_kk_scene_unlock();
return SUCCESS_RETURN;
}
/************************************************************
*功能描述: 从数据库删除场景的基本数据
*输入参数: sceneId:场景Id
*输出参数: 无
......
......@@ -68,6 +68,13 @@ enum{
DB_SCENEINVOKESERVICE_SCENEID,
DB_SCENEINVOKESERVICE_args,
};
enum{
DB_QUICKPANEL_BUTTONID = 0,
DB_QUICKPANEL_BINDTYPE,
DB_QUICKPANEL_DEVICECODE,
DB_QUICKPANEL_SCENEID,
};
int kk_scene_delete_scene_timing(const char *sceneId);
int kk_scene_delete_scene_condition(const char *sceneId);
int kk_scene_delete_scene_trigger(const char *sceneId);
......@@ -86,5 +93,10 @@ int kk_scene_insert_scene_condition(const char* type,int startTime,int endTime,i
const char* compareType,const char* compareValue,const char* sceneId,int isAnd);
int kk_scene_insert_scene_info(const char* roomName,const char* name,int sceneType,int enable,const char* sceneId);
int kk_scene_update_scene_enable(int enable,const char *sceneId);
int kk_scene_db_init(void);
int kk_scene_db_init(void);
int kk_scene_insert_panel_scene_info(int bindType,char *buttonId,char *deviceCode,const char* sceneId);
int kk_scene_delete_quickpanel_info(char *buttonId,char* deviceCode);
int kk_scene_delete_panel_scene_info(char *buttonId,char *deviceCode);
int kk_scene_deleteall_panel_scene_info(char *deviceCode);
#endif
......@@ -453,7 +453,7 @@ int kk_scene_action_add(const char *gwdeviceCode,const char *sceneId,kk_scene_ac
*************************************************************/
int kk_scene_delete_send_to_gw(const char *sceneId)
{
char gwdevice[][DEVICE_CODE_MAXLEN] = {0};
char gwdevice[5][DEVICE_CODE_MAXLEN] = {0};
sqlite3_stmt *stmt;
char *sqlCmd = NULL;
char *gwdeviceCode = NULL;
......@@ -1197,6 +1197,34 @@ int kk_scene_get_scene_info(const char* sceneId,int *sceneType,int *enable)
return res;
}
/************************************************************
*功能描述:从数据库获取情景信息
*输入参数:sceneId:对应场景Id;
*输出参数:sceneType:场景类型
enable:场景是否使能
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_scene_get_quickpanel_info(const char* buttonId,char *deviceCode,char *sceneId,int *bindType)
{
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
sqlite3_stmt *stmt;
int res = FAIL_RETURN;
char *pSceneId = NULL;
char *sqlCmd = NULL;
sqlCmd = sqlite3_mprintf("select * from QuickPanelScene where buttonId = '%s' and deviceCode = '%s'",buttonId,deviceCode);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
pSceneId = sqlite3_column_text(stmt, DB_QUICKPANEL_SCENEID);
*bindType = sqlite3_column_int(stmt, DB_QUICKPANEL_BINDTYPE);
memcpy(sceneId,pSceneId,strlen(pSceneId));
res = SUCCESS_RETURN;
}
sqlite3_finalize(stmt);
sqlite3_free(sqlCmd);
return res;
}
/************************************************************
*功能描述:通过时间获取星期
*输入参数:t:当前时间
*输出参数:无
......@@ -2022,7 +2050,9 @@ void kk_scene_execute_event_post(const char* sceneId,const char *msgId)
return;
}
if(msgId == NULL){
sprintf(msgIdbuf,"%d",iotx_report_id());
//sprintf(msgIdbuf,"%d",iotx_report_id());
iotx_report_id(msgIdbuf);
//sprintf(msgId,"%d",iotx_report_id());
}
else
{
......@@ -2035,3 +2065,51 @@ void kk_scene_execute_event_post(const char* sceneId,const char *msgId)
}
}
static int kk_quickpanel_pro_get(const char* sceneId,char *propertyValue)
{
int res = FAIL_RETURN;
char *sqlCmd = NULL;
char *pPropertyValue = NULL;
sqlite3_stmt *stmt;
kk_scene_ctx_t *ctx = _kk_scene_get_ctx();
sqlCmd = sqlite3_mprintf("select * from SceneActionInfo WHERE sceneId = '%s'",sceneId);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
pPropertyValue = (char*)sqlite3_column_text(stmt,DB_SCENEACTION_PROPERTYVALUE);
memcpy(propertyValue,pPropertyValue,strlen(pPropertyValue));
}
sqlite3_finalize(stmt);
sqlite3_free(sqlCmd);
return res;
}
/************************************************************
*功能描述:情景面板执行
*输入参数:buttonId:Id
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int kk_scene_execute_quickpanel(const char *buttonId,char *deviceCode)
{
int res = 0;
int bindType = 0;
char sceneId[32] = {0};
if(buttonId == NULL || deviceCode == NULL){
return INVALID_PARAMETER;
}
res = kk_scene_get_quickpanel_info(buttonId,deviceCode,sceneId,&bindType);
if(res == SUCCESS_RETURN ){
if(bindType == 4){
char provalue[4] = {0};
kk_quickpanel_pro_get(sceneId,provalue);
kk_service_arming_set(provalue);
}else{
kk_scene_execute_action(sceneId,NULL);
}
}
INFO_PRINT("[%d]kk_scene_execute_quickpanel called!!!\n",__LINE__);
return res;
}
\ No newline at end of file
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