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
f8e966d5
Commit
f8e966d5
authored
Mar 25, 2021
by
chen.weican
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【修改内容】增加同步接口,待调试
parent
c27371dc
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
588 additions
and
70 deletions
+588
-70
midware/midware/area/kk_area_handle.c
midware/midware/area/kk_area_handle.c
+15
-26
midware/midware/area/kk_area_handle.h
midware/midware/area/kk_area_handle.h
+12
-0
midware/midware/dm/dm_ota.c
midware/midware/dm/dm_ota.c
+0
-1
midware/midware/dm/kk_dm_mng.c
midware/midware/dm/kk_dm_mng.c
+5
-4
midware/midware/dm/kk_property_db.c
midware/midware/dm/kk_property_db.c
+2
-9
midware/midware/dm/kk_property_db.h
midware/midware/dm/kk_property_db.h
+8
-0
midware/midware/dm/kk_sub_db.c
midware/midware/dm/kk_sub_db.c
+17
-29
midware/midware/dm/kk_sub_db.h
midware/midware/dm/kk_sub_db.h
+14
-1
midware/midware/dm/kk_sync_data.c
midware/midware/dm/kk_sync_data.c
+478
-0
midware/midware/dm/kk_sync_data.h
midware/midware/dm/kk_sync_data.h
+37
-0
No files found.
midware/midware/area/kk_area_handle.c
View file @
f8e966d5
...
...
@@ -15,19 +15,7 @@ typedef struct {
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
};
...
...
@@ -185,7 +173,8 @@ static int _kk_check_dev_exist(const char* deviceCode)
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
pDeviceCode
=
sqlite3_column_text
(
stmt
,
DB_DEV_DEVICECODE
);
if
(
!
strcmp
(
deviceCode
,
pDeviceCode
))
{
{
isExist
=
1
;
break
;
}
...
...
midware/midware/area/kk_area_handle.h
View file @
f8e966d5
...
...
@@ -7,6 +7,18 @@ typedef struct kk_dev_list{
struct
kk_dev_list
*
next
;
}
kk_dev_list_t
;
typedef
enum
{
DB_ROOM_IDX
=
0
,
DB_ROOM_NAME
,
DB_ROOM_ID
,
};
typedef
enum
{
DB_DEV_IDX
=
0
,
DB_DEV_ROOM_ID
,
DB_DEV_DEVICECODE
,
DB_DEV_EPNUM
,
};
#endif
midware/midware/dm/dm_ota.c
View file @
f8e966d5
...
...
@@ -22,7 +22,6 @@ int dm_ota_init(void)
dm_ota_ctx_t
*
ctx
=
_dm_ota_get_ctx
();
memset
(
ctx
,
0
,
sizeof
(
dm_ota_ctx_t
));
HAL_GetProduct_Type
(
ctx
->
productType
);
HAL_GetProduct_Code
(
ctx
->
deviceCode
);
return
SUCCESS_RETURN
;
...
...
midware/midware/dm/kk_dm_mng.c
View file @
f8e966d5
...
...
@@ -508,7 +508,7 @@ static void _dm_mgr_destroy_devlist(void)
free
(
del_node
);
}
}
extern
char
*
kk_sync_get_info
();
int
dm_mgr_init
(
void
)
{
int
res
=
0
;
...
...
@@ -527,11 +527,12 @@ int dm_mgr_init(void)
/* Init Device Id*/
ctx
->
global_devid
=
1
;
kk_property_db_init
();
/* Init Device List */
INIT_LIST_HEAD
(
&
ctx
->
dev_list
);
HAL_Get_mac
(
mac
);
kk_sync_init
();
//kk_sync_get_info();
res
=
dm_mgr_device_create
(
KK_DM_DEVICE_CCU
,
KK_DM_CCU_DEVICE_PRODUCT_CODE
,
KK_CCU_ID
,
mac
,
""
,
KK_DEV_UNKNOW
,
&
devId
,
&
heartbeat
);
if
(
res
!=
SUCCESS_RETURN
)
{
goto
ERROR
;
...
...
@@ -1086,7 +1087,7 @@ int dm_mgr_upstream_thing_topo_get(void)
memset
(
&
request
,
0
,
sizeof
(
dm_msg_request_t
));
request
.
msgTypeStr
=
DM_URI_THING_TOPO_GET
;
HAL_Get
Product
_Code
(
request
.
deviceCode
);
HAL_Get
Device
_Code
(
request
.
deviceCode
);
res
=
_dm_mgr_search_dev_by_pkdn
(
request
.
deviceCode
,
&
node
);
...
...
midware/midware/dm/kk_property_db.c
View file @
f8e966d5
...
...
@@ -29,14 +29,7 @@ typedef struct {
sqlite3
*
pDb
;
}
kk_property_db_ctx_t
;
typedef
enum
{
DB_IDX
=
0
,
DB_DEVICECODE
,
DB_IDENTIFITER
,
DB_VALUE
,
DB_VALUETYPE
,
DB_DEVTYPE
};
typedef
enum
{
DB_LOCKKEY_IDX
=
0
,
...
...
@@ -184,7 +177,7 @@ static int _kk_check_property_exist(const char* deviceCode,const char* identifie
pIdentifier
=
sqlite3_column_text
(
stmt
,
DB_IDENTIFITER
);
if
(
!
strcmp
(
deviceCode
,
pDeviceCode
)
&&!
strcmp
(
identifier
,
pIdentifier
))
{
{
isExist
=
1
;
break
;
}
...
...
midware/midware/dm/kk_property_db.h
View file @
f8e966d5
...
...
@@ -8,6 +8,14 @@ typedef struct{
char
raw
[
60
];
}
kk_prop_raw_struct_t
;
typedef
enum
{
DB_IDX
=
0
,
DB_DEVICECODE
,
DB_IDENTIFITER
,
DB_VALUE
,
DB_VALUETYPE
,
DB_DEVTYPE
};
int
kk_property_db_init
(
void
);
#endif
...
...
midware/midware/dm/kk_sub_db.c
View file @
f8e966d5
...
...
@@ -22,20 +22,7 @@ typedef struct {
int
subDevNum
;
sqlite3
*
pDb
;
}
kk_subDb_ctx_t
;
typedef
enum
{
DB_IDX
=
0
,
DB_ONLINE
,
DB_PRODUCTCODE
,
DB_DEVICECODE
,
DB_MAC
,
DB_FATHERDEVICECODE
,
DB_VERSION
,
DB_AUTH
,
DB_DEVTYPE
,
DB_HEARTBEAT
,
DB_PRODUCTTYPE
,
DB_SCENESUPPORT
};
static
kk_subDb_ctx_t
s_kk_subDb_ctx
=
{
NULL
,
0
,
NULL
};
static
kk_subDb_ctx_t
*
_kk_subDb_get_ctx
(
void
)
...
...
@@ -128,12 +115,12 @@ static int _kk_load_subDevice(void)
_kk_subDb_lock
();
sqlite3_prepare_v2
(
ctx
->
pDb
,
searchCmd
,
strlen
(
searchCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
deviceType
=
sqlite3_column_int
(
stmt
,
DB_DEVTYPE
);
deviceType
=
sqlite3_column_int
(
stmt
,
DB_
SUB_
DEVTYPE
);
res
=
dm_mgr_subdev_create
(
deviceType
,
sqlite3_column_text
(
stmt
,
DB_PRODUCTCODE
),
sqlite3_column_text
(
stmt
,
DB_DEVICECODE
),
sqlite3_column_text
(
stmt
,
DB_MAC
),
sqlite3_column_text
(
stmt
,
DB_FATHERDEVICECODE
),
sqlite3_column_text
(
stmt
,
DB_
SUB_
PRODUCTCODE
),
sqlite3_column_text
(
stmt
,
DB_
SUB_
DEVICECODE
),
sqlite3_column_text
(
stmt
,
DB_
SUB_
MAC
),
sqlite3_column_text
(
stmt
,
DB_
SUB_
FATHERDEVICECODE
),
KK_DEV_UNKNOW
,
&
devId
,
&
heartbeat
);
if
(
res
!=
SUCCESS_RETURN
){
...
...
@@ -147,11 +134,11 @@ static int _kk_load_subDevice(void)
iotx_dm_subscribe
(
devId
);
//sync the data from property db
kk_property_sync_values
(
sqlite3_column_text
(
stmt
,
DB_DEVICECODE
));
kk_property_sync_values
(
sqlite3_column_text
(
stmt
,
DB_
SUB_
DEVICECODE
));
usleep
(
100000
);
if
(
deviceType
==
KK_DM_DEVICE_GATEWAY
){
kk_dm_gw_status_check_push
(
sqlite3_column_text
(
stmt
,
DB_DEVICECODE
));
kk_dm_gw_status_check_push
(
sqlite3_column_text
(
stmt
,
DB_
SUB_
DEVICECODE
));
}
//post the property to cloud
//dm_msg_thing_property_post_all(sqlite3_column_text(stmt, DB_DEVICECODE));
...
...
@@ -209,9 +196,10 @@ static int _kk_check_subDev_exist(const char* deviceCode)
sqlite3_prepare_v2
(
ctx
->
pDb
,
searchCmd
,
strlen
(
searchCmd
),
&
stmt
,
NULL
);
//INFO_PRINT("total_column = %d\n", sqlite3_column_count(stmt));
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
pmac
=
sqlite3_column_text
(
stmt
,
DB_DEVICECODE
);
pmac
=
sqlite3_column_text
(
stmt
,
DB_
SUB_
DEVICECODE
);
if
(
!
strcmp
(
deviceCode
,
pmac
))
{
{
isExist
=
1
;
break
;
}
...
...
@@ -447,15 +435,15 @@ int kk_subDev_send_property_get_from_db(void)
_kk_subDb_lock
();
sqlite3_prepare_v2
(
ctx
->
pDb
,
searchCmd
,
strlen
(
searchCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
isOffline
=
sqlite3_column_int
(
stmt
,
DB_DEVTYPE
);
isOffline
=
sqlite3_column_int
(
stmt
,
DB_
SUB_
DEVTYPE
);
if
(
isOffline
==
KK_DEV_ONLINE
){
res
=
dm_mgr_get_device_by_devicecode
(
sqlite3_column_text
(
stmt
,
DB_DEVICECODE
),
&
node
);
res
=
dm_mgr_get_device_by_devicecode
(
sqlite3_column_text
(
stmt
,
DB_
SUB_
DEVICECODE
),
&
node
);
if
(
res
!=
SUCCESS_RETURN
)
{
continue
;
}
iotx_dm_dev_online
(
node
->
devid
);
dm_msg_thing_property_post_all
(
sqlite3_column_text
(
stmt
,
DB_DEVICECODE
));
dm_msg_thing_property_post_all
(
sqlite3_column_text
(
stmt
,
DB_
SUB_
DEVICECODE
));
}
}
sqlite3_finalize
(
stmt
);
...
...
@@ -490,7 +478,7 @@ int kk_subDev_send_property_get(const char *fatherDeviceCode)
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
){
pDeviceCode
=
sqlite3_column_text
(
stmt
,
DB_DEVICECODE
);
pDeviceCode
=
sqlite3_column_text
(
stmt
,
DB_
SUB_
DEVICECODE
);
res
=
dm_mgr_get_device_by_devicecode
(
pDeviceCode
,
&
node
);
if
(
res
!=
SUCCESS_RETURN
)
{
ERROR_PRINT
(
"ERROR [%s][%d] res:%d
\n
"
,
__FUNCTION__
,
__LINE__
,
res
);
...
...
@@ -540,7 +528,7 @@ int kk_subDev_check_scene_support(const char *deviceCode)
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
){
pDeviceCode
=
sqlite3_column_text
(
stmt
,
DB_DEVICECODE
);
pDeviceCode
=
sqlite3_column_text
(
stmt
,
DB_
SUB_
DEVICECODE
);
if
(
!
strcmp
(
deviceCode
,
pDeviceCode
))
{
res
=
1
;
}
...
...
@@ -598,7 +586,7 @@ int kk_subDev_set_action_by_productType(const char *productType,const char *scen
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
){
pDeviceCode
=
sqlite3_column_text
(
stmt
,
DB_DEVICECODE
);
pDeviceCode
=
sqlite3_column_text
(
stmt
,
DB_
SUB_
DEVICECODE
);
res
=
dm_mgr_get_device_by_devicecode
(
pDeviceCode
,
&
node
);
if
(
res
!=
SUCCESS_RETURN
)
{
continue
;
...
...
midware/midware/dm/kk_sub_db.h
View file @
f8e966d5
...
...
@@ -10,6 +10,19 @@ int kk_subDev_delete_byMac(char device_mac[DEVICE_MAC_MAXLEN]);
int
kk_subDev_update_offline
(
int
isOnline
,
const
char
*
device_mac
);
int
kk_subDev_update_auth
(
int
isAuth
,
const
char
*
deviceCode
);
typedef
enum
{
DB_SUB_IDX
=
0
,
DB_SUB_ONLINE
,
DB_SUB_PRODUCTCODE
,
DB_SUB_DEVICECODE
,
DB_SUB_MAC
,
DB_SUB_FATHERDEVICECODE
,
DB_SUB_VERSION
,
DB_SUB_AUTH
,
DB_SUB_DEVTYPE
,
DB_SUB_HEARTBEAT
,
DB_SUB_PRODUCTTYPE
,
DB_SUB_SCENESUPPORT
};
#endif
midware/midware/dm/kk_sync_data.c
0 → 100644
View file @
f8e966d5
/************************************************************
*版权所有 (C)2020,公司(或个人)名称
*
*文件名称: kk_sync_data.c
*内容摘要: 数据同步处理相关
*其他说明:
*当前版本:
*************************************************************/
#include <stdio.h>
#include "kk_tsl_api.h"
#include "kk_sync_data.h"
#include "kk_dm_mng.h"
#include "kk_scene_handle.h"
#include "kk_scene_db.h"
#include "sqlite3.h"
#include "kk_log.h"
#include "cJSON.h"
#include "kk_property_db.h"
#include "kk_tsl_api.h"
#include "kk_area_handle.h"
#include "kk_sub_db.h"
extern
sqlite3
*
g_kk_pDb
;
typedef
struct
{
void
*
mutex
;
sqlite3
*
pDb
;
}
kk_sync_ctx_t
;
static
kk_sync_ctx_t
s_kk_sync_ctx
=
{
NULL
,
NULL
};
static
kk_sync_ctx_t
*
_kk_sync_get_ctx
(
void
)
{
return
&
s_kk_sync_ctx
;
}
static
void
_kk_sync_lock
(
void
)
{
kk_sync_ctx_t
*
ctx
=
_kk_sync_get_ctx
();
if
(
ctx
->
mutex
)
{
HAL_MutexLock
(
ctx
->
mutex
);
}
}
static
void
_kk_sync_unlock
(
void
)
{
kk_sync_ctx_t
*
ctx
=
_kk_sync_get_ctx
();
if
(
ctx
->
mutex
)
{
HAL_MutexUnlock
(
ctx
->
mutex
);
}
}
/************************************************************
*功能描述:同步数据模块初始化
*输入参数:无
*输出参数:无
*返 回 值:0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_sync_init
(
void
)
{
int
res
=
0
;
kk_sync_ctx_t
*
ctx
=
_kk_sync_get_ctx
();
/* Create Mutex */
ctx
->
mutex
=
HAL_MutexCreate
();
if
(
ctx
->
mutex
==
NULL
)
{
return
FAIL_RETURN
;
}
ctx
->
pDb
=
g_kk_pDb
;
return
SUCCESS_RETURN
;
}
static
int
kk_get_rooms_devices
(
cJSON
*
roomDevicesArray
,
char
*
roomId
)
{
char
*
sqlCmd
=
NULL
;
sqlite3_stmt
*
stmt
;
char
*
deviceCode
=
NULL
;
cJSON
*
deviceObj
=
NULL
;
kk_sync_ctx_t
*
ctx
=
_kk_sync_get_ctx
();
if
(
roomDevicesArray
==
NULL
||
roomId
==
NULL
){
return
FAIL_RETURN
;
}
sqlCmd
=
sqlite3_mprintf
(
"select * from AreaDevInfo where roomId = '%s'"
,
roomId
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
deviceObj
=
cJSON_CreateObject
();
deviceCode
=
sqlite3_column_text
(
stmt
,
DB_DEV_DEVICECODE
);
cJSON_AddStringToObject
(
deviceObj
,
KK_SYNC_DEVICECODE_STR
,
deviceCode
);
}
sqlite3_free
(
sqlCmd
);
sqlite3_finalize
(
stmt
);
return
SUCCESS_RETURN
;
}
static
int
kk_get_rooms_info
(
cJSON
*
data
)
{
char
*
sqlCmd
=
NULL
;
sqlite3_stmt
*
stmt
;
char
*
roomId
=
NULL
;
char
*
roomName
=
NULL
;
int
valueType
=
0
;
kk_sync_ctx_t
*
ctx
=
_kk_sync_get_ctx
();
if
(
data
==
NULL
){
return
FAIL_RETURN
;
}
cJSON
*
rooms
=
cJSON_CreateArray
();
cJSON
*
roomItem
=
cJSON_CreateObject
();
cJSON
*
roomDevicesArray
=
cJSON_CreateArray
();
_kk_sync_lock
();
sqlCmd
=
sqlite3_mprintf
(
"select * from AreaInfo"
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
roomId
=
sqlite3_column_text
(
stmt
,
DB_ROOM_ID
);
roomName
=
sqlite3_column_text
(
stmt
,
DB_ROOM_NAME
);
cJSON_AddStringToObject
(
roomItem
,
KK_SYNC_ROOMID_STR
,
roomId
);
cJSON_AddStringToObject
(
roomItem
,
KK_SYNC_NANE_STR
,
roomName
);
kk_get_rooms_devices
(
roomDevicesArray
,
roomId
);
}
sqlite3_free
(
sqlCmd
);
sqlite3_finalize
(
stmt
);
_kk_sync_unlock
();
cJSON_AddItemToObject
(
roomItem
,
KK_SYNC_DEVICES_STR
,
roomDevicesArray
);
cJSON
*
sceneId
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
sceneId
,
KK_SYNC_SCENEID_STR
,
"sceneId"
);
cJSON
*
scenes
=
cJSON_CreateArray
();
cJSON_AddItemToArray
(
scenes
,
sceneId
);
cJSON_AddItemToObject
(
roomItem
,
KK_SYNC_SCENE_STR
,
scenes
);
cJSON_AddItemToArray
(
rooms
,
roomItem
);
cJSON_AddItemToObject
(
data
,
KK_SYNC_ROOMS_STR
,
rooms
);
return
SUCCESS_RETURN
;
}
static
int
kk_get_properties_info
(
char
*
deviceCode
,
cJSON
*
obj
)
{
char
*
sqlCmd
=
NULL
;
char
*
zErrMsg
=
0
;
sqlite3_stmt
*
stmt
;
char
*
propertyStr
=
NULL
;
char
*
valueStr
=
NULL
;
int
valueType
=
0
;
kk_sync_ctx_t
*
ctx
=
_kk_sync_get_ctx
();
if
(
deviceCode
==
NULL
||
obj
==
NULL
){
return
FAIL_RETURN
;
}
cJSON
*
propertyItem
=
cJSON_CreateObject
();
sqlCmd
=
sqlite3_mprintf
(
"select * from PropertiesInfo WHERE deviceCode = '%s' "
,
deviceCode
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
propertyStr
=
sqlite3_column_text
(
stmt
,
DB_IDENTIFITER
);
valueType
=
sqlite3_column_int
(
stmt
,
DB_VALUETYPE
);
valueStr
=
sqlite3_column_text
(
stmt
,
DB_VALUE
);
if
(
valueType
==
KK_TSL_DATA_TYPE_TEXT
){
cJSON_AddStringToObject
(
propertyItem
,
propertyStr
,
valueStr
);
}
else
if
(
valueType
==
KK_TSL_DATA_TYPE_INT
||
valueType
==
KK_TSL_DATA_TYPE_ENUM
||
valueType
==
KK_TSL_DATA_TYPE_BOOL
){
cJSON_AddNumberToObject
(
propertyItem
,
propertyStr
,
atoi
(
valueStr
));
}
}
cJSON_AddItemToObject
(
obj
,
KK_SYNC_PROPERTY_STR
,
propertyItem
);
sqlite3_free
(
sqlCmd
);
sqlite3_finalize
(
stmt
);
return
SUCCESS_RETURN
;
}
static
int
kk_get_sub_devices_info
(
cJSON
*
gwdevicesItem
,
char
*
deviceCode
)
{
char
*
sqlCmd
=
NULL
;
char
*
zErrMsg
=
0
;
sqlite3_stmt
*
stmt
;
kk_sync_ctx_t
*
ctx
=
_kk_sync_get_ctx
();
char
*
subDeviceCode
=
NULL
;
char
*
subProductCode
=
NULL
;
char
*
subVersion
=
NULL
;
char
*
subIsline
=
NULL
;
if
(
gwdevicesItem
==
NULL
||
deviceCode
==
NULL
){
return
FAIL_RETURN
;
}
cJSON
*
subDevices
=
cJSON_CreateArray
();
sqlCmd
=
sqlite3_mprintf
(
"select * from SubDeviceInfo WHERE fatherDeviceCode = '%s' "
,
deviceCode
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
cJSON
*
subdevicesItem
=
cJSON_CreateObject
();
subDeviceCode
=
sqlite3_column_text
(
stmt
,
DB_SUB_DEVICECODE
);
subProductCode
=
sqlite3_column_text
(
stmt
,
DB_SUB_PRODUCTCODE
);
subVersion
=
sqlite3_column_text
(
stmt
,
DB_SUB_VERSION
);
subIsline
=
sqlite3_column_text
(
stmt
,
DB_SUB_ONLINE
);
cJSON_AddStringToObject
(
subdevicesItem
,
KK_SYNC_DEVICECODE_STR
,
subDeviceCode
);
cJSON_AddStringToObject
(
subdevicesItem
,
KK_SYNC_VERSION_STR
,
subVersion
);
cJSON_AddStringToObject
(
subdevicesItem
,
KK_SYNC_MAC_STR
,
subDeviceCode
);
cJSON_AddStringToObject
(
subdevicesItem
,
KK_SYNC_NANE_STR
,
"SUBDEV"
);
cJSON_AddStringToObject
(
subdevicesItem
,
KK_SYNC_ONLINE_STR
,
subIsline
);
cJSON_AddStringToObject
(
subdevicesItem
,
KK_SYNC_PRODUCTCODE_STR
,
subProductCode
);
cJSON_AddStringToObject
(
subdevicesItem
,
KK_SYNC_SN_STR
,
""
);
cJSON_AddStringToObject
(
subdevicesItem
,
KK_SYNC_STATUS_STR
,
"启动"
);
kk_get_properties_info
(
subDeviceCode
,
subdevicesItem
);
cJSON_AddItemToArray
(
subDevices
,
gwdevicesItem
);
}
cJSON_AddItemToObject
(
gwdevicesItem
,
KK_SYNC_DEVICES_STR
,
subDevices
);
sqlite3_free
(
sqlCmd
);
sqlite3_finalize
(
stmt
);
return
SUCCESS_RETURN
;
}
static
int
kk_get_gw_devices_info
(
cJSON
*
gwdevices
)
{
char
*
sqlCmd
=
NULL
;
char
*
zErrMsg
=
0
;
sqlite3_stmt
*
stmt
;
cJSON
*
gwdevicesItem
=
NULL
;
char
*
gw_deviceCode
=
NULL
;
char
*
gw_productCode
=
NULL
;
char
*
gw_version
=
NULL
;
char
*
gw_isline
=
NULL
;
char
*
valueStr
=
NULL
;
int
valueType
=
0
;
kk_sync_ctx_t
*
ctx
=
_kk_sync_get_ctx
();
if
(
gwdevices
==
NULL
){
return
FAIL_RETURN
;
}
_kk_sync_lock
();
sqlCmd
=
sqlite3_mprintf
(
"select * from SubDeviceInfo WHERE devType = '%d' "
,
KK_DM_DEVICE_GATEWAY
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
cJSON
*
gwdevicesItem
=
cJSON_CreateObject
();
gw_deviceCode
=
sqlite3_column_text
(
stmt
,
DB_SUB_DEVICECODE
);
gw_productCode
=
sqlite3_column_text
(
stmt
,
DB_SUB_PRODUCTCODE
);
gw_version
=
sqlite3_column_text
(
stmt
,
DB_SUB_VERSION
);
gw_isline
=
sqlite3_column_text
(
stmt
,
DB_SUB_ONLINE
);
cJSON_AddStringToObject
(
gwdevicesItem
,
KK_SYNC_DEVICECODE_STR
,
gw_deviceCode
);
cJSON_AddStringToObject
(
gwdevicesItem
,
KK_SYNC_VERSION_STR
,
gw_version
);
cJSON_AddStringToObject
(
gwdevicesItem
,
KK_SYNC_MAC_STR
,
gw_deviceCode
);
cJSON_AddStringToObject
(
gwdevicesItem
,
KK_SYNC_NANE_STR
,
"GW"
);
cJSON_AddStringToObject
(
gwdevicesItem
,
KK_SYNC_ONLINE_STR
,
gw_isline
);
cJSON_AddStringToObject
(
gwdevicesItem
,
KK_SYNC_PRODUCTCODE_STR
,
gw_productCode
);
cJSON_AddStringToObject
(
gwdevicesItem
,
KK_SYNC_SN_STR
,
""
);
cJSON_AddStringToObject
(
gwdevicesItem
,
KK_SYNC_STATUS_STR
,
"启动"
);
kk_get_properties_info
(
gw_deviceCode
,
gwdevicesItem
);
kk_get_sub_devices_info
(
gwdevicesItem
,
gw_deviceCode
);
cJSON_AddItemToArray
(
gwdevices
,
gwdevicesItem
);
}
sqlite3_free
(
sqlCmd
);
sqlite3_finalize
(
stmt
);
_kk_sync_unlock
();
return
SUCCESS_RETURN
;
}
static
int
kk_get_devices_info
(
cJSON
*
data
)
{
if
(
data
==
NULL
){
return
FAIL_RETURN
;
}
cJSON
*
gwdevices
=
cJSON_CreateArray
();
kk_get_gw_devices_info
(
gwdevices
);
cJSON_AddItemToObject
(
data
,
KK_SYNC_DEVICES_STR
,
gwdevices
);
return
SUCCESS_RETURN
;
}
static
int
kk_get_scenes_actions_info
(
char
*
actionArray
)
{
char
*
sqlCmd
=
NULL
;
char
*
zErrMsg
=
0
;
sqlite3_stmt
*
stmt
;
char
*
deviceCode
=
NULL
;
char
*
propertyName
=
NULL
;
char
*
propertyValue
=
NULL
;
char
*
type
=
NULL
;
int
delay
=
0
,
epNum
=
0
;
kk_sync_ctx_t
*
ctx
=
_kk_sync_get_ctx
();
if
(
actionArray
==
NULL
){
return
FAIL_RETURN
;
}
sqlCmd
=
sqlite3_mprintf
(
"select * from SceneActionInfo"
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
cJSON
*
actionItem
=
cJSON_CreateObject
();
deviceCode
=
sqlite3_column_text
(
stmt
,
DB_SCENEACTION_DEVICECODE
);
delay
=
sqlite3_column_int
(
stmt
,
DB_SCENEACTION_DELAY
);
epNum
=
sqlite3_column_int
(
stmt
,
DB_SCENEACTION_EPNUM
);
propertyName
=
sqlite3_column_text
(
stmt
,
DB_SCENEACTION_PROPERTYNAME
);
propertyValue
=
sqlite3_column_text
(
stmt
,
DB_SCENEACTION_PROPERTYVALUE
);
type
=
sqlite3_column_text
(
stmt
,
DB_SCENEACTION_TYPE
);
cJSON_AddStringToObject
(
actionItem
,
KK_SYNC_DEVICECODE_STR
,
deviceCode
);
cJSON_AddNumberToObject
(
actionItem
,
KK_SYNC_SCENE_DELAY_STR
,
delay
);
cJSON_AddNumberToObject
(
actionItem
,
KK_SYNC_SCENE_EPNUM_STR
,
epNum
);
cJSON_AddStringToObject
(
actionItem
,
KK_SYNC_SCENE_PROPERTYNAME_STR
,
propertyName
);
cJSON_AddStringToObject
(
actionItem
,
KK_SYNC_SCENE_TYPE_STR
,
type
);
cJSON_AddStringToObject
(
actionItem
,
KK_SYNC_SCENE_PROPERTYVALUE_STR
,
propertyValue
);
cJSON_AddStringToObject
(
actionItem
,
KK_SYNC_ROOMID_STR
,
""
);
cJSON_AddItemToArray
(
actionArray
,
actionItem
);
}
sqlite3_free
(
sqlCmd
);
sqlite3_finalize
(
stmt
);
return
SUCCESS_RETURN
;
}
static
int
kk_get_scenes_trigger_info
(
char
*
triggerArray
,
char
*
sceneId
)
{
char
*
sqlCmd
=
NULL
;
char
*
zErrMsg
=
0
;
sqlite3_stmt
*
stmt
;
char
*
deviceCode
=
NULL
;
char
*
propertyName
=
NULL
;
char
*
compareType
=
NULL
;
char
*
compareValue
=
NULL
;
char
*
type
=
NULL
;
int
delay
=
0
,
epNum
=
0
;
kk_sync_ctx_t
*
ctx
=
_kk_sync_get_ctx
();
if
(
triggerArray
==
NULL
||
sceneId
==
NULL
){
return
FAIL_RETURN
;
}
sqlCmd
=
sqlite3_mprintf
(
"select * from SceneTriggerInfo where sceneId = %s"
,
sceneId
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
cJSON
*
triggerItem
=
cJSON_CreateObject
();
deviceCode
=
sqlite3_column_text
(
stmt
,
DB_SCENETRIGGER_DEVICECODE
);
epNum
=
sqlite3_column_int
(
stmt
,
DB_SCENETRIGGER_EPNUM
);
propertyName
=
sqlite3_column_text
(
stmt
,
DB_SCENETRIGGER_PROPERTYNAME
);
compareType
=
sqlite3_column_text
(
stmt
,
DB_SCENETRIGGER_COMPARETYPE
);
compareValue
=
sqlite3_column_text
(
stmt
,
DB_SCENETRIGGER_COMPAREVALUE
);
type
=
sqlite3_column_text
(
stmt
,
DB_SCENETRIGGER_TYPE
);
cJSON_AddStringToObject
(
triggerItem
,
KK_SYNC_DEVICECODE_STR
,
deviceCode
);
cJSON_AddNumberToObject
(
triggerItem
,
KK_SYNC_SCENE_EPNUM_STR
,
epNum
);
cJSON_AddStringToObject
(
triggerItem
,
KK_SYNC_SCENE_PROPERTYNAME_STR
,
propertyName
);
cJSON_AddStringToObject
(
triggerItem
,
KK_SYNC_SCENE_COMPARETYPE_STR
,
compareType
);
cJSON_AddStringToObject
(
triggerItem
,
KK_SYNC_SCENE_COMPAREValue_STR
,
compareValue
);
cJSON_AddItemToArray
(
triggerArray
,
triggerItem
);
}
sqlite3_free
(
sqlCmd
);
sqlite3_finalize
(
stmt
);
return
SUCCESS_RETURN
;
}
static
int
kk_get_scenes_condition_info
(
char
*
conditionArray
,
char
*
sceneId
)
{
char
*
sqlCmd
=
NULL
;
char
*
zErrMsg
=
0
;
sqlite3_stmt
*
stmt
;
int
starttime
=
0
;
int
endtime
=
0
;
int
crossDay
=
0
;
int
repeat
=
0
;
kk_sync_ctx_t
*
ctx
=
_kk_sync_get_ctx
();
if
(
conditionArray
==
NULL
||
sceneId
==
NULL
){
return
FAIL_RETURN
;
}
sqlCmd
=
sqlite3_mprintf
(
"select * from SceneConditionInfo where sceneId = %s"
,
sceneId
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
cJSON
*
conditionItem
=
cJSON_CreateObject
();
starttime
=
sqlite3_column_int
(
stmt
,
DB_SCENECONDITION_STARTTIME
);
endtime
=
sqlite3_column_int
(
stmt
,
DB_SCENECONDITION_ENDTIME
);
crossDay
=
sqlite3_column_int
(
stmt
,
DB_SCENECONDITION_CROSSDAY
);
repeat
=
sqlite3_column_int
(
stmt
,
DB_SCENECONDITION_REPEATDAY
);
cJSON_AddNumberToObject
(
conditionItem
,
KK_SYNC_SCENE_STARTTIME_STR
,
starttime
);
cJSON_AddNumberToObject
(
conditionItem
,
KK_SYNC_SCENE_ENDTIME_STR
,
endtime
);
cJSON_AddNumberToObject
(
conditionItem
,
KK_SYNC_SCENE_CROSSDAY_STR
,
crossDay
);
cJSON_AddNumberToObject
(
conditionItem
,
KK_SYNC_SCENE_REPEATDAY_STR
,
repeat
);
cJSON_AddItemToArray
(
conditionArray
,
conditionItem
);
}
sqlite3_free
(
sqlCmd
);
sqlite3_finalize
(
stmt
);
return
SUCCESS_RETURN
;
}
static
int
kk_get_scenes_info
(
cJSON
*
data
)
{
char
*
sqlCmd
=
NULL
;
char
*
zErrMsg
=
0
;
sqlite3_stmt
*
stmt
;
int
enable
=
0
,
type
=
0
;
char
*
name
=
NULL
;
char
*
sceneId
=
NULL
;
kk_sync_ctx_t
*
ctx
=
_kk_sync_get_ctx
();
if
(
data
==
NULL
){
return
FAIL_RETURN
;
}
cJSON
*
sceneArray
=
cJSON_CreateArray
();
sqlCmd
=
sqlite3_mprintf
(
"select * from SceneInfo"
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
cJSON
*
sceneArrayItem
=
cJSON_CreateObject
();
enable
=
sqlite3_column_int
(
stmt
,
DB_SCENEINFO_ENABLE
);
if
(
enable
==
1
){
cJSON_AddStringToObject
(
sceneArrayItem
,
KK_SYNC_SCENE_ENABLE_STR
,
"启动"
);
}
else
{
cJSON_AddStringToObject
(
sceneArrayItem
,
KK_SYNC_SCENE_ENABLE_STR
,
"禁用"
);
}
type
=
sqlite3_column_int
(
stmt
,
DB_SCENEINFO_SCENETYPE
);
cJSON_AddNumberToObject
(
sceneArrayItem
,
KK_SYNC_SCENE_SCENETYPE_STR
,
type
);
name
=
sqlite3_column_text
(
stmt
,
DB_SCENEINFO_NAME
);
cJSON_AddStringToObject
(
sceneArrayItem
,
KK_SYNC_NANE_STR
,
name
);
sceneId
=
sqlite3_column_text
(
stmt
,
DB_SCENEINFO_SCENEID
);
cJSON_AddStringToObject
(
sceneArrayItem
,
KK_SYNC_SCENEID_STR
,
sceneId
);
cJSON
*
actionArray
=
cJSON_CreateArray
();
kk_get_scenes_actions_info
(
actionArray
);
cJSON_AddItemToObject
(
sceneArrayItem
,
KK_SYNC_SCENE_ACTIONS_STR
,
actionArray
);
cJSON
*
triggerArray
=
cJSON_CreateArray
();
kk_get_scenes_trigger_info
(
triggerArray
,
sceneId
);
cJSON_AddItemToObject
(
sceneArrayItem
,
KK_SYNC_SCENE_TRIGGER_STR
,
triggerArray
);
cJSON
*
conditionArray
=
cJSON_CreateArray
();
kk_get_scenes_condition_info
(
conditionArray
,
sceneId
);
cJSON_AddItemToObject
(
sceneArrayItem
,
KK_SYNC_SCENE_CONDITION_STR
,
conditionArray
);
cJSON_AddItemToArray
(
sceneArray
,
sceneArrayItem
);
}
cJSON_AddItemToObject
(
data
,
KK_SYNC_SCENE_STR
,
sceneArray
);
sqlite3_free
(
sqlCmd
);
sqlite3_finalize
(
stmt
);
return
SUCCESS_RETURN
;
}
static
int
kk_get_ccu_properties
(
cJSON
*
property
)
{
char
*
sqlCmd
=
NULL
;
char
*
zErrMsg
=
0
;
sqlite3_stmt
*
stmt
;
char
*
propertyStr
=
NULL
;
char
*
valueStr
=
NULL
;
int
valueType
=
0
;
kk_sync_ctx_t
*
ctx
=
_kk_sync_get_ctx
();
if
(
property
==
NULL
){
return
FAIL_RETURN
;
}
_kk_sync_lock
();
sqlCmd
=
sqlite3_mprintf
(
"select * from PropertiesInfo WHERE devType = '%d' "
,
KK_DM_DEVICE_CCU
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
propertyStr
=
sqlite3_column_text
(
stmt
,
DB_IDENTIFITER
);
valueType
=
sqlite3_column_int
(
stmt
,
DB_VALUETYPE
);
valueStr
=
sqlite3_column_text
(
stmt
,
DB_VALUE
);
if
(
valueType
==
KK_TSL_DATA_TYPE_TEXT
){
cJSON_AddStringToObject
(
property
,
propertyStr
,
valueStr
);
}
else
if
(
valueType
==
KK_TSL_DATA_TYPE_INT
||
valueType
==
KK_TSL_DATA_TYPE_ENUM
||
valueType
==
KK_TSL_DATA_TYPE_BOOL
){
cJSON_AddNumberToObject
(
property
,
propertyStr
,
atoi
(
valueStr
));
}
}
sqlite3_free
(
sqlCmd
);
sqlite3_finalize
(
stmt
);
_kk_sync_unlock
();
return
SUCCESS_RETURN
;
}
/************************************************************
*功能描述:检查设备是否有重复
*输入参数:deviceCode:设备deviceCode
*输出参数:无
*返 回 值:1:存在;0:不存在
*其他说明:
*************************************************************/
char
*
kk_sync_get_info
()
{
char
ccu_deviceCode
[
DEVICE_CODE_MAXLEN
]
=
{
0
};
char
ccu_productCode
[
PRODUCT_CODE_MAXLEN
]
=
{
0
};
char
version
[
32
]
=
{
0
};
char
cloudstatus_str
[
16
]
=
{
0
};
cJSON
*
root
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
root
,
KK_SYNC_CODE_STR
,
"0"
);
cJSON
*
data
=
cJSON_CreateObject
();
cJSON_AddItemToObject
(
root
,
KK_SYNC_DATA_STR
,
data
);
kk_get_rooms_info
(
data
);
kk_get_devices_info
(
data
);
kk_get_scenes_info
(
data
);
HAL_GetDevice_Code
(
ccu_deviceCode
);
HAL_GetProduct_Code
(
ccu_productCode
);
HAL_GetVersion
(
version
);
cJSON_AddStringToObject
(
data
,
KK_SYNC_DEVICECODE_STR
,
ccu_deviceCode
);
cJSON_AddStringToObject
(
data
,
KK_SYNC_NANE_STR
,
"newccu"
);
sprintf
(
cloudstatus_str
,
"%d"
,
kk_get_cloudstatus
());
cJSON_AddStringToObject
(
data
,
KK_SYNC_ONLINE_STR
,
cloudstatus_str
);
cJSON_AddStringToObject
(
data
,
KK_SYNC_PRODUCTCODE_STR
,
ccu_productCode
);
cJSON_AddStringToObject
(
data
,
KK_SYNC_VERSION_STR
,
version
);
cJSON
*
property
=
cJSON_CreateObject
();
kk_get_ccu_properties
(
property
);
cJSON_AddItemToObject
(
data
,
KK_SYNC_PROPERTY_STR
,
property
);
char
*
out
=
cJSON_Print
(
root
);
printf
(
"kk_sync_get_info:%s
\n
"
,
out
);
cJSON_Delete
(
root
);
free
(
out
);
return
NULL
;
}
midware/midware/dm/kk_sync_data.h
0 → 100644
View file @
f8e966d5
#ifndef _KK_SYNC_DATA_H_
#define _KK_SYNC_DATA_H_
#include "kk_tsl_common.h"
#define KK_SYNC_CODE_STR "code"
#define KK_SYNC_DATA_STR "data"
#define KK_SYNC_ROOMS_STR "rooms"
#define KK_SYNC_ROOMID_STR "roomId"
#define KK_SYNC_DEVICES_STR "devices"
#define KK_SYNC_DEVICECODE_STR "deviceCode"
#define KK_SYNC_NANE_STR "name"
#define KK_SYNC_SCENEID_STR "sceneId"
#define KK_SYNC_SCENE_STR "scenes"
#define KK_SYNC_VERSION_STR "firmwareVersion"
#define KK_SYNC_MAC_STR "mac"
#define KK_SYNC_ONLINE_STR "onlineStatus"
#define KK_SYNC_PRODUCTCODE_STR "productCode"
#define KK_SYNC_PROPERTY_STR "properties"
#define KK_SYNC_SN_STR "sn"
#define KK_SYNC_STATUS_STR "status"
#define KK_SYNC_SCENE_DELAY_STR "delay"
#define KK_SYNC_SCENE_EPNUM_STR "epNum"
#define KK_SYNC_SCENE_PROPERTYNAME_STR "propertyName"
#define KK_SYNC_SCENE_PROPERTYVALUE_STR "propertyValue"
#define KK_SYNC_SCENE_TYPE_STR "type"
#define KK_SYNC_SCENE_ACTIONS_STR "actions"
#define KK_SYNC_SCENE_ENABLE_STR "enable"
#define KK_SYNC_SCENE_SCENETYPE_STR "sceneType"
#define KK_SYNC_SCENE_TRIGGER_STR "trigger"
#define KK_SYNC_SCENE_ITEMS_STR "items"
#define KK_SYNC_SCENE_CONDITION_STR "condition"
#define KK_SYNC_SCENE_COMPARETYPE_STR "compareType"
#define KK_SYNC_SCENE_COMPAREValue_STR "compareValue"
#define KK_SYNC_SCENE_STARTTIME_STR "startTime"
#define KK_SYNC_SCENE_ENDTIME_STR "endTime"
#define KK_SYNC_SCENE_CROSSDAY_STR "crossDay"
#define KK_SYNC_SCENE_REPEATDAY_STR "repeat_days"
#endif
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