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
e012c0df
Commit
e012c0df
authored
Sep 25, 2020
by
chen.weican
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【修改内容】增加区域设置功能,包括添加房间,删除房间,添加设备到房间,删除设备从房间等
【提交人】陈伟灿
parent
45a5c82e
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
553 additions
and
26 deletions
+553
-26
midware/midware/area/kk_area_handle.c
midware/midware/area/kk_area_handle.c
+292
-0
midware/midware/area/kk_area_handle.h
midware/midware/area/kk_area_handle.h
+12
-0
midware/midware/dm/kk_dm_msg.c
midware/midware/dm/kk_dm_msg.c
+45
-6
midware/midware/dm/kk_dm_msg.h
midware/midware/dm/kk_dm_msg.h
+21
-15
midware/midware/dm/kk_linkkit.c
midware/midware/dm/kk_linkkit.c
+178
-5
midware/midware/dm/kk_sub_db.c
midware/midware/dm/kk_sub_db.c
+4
-0
midware/midware/midware.c
midware/midware/midware.c
+1
-0
No files found.
midware/midware/area/kk_area_handle.c
0 → 100644
View file @
e012c0df
#include <stdio.h>
#include "kk_tsl_api.h"
#include "kk_dm_mng.h"
#include "sqlite3.h"
#include "kk_log.h"
#include "kk_area_handle.h"
#define KK_AREA_DB_FILE "kk_area.db"
static
kk_dev_list_t
*
s_device_list
=
NULL
;
typedef
struct
{
void
*
mutex
;
int
roomNum
;
sqlite3
*
pDb
;
}
kk_area_ctx_t
;
typedef
enum
{
DB_IDX
=
0
,
DB_ROOM_NAME
,
DB_ROOM_ID
,
};
typedef
enum
{
DB_DEV_IDX
=
0
,
DB_DEV_ROOM_ID
,
DB_DEV_DEVICECODE
,
DB_DEV_EPNUM
,
};
static
kk_area_ctx_t
s_kk_area_ctx
=
{
NULL
,
0
,
NULL
};
static
kk_area_ctx_t
*
_kk_area_get_ctx
(
void
)
{
return
&
s_kk_area_ctx
;
}
static
void
_kk_area_lock
(
void
)
{
kk_area_ctx_t
*
ctx
=
_kk_area_get_ctx
();
if
(
ctx
->
mutex
)
{
HAL_MutexLock
(
ctx
->
mutex
);
}
}
static
void
_kk_area_unlock
(
void
)
{
kk_area_ctx_t
*
ctx
=
_kk_area_get_ctx
();
if
(
ctx
->
mutex
)
{
HAL_MutexUnlock
(
ctx
->
mutex
);
}
}
static
int
_kk_area_db_init
(
void
)
{
kk_area_ctx_t
*
ctx
=
_kk_area_get_ctx
();
char
*
pcErr
;
//eUtils_LockLock(&sLock);
_kk_area_lock
();
if
(
sqlite3_open_v2
(
KK_AREA_DB_FILE
,
&
ctx
->
pDb
,
SQLITE_OPEN_READWRITE
|
SQLITE_OPEN_CREATE
|
SQLITE_OPEN_FULLMUTEX
,
NULL
)
!=
SQLITE_OK
)
{
ERROR_PRINT
(
"Error initialising linkage database (%s)"
,
sqlite3_errmsg
(
ctx
->
pDb
));
_kk_area_unlock
();
return
FAIL_RETURN
;
}
INFO_PRINT
(
"area db Database opened
\n
"
);
const
char
*
pAreaTable
=
"CREATE TABLE IF NOT EXISTS AreaInfo( \
idx INTEGER PRIMARY KEY, \
name varchar(256), \
roomId varchar(256))"
;
if
(
sqlite3_exec
(
ctx
->
pDb
,
pAreaTable
,
NULL
,
NULL
,
&
pcErr
)
!=
SQLITE_OK
)
{
ERROR_PRINT
(
"Error creating table (%s)
\n
"
,
pcErr
);
sqlite3_free
(
pcErr
);
//eUtils_LockUnlock(&sLock);
_kk_area_unlock
();
return
FAIL_RETURN
;
}
const
char
*
pAreaDevTable
=
"CREATE TABLE IF NOT EXISTS AreaDevInfo( \
idx INTEGER PRIMARY KEY, \
roomId varchar(256), \
deviceCode varchar(33), \
epNum varchar(10))"
;
if
(
sqlite3_exec
(
ctx
->
pDb
,
pAreaDevTable
,
NULL
,
NULL
,
&
pcErr
)
!=
SQLITE_OK
)
{
ERROR_PRINT
(
"Error creating table (%s)
\n
"
,
pcErr
);
sqlite3_free
(
pcErr
);
//eUtils_LockUnlock(&sLock);
_kk_area_unlock
();
return
FAIL_RETURN
;
}
_kk_area_unlock
();
return
SUCCESS_RETURN
;
}
int
kk_area_init
(
void
)
{
int
res
=
0
;
kk_area_ctx_t
*
ctx
=
_kk_area_get_ctx
();
/* Create Mutex */
ctx
->
mutex
=
HAL_MutexCreate
();
if
(
ctx
->
mutex
==
NULL
)
{
return
FAIL_RETURN
;
}
res
=
_kk_area_db_init
();
if
(
res
!=
SUCCESS_RETURN
){
ERROR_PRINT
(
"[%s][%d]kk_area_init FAIL!!!
\n
"
,
__FUNCTION__
,
__LINE__
);
}
return
SUCCESS_RETURN
;
}
int
kk_room_add
(
const
char
*
name
)
{
int
res
=
0
;
kk_area_ctx_t
*
ctx
=
_kk_area_get_ctx
();
char
*
sqlCmd
=
NULL
;
char
roomId
[
10
]
=
{
0
};
char
*
zErrMsg
=
0
;
const
char
*
insertCmd
=
"insert into AreaInfo (name, roomId) \
values ('%s','%s');"
;
_kk_area_lock
();
ctx
->
roomNum
++
;
sprintf
(
roomId
,
"%d"
,
ctx
->
roomNum
);
sqlCmd
=
sqlite3_mprintf
(
insertCmd
,
name
,
roomId
);
res
=
sqlite3_exec
(
ctx
->
pDb
,
sqlCmd
,
NULL
,
NULL
,
&
zErrMsg
);
if
(
res
!=
SQLITE_OK
){
ERROR_PRINT
(
"SQL error: %s
\n
"
,
zErrMsg
);
sqlite3_free
(
zErrMsg
);
}
else
{
//INFO_PRINT("sub device insert data successfully\n");
}
sqlite3_free
(
sqlCmd
);
_kk_area_unlock
();
return
ctx
->
roomNum
;
}
int
kk_room_delete
(
const
char
*
roomId
)
{
int
res
=
0
;
kk_area_ctx_t
*
ctx
=
_kk_area_get_ctx
();
char
*
sqlCmd
=
NULL
;
char
*
zErrMsg
=
0
;
const
char
*
deleteCmd
=
"delete from AreaInfo where roomId = '%s';"
;
_kk_area_lock
();
sqlCmd
=
sqlite3_mprintf
(
deleteCmd
,
roomId
);
INFO_PRINT
(
"Table delete data sqlCmd:%s
\n
"
,
sqlCmd
);
res
=
sqlite3_exec
(
ctx
->
pDb
,
sqlCmd
,
NULL
,
NULL
,
&
zErrMsg
);
if
(
res
!=
SQLITE_OK
){
ERROR_PRINT
(
"SQL error: %s
\n
"
,
zErrMsg
);
sqlite3_free
(
zErrMsg
);
}
else
{
//INFO_PRINT("Table delete data successfully\n");
ctx
->
roomNum
--
;
}
sqlite3_free
(
sqlCmd
);
_kk_area_unlock
();
return
SUCCESS_RETURN
;
}
int
kk_room_dev_add
(
const
char
*
roomId
,
const
char
*
deviceCode
,
const
char
*
epNum
)
{
int
res
=
0
;
kk_area_ctx_t
*
ctx
=
_kk_area_get_ctx
();
char
*
sqlCmd
=
NULL
;
char
*
zErrMsg
=
0
;
const
char
*
insertCmd
=
"insert into AreaDevInfo (roomId, deviceCode, epNum) \
values ('%s','%s','%s');"
;
_kk_area_lock
();
sqlCmd
=
sqlite3_mprintf
(
insertCmd
,
roomId
,
deviceCode
,
epNum
);
res
=
sqlite3_exec
(
ctx
->
pDb
,
sqlCmd
,
NULL
,
NULL
,
&
zErrMsg
);
if
(
res
!=
SQLITE_OK
){
ERROR_PRINT
(
"SQL error: %s
\n
"
,
zErrMsg
);
sqlite3_free
(
zErrMsg
);
}
else
{
//INFO_PRINT("sub device insert data successfully\n");
}
sqlite3_free
(
sqlCmd
);
_kk_area_unlock
();
return
SUCCESS_RETURN
;
}
int
kk_room_dev_remove
(
const
char
*
deviceCode
,
const
char
*
epNum
)
{
int
res
=
0
;
kk_area_ctx_t
*
ctx
=
_kk_area_get_ctx
();
char
*
sqlCmd
=
NULL
;
char
*
zErrMsg
=
0
;
const
char
*
insertCmd
=
"delete from AreaDevInfo where deviceCode = '%s' and epNum = '%s';"
;
_kk_area_lock
();
sqlCmd
=
sqlite3_mprintf
(
insertCmd
,
deviceCode
,
epNum
);
res
=
sqlite3_exec
(
ctx
->
pDb
,
sqlCmd
,
NULL
,
NULL
,
&
zErrMsg
);
if
(
res
!=
SQLITE_OK
){
ERROR_PRINT
(
"SQL error: %s
\n
"
,
zErrMsg
);
sqlite3_free
(
zErrMsg
);
}
else
{
//INFO_PRINT("sub device insert data successfully\n");
}
sqlite3_free
(
sqlCmd
);
_kk_area_unlock
();
return
SUCCESS_RETURN
;
}
int
kk_room_device_list_add
(
const
char
*
deviceCode
)
{
int
len
;
kk_dev_list_t
*
ptr
,
*
pre
;
ptr
=
pre
=
s_device_list
;
if
(
deviceCode
==
NULL
){
return
FAIL_RETURN
;
}
while
(
ptr
!=
NULL
){
pre
=
ptr
;
if
(
strcmp
(
ptr
->
deviceCode
,
deviceCode
)
==
0
){
return
SUCCESS_RETURN
;
}
ptr
=
ptr
->
next
;
}
ptr
=
(
kk_dev_list_t
*
)
malloc
(
sizeof
(
kk_dev_list_t
));
memset
(
ptr
,
0
,
sizeof
(
kk_dev_list_t
));
memcpy
(
ptr
->
deviceCode
,
deviceCode
,
strlen
(
deviceCode
));
if
(
s_device_list
==
NULL
){
s_device_list
=
ptr
;
}
else
{
pre
->
next
=
ptr
;
}
return
SUCCESS_RETURN
;
}
kk_dev_list_t
*
kk_get_room_deviceCode
(
const
char
*
roomId
)
{
sqlite3_stmt
*
stmt
;
char
*
sqlCmd
=
NULL
;
kk_area_ctx_t
*
ctx
=
_kk_area_get_ctx
();
const
char
*
searchCmd
=
"select * from AreaDevInfo;"
;
printf
(
""
);
_kk_area_lock
();
sqlCmd
=
sqlite3_mprintf
(
searchCmd
,
roomId
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
//INFO_PRINT("total_column = %d\n", sqlite3_column_count(stmt));
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
if
(
strcmp
(
sqlite3_column_text
(
stmt
,
DB_DEV_ROOM_ID
),
roomId
)
==
0
){
kk_room_device_list_add
(
sqlite3_column_text
(
stmt
,
DB_DEV_DEVICECODE
));
}
}
sqlite3_finalize
(
stmt
);
_kk_area_unlock
();
return
s_device_list
;
}
void
kk_free_room_dev_list
(
void
)
{
kk_dev_list_t
*
ptr
=
s_device_list
;
kk_dev_list_t
*
ptmp
=
NULL
;
while
(
ptr
!=
NULL
){
ptmp
=
ptr
->
next
;
free
(
ptr
);
ptr
=
NULL
;
ptr
=
ptmp
;
}
s_device_list
=
NULL
;
}
midware/midware/area/kk_area_handle.h
0 → 100644
View file @
e012c0df
#ifndef __KK_AREA_H__
#define __KK_AREA_H__
#include "kk_tsl_common.h"
typedef
struct
kk_dev_list
{
char
deviceCode
[
DEVICE_CODE_MAXLEN
];
struct
kk_dev_list
*
next
;
}
kk_dev_list_t
;
#endif
midware/midware/dm/kk_dm_msg.c
View file @
e012c0df
...
@@ -865,11 +865,11 @@ int dm_msg_thing_property_post_by_identify(char *deviceCode,cJSON *params)
...
@@ -865,11 +865,11 @@ int dm_msg_thing_property_post_by_identify(char *deviceCode,cJSON *params)
kk_property_db_update_value
(
deviceCode
,
property
->
identifier
,
tmpValue
);
kk_property_db_update_value
(
deviceCode
,
property
->
identifier
,
tmpValue
);
}
}
else
if
(
property
->
data_value
.
type
==
KK_TSL_DATA_TYPE_FLOAT
){
else
if
(
property
->
data_value
.
type
==
KK_TSL_DATA_TYPE_FLOAT
){
sprintf
(
tmpValue
,
"%
d
"
,
property
->
data_value
.
value_float
);
sprintf
(
tmpValue
,
"%
f
"
,
property
->
data_value
.
value_float
);
kk_property_db_update_value
(
deviceCode
,
property
->
identifier
,
tmpValue
);
kk_property_db_update_value
(
deviceCode
,
property
->
identifier
,
tmpValue
);
}
}
else
if
(
property
->
data_value
.
type
==
KK_TSL_DATA_TYPE_DOUBLE
){
else
if
(
property
->
data_value
.
type
==
KK_TSL_DATA_TYPE_DOUBLE
){
sprintf
(
tmpValue
,
"%
d
"
,
property
->
data_value
.
value_double
);
sprintf
(
tmpValue
,
"%
u
"
,
property
->
data_value
.
value_double
);
kk_property_db_update_value
(
deviceCode
,
property
->
identifier
,
tmpValue
);
kk_property_db_update_value
(
deviceCode
,
property
->
identifier
,
tmpValue
);
}
}
else
if
(
property
->
data_value
.
type
==
KK_TSL_DATA_TYPE_TEXT
||
else
if
(
property
->
data_value
.
type
==
KK_TSL_DATA_TYPE_TEXT
||
...
@@ -897,11 +897,11 @@ int dm_msg_thing_property_post_by_identify(char *deviceCode,cJSON *params)
...
@@ -897,11 +897,11 @@ int dm_msg_thing_property_post_by_identify(char *deviceCode,cJSON *params)
kk_property_db_update_value
(
deviceCode
,
tmp_identifiers
,
tmpValue
);
kk_property_db_update_value
(
deviceCode
,
tmp_identifiers
,
tmpValue
);
}
}
else
if
(
current_data
->
data_value
.
type
==
KK_TSL_DATA_TYPE_FLOAT
){
else
if
(
current_data
->
data_value
.
type
==
KK_TSL_DATA_TYPE_FLOAT
){
sprintf
(
tmpValue
,
"%
d
"
,
current_data
->
data_value
.
value_float
);
sprintf
(
tmpValue
,
"%
f
"
,
current_data
->
data_value
.
value_float
);
kk_property_db_update_value
(
deviceCode
,
tmp_identifiers
,
tmpValue
);
kk_property_db_update_value
(
deviceCode
,
tmp_identifiers
,
tmpValue
);
}
}
else
if
(
current_data
->
data_value
.
type
==
KK_TSL_DATA_TYPE_DOUBLE
){
else
if
(
current_data
->
data_value
.
type
==
KK_TSL_DATA_TYPE_DOUBLE
){
sprintf
(
tmpValue
,
"%
d
"
,
current_data
->
data_value
.
value_double
);
sprintf
(
tmpValue
,
"%
u
"
,
current_data
->
data_value
.
value_double
);
kk_property_db_update_value
(
deviceCode
,
tmp_identifiers
,
tmpValue
);
kk_property_db_update_value
(
deviceCode
,
tmp_identifiers
,
tmpValue
);
}
}
else
if
(
current_data
->
data_value
.
type
==
KK_TSL_DATA_TYPE_TEXT
||
else
if
(
current_data
->
data_value
.
type
==
KK_TSL_DATA_TYPE_TEXT
||
...
@@ -927,11 +927,11 @@ int dm_msg_thing_property_post_by_identify(char *deviceCode,cJSON *params)
...
@@ -927,11 +927,11 @@ int dm_msg_thing_property_post_by_identify(char *deviceCode,cJSON *params)
kk_property_db_update_value
(
deviceCode
,
tmp_identifiers
,
tmpValue
);
kk_property_db_update_value
(
deviceCode
,
tmp_identifiers
,
tmpValue
);
}
}
else
if
(
current_data_1
->
data_value
.
type
==
KK_TSL_DATA_TYPE_FLOAT
){
else
if
(
current_data_1
->
data_value
.
type
==
KK_TSL_DATA_TYPE_FLOAT
){
sprintf
(
tmpValue
,
"%
d
"
,
current_data_1
->
data_value
.
value_float
);
sprintf
(
tmpValue
,
"%
f
"
,
current_data_1
->
data_value
.
value_float
);
kk_property_db_update_value
(
deviceCode
,
tmp_identifiers
,
tmpValue
);
kk_property_db_update_value
(
deviceCode
,
tmp_identifiers
,
tmpValue
);
}
}
else
if
(
current_data_1
->
data_value
.
type
==
KK_TSL_DATA_TYPE_DOUBLE
){
else
if
(
current_data_1
->
data_value
.
type
==
KK_TSL_DATA_TYPE_DOUBLE
){
sprintf
(
tmpValue
,
"%
d
"
,
current_data_1
->
data_value
.
value_double
);
sprintf
(
tmpValue
,
"%
u
"
,
current_data_1
->
data_value
.
value_double
);
kk_property_db_update_value
(
deviceCode
,
tmp_identifiers
,
tmpValue
);
kk_property_db_update_value
(
deviceCode
,
tmp_identifiers
,
tmpValue
);
}
}
else
if
(
current_data_1
->
data_value
.
type
==
KK_TSL_DATA_TYPE_TEXT
||
else
if
(
current_data_1
->
data_value
.
type
==
KK_TSL_DATA_TYPE_TEXT
||
...
@@ -965,3 +965,42 @@ int dm_msg_thing_property_post_by_identify(char *deviceCode,cJSON *params)
...
@@ -965,3 +965,42 @@ int dm_msg_thing_property_post_by_identify(char *deviceCode,cJSON *params)
}
}
int
kk_msg_execute_property_set
(
const
char
*
productCode
,
const
char
*
deviceCode
,
const
char
*
params
,
const
char
*
fatherDeviceCode
)
{
char
*
method
=
"thing.service.property.set"
;
char
*
req_info
=
NULL
,
*
payload
=
NULL
;
int
req_info_len
=
0
,
payload_len
=
0
;
req_info_len
=
strlen
(
DM_MSG_INFO
)
+
10
+
strlen
(
productCode
)
+
strlen
(
productCode
)
+
strlen
(
KK_THING_SERVICE_PROPERTY_SET
)
+
1
;
req_info
=
malloc
(
req_info_len
);
if
(
req_info
==
NULL
)
{
return
MEMORY_NOT_ENOUGH
;
}
memset
(
req_info
,
0
,
req_info_len
);
snprintf
(
req_info
,
req_info_len
,
DM_MSG_INFO
,
KK_THING_SERVICE_PROPERTY_SET
,
productCode
,
deviceCode
);
payload_len
=
strlen
(
DM_MSG_REQUEST
)
+
10
+
strlen
(
DM_MSG_VERSION
)
+
strlen
(
params
)
+
strlen
(
method
)
+
1
+
20
;
payload
=
malloc
(
payload_len
);
if
(
payload
==
NULL
)
{
free
(
req_info
);
return
MEMORY_NOT_ENOUGH
;
}
memset
(
payload
,
0
,
payload_len
);
snprintf
(
payload
,
payload_len
,
DM_MSG_REQUEST
,
iotx_report_id
(),
DM_MSG_VERSION
,
params
,
HAL_GetTime
(),
method
);
cJSON
*
root
=
cJSON_CreateObject
();
cJSON
*
infoObj
=
cJSON_Parse
(
req_info
);
cJSON
*
payloadObj
=
cJSON_Parse
(
payload
);
cJSON_AddItemToObject
(
root
,
"info"
,
infoObj
);
cJSON_AddItemToObject
(
root
,
"payload"
,
payloadObj
);
void
*
buf
=
cJSON_Print
(
root
);
kk_sendData2gw
(
buf
,
strlen
(
buf
),
fatherDeviceCode
);
free
(
buf
);
free
(
req_info
);
free
(
payload
);
cJSON_Delete
(
root
);
}
midware/midware/dm/kk_dm_msg.h
View file @
e012c0df
...
@@ -41,21 +41,27 @@ typedef struct {
...
@@ -41,21 +41,27 @@ typedef struct {
#define DM_MSG_VERSION "1.0"
#define DM_MSG_VERSION "1.0"
const
char
DM_MSG_INFO
[]
DM_READ_ONLY
;
const
char
DM_MSG_INFO
[]
DM_READ_ONLY
;
#define KK_REGISTER_TOPIC_REPLY "/thing/sub/register_reply"
#define KK_REGISTER_TOPIC_REPLY "/thing/sub/register_reply"
#define KK_ADD_TOPIC_REPLY "/thing/topo/add_reply"
#define KK_ADD_TOPIC_REPLY "/thing/topo/add_reply"
#define KK_LOGIN_TOPIC_REPLY "/thing/combine/login_reply"
#define KK_LOGIN_TOPIC_REPLY "/thing/combine/login_reply"
#define KK_ONLINE_TOPIC_REPLY "/thing/status/online_reply"
#define KK_ONLINE_TOPIC_REPLY "/thing/status/online_reply"
#define KK_THING_SERVICE_PROPERTY_SET "/thing/service/property/set"
#define KK_THING_SERVICE_PROPERTY_SET "/thing/service/property/set"
#define KK_THING_SERVICE_PROPERTY_GET "/thing/service/property/get"
#define KK_THING_SERVICE_PROPERTY_GET "/thing/service/property/get"
#define KK_THING_OTA_DEVICE_UPGRADE "/ota/device/upgrade"
#define KK_THING_OTA_DEVICE_UPGRADE "/ota/device/upgrade"
#define KK_THING_CLOUDSTATE_MSG "/thing/ccu/cloudstate_reply"
#define KK_THING_CLOUDSTATE_MSG "/thing/ccu/cloudstate_reply"
#define KK_THING_TOPO_ADD_MSG "/thing/topo/add"
#define KK_THING_TOPO_ADD_MSG "/thing/topo/add"
#define KK_THING_TOPO_BATCH_ADD_MSG "/thing/topo/batch_add"
#define KK_THING_TOPO_BATCH_ADD_MSG "/thing/topo/batch_add"
#define KK_THING_PROPERTY_POST "property/post"
#define KK_THING_PROPERTY_POST "property/post"
#define KK_THING_TOPO_DELETE_MSG "/thing/topo/delete"
#define KK_THING_TOPO_DELETE_MSG "/thing/topo/delete"
#define KK_THING_TOPO_BATCH_DELETE_MSG "/thing/topo/batch_delete"
#define KK_THING_TOPO_BATCH_DELETE_MSG "/thing/topo/batch_delete"
#define KK_THING_TOPO_CHANGE_MSG "/thing/topo/change"
#define KK_THING_TOPO_CHANGE_MSG "/thing/topo/change"
#define KK_THING_SERVICE_REBOOT "/thing/service/reboot"
#define KK_THING_SERVICE_REBOOT "/thing/service/reboot"
#define KK_THING_SERVICE_ADDROOM "/thing/service/addRoom"
#define KK_THING_SERVICE_DELETEROOM "/thing/service/deleteRoom"
#define KK_THING_SERVICE_ADDDEVICETOROOM "/thing/service/addDeviceToRoom"
#define KK_THING_SERVICE_REMOVEDEVICEFROMROOM "/thing/service/removeDeviceFromRoom"
#define KK_THING_SERVICE_EXECUTEROOM "/thing/service/executeRoom"
//const char DM_URI_SYS_PREFIX[] DM_READ_ONLY = "/sys/%s/%s/";
//const char DM_URI_SYS_PREFIX[] DM_READ_ONLY = "/sys/%s/%s/";
...
...
midware/midware/dm/kk_linkkit.c
View file @
e012c0df
...
@@ -12,6 +12,7 @@
...
@@ -12,6 +12,7 @@
#include "kk_tsl_api.h"
#include "kk_tsl_api.h"
#include "com_api.h"
#include "com_api.h"
#include "kk_log.h"
#include "kk_log.h"
#include "kk_area_handle.h"
#define IOTX_LINKKIT_KEY_ID "id"
#define IOTX_LINKKIT_KEY_ID "id"
...
@@ -234,7 +235,7 @@ int kk_get_cloud_recv_status(void){
...
@@ -234,7 +235,7 @@ int kk_get_cloud_recv_status(void){
return
s_CloudStatusRecv
;
return
s_CloudStatusRecv
;
}
}
static
int
_iotx_linkkit
_delete_handle
(
cJSON
*
payload
)
static
int
kk_topo
_delete_handle
(
cJSON
*
payload
)
{
{
if
(
payload
==
NULL
){
if
(
payload
==
NULL
){
return
FAIL_RETURN
;
return
FAIL_RETURN
;
...
@@ -258,7 +259,153 @@ static int _iotx_linkkit_delete_handle(cJSON *payload)
...
@@ -258,7 +259,153 @@ static int _iotx_linkkit_delete_handle(cJSON *payload)
}
}
static
int
kk_service_addRoom_handle
(
const
char
*
deviceCode
,
cJSON
*
params
)
{
dm_mgr_dev_node_t
*
node
=
NULL
;
char
roomId
[
10
]
=
{
0
};
int
res
=
0
;
int
idx
=
0
,
idxIpt
=
0
;
int
start
=
0
,
serverNum
=
0
;
kk_tsl_service_t
*
serviceItem
=
NULL
;
kk_tsl_data_t
*
pinputData
=
NULL
;
cJSON
*
currentItem
=
NULL
;
if
(
deviceCode
==
NULL
||
params
==
NULL
){
return
INVALID_PARAMETER
;
}
res
=
dm_mgr_get_device_by_devicecode
(
deviceCode
,
&
node
);
if
(
res
<
SUCCESS_RETURN
)
{
ERROR_PRINT
(
"dm_mgr_get_device_by_devicecode failed
\n
"
);
return
res
;
}
cJSON
*
roomInfoStr
=
cJSON_GetObjectItem
(
params
,
MSG_AREA_ADDROOM_ROOMNAME
);
if
(
roomInfoStr
==
NULL
){
return
FAIL_RETURN
;
}
int
id
=
kk_room_add
(
roomInfoStr
->
valuestring
);
sprintf
(
roomId
,
"%d"
,
id
);
kk_tsl_set_value
(
kk_tsl_set_event_output_value
,
node
->
dev_shadow
,
MSG_AREA_ADDROOM_NOTIFICATION_ROOMID
,
NULL
,
roomId
);
return
SUCCESS_RETURN
;
}
static
int
kk_service_deleteRoom_handle
(
cJSON
*
params
)
{
if
(
params
==
NULL
){
return
INVALID_PARAMETER
;
}
cJSON
*
roomInfoStr
=
cJSON_GetObjectItem
(
params
,
MSG_AREA_ROOM_ROOMID
);
if
(
roomInfoStr
==
NULL
){
return
FAIL_RETURN
;
}
kk_room_delete
(
roomInfoStr
->
valuestring
);
return
SUCCESS_RETURN
;
}
static
int
kk_service_addDeviceToRoom_handle
(
cJSON
*
params
)
{
if
(
params
==
NULL
){
return
INVALID_PARAMETER
;
}
cJSON
*
roomId
=
cJSON_GetObjectItem
(
params
,
MSG_AREA_ROOM_ROOMID
);
if
(
roomId
==
NULL
){
return
FAIL_RETURN
;
}
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
params
,
MSG_DEVICE_CODE_STR
);
if
(
deviceCode
==
NULL
){
return
FAIL_RETURN
;
}
cJSON
*
epNum
=
cJSON_GetObjectItem
(
params
,
MSG_AREA_ROOM_EPNUM
);
if
(
epNum
==
NULL
){
return
FAIL_RETURN
;
}
kk_room_dev_add
(
roomId
->
valuestring
,
deviceCode
->
valuestring
,
epNum
->
valuestring
);
return
SUCCESS_RETURN
;
}
static
int
kk_service_removeDeviceFromRoom_handle
(
cJSON
*
params
)
{
if
(
params
==
NULL
){
return
INVALID_PARAMETER
;
}
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
params
,
MSG_DEVICE_CODE_STR
);
if
(
deviceCode
==
NULL
){
return
FAIL_RETURN
;
}
cJSON
*
epNum
=
cJSON_GetObjectItem
(
params
,
MSG_AREA_ROOM_EPNUM
);
if
(
epNum
==
NULL
){
return
FAIL_RETURN
;
}
kk_room_dev_remove
(
deviceCode
->
valuestring
,
epNum
->
valuestring
);
return
SUCCESS_RETURN
;
}
static
int
kk_service_execute_action
(
cJSON
*
action
,
dm_mgr_dev_node_t
*
node
)
{
int
idx
=
0
;
kk_tsl_data_t
*
pCurrentItem
=
NULL
;
cJSON
*
pCurrentData
=
NULL
;
if
(
node
==
NULL
){
return
INVALID_PARAMETER
;
}
void
*
param
=
cJSON_Print
(
action
);
kk_msg_execute_property_set
(
node
->
productCode
,
node
->
deviceCode
,
param
,
node
->
fatherDeviceCode
);
#if 0
for(idx = 0; idx < shadow->property_number; idx++){
pCurrentItem = shadow->properties + idx;
if(pCurrentItem != NULL){
cJSON *pCurrentData = cJSON_GetObjectItem(action, pCurrentItem->identifier);
if(pCurrentData != NULL){
}
}
}
#endif
free
(
param
);
return
SUCCESS_RETURN
;
}
static
int
kk_service_executeRoom_handle
(
cJSON
*
params
)
{
int
res
=
0
;
kk_dev_list_t
*
pList
=
NULL
;
dm_mgr_dev_node_t
*
search_node
=
NULL
;
if
(
params
==
NULL
){
return
INVALID_PARAMETER
;
}
cJSON
*
roomId
=
cJSON_GetObjectItem
(
params
,
MSG_AREA_ROOM_ROOMID
);
if
(
roomId
==
NULL
){
return
FAIL_RETURN
;
}
cJSON
*
productCodeStr
=
cJSON_GetObjectItem
(
params
,
MSG_PRODUCT_TYPE_STR
);
if
(
productCodeStr
==
NULL
){
return
FAIL_RETURN
;
}
pList
=
kk_get_room_deviceCode
(
roomId
->
valuestring
);
if
(
pList
!=
NULL
){
while
(
pList
!=
NULL
){
res
=
dm_mgr_get_device_by_devicecode
(
pList
->
deviceCode
,
&
search_node
);
if
(
res
!=
SUCCESS_RETURN
)
{
pList
=
pList
->
next
;
continue
;
}
if
(
strcmp
(
search_node
->
productCode
,
productCodeStr
->
valuestring
)
==
0
){
cJSON
*
action
=
cJSON_GetObjectItem
(
params
,
MSG_AREA_ROOM_ACTION
);
if
(
action
!=
NULL
){
kk_service_execute_action
(
action
,
search_node
);
}
}
pList
=
pList
->
next
;
}
}
kk_free_room_dev_list
();
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);
...
@@ -352,19 +499,45 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
...
@@ -352,19 +499,45 @@ static void _iotx_linkkit_event_callback(iotx_dm_event_types_t type, char *data)
INFO_PRINT
(
"ota upgrade...
\n
"
);
INFO_PRINT
(
"ota upgrade...
\n
"
);
kk_dm_ota_send
(
data
,
strlen
(
data
)
+
1
);
kk_dm_ota_send
(
data
,
strlen
(
data
)
+
1
);
}
else
if
(
str
str
(
typeJson
->
valuestring
,
KK_THING_TOPO_CHANGE_MSG
)
){
}
else
if
(
str
cmp
(
typeJson
->
valuestring
,
KK_THING_TOPO_CHANGE_MSG
)
==
0
){
INFO_PRINT
(
" topo change
\n
"
);
INFO_PRINT
(
" topo change
\n
"
);
_iotx_linkkit
_delete_handle
(
payload
);
kk_topo
_delete_handle
(
payload
);
}
else
if
(
str
str
(
typeJson
->
valuestring
,
KK_THING_SERVICE_REBOOT
)
){
}
else
if
(
str
cmp
(
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
,
"rebootNotification"
);
sleep
(
3
);
sleep
(
3
);
HAL_Reboot
();
HAL_Reboot
();
}
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_ADDROOM
)
==
0
){
INFO_PRINT
(
" addRoom called!!!
\n
"
);
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
info_root
,
MSG_DEVICE_CODE_STR
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_addRoom_handle
(
deviceCode
->
valuestring
,
paramStr
);
dm_msg_thing_event_post
(
deviceCode
->
valuestring
,
MSG_AREA_ADDROOM_NOTIFICATION
);
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_DELETEROOM
)
==
0
){
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_deleteRoom_handle
(
paramStr
);
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_ADDDEVICETOROOM
)
==
0
){
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_addDeviceToRoom_handle
(
paramStr
);
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_REMOVEDEVICEFROMROOM
)
==
0
){
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_removeDeviceFromRoom_handle
(
paramStr
);
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_EXECUTEROOM
)
==
0
){
INFO_PRINT
(
" executeroom
\n
"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_executeRoom_handle
(
paramStr
);
}
else
{
else
{
INFO_PRINT
(
"Error
222222222222222
\n
"
);
INFO_PRINT
(
"Error
msgtype!!!
\n
"
);
}
}
...
...
midware/midware/dm/kk_sub_db.c
View file @
e012c0df
...
@@ -282,3 +282,7 @@ int kk_subDev_update_auth(int isAuth,const char *deviceCode)
...
@@ -282,3 +282,7 @@ int kk_subDev_update_auth(int isAuth,const char *deviceCode)
...
...
midware/midware/midware.c
View file @
e012c0df
...
@@ -778,6 +778,7 @@ int main(const int argc, const char **argv)
...
@@ -778,6 +778,7 @@ int main(const int argc, const char **argv)
kk_init_dmproc
();
kk_init_dmproc
();
kk_subDb_init
();
kk_subDb_init
();
kk_heartbeat_init
();
kk_heartbeat_init
();
kk_area_init
();
mid_ctx
->
g_mid_dispatch_thread_running
=
1
;
mid_ctx
->
g_mid_dispatch_thread_running
=
1
;
res
=
pthread_create
(
&
mid_ctx
->
g_mid_dispatch_thread
,
NULL
,
mid_dispatch_yield
,
NULL
);
res
=
pthread_create
(
&
mid_ctx
->
g_mid_dispatch_thread
,
NULL
,
mid_dispatch_yield
,
NULL
);
if
(
res
<
0
)
{
if
(
res
<
0
)
{
...
...
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