Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
k-sdk
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
陈伟灿
k-sdk
Commits
b726b75b
Commit
b726b75b
authored
Nov 13, 2020
by
chen.weican
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【修改内容】修改9531上定时场景不起作用的BUG
【提交人】陈伟灿
parent
aa50f0d6
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
204 additions
and
60 deletions
+204
-60
application/kcloud/kcloud_data_handle.c
application/kcloud/kcloud_data_handle.c
+4
-1
common/hal/HAL_OS_linux.c
common/hal/HAL_OS_linux.c
+2
-2
midware/midware/dm/kk_dm_heartbeat.c
midware/midware/dm/kk_dm_heartbeat.c
+1
-1
midware/midware/dm/kk_dm_msg.c
midware/midware/dm/kk_dm_msg.c
+2
-11
midware/midware/dm/kk_dm_queue.c
midware/midware/dm/kk_dm_queue.c
+0
-4
midware/midware/dm/kk_linkkit.c
midware/midware/dm/kk_linkkit.c
+18
-24
midware/midware/dm/kk_sub_db.c
midware/midware/dm/kk_sub_db.c
+133
-6
midware/midware/scene/kk_scene_handle.c
midware/midware/scene/kk_scene_handle.c
+44
-11
No files found.
application/kcloud/kcloud_data_handle.c
View file @
b726b75b
...
...
@@ -334,6 +334,7 @@ static int _kk_topo_change_handle(cJSON *payload)
return
RETURN_SUCCESS
;
}
static
char
*
_kk_data_create
(
const
char
*
topic
,
const
char
*
data
)
{
cJSON
*
root
;
...
...
@@ -365,7 +366,9 @@ static char * _kk_data_create(const char *topic,const char *data)
if
(
strstr
(
topic
,
KK_TOPO_CHANGE_MSG_STR
)){
_kk_topo_change_handle
(
payloadObj
);
}
out
=
cJSON_Print
(
root
);
cJSON_Minify
(
out
);
cJSON_Delete
(
root
);
free
(
msgStr
);
free
(
infoStr
);
...
...
common/hal/HAL_OS_linux.c
View file @
b726b75b
...
...
@@ -111,7 +111,7 @@ uint64_t HAL_UptimeMs(void)
clock_gettime
(
CLOCK_MONOTONIC
,
&
ts
);
time_ms
=
((
uint64_t
)
ts
.
tv_sec
*
(
uint64_t
)
1000
)
+
(
ts
.
tv_nsec
/
1000
/
1000
);
//printf("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&HAL_UptimeMs:%llu\n",time_ms);
return
time_ms
;
}
time_t
HAL_Uptimes
(
void
)
...
...
@@ -125,7 +125,7 @@ time_t HAL_Uptimes(void)
return
time_m
;
}
uint64
_t
HAL_GetTime
(
void
)
time
_t
HAL_GetTime
(
void
)
{
time_t
t
;
t
=
time
(
NULL
);
...
...
midware/midware/dm/kk_dm_heartbeat.c
View file @
b726b75b
...
...
@@ -108,7 +108,7 @@ int kk_heartbeat_init(void)
/* Init Device Id*/
INIT_LIST_HEAD
(
&
ctx
->
gw_status_list
);
ctx
->
hearbeat_thread_running
=
1
;
s_start_time
=
HAL_Uptime
M
s
();
s_start_time
=
HAL_Uptimes
();
res
=
pthread_create
(
&
ctx
->
hearbeat_thread
,
NULL
,
kk_heartbeat_yield
,
NULL
);
if
(
res
<
0
)
{
...
...
midware/midware/dm/kk_dm_msg.c
View file @
b726b75b
...
...
@@ -782,24 +782,15 @@ int dm_msg_thing_event_post(const char *deviceCode, const char *identifier)
}
return
SUCCESS_RETURN
;
}
int
dm_msg_scene_event_post
(
const
char
*
deviceCode
,
const
char
*
identifier
,
kk_tsl_t
*
dev_shadow
,
const
char
*
msgId
)
int
dm_msg_scene_event_post
(
const
char
*
identifier
,
kk_tsl_t
*
dev_shadow
,
const
char
*
msgId
)
{
int
res
=
0
;
int
nums
=
0
;
int
idx
=
0
;
char
*
payload
=
NULL
;
dm_mgr_dev_node_t
*
node
=
NULL
;
void
*
event
=
NULL
;
char
*
method
=
NULL
;
printf
(
"msgId:%s
\n
"
,
msgId
);
if
(
deviceCode
==
NULL
){
return
FAIL_RETURN
;
}
res
=
dm_mgr_get_device_by_devicecode
(
deviceCode
,
&
node
);
if
(
res
!=
SUCCESS_RETURN
)
{
return
FAIL_RETURN
;
}
payload
=
kk_tsl_get_post_event_str
(
dev_shadow
,
identifier
,
strlen
(
identifier
));
if
(
payload
!=
NULL
){
res
=
kk_tsl_get_event_by_identifier
(
dev_shadow
,
identifier
,
&
event
);
...
...
@@ -813,7 +804,7 @@ int dm_msg_scene_event_post(const char *deviceCode, const char *identifier,kk_ts
free
(
payload
);
return
FAIL_RETURN
;
}
dm_mgr_upstream_thing_event_post_ex
(
node
->
devid
,
identifier
,
strlen
(
identifier
),
method
,
payload
,
strlen
(
payload
),
msgId
);
dm_mgr_upstream_thing_event_post_ex
(
KK_DM_DEVICE_CCU_DEVICEID
,
identifier
,
strlen
(
identifier
),
method
,
payload
,
strlen
(
payload
),
msgId
);
free
(
method
);
method
=
NULL
;
free
(
payload
);
...
...
midware/midware/dm/kk_dm_queue.c
View file @
b726b75b
...
...
@@ -224,7 +224,6 @@ int dm_queue_msg_insert(void *data)
}
_dm_queue_lock
();
printf
(
"dm msg list size: %d, max size: %d"
,
ctx
->
msg_list
.
size
,
ctx
->
msg_list
.
max_size
);
if
(
ctx
->
msg_list
.
size
>=
ctx
->
msg_list
.
max_size
)
{
printf
(
"dm queue list full"
);
_dm_queue_unlock
();
...
...
@@ -284,7 +283,6 @@ int dm_queue_msg_insert2(void *data)
}
_dm_queue_lock2
();
printf
(
"dm msg list size: %d, max size: %d"
,
ctx
->
msg_list2
.
size
,
ctx
->
msg_list2
.
max_size
);
if
(
ctx
->
msg_list2
.
size
>=
ctx
->
msg_list2
.
max_size
)
{
printf
(
"dm queue list full"
);
_dm_queue_unlock2
();
...
...
@@ -345,9 +343,7 @@ int dm_queue_msg_insert3(void *data)
}
_dm_queue_lock3
();
printf
(
"dm msg list size: %d, max size: %d"
,
ctx
->
msg_list3
.
size
,
ctx
->
msg_list3
.
max_size
);
if
(
ctx
->
msg_list3
.
size
>=
ctx
->
msg_list3
.
max_size
)
{
printf
(
"dm queue list full"
);
_dm_queue_unlock3
();
return
FAIL_RETURN
;
}
...
...
midware/midware/dm/kk_linkkit.c
View file @
b726b75b
...
...
@@ -625,12 +625,12 @@ static int kk_service_deleteKey_handle(const char *deviceCode,cJSON *param)
return
SUCCESS_RETURN
;
}
static
int
kk_service_addScene_handle
(
c
onst
char
*
deviceCode
,
c
JSON
*
param
,
cJSON
*
msgId
)
static
int
kk_service_addScene_handle
(
cJSON
*
param
,
cJSON
*
msgId
)
{
int
res
=
0
;
char
sceneId
[
32
]
=
{
0
};
kk_tsl_t
*
pSceneShadow
=
NULL
;
if
(
deviceCode
==
NULL
||
param
==
NULL
||
msgId
==
NULL
){
if
(
param
==
NULL
||
msgId
==
NULL
){
return
INVALID_PARAMETER
;
}
...
...
@@ -639,16 +639,16 @@ static int kk_service_addScene_handle(const char *deviceCode,cJSON *param,cJSON
pSceneShadow
=
kk_scene_shadow
();
if
(
pSceneShadow
!=
NULL
){
kk_tsl_set_value
(
kk_tsl_set_event_output_value
,
pSceneShadow
,
MSG_SCENE_ADDNOTIFICATION_SCENEID
,
NULL
,
sceneId
);
dm_msg_scene_event_post
(
deviceCode
,
MSG_SCENE_ADDNOTIFICATION
,
pSceneShadow
,
msgId
->
valuestring
);
dm_msg_scene_event_post
(
MSG_SCENE_ADDNOTIFICATION
,
pSceneShadow
,
msgId
->
valuestring
);
}
}
return
res
;
}
static
int
kk_service_updateScene_handle
(
c
onst
char
*
deviceCode
,
c
JSON
*
param
,
cJSON
*
msgId
)
static
int
kk_service_updateScene_handle
(
cJSON
*
param
,
cJSON
*
msgId
)
{
int
res
=
0
;
kk_tsl_t
*
pSceneShadow
=
NULL
;
if
(
deviceCode
==
NULL
||
param
==
NULL
||
msgId
==
NULL
){
if
(
param
==
NULL
||
msgId
==
NULL
){
return
INVALID_PARAMETER
;
}
cJSON
*
sceneId
=
cJSON_GetObjectItem
(
param
,
MSG_SCENE_SCENEID
);
...
...
@@ -658,19 +658,19 @@ static int kk_service_updateScene_handle(const char *deviceCode,cJSON *param,cJS
pSceneShadow
=
kk_scene_shadow
();
if
(
pSceneShadow
!=
NULL
){
kk_tsl_set_value
(
kk_tsl_set_event_output_value
,
pSceneShadow
,
MSG_SCENE_UPDATENOTIFICATION_SCENEID
,
NULL
,
sceneId
->
valuestring
);
dm_msg_scene_event_post
(
deviceCode
,
MSG_SCENE_UPDATENOTIFICATION
,
pSceneShadow
,
msgId
->
valuestring
);
dm_msg_scene_event_post
(
MSG_SCENE_UPDATENOTIFICATION
,
pSceneShadow
,
msgId
->
valuestring
);
}
}
return
res
;
}
static
int
kk_service_deleteScene_handle
(
c
onst
char
*
deviceCode
,
c
JSON
*
param
,
cJSON
*
msgId
)
static
int
kk_service_deleteScene_handle
(
cJSON
*
param
,
cJSON
*
msgId
)
{
int
res
=
0
;
kk_tsl_t
*
pSceneShadow
=
NULL
;
char
sceneIdBuf
[
16
]
=
{
0
};
if
(
deviceCode
==
NULL
||
param
==
NULL
||
msgId
==
NULL
){
if
(
param
==
NULL
||
msgId
==
NULL
){
return
INVALID_PARAMETER
;
}
cJSON
*
sceneId
=
cJSON_GetObjectItem
(
param
,
MSG_SCENE_SCENEID
);
...
...
@@ -691,29 +691,23 @@ static int kk_service_deleteScene_handle(const char *deviceCode,cJSON *param,cJS
else
{
kk_tsl_set_value
(
kk_tsl_set_event_output_value
,
pSceneShadow
,
MSG_SCENE_DELETENOTIFICATION_SCENEID
,
NULL
,
sceneId
->
valuestring
);
}
dm_msg_scene_event_post
(
deviceCode
,
MSG_SCENE_DELETENOTIFICATION
,
pSceneShadow
,
msgId
->
valuestring
);
dm_msg_scene_event_post
(
MSG_SCENE_DELETENOTIFICATION
,
pSceneShadow
,
msgId
->
valuestring
);
}
}
return
res
;
}
static
int
kk_service_executeScene_handle
(
c
onst
char
*
deviceCode
,
c
JSON
*
param
,
cJSON
*
msgId
)
static
int
kk_service_executeScene_handle
(
cJSON
*
param
,
cJSON
*
msgId
)
{
int
res
=
0
;
kk_tsl_t
*
pSceneShadow
=
NULL
;
if
(
deviceCode
==
NULL
||
param
==
NULL
||
msgId
==
NULL
){
if
(
param
==
NULL
||
msgId
==
NULL
){
return
INVALID_PARAMETER
;
}
cJSON
*
sceneId
=
cJSON_GetObjectItem
(
param
,
MSG_SCENE_SCENEID
);
if
(
sceneId
==
NULL
)
return
FAIL_RETURN
;
res
=
kk_scene_execute_scene
(
sceneId
->
valuestring
);
if
(
res
==
SUCCESS_RETURN
){
pSceneShadow
=
kk_scene_shadow
();
if
(
pSceneShadow
!=
NULL
){
kk_tsl_set_value
(
kk_tsl_set_event_output_value
,
pSceneShadow
,
MSG_SCENE_EXECUTENOTIFICATION_SCENEID
,
NULL
,
sceneId
->
valuestring
);
dm_msg_scene_event_post
(
deviceCode
,
MSG_SCENE_EXECUTENOTIFICATION
,
pSceneShadow
,
msgId
->
valuestring
);
}
}
res
=
kk_scene_execute_scene
(
sceneId
->
valuestring
,
msgId
->
valuestring
);
return
res
;
}
...
...
@@ -895,25 +889,25 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT
(
" add scene
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_SCENE_MSGID
);
kk_service_addScene_handle
(
deviceCode
->
valuestring
,
paramStr
,
msgId
);
kk_service_addScene_handle
(
paramStr
,
msgId
);
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_UPDATESCENC
)
==
0
){
INFO_PRINT
(
" update scene
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_SCENE_MSGID
);
kk_service_updateScene_handle
(
deviceCode
->
valuestring
,
paramStr
,
msgId
);
kk_service_updateScene_handle
(
paramStr
,
msgId
);
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_DELETESCENC
)
==
0
){
INFO_PRINT
(
"delete scene
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_SCENE_MSGID
);
kk_service_deleteScene_handle
(
deviceCode
->
valuestring
,
paramStr
,
msgId
);
kk_service_deleteScene_handle
(
paramStr
,
msgId
);
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_EXECUTESCENE
)
==
0
){
INFO_PRINT
(
"execute scene
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_SCENE_MSGID
);
kk_service_executeScene_handle
(
deviceCode
->
valuestring
,
paramStr
,
msgId
);
kk_service_executeScene_handle
(
paramStr
,
msgId
);
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_NEGATIVE
)
==
0
){
INFO_PRINT
(
"negative service
\n
"
);
...
...
midware/midware/dm/kk_sub_db.c
View file @
b726b75b
/************************************************************
*版权所有 (C)2020,公司(或个人)名称
*
*文件名称: kk_sub_db.c
*内容摘要: 网关设备和子设备设备表处理模块
*其他说明:
*当前版本:
*************************************************************/
#include <stdio.h>
#include "kk_tsl_api.h"
...
...
@@ -50,6 +58,14 @@ static void _kk_subDb_unlock(void)
}
}
/************************************************************
*功能描述:设备表的初始化
*输入参数:无
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
kk_subDev_db_Init
(
void
)
{
kk_subDb_ctx_t
*
ctx
=
_kk_subDb_get_ctx
();
...
...
@@ -65,7 +81,7 @@ static int kk_subDev_db_Init(void)
idx INTEGER, \
isOffline INTEGER, \
productCode varchar(33), \
deviceCode varchar(33), \
deviceCode varchar(33)
UNIQUE
, \
mac varchar(17), \
fatherDeviceCode varchar(33), \
version varchar(33), \
...
...
@@ -94,6 +110,13 @@ static int kk_subDev_db_Init(void)
_kk_subDb_unlock
();
return
SUCCESS_RETURN
;
}
/************************************************************
*功能描述:开机从设备数据库导出数据到内存
*输入参数:无
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
_kk_load_subDevice
(
void
)
{
const
char
*
searchCmd
=
"select * from SubDeviceInfo;"
;
...
...
@@ -140,6 +163,14 @@ static int _kk_load_subDevice(void)
return
SUCCESS_RETURN
;
}
/************************************************************
*功能描述:设备数据模块初始化
*输入参数:无
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_subDb_init
(
void
)
{
int
res
=
0
;
...
...
@@ -159,6 +190,14 @@ int kk_subDb_init(void)
_kk_load_subDevice
();
return
SUCCESS_RETURN
;
}
/************************************************************
*功能描述:检查设备是否有重复
*输入参数:deviceCode:设备deviceCode
*输出参数:无
*返 回 值:1:存在;0:不存在
*其他说明:
*************************************************************/
static
int
_kk_check_subDev_exist
(
const
char
*
deviceCode
)
{
int
isExist
=
0
;
...
...
@@ -182,10 +221,23 @@ static int _kk_check_subDev_exist(const char* deviceCode)
_kk_subDb_unlock
();
return
isExist
;
}
/************************************************************
*功能描述:保存设备信息到数据库
*输入参数:devType:设备类型
productCode:产品Id
deviceCode:设备deviceCode
fatherDeviceCode:上一级网关的deviceCode
mac: mac地址
version:版本号
heartbeat:心跳时间
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_subDev_insert_db
(
int
devType
,
char
productCode
[
PRODUCT_CODE_MAXLEN
],
\
char
deviceCode
[
DEVICE_CODE_MAXLEN
],
char
fatherDeviceCode
[
DEVICE_CODE_MAXLEN
],
char
mac
[
DEVICE_MAC_MAXLEN
],
char
version
[
DEVICE_VERSION_MAXLEN
],
int
heartbeat
)
{
...
...
@@ -217,6 +269,14 @@ int kk_subDev_insert_db(int devType,char productCode[PRODUCT_CODE_MAXLEN], \
_kk_subDb_unlock
();
return
SUCCESS_RETURN
;
}
/************************************************************
*功能描述:删除设备信息
*输入参数:deviceCode:设备deviceCode
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_subDev_delete_by_dcode
(
char
deviceCode
[
DEVICE_CODE_MAXLEN
])
{
const
char
*
deleteCmd
=
"delete from SubDeviceInfo where deviceCode = '%s';"
;
...
...
@@ -241,6 +301,15 @@ int kk_subDev_delete_by_dcode(char deviceCode[DEVICE_CODE_MAXLEN])
return
SUCCESS_RETURN
;
}
/************************************************************
*功能描述:更新是否在线信息
*输入参数:deviceCode:设备deviceCode
isOffline:1,离线;0,在线
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_subDev_update_offline
(
int
isOffline
,
const
char
*
deviceCode
)
{
char
*
sqlCmd
=
NULL
;
...
...
@@ -263,6 +332,16 @@ int kk_subDev_update_offline(int isOffline,const char *deviceCode)
//_kk_subDb_unlock();
return
SUCCESS_RETURN
;
}
/************************************************************
*功能描述:更新设备类型
*输入参数:deviceCode:设备deviceCode
productType:设备类型
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_subDev_update_productType
(
char
*
productType
,
const
char
*
deviceCode
)
{
char
*
sqlCmd
=
NULL
;
...
...
@@ -286,6 +365,14 @@ int kk_subDev_update_productType(char *productType,const char *deviceCode)
return
SUCCESS_RETURN
;
}
/************************************************************
*功能描述:更新设备注册标记
*输入参数:deviceCode:设备deviceCode
isAuth:1,已注册;0,未注册
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_subDev_update_auth
(
int
isAuth
,
const
char
*
deviceCode
)
{
char
*
sqlCmd
=
NULL
;
...
...
@@ -309,6 +396,14 @@ int kk_subDev_update_auth(int isAuth,const char *deviceCode)
return
SUCCESS_RETURN
;
}
/************************************************************
*功能描述:更新内场景支持,此接口只针对网关设备有效
*输入参数:deviceCode:设备deviceCode
sceneSupport:1,支持内场景;0,不支持
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_subDev_update_sceneSupport
(
int
sceneSupport
,
const
char
*
deviceCode
)
{
char
*
sqlCmd
=
NULL
;
...
...
@@ -332,6 +427,15 @@ int kk_subDev_update_sceneSupport(int sceneSupport,const char *deviceCode)
return
SUCCESS_RETURN
;
}
/************************************************************
*功能描述:主机重新上线后向云端上报属性
*输入参数:无
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_subDev_send_property_get_from_db
(
void
)
{
const
char
*
searchCmd
=
"select * from SubDeviceInfo;"
;
...
...
@@ -360,6 +464,13 @@ int kk_subDev_send_property_get_from_db(void)
}
/************************************************************
*功能描述:主机断电重启后向网关获取所有子设备属性
*输入参数:fatherDeviceCode:网关deviceCode
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_subDev_send_property_get
(
const
char
*
fatherDeviceCode
)
{
...
...
@@ -402,6 +513,14 @@ int kk_subDev_send_property_get(const char *fatherDeviceCode)
}
/************************************************************
*功能描述:检查网关是否支持内场景
*输入参数:deviceCode:网关deviceCode
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_subDev_check_scene_support
(
const
char
*
deviceCode
)
{
int
res
=
0
;
...
...
@@ -431,6 +550,17 @@ int kk_subDev_check_scene_support(const char *deviceCode)
return
res
;
}
/************************************************************
*功能描述:向所有同类设备执行动作,场景设置中用到
*输入参数:productType:设备类型
sceneId:场景Id
propertyName:属性名
propertyValue:属性值
type:执行类型
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_subDev_set_action_by_productType
(
const
char
*
productType
,
const
char
*
sceneId
,
const
char
*
propertyName
,
const
char
*
propertyValue
,
const
char
*
type
)
{
int
res
=
0
;
...
...
@@ -440,13 +570,11 @@ int kk_subDev_set_action_by_productType(const char *productType,const char *scen
dm_mgr_dev_node_t
*
node
=
NULL
;
kk_subDb_ctx_t
*
ctx
=
_kk_subDb_get_ctx
();
const
char
*
searchCmd
=
"select * from SubDeviceInfo WHERE productType= '%s'"
;
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
if
(
productType
==
NULL
){
ERROR_PRINT
(
"ERROR [%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
return
INVALID_PARAMETER
;
}
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
sqlCmd
=
sqlite3_mprintf
(
searchCmd
,
productType
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
...
...
@@ -457,7 +585,6 @@ int kk_subDev_set_action_by_productType(const char *productType,const char *scen
if
(
res
!=
SUCCESS_RETURN
)
{
continue
;
}
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
if
(
kk_subDev_check_scene_support
(
node
->
fatherDeviceCode
)
==
1
){
kk_scene_action_detail_t
info
=
{
0
};
memcpy
(
info
.
deviceCode
,
node
->
deviceCode
,
strlen
(
node
->
deviceCode
));
...
...
midware/midware/scene/kk_scene_handle.c
View file @
b726b75b
...
...
@@ -193,8 +193,9 @@ void *kk_scene_yield(void *args)
while
(
1
)
{
current_time
=
HAL_GetTime
();
/****系统起来15s后开始定时处理****/
if
((
HAL_Uptime
Ms
()
-
s_start_time
)
<=
15000
){
if
((
HAL_Uptime
s
()
-
s_start_time
)
<=
15
){
sleep
(
1
);
INFO_PRINT
(
"[%s][%d] HAL_Uptimes:%ld
\n
"
,
__FUNCTION__
,
__LINE__
,
HAL_Uptimes
());
continue
;
}
...
...
@@ -234,7 +235,7 @@ void *kk_scene_yield(void *args)
INFO_PRINT
(
"[%s][%d] current_time:%d
\n
"
,
__FUNCTION__
,
__LINE__
,
current_time
);
INFO_PRINT
(
"[%s][%d] embedDelayInfo->starttime:%d
\n
"
,
__FUNCTION__
,
__LINE__
,
embedDelayInfo
->
starttime
);
if
(
current_time
>=
embedDelayInfo
->
starttime
){
kk_scene_execute_action
(
embedDelayInfo
->
executeSceneId
);
kk_scene_execute_action
(
embedDelayInfo
->
executeSceneId
,
NULL
);
if
(
embedDelayInfo
==
p_delay_embed_list
){
pTempEmbed
=
p_delay_embed_list
;
p_delay_embed_list
=
p_delay_embed_list
->
next
;
...
...
@@ -264,11 +265,14 @@ void *kk_scene_yield(void *args)
if
(
scene_timer_list
->
starttime
!=
0
&&
current_time
>=
scene_timer_list
->
starttime
){
if
(
kk_scene_check_trigger_condition
(
scene_timer_list
->
sceneId
)
==
0
){
if
(
kk_scene_embed_find
(
scene_timer_list
->
sceneId
)
==
0
){
kk_scene_execute_action
(
scene_timer_list
->
sceneId
);
kk_scene_execute_action
(
scene_timer_list
->
sceneId
,
NULL
);
}
}
kk_scene_update_starttime
(
scene_timer_list
,
current_time
);
}
if
(
scene_timer_list
->
starttime
==
0
){
kk_scene_remove_timer_info
(
scene_timer_list
->
sceneId
,
0
);
}
scene_timer_list
=
scene_timer_list
->
next
;
}
_kk_scene_unlock
();
...
...
@@ -435,7 +439,7 @@ int kk_scene_action_add(const char *gwdeviceCode,const char *sceneId,kk_scene_ac
*************************************************************/
static
void
kk_scene_delete
(
char
*
sceneId
,
int
isforword
)
{
kk_scene_remove_timer_info
(
sceneId
);
kk_scene_remove_timer_info
(
sceneId
,
1
);
kk_scene_delete_scene_timing
(
sceneId
);
kk_scene_delete_scene_embed
(
sceneId
);
kk_scene_delete_scene_info
(
sceneId
);
...
...
@@ -678,15 +682,18 @@ static int kk_scene_parse_repeatday(cJSON *repeatday)
/************************************************************
*功能描述:移除定时信息
*输入参数:sceneId:对应场景Id;
lockflag: 1,需要加锁;0,不需要
*输出参数:无
*返 回 值: 无
*其他说明:
*************************************************************/
void
kk_scene_remove_timer_info
(
char
*
sceneId
)
void
kk_scene_remove_timer_info
(
char
*
sceneId
,
int
lockflag
)
{
kk_scene_timer_list_t
*
ptr
=
NULL
,
*
ptemp
=
NULL
;
if
(
lockflag
){
_kk_scene_lock
();
}
ptemp
=
ptr
=
p_scene_timer_list
;
while
(
ptr
){
if
(
!
strcmp
(
ptr
->
sceneId
,
sceneId
)){
...
...
@@ -707,7 +714,9 @@ void kk_scene_remove_timer_info(char *sceneId)
ptr
=
ptr
->
next
;
}
}
if
(
lockflag
){
_kk_scene_unlock
();
}
}
/************************************************************
...
...
@@ -1161,7 +1170,7 @@ static time_t kk_scene_creat_timer_starttime(int week,int starttime,time_t curre
curWeek
=
kk_scene_date_to_week
(
current
);
startNew
=
starttime
+
g_timezone
*
3600
;
startNew
=
(
startNew
-
86400
)
>=
0
?
(
startNew
-
86400
)
:
startNew
;
INFO_PRINT
(
"kk_scene_creat_timer_starttime:%d
\n
"
,
startNew
);
INFO_PRINT
(
"kk_scene_creat_timer_starttime:%
l
d
\n
"
,
startNew
);
/*today is not repeat day*/
if
((
week
>
0
)
&&
(
!
(
week
&
(
1
<<
(
curWeek
-
1
)))))
...
...
@@ -1588,7 +1597,7 @@ static int kk_scene_start_action(const char *deviceCode,const char *propertyName
*其他说明:
*************************************************************/
int
kk_scene_execute_action
(
const
char
*
sceneId
)
int
kk_scene_execute_action
(
const
char
*
sceneId
,
char
*
msgId
)
{
int
res
=
FAIL_RETURN
;
char
*
deviceCode
=
NULL
;
...
...
@@ -1630,6 +1639,8 @@ next:
res
=
kk_scene_start_action
(
deviceCode
,
propertyName
,
propertyValue
,
delay
);
}
}
kk_scene_execute_event_post
(
sceneId
,
msgId
);
sqlite3_finalize
(
stmt
);
sqlite3_free
(
sqlCmd
);
return
res
;
...
...
@@ -1701,7 +1712,7 @@ static int kk_scene_embed_find(const char *sceneId)
kk_scene_push_embed_list
(
delay
,
executeSceneId
);
}
else
{
kk_scene_execute_action
(
executeSceneId
);
kk_scene_execute_action
(
executeSceneId
,
NULL
);
}
}
sqlite3_finalize
(
stmt
);
...
...
@@ -1755,7 +1766,7 @@ int kk_scene_query_trigger_info(const char *deviceCode,cJSON *param)
if
(
res
==
SUCCESS_RETURN
){
/*check是否时场景嵌套类型*/
if
(
kk_scene_embed_find
(
sceneId
)
==
0
){
res
=
kk_scene_execute_action
(
sceneId
);
res
=
kk_scene_execute_action
(
sceneId
,
NULL
);
}
}
}
...
...
@@ -1790,7 +1801,7 @@ int kk_scene_iftt_check(const char*deviceCode,cJSON *param)
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_scene_execute_scene
(
const
char
*
sceneId
)
int
kk_scene_execute_scene
(
const
char
*
sceneId
,
const
char
*
msgId
)
{
int
res
=
0
;
int
sceneType
=
0
;
...
...
@@ -1803,12 +1814,34 @@ int kk_scene_execute_scene(const char *sceneId)
res
=
kk_scene_check_condition
(
sceneId
);
if
(
res
==
SUCCESS_RETURN
){
_kk_scene_lock
();
res
=
kk_scene_execute_action
(
sceneId
);
res
=
kk_scene_execute_action
(
sceneId
,
msgId
);
_kk_scene_unlock
();
}
}
INFO_PRINT
(
"[%d]kk_scene_execute_scene called!!!
\n
"
,
__LINE__
);
return
res
;
}
void
kk_scene_execute_event_post
(
const
char
*
sceneId
,
const
char
*
msgId
)
{
kk_tsl_t
*
pSceneShadow
=
NULL
;
char
msgIdbuf
[
64
]
=
{
0
};
if
(
sceneId
==
NULL
){
INFO_PRINT
(
"kk_scene_execute_event_post:error
\n
"
);
return
;
}
if
(
msgId
==
NULL
){
sprintf
(
msgIdbuf
,
"%d"
,
iotx_report_id
());
}
else
{
memcpy
(
msgIdbuf
,
msgId
,
strlen
(
msgId
));
}
pSceneShadow
=
kk_scene_shadow
();
if
(
pSceneShadow
!=
NULL
){
kk_tsl_set_value
(
kk_tsl_set_event_output_value
,
pSceneShadow
,
MSG_SCENE_EXECUTENOTIFICATION_SCENEID
,
NULL
,
sceneId
);
dm_msg_scene_event_post
(
MSG_SCENE_EXECUTENOTIFICATION
,
pSceneShadow
,
msgIdbuf
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment