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
942006cb
Commit
942006cb
authored
Mar 12, 2022
by
chen.weican
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【修改内容】增加空调内机多控功能
【提交人】陈伟灿
parent
d4fa60b3
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
179 additions
and
19 deletions
+179
-19
midware/midware/midware.c
midware/midware/midware.c
+2
-0
midware/midware/scene/kk_mutictrl_handle.c
midware/midware/scene/kk_mutictrl_handle.c
+164
-18
midware/midware/scene/kk_mutictrl_handle.h
midware/midware/scene/kk_mutictrl_handle.h
+13
-1
No files found.
midware/midware/midware.c
View file @
942006cb
...
@@ -44,6 +44,7 @@
...
@@ -44,6 +44,7 @@
#include "kk_group_db.h"
#include "kk_group_db.h"
#include "kk_alarm_handle.h"
#include "kk_alarm_handle.h"
#include "kk_history_db.h"
#include "kk_history_db.h"
#include "kk_mutictrl_handle.h"
int
g_timezone
=
8
;
int
g_timezone
=
8
;
char
*
g_filerToPlatTable
[]
=
char
*
g_filerToPlatTable
[]
=
...
@@ -2136,6 +2137,7 @@ int main(const int argc, const char **argv)
...
@@ -2136,6 +2137,7 @@ int main(const int argc, const char **argv)
kk_group_db_init
();
kk_group_db_init
();
kk_motor_bind_db_init
();
kk_motor_bind_db_init
();
kk_scene_init
();
kk_scene_init
();
kk_mutictrl_init
();
g_timezone
=
HAL_Get_TimeZone
();
g_timezone
=
HAL_Get_TimeZone
();
mid_ctx
->
g_mid_dispatch_thread_running
=
1
;
mid_ctx
->
g_mid_dispatch_thread_running
=
1
;
...
...
midware/midware/scene/kk_mutictrl_handle.c
View file @
942006cb
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sqlite3.h"
#include "sqlite3.h"
#include "kk_log.h"
#include "kk_log.h"
#include "kk_hal.h"
#include "kk_hal.h"
...
@@ -11,9 +13,136 @@
...
@@ -11,9 +13,136 @@
#include "kk_property_db.h"
#include "kk_property_db.h"
#include "kk_mutictrl_handle.h"
#include "kk_mutictrl_handle.h"
#include "kk_scene_handle.h"
#include "kk_scene_handle.h"
mutictrl_timestamp_t
g_mc_stamp
=
{
0
};
#include "kk_utils.h"
// g_mc_stamp[6] = {0};
#if 1
#if 1
void
split
(
char
*
src
,
const
char
*
separator
,
char
**
dest
,
int
*
num
);
void
split
(
char
*
src
,
const
char
*
separator
,
char
**
dest
,
int
*
num
);
int
kk_mutictrl_rm_list
(
mutictrl_record_t
*
node
);
static
dm_mutictrl_ctx
g_dm_mutictrl
=
{
0
};
static
dm_mutictrl_ctx
*
_dm_mutictrl_get_ctx
(
void
)
{
return
&
g_dm_mutictrl
;
}
static
void
_dm_mutictrl_mutex_lock
(
void
)
{
dm_mutictrl_ctx
*
ctx
=
_dm_mutictrl_get_ctx
();
if
(
ctx
->
mutex
)
{
kk_MutexLock
(
ctx
->
mutex
);
}
}
static
void
_dm_mutictrl_mutex_unlock
(
void
)
{
dm_mutictrl_ctx
*
ctx
=
_dm_mutictrl_get_ctx
();
if
(
ctx
->
mutex
)
{
kk_MutexUnLock
(
ctx
->
mutex
);
}
}
void
*
kk_muti_dispatch_yield
(
void
*
args
)
{
dm_mutictrl_ctx
*
ctx
=
_dm_mutictrl_get_ctx
();
time_t
timestampnow
=
0
;
while
(
1
)
{
mutictrl_record_t
*
search_node
=
NULL
;
timestampnow
=
HAL_Uptimes
();
_dm_mutictrl_mutex_lock
();
list_for_each_entry
(
search_node
,
&
ctx
->
mutictrl_list
,
linked_list
,
mutictrl_record_t
)
{
if
(
timestampnow
-
search_node
->
timestamp
>=
5
){
INFO_PRINT
(
"kk_muti_dispatch_yield kk_mutictrl_rm_list
\n
"
);
kk_mutictrl_rm_list
(
search_node
);
}
}
_dm_mutictrl_mutex_unlock
();
usleep
(
500000
);
}
return
NULL
;
}
int
kk_mutictrl_init
(
void
)
{
int
res
=
0
;
dm_mutictrl_ctx
*
ctx
=
_dm_mutictrl_get_ctx
();
memset
(
ctx
,
0
,
sizeof
(
dm_mutictrl_ctx
));
ctx
->
mutex
=
kk_MutexCreate
();
if
(
ctx
->
mutex
==
NULL
)
{
return
-
1
;
}
INIT_LIST_HEAD
(
&
ctx
->
mutictrl_list
);
res
=
pthread_create
((
pthread_t
*
)
&
ctx
->
g_mutictrl_thread
,
NULL
,
kk_muti_dispatch_yield
,
NULL
);
if
(
res
<
0
)
{
ERROR_PRINT
(
"HAL_ThreadCreate mid Failed
\n
"
);
//IOT_Linkkit_Close(mid_ctx->master_devid);
return
-
1
;
}
return
0
;
}
int
kk_mutictrl_add_list
(
char
*
sceneId
,
char
*
deviceCode
,
int
ep
)
{
dm_mutictrl_ctx
*
ctx
=
_dm_mutictrl_get_ctx
();
mutictrl_record_t
*
node
=
NULL
;
mutictrl_record_t
*
search_node
=
NULL
;
_dm_mutictrl_mutex_lock
();
list_for_each_entry
(
search_node
,
&
ctx
->
mutictrl_list
,
linked_list
,
mutictrl_record_t
)
{
if
(
search_node
->
epNum
==
ep
&&
(
memcmp
(
search_node
->
deviceCode
,
deviceCode
,
strlen
(
deviceCode
))
==
0
)
&&
(
memcmp
(
search_node
->
sceneId
,
sceneId
,
strlen
(
sceneId
))
==
0
))
{
/* dm_log_debug("Device Found, Product Key: %s, Device Name: %s", product_key, device_name); */
_dm_mutictrl_mutex_unlock
();
return
SUCCESS_RETURN
;
}
}
node
=
malloc
(
sizeof
(
mutictrl_record_t
));
if
(
node
==
NULL
)
{
_dm_mutictrl_mutex_unlock
();
return
MEMORY_NOT_ENOUGH
;
}
memset
(
node
,
0
,
sizeof
(
mutictrl_record_t
));
memcpy
(
node
->
sceneId
,
sceneId
,
strlen
(
sceneId
));
memcpy
(
node
->
deviceCode
,
deviceCode
,
strlen
(
deviceCode
));
node
->
epNum
=
ep
;
node
->
timestamp
=
HAL_Uptimes
();
INFO_PRINT
(
"kk_mutictrl_add_list[%s][%d]
\n
"
,
deviceCode
,
ep
);
INIT_LIST_HEAD
(
&
node
->
linked_list
);
list_add_tail
(
&
node
->
linked_list
,
&
ctx
->
mutictrl_list
);
_dm_mutictrl_mutex_unlock
();
return
0
;
}
int
kk_mutictrl_get_by_devicecode
(
char
*
deviceCode
,
char
*
sceneId
,
int
ep
,
mutictrl_record_t
**
node
)
{
dm_mutictrl_ctx
*
ctx
=
_dm_mutictrl_get_ctx
();
mutictrl_record_t
*
search_node
=
NULL
;
list_for_each_entry
(
search_node
,
&
ctx
->
mutictrl_list
,
linked_list
,
mutictrl_record_t
)
{
if
(
search_node
->
epNum
==
ep
&&
(
memcmp
(
search_node
->
deviceCode
,
deviceCode
,
strlen
(
deviceCode
))
==
0
)
&&
(
memcmp
(
search_node
->
sceneId
,
sceneId
,
strlen
(
sceneId
))
==
0
))
{
/* dm_log_debug("Device Found, Product Key: %s, Device Name: %s", product_key, device_name); */
if
(
node
)
{
*
node
=
search_node
;
}
return
SUCCESS_RETURN
;
}
}
ERROR_PRINT
(
"kk_mutictrl_get_by_devicecode, deviceCode: %s
\n
"
,
deviceCode
);
return
FAIL_RETURN
;
}
int
kk_mutictrl_rm_list
(
mutictrl_record_t
*
node
)
{
dm_mutictrl_ctx
*
ctx
=
_dm_mutictrl_get_ctx
();
if
(
node
==
NULL
){
return
-
1
;
}
//_dm_mutictrl_mutex_lock();
INFO_PRINT
(
"kk_mutictrl_rm_list[%s][%d]
\n
"
,
node
->
deviceCode
,
node
->
epNum
);
list_del
(
&
node
->
linked_list
);
free
(
node
);
node
=
NULL
;
//_dm_mgr_mutex_unlock();
return
SUCCESS_RETURN
;
}
char
*
g_manualMutiCtrlDev
[]
=
char
*
g_manualMutiCtrlDev
[]
=
{
{
(
char
*
){
"3062"
},
(
char
*
){
"3062"
},
...
@@ -75,7 +204,7 @@ static int _kk_get_MutiCtrl_sceneId(char *deviceCode,char *sceneId,int epNum)
...
@@ -75,7 +204,7 @@ static int _kk_get_MutiCtrl_sceneId(char *deviceCode,char *sceneId,int epNum)
}
}
return
-
1
;
return
-
1
;
}
}
static
int
_kk_manual_mutictrl_set
(
cJSON
*
param
,
char
*
setDeviceCode
,
int
ep
,
char
*
srcDeviceCode
,
int
isMutiEp
)
static
int
_kk_manual_mutictrl_set
(
cJSON
*
param
,
char
*
setDeviceCode
,
int
ep
,
char
*
srcDeviceCode
,
int
isMutiEp
,
char
*
sceneId
)
{
{
int
res
=
0
,
idx
=
0
;
int
res
=
0
,
idx
=
0
;
char
valueStr
[
32
]
=
{
0
};
char
valueStr
[
32
]
=
{
0
};
...
@@ -87,6 +216,7 @@ static int _kk_manual_mutictrl_set(cJSON *param,char *setDeviceCode,int ep,char*
...
@@ -87,6 +216,7 @@ static int _kk_manual_mutictrl_set(cJSON *param,char *setDeviceCode,int ep,char*
int
num
=
0
;
int
num
=
0
;
char
epStr
[
4
]
=
{
0
};
char
epStr
[
4
]
=
{
0
};
int
offflag
=
0
;
int
offflag
=
0
;
int
exexuteFlag
=
0
;
cJSON
*
propertyItem
=
NULL
;
cJSON
*
propertyItem
=
NULL
;
res
=
dm_mgr_get_device_by_devicecode
((
char
*
)
srcDeviceCode
,
&
node
);
res
=
dm_mgr_get_device_by_devicecode
((
char
*
)
srcDeviceCode
,
&
node
);
if
(
res
!=
SUCCESS_RETURN
){
if
(
res
!=
SUCCESS_RETURN
){
...
@@ -142,15 +272,15 @@ static int _kk_manual_mutictrl_set(cJSON *param,char *setDeviceCode,int ep,char*
...
@@ -142,15 +272,15 @@ static int _kk_manual_mutictrl_set(cJSON *param,char *setDeviceCode,int ep,char*
sprintf
(
newIdentifier
,
"%s"
,
propertiesTmp
);
sprintf
(
newIdentifier
,
"%s"
,
propertiesTmp
);
}
}
}
}
INFO_PRINT
(
"[%s][%d]valueStr:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
valueStr
);
//
INFO_PRINT("[%s][%d]valueStr:%s\n",__FUNCTION__,__LINE__,valueStr);
INFO_PRINT
(
"[%s][%d]newIdentifier:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
newIdentifier
);
//
INFO_PRINT("[%s][%d]newIdentifier:%s\n",__FUNCTION__,__LINE__,newIdentifier);
if
(
strcmp
(
setDevnode
->
productCode
,
"3062"
)
==
0
){
if
(
strcmp
(
setDevnode
->
productCode
,
"3062"
)
==
0
){
kk_indoorair_property_db_get_value_directly
((
const
char
*
)
setDeviceCode
,(
const
char
*
)
newIdentifier
,
oldvalueStr
,
ep
);
kk_indoorair_property_db_get_value_directly
((
const
char
*
)
setDeviceCode
,(
const
char
*
)
newIdentifier
,
oldvalueStr
,
ep
);
}
else
{
}
else
{
kk_property_db_get_value_directly
((
const
char
*
)
setDeviceCode
,(
const
char
*
)
newIdentifier
,
oldvalueStr
);
kk_property_db_get_value_directly
((
const
char
*
)
setDeviceCode
,(
const
char
*
)
newIdentifier
,
oldvalueStr
);
}
}
INFO_PRINT
(
"[%s][%d]oldvalueStr:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
oldvalueStr
);
//
INFO_PRINT("[%s][%d]oldvalueStr:%s\n",__FUNCTION__,__LINE__,oldvalueStr);
INFO_PRINT
(
"[%s][%d]setDeviceCode:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
setDeviceCode
);
//
INFO_PRINT("[%s][%d]setDeviceCode:%s\n",__FUNCTION__,__LINE__,setDeviceCode);
if
(
strcmp
(
oldvalueStr
,
valueStr
)
==
0
){
if
(
strcmp
(
oldvalueStr
,
valueStr
)
==
0
){
continue
;
continue
;
}
else
{
}
else
{
...
@@ -175,10 +305,10 @@ static int _kk_manual_mutictrl_set(cJSON *param,char *setDeviceCode,int ep,char*
...
@@ -175,10 +305,10 @@ static int _kk_manual_mutictrl_set(cJSON *param,char *setDeviceCode,int ep,char*
cJSON_AddStringToObject
(
param
,
"epNum"
,
epStr
);
cJSON_AddStringToObject
(
param
,
"epNum"
,
epStr
);
paramstr
=
cJSON_Print
(
param
);
paramstr
=
cJSON_Print
(
param
);
offflag
=
1
;
offflag
=
1
;
}
else
{
}
else
{
paramstr
=
cJSON_Print
(
params
);
paramstr
=
cJSON_Print
(
params
);
}
}
exexuteFlag
=
1
;
kk_msg_execute_property_set
(
setDevnode
->
productCode
,
setDevnode
->
deviceCode
,
paramstr
,
setDevnode
->
fatherDeviceCode
);
kk_msg_execute_property_set
(
setDevnode
->
productCode
,
setDevnode
->
deviceCode
,
paramstr
,
setDevnode
->
fatherDeviceCode
);
free
(
paramstr
);
free
(
paramstr
);
cJSON_Delete
(
params
);
cJSON_Delete
(
params
);
...
@@ -189,6 +319,18 @@ static int _kk_manual_mutictrl_set(cJSON *param,char *setDeviceCode,int ep,char*
...
@@ -189,6 +319,18 @@ static int _kk_manual_mutictrl_set(cJSON *param,char *setDeviceCode,int ep,char*
}
}
}
}
}
}
if
(
exexuteFlag
==
0
){
mutictrl_record_t
*
search_node
=
NULL
;
_dm_mutictrl_mutex_lock
();
res
=
kk_mutictrl_get_by_devicecode
((
char
*
)
setDeviceCode
,
sceneId
,
ep
,
&
search_node
);
if
(
res
==
0
){
kk_mutictrl_rm_list
(
search_node
);
_dm_mutictrl_mutex_unlock
();
INFO_PRINT
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
return
-
1
;
}
_dm_mutictrl_mutex_unlock
();
}
return
0
;
return
0
;
}
}
static
int
_kk_manual_mutictrl_ctrl
(
char
*
sceneId
,
char
*
deviceCode
,
int
ep
,
cJSON
*
param
,
int
isMutiEp
)
static
int
_kk_manual_mutictrl_ctrl
(
char
*
sceneId
,
char
*
deviceCode
,
int
ep
,
cJSON
*
param
,
int
isMutiEp
)
...
@@ -206,9 +348,7 @@ static int _kk_manual_mutictrl_ctrl(char *sceneId,char *deviceCode,int ep,cJSON
...
@@ -206,9 +348,7 @@ static int _kk_manual_mutictrl_ctrl(char *sceneId,char *deviceCode,int ep,cJSON
if
(
isManualDev
==
-
1
){
if
(
isManualDev
==
-
1
){
return
-
1
;
return
-
1
;
}
}
memset
(
g_mc_stamp
.
sceneId
,
0x0
,
sizeof
(
g_mc_stamp
.
sceneId
));
memcpy
(
g_mc_stamp
.
sceneId
,
sceneId
,
strlen
(
sceneId
));
g_mc_stamp
.
timestamp
=
HAL_Uptimes
();
sqlCmd
=
sqlite3_mprintf
(
"select * from SceneActionInfo WHERE sceneId= '%s' and type = '%s'"
,
sceneId
,
"action/thing/group"
);
//actice判断设备是否移入待分配
sqlCmd
=
sqlite3_mprintf
(
"select * from SceneActionInfo WHERE sceneId= '%s' and type = '%s'"
,
sceneId
,
"action/thing/group"
);
//actice判断设备是否移入待分配
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
...
@@ -217,12 +357,12 @@ static int _kk_manual_mutictrl_ctrl(char *sceneId,char *deviceCode,int ep,cJSON
...
@@ -217,12 +357,12 @@ static int _kk_manual_mutictrl_ctrl(char *sceneId,char *deviceCode,int ep,cJSON
if
(
strcmp
(
pdeviceCode
,
deviceCode
)
==
0
&&
ep
==
epNum
){
//过滤掉刚上报的这路
if
(
strcmp
(
pdeviceCode
,
deviceCode
)
==
0
&&
ep
==
epNum
){
//过滤掉刚上报的这路
continue
;
continue
;
}
}
kk_mutictrl_add_list
(
sceneId
,
pdeviceCode
,
epNum
);
isAutoCtrlDev
=
_kk_check_manualMutiCtrlDev
((
const
char
*
)
pdeviceCode
);
isAutoCtrlDev
=
_kk_check_manualMutiCtrlDev
((
const
char
*
)
pdeviceCode
);
if
(
isAutoCtrlDev
==
0
){
//过滤下自动多控设备,手动多控设备先都手动执行下
if
(
isAutoCtrlDev
==
0
){
//过滤下自动多控设备,手动多控设备先都手动执行下
continue
;
continue
;
}
}
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
_kk_manual_mutictrl_set
(
param
,
pdeviceCode
,
epNum
,
deviceCode
,
isMutiEp
,
sceneId
);
_kk_manual_mutictrl_set
(
param
,
pdeviceCode
,
epNum
,
deviceCode
,
isMutiEp
);
}
}
sqlite3_free
(
sqlCmd
);
sqlite3_free
(
sqlCmd
);
sqlite3_finalize
(
stmt
);
sqlite3_finalize
(
stmt
);
...
@@ -237,7 +377,8 @@ static int _kk_manual_mutictrl_ctrl(char *sceneId,char *deviceCode,int ep,cJSON
...
@@ -237,7 +377,8 @@ static int _kk_manual_mutictrl_ctrl(char *sceneId,char *deviceCode,int ep,cJSON
}
}
isAutoCtrlDev
=
_kk_check_manualMutiCtrlDev
((
const
char
*
)
pdeviceCode
);
isAutoCtrlDev
=
_kk_check_manualMutiCtrlDev
((
const
char
*
)
pdeviceCode
);
if
(
isAutoCtrlDev
==
0
){
//手动多控设备先都手动执行下,过滤下自动多控设备
if
(
isAutoCtrlDev
==
0
){
//手动多控设备先都手动执行下,过滤下自动多控设备
_kk_manual_mutictrl_set
(
param
,
pdeviceCode
,
epNum
,
deviceCode
,
isMutiEp
);
//kk_mutictrl_add_list(sceneId,pdeviceCode,epNum);
_kk_manual_mutictrl_set
(
param
,
pdeviceCode
,
epNum
,
deviceCode
,
isMutiEp
,
sceneId
);
break
;
break
;
}
}
}
}
...
@@ -303,13 +444,18 @@ int kk_manual_mutictrl_execute(const char*deviceCode,cJSON *param)
...
@@ -303,13 +444,18 @@ int kk_manual_mutictrl_execute(const char*deviceCode,cJSON *param)
INFO_PRINT
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
INFO_PRINT
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
return
-
1
;
return
-
1
;
}
}
//if(strcmp(sceneId,g_mc_stamp.sceneId) == 0 && HAL_Uptimes() - g_mc_stamp.timestamp <= 2 ){
mutictrl_record_t
*
search_node
=
NULL
;
//INFO_PRINT("muti ctrl alread exexute !!!\n");
_dm_mutictrl_mutex_lock
();
//return -1;
res
=
kk_mutictrl_get_by_devicecode
((
char
*
)
deviceCode
,
sceneId
,
ep
,
&
search_node
);
//}
if
(
res
==
0
){
kk_mutictrl_rm_list
(
search_node
);
_dm_mutictrl_mutex_unlock
();
INFO_PRINT
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
return
-
1
;
}
_dm_mutictrl_mutex_unlock
();
INFO_PRINT
(
"sceneId:%s
\n
"
,
sceneId
);
INFO_PRINT
(
"sceneId:%s
\n
"
,
sceneId
);
_kk_manual_mutictrl_ctrl
(
sceneId
,(
char
*
)
deviceCode
,
ep
,
param
,
isMutiEp
);
_kk_manual_mutictrl_ctrl
(
sceneId
,(
char
*
)
deviceCode
,
ep
,
param
,
isMutiEp
);
return
SUCCESS_RETURN
;
return
SUCCESS_RETURN
;
}
}
#endif
#endif
\ No newline at end of file
midware/midware/scene/kk_mutictrl_handle.h
View file @
942006cb
#ifndef __KK_MUTICTRL_HANDLE_H__
#ifndef __KK_MUTICTRL_HANDLE_H__
#define __KK_MUTICTRL_HANDLE_H__
#define __KK_MUTICTRL_HANDLE_H__
#include "cJSON.h"
#include "cJSON.h"
#include "klist.h"
typedef
struct
{
typedef
struct
{
char
sceneId
[
16
];
char
sceneId
[
16
];
char
deviceCode
[
32
];
int
epNum
;
int
count
;
time_t
timestamp
;
time_t
timestamp
;
}
mutictrl_timestamp_t
;
struct
list_head
linked_list
;
}
mutictrl_record_t
;
typedef
struct
{
void
*
mutex
;
void
*
g_mutictrl_thread
;
struct
list_head
mutictrl_list
;
}
dm_mutictrl_ctx
;
int
kk_virtual_mutictrl_check
(
const
char
*
deviceCode
,
cJSON
*
param
);
int
kk_virtual_mutictrl_check
(
const
char
*
deviceCode
,
cJSON
*
param
);
int
kk_manual_mutictrl_execute
(
const
char
*
deviceCode
,
cJSON
*
param
);
int
kk_manual_mutictrl_execute
(
const
char
*
deviceCode
,
cJSON
*
param
);
int
kk_mutictrl_init
(
void
);
#endif
#endif
\ No newline at end of file
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