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
f974fdf8
Commit
f974fdf8
authored
Aug 06, 2021
by
chen.weican
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【修改内容】1,增加情景面板的支持
【提交人】陈伟灿
parent
a869b387
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
467 additions
and
39 deletions
+467
-39
common/hal/HAL_OS_linux.c
common/hal/HAL_OS_linux.c
+9
-0
common/hal/kk_hal.h
common/hal/kk_hal.h
+1
-0
midware/midware/dm/kk_dm_mng.c
midware/midware/dm/kk_dm_mng.c
+45
-18
midware/midware/dm/kk_dm_mng.h
midware/midware/dm/kk_dm_mng.h
+1
-1
midware/midware/dm/kk_dm_msg.c
midware/midware/dm/kk_dm_msg.c
+11
-6
midware/midware/dm/kk_dm_msg.h
midware/midware/dm/kk_dm_msg.h
+3
-0
midware/midware/dm/kk_linkkit.c
midware/midware/dm/kk_linkkit.c
+131
-10
midware/midware/dm/kk_sync_data.c
midware/midware/dm/kk_sync_data.c
+1
-1
midware/midware/midware.c
midware/midware/midware.c
+13
-0
midware/midware/scene/kk_scene_db.c
midware/midware/scene/kk_scene_db.c
+159
-0
midware/midware/scene/kk_scene_db.h
midware/midware/scene/kk_scene_db.h
+13
-1
midware/midware/scene/kk_scene_handle.c
midware/midware/scene/kk_scene_handle.c
+80
-2
No files found.
common/hal/HAL_OS_linux.c
View file @
f974fdf8
...
...
@@ -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
)
{
...
...
common/hal/kk_hal.h
View file @
f974fdf8
...
...
@@ -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
);
...
...
midware/midware/dm/kk_dm_mng.c
View file @
f974fdf8
...
...
@@ -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
(
voi
d
)
int
iotx_report_id
(
char
*
msgI
d
)
{
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
);
...
...
midware/midware/dm/kk_dm_mng.h
View file @
f974fdf8
...
...
@@ -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
(
voi
d
);
int
iotx_report_id
(
char
*
msgI
d
);
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
);
...
...
midware/midware/dm/kk_dm_msg.c
View file @
f974fdf8
...
...
@@ -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
);
...
...
midware/midware/dm/kk_dm_msg.h
View file @
f974fdf8
...
...
@@ -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
],
...
...
midware/midware/dm/kk_linkkit.c
View file @
f974fdf8
...
...
@@ -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
"
);
}
...
...
midware/midware/dm/kk_sync_data.c
View file @
f974fdf8
...
...
@@ -548,7 +548,7 @@ char *kk_sync_get_info()
kk_get_scenes_info
(
data
);
HAL_Get
Device_Code
(
ccu_deviceCode
);
HAL_Get
_ccuid
(
ccu_deviceCode
);
HAL_GetProduct_Code
(
ccu_productCode
);
...
...
midware/midware/midware.c
View file @
f974fdf8
...
...
@@ -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
;
...
...
midware/midware/scene/kk_scene_db.c
View file @
f974fdf8
...
...
@@ -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
*输出参数: 无
...
...
midware/midware/scene/kk_scene_db.h
View file @
f974fdf8
...
...
@@ -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
midware/midware/scene/kk_scene_handle.c
View file @
f974fdf8
...
...
@@ -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
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