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
32454dee
Commit
32454dee
authored
Sep 30, 2020
by
chen.weican
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【修改内容】1,增加roomid唯一性;2,暂时增加timer设置通路,具体timer定时处理后续还需添加。
【提交人】陈伟灿
parent
2f74adb5
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
424 additions
and
22 deletions
+424
-22
application/kcloud/kcloud_data_handle.c
application/kcloud/kcloud_data_handle.c
+6
-3
common/api/com_api.h
common/api/com_api.h
+14
-0
midware/midware/area/id.c
midware/midware/area/id.c
+61
-0
midware/midware/area/id.h
midware/midware/area/id.h
+40
-0
midware/midware/area/kk_area_handle.c
midware/midware/area/kk_area_handle.c
+8
-6
midware/midware/dm/kk_dm_mng.c
midware/midware/dm/kk_dm_mng.c
+74
-0
midware/midware/dm/kk_dm_msg.c
midware/midware/dm/kk_dm_msg.c
+18
-3
midware/midware/dm/kk_dm_msg.h
midware/midware/dm/kk_dm_msg.h
+6
-0
midware/midware/dm/kk_linkkit.c
midware/midware/dm/kk_linkkit.c
+131
-8
midware/tsl/tsl_handle/kk_tsl_api.c
midware/tsl/tsl_handle/kk_tsl_api.c
+59
-1
platform/zigbee/app/builder/Z3GatewayHost/ZB/kk_device_manager.c
...m/zigbee/app/builder/Z3GatewayHost/ZB/kk_device_manager.c
+7
-1
No files found.
application/kcloud/kcloud_data_handle.c
View file @
32454dee
...
@@ -30,6 +30,8 @@
...
@@ -30,6 +30,8 @@
#define KK_CLOUDSTATE_MSG "/thing/ccu/cloudstate"
#define KK_CLOUDSTATE_MSG "/thing/ccu/cloudstate"
#define KK_CLOUDSTATE_MSG_REPLY "/thing/ccu/cloudstate_reply"
#define KK_CLOUDSTATE_MSG_REPLY "/thing/ccu/cloudstate_reply"
#define KK_TOPO_CHANGE_MSG_STR "/thing/topo/change"
#define KK_TOPO_CHANGE_MSG_STR "/thing/topo/change"
#define KK_FILTER_SERVICE_CALL_TOPIC "/thing/service/"
#define KK_FILTER_SERVICE_CALL_REPLY "_reply"
const
char
DM_MSG_TO_MIDDWARE
[]
=
"{
\"
msgtype
\"
:
\"
%s
\"
,
\"
productCode
\"
:
\"
%s
\"
,
\"
deviceCode
\"
:
\"
%s
\"
}"
;
const
char
DM_MSG_TO_MIDDWARE
[]
=
"{
\"
msgtype
\"
:
\"
%s
\"
,
\"
productCode
\"
:
\"
%s
\"
,
\"
deviceCode
\"
:
\"
%s
\"
}"
;
#define KK_TOPIC_SERVICE_DELIMITER '/'
#define KK_TOPIC_SERVICE_DELIMITER '/'
...
@@ -220,9 +222,6 @@ static int _check_invalid_topic(const char* topic)
...
@@ -220,9 +222,6 @@ static int _check_invalid_topic(const char* topic)
else
if
(
strstr
(
topic
,
KK_FILTER_LOGIN_TOPIC
)
!=
NULL
&&
\
else
if
(
strstr
(
topic
,
KK_FILTER_LOGIN_TOPIC
)
!=
NULL
&&
\
strstr
(
topic
,
KK_FILTER_LOGIN_TOPIC_REPLY
)
==
NULL
){
strstr
(
topic
,
KK_FILTER_LOGIN_TOPIC_REPLY
)
==
NULL
){
return
1
;
return
1
;
}
else
if
(
strstr
(
topic
,
KK_FILTER_SET_TOPIC_REPLY
)
!=
NULL
){
return
1
;
}
}
else
if
(
strstr
(
topic
,
KK_FILTER_TOPO_CHANEG_REPLY
)
!=
NULL
){
else
if
(
strstr
(
topic
,
KK_FILTER_TOPO_CHANEG_REPLY
)
!=
NULL
){
return
1
;
return
1
;
...
@@ -232,6 +231,10 @@ static int _check_invalid_topic(const char* topic)
...
@@ -232,6 +231,10 @@ static int _check_invalid_topic(const char* topic)
strstr
(
topic
,
KK_FILTER_EVENT_POST_REPLY
)
==
NULL
){
strstr
(
topic
,
KK_FILTER_EVENT_POST_REPLY
)
==
NULL
){
return
1
;
return
1
;
}
}
else
if
(
strstr
(
topic
,
KK_FILTER_SERVICE_CALL_TOPIC
)
!=
NULL
&&
\
strstr
(
topic
,
KK_FILTER_SERVICE_CALL_REPLY
)
!=
NULL
){
return
1
;
}
else
if
(
strstr
(
topic
,
KK_FILTER_STATUS_ONLINE
)
!=
NULL
&&
\
else
if
(
strstr
(
topic
,
KK_FILTER_STATUS_ONLINE
)
!=
NULL
&&
\
strstr
(
topic
,
KK_FILTER_STATUS_ONLINE_REPLY
)
==
NULL
){
strstr
(
topic
,
KK_FILTER_STATUS_ONLINE_REPLY
)
==
NULL
){
return
1
;
return
1
;
...
...
common/api/com_api.h
View file @
32454dee
...
@@ -47,6 +47,20 @@ typedef enum {
...
@@ -47,6 +47,20 @@ typedef enum {
#define MSG_AREA_ROOM_ACTION "action"
#define MSG_AREA_ROOM_ACTION "action"
#define MSG_AREA_ADDROOM_NOTIFICATION "addRoomNotification"
#define MSG_AREA_ADDROOM_NOTIFICATION "addRoomNotification"
#define MSG_AREA_ADDROOM_NOTIFICATION_ROOMID "addRoomNotification.roomId"
#define MSG_AREA_ADDROOM_NOTIFICATION_ROOMID "addRoomNotification.roomId"
#define MSG_TIMER_SETLOCALTIMER_LOCALTIMER "LocalTimer"
#define MSG_TIMER_SETLOCALTIMER_TIMER "Timer"
#define MSG_TIMER_SETLOCALTIMER_ENABLE "Enable"
#define MSG_TIMER_SETLOCALTIMER_ISVALID "IsValid"
#define MSG_TIMER_SETLOCALTIMER_ZONEOFFSET "TimezoneOffset"
#define MSG_TIMER_SETLOCALTIMER_TARGETS "Targets"
#define MSG_TIMER_GETLOCALTIMER_GETLOCALTIMER "getLocalTimer"
#define MSG_REBOOT_REBOOTNOTIFICATION "rebootNotification"
#define MSG_TIMER_SETCOUNTDOWN_COUNTDOWN "CountDown"
#define MSG_TIMER_SETCOUNTDOWN_DELAYTIME "DelayTime"
#define MSG_TIMER_SETCOUNTDOWN_CURRENTTIME "CurrentTime"
#define MSG_TIMER_SETCOUNTDOWN_GETCOUNTDOWN "getCountDown"
#define MSG_PROPERTY_STR "property"
...
...
midware/midware/area/id.c
0 → 100644
View file @
32454dee
#include "id.h"
struct
globle
g_info
;
#define sequenceMask (-1L ^ (-1L << 12L))
void
set_workid
(
int
workid
)
{
g_info
.
workid
=
workid
;
}
pid_t
gettid
(
void
)
{
return
syscall
(
__NR_gettid
);
}
uint64_t
get_curr_ms
()
{
struct
timeval
time_now
;
gettimeofday
(
&
time_now
,
NULL
);
uint64_t
ms_time
=
time_now
.
tv_sec
*
1000
+
time_now
.
tv_usec
/
1000
;
return
ms_time
;
}
uint64_t
wait_next_ms
(
uint64_t
lastStamp
)
{
uint64_t
cur
=
0
;
do
{
cur
=
get_curr_ms
();
}
while
(
cur
<=
lastStamp
);
return
cur
;
}
int
atomic_incr
(
int
id
)
{
__sync_add_and_fetch
(
&
id
,
1
);
return
id
;
}
uint64_t
get_unique_id
()
{
uint64_t
uniqueId
=
0
;
uint64_t
nowtime
=
get_curr_ms
();
uniqueId
=
nowtime
<<
22
;
uniqueId
|=
(
g_info
.
workid
&
0x3ff
)
<<
12
;
if
(
nowtime
<
g_info
.
last_stamp
)
{
perror
(
"error"
);
exit
(
-
1
);
}
if
(
nowtime
==
g_info
.
last_stamp
)
{
g_info
.
seqid
=
atomic_incr
(
g_info
.
seqid
)
&
sequenceMask
;
if
(
g_info
.
seqid
==
0
)
{
nowtime
=
wait_next_ms
(
g_info
.
last_stamp
);
}
}
else
{
g_info
.
seqid
=
0
;
}
g_info
.
last_stamp
=
nowtime
;
uniqueId
|=
g_info
.
seqid
;
return
uniqueId
;
}
midware/midware/area/id.h
0 → 100644
View file @
32454dee
/*
snowflake
ID 生成策略
毫秒级时间41位+机器ID 10位+毫秒内序列12位。
0 41 51 64 +-----------+------+------+ |time |pc |inc | +-----------+------+------+
前41bits是以微秒为单位的timestamp。
接着10bits是事先配置好的机器ID。
最后12bits是累加计数器。
macheine id(10bits)标明最多只能有1024台机器同时产生ID,sequence number(12bits)也标明1台机器1ms中最多产生4096个ID, *
注意点,因为使用到位移运算,所以需要64位操作系统,不然生成的ID会有可能不正确
*/
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
#include <sched.h>
#include <linux/unistd.h>
#include <sys/syscall.h>
#include <errno.h>
#include<linux/types.h>
#include<time.h>
#include <stdint.h>
#include <sys/time.h>
struct
globle
{
int
global_int
:
12
;
uint64_t
last_stamp
;
int
workid
;
int
seqid
;
};
void
set_workid
(
int
workid
);
pid_t
gettid
(
void
);
uint64_t
get_curr_ms
();
uint64_t
wait_next_ms
(
uint64_t
lastStamp
);
int
atomic_incr
(
int
id
);
uint64_t
get_unique_id
();
\ No newline at end of file
midware/midware/area/kk_area_handle.c
View file @
32454dee
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
#include "kk_log.h"
#include "kk_log.h"
#include "kk_area_handle.h"
#include "kk_area_handle.h"
#define KK_AREA_DB_FILE "kk_area.db"
#define KK_AREA_DB_FILE "
/usr/kk/
kk_area.db"
static
kk_dev_list_t
*
s_device_list
=
NULL
;
static
kk_dev_list_t
*
s_device_list
=
NULL
;
...
@@ -105,7 +105,7 @@ int kk_area_init(void)
...
@@ -105,7 +105,7 @@ int kk_area_init(void)
{
{
int
res
=
0
;
int
res
=
0
;
kk_area_ctx_t
*
ctx
=
_kk_area_get_ctx
();
kk_area_ctx_t
*
ctx
=
_kk_area_get_ctx
();
set_workid
(
100
);
/* Create Mutex */
/* Create Mutex */
ctx
->
mutex
=
HAL_MutexCreate
();
ctx
->
mutex
=
HAL_MutexCreate
();
if
(
ctx
->
mutex
==
NULL
)
{
if
(
ctx
->
mutex
==
NULL
)
{
...
@@ -122,19 +122,21 @@ int kk_area_init(void)
...
@@ -122,19 +122,21 @@ int kk_area_init(void)
}
}
in
t
kk_room_add
(
const
char
*
name
)
uint64_
t
kk_room_add
(
const
char
*
name
)
{
{
int
res
=
0
;
int
res
=
0
;
kk_area_ctx_t
*
ctx
=
_kk_area_get_ctx
();
kk_area_ctx_t
*
ctx
=
_kk_area_get_ctx
();
char
*
sqlCmd
=
NULL
;
char
*
sqlCmd
=
NULL
;
char
roomId
[
10
]
=
{
0
};
char
roomId
[
32
]
=
{
0
};
char
*
zErrMsg
=
0
;
char
*
zErrMsg
=
0
;
uint64_t
u64RoomId
=
0
;
const
char
*
insertCmd
=
"insert into AreaInfo (name, roomId) \
const
char
*
insertCmd
=
"insert into AreaInfo (name, roomId) \
values ('%s','%s');"
;
values ('%s','%s');"
;
_kk_area_lock
();
_kk_area_lock
();
ctx
->
roomNum
++
;
ctx
->
roomNum
++
;
sprintf
(
roomId
,
"%d"
,
ctx
->
roomNum
);
u64RoomId
=
get_unique_id
();
sprintf
(
roomId
,
"%u"
,
u64RoomId
);
sqlCmd
=
sqlite3_mprintf
(
insertCmd
,
name
,
roomId
);
sqlCmd
=
sqlite3_mprintf
(
insertCmd
,
name
,
roomId
);
res
=
sqlite3_exec
(
ctx
->
pDb
,
sqlCmd
,
NULL
,
NULL
,
&
zErrMsg
);
res
=
sqlite3_exec
(
ctx
->
pDb
,
sqlCmd
,
NULL
,
NULL
,
&
zErrMsg
);
...
@@ -146,7 +148,7 @@ int kk_room_add(const char *name)
...
@@ -146,7 +148,7 @@ int kk_room_add(const char *name)
}
}
sqlite3_free
(
sqlCmd
);
sqlite3_free
(
sqlCmd
);
_kk_area_unlock
();
_kk_area_unlock
();
return
ctx
->
roomNum
;
return
u64RoomId
;
}
}
int
kk_room_delete
(
const
char
*
roomId
)
int
kk_room_delete
(
const
char
*
roomId
)
...
...
midware/midware/dm/kk_dm_mng.c
View file @
32454dee
...
@@ -549,6 +549,52 @@ static int _dm_mgr_upstream_request_assemble(_IN_ int msgid, _IN_ int devid,
...
@@ -549,6 +549,52 @@ static int _dm_mgr_upstream_request_assemble(_IN_ int msgid, _IN_ int devid,
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
const
char
DM_URI_THING_SERVICE_POST
[]
=
"/thing/service/%s_reply"
;
const
char
DM_MSG_THING_UPSTREAM_SERVICE_PARAMS
[]
DM_READ_ONLY
=
"%s"
;
static
int
_dm_mgr_upstream_service_assemble
(
_IN_
int
msgid
,
_IN_
int
devid
,
_IN_
char
*
identify
,
_IN_
char
*
params
,
_IN_
int
params_len
,
_IN_
char
*
method
,
_OU_
dm_msg_request_t
*
request
)
{
int
res
=
0
;
dm_mgr_dev_node_t
*
node
=
NULL
;
int
paramLen
=
0
;
int
msgTypeLen
=
0
;
char
*
payload_param
=
NULL
;
res
=
dm_mgr_search_dev_by_devid
(
devid
,
&
node
);
if
(
res
!=
SUCCESS_RETURN
)
{
return
FAIL_RETURN
;
}
/* dm_log_debug("Time Stamp: %s", timestamp); */
paramLen
=
strlen
(
DM_MSG_THING_UPSTREAM_SERVICE_PARAMS
)
+
params_len
+
1
;
payload_param
=
malloc
(
paramLen
);
if
(
payload_param
==
NULL
)
{
return
MEMORY_NOT_ENOUGH
;
}
memset
(
payload_param
,
0
,
paramLen
);
HAL_Snprintf
(
payload_param
,
paramLen
,
DM_MSG_THING_UPSTREAM_REQUEST_PARAMS
,
params
);
request
->
msgid
=
msgid
;
request
->
devid
=
devid
;
msgTypeLen
=
strlen
(
DM_URI_THING_SERVICE_POST
)
+
strlen
(
identify
)
+
1
;
request
->
msgTypeStr
=
malloc
(
msgTypeLen
);
if
(
request
->
msgTypeStr
==
NULL
){
return
MEMORY_NOT_ENOUGH
;
}
memset
(
request
->
msgTypeStr
,
0x0
,
msgTypeLen
);
snprintf
(
request
->
msgTypeStr
,
msgTypeLen
,
DM_URI_THING_SERVICE_POST
,
identify
);
memcpy
(
request
->
productCode
,
node
->
productCode
,
strlen
(
node
->
productCode
));
memcpy
(
request
->
deviceCode
,
node
->
deviceCode
,
strlen
(
node
->
deviceCode
));
request
->
params
=
payload_param
;
request
->
params_len
=
paramLen
;
request
->
method
=
method
;
return
SUCCESS_RETURN
;
}
static
unsigned
int
g_report_id
=
1
;
static
unsigned
int
g_report_id
=
1
;
int
iotx_report_id
(
void
)
int
iotx_report_id
(
void
)
...
@@ -609,6 +655,34 @@ int dm_mgr_upstream_thing_event_post(_IN_ int devid, _IN_ char *identifier, _IN_
...
@@ -609,6 +655,34 @@ int dm_mgr_upstream_thing_event_post(_IN_ int devid, _IN_ char *identifier, _IN_
return
res
;
return
res
;
}
}
int
dm_mgr_upstream_thing_service_post
(
_IN_
int
devid
,
_IN_
char
*
identifier
,
_IN_
int
identifier_len
,
_IN_
char
*
method
,
_IN_
char
*
payload
,
_IN_
int
payload_len
)
{
int
res
=
0
;
dm_msg_request_t
request
;
if
(
devid
<
0
||
identifier
==
NULL
||
identifier_len
<=
0
||
method
==
NULL
||
payload
==
NULL
||
payload_len
<=
0
)
{
return
INVALID_PARAMETER
;
}
memset
(
&
request
,
0
,
sizeof
(
dm_msg_request_t
));
res
=
_dm_mgr_upstream_service_assemble
(
iotx_report_id
(),
devid
,
identifier
,
payload
,
payload_len
,
method
,
&
request
);
if
(
res
!=
SUCCESS_RETURN
)
{
return
FAIL_RETURN
;
}
/* Callback */
//request.callback = dm_client_thing_event_post_reply;
/* Send Message To Cloud */
res
=
dm_msg_request
(
&
request
,
0
);
free
(
request
.
msgTypeStr
);
free
(
request
.
params
);
return
res
;
}
const
char
DM_URI_THING_SERVICE_RESPONSE
[]
=
"/thing/service/%.*s_reply"
;
const
char
DM_URI_THING_SERVICE_RESPONSE
[]
=
"/thing/service/%.*s_reply"
;
static
int
_kk_mgr_upstream_response_assemble
(
_IN_
int
devid
,
_IN_
char
*
msgid
,
_IN_
int
msgid_len
,
static
int
_kk_mgr_upstream_response_assemble
(
_IN_
int
devid
,
_IN_
char
*
msgid
,
_IN_
int
msgid_len
,
_IN_
const
char
*
identfy
,
_IN_
int
code
,
_OU_
kk_msg_request_payload_t
*
request
,
_OU_
kk_msg_response_t
*
response
)
_IN_
const
char
*
identfy
,
_IN_
int
code
,
_OU_
kk_msg_request_payload_t
*
request
,
_OU_
kk_msg_response_t
*
response
)
...
...
midware/midware/dm/kk_dm_msg.c
View file @
32454dee
...
@@ -777,14 +777,15 @@ int dm_msg_thing_event_post(const char *deviceCode, const char *identifier)
...
@@ -777,14 +777,15 @@ int dm_msg_thing_event_post(const char *deviceCode, const char *identifier)
}
}
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
int
dm_msg_thing_service_post
(
const
char
*
deviceCode
,
const
char
*
identifier
,
int
response_id
,
int
code
)
int
dm_msg_thing_service_post
(
const
char
*
deviceCode
,
const
char
*
identifier
)
{
{
int
res
=
0
;
int
res
=
0
;
int
nums
=
0
;
int
nums
=
0
;
int
idx
=
0
;
int
idx
=
0
;
char
*
payload
=
NULL
;
char
*
payload
=
NULL
;
dm_mgr_dev_node_t
*
node
=
NULL
;
dm_mgr_dev_node_t
*
node
=
NULL
;
char
*
method
=
NULL
;
void
*
service
=
NULL
;
if
(
deviceCode
==
NULL
){
if
(
deviceCode
==
NULL
){
return
FAIL_RETURN
;
return
FAIL_RETURN
;
...
@@ -796,9 +797,23 @@ int dm_msg_thing_service_post(const char *deviceCode, const char *identifier,int
...
@@ -796,9 +797,23 @@ int dm_msg_thing_service_post(const char *deviceCode, const char *identifier,int
}
}
payload
=
kk_tsl_get_post_service_str
(
node
->
dev_shadow
,
identifier
);
payload
=
kk_tsl_get_post_service_str
(
node
->
dev_shadow
,
identifier
);
if
(
payload
!=
NULL
){
if
(
payload
!=
NULL
){
dm_mgr_deprecated_upstream_thing_service_response
(
node
->
devid
,
response_id
,
code
,
identifier
,
strlen
(
identifier
),
payload
,
strlen
(
payload
));
res
=
kk_tsl_get_service_by_identifier
(
node
->
dev_shadow
,
identifier
,
&
service
);
if
(
res
!=
SUCCESS_RETURN
)
{
free
(
payload
);
return
FAIL_RETURN
;
}
res
=
kk_tsl_get_service_method
(
service
,
&
method
);
if
(
res
!=
SUCCESS_RETURN
)
{
free
(
payload
);
return
FAIL_RETURN
;
}
dm_mgr_upstream_thing_service_post
(
node
->
devid
,
identifier
,
strlen
(
identifier
),
method
,
payload
,
strlen
(
payload
));
free
(
method
);
method
=
NULL
;
free
(
payload
);
free
(
payload
);
payload
=
NULL
;
payload
=
NULL
;
}
}
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
...
...
midware/midware/dm/kk_dm_msg.h
View file @
32454dee
...
@@ -61,6 +61,12 @@ const char DM_MSG_INFO[] DM_READ_ONLY;
...
@@ -61,6 +61,12 @@ const char DM_MSG_INFO[] DM_READ_ONLY;
#define KK_THING_SERVICE_ADDDEVICETOROOM "/thing/service/addDeviceToRoom"
#define KK_THING_SERVICE_ADDDEVICETOROOM "/thing/service/addDeviceToRoom"
#define KK_THING_SERVICE_REMOVEDEVICEFROMROOM "/thing/service/removeDeviceFromRoom"
#define KK_THING_SERVICE_REMOVEDEVICEFROMROOM "/thing/service/removeDeviceFromRoom"
#define KK_THING_SERVICE_EXECUTEROOM "/thing/service/executeRoom"
#define KK_THING_SERVICE_EXECUTEROOM "/thing/service/executeRoom"
#define KK_THING_SERVICE_SETLOCALTIMER "/thing/service/setLocalTimer"
#define KK_THING_SERVICE_GETLOCALTIMER "/thing/service/getLocalTimer"
#define KK_THING_SERVICE_SETCOUNTDOWN "/thing/service/setCountDown"
#define KK_THING_SERVICE_GETCOUNTDOWN "/thing/service/getCountDown"
#define KK_THING_EVENT_MESSAGE "/thing/event/"
#define KK_THING_EVENT_POST "/post"
...
...
midware/midware/dm/kk_linkkit.c
View file @
32454dee
...
@@ -262,7 +262,7 @@ static int kk_topo_delete_handle(cJSON *payload)
...
@@ -262,7 +262,7 @@ static int kk_topo_delete_handle(cJSON *payload)
static
int
kk_service_addRoom_handle
(
const
char
*
deviceCode
,
cJSON
*
params
)
static
int
kk_service_addRoom_handle
(
const
char
*
deviceCode
,
cJSON
*
params
)
{
{
dm_mgr_dev_node_t
*
node
=
NULL
;
dm_mgr_dev_node_t
*
node
=
NULL
;
char
roomId
[
10
]
=
{
0
};
char
roomId
[
32
]
=
{
0
};
int
res
=
0
;
int
res
=
0
;
int
idx
=
0
,
idxIpt
=
0
;
int
idx
=
0
,
idxIpt
=
0
;
int
start
=
0
,
serverNum
=
0
;
int
start
=
0
,
serverNum
=
0
;
...
@@ -281,8 +281,8 @@ static int kk_service_addRoom_handle(const char *deviceCode, cJSON *params)
...
@@ -281,8 +281,8 @@ static int kk_service_addRoom_handle(const char *deviceCode, cJSON *params)
if
(
roomInfoStr
==
NULL
){
if
(
roomInfoStr
==
NULL
){
return
FAIL_RETURN
;
return
FAIL_RETURN
;
}
}
in
t
id
=
kk_room_add
(
roomInfoStr
->
valuestring
);
uint64_
t
id
=
kk_room_add
(
roomInfoStr
->
valuestring
);
sprintf
(
roomId
,
"%
d
"
,
id
);
sprintf
(
roomId
,
"%
u
"
,
id
);
kk_tsl_set_value
(
kk_tsl_set_event_output_value
,
node
->
dev_shadow
,
MSG_AREA_ADDROOM_NOTIFICATION_ROOMID
,
NULL
,
roomId
);
kk_tsl_set_value
(
kk_tsl_set_event_output_value
,
node
->
dev_shadow
,
MSG_AREA_ADDROOM_NOTIFICATION_ROOMID
,
NULL
,
roomId
);
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
...
@@ -406,6 +406,102 @@ static int kk_service_executeRoom_handle(cJSON *params)
...
@@ -406,6 +406,102 @@ static int kk_service_executeRoom_handle(cJSON *params)
kk_free_room_dev_list
();
kk_free_room_dev_list
();
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
static
int
kk_service_setLocalTimer_handle
(
cJSON
*
params
,
const
char
*
deviceCode
)
{
int
res
=
0
;
kk_dev_list_t
*
pList
=
NULL
;
dm_mgr_dev_node_t
*
search_node
=
NULL
;
char
*
timer
=
NULL
,
*
targets
=
NULL
;
int
isEnable
=
0
,
isValid
=
0
,
zoneOffset
=
0
;
int
size
=
0
;
if
(
params
==
NULL
||
deviceCode
==
NULL
){
return
INVALID_PARAMETER
;
}
res
=
dm_mgr_get_device_by_devicecode
(
deviceCode
,
&
search_node
);
if
(
res
<
SUCCESS_RETURN
)
{
ERROR_PRINT
(
"dm_mgr_get_device_by_devicecode failed
\n
"
);
return
res
;
}
size
=
kk_service_get_array_size
(
search_node
->
dev_shadow
);
cJSON
*
LocalTimerArray
=
cJSON_GetObjectItem
(
params
,
MSG_TIMER_SETLOCALTIMER_LOCALTIMER
);
if
(
LocalTimerArray
==
NULL
){
return
FAIL_RETURN
;
}
cJSON
*
item
=
LocalTimerArray
->
child
;
while
(
item
!=
NULL
){
timer
=
cJSON_GetObjectItem
(
item
,
MSG_TIMER_SETLOCALTIMER_TIMER
)
->
valuestring
;
isEnable
=
cJSON_GetObjectItem
(
item
,
MSG_TIMER_SETLOCALTIMER_ENABLE
)
->
valueint
;
isValid
=
cJSON_GetObjectItem
(
item
,
MSG_TIMER_SETLOCALTIMER_ISVALID
)
->
valueint
;
zoneOffset
=
cJSON_GetObjectItem
(
item
,
MSG_TIMER_SETLOCALTIMER_ZONEOFFSET
)
->
valueint
;
targets
=
cJSON_GetObjectItem
(
item
,
MSG_TIMER_SETLOCALTIMER_TARGETS
)
->
valuestring
;
kk_service_localtimer_set
(
search_node
->
dev_shadow
,
timer
,
isEnable
,
isValid
,
zoneOffset
,
targets
,
size
);
item
=
item
->
next
;
}
return
SUCCESS_RETURN
;
}
static
int
kk_service_getLocalTimer_handle
(
const
char
*
deviceCode
)
{
if
(
deviceCode
==
NULL
){
return
INVALID_PARAMETER
;
}
dm_msg_thing_service_post
(
deviceCode
,
MSG_TIMER_GETLOCALTIMER_GETLOCALTIMER
);
return
SUCCESS_RETURN
;
}
static
int
kk_service_setCountDown_handle
(
cJSON
*
params
,
const
char
*
deviceCode
)
{
int
res
=
0
;
kk_dev_list_t
*
pList
=
NULL
;
dm_mgr_dev_node_t
*
search_node
=
NULL
;
char
*
targets
=
NULL
;
int
isEnable
=
0
,
isValid
=
0
,
delaytimer
=
0
,
current
=
0
;
int
size
=
0
;
if
(
params
==
NULL
||
deviceCode
==
NULL
){
return
INVALID_PARAMETER
;
}
res
=
dm_mgr_get_device_by_devicecode
(
deviceCode
,
&
search_node
);
if
(
res
<
SUCCESS_RETURN
)
{
ERROR_PRINT
(
"dm_mgr_get_device_by_devicecode failed
\n
"
);
return
res
;
}
size
=
kk_service_get_array_size
(
search_node
->
dev_shadow
);
printf
(
"[%s][%d]size:%d
\n
"
,
__FUNCTION__
,
__LINE__
,
size
);
cJSON
*
LocalTimerArray
=
cJSON_GetObjectItem
(
params
,
MSG_TIMER_SETCOUNTDOWN_COUNTDOWN
);
if
(
LocalTimerArray
==
NULL
){
return
FAIL_RETURN
;
}
cJSON
*
item
=
LocalTimerArray
->
child
;
while
(
item
!=
NULL
){
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
delaytimer
=
cJSON_GetObjectItem
(
item
,
MSG_TIMER_SETCOUNTDOWN_DELAYTIME
)
->
valueint
;
current
=
cJSON_GetObjectItem
(
item
,
MSG_TIMER_SETCOUNTDOWN_CURRENTTIME
)
->
valueint
;
isValid
=
cJSON_GetObjectItem
(
item
,
MSG_TIMER_SETLOCALTIMER_ISVALID
)
->
valueint
;
isEnable
=
cJSON_GetObjectItem
(
item
,
MSG_TIMER_SETLOCALTIMER_ENABLE
)
->
valueint
;
targets
=
cJSON_GetObjectItem
(
item
,
MSG_TIMER_SETLOCALTIMER_TARGETS
)
->
valuestring
;
kk_service_setCountDown_set
(
search_node
->
dev_shadow
,
delaytimer
,
current
,
isEnable
,
isValid
,
targets
,
size
);
item
=
item
->
next
;
}
return
SUCCESS_RETURN
;
}
static
int
kk_service_getCountDown_handle
(
const
char
*
deviceCode
)
{
if
(
deviceCode
==
NULL
){
return
INVALID_PARAMETER
;
}
dm_msg_thing_service_post
(
deviceCode
,
MSG_TIMER_SETCOUNTDOWN_GETCOUNTDOWN
);
return
SUCCESS_RETURN
;
}
static
void
_iotx_linkkit_event_callback
(
iotx_dm_event_types_t
type
,
char
*
data
)
static
void
_iotx_linkkit_event_callback
(
iotx_dm_event_types_t
type
,
char
*
data
)
{
{
//INFO_PRINT("_iotx_linkkit_event_callback ================== [%s]\n",data);
//INFO_PRINT("_iotx_linkkit_event_callback ================== [%s]\n",data);
...
@@ -506,36 +602,63 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
...
@@ -506,36 +602,63 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_REBOOT
)
==
0
){
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_REBOOT
)
==
0
){
INFO_PRINT
(
" reboot called!!!
\n
"
);
INFO_PRINT
(
" reboot called!!!
\n
"
);
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
info_root
,
MSG_DEVICE_CODE_STR
);
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
info_root
,
MSG_DEVICE_CODE_STR
);
dm_msg_thing_event_post
(
deviceCode
->
valuestring
,
"rebootNotification"
);
dm_msg_thing_event_post
(
deviceCode
->
valuestring
,
MSG_REBOOT_REBOOTNOTIFICATION
);
sleep
(
3
);
sleep
(
3
);
HAL_Reboot
();
HAL_Reboot
();
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_ADDROOM
)
==
0
){
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_ADDROOM
)
==
0
){
INFO_PRINT
(
" add
Room called
!!!
\n
"
);
INFO_PRINT
(
" add
room
!!!
\n
"
);
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
info_root
,
MSG_DEVICE_CODE_STR
);
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
info_root
,
MSG_DEVICE_CODE_STR
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_addRoom_handle
(
deviceCode
->
valuestring
,
paramStr
);
kk_service_addRoom_handle
(
deviceCode
->
valuestring
,
paramStr
);
dm_msg_thing_event_post
(
deviceCode
->
valuestring
,
MSG_AREA_ADDROOM_NOTIFICATION
);
dm_msg_thing_event_post
(
deviceCode
->
valuestring
,
MSG_AREA_ADDROOM_NOTIFICATION
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_DELETEROOM
)
==
0
){
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_DELETEROOM
)
==
0
){
INFO_PRINT
(
" delete room
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_deleteRoom_handle
(
paramStr
);
kk_service_deleteRoom_handle
(
paramStr
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_ADDDEVICETOROOM
)
==
0
){
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_ADDDEVICETOROOM
)
==
0
){
INFO_PRINT
(
" adddevicetoroom
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_addDeviceToRoom_handle
(
paramStr
);
kk_service_addDeviceToRoom_handle
(
paramStr
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_REMOVEDEVICEFROMROOM
)
==
0
){
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_REMOVEDEVICEFROMROOM
)
==
0
){
INFO_PRINT
(
" removedevicefromroom
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_removeDeviceFromRoom_handle
(
paramStr
);
kk_service_removeDeviceFromRoom_handle
(
paramStr
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_EXECUTEROOM
)
==
0
){
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_EXECUTEROOM
)
==
0
){
INFO_PRINT
(
" executeroom
\n
"
);
INFO_PRINT
(
" executeroom
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_executeRoom_handle
(
paramStr
);
kk_service_executeRoom_handle
(
paramStr
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_SETLOCALTIMER
)
==
0
){
INFO_PRINT
(
" setlocaltimer
\n
"
);
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
info_root
,
MSG_DEVICE_CODE_STR
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_setLocalTimer_handle
(
paramStr
,
deviceCode
->
valuestring
);
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_GETLOCALTIMER
)
==
0
){
INFO_PRINT
(
" getlocaltimer
\n
"
);
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
info_root
,
MSG_DEVICE_CODE_STR
);
kk_service_getLocalTimer_handle
(
deviceCode
->
valuestring
);
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_SETCOUNTDOWN
)
==
0
){
INFO_PRINT
(
" set count down
\n
"
);
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
info_root
,
MSG_DEVICE_CODE_STR
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_setCountDown_handle
(
paramStr
,
deviceCode
->
valuestring
);
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_GETCOUNTDOWN
)
==
0
){
INFO_PRINT
(
" get count down
\n
"
);
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
info_root
,
MSG_DEVICE_CODE_STR
);
printf
(
"[%s][%d]deviceCode->valuestring:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
deviceCode
->
valuestring
);
kk_service_getCountDown_handle
(
deviceCode
->
valuestring
);
}
else
{
else
{
INFO_PRINT
(
"Error msgtype!!!
\n
"
);
INFO_PRINT
(
"Error msgtype!!!
\n
"
);
...
...
midware/tsl/tsl_handle/kk_tsl_api.c
View file @
32454dee
...
@@ -419,7 +419,6 @@ static int _kk_set_event_output_value(_IN_ kk_tsl_t *dev_shadow, _IN_ char *key,
...
@@ -419,7 +419,6 @@ static int _kk_set_event_output_value(_IN_ kk_tsl_t *dev_shadow, _IN_ char *key,
void
*
data
=
NULL
;
void
*
data
=
NULL
;
kk_tsl_data_type_e
type
;
kk_tsl_data_type_e
type
;
if
(
dev_shadow
==
NULL
||
key
==
NULL
||
key_len
<=
0
||
((
value
==
NULL
)
&&
(
value_str
==
NULL
)))
{
if
(
dev_shadow
==
NULL
||
key
==
NULL
||
key_len
<=
0
||
((
value
==
NULL
)
&&
(
value_str
==
NULL
)))
{
return
INVALID_PARAMETER
;
return
INVALID_PARAMETER
;
}
}
...
@@ -1363,6 +1362,40 @@ int kk_tsl_get_event_by_identifier(_IN_ kk_tsl_t *dev_shadow, _IN_ char *identif
...
@@ -1363,6 +1362,40 @@ int kk_tsl_get_event_by_identifier(_IN_ kk_tsl_t *dev_shadow, _IN_ char *identif
return
_kk_tsl_get_event_by_identifier
(
dev_shadow
,
identifier
,
event
);
return
_kk_tsl_get_event_by_identifier
(
dev_shadow
,
identifier
,
event
);
}
}
static
int
_kk_tsl_get_service_by_identifier
(
_IN_
kk_tsl_t
*
shadow
,
_IN_
char
*
identifier
,
_OU_
void
**
service
)
{
int
index
=
0
;
kk_tsl_event_t
*
search_event
=
NULL
;
if
(
shadow
==
NULL
||
identifier
==
NULL
||
service
==
NULL
||
*
service
!=
NULL
)
{
return
INVALID_PARAMETER
;
}
for
(
index
=
0
;
index
<
shadow
->
service_number
;
index
++
)
{
search_event
=
shadow
->
services
+
index
;
if
((
strlen
(
search_event
->
identifier
)
==
strlen
(
identifier
))
&&
(
memcmp
(
search_event
->
identifier
,
identifier
,
strlen
(
identifier
))
==
0
))
{
*
service
=
(
void
*
)
search_event
;
return
SUCCESS_RETURN
;
}
}
return
FAIL_RETURN
;
}
int
kk_tsl_get_service_by_identifier
(
_IN_
kk_tsl_t
*
dev_shadow
,
_IN_
char
*
identifier
,
_OU_
void
**
service
)
{
int
res
=
0
;
if
(
dev_shadow
==
NULL
||
identifier
==
NULL
||
service
==
NULL
||
*
service
!=
NULL
)
{
return
INVALID_PARAMETER
;
}
return
_kk_tsl_get_service_by_identifier
(
dev_shadow
,
identifier
,
service
);
}
int
kk_tsl_get_event_method
(
_IN_
void
*
event
,
_OU_
char
**
method
)
int
kk_tsl_get_event_method
(
_IN_
void
*
event
,
_OU_
char
**
method
)
{
{
int
event_method_len
=
0
;
int
event_method_len
=
0
;
...
@@ -1477,6 +1510,31 @@ static char* _kk_tsl_send_service_response(_IN_ kk_tsl_t *dev_shadow,
...
@@ -1477,6 +1510,31 @@ static char* _kk_tsl_send_service_response(_IN_ kk_tsl_t *dev_shadow,
//free(payload);
//free(payload);
return
payload
;
return
payload
;
}
}
int
kk_tsl_get_service_method
(
_IN_
void
*
service
,
_OU_
char
**
method
)
{
int
service_method_len
=
0
;
const
char
*
identifier
=
NULL
;
const
char
*
service_method_fmt
=
"thing.service.%s_reply"
;
kk_tsl_service_t
*
service_item
=
(
kk_tsl_service_t
*
)
service
;
if
(
service_item
==
NULL
||
method
==
NULL
||
*
method
!=
NULL
)
{
return
INVALID_PARAMETER
;
}
identifier
=
(
const
char
*
)
service_item
->
identifier
;
service_method_len
=
(
strlen
(
service_method_fmt
)
+
strlen
(
identifier
)
+
1
);
*
method
=
malloc
(
service_method_len
);
if
(
*
method
==
NULL
)
{
return
MEMORY_NOT_ENOUGH
;
}
memset
(
*
method
,
0
,
service_method_len
);
snprintf
(
*
method
,
service_method_len
,
service_method_fmt
,
identifier
);
return
SUCCESS_RETURN
;
}
char
*
kk_tsl_get_post_service_str
(
kk_tsl_t
*
dev_shadow
,
const
char
*
service_identifier
)
char
*
kk_tsl_get_post_service_str
(
kk_tsl_t
*
dev_shadow
,
const
char
*
service_identifier
)
{
{
...
...
platform/zigbee/app/builder/Z3GatewayHost/ZB/kk_device_manager.c
View file @
32454dee
...
@@ -206,6 +206,9 @@ void kk_add_device_to_table(EmberEUI64 mac,EmberNodeId nodeId,uint16_t deviceId)
...
@@ -206,6 +206,9 @@ void kk_add_device_to_table(EmberEUI64 mac,EmberNodeId nodeId,uint16_t deviceId)
kk_device_table_add
(
mac
,
nodeId
,
NULL
,
deviceId
);
kk_device_table_add
(
mac
,
nodeId
,
NULL
,
deviceId
);
kk_device_db_insert
(
mac
,
nodeId
,
deviceId
,
""
);
kk_device_db_insert
(
mac
,
nodeId
,
deviceId
,
""
);
//kk_msg_report_dev_joined(mac,"85");
//kk_device_db_update(mac,nodeId,deviceId,"85");
//kk_device_config_map_add("85");
}
}
...
@@ -329,6 +332,7 @@ void kk_device_map_print(void )
...
@@ -329,6 +332,7 @@ void kk_device_map_print(void )
}
}
ptr
=
ptr
->
next
;
ptr
=
ptr
->
next
;
}
}
}
}
void
kk_load_dev_map_table
(
void
)
void
kk_load_dev_map_table
(
void
)
{
{
...
@@ -752,7 +756,7 @@ void kk_add_dev_config_map_table_to_list(cJSON * root,const char *productCode)
...
@@ -752,7 +756,7 @@ void kk_add_dev_config_map_table_to_list(cJSON * root,const char *productCode)
for
(
j
=
0
;
j
<
extraSize
;
j
++
){
for
(
j
=
0
;
j
<
extraSize
;
j
++
){
extraData
=
rpc_cJSON_GetArrayItem
(
extraRoot
,
j
);
extraData
=
rpc_cJSON_GetArrayItem
(
extraRoot
,
j
);
if
(
!
strcmp
(
"
3073
"
,
productCode
)){
if
(
!
strcmp
(
"
1022
"
,
productCode
)){
char
buffer
[
20
]
=
{
0
};
char
buffer
[
20
]
=
{
0
};
sprintf
(
buffer
,
"mode_%d"
,
j
+
1
);
sprintf
(
buffer
,
"mode_%d"
,
j
+
1
);
...
@@ -878,6 +882,8 @@ bool kk_device_config_map_add(const char *productCode)
...
@@ -878,6 +882,8 @@ bool kk_device_config_map_add(const char *productCode)
emberAfCorePrintln
(
"devfile:%s
\n
"
,
devfile
);
emberAfCorePrintln
(
"devfile:%s
\n
"
,
devfile
);
kk_device_config_map_load
(
devfile
,
productCode
);
kk_device_config_map_load
(
devfile
,
productCode
);
return
true
;
return
true
;
}
}
void
kk_device_config_map_print
(
void
)
void
kk_device_config_map_print
(
void
)
...
...
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