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
23b72caf
Commit
23b72caf
authored
Jan 10, 2022
by
chen.weican
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【修改内容】增加窗帘绑定功能
【提交人】陈伟灿
parent
4ed8fa53
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1030 additions
and
20 deletions
+1030
-20
midware/midware/dm/kk_dm_mng.c
midware/midware/dm/kk_dm_mng.c
+7
-0
midware/midware/dm/kk_dm_msg.c
midware/midware/dm/kk_dm_msg.c
+2
-1
midware/midware/dm/kk_dm_msg.h
midware/midware/dm/kk_dm_msg.h
+8
-0
midware/midware/dm/kk_linkkit.c
midware/midware/dm/kk_linkkit.c
+40
-1
midware/midware/dm/kk_linkkit.h
midware/midware/dm/kk_linkkit.h
+3
-0
midware/midware/dm/kk_motor_bind_db.c
midware/midware/dm/kk_motor_bind_db.c
+358
-0
midware/midware/dm/kk_motor_bind_db.h
midware/midware/dm/kk_motor_bind_db.h
+28
-0
midware/midware/midware.c
midware/midware/midware.c
+370
-18
opcodeMapCfg/device_3095.json
opcodeMapCfg/device_3095.json
+214
-0
No files found.
midware/midware/dm/kk_dm_mng.c
View file @
23b72caf
...
@@ -17,6 +17,7 @@
...
@@ -17,6 +17,7 @@
#include "kk_scene_handle.h"
#include "kk_scene_handle.h"
#include "kk_area_handle.h"
#include "kk_area_handle.h"
#include "kk_sync_data.h"
#include "kk_sync_data.h"
#include "kk_motor_bind_db.h"
//const char DM_URI_SYS_PREFIX[] DM_READ_ONLY = "/sys/%s/%s/";
//const char DM_URI_SYS_PREFIX[] DM_READ_ONLY = "/sys/%s/%s/";
...
@@ -1715,6 +1716,12 @@ int dm_mgr_subdev_delete(_IN_ char deviceCode[DEVICE_CODE_MAXLEN])
...
@@ -1715,6 +1716,12 @@ int dm_mgr_subdev_delete(_IN_ char deviceCode[DEVICE_CODE_MAXLEN])
kk_scene_deleteall_panel_scene_info
(
deviceCode
);
//如果是情景面板,删除对应信息
kk_scene_deleteall_panel_scene_info
(
deviceCode
);
//如果是情景面板,删除对应信息
/*房间信息中删除对应的设备*/
/*房间信息中删除对应的设备*/
kk_room_dev_remove
(
deviceCode
,
NULL
);
kk_room_dev_remove
(
deviceCode
,
NULL
);
res
=
kk_motor_bind_db_delete_by_deviceCode
(
deviceCode
);
if
(
res
!=
SUCCESS_RETURN
)
{
ERROR_PRINT
(
"ERROR [%s][%d] res:%d
\n
"
,
__FUNCTION__
,
__LINE__
,
res
);
return
FAIL_RETURN
;
}
res
=
kk_subDev_delete_by_dcode
(
deviceCode
);
//delete sub db data
res
=
kk_subDev_delete_by_dcode
(
deviceCode
);
//delete sub db data
if
(
res
!=
SUCCESS_RETURN
)
{
if
(
res
!=
SUCCESS_RETURN
)
{
...
...
midware/midware/dm/kk_dm_msg.c
View file @
23b72caf
...
@@ -565,7 +565,7 @@ int dm_msg_request (_IN_ dm_msg_request_t *request,_IN_ int isAsync)
...
@@ -565,7 +565,7 @@ int dm_msg_request (_IN_ dm_msg_request_t *request,_IN_ int isAsync)
}
}
payload_len
=
strlen
(
DM_MSG_REQUEST
)
+
10
+
strlen
(
DM_MSG_VERSION
)
+
request
->
params_len
+
strlen
(
payload_len
=
strlen
(
DM_MSG_REQUEST
)
+
10
+
strlen
(
DM_MSG_VERSION
)
+
request
->
params_len
+
strlen
(
request
->
method
)
+
1
+
2
0
+
strlen
(
request
->
msgid
);
request
->
method
)
+
1
+
5
0
+
strlen
(
request
->
msgid
);
payload
=
malloc
(
payload_len
);
payload
=
malloc
(
payload_len
);
if
(
payload
==
NULL
)
{
if
(
payload
==
NULL
)
{
return
MEMORY_NOT_ENOUGH
;
return
MEMORY_NOT_ENOUGH
;
...
@@ -1433,6 +1433,7 @@ int kk_msg_parse_productType(char *str,char *productType)
...
@@ -1433,6 +1433,7 @@ int kk_msg_parse_productType(char *str,char *productType)
}
}
int
kk_msg_execute_scene_set
(
const
char
*
params
,
const
char
*
fatherDeviceCode
,
int
isUpdate
)
int
kk_msg_execute_scene_set
(
const
char
*
params
,
const
char
*
fatherDeviceCode
,
int
isUpdate
)
{
{
int
res
=
0
;
int
res
=
0
;
...
...
midware/midware/dm/kk_dm_msg.h
View file @
23b72caf
...
@@ -137,6 +137,14 @@ typedef struct {
...
@@ -137,6 +137,14 @@ typedef struct {
#define KK_THING_SERVICE_CLIENTONLINEPUSH "/thing/service/clientOnlinePush"
#define KK_THING_SERVICE_CLIENTONLINEPUSH "/thing/service/clientOnlinePush"
#define KK_THING_SERVICE_GETCLIENTINFO "/thing/service/getClientInfo"
#define KK_THING_SERVICE_GETCLIENTINFO "/thing/service/getClientInfo"
#define KK_THING_SERVICE_GETCLIENTINFO_REPLY "/thing/service/getClientInfo_reply"
#define KK_THING_SERVICE_GETCLIENTINFO_REPLY "/thing/service/getClientInfo_reply"
#define KK_THING_SERVICE_REBIND_MOTORS "/thing/service/rebindMotors"
#define KK_THING_SERVICE_REBIND_MOTORS_REPLY "/thing/service/rebindMotors_reply"
#define KK_THING_SERVICE_ADDBIND_MOTOR "/thing/service/addBindMotor"
#define KK_THING_SERVICE_ADDBIND_MOTOR_REPLY "/thing/service/addBindMotor_reply"
#define KK_THING_SERVICE_UNBIND_MOTORS "/thing/service/unBindMotors"
#define KK_THING_SERVICE_UNBIND_MOTORS_REPLY "/thing/service/unBindMotors_reply"
#define KK_THING_SERVICE_QUERY_BIND_MOTORS "/thing/service/queryBindMotors"
#define KK_THING_SERVICE_QUERY_BIND_MOTORS_REPLY "/thing/service/queryBindMotors_reply"
void
kk_sendData2app
(
void
*
info
,
void
*
payload
,
int
isAsync
);
void
kk_sendData2app
(
void
*
info
,
void
*
payload
,
int
isAsync
);
int
dm_msg_thing_sub_register
(
_IN_
char
productCode
[
DEVICE_CODE_MAXLEN
],
_IN_
char
deviceCode
[
DEVICE_CODE_MAXLEN
],
int
dm_msg_thing_sub_register
(
_IN_
char
productCode
[
DEVICE_CODE_MAXLEN
],
_IN_
char
deviceCode
[
DEVICE_CODE_MAXLEN
],
...
...
midware/midware/dm/kk_linkkit.c
View file @
23b72caf
...
@@ -497,7 +497,7 @@ static int kk_service_addRoom_handle(const char *deviceCode, cJSON *params,cJSON
...
@@ -497,7 +497,7 @@ static int kk_service_addRoom_handle(const char *deviceCode, cJSON *params,cJSON
}
}
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
static
int
kk_service_common_reply
(
cJSON
*
param
,
cJSON
*
msgId
,
char
*
msgType
)
int
kk_service_common_reply
(
cJSON
*
param
,
cJSON
*
msgId
,
char
*
msgType
)
{
{
int
res
=
0
;
int
res
=
0
;
int
i
=
0
,
num
=
0
;
int
i
=
0
,
num
=
0
;
...
@@ -535,6 +535,45 @@ static int kk_service_common_reply(cJSON *param,cJSON *msgId,char *msgType)
...
@@ -535,6 +535,45 @@ static int kk_service_common_reply(cJSON *param,cJSON *msgId,char *msgType)
cJSON_Delete
(
info
);
cJSON_Delete
(
info
);
return
res
;
return
res
;
}
}
int
kk_service_common_reply_ex
(
cJSON
*
param
,
cJSON
*
msgId
,
char
*
msgType
,
cJSON
*
Item
)
{
int
res
=
0
;
int
i
=
0
,
num
=
0
;
SensorType_t
*
pList
=
NULL
;
if
(
param
==
NULL
||
msgId
==
NULL
){
return
INVALID_PARAMETER
;
}
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
param
,
MSG_DEVICE_CODE_STR
);
if
(
deviceCode
==
NULL
){
return
FAIL_RETURN
;
}
cJSON
*
productCode
=
cJSON_GetObjectItem
(
param
,
MSG_PRODUCT_CODE_STR
);
if
(
productCode
==
NULL
){
return
FAIL_RETURN
;
}
cJSON
*
info
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
info
,
MSG_TYPE_STR
,
msgType
);
cJSON_AddStringToObject
(
info
,
MSG_DEVICE_CODE_STR
,
deviceCode
->
valuestring
);
cJSON_AddStringToObject
(
info
,
MSG_PRODUCT_CODE_STR
,
productCode
->
valuestring
);
char
*
infff
=
cJSON_Print
(
info
);
cJSON
*
payload
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
payload
,
"desc"
,
"success"
);
cJSON_AddStringToObject
(
payload
,
"version"
,
"1.0"
);
cJSON_AddStringToObject
(
payload
,
"code"
,
"0"
);
cJSON_AddStringToObject
(
payload
,
"msgId"
,
msgId
->
valuestring
);
cJSON_AddItemToObject
(
payload
,
"params"
,
Item
);
char
*
payload11
=
cJSON_Print
(
payload
);
kk_sendData2app
(
infff
,
payload11
,
0
);
free
(
payload11
);
free
(
infff
);
cJSON_Delete
(
payload
);
cJSON_Delete
(
info
);
return
res
;
}
/************************************************************
/************************************************************
*功能描述:更新房间处理函数
*功能描述:更新房间处理函数
*输入参数:params:云端传下来JSON数据,主要包含房间名称
*输入参数:params:云端传下来JSON数据,主要包含房间名称
...
...
midware/midware/dm/kk_linkkit.h
View file @
23b72caf
...
@@ -12,4 +12,7 @@ void IOT_Linkkit_Yield(int timeout_ms);
...
@@ -12,4 +12,7 @@ void IOT_Linkkit_Yield(int timeout_ms);
int
IOT_Linkkit_Close
(
int
devid
);
int
IOT_Linkkit_Close
(
int
devid
);
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
],
char
version
[
32
]);
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
],
char
version
[
32
]);
int
kk_service_arming_set
(
char
*
state
);
int
kk_service_arming_set
(
char
*
state
);
int
kk_service_common_reply
(
cJSON
*
param
,
cJSON
*
msgId
,
char
*
msgType
);
int
kk_service_common_reply_ex
(
cJSON
*
param
,
cJSON
*
msgId
,
char
*
msgType
,
cJSON
*
Item
);
#endif
#endif
midware/midware/dm/kk_motor_bind_db.c
0 → 100644
View file @
23b72caf
/************************************************************
*版权所有 (C)2020,公司(或个人)名称
*
*文件名称: kk_history_db.c
*内容摘要:窗帘面板绑定窗帘电机模块
*其他说明:
*当前版本:
*************************************************************/
/*************************************************************
头文件引用
*************************************************************/
#include <stdio.h>
#include "kk_tsl_api.h"
#include "sqlite3.h"
#include "kk_log.h"
#include "kk_hal.h"
#include "kk_motor_bind_db.h"
#include "kk_dm_mng.h"
/*************************************************************
全局变量定义
*************************************************************/
extern
sqlite3
*
g_kk_pDb
;
/*************************************************************
函数实现
*************************************************************/
typedef
struct
{
void
*
mutex
;
sqlite3
*
pDb
;
}
kk_motor_bind_ctx_t
;
static
kk_motor_bind_ctx_t
s_kk_motor_bind_ctx
=
{
NULL
};
kk_motor_bind_ctx_t
*
_kk_motor_bind_get_ctx
(
void
)
{
return
&
s_kk_motor_bind_ctx
;
}
void
_kk_motor_bind_lock
(
void
)
{
kk_motor_bind_ctx_t
*
ctx
=
_kk_motor_bind_get_ctx
();
if
(
ctx
->
mutex
)
{
HAL_MutexLock
(
ctx
->
mutex
);
}
}
void
_kk_motor_bind_unlock
(
void
)
{
kk_motor_bind_ctx_t
*
ctx
=
_kk_motor_bind_get_ctx
();
if
(
ctx
->
mutex
)
{
HAL_MutexUnlock
(
ctx
->
mutex
);
}
}
/************************************************************
*功能描述: 历史记录数据库初始化
*输入参数: 无
*输出参数: 无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_motor_bind_db_init
(
void
)
{
kk_motor_bind_ctx_t
*
ctx
=
_kk_motor_bind_get_ctx
();
char
*
pcErr
;
ctx
->
pDb
=
g_kk_pDb
;
INFO_PRINT
(
"kk_motor_bind db Database opened
\n
"
);
/* Create Mutex */
ctx
->
mutex
=
HAL_MutexCreate
();
if
(
ctx
->
mutex
==
NULL
)
{
return
FAIL_RETURN
;
}
_kk_motor_bind_lock
();
const
char
*
pPanelBindMotor
=
"CREATE TABLE IF NOT EXISTS PanelBindMotor( \
panelDCode varchar(255), \
panelEpNum INTEGER, \
motorDCode varchar(255), \
motorEpNum INTEGER, \
dummyId INTEGER)"
;
if
(
sqlite3_exec
(
ctx
->
pDb
,
pPanelBindMotor
,
NULL
,
NULL
,
&
pcErr
)
!=
SQLITE_OK
)
{
ERROR_PRINT
(
"Error creating table (%s)
\n
"
,
pcErr
);
sqlite3_free
(
pcErr
);
//eUtils_LockUnlock(&sLock);
_kk_motor_bind_unlock
();
return
FAIL_RETURN
;
}
_kk_motor_bind_unlock
();
return
SUCCESS_RETURN
;
}
static
int
kk_motor_bind_db_check
(
const
char
*
panelDCode
,
int
panelEpNum
,
const
char
*
motorDCode
,
int
motorEpNum
)
{
int
isExist
=
0
;
sqlite3_stmt
*
stmt
;
const
unsigned
char
*
panelDeviceCode
=
NULL
;
const
unsigned
char
*
motorDeviceCode
=
NULL
;
int
panel_ep
=
0
;
int
motor_ep
=
0
;
kk_motor_bind_ctx_t
*
ctx
=
_kk_motor_bind_get_ctx
();
const
char
*
searchCmd
=
"select * from PanelBindMotor;"
;
_kk_motor_bind_lock
();
sqlite3_prepare_v2
(
ctx
->
pDb
,
searchCmd
,
strlen
(
searchCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
panelDeviceCode
=
sqlite3_column_text
(
stmt
,
MOTOR_BIND_DB_PANEL_DEVICECODE
);
panel_ep
=
sqlite3_column_int
(
stmt
,
MOTOR_BIND_DB_PANEL_EP
);
motorDeviceCode
=
sqlite3_column_text
(
stmt
,
MOTOR_BIND_DB_PANEL_DEVICECODE
);
motor_ep
=
sqlite3_column_int
(
stmt
,
MOTOR_BIND_DB_MOTOR_EP
);
if
(
!
strcmp
(
panelDCode
,(
const
char
*
)
panelDeviceCode
)
&&
!
strcmp
(
motorDCode
,(
const
char
*
)
motorDeviceCode
)
&&
panel_ep
==
panelEpNum
&&
motor_ep
==
motorEpNum
)
{
isExist
=
1
;
break
;
}
}
sqlite3_finalize
(
stmt
);
_kk_motor_bind_unlock
();
return
isExist
;
}
int
kk_motor_bind_db_insert
(
const
char
*
panelDCode
,
int
panelEpNum
,
const
char
*
motorDCode
,
int
motorEpNum
,
int
dummyId
)
{
int
res
=
0
;
kk_motor_bind_ctx_t
*
ctx
=
_kk_motor_bind_get_ctx
();
char
*
sqlCmd
=
NULL
;
char
*
zErrMsg
=
0
;
sqlite3_stmt
*
stmt
;
time_t
rtime
=
0
;
int
count
=
0
;
const
char
*
insertCmd
=
"insert into PanelBindMotor (panelDCode, panelEpNum,motorDCode,motorEpNum,dummyId) \
values ('%s','%d','%s','%d','%d');"
;
if
(
kk_motor_bind_db_check
(
panelDCode
,
panelEpNum
,
motorDCode
,
motorEpNum
)){
INFO_PRINT
(
"already exist.--->panelDCode:%s,panelEpNum:%d,motorDCode:%s,motorEpNum=%d
\n
"
,
panelDCode
,
panelEpNum
,
motorDCode
,
motorEpNum
);
return
SUCCESS_RETURN
;
}
INFO_PRINT
(
"kk_motor_bind_db_insert,panelDCode:%s,panelEpNum:%d,motorDCode:%s,motorEpNum=%d,dummyId=%d
\n
"
,
panelDCode
,
panelEpNum
,
motorDCode
,
motorEpNum
,
dummyId
);
_kk_motor_bind_lock
();
sqlCmd
=
sqlite3_mprintf
(
insertCmd
,
panelDCode
,
panelEpNum
,
motorDCode
,
motorEpNum
,
dummyId
);
res
=
sqlite3_exec
(
ctx
->
pDb
,
sqlCmd
,
NULL
,
NULL
,
&
zErrMsg
);
if
(
res
!=
SQLITE_OK
){
ERROR_PRINT
(
"SQL error: %s
\n
"
,
zErrMsg
);
sqlite3_free
(
zErrMsg
);
sqlite3_free
(
sqlCmd
);
_kk_motor_bind_unlock
();
return
FAIL_RETURN
;
}
sqlite3_free
(
sqlCmd
);
_kk_motor_bind_unlock
();
return
SUCCESS_RETURN
;
}
int
kk_motor_bind_db_delete
(
const
char
*
panelDCode
,
int
panelEpNum
,
const
char
*
motorDCode
,
int
motorEpNum
)
{
const
char
*
deleteCmd
=
"delete from PanelBindMotor where panelDCode = '%s' and panelEpNum = '%d' and motorDCode = '%s' and motorEpNum = '%d' ;"
;
char
*
sqlCmd
=
NULL
;
int
rc
=
0
;
char
*
zErrMsg
=
0
;
kk_motor_bind_ctx_t
*
ctx
=
_kk_motor_bind_get_ctx
();
_kk_motor_bind_lock
();
sqlCmd
=
sqlite3_mprintf
(
deleteCmd
,
panelDCode
,
panelEpNum
,
motorDCode
,
motorEpNum
);
INFO_PRINT
(
"Table delete data sqlCmd:%s
\n
"
,
sqlCmd
);
rc
=
sqlite3_exec
(
ctx
->
pDb
,
sqlCmd
,
NULL
,
NULL
,
&
zErrMsg
);
if
(
rc
!=
SQLITE_OK
){
ERROR_PRINT
(
"SQL error: %s
\n
"
,
zErrMsg
);
sqlite3_free
(
zErrMsg
);
}
else
{
INFO_PRINT
(
"Table delete data successfully
\n
"
);
}
sqlite3_free
(
sqlCmd
);
_kk_motor_bind_unlock
();
return
SUCCESS_RETURN
;
}
int
kk_motor_bind_db_delete_ex
(
const
char
*
panelDCode
)
{
const
char
*
deleteCmd
=
"delete from PanelBindMotor where panelDCode = '%s' ;"
;
char
*
sqlCmd
=
NULL
;
int
rc
=
0
;
char
*
zErrMsg
=
0
;
kk_motor_bind_ctx_t
*
ctx
=
_kk_motor_bind_get_ctx
();
_kk_motor_bind_lock
();
sqlCmd
=
sqlite3_mprintf
(
deleteCmd
,
panelDCode
);
INFO_PRINT
(
"Table delete data sqlCmd:%s
\n
"
,
sqlCmd
);
rc
=
sqlite3_exec
(
ctx
->
pDb
,
sqlCmd
,
NULL
,
NULL
,
&
zErrMsg
);
if
(
rc
!=
SQLITE_OK
){
ERROR_PRINT
(
"SQL error: %s
\n
"
,
zErrMsg
);
sqlite3_free
(
zErrMsg
);
}
else
{
INFO_PRINT
(
"Table delete data successfully
\n
"
);
}
sqlite3_free
(
sqlCmd
);
_kk_motor_bind_unlock
();
return
SUCCESS_RETURN
;
}
int
kk_motor_bind_db_find
(
const
char
*
panelDCode
,
int
panelEpNum
,
struct
kk_motor_bind_info
*
info
,
int
max
)
{
int
listSize
=
0
;
sqlite3_stmt
*
stmt
;
char
*
sqlCmd
=
NULL
;
const
unsigned
char
*
motorDeviceCode
=
NULL
;
int
motor_ep
=
0
;
int
dummyId
=
-
1
;
struct
kk_motor_bind_info
*
pInfo
=
info
;
kk_motor_bind_ctx_t
*
ctx
=
_kk_motor_bind_get_ctx
();
const
char
*
searchCmd
=
"select * from PanelBindMotor where panelDCode = '%s' and panelEpNum = '%d' ;"
;
_kk_motor_bind_lock
();
sqlCmd
=
sqlite3_mprintf
(
searchCmd
,
panelDCode
,
panelEpNum
);
INFO_PRINT
(
"Table searchCmd:%s
\n
"
,
sqlCmd
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
motorDeviceCode
=
sqlite3_column_text
(
stmt
,
MOTOR_BIND_DB_MOTOR_DEVICECODE
);
motor_ep
=
sqlite3_column_int
(
stmt
,
MOTOR_BIND_DB_MOTOR_EP
);
dummyId
=
sqlite3_column_int
(
stmt
,
MOTOR_BIND_DB_DUMMYID
);
memset
((
char
*
)
pInfo
,
0
,
sizeof
(
*
pInfo
));
snprintf
(
pInfo
->
deviceCode
,
sizeof
(
*
pInfo
),
"%s"
,
motorDeviceCode
);
pInfo
->
epNum
=
motor_ep
;
pInfo
->
dummyId
=
dummyId
;
INFO_PRINT
(
"listSize=%d,motorDeviceCode=%s,motor_ep=%d,dummyId=%d
\n
"
,
listSize
,
motorDeviceCode
,
motor_ep
,
dummyId
);
if
(
++
listSize
>=
max
){
break
;
}
pInfo
++
;
}
sqlite3_finalize
(
stmt
);
_kk_motor_bind_unlock
();
return
listSize
;
}
int
kk_motor_bind_db_find_ex
(
int
dummyId
,
struct
kk_motor_bind_info
*
info
,
int
max
)
{
int
listSize
=
0
;
sqlite3_stmt
*
stmt
;
char
*
sqlCmd
=
NULL
;
const
unsigned
char
*
motorDeviceCode
=
NULL
;
int
motor_ep
=
0
;
struct
kk_motor_bind_info
*
pInfo
=
info
;
kk_motor_bind_ctx_t
*
ctx
=
_kk_motor_bind_get_ctx
();
const
char
*
searchCmd
=
"select * from PanelBindMotor where dummyId = '%d' ;"
;
_kk_motor_bind_lock
();
sqlCmd
=
sqlite3_mprintf
(
searchCmd
,
dummyId
);
INFO_PRINT
(
"Table searchCmd:%s
\n
"
,
sqlCmd
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
motorDeviceCode
=
sqlite3_column_text
(
stmt
,
MOTOR_BIND_DB_MOTOR_DEVICECODE
);
motor_ep
=
sqlite3_column_int
(
stmt
,
MOTOR_BIND_DB_MOTOR_EP
);
memset
((
char
*
)
pInfo
,
0
,
sizeof
(
*
pInfo
));
snprintf
(
pInfo
->
deviceCode
,
sizeof
(
*
pInfo
),
"%s"
,
motorDeviceCode
);
pInfo
->
epNum
=
motor_ep
;
INFO_PRINT
(
"listSize=%d,motorDeviceCode=%s,motor_ep=%d
\n
"
,
listSize
,
motorDeviceCode
,
motor_ep
);
if
(
++
listSize
>=
max
){
break
;
}
pInfo
++
;
}
sqlite3_finalize
(
stmt
);
_kk_motor_bind_unlock
();
return
listSize
;
}
int
kk_motor_bind_db_find_dummyId
(
const
char
*
panelDCode
,
int
panelEpNum
,
const
char
*
motorDCode
,
int
motorEpNum
)
{
sqlite3_stmt
*
stmt
;
char
*
sqlCmd
=
NULL
;
int
dummyId
=
-
1
;
kk_motor_bind_ctx_t
*
ctx
=
_kk_motor_bind_get_ctx
();
const
char
*
searchCmd
=
"select * from PanelBindMotor where panelDCode = '%s' and panelEpNum = '%d' and motorDCode = '%s' and motorEpNum = '%d' "
;
_kk_motor_bind_lock
();
sqlCmd
=
sqlite3_mprintf
(
searchCmd
,
panelDCode
,
panelEpNum
,
motorDCode
,
motorEpNum
);
INFO_PRINT
(
"Table searchCmd:%s
\n
"
,
sqlCmd
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
dummyId
=
sqlite3_column_int
(
stmt
,
MOTOR_BIND_DB_DUMMYID
);
INFO_PRINT
(
"dummyId=%d
\n
"
,
dummyId
);
}
sqlite3_finalize
(
stmt
);
_kk_motor_bind_unlock
();
return
dummyId
;
}
int
kk_motor_bind_db_delete_by_deviceCode
(
const
char
*
deviceCode
)
{
const
char
*
deleteCmd
=
"delete from PanelBindMotor where motorDCode = '%s' ;"
;
char
*
sqlCmd
=
NULL
;
int
rc
=
0
;
char
*
zErrMsg
=
0
;
kk_motor_bind_ctx_t
*
ctx
=
_kk_motor_bind_get_ctx
();
_kk_motor_bind_lock
();
sqlCmd
=
sqlite3_mprintf
(
deleteCmd
,
deviceCode
);
INFO_PRINT
(
"Table delete data sqlCmd:%s
\n
"
,
sqlCmd
);
rc
=
sqlite3_exec
(
ctx
->
pDb
,
sqlCmd
,
NULL
,
NULL
,
&
zErrMsg
);
if
(
rc
!=
SQLITE_OK
){
ERROR_PRINT
(
"SQL error: %s
\n
"
,
zErrMsg
);
sqlite3_free
(
zErrMsg
);
}
else
{
INFO_PRINT
(
"Table delete data successfully
\n
"
);
}
sqlite3_free
(
sqlCmd
);
_kk_motor_bind_unlock
();
kk_motor_bind_db_delete_ex
(
deviceCode
);
return
SUCCESS_RETURN
;
}
midware/midware/dm/kk_motor_bind_db.h
0 → 100644
View file @
23b72caf
#ifndef __KK_MOTOR_BIND_DB_H__
#define __KK_MOTOR_BIND_DB_H__
#include "cJSON.h"
enum
{
MOTOR_BIND_DB_PANEL_DEVICECODE
=
0
,
MOTOR_BIND_DB_PANEL_EP
,
MOTOR_BIND_DB_MOTOR_DEVICECODE
,
MOTOR_BIND_DB_MOTOR_EP
,
MOTOR_BIND_DB_DUMMYID
,
};
struct
kk_motor_bind_info
{
int
epNum
;
int
dummyId
;
char
deviceCode
[
32
];
};
int
kk_motor_bind_db_init
(
void
);
int
kk_motor_bind_db_insert
(
const
char
*
panelDCode
,
int
panelEpNum
,
const
char
*
motorDCode
,
int
motorEpNum
,
int
dummyId
);
int
kk_motor_bind_db_delete
(
const
char
*
panelDCode
,
int
panelEpNum
,
const
char
*
motorDCode
,
int
motorEpNum
);
int
kk_motor_bind_db_delete_ex
(
const
char
*
panelDCode
);
int
kk_motor_bind_db_find
(
const
char
*
panelDCode
,
int
panelEpNum
,
struct
kk_motor_bind_info
*
info
,
int
max
);
int
kk_motor_bind_db_find_ex
(
int
dummyId
,
struct
kk_motor_bind_info
*
info
,
int
max
);
int
kk_motor_bind_db_find_dummyId
(
const
char
*
panelDCode
,
int
panelEpNum
,
const
char
*
motorDCode
,
int
motorEpNum
);
int
kk_motor_bind_db_delete_by_deviceCode
(
const
char
*
deviceCode
);
#endif
midware/midware/midware.c
View file @
23b72caf
...
@@ -41,6 +41,7 @@
...
@@ -41,6 +41,7 @@
#include "ccu_ver.h"
#include "ccu_ver.h"
#include "kk_area_handle.h"
#include "kk_area_handle.h"
#include "kk_property_get_handle.h"
#include "kk_property_get_handle.h"
#include "kk_motor_bind_db.h"
int
g_timezone
=
8
;
int
g_timezone
=
8
;
char
*
g_filerToPlatTable
[]
=
char
*
g_filerToPlatTable
[]
=
...
@@ -452,6 +453,344 @@ static int kk_property_set_data_check(cJSON * payload,const char *deviceCode){
...
@@ -452,6 +453,344 @@ static int kk_property_set_data_check(cJSON * payload,const char *deviceCode){
}
}
#define KK_MOTOR_BIND_INFO_MAX 6
#define KK_SERVICE_REBIND_MOTORS 0
#define KK_SERVICE_ADDBIND_MOTORS 1
#define KK_SERVICE_UNBIND_MOTORS 2
static
int
kk_panel_bind_motor_delete
(
const
char
*
deviceCode
,
int
dummyId
)
{
int
res
=
0
;
dm_mgr_dev_node_t
*
node
=
NULL
;
dm_mgr_dev_node_t
*
gw_node
=
NULL
;
char
msgId
[
MSG_MAX_LEN
]
=
{
0
};
char
sceneId
[
33
]
=
{
0
};
char
tm
[
33
]
=
{
0
};
cJSON
*
root
=
cJSON_CreateObject
();
cJSON
*
info
=
cJSON_CreateObject
();
cJSON
*
payload
=
cJSON_CreateObject
();
cJSON
*
paras
=
cJSON_CreateObject
();
if
(
SUCCESS_RETURN
!=
dm_mgr_get_device_by_devicecode
((
char
*
)
deviceCode
,
&
node
)){
return
-
1
;
}
if
(
SUCCESS_RETURN
!=
dm_mgr_get_device_by_devicecode
(
node
->
fatherDeviceCode
,
&
gw_node
)){
return
-
1
;
}
cJSON_AddStringToObject
(
info
,
"msgtype"
,
KK_THING_SERVICE_DELETESCENC
);
cJSON_AddStringToObject
(
info
,
"productCode"
,
gw_node
->
productCode
);
cJSON_AddStringToObject
(
info
,
"deviceCode"
,
gw_node
->
deviceCode
);
cJSON_AddItemToObject
(
root
,
"info"
,
info
);
iotx_report_id
(
msgId
);
cJSON_AddStringToObject
(
payload
,
"msgId"
,
msgId
);
cJSON_AddStringToObject
(
payload
,
"version"
,
"1.0"
);
memset
(
sceneId
,
0
,
sizeof
(
sceneId
));
snprintf
(
sceneId
,
sizeof
(
sceneId
),
"%d"
,
dummyId
);
cJSON_AddStringToObject
(
paras
,
"sceneId"
,
sceneId
);
cJSON_AddItemToObject
(
payload
,
"params"
,
paras
);
snprintf
(
tm
,
sizeof
(
tm
),
"%d"
,
time
(
NULL
));
cJSON_AddStringToObject
(
payload
,
"time"
,
tm
);
cJSON_AddStringToObject
(
payload
,
"method"
,
KK_THING_METHOD_DELETESCENC
);
cJSON_AddItemToObject
(
root
,
"payload"
,
payload
);
char
*
data
=
cJSON_Print
(
root
);
kk_sendData2gw
(
data
,
strlen
(
data
),
node
->
fatherDeviceCode
);
cJSON_Delete
(
root
);
free
(
data
);
return
0
;
}
static
int
kk_panel_bind_motor_add_actions
(
const
char
*
deviceCode
,
cJSON
*
actions
,
int
dummyId
)
{
int
res
=
0
;
dm_mgr_dev_node_t
*
node
=
NULL
;
dm_mgr_dev_node_t
*
gw_node
=
NULL
;
char
msgId
[
MSG_MAX_LEN
]
=
{
0
};
char
sceneId
[
33
]
=
{
0
};
char
tm
[
33
]
=
{
0
};
cJSON
*
root
=
cJSON_CreateObject
();
cJSON
*
info
=
cJSON_CreateObject
();
cJSON
*
payload
=
cJSON_CreateObject
();
cJSON
*
paras
=
cJSON_CreateObject
();
if
(
SUCCESS_RETURN
!=
dm_mgr_get_device_by_devicecode
((
char
*
)
deviceCode
,
&
node
)){
return
-
1
;
}
if
(
SUCCESS_RETURN
!=
dm_mgr_get_device_by_devicecode
(
node
->
fatherDeviceCode
,
&
gw_node
)){
return
-
1
;
}
cJSON_AddStringToObject
(
info
,
"msgtype"
,
KK_THING_SERVICE_ADDSCENC
);
cJSON_AddStringToObject
(
info
,
"productCode"
,
gw_node
->
productCode
);
cJSON_AddStringToObject
(
info
,
"deviceCode"
,
gw_node
->
deviceCode
);
cJSON_AddItemToObject
(
root
,
"info"
,
info
);
iotx_report_id
(
msgId
);
cJSON_AddStringToObject
(
payload
,
"msgId"
,
msgId
);
cJSON_AddStringToObject
(
payload
,
"version"
,
"1.0"
);
memset
(
sceneId
,
0
,
sizeof
(
sceneId
));
snprintf
(
sceneId
,
sizeof
(
sceneId
),
"%d"
,
dummyId
);
cJSON_AddStringToObject
(
paras
,
"sceneId"
,
sceneId
);
cJSON_AddItemToObject
(
paras
,
"actions"
,
actions
);
cJSON_AddItemToObject
(
payload
,
"params"
,
paras
);
snprintf
(
tm
,
sizeof
(
tm
),
"%d"
,
time
(
NULL
));
cJSON_AddStringToObject
(
payload
,
"time"
,
tm
);
cJSON_AddStringToObject
(
payload
,
"method"
,
KK_THING_METHOD_ADDSCENC
);
cJSON_AddItemToObject
(
root
,
"payload"
,
payload
);
char
*
data
=
cJSON_Print
(
root
);
kk_sendData2gw
(
data
,
strlen
(
data
),
node
->
fatherDeviceCode
);
cJSON_Delete
(
root
);
free
(
data
);
return
0
;
}
static
int
kk_panel_bind_motor_add
(
const
char
*
deviceCode
,
int
epNum
,
int
dummyId
)
{
cJSON
*
item
=
NULL
;
struct
kk_motor_bind_info
*
info
=
(
struct
kk_motor_bind_info
*
)
malloc
(
sizeof
(
struct
kk_motor_bind_info
)
*
KK_MOTOR_BIND_INFO_MAX
);
int
info_size
=
kk_motor_bind_db_find_ex
(
dummyId
,
info
,
KK_MOTOR_BIND_INFO_MAX
);
cJSON
*
actionsAry
=
cJSON_CreateArray
();
item
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
item
,
"deviceCode"
,
deviceCode
);
cJSON_AddNumberToObject
(
item
,
"epNum"
,
epNum
);
cJSON_AddStringToObject
(
item
,
"type"
,
"action/thing/group"
);
cJSON_AddItemToArray
(
actionsAry
,
item
);
for
(
int
i
=
0
;
i
<
info_size
;
i
++
){
item
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
item
,
"deviceCode"
,
info
[
i
].
deviceCode
);
cJSON_AddNumberToObject
(
item
,
"epNum"
,
info
[
i
].
epNum
);
cJSON_AddStringToObject
(
item
,
"type"
,
"action/thing/group"
);
cJSON_AddItemToArray
(
actionsAry
,
item
);
}
kk_panel_bind_motor_add_actions
(
deviceCode
,
actionsAry
,
dummyId
);
free
(
info
);
}
int
kk_service_panel_bind_motor_handle
(
cJSON
*
deviceCode
,
cJSON
*
param
,
cJSON
*
msgId
,
int
act
)
{
int
i
;
int
panel_ep
=
1
,
motor_ep
=
1
;
int
actionCnt
;
cJSON
*
panel_dCode
,
*
panelEpNum
;
cJSON
*
motor_dCode
,
*
motorEpNum
;
cJSON
*
actions
,
*
actionItem
;
const
char
*
motor_dCodeStr
=
NULL
;
int
dummyId
=
(
int
)
time
(
NULL
);
if
(
deviceCode
==
NULL
||
param
==
NULL
||
msgId
==
NULL
){
return
-
1
;
}
if
(
deviceCode
->
type
!=
cJSON_String
||
param
->
type
!=
cJSON_Object
||
msgId
->
type
!=
cJSON_String
){
return
-
1
;
}
panel_dCode
=
deviceCode
;
if
((
panelEpNum
=
cJSON_GetObjectItem
(
param
,
"epNum"
))
!=
NULL
){
if
(
panelEpNum
->
type
!=
cJSON_String
){
INFO_PRINT
(
"[ERR] epNum
\n
"
);
return
-
1
;
}
else
{
panel_ep
=
atoi
(
panelEpNum
->
valuestring
);
}
}
if
((
actions
=
cJSON_GetObjectItem
(
param
,
"actions"
))
==
NULL
||
actions
->
type
!=
cJSON_Array
){
INFO_PRINT
(
"[ERR] actions
\n
"
);
return
-
1
;
}
INFO_PRINT
(
"
\n\n\n\n
**************************panel bind motor act [%d]**************************************
\n\n\n\n
"
,
act
);
if
(
act
==
KK_SERVICE_REBIND_MOTORS
){
struct
kk_motor_bind_info
*
info
=
(
struct
kk_motor_bind_info
*
)
malloc
(
sizeof
(
struct
kk_motor_bind_info
)
*
KK_MOTOR_BIND_INFO_MAX
);
int
info_size
=
kk_motor_bind_db_find
(
panel_dCode
->
valuestring
,
panel_ep
,
info
,
KK_MOTOR_BIND_INFO_MAX
);
for
(
int
i
=
0
;
i
<
info_size
;
i
++
){
kk_panel_bind_motor_delete
(
panel_dCode
->
valuestring
,
info
[
i
].
dummyId
);
}
free
(
info
);
kk_motor_bind_db_delete_ex
(
panel_dCode
->
valuestring
);
}
actionCnt
=
cJSON_GetArraySize
(
actions
);
for
(
i
=
0
;
i
<
actionCnt
;
i
++
){
actionItem
=
cJSON_GetArrayItem
(
actions
,
i
);
if
(
actionItem
==
NULL
||
actionItem
->
type
!=
cJSON_Object
){
INFO_PRINT
(
"[ERR] item
\n
"
);
continue
;
}
motor_dCode
=
cJSON_GetObjectItem
(
actionItem
,
"deviceCode"
);
if
(
motor_dCode
==
NULL
||
motor_dCode
->
type
!=
cJSON_String
){
INFO_PRINT
(
"[ERR] motor_dCode
\n
"
);
continue
;
}
if
((
motorEpNum
=
cJSON_GetObjectItem
(
actionItem
,
"epNum"
))
!=
NULL
){
if
(
motorEpNum
->
type
!=
cJSON_String
){
INFO_PRINT
(
"[ERR] motorEpNum
\n
"
);
continue
;
}
else
{
motor_ep
=
atoi
(
motorEpNum
->
valuestring
);
}
}
char
*
ptr
=
strrchr
(
motor_dCode
->
valuestring
,
'_'
);
if
(
ptr
==
NULL
){
motor_dCodeStr
=
motor_dCode
->
valuestring
;
}
else
{
motor_dCodeStr
=
ptr
+
1
;
}
if
(
act
==
KK_SERVICE_REBIND_MOTORS
||
act
==
KK_SERVICE_ADDBIND_MOTORS
){
dummyId
=
(
int
)
time
(
NULL
)
+
i
;
kk_motor_bind_db_insert
(
panel_dCode
->
valuestring
,
panel_ep
,
motor_dCodeStr
,
motor_ep
,
dummyId
);
kk_panel_bind_motor_add
(
panel_dCode
->
valuestring
,
panel_ep
,
dummyId
);
}
else
if
(
act
==
KK_SERVICE_UNBIND_MOTORS
){
int
dummyId
=
kk_motor_bind_db_find_dummyId
(
panel_dCode
->
valuestring
,
panel_ep
,
motor_dCodeStr
,
motor_ep
);
if
(
dummyId
!=-
1
){
kk_panel_bind_motor_delete
(
panel_dCode
->
valuestring
,
dummyId
);
}
kk_motor_bind_db_delete
(
panel_dCode
->
valuestring
,
panel_ep
,
motor_dCodeStr
,
motor_ep
);
}
}
return
0
;
}
int
kk_service_query_bind_motor
(
cJSON
*
deviceCode
,
cJSON
*
param
,
struct
kk_motor_bind_info
*
info
,
int
max
)
{
int
panel_ep
=
1
;
int
info_size
=
0
;
cJSON
*
panel_dCode
,
*
panelEpNum
;
INFO_PRINT
(
"
\n\n\n\n
**************************query bind motor**************************************
\n\n\n\n
"
);
if
(
deviceCode
==
NULL
||
deviceCode
->
type
!=
cJSON_String
){
return
-
1
;
}
panel_dCode
=
deviceCode
;
if
(
param
!=
NULL
){
if
(
param
->
type
!=
cJSON_Object
){
return
-
1
;
}
if
((
panelEpNum
=
cJSON_GetObjectItem
(
param
,
"epNum"
))
!=
NULL
){
if
(
panelEpNum
->
type
!=
cJSON_String
){
INFO_PRINT
(
"[ERR] panelEpNum
\n
"
);
return
-
1
;
}
else
{
panel_ep
=
atoi
(
panelEpNum
->
valuestring
);
}
}
}
info_size
=
kk_motor_bind_db_find
(
panel_dCode
->
valuestring
,
panel_ep
,
info
,
max
);
return
info_size
;
}
int
kk_dm_device_subdev_filter
(
char
*
data
)
{
char
*
out
;
int
res
=
0
;
cJSON
*
json
;
cJSON
*
info_root
;
cJSON
*
payload
,
*
typeJson
;
char
*
payload_Str
=
NULL
;
cJSON
*
deviceCode
=
NULL
;
if
((
json
=
cJSON_Parse
(
data
))
==
NULL
)
{
WARNING_PRINT
(
"Error before: [%s]
\n
"
,
"cJSON_Parse"
);
return
-
1
;
}
if
((
info_root
=
cJSON_GetObjectItem
(
json
,
"info"
))
==
NULL
)
return
-
1
;
if
((
typeJson
=
cJSON_GetObjectItem
(
info_root
,
"msgtype"
))
==
NULL
)
return
-
1
;
if
((
payload
=
cJSON_GetObjectItem
(
json
,
"payload"
))
==
NULL
)
return
-
1
;
payload_Str
=
cJSON_Print
(
payload
);
if
((
deviceCode
=
cJSON_GetObjectItem
(
info_root
,
"deviceCode"
))
==
NULL
)
return
-
1
;
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_REBIND_MOTORS
)
==
0
){
INFO_PRINT
(
"REBIND_MOTORS
\n
"
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
"msgId"
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
"params"
);
kk_service_panel_bind_motor_handle
(
deviceCode
,
paramStr
,
msgId
,
KK_SERVICE_REBIND_MOTORS
);
kk_service_common_reply
(
info_root
,
msgId
,
KK_THING_SERVICE_REBIND_MOTORS_REPLY
);
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_ADDBIND_MOTOR
)
==
0
){
INFO_PRINT
(
"ADDBIND_MOTOR
\n
"
);
deviceCode
=
cJSON_GetObjectItem
(
info_root
,
MSG_DEVICE_CODE_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_panel_bind_motor_handle
(
deviceCode
,
paramStr
,
msgId
,
KK_SERVICE_ADDBIND_MOTORS
);
kk_service_common_reply
(
info_root
,
msgId
,
KK_THING_SERVICE_ADDBIND_MOTOR_REPLY
);
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_UNBIND_MOTORS
)
==
0
){
INFO_PRINT
(
"UNBIND_MOTORS
\n
"
);
deviceCode
=
cJSON_GetObjectItem
(
info_root
,
MSG_DEVICE_CODE_STR
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
kk_service_panel_bind_motor_handle
(
deviceCode
,
paramStr
,
msgId
,
KK_SERVICE_UNBIND_MOTORS
);
kk_service_common_reply
(
info_root
,
msgId
,
KK_THING_SERVICE_UNBIND_MOTORS_REPLY
);
}
else
if
(
strcmp
(
typeJson
->
valuestring
,
KK_THING_SERVICE_QUERY_BIND_MOTORS
)
==
0
){
INFO_PRINT
(
"QUERY_BIND_MOTORS
\n
"
);
cJSON
*
msgId
=
cJSON_GetObjectItem
(
payload
,
MSG_COMMON_MSGID
);
cJSON
*
paramStr
=
cJSON_GetObjectItem
(
payload
,
MSG_PARAMS_STR
);
struct
kk_motor_bind_info
*
info
=
(
struct
kk_motor_bind_info
*
)
malloc
(
sizeof
(
struct
kk_motor_bind_info
)
*
KK_MOTOR_BIND_INFO_MAX
);
int
info_size
=
kk_service_query_bind_motor
(
deviceCode
,
paramStr
,
info
,
KK_MOTOR_BIND_INFO_MAX
);
cJSON
*
ary
=
cJSON_CreateArray
();
for
(
int
i
=
0
;
i
<
info_size
;
i
++
){
cJSON
*
item
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
item
,
"deviceCode"
,
info
[
i
].
deviceCode
);
cJSON_AddNumberToObject
(
item
,
"epNum"
,
info
[
i
].
epNum
);
cJSON_AddItemToArray
(
ary
,
item
);
}
kk_service_common_reply_ex
(
info_root
,
msgId
,
KK_THING_SERVICE_QUERY_BIND_MOTORS_REPLY
,
ary
);
free
(
info
);
}
else
{
return
-
1
;
}
return
0
;
}
/************************************************************
/************************************************************
*功能描述:nanomsg数据回调,app to mid
*功能描述:nanomsg数据回调,app to mid
*输入参数:data:从app 层发来的数据
*输入参数:data:从app 层发来的数据
...
@@ -526,25 +865,29 @@ void mid_cb(void* data, int len){
...
@@ -526,25 +865,29 @@ void mid_cb(void* data, int len){
}
}
kk_sendData2gw
(
data
,
strlen
(
data
),
deviceCode
->
valuestring
);
//send to gw itself
kk_sendData2gw
(
data
,
strlen
(
data
),
deviceCode
->
valuestring
);
//send to gw itself
}
else
if
(
devType
==
KK_DM_DEVICE_SUBDEV
){
}
else
if
(
devType
==
KK_DM_DEVICE_SUBDEV
){
dm_mgr_dev_node_t
*
gw_node
=
NULL
;
if
(
kk_dm_device_subdev_filter
(
data
)
==
0
){
res
=
dm_mgr_get_device_by_devicecode
(
deviceCode
->
valuestring
,
&
gw_node
);
ERROR_PRINT
(
"
\n\n
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
\n\n
"
);
if
(
res
!=
SUCCESS_RETURN
)
{
//
ERROR_PRINT
(
"res:%d
\n
"
,
res
);
}
else
{
cJSON_Delete
(
json
);
dm_mgr_dev_node_t
*
gw_node
=
NULL
;
return
;
res
=
dm_mgr_get_device_by_devicecode
(
deviceCode
->
valuestring
,
&
gw_node
);
if
(
res
!=
SUCCESS_RETURN
)
{
ERROR_PRINT
(
"res:%d
\n
"
,
res
);
cJSON_Delete
(
json
);
return
;
}
cJSON
*
rootData
=
cJSON_CreateObject
();
char
*
info_rootS
=
cJSON_Print
(
info_root
);
char
*
payloadS
=
cJSON_Print
(
payload
);
cJSON_AddItemToObject
(
rootData
,
MSG_INFO_STR
,
cJSON_Parse
(
info_rootS
));
cJSON_AddItemToObject
(
rootData
,
MSG_PAYLOAD_STR
,
cJSON_Parse
(
payloadS
));
char
*
pnewout
=
cJSON_Print
(
rootData
);
kk_sendData2gw
(
pnewout
,
strlen
(
pnewout
),
gw_node
->
fatherDeviceCode
);
//send to sub device
cJSON_Delete
(
rootData
);
free
(
info_rootS
);
free
(
payloadS
);
free
(
pnewout
);
}
}
cJSON
*
rootData
=
cJSON_CreateObject
();
char
*
info_rootS
=
cJSON_Print
(
info_root
);
char
*
payloadS
=
cJSON_Print
(
payload
);
cJSON_AddItemToObject
(
rootData
,
MSG_INFO_STR
,
cJSON_Parse
(
info_rootS
));
cJSON_AddItemToObject
(
rootData
,
MSG_PAYLOAD_STR
,
cJSON_Parse
(
payloadS
));
char
*
pnewout
=
cJSON_Print
(
rootData
);
kk_sendData2gw
(
pnewout
,
strlen
(
pnewout
),
gw_node
->
fatherDeviceCode
);
//send to sub device
cJSON_Delete
(
rootData
);
free
(
info_rootS
);
free
(
payloadS
);
free
(
pnewout
);
}
}
else
{
else
{
ERROR_PRINT
(
"wrong type
\n
"
);
ERROR_PRINT
(
"wrong type
\n
"
);
...
@@ -1101,10 +1444,18 @@ void kk_platMsg_handle(void* data, char* chalMark){
...
@@ -1101,10 +1444,18 @@ void kk_platMsg_handle(void* data, char* chalMark){
for
(
idx
=
0
;
idx
<
node
->
dev_shadow
->
event_number
;
idx
++
){
for
(
idx
=
0
;
idx
<
node
->
dev_shadow
->
event_number
;
idx
++
){
eventItem
=
node
->
dev_shadow
->
events
+
idx
;
eventItem
=
node
->
dev_shadow
->
events
+
idx
;
if
(
eventItem
!=
NULL
){
if
(
eventItem
!=
NULL
){
if
(
eventItem
->
identifier
==
NULL
){
INFO_PRINT
(
"eventItem->identifier = NULL
\n
"
);
continue
;
}
if
(
strcmp
(
eventItem
->
identifier
,
MSG_PROPERTY_STR
)
!=
0
&&
if
(
strcmp
(
eventItem
->
identifier
,
MSG_PROPERTY_STR
)
!=
0
&&
eventItem
->
output_data_number
>
0
){
eventItem
->
output_data_number
>
0
){
int
index
=
0
;
int
index
=
0
;
kk_tsl_data_t
*
itemData
=
NULL
;
kk_tsl_data_t
*
itemData
=
NULL
;
if
(
strstr
(
msgType
->
valuestring
,
eventItem
->
identifier
)
==
NULL
){
continue
;
}
for
(
index
=
0
;
index
<
eventItem
->
output_data_number
;
index
++
){
for
(
index
=
0
;
index
<
eventItem
->
output_data_number
;
index
++
){
itemStr
=
cJSON_GetObjectItem
(
jsonPay
,
eventItem
->
identifier
);
itemStr
=
cJSON_GetObjectItem
(
jsonPay
,
eventItem
->
identifier
);
itemData
=
eventItem
->
output_datas
+
index
;
itemData
=
eventItem
->
output_datas
+
index
;
...
@@ -1567,6 +1918,7 @@ int main(const int argc, const char **argv)
...
@@ -1567,6 +1918,7 @@ int main(const int argc, const char **argv)
kk_subDb_init
();
kk_subDb_init
();
kk_area_init
();
kk_area_init
();
kk_history_db_init
();
kk_history_db_init
();
kk_motor_bind_db_init
();
kk_scene_init
();
kk_scene_init
();
g_timezone
=
HAL_Get_TimeZone
();
g_timezone
=
HAL_Get_TimeZone
();
...
...
opcodeMapCfg/device_3095.json
0 → 100644
View file @
23b72caf
{
"productCode"
:
"3095"
,
"operateType"
:
"15003"
,
"channel"
:
1
,
"syn_type"
:
1
,
"syn_opcode"
:
"FAN_COIL_STATUS"
,
"newccu"
:[
{
"identifier"
:
"PowerSwitch"
,
"opcodemap"
:
"SWITCH"
,
"dataType"
:
"int"
,
"channel"
:
"1"
,
"valueRange"
:[
0
,
1
],
"value"
:
0
},{
"identifier"
:
"WorkMode"
,
"opcodemap"
:
"FAN_COIL_SET_RUN_MODEL"
,
"dataType"
:
"int"
,
"channel"
:
"1"
,
"valueRange"
:[
1
,
2
,
3
,
4
],
"value"
:
1
},{
"identifier"
:
"WindSpeed"
,
"opcodemap"
:
"FAN_COIL_SET_FUN_SPEED"
,
"dataType"
:
"int"
,
"channel"
:
"1"
,
"valueRange"
:[
0
,
2
,
3
,
4
],
"value"
:
1
},{
"identifier"
:
"Temperature"
,
"opcodemap"
:
"FAN_COIL_SET_TEMPERATURE"
,
"dataType"
:
"double"
,
"channel"
:
"1"
,
"valueRange"
:[],
"value"
:
16
},{
"identifier"
:
"TimingOffTime"
,
"opcodemap"
:
"FAN_COIL_SET_DELAY_SWITCH_TASK"
,
"dataType"
:
"double"
,
"channel"
:
"1"
,
"valueRange"
:[],
"value"
:
0
},{
"identifier"
:
"ChildLockState"
,
"opcodemap"
:
"FAN_COIL_SET_LOCK_STATUS"
,
"dataType"
:
"int"
,
"channel"
:
"1"
,
"valueRange"
:[
0
,
1
],
"value"
:
0
},{
"identifier"
:
"CurrentTemperature"
,
"opcodemap"
:
"room_temperature"
,
"dataType"
:
"double"
,
"channel"
:
"1"
,
"valueRange"
:[],
"value"
:
22
},{
"identifier"
:
"smart_model_id"
,
"opcodemap"
:
"FAN_COIL_STATUS"
,
"dataType"
:
"dummy"
,
"channel"
:
"1"
,
"valueRange"
:[],
"value"
:
0
},{
"identifier"
:
"smart_model_time_index"
,
"opcodemap"
:
"FAN_COIL_STATUS"
,
"dataType"
:
"dummy"
,
"channel"
:
"1"
,
"valueRange"
:[],
"value"
:
0
},{
"identifier"
:
"system_time"
,
"opcodemap"
:
"FAN_COIL_STATUS"
,
"dataType"
:
"dummy"
,
"channel"
:
"1"
,
"valueRange"
:[],
"value"
:
"1970-01-01 00:00:00"
},{
"identifier"
:
"week_day"
,
"opcodemap"
:
"FAN_COIL_STATUS"
,
"dataType"
:
"dummy"
,
"channel"
:
"1"
,
"valueRange"
:[],
"value"
:
0
},{
"identifier"
:
"total_work_time"
,
"opcodemap"
:
"FAN_COIL_STATUS"
,
"dataType"
:
"dummy"
,
"channel"
:
"1"
,
"valueRange"
:[],
"value"
:
0
},{
"identifier"
:
"timing_boot"
,
"opcodemap"
:
"FAN_COIL_STATUS"
,
"dataType"
:
"dummy"
,
"channel"
:
"1"
,
"valueRange"
:[],
"value"
:
{
"enable "
:
false
,
"time"
:
"00:00"
}
}
],
"oldccu"
:[
{
"opcode"
:
"SWITCH"
,
"identifiermap"
:
"PowerSwitch"
,
"dataType"
:
"map"
,
"channel"
:
"1"
,
"valueRange"
:[
"OFF"
,
"ON"
],
"syn"
:
"on"
,
"synType"
:
"bool"
},{
"opcode"
:
"FAN_COIL_SET_RUN_MODEL"
,
"identifiermap"
:
"WorkMode"
,
"dataType"
:
"map"
,
"channel"
:
"1"
,
"valueRange"
:[
"COLD"
,
"HOT"
,
"WIND"
,
"DEHUMIDIFICATION"
],
"syn"
:
"run_model"
,
"synType"
:
"map"
},{
"opcode"
:
"FAN_COIL_SET_FUN_SPEED"
,
"identifiermap"
:
"WindSpeed"
,
"dataType"
:
"map"
,
"channel"
:
"1"
,
"valueRange"
:[
"AUTO"
,
"LOW"
,
"MID"
,
"HIGH"
],
"syn"
:
"fan_speed"
,
"synType"
:
"map"
},{
"opcode"
:
"FAN_COIL_SET_TEMPERATURE"
,
"identifiermap"
:
"Temperature"
,
"dataType"
:
"double"
,
"channel"
:
"1"
,
"valueRange"
:[],
"syn"
:
"setting_temperature"
,
"synType"
:
"double"
},{
"opcode"
:
"FAN_COIL_SET_DELAY_SWITCH_TASK"
,
"identifiermap"
:
"TimingOffTime"
,
"dataType"
:
"double"
,
"channel"
:
"1"
,
"valueRange"
:[],
"syn"
:
"timing_shutdown"
,
"synType"
:
"timing_shutdown"
},{
"opcode"
:
"FAN_COIL_SET_LOCK_STATUS"
,
"identifiermap"
:
"ChildLockState"
,
"dataType"
:
"double"
,
"channel"
:
"1"
,
"valueRange"
:[],
"syn"
:
""
,
"synType"
:
"dummy"
},{
"opcode"
:
"room_temperature"
,
"identifiermap"
:
"CurrentTemperature"
,
"dataType"
:
"double"
,
"channel"
:
"1"
,
"valueRange"
:[],
"syn"
:
"room_temperature"
,
"synType"
:
"double"
},{
"opcode"
:
"FAN_COIL_STATUS"
,
"identifiermap"
:
"smart_model_id"
,
"dataType"
:
"double"
,
"channel"
:
"1"
,
"valueRange"
:[],
"syn"
:
"smart_model_id"
,
"synType"
:
"double"
},{
"opcode"
:
"FAN_COIL_STATUS"
,
"identifiermap"
:
"smart_model_time_index"
,
"dataType"
:
"double"
,
"channel"
:
"1"
,
"valueRange"
:[],
"syn"
:
"smart_model_time_index"
,
"synType"
:
"double"
},{
"opcode"
:
"FAN_COIL_STATUS"
,
"identifiermap"
:
"system_time"
,
"dataType"
:
"double"
,
"channel"
:
"1"
,
"valueRange"
:[],
"syn"
:
"system_time"
,
"synType"
:
"map"
},{
"opcode"
:
"FAN_COIL_STATUS"
,
"identifiermap"
:
"week_day"
,
"dataType"
:
"double"
,
"channel"
:
"1"
,
"valueRange"
:[],
"syn"
:
"week_day"
,
"synType"
:
"int"
},{
"opcode"
:
"FAN_COIL_STATUS"
,
"identifiermap"
:
"total_work_time"
,
"dataType"
:
"double"
,
"channel"
:
"1"
,
"valueRange"
:[],
"syn"
:
"total_work_time"
,
"synType"
:
"int"
},{
"opcode"
:
"FAN_COIL_STATUS"
,
"identifiermap"
:
"timing_boot"
,
"dataType"
:
"double"
,
"channel"
:
"1"
,
"valueRange"
:[],
"syn"
:
"timing_boot"
,
"synType"
:
"def"
}
]
}
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