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
965f71af
Commit
965f71af
authored
Nov 24, 2020
by
chen.weican
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【修改内容】1,增加场景对于LIGHT和CURTAIN设备类型的支持;2,增加CCU主机版本号定义;3,其他细节修改
【提交人】陈伟灿
parent
524d27d1
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
550 additions
and
564 deletions
+550
-564
application/kcloud/kcloud_main.c
application/kcloud/kcloud_main.c
+1
-0
application/kcloud/mqtt_api.c
application/kcloud/mqtt_api.c
+1
-0
common/api/ccu_ver.h
common/api/ccu_ver.h
+7
-0
common/api/com_api.h
common/api/com_api.h
+2
-1
common/api/tcp_channel.c
common/api/tcp_channel.c
+67
-66
common/hal/HAL_OS_linux.c
common/hal/HAL_OS_linux.c
+3
-4
midware/midware/dm/kk_dm_msg.c
midware/midware/dm/kk_dm_msg.c
+8
-2
midware/midware/dm/kk_linkkit.c
midware/midware/dm/kk_linkkit.c
+277
-384
midware/midware/dm/kk_sub_db.c
midware/midware/dm/kk_sub_db.c
+76
-61
midware/midware/history/kk_history_db.c
midware/midware/history/kk_history_db.c
+60
-24
midware/midware/midware.c
midware/midware/midware.c
+6
-4
midware/midware/scene/kk_scene_handle.c
midware/midware/scene/kk_scene_handle.c
+41
-9
platform/zigbee/app/builder/Z3GatewayHost/ZB/dev_config_table/device_1035.json
...uilder/Z3GatewayHost/ZB/dev_config_table/device_1035.json
+1
-9
No files found.
application/kcloud/kcloud_main.c
View file @
965f71af
...
@@ -50,6 +50,7 @@ static int mqtt_start(void)
...
@@ -50,6 +50,7 @@ static int mqtt_start(void)
//INFO_PRINT("i am send now\n");
//INFO_PRINT("i am send now\n");
//KK_MQTT_SendMsg(TOPIC,"hello my world",2);
//KK_MQTT_SendMsg(TOPIC,"hello my world",2);
}
}
//INFO_PRINT(" %s \n",testStr);
}
}
INFO_PRINT
(
"MQTTAsync_destroy
\n
"
);
INFO_PRINT
(
"MQTTAsync_destroy
\n
"
);
...
...
application/kcloud/mqtt_api.c
View file @
965f71af
...
@@ -264,6 +264,7 @@ int KK_MQTT_SendMsg(char *topicName,const char *payload)
...
@@ -264,6 +264,7 @@ int KK_MQTT_SendMsg(char *topicName,const char *payload)
pubmsg
.
qos
=
QOS
;
pubmsg
.
qos
=
QOS
;
pubmsg
.
retained
=
0
;
pubmsg
.
retained
=
0
;
//cJSON_Minify(payload);
INFO_PRINT
(
"mqtt send payload :%s.
\n
"
,
payload
);
INFO_PRINT
(
"mqtt send payload :%s.
\n
"
,
payload
);
if
((
rc
=
MQTTAsync_sendMessage
(
s_Client
,
topicName
,
&
pubmsg
,
&
opts
))
!=
MQTTASYNC_SUCCESS
)
if
((
rc
=
MQTTAsync_sendMessage
(
s_Client
,
topicName
,
&
pubmsg
,
&
opts
))
!=
MQTTASYNC_SUCCESS
)
...
...
common/api/ccu_ver.h
0 → 100644
View file @
965f71af
#ifndef _KK_CCU_VER_H_
#define _KK_CCU_VER_H_
#define KK_CCU_VERSION "1.1.0"
#endif
common/api/com_api.h
View file @
965f71af
...
@@ -27,7 +27,8 @@ typedef enum {
...
@@ -27,7 +27,8 @@ typedef enum {
IPC_PLAT2MID
,
IPC_PLAT2MID
,
IPC_UNDEF
IPC_UNDEF
}
ipc_type
;
}
ipc_type
;
#define MSG_COMMON_MSGID "msgId"
#define MSG_TYPE_STR "msgtype"
#define MSG_TYPE_STR "msgtype"
#define MSG_PRODUCT_TYPE_STR "productType"
#define MSG_PRODUCT_TYPE_STR "productType"
#define MSG_PRODUCT_CODE_STR "productCode"
#define MSG_PRODUCT_CODE_STR "productCode"
...
...
common/api/tcp_channel.c
View file @
965f71af
...
@@ -11,7 +11,8 @@
...
@@ -11,7 +11,8 @@
#include <sys/types.h>
#include <sys/types.h>
#include <string.h>
#include <string.h>
#include "com_api.h"
#include "com_api.h"
#include "kk_log.h"
#define CCU_TCP_PORT 16565
#define CCU_TCP_PORT 16565
#define BUFFER_SIZE 1024
#define BUFFER_SIZE 1024
#define MAX_LISTEN_NUM 10
#define MAX_LISTEN_NUM 10
...
@@ -44,7 +45,7 @@ static void *_MutexCreate(void)
...
@@ -44,7 +45,7 @@ static void *_MutexCreate(void)
}
}
if
(
0
!=
(
err_num
=
pthread_mutex_init
(
mutex
,
NULL
)))
{
if
(
0
!=
(
err_num
=
pthread_mutex_init
(
mutex
,
NULL
)))
{
printf
(
"create mutex failed"
);
INFO_PRINT
(
"create mutex failed"
);
free
(
mutex
);
free
(
mutex
);
return
NULL
;
return
NULL
;
}
}
...
@@ -57,11 +58,11 @@ static void _MutexDestroy(void *mutex)
...
@@ -57,11 +58,11 @@ static void _MutexDestroy(void *mutex)
int
err_num
;
int
err_num
;
if
(
!
mutex
)
{
if
(
!
mutex
)
{
printf
(
"mutex want to destroy is NULL!"
);
INFO_PRINT
(
"mutex want to destroy is NULL!"
);
return
;
return
;
}
}
if
(
0
!=
(
err_num
=
pthread_mutex_destroy
((
pthread_mutex_t
*
)
mutex
)))
{
if
(
0
!=
(
err_num
=
pthread_mutex_destroy
((
pthread_mutex_t
*
)
mutex
)))
{
printf
(
"destroy mutex failed"
);
INFO_PRINT
(
"destroy mutex failed"
);
}
}
free
(
mutex
);
free
(
mutex
);
...
@@ -71,7 +72,7 @@ static void _MutexLock(void *mutex)
...
@@ -71,7 +72,7 @@ static void _MutexLock(void *mutex)
{
{
int
err_num
;
int
err_num
;
if
(
0
!=
(
err_num
=
pthread_mutex_lock
((
pthread_mutex_t
*
)
mutex
)))
{
if
(
0
!=
(
err_num
=
pthread_mutex_lock
((
pthread_mutex_t
*
)
mutex
)))
{
printf
(
"lock mutex failed: - '%s' (%d)"
,
strerror
(
err_num
),
err_num
);
INFO_PRINT
(
"lock mutex failed: - '%s' (%d)"
,
strerror
(
err_num
),
err_num
);
}
}
}
}
...
@@ -79,7 +80,7 @@ static void _MutexUnlock(void *mutex)
...
@@ -79,7 +80,7 @@ static void _MutexUnlock(void *mutex)
{
{
int
err_num
;
int
err_num
;
if
(
0
!=
(
err_num
=
pthread_mutex_unlock
((
pthread_mutex_t
*
)
mutex
)))
{
if
(
0
!=
(
err_num
=
pthread_mutex_unlock
((
pthread_mutex_t
*
)
mutex
)))
{
printf
(
"unlock mutex failed - '%s' (%d)"
,
strerror
(
err_num
),
err_num
);
INFO_PRINT
(
"unlock mutex failed - '%s' (%d)"
,
strerror
(
err_num
),
err_num
);
}
}
}
}
...
@@ -182,7 +183,7 @@ static char* __do_spilt(char* buf, int buflen,ipc_cb* cb, char* deviceCode){
...
@@ -182,7 +183,7 @@ static char* __do_spilt(char* buf, int buflen,ipc_cb* cb, char* deviceCode){
while
(
buflen
>
0
){
while
(
buflen
>
0
){
pInx
+=
slen
+
1
;
pInx
+=
slen
+
1
;
slen
=
strlen
(
pInx
);
slen
=
strlen
(
pInx
);
printf
(
"read_cb slen ====================================slen[%d]
\n
"
,
slen
);
INFO_PRINT
(
"read_cb slen ====================================slen[%d]
\n
"
,
slen
);
if
(
cb
!=
NULL
){
if
(
cb
!=
NULL
){
cb
(
pInx
,
slen
,
deviceCode
);
cb
(
pInx
,
slen
,
deviceCode
);
}
}
...
@@ -222,14 +223,14 @@ static void kk_gw_list_load(void)
...
@@ -222,14 +223,14 @@ static void kk_gw_list_load(void)
fp
=
fopen
(
"gwlist.txt"
,
"r"
);
fp
=
fopen
(
"gwlist.txt"
,
"r"
);
if
(
!
fp
)
{
if
(
!
fp
)
{
printf
(
"open gatewaylist.txt failed!
\n
"
);
INFO_PRINT
(
"open gatewaylist.txt failed!
\n
"
);
goto
error1
;
goto
error1
;
}
}
char
buf
[
1024
]
=
{
0
};
char
buf
[
1024
]
=
{
0
};
retLen
=
fread
(
g_tcp_ctrl
,
readLen
,
1
,
fp
);
retLen
=
fread
(
g_tcp_ctrl
,
readLen
,
1
,
fp
);
printf
(
"read gatewaylist.txt retLen= %d, readLen=%d !
\n
"
,
retLen
,
readLen
);
INFO_PRINT
(
"read gatewaylist.txt retLen= %d, readLen=%d !
\n
"
,
retLen
,
readLen
);
if
(
retLen
!=
readLen
){
if
(
retLen
!=
readLen
){
printf
(
"read gatewaylist.txt failed!
\n
"
);
INFO_PRINT
(
"read gatewaylist.txt failed!
\n
"
);
}
}
fclose
(
fp
);
fclose
(
fp
);
...
@@ -237,7 +238,7 @@ static void kk_gw_list_load(void)
...
@@ -237,7 +238,7 @@ static void kk_gw_list_load(void)
// Set the rest of the device table to null.
// Set the rest of the device table to null.
error1:
error1:
for
(
i
=
0
;
i
<
MAX_LISTEN_NUM
;
i
++
)
{
for
(
i
=
0
;
i
<
MAX_LISTEN_NUM
;
i
++
)
{
printf
(
"deviceCode ip sock [%s] [%s] [%d]
\n
"
,
g_tcp_ctrl
[
i
].
deviceCode
,
INFO_PRINT
(
"deviceCode ip sock [%s] [%s] [%d]
\n
"
,
g_tcp_ctrl
[
i
].
deviceCode
,
g_tcp_ctrl
[
i
].
ip
==
NULL
?
""
:
g_tcp_ctrl
[
i
].
ip
,
g_tcp_ctrl
[
i
].
sock
);
g_tcp_ctrl
[
i
].
ip
==
NULL
?
""
:
g_tcp_ctrl
[
i
].
ip
,
g_tcp_ctrl
[
i
].
sock
);
g_tcp_ctrl
[
i
].
sock
=
-
1
;
g_tcp_ctrl
[
i
].
sock
=
-
1
;
}
}
...
@@ -282,10 +283,10 @@ static kk_tcp_ctrl_t* get_channel_by_ip(char ip[MAX_IP_LEN]){
...
@@ -282,10 +283,10 @@ static kk_tcp_ctrl_t* get_channel_by_ip(char ip[MAX_IP_LEN]){
return
NULL
;
return
NULL
;
}
}
printf
(
"[%s] ip=%s
\n
"
,
__FUNCTION__
,
ip
);
INFO_PRINT
(
"[%s] ip=%s
\n
"
,
__FUNCTION__
,
ip
);
for
(;
i
<
MAX_LISTEN_NUM
;
i
++
){
for
(;
i
<
MAX_LISTEN_NUM
;
i
++
){
if
(
strcmp
(
ip
,
g_tcp_ctrl
[
i
].
ip
)
==
0
){
if
(
strcmp
(
ip
,
g_tcp_ctrl
[
i
].
ip
)
==
0
){
printf
(
"[%s] idx=%d ip=%s sock=%d
\n
"
,
__FUNCTION__
,
i
,
ip
,
g_tcp_ctrl
[
i
].
sock
);
INFO_PRINT
(
"[%s] idx=%d ip=%s sock=%d
\n
"
,
__FUNCTION__
,
i
,
ip
,
g_tcp_ctrl
[
i
].
sock
);
return
&
g_tcp_ctrl
[
i
];
return
&
g_tcp_ctrl
[
i
];
}
}
}
}
...
@@ -333,17 +334,17 @@ static int set_sock_by_ip(char ip[MAX_IP_LEN], int sock){
...
@@ -333,17 +334,17 @@ static int set_sock_by_ip(char ip[MAX_IP_LEN], int sock){
if
(
ip
==
NULL
||
strlen
(
ip
)
==
0
){
if
(
ip
==
NULL
||
strlen
(
ip
)
==
0
){
return
-
1
;
return
-
1
;
}
}
printf
(
"[%s] ip=%s
\n
"
,
__FUNCTION__
,
ip
);
INFO_PRINT
(
"[%s] ip=%s
\n
"
,
__FUNCTION__
,
ip
);
for
(;
i
<
MAX_LISTEN_NUM
;
i
++
){
for
(;
i
<
MAX_LISTEN_NUM
;
i
++
){
if
(
strcmp
(
ip
,
g_tcp_ctrl
[
i
].
ip
)
==
0
){
if
(
strcmp
(
ip
,
g_tcp_ctrl
[
i
].
ip
)
==
0
){
g_tcp_ctrl
[
i
].
sock
=
sock
;
g_tcp_ctrl
[
i
].
sock
=
sock
;
printf
(
"[%s] idx=%d ip=%s sock=%d
\n
"
,
__FUNCTION__
,
i
,
ip
,
g_tcp_ctrl
[
i
].
sock
);
INFO_PRINT
(
"[%s] idx=%d ip=%s sock=%d
\n
"
,
__FUNCTION__
,
i
,
ip
,
g_tcp_ctrl
[
i
].
sock
);
//create mutex
//create mutex
if
(
g_tcp_ctrl
[
i
].
mutex
==
NULL
){
if
(
g_tcp_ctrl
[
i
].
mutex
==
NULL
){
g_tcp_ctrl
[
i
].
mutex
=
_MutexCreate
();
g_tcp_ctrl
[
i
].
mutex
=
_MutexCreate
();
if
(
g_tcp_ctrl
[
i
].
mutex
==
NULL
)
{
if
(
g_tcp_ctrl
[
i
].
mutex
==
NULL
)
{
printf
(
"[%s] _MutexCreate failed
\n
"
,
__FUNCTION__
);
INFO_PRINT
(
"[%s] _MutexCreate failed
\n
"
,
__FUNCTION__
);
return
-
1
;
return
-
1
;
}
}
}
}
...
@@ -378,7 +379,7 @@ int kk_set_tcp_channel_by_idx(int idx, char devCode[DEVICE_CODE_LEN], char ip[MA
...
@@ -378,7 +379,7 @@ int kk_set_tcp_channel_by_idx(int idx, char devCode[DEVICE_CODE_LEN], char ip[MA
int
i
=
0
;
int
i
=
0
;
if
(
idx
>=
MAX_LISTEN_NUM
){
if
(
idx
>=
MAX_LISTEN_NUM
){
printf
(
"kk_set_tcp_channel_by_idx idx[] need less than %d
\n
"
,
idx
,
MAX_LISTEN_NUM
);
INFO_PRINT
(
"kk_set_tcp_channel_by_idx idx[] need less than %d
\n
"
,
idx
,
MAX_LISTEN_NUM
);
return
-
1
;
return
-
1
;
}
}
...
@@ -398,7 +399,7 @@ int kk_set_tcp_channel(char devCode[DEVICE_CODE_LEN], char ip[MAX_IP_LEN]){
...
@@ -398,7 +399,7 @@ int kk_set_tcp_channel(char devCode[DEVICE_CODE_LEN], char ip[MAX_IP_LEN]){
int
isEmptyIdx
=
-
1
;
int
isEmptyIdx
=
-
1
;
if
(
devCode
==
NULL
||
strlen
(
devCode
)
==
0
||
ip
==
NULL
||
strlen
(
ip
)
==
0
){
if
(
devCode
==
NULL
||
strlen
(
devCode
)
==
0
||
ip
==
NULL
||
strlen
(
ip
)
==
0
){
printf
(
"paramenter error
\n
"
);
INFO_PRINT
(
"paramenter error
\n
"
);
return
-
1
;
return
-
1
;
}
}
...
@@ -406,7 +407,7 @@ int kk_set_tcp_channel(char devCode[DEVICE_CODE_LEN], char ip[MAX_IP_LEN]){
...
@@ -406,7 +407,7 @@ int kk_set_tcp_channel(char devCode[DEVICE_CODE_LEN], char ip[MAX_IP_LEN]){
if
(
strcmp
(
devCode
,
g_tcp_ctrl
[
i
].
deviceCode
)
==
0
){
if
(
strcmp
(
devCode
,
g_tcp_ctrl
[
i
].
deviceCode
)
==
0
){
strncpy
(
g_tcp_ctrl
[
i
].
ip
,
ip
,
strlen
(
ip
));
strncpy
(
g_tcp_ctrl
[
i
].
ip
,
ip
,
strlen
(
ip
));
printf
(
"find and replace it [%d][%s][%s]
\n
"
,
i
,
g_tcp_ctrl
[
i
].
ip
,
devCode
);
INFO_PRINT
(
"find and replace it [%d][%s][%s]
\n
"
,
i
,
g_tcp_ctrl
[
i
].
ip
,
devCode
);
//kk_gw_list_save();
//kk_gw_list_save();
break
;
break
;
}
}
...
@@ -424,7 +425,7 @@ int kk_set_tcp_channel(char devCode[DEVICE_CODE_LEN], char ip[MAX_IP_LEN]){
...
@@ -424,7 +425,7 @@ int kk_set_tcp_channel(char devCode[DEVICE_CODE_LEN], char ip[MAX_IP_LEN]){
strncpy
(
g_tcp_ctrl
[
isEmptyIdx
].
ip
,
ip
,
strlen
(
ip
));
strncpy
(
g_tcp_ctrl
[
isEmptyIdx
].
ip
,
ip
,
strlen
(
ip
));
strncpy
(
g_tcp_ctrl
[
isEmptyIdx
].
deviceCode
,
devCode
,
strlen
(
devCode
));
strncpy
(
g_tcp_ctrl
[
isEmptyIdx
].
deviceCode
,
devCode
,
strlen
(
devCode
));
printf
(
"idx deviceCode ip[%d][%s][%s]"
,
isEmptyIdx
,
g_tcp_ctrl
[
isEmptyIdx
].
deviceCode
,
g_tcp_ctrl
[
isEmptyIdx
].
ip
);
INFO_PRINT
(
"idx deviceCode ip[%d][%s][%s]"
,
isEmptyIdx
,
g_tcp_ctrl
[
isEmptyIdx
].
deviceCode
,
g_tcp_ctrl
[
isEmptyIdx
].
ip
);
//kk_gw_list_save();
//kk_gw_list_save();
return
0
;
return
0
;
}
}
...
@@ -442,18 +443,18 @@ static int server_socket_init(int *sd, char *ipaddr, uint16_t port)
...
@@ -442,18 +443,18 @@ static int server_socket_init(int *sd, char *ipaddr, uint16_t port)
//创建socket
//创建socket
int
sock
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
int
sock
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
if
(
-
1
==
sock
){
if
(
-
1
==
sock
){
printf
(
"error socket
\n
"
);
INFO_PRINT
(
"error socket
\n
"
);
goto
err1
;
goto
err1
;
}
}
//设置立即释放端口并可以再次使用
//设置立即释放端口并可以再次使用
int
reuse
=
1
;
int
reuse
=
1
;
if
(
-
1
==
setsockopt
(
sock
,
SOL_SOCKET
,
SO_REUSEADDR
,
&
reuse
,
sizeof
(
reuse
))){
if
(
-
1
==
setsockopt
(
sock
,
SOL_SOCKET
,
SO_REUSEADDR
,
&
reuse
,
sizeof
(
reuse
))){
printf
(
"error setsockopt
\n
"
);
INFO_PRINT
(
"error setsockopt
\n
"
);
goto
err2
;
goto
err2
;
}
}
//设置为非阻塞
//设置为非阻塞
if
(
-
1
==
fcntl
(
sock
,
F_SETFL
,
fcntl
(
sock
,
F_GETFL
)
|
O_NONBLOCK
)){
if
(
-
1
==
fcntl
(
sock
,
F_SETFL
,
fcntl
(
sock
,
F_GETFL
)
|
O_NONBLOCK
)){
printf
(
"================== fcntl
\n
"
);
INFO_PRINT
(
"================== fcntl
\n
"
);
goto
err2
;
goto
err2
;
}
}
struct
sockaddr_in
addr
;
struct
sockaddr_in
addr
;
...
@@ -467,11 +468,11 @@ static int server_socket_init(int *sd, char *ipaddr, uint16_t port)
...
@@ -467,11 +468,11 @@ static int server_socket_init(int *sd, char *ipaddr, uint16_t port)
}
}
//绑定监听
//绑定监听
if
(
-
1
==
bind
(
sock
,
(
struct
sockaddr
*
)
&
addr
,
sizeof
(
addr
))){
if
(
-
1
==
bind
(
sock
,
(
struct
sockaddr
*
)
&
addr
,
sizeof
(
addr
))){
printf
(
"error bind
\n
"
);
INFO_PRINT
(
"error bind
\n
"
);
goto
err2
;
goto
err2
;
}
}
if
(
-
1
==
listen
(
sock
,
MAX_LISTEN_NUM
)){
if
(
-
1
==
listen
(
sock
,
MAX_LISTEN_NUM
)){
printf
(
"error listen
\n
"
);
INFO_PRINT
(
"error listen
\n
"
);
goto
err2
;
goto
err2
;
}
}
*
sd
=
sock
;
*
sd
=
sock
;
...
@@ -485,10 +486,10 @@ err1:
...
@@ -485,10 +486,10 @@ err1:
/*读回调*/
/*读回调*/
static
void
read_cb
(
struct
ev_loop
*
loop
,
struct
ev_io
*
watcher
,
int
revents
)
static
void
read_cb
(
struct
ev_loop
*
loop
,
struct
ev_io
*
watcher
,
int
revents
)
{
{
printf
(
"================== read_cb [%d]
\n
"
,
revents
);
INFO_PRINT
(
"================== read_cb [%d]
\n
"
,
revents
);
char
buffer
[
BUFFER_SIZE
]
=
{
0
};
char
buffer
[
BUFFER_SIZE
]
=
{
0
};
if
(
EV_ERROR
&
revents
)
{
if
(
EV_ERROR
&
revents
)
{
printf
(
"read got invalid event...
\r\n
"
);
INFO_PRINT
(
"read got invalid event...
\r\n
"
);
return
;
return
;
}
}
int
res
=
0
;
int
res
=
0
;
...
@@ -509,7 +510,7 @@ again:
...
@@ -509,7 +510,7 @@ again:
}
}
if
(
0
!=
res
)
{
if
(
0
!=
res
)
{
//关闭事件循环并释放watcher
//关闭事件循环并释放watcher
printf
(
"TCP CLOSE
\r\n
"
);
INFO_PRINT
(
"TCP CLOSE
\r\n
"
);
reset_by_sock
(
watcher
->
fd
);
reset_by_sock
(
watcher
->
fd
);
ev_io_stop
(
loop
,
watcher
);
ev_io_stop
(
loop
,
watcher
);
free
(
watcher
);
free
(
watcher
);
...
@@ -526,7 +527,7 @@ again:
...
@@ -526,7 +527,7 @@ again:
offset
=
bytes
+
offset
-
(
retpst
-
buffer
);
offset
=
bytes
+
offset
-
(
retpst
-
buffer
);
memmove
(
buffer
,
retpst
,
offset
);
memmove
(
buffer
,
retpst
,
offset
);
memset
(
buffer
+
offset
,
0
,
sizeof
(
buffer
)
-
offset
);
memset
(
buffer
+
offset
,
0
,
sizeof
(
buffer
)
-
offset
);
printf
(
"====read not complete, need again offset=%d
\n
"
,
offset
);
INFO_PRINT
(
"====read not complete, need again offset=%d
\n
"
,
offset
);
goto
again
;
goto
again
;
}
}
}
}
...
@@ -537,7 +538,7 @@ again:
...
@@ -537,7 +538,7 @@ again:
offset
=
bytes
+
offset
-
(
retpst
-
buffer
);
offset
=
bytes
+
offset
-
(
retpst
-
buffer
);
memmove
(
buffer
,
retpst
,
offset
);
memmove
(
buffer
,
retpst
,
offset
);
memset
(
buffer
+
offset
,
0
,
sizeof
(
buffer
)
-
offset
);
memset
(
buffer
+
offset
,
0
,
sizeof
(
buffer
)
-
offset
);
printf
(
"====read not complete, need again offset=%d
\n
"
,
offset
);
INFO_PRINT
(
"====read not complete, need again offset=%d
\n
"
,
offset
);
goto
again
;
goto
again
;
}
}
...
@@ -571,11 +572,11 @@ again:
...
@@ -571,11 +572,11 @@ again:
/*accept回调函数*/
/*accept回调函数*/
static
void
accept_cb
(
struct
ev_loop
*
loop
,
struct
ev_io
*
watcher
,
int
revents
)
static
void
accept_cb
(
struct
ev_loop
*
loop
,
struct
ev_io
*
watcher
,
int
revents
)
{
{
printf
(
"================== accept_cb
\n
"
);
INFO_PRINT
(
"================== accept_cb
\n
"
);
struct
sockaddr_in
client_addr
;
struct
sockaddr_in
client_addr
;
socklen_t
client_len
=
sizeof
(
client_addr
);
socklen_t
client_len
=
sizeof
(
client_addr
);
if
(
EV_ERROR
&
revents
)
{
if
(
EV_ERROR
&
revents
)
{
printf
(
"accept got invalid event...
\r\n
"
);
INFO_PRINT
(
"accept got invalid event...
\r\n
"
);
return
;
return
;
}
}
//accept连接
//accept连接
...
@@ -591,17 +592,17 @@ static void accept_cb(struct ev_loop *loop, struct ev_io *watcher, int revents)
...
@@ -591,17 +592,17 @@ static void accept_cb(struct ev_loop *loop, struct ev_io *watcher, int revents)
if
(
set_sock_by_ip
(
inet_ntoa
(
client_addr
.
sin_addr
),
sock
)
<
0
){
if
(
set_sock_by_ip
(
inet_ntoa
(
client_addr
.
sin_addr
),
sock
)
<
0
){
//ip无效,reject it
//ip无效,reject it
printf
(
"This ip[%s][%u] is invaild, reject it!
\r\n
"
,
inet_ntoa
(
client_addr
.
sin_addr
),
client_addr
.
sin_port
);
INFO_PRINT
(
"This ip[%s][%u] is invaild, reject it!
\r\n
"
,
inet_ntoa
(
client_addr
.
sin_addr
),
client_addr
.
sin_port
);
close
(
sock
);
close
(
sock
);
return
;
return
;
}
}
printf
(
"Successfully connected with client: %s:%u
\r\n
"
,
\
INFO_PRINT
(
"Successfully connected with client: %s:%u
\r\n
"
,
\
inet_ntoa
(
client_addr
.
sin_addr
),
client_addr
.
sin_port
);
inet_ntoa
(
client_addr
.
sin_addr
),
client_addr
.
sin_port
);
//加入事件循环
//加入事件循环
struct
ev_io
*
w_client
=
(
struct
ev_io
*
)
malloc
(
sizeof
(
struct
ev_io
));
struct
ev_io
*
w_client
=
(
struct
ev_io
*
)
malloc
(
sizeof
(
struct
ev_io
));
if
(
w_client
==
NULL
){
if
(
w_client
==
NULL
){
printf
(
"malloc w_client failed
\r\n
"
);
INFO_PRINT
(
"malloc w_client failed
\r\n
"
);
return
;
return
;
}
}
...
@@ -633,23 +634,23 @@ static void accept_cb(struct ev_loop *loop, struct ev_io *watcher, int revents)
...
@@ -633,23 +634,23 @@ static void accept_cb(struct ev_loop *loop, struct ev_io *watcher, int revents)
}*/
}*/
static
void
loop_tcp_thread
(
void
*
arg
){
static
void
loop_tcp_thread
(
void
*
arg
){
printf
(
"loop_tcp_thread start!
\r\n
"
);
INFO_PRINT
(
"loop_tcp_thread start!
\r\n
"
);
int
sd
;
int
sd
;
g_loop
=
ev_loop_new
(
EVBACKEND_EPOLL
);
g_loop
=
ev_loop_new
(
EVBACKEND_EPOLL
);
if
(
NULL
==
g_loop
)
{
if
(
NULL
==
g_loop
)
{
printf
(
"loop create failed
\r\n
"
);
INFO_PRINT
(
"loop create failed
\r\n
"
);
return
-
1
;
return
-
1
;
}
}
if
(
server_socket_init
(
&
sd
,
NULL
,
CCU_TCP_PORT
)
<
0
)
{
if
(
server_socket_init
(
&
sd
,
NULL
,
CCU_TCP_PORT
)
<
0
)
{
printf
(
"server init failed
\r\n
"
);
INFO_PRINT
(
"server init failed
\r\n
"
);
return
-
1
;
return
-
1
;
}
}
ev_io_init
(
&
w_accept
,
accept_cb
,
sd
,
EV_READ
);
ev_io_init
(
&
w_accept
,
accept_cb
,
sd
,
EV_READ
);
ev_io_start
(
g_loop
,
&
w_accept
);
ev_io_start
(
g_loop
,
&
w_accept
);
ev_run
(
g_loop
,
0
);
ev_run
(
g_loop
,
0
);
close
(
sd
);
close
(
sd
);
printf
(
"loop_tcp_thread================== end
\n
"
);
INFO_PRINT
(
"loop_tcp_thread================== end
\n
"
);
}
}
...
@@ -662,7 +663,7 @@ int kk_tcp_channel_ser_send(char* data, int len, char chalMark[DEVICE_CODE_LEN])
...
@@ -662,7 +663,7 @@ int kk_tcp_channel_ser_send(char* data, int len, char chalMark[DEVICE_CODE_LEN])
if
(
data
!=
NULL
){
if
(
data
!=
NULL
){
kk_tcp_ctrl_t
*
chl_ctrl
=
get_channel_by_deviceCode
(
chalMark
);
kk_tcp_ctrl_t
*
chl_ctrl
=
get_channel_by_deviceCode
(
chalMark
);
if
(
NULL
==
chl_ctrl
){
if
(
NULL
==
chl_ctrl
){
printf
(
"[%s] get_channel_by_deviceCode is NULL!!!
\n
"
,
__FUNCTION__
);
INFO_PRINT
(
"[%s] get_channel_by_deviceCode is NULL!!!
\n
"
,
__FUNCTION__
);
return
-
1
;
return
-
1
;
}
}
...
@@ -673,10 +674,10 @@ int kk_tcp_channel_ser_send(char* data, int len, char chalMark[DEVICE_CODE_LEN])
...
@@ -673,10 +674,10 @@ int kk_tcp_channel_ser_send(char* data, int len, char chalMark[DEVICE_CODE_LEN])
{
{
case
-
1
:
case
-
1
:
chl_ctrl
->
isConnect
=
0
;
chl_ctrl
->
isConnect
=
0
;
printf
(
" [%s] select error ret=%d
\n
"
,
__FUNCTION__
,
-
1
);
INFO_PRINT
(
" [%s] select error ret=%d
\n
"
,
__FUNCTION__
,
-
1
);
break
;
//select错误 退出循环
break
;
//select错误 退出循环
case
0
:
case
0
:
printf
(
" [%s] select skip=================== ret=%d
\n
"
,
__FUNCTION__
,
0
);
INFO_PRINT
(
" [%s] select skip=================== ret=%d
\n
"
,
__FUNCTION__
,
0
);
break
;
//再次轮询
break
;
//再次轮询
default:
default:
...
@@ -687,10 +688,10 @@ int kk_tcp_channel_ser_send(char* data, int len, char chalMark[DEVICE_CODE_LEN])
...
@@ -687,10 +688,10 @@ int kk_tcp_channel_ser_send(char* data, int len, char chalMark[DEVICE_CODE_LEN])
_MutexUnlock
(
chl_ctrl
->
mutex
);
_MutexUnlock
(
chl_ctrl
->
mutex
);
if
(
ret
<=
0
){
if
(
ret
<=
0
){
printf
(
"=================write error ret=%d
\n
"
,
ret
);
INFO_PRINT
(
"=================write error ret=%d
\n
"
,
ret
);
if
(
errno
!=
EINTR
){
if
(
errno
!=
EINTR
){
chl_ctrl
->
isConnect
=
0
;
chl_ctrl
->
isConnect
=
0
;
printf
(
"write error reconnect!!
\n
"
);
INFO_PRINT
(
"write error reconnect!!
\n
"
);
break
;
break
;
}
}
}
}
...
@@ -718,7 +719,7 @@ int kk_TCP_channel_init(ipc_cb cb)
...
@@ -718,7 +719,7 @@ int kk_TCP_channel_init(ipc_cb cb)
int
sd
;
int
sd
;
if
(
g_init
==
1
){
if
(
g_init
==
1
){
printf
(
"kk_TCP_channel_init has been inited
\n
"
);
INFO_PRINT
(
"kk_TCP_channel_init has been inited
\n
"
);
return
-
1
;
return
-
1
;
}
}
g_init
=
1
;
g_init
=
1
;
...
@@ -730,7 +731,7 @@ int kk_TCP_channel_init(ipc_cb cb)
...
@@ -730,7 +731,7 @@ int kk_TCP_channel_init(ipc_cb cb)
}
}
if
(
g_pTh
==
NULL
&&
0
!=
pthread_create
(
&
g_pTh
,
NULL
,
loop_tcp_thread
,
NULL
))
{
if
(
g_pTh
==
NULL
&&
0
!=
pthread_create
(
&
g_pTh
,
NULL
,
loop_tcp_thread
,
NULL
))
{
printf
(
"create pthread failed
\r\n
"
);
INFO_PRINT
(
"create pthread failed
\r\n
"
);
return
-
1
;
return
-
1
;
};
};
g_cb
=
cb
;
g_cb
=
cb
;
...
@@ -801,18 +802,18 @@ static int client_socket_init(int *sd, char *ipaddr, uint16_t port)
...
@@ -801,18 +802,18 @@ static int client_socket_init(int *sd, char *ipaddr, uint16_t port)
//创建socket
//创建socket
int
sock
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
int
sock
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
if
(
-
1
==
sock
){
if
(
-
1
==
sock
){
printf
(
"error socket
\n
"
);
INFO_PRINT
(
"error socket
\n
"
);
goto
err1
;
goto
err1
;
}
}
//设置立即释放端口并可以再次使用
//设置立即释放端口并可以再次使用
int
reuse
=
1
;
int
reuse
=
1
;
if
(
-
1
==
setsockopt
(
sock
,
SOL_SOCKET
,
SO_REUSEADDR
,
&
reuse
,
sizeof
(
reuse
))){
if
(
-
1
==
setsockopt
(
sock
,
SOL_SOCKET
,
SO_REUSEADDR
,
&
reuse
,
sizeof
(
reuse
))){
printf
(
"error setsockopt
\n
"
);
INFO_PRINT
(
"error setsockopt
\n
"
);
goto
err2
;
goto
err2
;
}
}
//设置为非阻塞
//设置为非阻塞
if
(
-
1
==
fcntl
(
sock
,
F_SETFL
,
fcntl
(
sock
,
F_GETFL
)
|
O_NONBLOCK
)){
if
(
-
1
==
fcntl
(
sock
,
F_SETFL
,
fcntl
(
sock
,
F_GETFL
)
|
O_NONBLOCK
)){
printf
(
"================== fcntl
\n
"
);
INFO_PRINT
(
"================== fcntl
\n
"
);
goto
err2
;
goto
err2
;
}
}
struct
sockaddr_in
addr
;
struct
sockaddr_in
addr
;
...
@@ -834,11 +835,11 @@ static int client_socket_init(int *sd, char *ipaddr, uint16_t port)
...
@@ -834,11 +835,11 @@ static int client_socket_init(int *sd, char *ipaddr, uint16_t port)
sleep
(
1
);
sleep
(
1
);
}
}
if
(
retry
>=
3
){
if
(
retry
>=
3
){
printf
(
"==================connect failed
\n
"
);
INFO_PRINT
(
"==================connect failed
\n
"
);
goto
err2
;
goto
err2
;
}
}
printf
(
"==================[%s] ok sock=%d
\n
"
,
__FUNCTION__
,
sock
);
INFO_PRINT
(
"==================[%s] ok sock=%d
\n
"
,
__FUNCTION__
,
sock
);
*
sd
=
sock
;
*
sd
=
sock
;
return
0
;
return
0
;
err2:
err2:
...
@@ -848,7 +849,7 @@ err1:
...
@@ -848,7 +849,7 @@ err1:
}
}
static
void
loop_tcp_client_thread
(
void
*
arg
){
static
void
loop_tcp_client_thread
(
void
*
arg
){
printf
(
"loop_tcp_client_thread start!
\r\n
"
);
INFO_PRINT
(
"loop_tcp_client_thread start!
\r\n
"
);
char
buf
[
1024
]
=
{
0
};
char
buf
[
1024
]
=
{
0
};
int
ret
=
0
;
int
ret
=
0
;
int
offset
=
0
;
int
offset
=
0
;
...
@@ -857,7 +858,7 @@ static void loop_tcp_client_thread(void *arg){
...
@@ -857,7 +858,7 @@ static void loop_tcp_client_thread(void *arg){
while
(
1
){
while
(
1
){
if
(
-
1
==
client_socket_init
(
&
g_client_ctrl
.
sd
,
g_client_ctrl
.
ip
,
g_client_ctrl
.
port
)){
if
(
-
1
==
client_socket_init
(
&
g_client_ctrl
.
sd
,
g_client_ctrl
.
ip
,
g_client_ctrl
.
port
)){
printf
(
"connect failed
\n
"
);
INFO_PRINT
(
"connect failed
\n
"
);
sleep
(
1
);
sleep
(
1
);
g_client_ctrl
.
retry
++
;
g_client_ctrl
.
retry
++
;
continue
;
continue
;
...
@@ -872,7 +873,7 @@ static void loop_tcp_client_thread(void *arg){
...
@@ -872,7 +873,7 @@ static void loop_tcp_client_thread(void *arg){
{
{
case
-
1
:
case
-
1
:
g_client_ctrl
.
isConnect
=
0
;
g_client_ctrl
.
isConnect
=
0
;
printf
(
" [%s] select error ret=%d
\n
"
,
__FUNCTION__
,
ret
);
INFO_PRINT
(
" [%s] select error ret=%d
\n
"
,
__FUNCTION__
,
ret
);
break
;
//select错误 退出循环
break
;
//select错误 退出循环
case
0
:
case
0
:
break
;
//再次轮询
break
;
//再次轮询
...
@@ -889,10 +890,10 @@ static void loop_tcp_client_thread(void *arg){
...
@@ -889,10 +890,10 @@ static void loop_tcp_client_thread(void *arg){
_MutexUnlock
(
g_client_ctrl
.
mutex
);
_MutexUnlock
(
g_client_ctrl
.
mutex
);
if
(
ret
<=
0
){
if
(
ret
<=
0
){
printf
(
"=================read error ret=%d
\n
"
,
ret
);
INFO_PRINT
(
"=================read error ret=%d
\n
"
,
ret
);
if
(
errno
!=
EINTR
){
if
(
errno
!=
EINTR
){
g_client_ctrl
.
isConnect
=
0
;
g_client_ctrl
.
isConnect
=
0
;
printf
(
"read error reconnect!!
\n
"
);
INFO_PRINT
(
"read error reconnect!!
\n
"
);
break
;
break
;
}
}
}
else
if
(
ret
>
0
){
}
else
if
(
ret
>
0
){
...
@@ -908,7 +909,7 @@ static void loop_tcp_client_thread(void *arg){
...
@@ -908,7 +909,7 @@ static void loop_tcp_client_thread(void *arg){
offset
=
ret
+
offset
-
(
retpst
-
buf
);
offset
=
ret
+
offset
-
(
retpst
-
buf
);
memmove
(
buf
,
retpst
,
offset
);
memmove
(
buf
,
retpst
,
offset
);
memset
(
buf
+
offset
,
0
,
sizeof
(
buf
)
-
offset
);
memset
(
buf
+
offset
,
0
,
sizeof
(
buf
)
-
offset
);
printf
(
"====read not complete, need again offset=%d
\n
"
,
offset
);
INFO_PRINT
(
"====read not complete, need again offset=%d
\n
"
,
offset
);
goto
clientRead
;
goto
clientRead
;
}
}
#endif
#endif
...
@@ -920,10 +921,10 @@ static void loop_tcp_client_thread(void *arg){
...
@@ -920,10 +921,10 @@ static void loop_tcp_client_thread(void *arg){
//usleep(100000);
//usleep(100000);
}
}
printf
(
"network error, try connect again!
\n
"
);
INFO_PRINT
(
"network error, try connect again!
\n
"
);
close
(
g_client_ctrl
.
sd
);
close
(
g_client_ctrl
.
sd
);
}
}
printf
(
"loop_tcp_client_thread================== end
\n
"
);
INFO_PRINT
(
"loop_tcp_client_thread================== end
\n
"
);
}
}
...
@@ -943,12 +944,12 @@ int kk_tcp_client_send(char* data, int len){
...
@@ -943,12 +944,12 @@ int kk_tcp_client_send(char* data, int len){
if
(
data
!=
NULL
){
if
(
data
!=
NULL
){
while
(
g_client_ctrl
.
sd
==
-
1
&&
cnt
<
5
){
while
(
g_client_ctrl
.
sd
==
-
1
&&
cnt
<
5
){
printf
(
"[%s] tcp don't connect, sleep 1s !!!!
\n
"
,
__FUNCTION__
);
INFO_PRINT
(
"[%s] tcp don't connect, sleep 1s !!!!
\n
"
,
__FUNCTION__
);
sleep
(
1
);
sleep
(
1
);
cnt
++
;
cnt
++
;
}
}
if
(
g_client_ctrl
.
sd
<
0
){
if
(
g_client_ctrl
.
sd
<
0
){
printf
(
"[%s] The tcp socket created fialid !!!!
\n
"
,
__FUNCTION__
);
INFO_PRINT
(
"[%s] The tcp socket created fialid !!!!
\n
"
,
__FUNCTION__
);
return
-
1
;
return
-
1
;
}
}
...
@@ -958,10 +959,10 @@ int kk_tcp_client_send(char* data, int len){
...
@@ -958,10 +959,10 @@ int kk_tcp_client_send(char* data, int len){
{
{
case
-
1
:
case
-
1
:
g_client_ctrl
.
isConnect
=
0
;
g_client_ctrl
.
isConnect
=
0
;
printf
(
" [%s] select error ret=%d
\n
"
,
__FUNCTION__
,
ret
);
INFO_PRINT
(
" [%s] select error ret=%d
\n
"
,
__FUNCTION__
,
ret
);
break
;
//select错误 退出循环
break
;
//select错误 退出循环
case
0
:
case
0
:
printf
(
" [%s] select error ret=%d
\n
"
,
__FUNCTION__
,
0
);
INFO_PRINT
(
" [%s] select error ret=%d
\n
"
,
__FUNCTION__
,
0
);
break
;
//再次轮询
break
;
//再次轮询
default:
default:
...
@@ -974,10 +975,10 @@ int kk_tcp_client_send(char* data, int len){
...
@@ -974,10 +975,10 @@ int kk_tcp_client_send(char* data, int len){
_MutexUnlock
(
g_client_ctrl
.
mutex
);
_MutexUnlock
(
g_client_ctrl
.
mutex
);
if
(
ret
<=
0
){
if
(
ret
<=
0
){
printf
(
"=================send error ret=%d
\n
"
,
ret
);
INFO_PRINT
(
"=================send error ret=%d
\n
"
,
ret
);
if
(
errno
!=
EINTR
){
if
(
errno
!=
EINTR
){
g_client_ctrl
.
isConnect
=
0
;
g_client_ctrl
.
isConnect
=
0
;
printf
(
"send error reconnect!!
\n
"
);
INFO_PRINT
(
"send error reconnect!!
\n
"
);
break
;
break
;
}
}
}
}
...
@@ -1005,7 +1006,7 @@ int kk_tcp_client_init(char ip[MAX_IP_LEN], int port, ipc_cb cb)
...
@@ -1005,7 +1006,7 @@ int kk_tcp_client_init(char ip[MAX_IP_LEN], int port, ipc_cb cb)
g_client_ctrl
.
port
=
port
;
g_client_ctrl
.
port
=
port
;
memcpy
(
g_client_ctrl
.
ip
,
ip
,
strlen
(
ip
));
memcpy
(
g_client_ctrl
.
ip
,
ip
,
strlen
(
ip
));
if
(
g_pTh
==
NULL
&&
0
!=
pthread_create
(
&
g_pTh
,
NULL
,
loop_tcp_client_thread
,
NULL
))
{
if
(
g_pTh
==
NULL
&&
0
!=
pthread_create
(
&
g_pTh
,
NULL
,
loop_tcp_client_thread
,
NULL
))
{
printf
(
"create pthread failed
\r\n
"
);
INFO_PRINT
(
"create pthread failed
\r\n
"
);
return
-
1
;
return
-
1
;
};
};
g_client_ctrl
.
cb
=
cb
;
g_client_ctrl
.
cb
=
cb
;
...
...
common/hal/HAL_OS_linux.c
View file @
965f71af
...
@@ -28,7 +28,7 @@
...
@@ -28,7 +28,7 @@
#include <time.h>
#include <time.h>
#include <signal.h>
#include <signal.h>
#include "kk_product.h"
#include "kk_product.h"
//#include "iot_import
.h"
#include "ccu_ver
.h"
char
g_product_type
[
PRODUCT_TYPE_LEN
]
=
{
0
};
char
g_product_type
[
PRODUCT_TYPE_LEN
]
=
{
0
};
char
g_product_code
[
PRODUCT_CODE_LEN
]
=
{
0
};
char
g_product_code
[
PRODUCT_CODE_LEN
]
=
{
0
};
...
@@ -295,10 +295,9 @@ int HAL_GetDevice_Code(_OU_ char *device_code)
...
@@ -295,10 +295,9 @@ int HAL_GetDevice_Code(_OU_ char *device_code)
}
}
int
HAL_GetVersion
(
_OU_
char
*
version
)
int
HAL_GetVersion
(
_OU_
char
*
version
)
{
{
char
*
ver
=
"test-1.0.0"
;
int
len
=
strlen
(
KK_CCU_VERSION
);
int
len
=
strlen
(
ver
);
memset
(
version
,
0x0
,
VERSION_MAXLEN
);
memset
(
version
,
0x0
,
VERSION_MAXLEN
);
strncpy
(
version
,
ver
,
len
);
strncpy
(
version
,
KK_CCU_VERSION
,
len
);
version
[
len
]
=
'\0'
;
version
[
len
]
=
'\0'
;
return
strlen
(
version
);
return
strlen
(
version
);
}
}
...
...
midware/midware/dm/kk_dm_msg.c
View file @
965f71af
...
@@ -738,7 +738,7 @@ int dm_msg_thing_property_set_reply(char deviceCode[DEVICE_CODE_MAXLEN],char *pa
...
@@ -738,7 +738,7 @@ int dm_msg_thing_property_set_reply(char deviceCode[DEVICE_CODE_MAXLEN],char *pa
dm_msg_response
(
&
request
,
&
response
,
"{}"
,
strlen
(
"{}"
),
NULL
);
dm_msg_response
(
&
request
,
&
response
,
"{}"
,
strlen
(
"{}"
),
NULL
);
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
int
dm_msg_thing_event_post
(
const
char
*
deviceCode
,
const
char
*
identifier
)
int
dm_msg_thing_event_post
(
const
char
*
deviceCode
,
const
char
*
identifier
,
const
char
*
msgId
)
{
{
int
res
=
0
;
int
res
=
0
;
int
nums
=
0
;
int
nums
=
0
;
...
@@ -774,7 +774,13 @@ int dm_msg_thing_event_post(const char *deviceCode, const char *identifier)
...
@@ -774,7 +774,13 @@ int dm_msg_thing_event_post(const char *deviceCode, const char *identifier)
ERROR_PRINT
(
"dm_msg_thing_event_post failed
\n
"
);
ERROR_PRINT
(
"dm_msg_thing_event_post failed
\n
"
);
return
FAIL_RETURN
;
return
FAIL_RETURN
;
}
}
dm_mgr_upstream_thing_event_post
(
node
->
devid
,
identifier
,
strlen
(
identifier
),
method
,
payload
,
strlen
(
payload
));
if
(
msgId
!=
NULL
){
dm_mgr_upstream_thing_event_post_ex
(
node
->
devid
,
identifier
,
strlen
(
identifier
),
method
,
payload
,
strlen
(
payload
),
msgId
);
}
else
{
dm_mgr_upstream_thing_event_post
(
node
->
devid
,
identifier
,
strlen
(
identifier
),
method
,
payload
,
strlen
(
payload
));
}
free
(
method
);
free
(
method
);
method
=
NULL
;
method
=
NULL
;
free
(
payload
);
free
(
payload
);
...
...
midware/midware/dm/kk_linkkit.c
View file @
965f71af
/*
/************************************************************
* Copyright (C) 2020-2020 ikonke
*版权所有 (C)2020,公司(或个人)名称
*/
*
*文件名称: kk_linkkit.c
*内容摘要: 收到云端数据后的回调处理
*其他说明:
*当前版本:
*************************************************************/
/*************************************************************
头文件引用
*************************************************************/
//#include "iotx_dm_internal.h"
#include "kk_tsl_common.h"
#include "kk_tsl_common.h"
#include "klist.h"
#include "klist.h"
#include "cJSON.h"
#include "cJSON.h"
...
@@ -67,7 +75,13 @@ static iotx_linkkit_ctx_t *_iotx_linkkit_get_ctx(void)
...
@@ -67,7 +75,13 @@ static iotx_linkkit_ctx_t *_iotx_linkkit_get_ctx(void)
{
{
return
&
g_iotx_linkkit_ctx
;
return
&
g_iotx_linkkit_ctx
;
}
}
/************************************************************
*功能描述:本模块互斥锁,加锁处理
*输入参数:无
*输出参数:无
*返 回 值: 无
*其他说明:
*************************************************************/
static
void
_iotx_linkkit_mutex_lock
(
void
)
static
void
_iotx_linkkit_mutex_lock
(
void
)
{
{
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
...
@@ -76,6 +90,13 @@ static void _iotx_linkkit_mutex_lock(void)
...
@@ -76,6 +90,13 @@ static void _iotx_linkkit_mutex_lock(void)
}
}
}
}
/************************************************************
*功能描述:本模块互斥锁,解锁处理
*输入参数:无
*输出参数:无
*返 回 值: 无
*其他说明:
*************************************************************/
static
void
_iotx_linkkit_mutex_unlock
(
void
)
static
void
_iotx_linkkit_mutex_unlock
(
void
)
{
{
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
...
@@ -84,23 +105,14 @@ static void _iotx_linkkit_mutex_unlock(void)
...
@@ -84,23 +105,14 @@ static void _iotx_linkkit_mutex_unlock(void)
}
}
}
}
static
int
_impl_copy
(
_IN_
void
*
input
,
_IN_
int
input_len
,
_OU_
void
**
output
,
_IN_
int
output_len
)
{
if
(
input
==
NULL
||
output
==
NULL
||
*
output
!=
NULL
)
{
return
INVALID_PARAMETER
;
}
*
output
=
malloc
(
output_len
);
if
(
*
output
==
NULL
)
{
return
MEMORY_NOT_ENOUGH
;
}
memset
(
*
output
,
0
,
output_len
);
memcpy
(
*
output
,
input
,
input_len
);
return
SUCCESS_RETURN
;
}
#if 1
#if 1
/************************************************************
*功能描述:互斥锁,添加topo关系时加锁处理
*输入参数:无
*输出参数:无
*返 回 值: 无
*其他说明:
*************************************************************/
static
void
_iotx_linkkit_upstream_mutex_lock
(
void
)
static
void
_iotx_linkkit_upstream_mutex_lock
(
void
)
{
{
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
...
@@ -108,7 +120,13 @@ static void _iotx_linkkit_upstream_mutex_lock(void)
...
@@ -108,7 +120,13 @@ static void _iotx_linkkit_upstream_mutex_lock(void)
HAL_MutexLock
(
ctx
->
upstream_mutex
);
HAL_MutexLock
(
ctx
->
upstream_mutex
);
}
}
}
}
/************************************************************
*功能描述:互斥锁,添加topo关系时解锁处理
*输入参数:无
*输出参数:无
*返 回 值: 无
*其他说明:
*************************************************************/
static
void
_iotx_linkkit_upstream_mutex_unlock
(
void
)
static
void
_iotx_linkkit_upstream_mutex_unlock
(
void
)
{
{
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
...
@@ -117,7 +135,15 @@ static void _iotx_linkkit_upstream_mutex_unlock(void)
...
@@ -117,7 +135,15 @@ static void _iotx_linkkit_upstream_mutex_unlock(void)
}
}
}
}
/************************************************************
*功能描述:添加topo关系时添加消息同步队列
*输入参数:msgid:消息Id
semaphore:同步用的信号量
*输出参数:node:添加的队列节点
*返 回 值: 0:成功;其他:失败
*其他说明:此消息队列只有MSG_NEED_RESP被定义了才使用到,如添加topo.add时,只
有服务器回reply或者超时10秒后才往下执行
*************************************************************/
static
int
_iotx_linkkit_upstream_sync_callback_list_insert
(
int
msgid
,
void
*
semaphore
,
static
int
_iotx_linkkit_upstream_sync_callback_list_insert
(
int
msgid
,
void
*
semaphore
,
iotx_linkkit_upstream_sync_callback_node_t
**
node
)
iotx_linkkit_upstream_sync_callback_node_t
**
node
)
{
{
...
@@ -148,7 +174,13 @@ static int _iotx_linkkit_upstream_sync_callback_list_insert(int msgid, void *sem
...
@@ -148,7 +174,13 @@ static int _iotx_linkkit_upstream_sync_callback_list_insert(int msgid, void *sem
*
node
=
search_node
;
*
node
=
search_node
;
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
/************************************************************
*功能描述:删除消息同步队列
*输入参数:msgid:消息Id
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:此消息队列只有MSG_NEED_RESP被定义了才使用到
*************************************************************/
static
int
_iotx_linkkit_upstream_sync_callback_list_remove
(
int
msgid
)
static
int
_iotx_linkkit_upstream_sync_callback_list_remove
(
int
msgid
)
{
{
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
...
@@ -167,6 +199,13 @@ static int _iotx_linkkit_upstream_sync_callback_list_remove(int msgid)
...
@@ -167,6 +199,13 @@ static int _iotx_linkkit_upstream_sync_callback_list_remove(int msgid)
return
FAIL_RETURN
;
return
FAIL_RETURN
;
}
}
/************************************************************
*功能描述:根据msgid查询对应节点
*输入参数:msgid:消息Id
*输出参数:node:查询到的节点
*返 回 值: 0:成功;其他:失败
*其他说明:此消息队列只有MSG_NEED_RESP被定义了才使用到
*************************************************************/
int
_iotx_linkkit_upstream_sync_callback_list_search
(
int
msgid
,
int
_iotx_linkkit_upstream_sync_callback_list_search
(
int
msgid
,
iotx_linkkit_upstream_sync_callback_node_t
**
node
)
iotx_linkkit_upstream_sync_callback_node_t
**
node
)
...
@@ -190,7 +229,13 @@ int _iotx_linkkit_upstream_sync_callback_list_search(int msgid,
...
@@ -190,7 +229,13 @@ int _iotx_linkkit_upstream_sync_callback_list_search(int msgid,
return
FAIL_RETURN
;
return
FAIL_RETURN
;
}
}
/************************************************************
*功能描述:删除整个消息同步队列
*输入参数:无
*输出参数:无
*返 回 值: 无
*其他说明:此消息队列只有MSG_NEED_RESP被定义了才使用到
*************************************************************/
static
void
_iotx_linkkit_upstream_sync_callback_list_destroy
(
void
)
static
void
_iotx_linkkit_upstream_sync_callback_list_destroy
(
void
)
{
{
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
...
@@ -204,7 +249,14 @@ static void _iotx_linkkit_upstream_sync_callback_list_destroy(void)
...
@@ -204,7 +249,14 @@ static void _iotx_linkkit_upstream_sync_callback_list_destroy(void)
}
}
}
}
/************************************************************
*功能描述:释放对应的同步信号量
*输入参数:msgid:消息Id
code:错误码值
*输出参数:无
*返 回 值: 无
*其他说明:此消息队列只有MSG_NEED_RESP被定义了才使用到
*************************************************************/
static
void
_iotx_linkkit_upstream_callback_remove
(
int
msgid
,
int
code
)
static
void
_iotx_linkkit_upstream_callback_remove
(
int
msgid
,
int
code
)
{
{
INFO_PRINT
(
"_iotx_linkkit_upstream_callback_remove : [%d] ,code= %d
\n
"
,
msgid
,
code
);
INFO_PRINT
(
"_iotx_linkkit_upstream_callback_remove : [%d] ,code= %d
\n
"
,
msgid
,
code
);
...
@@ -228,13 +280,34 @@ static void _iotx_linkkit_upstream_callback_remove(int msgid, int code)
...
@@ -228,13 +280,34 @@ static void _iotx_linkkit_upstream_callback_remove(int msgid, int code)
static
int
s_CloudStatus
=
0
;
static
int
s_CloudStatus
=
0
;
static
int
s_CloudStatusRecv
=
0
;
static
int
s_CloudStatusRecv
=
0
;
/************************************************************
*功能描述:获取连云状态
*输入参数:无
*输出参数:无
*返 回 值: 1,已连上;0:未连上
*其他说明:
*************************************************************/
int
kk_get_cloudstatus
(
void
){
int
kk_get_cloudstatus
(
void
){
return
s_CloudStatus
;
return
s_CloudStatus
;
}
}
/************************************************************
*功能描述:获取是否有连云状态的通知
*输入参数:无
*输出参数:无
*返 回 值: 1,有;0:未通知
*其他说明:
*************************************************************/
int
kk_get_cloud_recv_status
(
void
){
int
kk_get_cloud_recv_status
(
void
){
return
s_CloudStatusRecv
;
return
s_CloudStatusRecv
;
}
}
/************************************************************
*功能描述:手机端主动删除设备处理函数
*输入参数:payload:云端传下来数据
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_topo_delete_handle
(
cJSON
*
payload
)
int
kk_topo_delete_handle
(
cJSON
*
payload
)
{
{
if
(
payload
==
NULL
){
if
(
payload
==
NULL
){
...
@@ -259,6 +332,14 @@ int kk_topo_delete_handle(cJSON *payload)
...
@@ -259,6 +332,14 @@ int kk_topo_delete_handle(cJSON *payload)
}
}
/************************************************************
*功能描述:添加房间处理函数
*输入参数:params:云端传下来JSON数据,主要包含房间名称
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
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
;
...
@@ -286,6 +367,13 @@ static int kk_service_addRoom_handle(const char *deviceCode, cJSON *params)
...
@@ -286,6 +367,13 @@ static int kk_service_addRoom_handle(const char *deviceCode, cJSON *params)
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
/************************************************************
*功能描述:删除房间处理函数
*输入参数:params:云端传下来JSON数据,主要包含房间ID
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
kk_service_deleteRoom_handle
(
cJSON
*
params
)
static
int
kk_service_deleteRoom_handle
(
cJSON
*
params
)
{
{
if
(
params
==
NULL
){
if
(
params
==
NULL
){
...
@@ -300,6 +388,13 @@ static int kk_service_deleteRoom_handle(cJSON *params)
...
@@ -300,6 +388,13 @@ static int kk_service_deleteRoom_handle(cJSON *params)
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
/************************************************************
*功能描述:添加设备到房间处理函数
*输入参数:params:云端传下来JSON数据,主要包含房间ID和设备deviceCode
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
kk_service_addDeviceToRoom_handle
(
cJSON
*
params
)
static
int
kk_service_addDeviceToRoom_handle
(
cJSON
*
params
)
{
{
char
epNumStr
[
10
]
=
{
0
};
char
epNumStr
[
10
]
=
{
0
};
...
@@ -324,6 +419,13 @@ static int kk_service_addDeviceToRoom_handle(cJSON *params)
...
@@ -324,6 +419,13 @@ static int kk_service_addDeviceToRoom_handle(cJSON *params)
kk_room_dev_add
(
roomId
->
valuestring
,
deviceCode
->
valuestring
,
epNumStr
);
kk_room_dev_add
(
roomId
->
valuestring
,
deviceCode
->
valuestring
,
epNumStr
);
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
/************************************************************
*功能描述:删除设备从房间处理函数
*输入参数:params:云端传下来JSON数据,主要包含设备deviceCode
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
kk_service_removeDeviceFromRoom_handle
(
cJSON
*
params
)
static
int
kk_service_removeDeviceFromRoom_handle
(
cJSON
*
params
)
{
{
char
epNumStr
[
10
]
=
{
0
};
char
epNumStr
[
10
]
=
{
0
};
...
@@ -345,6 +447,15 @@ static int kk_service_removeDeviceFromRoom_handle(cJSON *params)
...
@@ -345,6 +447,15 @@ static int kk_service_removeDeviceFromRoom_handle(cJSON *params)
kk_room_dev_remove
(
deviceCode
->
valuestring
,
epNumStr
);
kk_room_dev_remove
(
deviceCode
->
valuestring
,
epNumStr
);
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
/************************************************************
*功能描述:执行房间设备处理
*输入参数:action:具体动作
node:设备节点
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
kk_service_execute_action
(
cJSON
*
action
,
dm_mgr_dev_node_t
*
node
)
static
int
kk_service_execute_action
(
cJSON
*
action
,
dm_mgr_dev_node_t
*
node
)
{
{
int
idx
=
0
;
int
idx
=
0
;
...
@@ -372,6 +483,13 @@ static int kk_service_execute_action(cJSON *action,dm_mgr_dev_node_t *node)
...
@@ -372,6 +483,13 @@ static int kk_service_execute_action(cJSON *action,dm_mgr_dev_node_t *node)
}
}
/************************************************************
*功能描述:批量执行房间设备处理
*输入参数:params:云端下发数据,包含房间号,productCode等
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
kk_service_executeRoom_handle
(
cJSON
*
params
)
static
int
kk_service_executeRoom_handle
(
cJSON
*
params
)
{
{
int
res
=
0
;
int
res
=
0
;
...
@@ -412,6 +530,7 @@ static int kk_service_executeRoom_handle(cJSON *params)
...
@@ -412,6 +530,7 @@ static int kk_service_executeRoom_handle(cJSON *params)
kk_free_room_dev_list
();
kk_free_room_dev_list
();
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
#if 0
static int kk_service_setLocalTimer_handle(cJSON *params,const char *deviceCode)
static int kk_service_setLocalTimer_handle(cJSON *params,const char *deviceCode)
{
{
int res = 0;
int res = 0;
...
@@ -624,7 +743,15 @@ static int kk_service_deleteKey_handle(const char *deviceCode,cJSON *param)
...
@@ -624,7 +743,15 @@ static int kk_service_deleteKey_handle(const char *deviceCode,cJSON *param)
return SUCCESS_RETURN;
return SUCCESS_RETURN;
}
}
#endif
/************************************************************
*功能描述:添加场景处理
*输入参数:params:云端下发数据,包含场景名称,场景类型,场景使能等
msgId:消息Id
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
kk_service_addScene_handle
(
cJSON
*
param
,
cJSON
*
msgId
)
static
int
kk_service_addScene_handle
(
cJSON
*
param
,
cJSON
*
msgId
)
{
{
int
res
=
0
;
int
res
=
0
;
...
@@ -637,6 +764,14 @@ static int kk_service_addScene_handle(cJSON *param,cJSON *msgId)
...
@@ -637,6 +764,14 @@ static int kk_service_addScene_handle(cJSON *param,cJSON *msgId)
return
res
;
return
res
;
}
}
/************************************************************
*功能描述:编辑场景处理
*输入参数:params:云端下发数据,包含场景名称,场景类型,场景使能,场景Id等
msgId:消息Id
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
kk_service_updateScene_handle
(
cJSON
*
param
,
cJSON
*
msgId
)
static
int
kk_service_updateScene_handle
(
cJSON
*
param
,
cJSON
*
msgId
)
{
{
int
res
=
0
;
int
res
=
0
;
...
@@ -654,7 +789,14 @@ static int kk_service_updateScene_handle(cJSON *param,cJSON *msgId)
...
@@ -654,7 +789,14 @@ static int kk_service_updateScene_handle(cJSON *param,cJSON *msgId)
res
=
kk_scene_parse_updatescene
(
param
,
sceneId
->
valuestring
);
res
=
kk_scene_parse_updatescene
(
param
,
sceneId
->
valuestring
);
return
res
;
return
res
;
}
}
/************************************************************
*功能描述:删除场景处理
*输入参数:params:云端下发数据,包含场景Id等
msgId:消息Id
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
kk_service_deleteScene_handle
(
cJSON
*
param
,
cJSON
*
msgId
)
static
int
kk_service_deleteScene_handle
(
cJSON
*
param
,
cJSON
*
msgId
)
{
{
int
res
=
0
;
int
res
=
0
;
...
@@ -686,6 +828,14 @@ static int kk_service_deleteScene_handle(cJSON *param,cJSON *msgId)
...
@@ -686,6 +828,14 @@ static int kk_service_deleteScene_handle(cJSON *param,cJSON *msgId)
}
}
return
res
;
return
res
;
}
}
/************************************************************
*功能描述:执行场景处理
*输入参数:params:云端下发数据,包含场景Id等
msgId:消息Id
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
kk_service_executeScene_handle
(
cJSON
*
param
,
cJSON
*
msgId
)
static
int
kk_service_executeScene_handle
(
cJSON
*
param
,
cJSON
*
msgId
)
{
{
int
res
=
0
;
int
res
=
0
;
...
@@ -700,7 +850,14 @@ static int kk_service_executeScene_handle(cJSON *param,cJSON *msgId)
...
@@ -700,7 +850,14 @@ static int kk_service_executeScene_handle(cJSON *param,cJSON *msgId)
return
res
;
return
res
;
}
}
/************************************************************
*功能描述:收到云端数据后的回调处理
*输入参数:type:数据类型
data:具体数据
*输出参数:无
*返 回 值: 无
*其他说明:
*************************************************************/
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
)
{
{
char
*
out
;
char
*
out
;
...
@@ -800,15 +957,17 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
...
@@ -800,15 +957,17 @@ 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
"
);
dm_msg_thing_event_post
(
deviceCode
->
valuestring
,
MSG_REBOOT_REBOOTNOTIFICATION
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
dm_msg_thing_event_post
(
deviceCode
->
valuestring
,
MSG_REBOOT_REBOOTNOTIFICATION
,
msgId
->
valuestring
);
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!!!
\n
"
);
INFO_PRINT
(
" add room!!!
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
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
,
msgId
->
valuestring
);
}
}
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
"
);
INFO_PRINT
(
" delete room
\n
"
);
...
@@ -878,25 +1037,25 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
...
@@ -878,25 +1037,25 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_ADDSCENC
)
==
0
){
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_ADDSCENC
)
==
0
){
INFO_PRINT
(
" add scene
\n
"
);
INFO_PRINT
(
" add scene
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_
SCENE
_MSGID
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_
COMMON
_MSGID
);
kk_service_addScene_handle
(
paramStr
,
msgId
);
kk_service_addScene_handle
(
paramStr
,
msgId
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_UPDATESCENC
)
==
0
){
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_UPDATESCENC
)
==
0
){
INFO_PRINT
(
" update scene
\n
"
);
INFO_PRINT
(
" update scene
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_
SCENE
_MSGID
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_
COMMON
_MSGID
);
kk_service_updateScene_handle
(
paramStr
,
msgId
);
kk_service_updateScene_handle
(
paramStr
,
msgId
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_DELETESCENC
)
==
0
){
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_DELETESCENC
)
==
0
){
INFO_PRINT
(
"delete scene
\n
"
);
INFO_PRINT
(
"delete scene
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_
SCENE
_MSGID
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_
COMMON
_MSGID
);
kk_service_deleteScene_handle
(
paramStr
,
msgId
);
kk_service_deleteScene_handle
(
paramStr
,
msgId
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_EXECUTESCENE
)
==
0
){
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_EXECUTESCENE
)
==
0
){
INFO_PRINT
(
"execute scene
\n
"
);
INFO_PRINT
(
"execute scene
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_
SCENE
_MSGID
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_
COMMON
_MSGID
);
kk_service_executeScene_handle
(
paramStr
,
msgId
);
kk_service_executeScene_handle
(
paramStr
,
msgId
);
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_NEGATIVE
)
==
0
){
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_NEGATIVE
)
==
0
){
...
@@ -933,7 +1092,15 @@ directReturn:
...
@@ -933,7 +1092,15 @@ directReturn:
cJSON_Delete
(
json
);
cJSON_Delete
(
json
);
}
}
int
kk_init_dmproc
(){
/************************************************************
*功能描述:模块初始化,包括回调注册
*输入参数:无
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_init_dmproc
(
void
)
{
int
res
=
0
;
int
res
=
0
;
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
...
@@ -979,7 +1146,13 @@ int kk_init_dmproc(){
...
@@ -979,7 +1146,13 @@ int kk_init_dmproc(){
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
/************************************************************
*功能描述:子设备连接处理,主要是topo add
*输入参数:devid:设备ID
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int
_iotx_linkkit_slave_connect
(
int
devid
)
int
_iotx_linkkit_slave_connect
(
int
devid
)
{
{
int
res
=
0
,
msgid
=
0
,
code
=
0
;
int
res
=
0
,
msgid
=
0
,
code
=
0
;
...
@@ -1007,6 +1180,13 @@ int _iotx_linkkit_slave_connect(int devid)
...
@@ -1007,6 +1180,13 @@ int _iotx_linkkit_slave_connect(int devid)
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
/************************************************************
*功能描述:子设备删除处理,
*输入参数:devid:设备ID
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
_iotx_linkkit_subdev_delete_topo
(
int
devid
)
static
int
_iotx_linkkit_subdev_delete_topo
(
int
devid
)
{
{
int
res
=
0
,
msgid
=
0
,
code
=
0
;
int
res
=
0
,
msgid
=
0
,
code
=
0
;
...
@@ -1064,7 +1244,13 @@ static int _iotx_linkkit_subdev_delete_topo(int devid)
...
@@ -1064,7 +1244,13 @@ static int _iotx_linkkit_subdev_delete_topo(int devid)
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
/************************************************************
*功能描述:主模块释放处理
*输入参数:无
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
_iotx_linkkit_master_close
(
void
)
static
int
_iotx_linkkit_master_close
(
void
)
{
{
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
...
@@ -1088,7 +1274,14 @@ static int _iotx_linkkit_master_close(void)
...
@@ -1088,7 +1274,14 @@ static int _iotx_linkkit_master_close(void)
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
#if 1//DEVICE_MODEL_GATEWAY
/************************************************************
*功能描述:子模块释放处理
*输入参数:devid:设备Id
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
_iotx_linkkit_slave_close
(
int
devid
)
static
int
_iotx_linkkit_slave_close
(
int
devid
)
{
{
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
iotx_linkkit_ctx_t
*
ctx
=
_iotx_linkkit_get_ctx
();
...
@@ -1106,70 +1299,14 @@ static int _iotx_linkkit_slave_close(int devid)
...
@@ -1106,70 +1299,14 @@ static int _iotx_linkkit_slave_close(int devid)
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
#endif
/*int IOT_Linkkit_Open(iotx_linkkit_dev_type_t dev_type, iotx_linkkit_dev_meta_info_t *meta_info)
/************************************************************
{
*功能描述:消息处理主任务
int res = 0;
*输入参数:timeout_ms:超时时间
*输出参数:无
if (dev_type < 0 || dev_type >= IOTX_LINKKIT_DEV_TYPE_MAX || meta_info == NULL) {
*返 回 值: 无
dm_log_err("Invalid Parameter");
*其他说明:
return FAIL_RETURN;
*************************************************************/
}
switch (dev_type) {
case IOTX_LINKKIT_DEV_TYPE_MASTER: {
res = _iotx_linkkit_master_open(meta_info);
if (res == SUCCESS_RETURN) {
res = IOTX_DM_LOCAL_NODE_DEVID;
}
}
break;
case IOTX_LINKKIT_DEV_TYPE_SLAVE: {
#if 1//DEVICE_MODEL_GATEWAY
res = _iotx_linkkit_slave_open(meta_info);
#else
res = FAIL_RETURN;
#endif
}
break;
default: {
dm_log_err("Unknown Device Type");
res = FAIL_RETURN;
}
break;
}
return res;
}*/
/*int IOT_Linkkit_Connect(int devid)
{
int res = 0;
iotx_linkkit_ctx_t *ctx = _iotx_linkkit_get_ctx();
if (devid < 0) {
dm_log_err("Invalid Parameter");
return FAIL_RETURN;
}
if (ctx->is_opened == 0) {
return FAIL_RETURN;
}
_iotx_linkkit_mutex_lock();
if (devid == IOTX_DM_LOCAL_NODE_DEVID) {
res = _iotx_linkkit_master_connect();
} else {
res = _iotx_linkkit_slave_connect(devid);
}
_iotx_linkkit_mutex_unlock();
return res;
}*/
void
IOT_Linkkit_Yield
(
int
timeout_ms
)
void
IOT_Linkkit_Yield
(
int
timeout_ms
)
{
{
...
@@ -1192,6 +1329,13 @@ void IOT_Linkkit_Yield(int timeout_ms)
...
@@ -1192,6 +1329,13 @@ void IOT_Linkkit_Yield(int timeout_ms)
#endif
#endif
}
}
/************************************************************
*功能描述:模块释放处理
*输入参数:devid:设备Id
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int
IOT_Linkkit_Close
(
int
devid
)
int
IOT_Linkkit_Close
(
int
devid
)
{
{
int
res
=
0
;
int
res
=
0
;
...
@@ -1217,7 +1361,13 @@ int IOT_Linkkit_Close(int devid)
...
@@ -1217,7 +1361,13 @@ int IOT_Linkkit_Close(int devid)
return
res
;
return
res
;
}
}
#if 1//DEVICE_MODEL_GATEWAY
/************************************************************
*功能描述:子设备注册,topo add 后的在线上报
*输入参数:devid:设备Id
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
_iotx_linkkit_subdev_login
(
int
devid
)
static
int
_iotx_linkkit_subdev_login
(
int
devid
)
{
{
int
res
=
0
,
msgid
=
0
,
code
=
0
;
int
res
=
0
,
msgid
=
0
,
code
=
0
;
...
@@ -1278,287 +1428,18 @@ static int _iotx_linkkit_subdev_login(int devid)
...
@@ -1278,287 +1428,18 @@ static int _iotx_linkkit_subdev_login(int devid)
return
res
;
return
res
;
}
}
static
int
_iotx_linkkit_subdev_logout
(
int
devid
)
/************************************************************
{
*功能描述:子设备添加到设备队列和数据库中处理函数
int
res
=
0
,
msgid
=
0
,
code
=
0
;
*输入参数:devType:设备类型
iotx_linkkit_upstream_sync_callback_node_t
*
node
=
NULL
;
productCode:产品Id
void
*
semaphore
=
NULL
;
deviceCode:设备Id
mac:设备MAC
res
=
iotx_dm_subdev_logout
(
devid
);
fatherDeviceCode:父设备DeviceCode
if
(
res
<
SUCCESS_RETURN
)
{
return
FAIL_RETURN
;
*输出参数:无
}
*返 回 值: 0:成功;其他:失败
*其他说明:
msgid
=
res
;
*************************************************************/
semaphore
=
HAL_SemaphoreCreate
();
if
(
semaphore
==
NULL
)
{
return
FAIL_RETURN
;
}
_iotx_linkkit_upstream_mutex_lock
();
res
=
_iotx_linkkit_upstream_sync_callback_list_insert
(
msgid
,
semaphore
,
&
node
);
if
(
res
!=
SUCCESS_RETURN
)
{
HAL_SemaphoreDestroy
(
semaphore
);
_iotx_linkkit_upstream_mutex_unlock
();
return
FAIL_RETURN
;
}
_iotx_linkkit_upstream_mutex_unlock
();
res
=
HAL_SemaphoreWait
(
semaphore
,
IOTX_LINKKIT_SYNC_DEFAULT_TIMEOUT_MS
);
if
(
res
<
SUCCESS_RETURN
)
{
_iotx_linkkit_upstream_mutex_lock
();
_iotx_linkkit_upstream_sync_callback_list_remove
(
msgid
);
_iotx_linkkit_upstream_mutex_unlock
();
return
FAIL_RETURN
;
}
_iotx_linkkit_upstream_mutex_lock
();
code
=
node
->
code
;
_iotx_linkkit_upstream_sync_callback_list_remove
(
msgid
);
if
(
code
!=
SUCCESS_RETURN
)
{
_iotx_linkkit_upstream_mutex_unlock
();
return
FAIL_RETURN
;
}
_iotx_linkkit_upstream_mutex_unlock
();
return
res
;
}
#endif
/*int IOT_Linkkit_Report(int devid, iotx_linkkit_msg_type_t msg_type, unsigned char *payload, int payload_len)
{
int res = 0;
iotx_linkkit_ctx_t *ctx = _iotx_linkkit_get_ctx();
if (devid < 0 || msg_type < 0 || msg_type >= IOTX_LINKKIT_MSG_MAX) {
dm_log_err("Invalid Parameter");
return FAIL_RETURN;
}
if (ctx->is_opened == 0 || ctx->is_connected == 0) {
return FAIL_RETURN;
}
_iotx_linkkit_mutex_lock();
switch (msg_type) {
#if !defined(DEVICE_MODEL_RAWDATA_SOLO)
case ITM_MSG_POST_PROPERTY: {
if (payload == NULL || payload_len <= 0) {
dm_log_err("Invalid Parameter");
_iotx_linkkit_mutex_unlock();
return FAIL_RETURN;
}
res = iotx_dm_post_property(devid, (char *)payload, payload_len);
#ifdef LOG_REPORT_TO_CLOUD
if (1 == report_sample) {
send_permance_info(NULL, 0, "4", 1);
}
#endif
}
break;
#ifdef DEVICE_MODEL_SHADOW
case ITM_MSG_PROPERTY_DESIRED_GET: {
if (payload == NULL || payload_len <= 0) {
dm_log_err("Invalid Parameter");
_iotx_linkkit_mutex_unlock();
return FAIL_RETURN;
}
res = iotx_dm_property_desired_get(devid, (char *)payload, payload_len);
}
break;
case ITM_MSG_PROPERTY_DESIRED_DELETE: {
if (payload == NULL || payload_len <= 0) {
dm_log_err("Invalid Parameter");
_iotx_linkkit_mutex_unlock();
return FAIL_RETURN;
}
res = iotx_dm_property_desired_delete(devid, (char *)payload, payload_len);
}
break;
#endif
case ITM_MSG_DEVICEINFO_UPDATE: {
if (payload == NULL || payload_len <= 0) {
dm_log_err("Invalid Parameter");
_iotx_linkkit_mutex_unlock();
return FAIL_RETURN;
}
res = iotx_dm_deviceinfo_update(devid, (char *)payload, payload_len);
}
break;
case ITM_MSG_DEVICEINFO_DELETE: {
if (payload == NULL || payload_len <= 0) {
dm_log_err("Invalid Parameter");
_iotx_linkkit_mutex_unlock();
return FAIL_RETURN;
}
res = iotx_dm_deviceinfo_delete(devid, (char *)payload, payload_len);
}
break;
#endif
case ITM_MSG_POST_RAW_DATA: {
if (payload == NULL || payload_len <= 0) {
dm_log_err("Invalid Parameter");
_iotx_linkkit_mutex_unlock();
return FAIL_RETURN;
}
res = iotx_dm_post_rawdata(devid, (char *)payload, payload_len);
}
break;
case ITM_MSG_LOGIN: {
#if 1//DEVICE_MODEL_GATEWAY
res = _iotx_linkkit_subdev_login(devid);
if (res != SUCCESS_RETURN) {
_iotx_linkkit_mutex_unlock();
return FAIL_RETURN;
}
#else
res = FAIL_RETURN;
#endif
}
break;
case ITM_MSG_LOGOUT: {
#if 1//DEVICE_MODEL_GATEWAY
res = _iotx_linkkit_subdev_logout(devid);
if (res != SUCCESS_RETURN) {
_iotx_linkkit_mutex_unlock();
return FAIL_RETURN;
}
#else
res = FAIL_RETURN;
#endif
}
break;
case ITM_MSG_DELETE_TOPO: {
#if 1//DEVICE_MODEL_GATEWAY
res = _iotx_linkkit_subdev_delete_topo(devid);
if (res != SUCCESS_RETURN) {
_iotx_linkkit_mutex_unlock();
return FAIL_RETURN;
}
#else
res = FAIL_RETURN;
#endif
}
break;
#if 1//DEVICE_MODEL_GATEWAY
#ifdef DEVICE_MODEL_SUBDEV_OTA
case ITM_MSG_REPORT_SUBDEV_FIRMWARE_VERSION: {
res = iotx_dm_send_firmware_version(devid, (const char *)payload);
}
break;
#endif
#endif
default: {
dm_log_err("Unknown Message Type");
res = FAIL_RETURN;
}
break;
}
_iotx_linkkit_mutex_unlock();
return res;
}
int IOT_Linkkit_Query(int devid, iotx_linkkit_msg_type_t msg_type, unsigned char *payload, int payload_len)
{
int res = 0;
#if 1
iotx_linkkit_ctx_t *ctx = _iotx_linkkit_get_ctx();
if (devid < 0 || msg_type < 0 || msg_type >= IOTX_LINKKIT_MSG_MAX) {
dm_log_err("Invalid Parameter");
return FAIL_RETURN;
}
if (ctx->is_opened == 0 || ctx->is_connected == 0) {
return FAIL_RETURN;
}
_iotx_linkkit_mutex_lock();
switch (msg_type) {
#if !defined(DEVICE_MODEL_RAWDATA_SOLO)
case ITM_MSG_QUERY_TIMESTAMP: {
res = iotx_dm_qurey_ntp();
}
break;
#endif
case ITM_MSG_QUERY_TOPOLIST: {
#if 1//DEVICE_MODEL_GATEWAY
res = iotx_dm_query_topo_list();
#else
res = FAIL_RETURN;
#endif
}
break;
case ITM_MSG_QUERY_FOTA_DATA: {
res = iotx_dm_fota_perform_sync((char *)payload, payload_len);
}
break;
case ITM_MSG_QUERY_COTA_DATA: {
res = iotx_dm_cota_perform_sync((char *)payload, payload_len);
}
break;
case ITM_MSG_REQUEST_COTA: {
res = iotx_dm_cota_get_config("product", "file", "");
}
break;
case ITM_MSG_REQUEST_FOTA_IMAGE: {
res = iotx_dm_fota_request_image((const char *)payload, payload_len);
}
break;
default: {
dm_log_err("Unknown Message Type");
res = FAIL_RETURN;
}
break;
}
_iotx_linkkit_mutex_unlock();
return res;
}
int IOT_Linkkit_TriggerEvent(int devid, char *eventid, int eventid_len, char *payload, int payload_len)
{
#if !defined(DEVICE_MODEL_RAWDATA_SOLO)
int res = 0;
iotx_linkkit_ctx_t *ctx = _iotx_linkkit_get_ctx();
if (devid < 0 || eventid == NULL || eventid_len <= 0 || payload == NULL || payload_len <= 0) {
dm_log_err("Invalid Parameter");
return FAIL_RETURN;
}
if (ctx->is_opened == 0 || ctx->is_connected == 0) {
return FAIL_RETURN;
}
_iotx_linkkit_mutex_lock();
res = iotx_dm_post_event(devid, eventid, eventid_len, payload, payload_len);
_iotx_linkkit_mutex_unlock();
return res;
#else
return -1;
#endif
#endif
return -1;
}*/
#if 0//DEVICE_MODEL_GATEWAY
int iot_linkkit_subdev_query_id(char product_key[IOTX_PRODUCT_KEY_LEN + 1], char device_name[IOTX_DEVICE_NAME_LEN + 1])
{
int res = -1;
iotx_linkkit_ctx_t *ctx = _iotx_linkkit_get_ctx();
if (ctx->is_opened == 0) {
return res;
}
iotx_dm_subdev_query(product_key, device_name, &res);
return res;
}
#endif /* #ifdef DEVICE_MODEL_GATEWAY */
int
kk_mid_subdev_add
(
int
devType
,
char
productCode
[
PRODUCT_CODE_MAXLEN
],
char
deviceCode
[
DEVICE_CODE_MAXLEN
],
char
mac
[
DEVICE_MAC_MAXLEN
],
char
fatherDeviceCode
[
DEVICE_CODE_MAXLEN
]){
int
kk_mid_subdev_add
(
int
devType
,
char
productCode
[
PRODUCT_CODE_MAXLEN
],
char
deviceCode
[
DEVICE_CODE_MAXLEN
],
char
mac
[
DEVICE_MAC_MAXLEN
],
char
fatherDeviceCode
[
DEVICE_CODE_MAXLEN
]){
int
res
=
0
;
int
res
=
0
;
int
devid
=
0
;
int
devid
=
0
;
...
@@ -1602,6 +1483,18 @@ int kk_mid_subdev_add(int devType, char productCode[PRODUCT_CODE_MAXLEN], char d
...
@@ -1602,6 +1483,18 @@ int kk_mid_subdev_add(int devType, char productCode[PRODUCT_CODE_MAXLEN], char d
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
/************************************************************
*功能描述:批量子设备添加到设备队列和数据库中处理函数
*输入参数:productCode:产品Id
deviceCode:设备Id
mac:设备MAC
fatherDeviceCode:父设备DeviceCode
*输出参数:无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_mid_subdev_batch_add
(
char
productCode
[
PRODUCT_CODE_MAXLEN
],
char
deviceCode
[
DEVICE_CODE_MAXLEN
],
char
mac
[
DEVICE_MAC_MAXLEN
],
char
fatherDeviceCode
[
DEVICE_CODE_MAXLEN
]){
int
kk_mid_subdev_batch_add
(
char
productCode
[
PRODUCT_CODE_MAXLEN
],
char
deviceCode
[
DEVICE_CODE_MAXLEN
],
char
mac
[
DEVICE_MAC_MAXLEN
],
char
fatherDeviceCode
[
DEVICE_CODE_MAXLEN
]){
int
res
=
0
;
int
res
=
0
;
int
devid
=
0
;
int
devid
=
0
;
...
...
midware/midware/dm/kk_sub_db.c
View file @
965f71af
...
@@ -573,76 +573,91 @@ int kk_subDev_set_action_by_productType(const char *productType,const char *scen
...
@@ -573,76 +573,91 @@ int kk_subDev_set_action_by_productType(const char *productType,const char *scen
int
idx
=
0
;
int
idx
=
0
;
int
gw_support_scene
=
0
;
int
gw_support_scene
=
0
;
kk_tsl_data_t
*
property
=
NULL
;
kk_tsl_data_t
*
property
=
NULL
;
int
k
=
0
,
count
=
0
;
char
typeArray
[
10
][
32
]
=
{
0
};
if
(
productType
==
NULL
){
if
(
productType
==
NULL
){
ERROR_PRINT
(
"ERROR [%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
ERROR_PRINT
(
"ERROR [%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
return
INVALID_PARAMETER
;
return
INVALID_PARAMETER
;
}
}
INFO_PRINT
(
"kk_subDev_set_action_by_productType called!!!
\n
"
);
sqlCmd
=
sqlite3_mprintf
(
searchCmd
,
productType
);
//switch jsut for test
if
(
!
strcmp
(
productType
,
"CURTAIN"
)){
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
memcpy
(
typeArray
[
0
],
"curtain"
,
strlen
(
"curtain"
));
//INFO_PRINT("total_column = %d\n", sqlite3_column_count(stmt));
count
=
1
;
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
}
pDeviceCode
=
sqlite3_column_text
(
stmt
,
DB_DEVICECODE
);
else
if
(
!
strcmp
(
productType
,
"LIGHT"
)){
res
=
dm_mgr_get_device_by_devicecode
(
pDeviceCode
,
&
node
);
memcpy
(
typeArray
[
0
],
"switch"
,
strlen
(
"switch"
));
if
(
res
!=
SUCCESS_RETURN
)
{
memcpy
(
typeArray
[
1
],
"light"
,
strlen
(
"light"
));
continue
;
count
=
2
;
}
}
if
(
kk_subDev_check_scene_support
(
node
->
fatherDeviceCode
)
==
1
){
else
{
gw_support_scene
=
1
;
INFO_PRINT
(
"kk_subDev_set_action_by_productType wrong type!!!
\n
"
);
}
}
else
{
for
(
k
=
0
;
k
<
count
;
k
++
){
gw_support_scene
=
0
;
sqlCmd
=
sqlite3_mprintf
(
searchCmd
,
typeArray
[
k
]);
//curtain type
}
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
if
(
!
strcmp
(
productType
,
"switch"
)){
//INFO_PRINT("total_column = %d\n", sqlite3_column_count(stmt));
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
for
(
idx
=
0
;
idx
<
node
->
dev_shadow
->
property_number
;
idx
++
){
pDeviceCode
=
sqlite3_column_text
(
stmt
,
DB_DEVICECODE
);
property
=
(
kk_tsl_data_t
*
)(
node
->
dev_shadow
->
properties
+
idx
);
res
=
dm_mgr_get_device_by_devicecode
(
pDeviceCode
,
&
node
);
if
(
property
==
NULL
){
if
(
res
!=
SUCCESS_RETURN
)
{
continue
;
continue
;
}
}
if
(
strstr
(
property
->
identifier
,
"PowerSwitch"
)
!=
NULL
){
if
(
kk_subDev_check_scene_support
(
node
->
fatherDeviceCode
)
==
1
){
if
(
gw_support_scene
){
gw_support_scene
=
1
;
kk_scene_action_detail_t
info
=
{
0
};
}
memcpy
(
info
.
deviceCode
,
node
->
deviceCode
,
strlen
(
node
->
deviceCode
));
else
{
memcpy
(
info
.
propertyName
,
property
->
identifier
,
strlen
(
property
->
identifier
));
gw_support_scene
=
0
;
memcpy
(
info
.
propertyValue
,
propertyValue
,
strlen
(
propertyValue
));
}
info
.
epNum
=
1
;
if
(
!
strcmp
(
typeArray
[
k
],
"switch"
)){
info
.
delay
=
0
;
for
(
idx
=
0
;
idx
<
node
->
dev_shadow
->
property_number
;
idx
++
){
kk_scene_action_add
(
node
->
fatherDeviceCode
,
sceneId
,
info
);
property
=
(
kk_tsl_data_t
*
)(
node
->
dev_shadow
->
properties
+
idx
);
if
(
property
==
NULL
){
continue
;
}
if
(
strstr
(
property
->
identifier
,
"PowerSwitch"
)
!=
NULL
){
if
(
gw_support_scene
){
kk_scene_action_detail_t
info
=
{
0
};
memcpy
(
info
.
deviceCode
,
node
->
deviceCode
,
strlen
(
node
->
deviceCode
));
memcpy
(
info
.
propertyName
,
property
->
identifier
,
strlen
(
property
->
identifier
));
memcpy
(
info
.
propertyValue
,
propertyValue
,
strlen
(
propertyValue
));
info
.
epNum
=
1
;
info
.
delay
=
0
;
kk_scene_action_add
(
node
->
fatherDeviceCode
,
sceneId
,
info
);
}
res
=
kk_scene_insert_scene_action
(
type
,
node
->
deviceCode
,
1
,
property
->
identifier
,
propertyValue
,
0
,
sceneId
,
node
->
fatherDeviceCode
);
if
(
res
!=
SUCCESS_RETURN
){
INFO_PRINT
(
"kk_subDev_set_action_by_productType fail!!!
\n
"
);
//return res;
continue
;
}
}
}
res
=
kk_scene_insert_scene_action
(
type
,
node
->
deviceCode
,
1
,
property
->
identifier
,
propertyValue
,
0
,
sceneId
,
node
->
fatherDeviceCode
);
if
(
res
!=
SUCCESS_RETURN
){
INFO_PRINT
(
"kk_subDev_set_action_by_productType fail!!!
\n
"
);
//return res;
continue
;
}
}
}
}
}
else
{
if
(
gw_support_scene
){
kk_scene_action_detail_t
info
=
{
0
};
memcpy
(
info
.
deviceCode
,
node
->
deviceCode
,
strlen
(
node
->
deviceCode
));
memcpy
(
info
.
propertyName
,
propertyName
,
strlen
(
propertyName
));
memcpy
(
info
.
propertyValue
,
propertyValue
,
strlen
(
propertyValue
));
info
.
epNum
=
1
;
info
.
delay
=
0
;
kk_scene_action_add
(
node
->
fatherDeviceCode
,
sceneId
,
info
);
}
}
res
=
kk_scene_insert_scene_action
(
type
,
node
->
deviceCode
,
1
,
else
{
propertyName
,
propertyValue
,
0
,
sceneId
,
node
->
fatherDeviceCode
);
if
(
gw_support_scene
){
if
(
res
!=
SUCCESS_RETURN
){
kk_scene_action_detail_t
info
=
{
0
};
INFO_PRINT
(
"kk_subDev_set_action_by_productType fail!!!
\n
"
);
memcpy
(
info
.
deviceCode
,
node
->
deviceCode
,
strlen
(
node
->
deviceCode
));
//return res;
memcpy
(
info
.
propertyName
,
propertyName
,
strlen
(
propertyName
));
continue
;
memcpy
(
info
.
propertyValue
,
propertyValue
,
strlen
(
propertyValue
));
}
info
.
epNum
=
1
;
}
info
.
delay
=
0
;
}
kk_scene_action_add
(
node
->
fatherDeviceCode
,
sceneId
,
info
);
sqlite3_finalize
(
stmt
);
}
sqlite3_free
(
sqlCmd
);
res
=
kk_scene_insert_scene_action
(
type
,
node
->
deviceCode
,
1
,
propertyName
,
propertyValue
,
0
,
sceneId
,
node
->
fatherDeviceCode
);
if
(
res
!=
SUCCESS_RETURN
){
INFO_PRINT
(
"kk_subDev_set_action_by_productType fail!!!
\n
"
);
//return res;
continue
;
}
}
}
sqlite3_finalize
(
stmt
);
sqlite3_free
(
sqlCmd
);
}
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
...
...
midware/midware/history/kk_history_db.c
View file @
965f71af
...
@@ -22,7 +22,7 @@
...
@@ -22,7 +22,7 @@
全局变量定义
全局变量定义
*************************************************************/
*************************************************************/
extern
sqlite3
*
g_kk_pDb
;
extern
sqlite3
*
g_kk_pDb
;
#define KK_HISTORY_MAX_COUNT
2
00
#define KK_HISTORY_MAX_COUNT
1
00
/*************************************************************
/*************************************************************
函数实现
函数实现
*************************************************************/
*************************************************************/
...
@@ -138,6 +138,36 @@ int kk_history_delete_by_recordtime(const char *table,time_t time)
...
@@ -138,6 +138,36 @@ int kk_history_delete_by_recordtime(const char *table,time_t time)
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
/*查找数据个数*/
int
sqlite_find_count
(
void
)
{
kk_history_ctx_t
*
ctx
=
_kk_history_get_ctx
();
char
*
sql
=
"select count(recordtime) from SensorHistoryInfo;"
;
sqlite3_stmt
*
stmt
=
NULL
;
/*将sql语句转换为sqlite3可识别的语句,返回指针到stmt*/
int
res
=
sqlite3_prepare_v2
(
ctx
->
pDb
,
sql
,
strlen
(
sql
),
&
stmt
,
NULL
);
if
(
SQLITE_OK
!=
res
||
NULL
==
stmt
)
{
goto
err1
;
}
/*执行准备好的sqlite3语句*/
res
=
sqlite3_step
(
stmt
);
if
(
res
!=
SQLITE_ROW
)
{
goto
err2
;
}
int
count
=
sqlite3_column_int
(
stmt
,
0
);
if
(
count
<
0
)
{
goto
err2
;
}
INFO_PRINT
(
"count = %d
\n
"
,
count
);
sqlite3_finalize
(
stmt
);
return
count
;
err2:
sqlite3_finalize
(
stmt
);
err1:
return
-
1
;
}
/************************************************************
/************************************************************
*功能描述: 插入传感器警告类信息到数据库
*功能描述: 插入传感器警告类信息到数据库
*输入参数: deviceCode:设备deviceCode
*输入参数: deviceCode:设备deviceCode
...
@@ -156,6 +186,7 @@ int kk_history_insert_sensor_info(const char* deviceCode,const char* identifier,
...
@@ -156,6 +186,7 @@ int kk_history_insert_sensor_info(const char* deviceCode,const char* identifier,
char
*
zErrMsg
=
0
;
char
*
zErrMsg
=
0
;
sqlite3_stmt
*
stmt
;
sqlite3_stmt
*
stmt
;
time_t
rtime
=
0
;
time_t
rtime
=
0
;
int
count
=
0
;
const
char
*
insertCmd
=
"insert into SensorHistoryInfo (deviceCode, identifier,value,recordtime) \
const
char
*
insertCmd
=
"insert into SensorHistoryInfo (deviceCode, identifier,value,recordtime) \
values ('%s','%s','%s','%d');"
;
values ('%s','%s','%s','%d');"
;
...
@@ -172,18 +203,21 @@ int kk_history_insert_sensor_info(const char* deviceCode,const char* identifier,
...
@@ -172,18 +203,21 @@ int kk_history_insert_sensor_info(const char* deviceCode,const char* identifier,
return
FAIL_RETURN
;
return
FAIL_RETURN
;
}
}
sqlite3_free
(
sqlCmd
);
sqlite3_free
(
sqlCmd
);
count
=
sqlite_find_count
();
/*按时间删除超过最大数量的记录*/
const
char
*
selectCmd
=
"select * from SensorHistoryInfo order by recordtime desc limit (select count(recordtime) from SensorHistoryInfo) offset %d"
;
sqlCmd
=
sqlite3_mprintf
(
selectCmd
,
KK_HISTORY_MAX_COUNT
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
rtime
=
sqlite3_column_int
(
stmt
,
DB_SENSOR_RECORDTIME
);
kk_history_delete_by_recordtime
(
"SensorHistoryInfo"
,
rtime
);
}
sqlite3_finalize
(
stmt
);
sqlite3_free
(
sqlCmd
);
if
(
count
>
KK_HISTORY_MAX_COUNT
)
{
/*按时间删除超过最大数量的记录*/
const
char
*
selectCmd
=
"select * from SensorHistoryInfo order by recordtime desc"
;
sqlite3_prepare_v2
(
ctx
->
pDb
,
selectCmd
,
strlen
(
selectCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
rtime
=
sqlite3_column_int
(
stmt
,
DB_SENSOR_RECORDTIME
);
kk_history_delete_by_recordtime
(
"SensorHistoryInfo"
,
rtime
);
INFO_PRINT
(
"delete rtime:%d
\n
"
,
rtime
);
break
;
}
sqlite3_finalize
(
stmt
);
}
_kk_history_unlock
();
_kk_history_unlock
();
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
...
@@ -208,6 +242,7 @@ int kk_history_insert_Outlet_info(const char* deviceCode,const char* power,const
...
@@ -208,6 +242,7 @@ int kk_history_insert_Outlet_info(const char* deviceCode,const char* power,const
char
*
zErrMsg
=
0
;
char
*
zErrMsg
=
0
;
sqlite3_stmt
*
stmt
;
sqlite3_stmt
*
stmt
;
time_t
rtime
=
0
;
time_t
rtime
=
0
;
int
count
=
0
;
const
char
*
insertCmd
=
"insert into OutletHistoryInfo (deviceCode, power,metering,recordtime) \
const
char
*
insertCmd
=
"insert into OutletHistoryInfo (deviceCode, power,metering,recordtime) \
values ('%s','%s','%s','%d');"
;
values ('%s','%s','%s','%d');"
;
...
@@ -224,18 +259,19 @@ int kk_history_insert_Outlet_info(const char* deviceCode,const char* power,const
...
@@ -224,18 +259,19 @@ int kk_history_insert_Outlet_info(const char* deviceCode,const char* power,const
return
FAIL_RETURN
;
return
FAIL_RETURN
;
}
}
sqlite3_free
(
sqlCmd
);
sqlite3_free
(
sqlCmd
);
count
=
sqlite_find_count
();
/*按时间删除超过最大数量的记录*/
if
(
count
>
KK_HISTORY_MAX_COUNT
){
const
char
*
selectCmd
=
"select * from OutletHistoryInfo order by recordtime desc limit (select count(recordtime) from OutletHistoryInfo) offset %d"
;
/*按时间删除超过最大数量的记录*/
sqlCmd
=
sqlite3_mprintf
(
selectCmd
,
KK_HISTORY_MAX_COUNT
);
//const char *selectCmd = "select * from OutletHistoryInfo order by recordtime desc limit (select count(recordtime) from OutletHistoryInfo) offset %d";
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
const
char
*
selectCmd
=
"select * from OutletHistoryInfo order by recordtime desc"
;
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
sqlite3_prepare_v2
(
ctx
->
pDb
,
selectCmd
,
strlen
(
selectCmd
),
&
stmt
,
NULL
);
rtime
=
sqlite3_column_int
(
stmt
,
DB_OUTLET_RECORDTIME
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
kk_history_delete_by_recordtime
(
"OutletHistoryInfo"
,
rtime
);
rtime
=
sqlite3_column_int
(
stmt
,
DB_OUTLET_RECORDTIME
);
}
kk_history_delete_by_recordtime
(
"OutletHistoryInfo"
,
rtime
);
sqlite3_finalize
(
stmt
);
break
;
sqlite3_free
(
sqlCmd
);
}
sqlite3_finalize
(
stmt
);
}
_kk_history_unlock
();
_kk_history_unlock
();
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
...
...
midware/midware/midware.c
View file @
965f71af
...
@@ -428,7 +428,6 @@ void kk_platMsg_handle(void* data, char* chalMark){
...
@@ -428,7 +428,6 @@ void kk_platMsg_handle(void* data, char* chalMark){
ERROR_PRINT
(
"info or payload params error
\n
"
);
ERROR_PRINT
(
"info or payload params error
\n
"
);
goto
error
;
goto
error
;
}
}
msgType
=
cJSON_GetObjectItem
(
info
,
MSG_TYPE_STR
);
msgType
=
cJSON_GetObjectItem
(
info
,
MSG_TYPE_STR
);
info_dcode
=
cJSON_GetObjectItem
(
info
,
MSG_DEVICE_CODE_STR
);
info_dcode
=
cJSON_GetObjectItem
(
info
,
MSG_DEVICE_CODE_STR
);
if
(
msgType
==
NULL
||
info_dcode
==
NULL
){
if
(
msgType
==
NULL
||
info_dcode
==
NULL
){
...
@@ -489,7 +488,10 @@ void kk_platMsg_handle(void* data, char* chalMark){
...
@@ -489,7 +488,10 @@ void kk_platMsg_handle(void* data, char* chalMark){
if
(
jsonPay
==
NULL
)
goto
error
;
if
(
jsonPay
==
NULL
)
goto
error
;
char
*
outstr
=
cJSON_Print
(
payload
);
char
*
outstr
=
cJSON_Print
(
payload
);
dm_mgr_dev_node_t
*
search_node
=
NULL
;
dm_mgr_dev_node_t
*
search_node
=
NULL
;
dm_mgr_get_device_by_devicecode
(
info_dcode
->
valuestring
,
&
search_node
);
res
=
dm_mgr_get_device_by_devicecode
(
info_dcode
->
valuestring
,
&
search_node
);
if
(
res
<
SUCCESS_RETURN
)
{
goto
error
;
}
if
(
search_node
->
isOffline
){
if
(
search_node
->
isOffline
){
/*如果是离线状态,上报在线给云端*/
/*如果是离线状态,上报在线给云端*/
dm_mgr_set_dev_onoffline
(
search_node
,
0
);
dm_mgr_set_dev_onoffline
(
search_node
,
0
);
...
@@ -606,7 +608,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
...
@@ -606,7 +608,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
kk_history_insert_sensor_info
(
info_dcode
->
valuestring
,
eventItem
->
identifier
,
valueBuf
,
HAL_GetTime
());
kk_history_insert_sensor_info
(
info_dcode
->
valuestring
,
eventItem
->
identifier
,
valueBuf
,
HAL_GetTime
());
}
}
INFO_PRINT
(
"kk_platMsg_handle data: event post
\n
"
);
INFO_PRINT
(
"kk_platMsg_handle data: event post
\n
"
);
dm_msg_thing_event_post
(
info_dcode
->
valuestring
,
eventItem
->
identifier
);
dm_msg_thing_event_post
(
info_dcode
->
valuestring
,
eventItem
->
identifier
,
NULL
);
kk_scene_iftt_check
(
info_dcode
->
valuestring
,
jsonPay
);
kk_scene_iftt_check
(
info_dcode
->
valuestring
,
jsonPay
);
}
}
...
@@ -622,7 +624,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
...
@@ -622,7 +624,7 @@ void kk_platMsg_handle(void* data, char* chalMark){
kk_history_insert_sensor_info
(
info_dcode
->
valuestring
,
eventItem
->
identifier
,
""
,
HAL_GetTime
());
kk_history_insert_sensor_info
(
info_dcode
->
valuestring
,
eventItem
->
identifier
,
""
,
HAL_GetTime
());
}
}
//kk_tsl_set_value(kk_tsl_set_event_output_value,dev_shadow,eventItem->identifier,&itemStr->valueint,NULL);
//kk_tsl_set_value(kk_tsl_set_event_output_value,dev_shadow,eventItem->identifier,&itemStr->valueint,NULL);
dm_msg_thing_event_post
(
info_dcode
->
valuestring
,
eventItem
->
identifier
);
dm_msg_thing_event_post
(
info_dcode
->
valuestring
,
eventItem
->
identifier
,
NULL
);
}
}
}
}
...
...
midware/midware/scene/kk_scene_handle.c
View file @
965f71af
...
@@ -662,18 +662,50 @@ static int kk_scene_parse_repeatday(cJSON *repeatday)
...
@@ -662,18 +662,50 @@ static int kk_scene_parse_repeatday(cJSON *repeatday)
if
(
repeatday
==
NULL
){
if
(
repeatday
==
NULL
){
return
INVALID_PARAMETER
;
return
INVALID_PARAMETER
;
}
}
int
array_size
=
cJSON_GetArraySize
(
repeatday
);
if
(
repeatday
->
type
==
cJSON_Array
){
INFO_PRINT
(
"array_size:%d
\n
"
,
array_size
);
int
array_size
=
cJSON_GetArraySize
(
repeatday
);
if
(
array_size
==
0
){
INFO_PRINT
(
"array_size:%d
\n
"
,
array_size
);
weekflag
=
0
;
if
(
array_size
==
0
){
}
else
{
weekflag
=
0
;
for
(
iCnt
=
0
;
iCnt
<
array_size
;
iCnt
++
){
}
else
{
cJSON
*
pSub
=
cJSON_GetArrayItem
(
repeatday
,
iCnt
);
for
(
iCnt
=
0
;
iCnt
<
array_size
;
iCnt
++
){
if
(
pSub
!=
NULL
){
cJSON
*
pSub
=
cJSON_GetArrayItem
(
repeatday
,
iCnt
);
weekflag
=
weekflag
|
(
1
<<
(
pSub
->
valueint
-
1
));
if
(
pSub
!=
NULL
){
weekflag
=
weekflag
|
(
1
<<
(
pSub
->
valueint
-
1
));
}
}
}
}
}
}
}
else
if
(
repeatday
->
type
==
cJSON_String
){
if
(
strlen
(
repeatday
->
valuestring
)
==
0
){
weekflag
=
0
;
}
else
{
if
(
strstr
(
repeatday
->
valuestring
,
","
)
==
NULL
){
weekflag
=
1
<<
(
atoi
(
repeatday
->
valuestring
)
-
1
);
}
else
{
char
*
tmp
=
repeatday
->
valuestring
;
char
*
ptmp
=
NULL
;
char
weekStr
[
4
]
=
{
0
};
while
(
1
){
memset
(
weekStr
,
0x0
,
sizeof
(
weekStr
));
ptmp
=
strstr
(
tmp
,
","
);
if
(
ptmp
!=
NULL
){
strncpy
(
weekStr
,
tmp
,
ptmp
-
tmp
);
weekflag
=
weekflag
|
(
1
<<
(
atoi
(
weekStr
)
-
1
));
}
else
{
strncpy
(
weekStr
,
tmp
,
1
);
weekflag
=
weekflag
|
(
1
<<
(
atoi
(
weekStr
)
-
1
));
break
;
}
tmp
=
ptmp
+
1
;
}
}
}
}
INFO_PRINT
(
"kk_scene_parse_repeatday weekflag:%d!!!
\n
"
,
weekflag
);
INFO_PRINT
(
"kk_scene_parse_repeatday weekflag:%d!!!
\n
"
,
weekflag
);
return
weekflag
;
return
weekflag
;
...
...
platform/zigbee/app/builder/Z3GatewayHost/ZB/dev_config_table/device_1035.json
View file @
965f71af
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
"cluster"
:
"0x0500"
,
"cluster"
:
"0x0500"
,
"attribute"
:
"0x0002"
,
"attribute"
:
"0x0002"
,
"iasStatusMask"
:
"0x0001"
,
"iasStatusMask"
:
"0x0001"
,
"reportFunc"
:
"
kk_tsl_report_iasZoneStatus
"
,
"reportFunc"
:
""
,
"controlFunc"
:
""
"controlFunc"
:
""
},{
},{
"identity"
:
"Battery"
,
"identity"
:
"Battery"
,
...
@@ -17,14 +17,6 @@
...
@@ -17,14 +17,6 @@
"iasStatusMask"
:
"0x0008"
,
"iasStatusMask"
:
"0x0008"
,
"reportFunc"
:
"kk_tsl_report_battery"
,
"reportFunc"
:
"kk_tsl_report_battery"
,
"controlFunc"
:
""
"controlFunc"
:
""
},{
"identity"
:
"motionAlarm"
,
"endpoint"
:
1
,
"cluster"
:
"0x0500"
,
"attribute"
:
"0x0002"
,
"iasStatusMask"
:
"0x0001"
,
"reportFunc"
:
""
,
"controlFunc"
:
""
},{
},{
"identity"
:
"BatteryAlarm"
,
"identity"
:
"BatteryAlarm"
,
"endpoint"
:
1
,
"endpoint"
:
1
,
...
...
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