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
a8ec59b6
Commit
a8ec59b6
authored
Sep 13, 2021
by
尹佳钦
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
去除编译警告,离线语音面板接入空调,新风,线控器,窗帘
parent
23221610
Changes
33
Hide whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
1325 additions
and
417 deletions
+1325
-417
application/klansdk/kk_ccu_msg.c
application/klansdk/kk_ccu_msg.c
+3
-2
application/klansdk/kk_data_handle.c
application/klansdk/kk_data_handle.c
+4
-2
application/klansdk/kk_data_handle.h
application/klansdk/kk_data_handle.h
+6
-0
application/klansdk/kk_data_mng.c
application/klansdk/kk_data_mng.c
+7
-7
application/klansdk/kk_data_mng.h
application/klansdk/kk_data_mng.h
+9
-2
application/klansdk/kk_findccu_handle.c
application/klansdk/kk_findccu_handle.c
+1
-0
application/klansdk/kk_findccu_handle.h
application/klansdk/kk_findccu_handle.h
+1
-0
application/klansdk/kk_lan_ctrl.c
application/klansdk/kk_lan_ctrl.c
+8
-3
application/klansdk/kk_lan_debug.h
application/klansdk/kk_lan_debug.h
+7
-0
application/klansdk/kk_lan_main.c
application/klansdk/kk_lan_main.c
+9
-7
application/klansdk/kk_lan_new_dev_notify.c
application/klansdk/kk_lan_new_dev_notify.c
+5
-5
application/klansdk/kk_lan_new_dev_notify.h
application/klansdk/kk_lan_new_dev_notify.h
+10
-3
application/klansdk/kk_lan_node_db.c
application/klansdk/kk_lan_node_db.c
+18
-16
application/klansdk/kk_lan_node_db.h
application/klansdk/kk_lan_node_db.h
+2
-2
application/klansdk/kk_lan_queue.c
application/klansdk/kk_lan_queue.c
+1
-2
application/klansdk/kk_lan_sync.c
application/klansdk/kk_lan_sync.c
+164
-66
application/klansdk/kk_lan_sync.h
application/klansdk/kk_lan_sync.h
+12
-1
application/klansdk/kk_lan_voice_panel.c
application/klansdk/kk_lan_voice_panel.c
+19
-9
application/klansdk/kk_lan_vp_ctrl.c
application/klansdk/kk_lan_vp_ctrl.c
+387
-83
application/klansdk/kk_lan_vp_ctrl.h
application/klansdk/kk_lan_vp_ctrl.h
+54
-1
application/klansdk/kk_login_handle.c
application/klansdk/kk_login_handle.c
+4
-0
application/klansdk/kk_newccu_msg.c
application/klansdk/kk_newccu_msg.c
+4
-1
application/klansdk/kk_oldccu_msg.c
application/klansdk/kk_oldccu_msg.c
+19
-13
application/klansdk/kk_oldccu_msg.h
application/klansdk/kk_oldccu_msg.h
+4
-0
application/klansdk/kk_voice_panel_cfg.c
application/klansdk/kk_voice_panel_cfg.c
+344
-50
application/klansdk/kk_voice_panel_cfg.h
application/klansdk/kk_voice_panel_cfg.h
+9
-7
application/klansdk/kk_voice_panel_handle.c
application/klansdk/kk_voice_panel_handle.c
+142
-99
application/klansdk/kk_voice_panel_handle.h
application/klansdk/kk_voice_panel_handle.h
+10
-15
application/klansdk/uart_proto.c
application/klansdk/uart_proto.c
+9
-10
midware/midware/dm/kk_sync_data.c
midware/midware/dm/kk_sync_data.c
+12
-5
midware/midware/scene/kk_scene_db.c
midware/midware/scene/kk_scene_db.c
+3
-0
midware/midware/scene/kk_scene_handle.c
midware/midware/scene/kk_scene_handle.c
+37
-5
midware/tsl/tsl_handle/kk_tsl_common.h
midware/tsl/tsl_handle/kk_tsl_common.h
+1
-1
No files found.
application/klansdk/kk_ccu_msg.c
View file @
a8ec59b6
...
...
@@ -464,6 +464,7 @@ int kk_lan_get_msg_id_str(char *msgId,int size)
{
memset
(
msgId
,
0
,
size
);
snprintf
(
msgId
,
size
,
"%d"
,
kk_lan_get_msg_id
());
return
0
;
}
...
...
@@ -495,7 +496,7 @@ int kk_lan_add_val_to_obj(cJSON *obj,cJSON *val,const char *id)
}
else
if
(
val
->
type
==
cJSON_String
){
cJSON_AddStringToObject
(
obj
,
id
,
val
->
valuestring
);
}
else
{
debug_log
(
LOG_DEBUG_LEVEL
,
"[err] nonsupport type(%
s
).
\n
"
,
val
->
type
);
debug_log
(
LOG_DEBUG_LEVEL
,
"[err] nonsupport type(%
d
).
\n
"
,
val
->
type
);
return
-
1
;
}
return
0
;
...
...
@@ -525,7 +526,7 @@ int kk_lan_replace_val_to_obj(cJSON *obj,cJSON *val,const char *id)
}
else
if
(
val
->
type
==
cJSON_String
){
cJSON_ReplaceItemInObject
(
obj
,
id
,
cJSON_CreateString
(
val
->
valuestring
));
}
else
{
debug_log
(
LOG_DEBUG_LEVEL
,
"[err] nonsupport type(%
s
).
\n
"
,
val
->
type
);
debug_log
(
LOG_DEBUG_LEVEL
,
"[err] nonsupport type(%
d
).
\n
"
,
val
->
type
);
return
-
1
;
}
return
0
;
...
...
application/klansdk/kk_data_handle.c
View file @
a8ec59b6
...
...
@@ -18,8 +18,10 @@
#include "kk_lan_ctrl.h"
#include "kk_lan_sync.h"
#include "kk_lan_debug.h"
#include "kk_findccu_handle.h"
#include "kk_voice_panel_handle.h"
#include "kk_lan_node_db.h"
#include "kk_oldccu_msg.h"
const
char
DM_MSG_TO_MIDDWARE
[]
=
"{
\"
msgtype
\"
:
\"
%s
\"
,
\"
productCode
\"
:
\"
%s
\"
,
\"
deviceCode
\"
:
\"
%s
\"
}"
;
...
...
@@ -219,7 +221,7 @@ static int kk_loginccu_ack(cJSON *arg,int sockfd)
}
//构建hw信息
static
cJSON
*
kk_zb_dev_hw_info_build
(
const
char
*
deviceCode
,
c
JSON
*
productCode
,
int
online
,
const
char
*
hw_ver
,
const
char
*
sw_ver
)
static
cJSON
*
kk_zb_dev_hw_info_build
(
const
char
*
deviceCode
,
c
onst
char
*
productCode
,
int
online
,
const
char
*
hw_ver
,
const
char
*
sw_ver
)
{
cJSON
*
item
;
char
mac
[
32
]
=
{
0
};
...
...
application/klansdk/kk_data_handle.h
View file @
a8ec59b6
...
...
@@ -7,4 +7,10 @@
int
kk_data_handle
(
cJSON
*
json
,
int
sockfd
);
void
kk_handle_sync_info
(
void
);
void
KK_Data_FromMid
(
void
*
str
,
int
len
);
int
kk_lan_property_syn_deal
(
const
char
*
deviceCode
,
cJSON
*
properties
);
int
send_msg_to_module
(
cJSON
*
root
);
void
device_add_sync
(
cJSON
*
payload
);
void
kk_handle_sync_push_info
(
void
);
#endif
\ No newline at end of file
application/klansdk/kk_data_mng.c
View file @
a8ec59b6
...
...
@@ -5,7 +5,7 @@
#include "kk_data_mng.h"
#include "kk_lan_node_db.h"
#include "kk_oldccu_msg.h"
#include "kk_utils.h"
static
kk_map_dev_ctx
g_map_dev_mgr
=
{
0
};
...
...
@@ -192,7 +192,7 @@ static kk_map_dev_node_t *kk_map_dev_node_create_ex(const char *deviceCode,const
}
static
char
*
kk_open_lan_cfg_file
(
char
*
deviceCode
)
static
char
*
kk_open_lan_cfg_file
(
c
onst
c
har
*
deviceCode
)
{
char
path
[
128
]
=
{
0
};
unsigned
int
filesize
;
...
...
@@ -226,7 +226,7 @@ static char *kk_open_lan_cfg_file(char *deviceCode)
return
buf
;
}
//todo:
int
kk_creater_nodeid
(
char
*
deviceCode
,
int
channel
,
char
*
nodeId
,
int
operate_type
)
int
kk_creater_nodeid
(
char
*
deviceCode
,
int
channel
,
char
*
nodeId
)
{
static
int
next
=
1
;
int
node
=-
1
;
...
...
@@ -245,7 +245,7 @@ int kk_creater_nodeid(char *deviceCode,int channel,char *nodeId,int operate_type
while
(
kk_check_lan_node
(
next
)){
++
next
;
}
if
(
0
==
kk_lan_db_node_insert
(
deviceCode
,
channel
,
next
,
operate_type
)){
if
(
0
==
kk_lan_db_node_insert
(
deviceCode
,
channel
,
next
)){
node
=
next
;
}
}
...
...
@@ -264,7 +264,7 @@ int kk_creater_nodeid(char *deviceCode,int channel,char *nodeId,int operate_type
static
char
*
kk_value_int_map_string
(
char
*
opcodemap
,
kk_map_dev_node_t
*
node
,
int
idx
)
{
if
(
opcodemap
==
NULL
||
node
==
NULL
){
return
-
1
;
return
""
;
}
cJSON
*
oldccuItem
=
node
->
oldccu
->
child
;
while
(
oldccuItem
!=
NULL
){
...
...
@@ -321,7 +321,7 @@ int mac_switchto_deviceCode(char *mac,char * deviceCode)
deviceCode
[
j
]
=
'\0'
;
/*在串s结尾加结束标志*/
return
0
;
}
int
_deviceCode_switchto_mac
(
char
*
deviceCode
,
char
*
mac
)
int
_deviceCode_switchto_mac
(
c
onst
c
har
*
deviceCode
,
char
*
mac
)
{
char
deviceCode_bak
[
33
]
=
{
0
};
int
i
,
j
;
...
...
@@ -435,7 +435,7 @@ int kk_map_dev_update_int_value_by_devicecode(char *deviceCode,char *identifier,
}
int
kk_map_dev_search_by_deviceCode
(
char
*
deviceCode
,
kk_map_dev_node_t
**
node
)
int
kk_map_dev_search_by_deviceCode
(
c
onst
c
har
*
deviceCode
,
kk_map_dev_node_t
**
node
)
{
kk_map_dev_ctx
*
ctx
=
_kk_map_dev_ctx
();
kk_map_dev_node_t
*
search_node
=
NULL
;
...
...
application/klansdk/kk_data_mng.h
View file @
a8ec59b6
...
...
@@ -31,11 +31,18 @@ typedef struct {
kk_map_dev_node_t
*
kk_map_dev_node_add
(
const
char
*
deviceCode
,
const
char
*
productCode
,
const
char
*
gwdeviceCode
,
const
char
*
onlineStatus
);
int
kk_create_devicestatus_to_sdk
(
cJSON
*
root
);
int
kk_create_devices_to_sdk
(
cJSON
*
root
);
int
_deviceCode_switchto_mac
(
char
*
deviceCode
,
char
*
mac
);
int
_deviceCode_switchto_mac
(
c
onst
c
har
*
deviceCode
,
char
*
mac
);
int
mac_switchto_deviceCode
(
char
*
mac
,
char
*
deviceCode
);
int
kk_map_dev_search_by_deviceCode
(
char
*
deviceCode
,
kk_map_dev_node_t
**
node
);
int
kk_map_dev_search_by_deviceCode
(
c
onst
c
har
*
deviceCode
,
kk_map_dev_node_t
**
node
);
kk_map_dev_ctx
*
_kk_map_dev_ctx
(
void
);
int
kk_map_dev_init
(
void
);
int
kk_map_dev_search_by_productCode
(
char
*
productCode
,
kk_map_dev_node_t
**
node
);
void
_kk_map_dev_mutex_lock
(
void
);
void
_kk_map_dev_mutex_unlock
(
void
);
void
kk_map_dev_deinit
(
void
);
int
kk_creater_nodeid
(
char
*
deviceCode
,
int
channel
,
char
*
nodeId
);
#endif
application/klansdk/kk_findccu_handle.c
View file @
a8ec59b6
...
...
@@ -17,6 +17,7 @@
#include "kk_hal.h"
#include "cJSON.h"
static
int
kk_findccu_ack
(
int
sockfd
,
struct
sockaddr_in
*
addr
){
cJSON
*
json
=
NULL
,
*
args
=
NULL
;
cJSON
*
ccu
=
NULL
;
...
...
application/klansdk/kk_findccu_handle.h
View file @
a8ec59b6
...
...
@@ -15,6 +15,7 @@
#define FINDCCU_LOCAL_PORT 8989
int
kk_lan_get_ccuid
(
_OU_
char
*
device_code
);
int
kk_findccu_handle_init
(
void
);
#endif
\ No newline at end of file
application/klansdk/kk_lan_ctrl.c
View file @
a8ec59b6
...
...
@@ -10,8 +10,9 @@
#include "kk_ccu_msg.h"
#include "kk_oldccu_msg.h"
#include "kk_newccu_msg.h"
#include "kk_lan_node_db.h"
extern
int
kk_lan_get_ccuid
(
_OU_
char
*
device_code
);
int
match_opcode_pos
(
cJSON
*
array
,
const
char
*
opcode
,
int
ch
)
...
...
@@ -320,8 +321,12 @@ int kk_ccu_opcode_handle(cJSON *root)
WARNING_PRINT
(
"[requester]%s
\n
"
,
requester
->
valuestring
);
if
(
strcmp
(
requester
->
valuestring
,
"HJ_CentralAC"
)
==
0
&&
strcmp
(
opcode
->
valuestring
,
"CENTRAL_AC_INDOOR_UNIT_SETTING"
)
==
0
){
kk_indoorAir_ctrl_handle
(
nodeId
->
valuestring
,
arg
);
int
channel
=
-
1
;
char
epNum
[
8
]
=
{
0
};
kk_lan_db_channel_get
(
atoi
(
nodeId
->
valuestring
),
&
channel
);
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
channel
);
kk_indoorAir_ctrl_handle
(
epNum
,
arg
);
return
0
;
}
else
if
(
strcmp
(
requester
->
valuestring
,
"HJ_Server"
)
==
0
){
if
(
strcmp
(
opcode
->
valuestring
,
"ARMING_IN_HOME"
)
==
0
){
...
...
application/klansdk/kk_lan_debug.h
View file @
a8ec59b6
...
...
@@ -49,8 +49,15 @@
printf("%s%s [%s:%d(%s)] "format"\033[m", LOG_LEVEL_(level),buff,__FILE__,__LINE__,__func__,##__VA_ARGS__); \
} \
}while(0)
#define _debug_log(level,format,...) do { \
if( level >= LOG_LEVEL && level <= LOG_CRITICAL_LEVEL) { \
printf("%s"format"\033[m", LOG_LEVEL_(level),##__VA_ARGS__); \
} \
}while(0)
#else
#define debug_log(level,format,...)
#define _debug_log(level,format,...)
#endif
...
...
application/klansdk/kk_lan_main.c
View file @
a8ec59b6
...
...
@@ -59,8 +59,8 @@ static void kk_lan_ccuid_init(void)
HAL_Execel_cmd
(
GET_CCUID_CMD
,(
char
*
)
ccuid
,
sizeof
(
ccuid
),
&
ccuid_len
);
printf
(
"GET_CCUID_CMD:%s
\n
"
,
ccuid
);
if
(
ccuid_len
>
0
&&
ccuid_len
<=
DEVICE_CODE_LEN
){
sprintf
(
ccuidTmp
,
"CCU_%s"
,
ccuid
);
_setDevice_Code
(
ccuidTmp
,
strlen
(
ccuidTmp
)
-
1
);
sprintf
(
(
char
*
)
ccuidTmp
,
"CCU_%s"
,
ccuid
);
_setDevice_Code
(
(
char
*
)
ccuidTmp
,
strlen
((
char
*
)
ccuidTmp
)
-
1
);
}
else
{
_setDevice_Code
(
KK_CCU_ID
,
strlen
(
KK_CCU_ID
));
}
...
...
@@ -132,10 +132,10 @@ int main(int argc, char* argv[])
open
(
"kk_lan"
,
LOG_PID
,
LOG_USER
);
//
if(prg_run_singleton(argv[0])<0){
//
debug_log(LOG_CRITICAL_LEVEL,"[%s]run singleton fail!\n",argv[0]);
//
return -1;
//
}
if
(
prg_run_singleton
(
argv
[
0
])
<
0
){
debug_log
(
LOG_CRITICAL_LEVEL
,
"[%s]run singleton fail!
\n
"
,
argv
[
0
]);
return
-
1
;
}
kk_lan_ccuid_init
();
...
...
@@ -144,7 +144,9 @@ int main(int argc, char* argv[])
kk_findccu_handle_init
();
kk_map_dev_init
();
kk_login_init
();
//kk_voice_panel_init(argc,argv);
kk_voice_panel_init
(
argc
,
argv
);
//lan_queue_init();
kk_lan_db_node_init
();
...
...
application/klansdk/kk_lan_new_dev_notify.c
View file @
a8ec59b6
...
...
@@ -33,8 +33,8 @@ static cJSON * _new_central_ac_gw_indoor_build(void* arg);
static
cJSON
*
_new_youzhuan_music_controllers_build
(
void
*
arg
);
typedef
cJSON
*
(
*
build_func
)(
void
*
*
items
);
typedef
struct
{
typedef
cJSON
*
(
*
build_func
)(
void
*
arg
);
typedef
struct
BUILD_FUNC
{
#define NEW_DEVICES_BUILD_TYPE 0
#define NEW_HUE_LIGHTS_BUILD_TYPE 1
...
...
@@ -74,13 +74,13 @@ static BUILD_FUNC new_dev_build_table[]={
{
NEW_YOUZHUAN_MUSIC_CONTROLLERS_BUILD_TYPE
,
_new_youzhuan_music_controllers_build
},
};
build_func
*
find_build_func
(
int
type
)
build_func
find_build_func
(
int
type
)
{
int
i
,
size
;
BUILD_FUNC
*
func
=
NULL
;
size
=
sizeof
(
new_dev_build_table
)
/
sizeof
(
BUILD_FUNC
);
func
=
&
new_dev_build_table
;
func
=
(
BUILD_FUNC
*
)
&
new_dev_build_table
;
for
(
i
=
0
;
i
<
size
;
i
++
,
func
++
){
if
(
func
->
type
==
type
){
...
...
@@ -353,7 +353,7 @@ static cJSON *new_devices_build_gw(int count)
}
return
ary
;
}
static
cJSON
*
new_devices_build_indoor
(
int
count
)
cJSON
*
new_devices_build_indoor
(
int
count
)
{
int
i
=
0
;
cJSON
*
ary
=
cJSON_CreateArray
();
...
...
application/klansdk/kk_lan_new_dev_notify.h
View file @
a8ec59b6
#ifndef __KK_LAN_NEW_DEV_NOTIFY_H
#define __KK_LAN_NEW_DEV_NOTIFY_H
#include "kk_ccu_msg.h"
#include "kk_lan_sync.h"
#include <stdbool.h>
typedef
struct
{
cJSON
*
new_device_count
;
...
...
@@ -135,9 +136,11 @@ typedef struct{
}
CENTRAL_AC_INDOOR_STATUS
;
typedef
struct
{
char
id
[
4
];
char
indooruint_addr
[
4
];
char
nodeid
[
8
];
char
id
[
AIR_AC_INDOOR_ID_SIZE
];
char
indooruint_addr
[
AIR_AC_INDOOR_ADDR_SIZE
];
char
nodeid
[
AIR_AC_INDOOR_ID_SIZE
];
char
dev_name
[
AIR_AC_INDOOR_NAME_SIZE
];
char
room_id
[
AIR_AC_INDOOR_ROOM_ID_SIZE
];
CENTRAL_AC_INDOOR_STATUS
ac_gw_status
;
}
CENTRAL_AC_INDOOR_ITEM
;
...
...
@@ -150,6 +153,10 @@ typedef struct{
char
*
music_controller_status
;
}
YOUZHUAN_MC_CTRL_ITEM
;
void
kk_clear_indoor_data
();
void
kk_new_device_send
();
#endif
...
...
application/klansdk/kk_lan_node_db.c
View file @
a8ec59b6
...
...
@@ -7,6 +7,9 @@
extern
void
HAL_MutexLock
(
_IN_
void
*
mutex
);
extern
void
HAL_MutexUnlock
(
_IN_
void
*
mutex
);
extern
void
*
HAL_MutexCreate
(
void
);
static
sqlite3
*
g_lan_pDb
;
...
...
@@ -46,8 +49,7 @@ static int _kk_lan_node_db_Init(void)
idx INTEGER PRIMARY KEY, \
deviceCode varchar(33), \
channel INTEGER, \
nodeId INTEGER, \
operate_type INTEGER)"
;
nodeId INTEGER)"
;
char
*
pcErr
;
...
...
@@ -105,7 +107,7 @@ int kk_check_lan_node(int nodeId)
{
int
isExist
=
0
;
sqlite3_stmt
*
stmt
;
char
*
pDeviceCode
=
NULL
;
unsigned
char
*
pDeviceCode
=
NULL
;
int
node
=
0
;
kk_lan_node_db_ctx_t
*
ctx
=
_kk_lan_node_db_get_ctx
();
const
char
*
searchCmd
=
"select * from Map2Node;"
;
...
...
@@ -140,7 +142,7 @@ int kk_check_lan_node_exist(const char* deviceCode,int channel)
{
int
isExist
=
0
;
sqlite3_stmt
*
stmt
;
char
*
pDeviceCode
=
NULL
;
c
onst
unsigned
c
har
*
pDeviceCode
=
NULL
;
int
ch
=
0
;
int
node
=
0
;
kk_lan_node_db_ctx_t
*
ctx
=
_kk_lan_node_db_get_ctx
();
...
...
@@ -151,7 +153,7 @@ int kk_check_lan_node_exist(const char* deviceCode,int channel)
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
pDeviceCode
=
sqlite3_column_text
(
stmt
,
LAN_DB_DEVICECODE
);
ch
=
sqlite3_column_int
(
stmt
,
LAN_DB_CHANNEL
);
if
(
!
strcmp
(
deviceCode
,
pDeviceCode
)
&&
ch
==
channel
)
if
(
!
strcmp
(
deviceCode
,
(
const
char
*
)
pDeviceCode
)
&&
ch
==
channel
)
{
isExist
=
1
;
break
;
...
...
@@ -166,7 +168,7 @@ static int _kk_check_lan_node_same(const char* deviceCode,int channel,int nodeId
{
int
same
=
0
;
sqlite3_stmt
*
stmt
;
char
*
pDeviceCode
=
NULL
;
c
onst
unsigned
c
har
*
pDeviceCode
=
NULL
;
int
ch
=
0
;
int
node
=
0
;
kk_lan_node_db_ctx_t
*
ctx
=
_kk_lan_node_db_get_ctx
();
...
...
@@ -178,7 +180,7 @@ static int _kk_check_lan_node_same(const char* deviceCode,int channel,int nodeId
pDeviceCode
=
sqlite3_column_text
(
stmt
,
LAN_DB_DEVICECODE
);
ch
=
sqlite3_column_int
(
stmt
,
LAN_DB_CHANNEL
);
node
=
sqlite3_column_int
(
stmt
,
LAN_DB_NODE
);
if
(
!
strcmp
(
deviceCode
,
pDeviceCode
)
&&
ch
==
channel
&&
node
==
nodeId
)
if
(
!
strcmp
(
deviceCode
,
(
const
char
*
)
pDeviceCode
)
&&
ch
==
channel
&&
node
==
nodeId
)
{
same
=
1
;
break
;
...
...
@@ -234,10 +236,10 @@ static int kk_lan_db_node_update(const char *deviceCode,int channel,int node)
*返 回 值: 0:成功;其他:失败
*其他说明:属性的值插入的时候先置空,后续再update
*************************************************************/
int
kk_lan_db_node_insert
(
const
char
*
deviceCode
,
int
channel
,
int
node
,
int
operate_type
)
int
kk_lan_db_node_insert
(
const
char
*
deviceCode
,
int
channel
,
int
node
)
{
const
char
*
insertCmd
=
"insert into Map2Node (deviceCode,channel,nodeId
,operate_type
) \
values ('%s','%d','%d'
,'%d'
);"
;
const
char
*
insertCmd
=
"insert into Map2Node (deviceCode,channel,nodeId) \
values ('%s','%d','%d');"
;
char
*
sqlCmd
=
NULL
;
int
rc
=
0
;
char
*
zErrMsg
=
0
;
...
...
@@ -251,7 +253,7 @@ int kk_lan_db_node_insert(const char *deviceCode,int channel,int node,int operat
}
_kk_lan_node_db_lock
();
sqlCmd
=
sqlite3_mprintf
(
insertCmd
,
deviceCode
,
channel
,
node
,
operate_type
);
sqlCmd
=
sqlite3_mprintf
(
insertCmd
,
deviceCode
,
channel
,
node
);
rc
=
sqlite3_exec
(
ctx
->
pDb
,
sqlCmd
,
NULL
,
NULL
,
&
zErrMsg
);
if
(
rc
!=
SQLITE_OK
){
...
...
@@ -355,7 +357,7 @@ int kk_lan_db_get_item_by_node(int node,char *deviceCode,int *channel)
char
*
zErrMsg
=
0
;
sqlite3_stmt
*
stmt
;
kk_lan_node_db_ctx_t
*
ctx
=
_kk_lan_node_db_get_ctx
();
char
*
dCode
=
0
;
c
onst
unsigned
c
har
*
dCode
=
0
;
_kk_lan_node_db_lock
();
sqlCmd
=
sqlite3_mprintf
(
"select * from Map2Node WHERE nodeId= '%d' "
,
node
);
...
...
@@ -363,7 +365,7 @@ int kk_lan_db_get_item_by_node(int node,char *deviceCode,int *channel)
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
if
(
deviceCode
!=
NULL
){
dCode
=
sqlite3_column_text
(
stmt
,
LAN_DB_DEVICECODE
);
memcpy
(
deviceCode
,
dCode
,
strlen
(
dCode
));
memcpy
(
deviceCode
,
(
char
*
)
dCode
,
strlen
((
char
*
)
dCode
));
}
if
(
channel
!=
NULL
){
...
...
@@ -379,12 +381,12 @@ int kk_lan_db_get_item_by_node(int node,char *deviceCode,int *channel)
}
int
kk_lan_db_channel_get
(
int
node
,
int
*
channel
)
{
kk_lan_db_get_item_by_node
(
node
,
NULL
,
channel
);
return
kk_lan_db_get_item_by_node
(
node
,
NULL
,
channel
);
}
int
kk_lan_db_deviceCode_get
(
int
node
,
char
*
deviceCode
)
{
kk_lan_db_get_item_by_node
(
node
,
deviceCode
,
NULL
);
return
kk_lan_db_get_item_by_node
(
node
,
deviceCode
,
NULL
);
}
...
...
@@ -396,7 +398,7 @@ int kk_lan_db_deviceCode_get(int node,char *deviceCode)
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_lan_db_node_delete
(
char
*
deviceCode
)
int
kk_lan_db_node_delete
(
c
onst
c
har
*
deviceCode
)
{
const
char
*
deleteCmd
=
"delete from Map2Node where deviceCode = '%s';"
;
char
*
sqlCmd
=
NULL
;
...
...
application/klansdk/kk_lan_node_db.h
View file @
a8ec59b6
...
...
@@ -18,7 +18,7 @@ enum{
};
int
kk_lan_db_node_init
(
void
);
int
kk_lan_db_node_insert
(
const
char
*
deviceCode
,
int
channel
,
int
node
,
int
operate_type
);
int
kk_lan_db_node_insert
(
const
char
*
deviceCode
,
int
channel
,
int
node
);
int
kk_lan_db_node_get
(
const
char
*
deviceCode
,
int
channel
);
int
kk_lan_db_node_get_all
(
const
char
*
deviceCode
,
int
*
nodes
);
...
...
@@ -26,7 +26,7 @@ int kk_lan_db_deviceCode_get(int node,char *deviceCode);
int
kk_lan_db_channel_get
(
int
node
,
int
*
channel
);
int
kk_lan_db_get_item_by_node
(
int
node
,
char
*
deviceCode
,
int
*
channel
);
int
kk_lan_db_node_delete
(
char
*
deviceCode
);
int
kk_lan_db_node_delete
(
c
onst
c
har
*
deviceCode
);
int
kk_check_lan_node_exist
(
const
char
*
deviceCode
,
int
channel
);
int
kk_check_lan_node
(
int
nodeId
);
...
...
application/klansdk/kk_lan_queue.c
View file @
a8ec59b6
...
...
@@ -38,7 +38,6 @@ static int _lan_queue_init(LAN_QUEUE_ENUM ix,int max_size)
ctx
->
mutex
=
(
pthread_mutex_t
*
)
malloc
(
sizeof
(
pthread_mutex_t
));
if
(
ctx
->
mutex
==
NULL
)
{
WARNING_PRINT
(
"
\n
malloc queue mutex[%d] failed: - '%s' (%d)
\n
"
,
ix
,
strerror
(
err_num
),
err_num
);
return
-
1
;
}
...
...
@@ -59,7 +58,7 @@ static int _lan_queue_init(LAN_QUEUE_ENUM ix,int max_size)
int
lan_queue_init
(
void
)
{
_lan_queue_init
(
NODE_MAP
,
LAN_QUEUE_SIZE
(
1
));
return
_lan_queue_init
(
NODE_MAP
,
LAN_QUEUE_SIZE
(
1
));
}
void
lan_queue_deinit
(
void
)
{
...
...
application/klansdk/kk_lan_sync.c
View file @
a8ec59b6
...
...
@@ -9,7 +9,7 @@
#include "kk_lan_debug.h"
#include "kk_lan_node_db.h"
#include "kk_lan_new_dev_notify.h"
#include "kk_oldccu_msg.h"
/*******获取同步数据json*******/
static
cJSON
*
kk_get_sync_data
(
cJSON
*
payload
)
...
...
@@ -553,7 +553,7 @@ static int _kk_sync_devices_status_arg_str(kk_map_dev_node_t *node,cJSON *devSta
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
if
((
val
=
val_conver_new2old
(
newccuItem
,
oldccuItem
,
0
))
!=
NULL
){
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
char
indexId
[
4
]
=
{
0
};
char
indexId
[
16
]
=
{
0
};
char
nodeid
[
32
]
=
{
0
};
cJSON
*
epNum
=
cJSON_GetObjectItem
(
newccuItem
,
CHANNEL_STRING
);
cJSON
*
opcode
=
cJSON_GetObjectItem
(
newccuItem
,
OPCODEMAP_STRING
);
...
...
@@ -587,7 +587,7 @@ static int _kk_sync_devices_status_arg_str(kk_map_dev_node_t *node,cJSON *devSta
static
int
_kk_sync_devices_status_arg_obj
(
kk_map_dev_node_t
*
node
,
cJSON
*
devStatusAry
,
int
*
aryIx
)
{
char
indexId
[
4
]
=
{
0
};
char
indexId
[
16
]
=
{
0
};
char
nodeid
[
32
]
=
{
0
};
cJSON
*
arg
=
NULL
;
cJSON
*
dev_status
=
NULL
;
...
...
@@ -805,16 +805,12 @@ int kk_sync_guard_to_sdk(cJSON *root,cJSON *data)
//同步空调网关
typedef
struct
{
char
*
node
;
char
*
dev_name
;
char
*
id
;
char
*
room_id
;
cJSON
*
status
;
}
SYN_CENTRAL_AC_GW
;
/*
cJSON *_kk_sync_central_ac_gw(SYN_CENTRAL_AC_GW *gw)
{
cJSON *item = cJSON_CreateObject();
cJSON *status;
cJSON_AddStringToObject(item, "bind_central_ac_gw_node_id",(gw->node)?gw->node:"");
...
...
@@ -823,31 +819,81 @@ cJSON *_kk_sync_central_ac_gw(SYN_CENTRAL_AC_GW *gw)
cJSON_AddStringToObject(item, "room_id", (gw->room_id)?gw->room_id:"");
cJSON_AddItemToObject(item, "status",gw->status?gw->status:cJSON_CreateNull());
return item;
}
*/
static
int
kk_get_
roomInfo_by_deviceCode
(
cJSON
*
data
,
char
*
pdeviceCode
,
char
*
roomId
)
static
int
kk_get_
ac_indoor_info_by_deviceCode
(
cJSON
*
data
,
char
*
pdeviceCode
,
char
*
roomId
,
char
*
name
,
int
epNum
)
{
cJSON
*
rooms
=
cJSON_GetObjectItem
(
data
,
"rooms"
);
cJSON
*
item
=
rooms
->
child
;
while
(
item
!=
NULL
){
cJSON
*
devices
=
cJSON_GetObjectItem
(
item
,
"devices"
);
if
(
devices
==
NULL
){
return
-
1
;
}
cJSON
*
subitem
=
devices
->
child
;
while
(
subitem
!=
NULL
){
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
subitem
,
"deviceCode"
);
cJSON
*
epObj
=
cJSON_GetObjectItem
(
subitem
,
"epNum"
);
if
(
deviceCode
!=
NULL
&&
!
strcmp
(
deviceCode
->
valuestring
,
pdeviceCode
))
{
cJSON
*
roomIdJ
=
cJSON_GetObjectItem
(
item
,
"roomId"
);
memcpy
(
roomId
,
roomIdJ
->
valuestring
,
strlen
(
roomIdJ
->
valuestring
));
if
(
epObj
!=
NULL
&&
epObj
->
type
==
cJSON_String
){
if
(
atoi
(
epObj
->
valuestring
)
==
epNum
){
cJSON
*
roomIdJ
=
cJSON_GetObjectItem
(
item
,
"roomId"
);
cJSON
*
nameObj
=
cJSON_GetObjectItem
(
subitem
,
"name"
);
if
(
roomId
!=
NULL
){
memcpy
(
roomId
,
roomIdJ
->
valuestring
,
strlen
(
roomIdJ
->
valuestring
));
debug_log
(
LOG_CRITICAL_LEVEL
,
"roomId=%s
\n
"
,
roomId
);
}
if
(
name
!=
NULL
){
memcpy
(
name
,
nameObj
->
valuestring
,
strlen
(
nameObj
->
valuestring
));
}
debug_log
(
LOG_CRITICAL_LEVEL
,
"name=%s
\n
"
,
name
);
return
0
;
}
}
else
{
cJSON
*
roomIdJ
=
cJSON_GetObjectItem
(
item
,
"roomId"
);
cJSON
*
nameObj
=
cJSON_GetObjectItem
(
item
,
"name"
);
if
(
roomId
!=
NULL
){
memcpy
(
roomId
,
roomIdJ
->
valuestring
,
strlen
(
roomIdJ
->
valuestring
));
debug_log
(
LOG_CRITICAL_LEVEL
,
"roomId=%s
\n
"
,
roomId
);
}
if
(
name
!=
NULL
){
memcpy
(
name
,
nameObj
->
valuestring
,
strlen
(
nameObj
->
valuestring
));
}
debug_log
(
LOG_CRITICAL_LEVEL
,
"name=%s
\n
"
,
name
);
return
0
;
}
}
return
0
;
subitem
=
subitem
->
next
;
}
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
item
=
item
->
next
;
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
}
debug_log
(
LOG_CRITICAL_LEVEL
,
"[err]
\n
"
);
return
-
1
;
}
new_dev_item
g_new_item
[
16
]
=
{
0
};
CENTRAL_AC_INDOOR_ITEM
*
g_indoor_item
=
NULL
;
int
g_newgw_count
=
0
;
...
...
@@ -866,7 +912,7 @@ void kk_create_new_central_ac(char *gwDeviceCode,char *deviceCode,char *nodeId)
{
char
gwmac
[
32
]
=
{
0
};
char
submac
[
32
]
=
{
0
};
if
(
g_newgw_count
>
16
){
if
(
g_newgw_count
>
64
){
return
;
}
//printf("------------------CWC------------------------>[%s][%d]\n",__FUNCTION__,__LINE__);
...
...
@@ -881,9 +927,7 @@ void kk_create_new_central_ac(char *gwDeviceCode,char *deviceCode,char *nodeId)
//printf("------------------CWC------------------------>[%s][%d]\n",__FUNCTION__,__LINE__);
return
;
}
int
kk_sync_indoor_status
(
cJSON
*
eps
){
}
char
*
modeMap
[]
=
{
"AUTO"
,
"COLD"
,
...
...
@@ -901,30 +945,53 @@ char *speedMap[] = {
"UNKONWN"
,
"UNKONWN"
,
};
int
kk_send_indoorAir_status
(
cJSON
*
info
)
int
kk_send_indoorAir_status
(
cJSON
*
info
,
const
char
*
deviceCode
)
{
char
epStr
[
4
]
=
{
0
};
char
nodeStr
[
12
]
=
{
0
};
int
node
;
if
(
info
==
NULL
){
return
-
1
;
}
cJSON
*
root
=
cJSON_CreateObject
();
cJSON
*
epNum
=
cJSON_GetObjectItem
(
info
,
"epNum"
);
cJSON_AddStringToObject
(
root
,
"nodeid"
,
epNum
->
valuestring
);
cJSON_AddStringToObject
(
root
,
"opcode"
,
"CENTRAL_AC_INDOOR_UNIT_STATUS"
);
node
=
kk_lan_db_node_get
(
deviceCode
,
atoi
(
epNum
->
valuestring
));
snprintf
(
nodeStr
,
sizeof
(
nodeStr
),
"%d"
,
node
);
cJSON_AddStringToObject
(
root
,
"nodeid"
,
nodeStr
);
cJSON_AddStringToObject
(
root
,
"opcode"
,
"CENTRAL_AC_INDOOR_UNIT_STATUS"
);
cJSON_AddStringToObject
(
root
,
"status"
,
"success"
);
_debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
cJSON
*
arg
=
cJSON_CreateObject
();
_debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
cJSON_AddBoolToObject
(
arg
,
"online"
,
1
);
_debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
cJSON
*
PowerSwitch
=
cJSON_GetObjectItem
(
info
,
"PowerSwitch"
);
_debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
cJSON_AddBoolToObject
(
arg
,
"on"
,
PowerSwitch
->
valueint
);
_debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
cJSON
*
Temperature
=
cJSON_GetObjectItem
(
info
,
"Temperature"
);
_debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
_debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
cJSON_AddNumberToObject
(
arg
,
"settingTemperature"
,
Temperature
->
valuedouble
);
_debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
cJSON
*
CurrentTemperature
=
cJSON_GetObjectItem
(
info
,
"CurrentTemperature"
);
_debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
cJSON_AddNumberToObject
(
arg
,
"roomTemperature"
,
CurrentTemperature
->
valuedouble
);
_debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
cJSON
*
WindSpeed
=
cJSON_GetObjectItem
(
info
,
"WindSpeed"
);
_debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
cJSON_AddStringToObject
(
arg
,
"fanSpeed"
,
speedMap
[
WindSpeed
->
valueint
]);
_debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
cJSON
*
WorkMode
=
cJSON_GetObjectItem
(
info
,
"WorkMode"
);
_debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
cJSON_AddStringToObject
(
arg
,
"runModel"
,
modeMap
[
WorkMode
->
valueint
]);
_debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
cJSON_AddItemToObject
(
root
,
"arg"
,
arg
);
_debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
send_msg_to_module
(
root
);
cJSON_Delete
(
root
);
return
0
;
...
...
@@ -936,11 +1003,12 @@ cJSON *kk_sync_central_ac_to_sdk(cJSON *root,cJSON *data)
int
sub_num
=
0
,
j
=
0
;
int
k
=
0
;
char
nodeid
[
8
]
=
{
0
};
char
ac_gw_nodeid
[
8
]
=
{
0
};
char
roomId
[
32
]
=
{
0
};
char
deviceName
[
256
]
=
{
0
};
char
epStr
[
4
]
=
{
0
};
cJSON
*
central_ac_gws
=
cJSON_CreateArray
();
SYN_CENTRAL_AC_GW
ac
;
//
SYN_CENTRAL_AC_GW ac;
if
(
data
==
NULL
){
return
NULL
;
}
...
...
@@ -961,13 +1029,19 @@ cJSON *kk_sync_central_ac_to_sdk(cJSON *root,cJSON *data)
cJSON
*
productCode
=
cJSON_GetObjectItem
(
subitem
,
"productCode"
);
if
(
productCode
!=
NULL
&&
strcmp
(
productCode
->
valuestring
,
"3062"
)
==
0
){
//空调网关设备
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
subitem
,
"deviceCode"
);
kk_creater_nodeid
(
deviceCode
->
valuestring
,
1
,
nodeid
);
kk_creater_nodeid
(
deviceCode
->
valuestring
,
1
,
ac_gw_nodeid
);
cJSON
*
properties
=
cJSON_GetObjectItem
(
subitem
,
"properties"
);
cJSON
*
indoorItem
=
cJSON_CreateObject
();
kk_get_roomInfo_by_deviceCode
(
data
,
deviceCode
->
valuestring
,
roomId
);
cJSON_AddStringToObject
(
indoorItem
,
"bind_central_ac_gw_node_id"
,
nodeid
);
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
kk_get_ac_indoor_info_by_deviceCode
(
data
,
deviceCode
->
valuestring
,
roomId
,
NULL
,
1
);
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
debug_log
(
LOG_CRITICAL_LEVEL
,
"deviceCode->valuestring=%s"
,
deviceCode
->
valuestring
);
cJSON_AddStringToObject
(
indoorItem
,
"bind_central_ac_gw_node_id"
,
ac_gw_nodeid
);
cJSON_AddStringToObject
(
indoorItem
,
"dev_name"
,
"空调网关"
);
cJSON_AddStringToObject
(
indoorItem
,
"id"
,
nodeid
);
cJSON_AddStringToObject
(
indoorItem
,
"id"
,
ac_gw_
nodeid
);
cJSON_AddStringToObject
(
indoorItem
,
"room_id"
,
roomId
);
cJSON_AddItemToArray
(
central_ac_gws
,
indoorItem
);
...
...
@@ -981,43 +1055,57 @@ cJSON *kk_sync_central_ac_to_sdk(cJSON *root,cJSON *data)
memset
(
g_indoor_item
,
0x0
,
sizeof
(
CENTRAL_AC_INDOOR_ITEM
)
*
epsize
);
g_indoor_count
=
epsize
;
for
(
k
=
0
;
k
<
epsize
;
k
++
){
char
tmpIdx
[
4
]
=
{
0
};
char
tmpIdx
[
16
]
=
{
0
};
cJSON
*
infoItem
=
cJSON_GetArrayItem
(
epsAry
,
k
);
if
(
infoItem
==
NULL
)
continue
;
cJSON
*
epNum
=
cJSON_GetObjectItem
(
infoItem
,
"epNum"
);
memset
(
epStr
,
0x0
,
sizeof
(
epStr
));
sprintf
(
epStr
,
"%d"
,
epNum
->
valueint
);
memcpy
(
g_indoor_item
[
k
].
id
,
epStr
,
strlen
(
epStr
));
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
kk_creater_nodeid
(
deviceCode
->
valuestring
,
k
+
2
,
nodeid
);
kk_get_ac_indoor_info_by_deviceCode
(
data
,
deviceCode
->
valuestring
,
g_indoor_item
[
k
].
room_id
,
g_indoor_item
[
k
].
dev_name
,
k
+
2
);
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
memcpy
(
g_indoor_item
[
k
].
id
,
nodeid
,
strlen
(
nodeid
));
sprintf
(
tmpIdx
,
"%d"
,
k
);
memcpy
(
g_indoor_item
[
k
].
indooruint_addr
,
tmpIdx
,
strlen
(
tmpIdx
));
memcpy
(
g_indoor_item
[
k
].
nodeid
,
nodeid
,
strlen
(
nodeid
));
memcpy
(
g_indoor_item
[
k
].
nodeid
,
ac_gw_nodeid
,
strlen
(
ac_gw_nodeid
));
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
cJSON
*
PowerSwitch
=
cJSON_GetObjectItem
(
infoItem
,
"PowerSwitch"
);
g_indoor_item
[
k
].
ac_gw_status
.
on
=
PowerSwitch
->
valueint
==
1
?
true
:
false
;
g_indoor_item
[
k
].
ac_gw_status
.
online
=
1
;
cJSON
*
Temperature
=
cJSON_GetObjectItem
(
infoItem
,
"Temperature"
);
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
cJSON
*
CurrentTemperature
=
cJSON_GetObjectItem
(
infoItem
,
"CurrentTemperature"
);
g_indoor_item
[
k
].
ac_gw_status
.
settingTemperature
=
Temperature
->
valuedouble
;
g_indoor_item
[
k
].
ac_gw_status
.
roomTemperature
=
CurrentTemperature
->
valuedouble
;
cJSON
*
WindSpeed
=
cJSON_GetObjectItem
(
infoItem
,
"WindSpeed"
);
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
memcpy
(
g_indoor_item
[
k
].
ac_gw_status
.
speed
,
speedMap
[
WindSpeed
->
valueint
],
strlen
(
speedMap
[
WindSpeed
->
valueint
]));
cJSON
*
WorkMode
=
cJSON_GetObjectItem
(
infoItem
,
"WorkMode"
);
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
memcpy
(
g_indoor_item
[
k
].
ac_gw_status
.
mode
,
modeMap
[
WorkMode
->
valueint
],
strlen
(
modeMap
[
WorkMode
->
valueint
]));
}
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
kk_create_new_central_ac
(
gwDeviceCode
->
valuestring
,
deviceCode
->
valuestring
,
nodeid
);
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
}
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
}
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
}
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
cJSON_AddItemToObject
(
root
,
"central_ac_gws"
,
central_ac_gws
);
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
return
root
;
}
//同步空调网关内机
typedef
struct
{
char
*
id
;
char
*
room_id
;
char
*
indoorunit_name
;
char
*
indooruint_addr
;
char
*
central_ac_gw_devid
;
char
id
[
AIR_AC_INDOOR_ID_SIZE
]
;
char
room_id
[
AIR_AC_INDOOR_ROOM_ID_SIZE
]
;
char
indoorunit_name
[
AIR_AC_INDOOR_NAME_SIZE
]
;
char
indooruint_addr
[
AIR_AC_INDOOR_ADDR_SIZE
]
;
char
central_ac_gw_devid
[
AIR_AC_INDOOR_ID_SIZE
]
;
cJSON
*
indoorunit_state
;
}
SYN_CENTRAL_AC_INDOOR
;
cJSON
*
_kk_sync_central_ac_indoorunit_to_sdk
(
SYN_CENTRAL_AC_INDOOR
*
indoorunit
)
...
...
@@ -1038,47 +1126,56 @@ cJSON *_kk_sync_central_ac_indoorunits(int num,SYN_CENTRAL_AC_INDOOR *indoorunit
{
int
i
;
cJSON
*
central_ac_indoorunits
=
cJSON_CreateArray
();
SYN_CENTRAL_AC_
GW
*
i
ndoorunit
=
indoorunits
;
SYN_CENTRAL_AC_
INDOOR
*
pI
ndoorunit
=
indoorunits
;
for
(
i
=
0
;
i
<
num
;
i
++
,
indoorunit
++
)
{
cJSON
*
item
=
_kk_sync_central_ac_indoorunit_to_sdk
(
indoorunit
);
for
(
i
=
0
;
i
<
num
;
i
++
,
pIndoorunit
++
)
{
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark[%d]...
\n
"
,
i
);
cJSON
*
item
=
_kk_sync_central_ac_indoorunit_to_sdk
(
pIndoorunit
);
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
cJSON_AddItemToArray
(
central_ac_indoorunits
,
item
);
}
return
central_ac_indoorunits
;
}
cJSON
*
kk_sync_central_ac_indoorunits_to_sdk
(
cJSON
*
root
,
cJSON
*
data
)
{
int
i
=
0
;
cJSON
*
central_ac_indoorunits
;
central_ac_indoorunits
=
cJSON_CreateArray
();
SYN_CENTRAL_AC_INDOOR
indoorunit
;
indoorunit
.
id
=
malloc
(
20
);
memset
(
indoorunit
.
id
,
0
,
20
);
memcpy
(
indoorunit
.
id
,
"4"
,
sizeof
(
"4"
));
indoorunit
.
room_id
=
malloc
(
20
);
memset
(
indoorunit
.
room_id
,
0
,
20
);
memcpy
(
indoorunit
.
room_id
,
"44"
,
sizeof
(
"44"
));
indoorunit
.
indoorunit_name
=
malloc
(
20
);
memset
(
indoorunit
.
indoorunit_name
,
0
,
20
);
memcpy
(
indoorunit
.
indoorunit_name
,
"444"
,
sizeof
(
"444"
));
indoorunit
.
indooruint_addr
=
malloc
(
20
);
memset
(
indoorunit
.
indooruint_addr
,
0
,
20
);
memcpy
(
indoorunit
.
indooruint_addr
,
"4444"
,
sizeof
(
"4444"
));
indoorunit
.
central_ac_gw_devid
=
malloc
(
20
);
memset
(
indoorunit
.
central_ac_gw_devid
,
0
,
20
);
memcpy
(
indoorunit
.
central_ac_gw_devid
,
"44444"
,
sizeof
(
"44444"
));
SYN_CENTRAL_AC_INDOOR
*
indoorunitAry
=
NULL
;
SYN_CENTRAL_AC_INDOOR
*
pIndoorunit
=
NULL
;
indoorunitAry
=
(
SYN_CENTRAL_AC_INDOOR
*
)
malloc
(
g_indoor_count
*
sizeof
(
SYN_CENTRAL_AC_INDOOR
));
memset
(
indoorunitAry
,
0
,
g_indoor_count
*
sizeof
(
SYN_CENTRAL_AC_INDOOR
));
pIndoorunit
=
indoorunitAry
;
for
(
i
=
0
;
i
<
g_indoor_count
;
i
++
,
pIndoorunit
++
){
snprintf
(
pIndoorunit
->
id
,
AIR_AC_INDOOR_ID_SIZE
,
"%s"
,
g_indoor_item
[
i
].
id
);
snprintf
(
pIndoorunit
->
room_id
,
AIR_AC_INDOOR_ROOM_ID_SIZE
,
"%s"
,
g_indoor_item
[
i
].
room_id
);
snprintf
(
pIndoorunit
->
indoorunit_name
,
AIR_AC_INDOOR_NAME_SIZE
,
"%s"
,
g_indoor_item
[
i
].
dev_name
);
snprintf
(
pIndoorunit
->
central_ac_gw_devid
,
AIR_AC_INDOOR_ID_SIZE
,
"%s"
,
g_indoor_item
[
i
].
nodeid
);
snprintf
(
pIndoorunit
->
indooruint_addr
,
AIR_AC_INDOOR_ADDR_SIZE
,
"%s"
,
g_indoor_item
[
i
].
indooruint_addr
);
cJSON
*
status
=
cJSON_CreateObject
();
cJSON_AddBoolToObject
(
status
,
"online"
,
g_indoor_item
[
i
].
ac_gw_status
.
online
);
cJSON_AddBoolToObject
(
status
,
"on"
,
g_indoor_item
[
i
].
ac_gw_status
.
on
);
cJSON_AddStringToObject
(
status
,
"runModel"
,
g_indoor_item
[
i
].
ac_gw_status
.
mode
);
cJSON_AddStringToObject
(
status
,
"fanSpeed"
,
g_indoor_item
[
i
].
ac_gw_status
.
speed
);
cJSON_AddNumberToObject
(
status
,
"settingTemperature"
,
g_indoor_item
[
i
].
ac_gw_status
.
settingTemperature
);
cJSON_AddNumberToObject
(
status
,
"roomTemperature"
,
g_indoor_item
[
i
].
ac_gw_status
.
roomTemperature
);
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
pIndoorunit
->
indoorunit_state
=
status
;
}
indoorunit
.
indoorunit_state
=
NULL
;
central_ac_indoorunits
=
_kk_sync_central_ac_indoorunits
(
1
,
&
indoorunit
);
central_ac_indoorunits
=
_kk_sync_central_ac_indoorunits
(
g_indoor_count
,
indoorunitAry
);
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark...
\n
"
);
cJSON_AddItemToObject
(
root
,
"central_ac_indoorunits"
,
central_ac_indoorunits
);
return
root
;
...
...
@@ -1182,7 +1279,7 @@ static cJSON * kk_create_floor_obj(SYN_FLOOR *floor)
}
static
int
kk_create_floors
(
int
num
,
SYN_FLOOR
*
floor
)
static
cJSON
*
kk_create_floors
(
int
num
,
SYN_FLOOR
*
floor
)
{
int
i
;
cJSON
*
floors
=
cJSON_CreateArray
();
...
...
@@ -1300,6 +1397,7 @@ int kk_create_syncinfo_to_sdk(cJSON *payload,int push)
kk_sync_central_ac_to_sdk
(
root
,
data
);
kk_sync_central_ac_indoorunits_to_sdk
(
root
,
data
);
...
...
application/klansdk/kk_lan_sync.h
View file @
a8ec59b6
...
...
@@ -4,6 +4,16 @@
#include "cJSON.h"
#define AIR_AC_INDOOR_ID_SIZE 8
#define AIR_AC_INDOOR_ROOM_ID_SIZE 24
#define AIR_AC_INDOOR_NAME_SIZE 32
#define AIR_AC_INDOOR_ADDR_SIZE 8
typedef
struct
{
char
*
floor_id
;
char
*
room_id
;
...
...
@@ -48,7 +58,8 @@ int kk_sync_devices_status_to_sdk(cJSON *root);
int
kk_create_syncinfo_to_sdk
(
cJSON
*
payload
,
int
push
);
int
kk_send_indoorAir_status
(
cJSON
*
info
);
int
kk_send_indoorAir_status
(
cJSON
*
info
,
const
char
*
deviceCode
);
cJSON
*
val_conver_new2old
(
cJSON
*
newccuItem
,
cJSON
*
oldccuItem
,
int
syn_type
);
...
...
application/klansdk/kk_lan_voice_panel.c
View file @
a8ec59b6
...
...
@@ -83,6 +83,7 @@ static void *kk_vp_uart_thread(void *arg)
}
ERROR_PRINT
(
"[%s]thread end...
\n
"
,
__FUNCTION__
);
return
0
;
}
...
...
@@ -118,7 +119,7 @@ char *vp_file_load(const char *path)
fp
=
fopen
(
path
,
"r"
);
if
(
fp
==
NULL
){
printf
(
"open err.
\n
"
);
debug_log
(
LOG_WARNING_LEVEL
,
"[%s]fopen err!
\n
"
,
path
);
return
NULL
;
}
...
...
@@ -175,6 +176,7 @@ static int _vp_config_file_version_load(void)
cJSON_Delete
(
json
);
free
(
pFile
);
return
1
;
}
void
kk_vp_set_updateFlag
(
int
flag
)
...
...
@@ -208,7 +210,7 @@ void kk_vp_set_state_machine(int state)
}
}
void
kk_vp_get_config_file_version
(
int
ver
)
int
kk_vp_get_config_file_version
(
void
)
{
return
vp_mag
.
cfg_info
.
next_ver
;
}
...
...
@@ -341,6 +343,7 @@ void *kk_vp_manage_thread(void *arg)
usleep
(
50
*
1000
);
}
ERROR_PRINT
(
"[%s]thread end...
\n
"
,
__FUNCTION__
);
return
0
;
}
...
...
@@ -375,6 +378,15 @@ void kk_voice_panel_uart_dev_chose(int argc, char* argv[])
debug_log
(
LOG_FOCUS_LEVEL
,
"serialDev=%s
\n
"
,
serialDev
);
}
static
int
kk_vp_cfg_file_dir_create
(
void
){
char
cmd
[
128
]
=
{
0
};
snprintf
(
cmd
,
sizeof
(
cmd
),
"mkdir -p %s"
,
VP_VP_CONFIG_FILE_DIR
);
return
system
(
cmd
);
}
int
kk_voice_panel_init
(
int
argc
,
char
*
argv
[])
{
size_t
s
=
1500
;
...
...
@@ -387,9 +399,13 @@ int kk_voice_panel_init(int argc, char* argv[])
kk_voice_panel_uart_dev_chose
(
argc
,
argv
);
kk_vp_cfg_file_dir_create
();
pthread_attr_setstacksize
(
&
attr
,
s
);
pthread_attr_setdetachstate
(
&
attr
,
PTHREAD_CREATE_DETACHED
);
kk_vp_ac_mutex_init
();
if
(
pthread_mutex_init
(
&
v_mux
,
NULL
)
!=
0
)
{
pthread_attr_destroy
(
&
attr
);
ERROR_PRINT
(
"pthread_mutex_init v_mux fail.
\n
"
);
...
...
@@ -406,13 +422,7 @@ int kk_voice_panel_init(int argc, char* argv[])
ERROR_PRINT
(
"pthread_create kk_voice_panel fail
\n
"
);
return
-
3
;
}
/*if((pthread_create(&tid3, NULL, kk_voice_panel_333, NULL))!= 0 ) {
ERROR_PRINT("pthread_create kk_voice_panel fail\n");
return -4;
}*/
return
0
;
}
...
...
application/klansdk/kk_lan_vp_ctrl.c
View file @
a8ec59b6
...
...
@@ -2,109 +2,213 @@
#include "kk_lan_vp_ctrl.h"
#include "kk_lan_debug.h"
#include "cJSON.h"
#include "kk_voice_panel_cfg.h"
typedef
cJSON
*
(
*
dev_handle_func
)(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
);
typedef
struct
{
const
int
*
pidAry
;
int
num
;
dev_handle_func
func
;
}
DEV_PID_S
;
static
cJSON
*
air_conditioner_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
);
static
cJSON
*
light_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
);
static
cJSON
*
curtain_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
);
static
cJSON
*
outlet_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
);
static
cJSON
*
freshAir_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
);
static
cJSON
*
fanCoilSwitch_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
);
static
const
int
air_conditioner_dev_pid
[]
=
AIR_CONDITIONER_DEV_PID
;
static
const
int
light_dev_pid
[]
=
LIGHT_DEV_PID
;
static
const
int
curtain_dev_pid
[]
=
CURTAIN_DEV_PID
;
static
const
int
outlet_dev_pid
[]
=
OUTLET_DEV_PID
;
static
const
int
freshAir_dev_pid
[]
=
FRESHAIR_DEV_PID
;
static
const
int
fanCoilSwitch_dev_pid
[]
=
FANCOILSWITCH_DEV_PID
;
static
DEV_PID_S
g_dev_pid
[]
=
{
{
light_dev_pid
,
sizeof
(
light_dev_pid
)
/
sizeof
(
int
),
light_dev_handle
},
{
curtain_dev_pid
,
sizeof
(
curtain_dev_pid
)
/
sizeof
(
int
),
curtain_dev_handle
},
{
outlet_dev_pid
,
sizeof
(
outlet_dev_pid
)
/
sizeof
(
int
),
outlet_dev_handle
},
{
freshAir_dev_pid
,
sizeof
(
freshAir_dev_pid
)
/
sizeof
(
int
),
freshAir_dev_handle
},
{
fanCoilSwitch_dev_pid
,
sizeof
(
fanCoilSwitch_dev_pid
)
/
sizeof
(
int
),
fanCoilSwitch_dev_handle
}
};
static
dev_handle_func
dev_pid_dispatch
(
int
pid
)
{
int
i
,
j
;
int
num
=
sizeof
(
g_dev_pid
)
/
sizeof
(
DEV_PID_S
);
DEV_PID_S
*
pDevPid
=
g_dev_pid
;
for
(
i
=
0
;
i
<
num
;
i
++
,
pDevPid
++
)
{
for
(
j
=
0
;
j
<
pDevPid
->
num
;
j
++
)
{
if
(
pid
==
pDevPid
->
pidAry
[
j
]){
return
pDevPid
->
func
;
}
}
}
return
NULL
;
}
//****************************************************************************
cJSON
*
PowerSwitch_msg_build
(
int
ep
,
int
onoff
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
memset
(
epNum
,
0
,
sizeof
(
epNum
));
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
cJSON_AddNumberToObject
(
params
,
"PowerSwitch"
,
onoff
);
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
return
params
;
}
static
cJSON
*
windSpeed_msg_build
(
int
ep
,
int
level
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
memset
(
epNum
,
0
,
sizeof
(
epNum
));
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"WindSpeed"
,
level
);
return
params
;
}
static
cJSON
*
workMode_msg_build
(
int
ep
,
int
mode
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
static
int
is_light_dev
(
int
pid
);
static
cJSON
*
light_dev
(
int
ep
,
int
onoff
);
static
cJSON
*
light_dev_handle
(
int
ep
,
uint8_t
*
arg
);
memset
(
epNum
,
0
,
sizeof
(
epNum
));
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
static
int
is_curtain_dev
(
int
pid
);
static
cJSON
*
curtain_dev_msg_build
(
int
ep
,
int
OperationMode
);
static
cJSON
*
curtain_dev_handle
(
int
ep
,
uint8_t
*
arg
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"WorkMode"
,
mode
);
static
int
is_outlet_dev
(
int
pid
);
static
cJSON
*
outlet_msg_build
(
int
ep
,
int
onoff
);
static
cJSON
*
outlet_dev_handle
(
int
ep
,
uint8_t
*
arg
);
return
params
;
}
typedef
int
(
*
pid_mth_func
)(
int
pid
);
typedef
cJSON
*
(
*
dev_handle
)(
int
ep
,
uint8_t
*
arg
);
static
cJSON
*
temperature_msg_build
(
int
ep
,
int
tmp
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
typedef
struct
{
pid_mth_func
mth
;
dev_handle
handle
;
}
KK_VP_CTRL
;
memset
(
epNum
,
0
,
sizeof
(
epNum
));
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
static
KK_VP_CTRL
vp_ctrl_table
[]
=
{
{
is_light_dev
,
light_dev_handle
},
{
is_curtain_dev
,
curtain_dev_handle
},
{
is_outlet_dev
,
outlet_dev_handle
}
};
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"Temperature"
,
tmp
);
return
params
;
}
static
int
light_dev_pid
[]
=
{
3001
,
3002
,
3003
,
3022
,
3023
,
3024
};
static
int
curtain_dev_pid
[]
=
{
3005
,
3006
,
3007
,
3008
,
3009
,
3010
,
3011
,
3026
,
3027
,
3067
};
static
int
outlet_dev_pid
[]
=
{
3019
,
3020
,
3037
,
3038
};
static
int
is_light_dev
(
int
pid
)
//****************************************************************************
static
cJSON
*
light_msg_build
(
int
ep
,
int
onoff
)
{
int
i
;
for
(
i
=
0
;
i
<
sizeof
(
light_dev_pid
)
/
sizeof
(
int
);
i
++
){
if
(
pid
==
light_dev_pid
[
i
]){
return
1
;
}
}
return
0
;
return
PowerSwitch_msg_build
(
ep
,
onoff
);
}
static
int
is_curtain_dev
(
int
pid
)
static
cJSON
*
freshAir_msg_build
(
int
ep
,
int
onoff
)
{
int
i
;
for
(
i
=
0
;
i
<
sizeof
(
curtain_dev_pid
)
/
sizeof
(
int
);
i
++
){
if
(
pid
==
curtain_dev_pid
[
i
]){
return
1
;
}
}
return
0
;
return
PowerSwitch_msg_build
(
ep
,
onoff
);
}
static
int
is_outlet_dev
(
int
pid
)
//****************************************************************************
static
cJSON
*
air_conditioner_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
)
{
int
i
;
for
(
i
=
0
;
i
<
sizeof
(
outlet_dev_pid
)
/
sizeof
(
int
);
i
++
){
if
(
pid
==
outlet_dev_pid
[
i
]){
return
1
;
uint8_t
skill_type
=
arg
[
0
];
switch
(
skill_type
){
case
VP_CTRL_OPEN
:
//
return
PowerSwitch_msg_build
(
ep
,
1
);
case
VP_CTRL_CLOSE
:
return
PowerSwitch_msg_build
(
ep
,
0
);
case
VP_CTRL_WINDSPEE_SET
:{
if
(
arg
[
1
]
!=
0x20
){
return
NULL
;
}
uint8_t
windspeed
=
arg
[
2
];
debug_log
(
LOG_FOCUS_LEVEL
,
"[VP] set windspeed=%d
\n
"
,
windspeed
);
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_LOW
){
return
windSpeed_msg_build
(
ep
,
2
);
}
else
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_MID
){
return
windSpeed_msg_build
(
ep
,
3
);
}
else
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_HIGH
){
return
windSpeed_msg_build
(
ep
,
4
);
}
break
;
}
}
return
0
;
}
case
VP_CTRL_MODE
:{
if
(
arg
[
1
]
!=
0x20
){
return
NULL
;
}
uint8_t
mode
=
arg
[
2
];
_debug_log
(
LOG_FOCUS_LEVEL
,
"[VP] set mode=%d
\n
"
,
mode
);
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_COLD
){
return
workMode_msg_build
(
ep
,
1
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_HEATING
){
return
workMode_msg_build
(
ep
,
2
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_FAN
){
return
workMode_msg_build
(
ep
,
3
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_DEHUM
){
return
workMode_msg_build
(
ep
,
4
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_AUTO
){
return
workMode_msg_build
(
ep
,
0
);
}
break
;
}
case
VP_CTRL_TMP_SET
:
if
(
arg
[
1
]
!=
0x20
){
return
NULL
;
}
uint8_t
tmp
=
arg
[
2
];
_debug_log
(
LOG_FOCUS_LEVEL
,
"[VP] set tmp=%d
\n
"
,
tmp
);
return
temperature_msg_build
(
ep
,
tmp
);
static
cJSON
*
light_msg_build
(
int
ep
,
int
onoff
)
{
return
PowerSwitch_msg_build
(
ep
,
onoff
)
;
default:
break
;
}
return
NULL
;
}
static
cJSON
*
light_dev_handle
(
int
ep
,
uint8_t
*
arg
)
static
cJSON
*
light_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
)
{
uint8_t
skill_type
=
arg
[
0
];
printf
(
"[%s][%d]skill_type=%d,ep=%d
\n
"
,
__FUNCTION__
,
__LINE__
,
skill_type
,
ep
);
switch
(
skill_type
){
case
VP_CTRL_OPEN
:
//
return
light_msg_build
(
ep
,
1
);
...
...
@@ -134,10 +238,10 @@ static cJSON *curtain_dev_msg_build(int ep,int OperationMode)
return
params
;
}
static
cJSON
*
curtain_dev_handle
(
int
ep
,
uint8_t
*
arg
)
static
cJSON
*
curtain_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
)
{
uint8_t
skill_type
=
arg
[
0
];
printf
(
"[%s][%d]skill_type=%d,ep=%d
\n
"
,
__FUNCTION__
,
__LINE__
,
skill_type
,
ep
);
debug_log
(
LOG_FOCUS_LEVEL
,
"skill_type=%d,ep=%d
\n
"
,
skill_type
,
ep
);
switch
(
skill_type
){
case
VP_CTRL_OPEN
:
//
return
curtain_dev_msg_build
(
ep
,
1
);
...
...
@@ -157,10 +261,10 @@ static cJSON *outlet_msg_build(int ep,int onoff)
}
static
cJSON
*
outlet_dev_handle
(
int
ep
,
uint8_t
*
arg
)
static
cJSON
*
outlet_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
)
{
uint8_t
skill_type
=
arg
[
0
];
printf
(
"[%s][%d]skill_type=%d,ep=%d
\n
"
,
__FUNCTION__
,
__LINE__
,
skill_type
,
ep
);
debug_log
(
LOG_FOCUS_LEVEL
,
"skill_type=%d,ep=%d
\n
"
,
skill_type
,
ep
);
switch
(
skill_type
){
case
VP_CTRL_OPEN
:
//
return
outlet_msg_build
(
ep
,
1
);
...
...
@@ -172,20 +276,217 @@ static cJSON *outlet_dev_handle(int ep,uint8_t *arg)
}
void
kk_lan_vp_control
(
uint8_t
num
,
uint32_t
nodeIdAry
[],
uint8_t
*
arg
)
static
cJSON
*
freshAir_windspeed_msg_build
(
int
ep
,
int
level
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
memset
(
epNum
,
0
,
sizeof
(
epNum
));
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"WindSpeed"
,
level
);
return
params
;
}
static
cJSON
*
freshAir_workMode_msg_build
(
int
ep
,
int
mode
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
memset
(
epNum
,
0
,
sizeof
(
epNum
));
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"WorkMode"
,
mode
);
return
params
;
}
static
cJSON
*
freshAir_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
)
{
uint8_t
skill_type
=
arg
[
0
];
if
(
arg_len
!=
3
){
debug_log
(
LOG_ERROR_LEVEL
,
"[err] arg_len=%d
\n
"
,
arg_len
);
return
NULL
;
}
switch
(
skill_type
){
case
VP_CTRL_OPEN
:
//
return
PowerSwitch_msg_build
(
ep
,
1
);
case
VP_CTRL_CLOSE
:
return
PowerSwitch_msg_build
(
ep
,
0
);
case
VP_CTRL_WINDSPEE_SET
:{
if
(
arg
[
1
]
!=
0x20
){
return
NULL
;
}
uint8_t
windspeed
=
arg
[
2
];
_debug_log
(
LOG_FOCUS_LEVEL
,
"[VP] set windspeed=%d
\n
"
,
windspeed
);
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_LOW
){
return
freshAir_windspeed_msg_build
(
ep
,
1
);
}
else
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_MID
){
return
freshAir_windspeed_msg_build
(
ep
,
2
);
}
else
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_HIGH
){
return
freshAir_windspeed_msg_build
(
ep
,
3
);
}
break
;
}
case
VP_CTRL_MODE
:{
if
(
arg
[
1
]
!=
0x20
){
return
NULL
;
}
uint8_t
mode
=
arg
[
2
];
_debug_log
(
LOG_FOCUS_LEVEL
,
"[VP] set mode=%d
\n
"
,
mode
);
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_AUTO
){
return
freshAir_workMode_msg_build
(
ep
,
0
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_MANUAL
){
return
freshAir_workMode_msg_build
(
ep
,
1
);
}
break
;
}
default:
break
;
}
return
NULL
;
}
static
cJSON
*
fanCoilSwitch_windspeed_msg_build
(
int
ep
,
int
level
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
memset
(
epNum
,
0
,
sizeof
(
epNum
));
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"WindSpeed"
,
level
);
return
params
;
}
static
cJSON
*
fanCoilSwitch_workMode_msg_build
(
int
ep
,
int
mode
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
memset
(
epNum
,
0
,
sizeof
(
epNum
));
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"WorkMode"
,
mode
);
return
params
;
}
static
cJSON
*
fanCoilSwitch_Temperature_msg_build
(
int
ep
,
int
tmp
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
memset
(
epNum
,
0
,
sizeof
(
epNum
));
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"Temperature"
,
tmp
);
return
params
;
}
static
cJSON
*
fanCoilSwitch_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
)
{
uint8_t
skill_type
=
arg
[
0
];
switch
(
skill_type
){
case
VP_CTRL_OPEN
:
//
return
PowerSwitch_msg_build
(
ep
,
1
);
case
VP_CTRL_CLOSE
:
return
PowerSwitch_msg_build
(
ep
,
0
);
case
VP_CTRL_WINDSPEE_SET
:{
if
(
arg
[
1
]
!=
0x20
){
return
NULL
;
}
uint8_t
windspeed
=
arg
[
2
];
debug_log
(
LOG_FOCUS_LEVEL
,
"[VP] set windspeed=%d
\n
"
,
windspeed
);
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_LOW
){
return
fanCoilSwitch_windspeed_msg_build
(
ep
,
2
);
}
else
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_MID
){
return
fanCoilSwitch_windspeed_msg_build
(
ep
,
3
);
}
else
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_HIGH
){
return
fanCoilSwitch_windspeed_msg_build
(
ep
,
4
);
}
else
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_AUTO
){
return
fanCoilSwitch_windspeed_msg_build
(
ep
,
0
);
}
break
;
}
case
VP_CTRL_MODE
:{
if
(
arg
[
1
]
!=
0x20
){
return
NULL
;
}
uint8_t
mode
=
arg
[
2
];
_debug_log
(
LOG_FOCUS_LEVEL
,
"[VP] set mode=%d
\n
"
,
mode
);
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_COLD
){
return
freshAir_workMode_msg_build
(
ep
,
1
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_HEATING
){
return
freshAir_workMode_msg_build
(
ep
,
2
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_FAN
){
return
freshAir_workMode_msg_build
(
ep
,
3
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_DEHUM
){
return
freshAir_workMode_msg_build
(
ep
,
4
);
}
break
;
}
case
VP_CTRL_TMP_SET
:
if
(
arg
[
1
]
!=
0x20
){
return
NULL
;
}
uint8_t
tmp
=
arg
[
2
];
_debug_log
(
LOG_FOCUS_LEVEL
,
"[VP] set tmp=%d
\n
"
,
tmp
);
return
fanCoilSwitch_Temperature_msg_build
(
ep
,
tmp
);
default:
break
;
}
return
NULL
;
}
int
kk_lan_vp_control
(
uint8_t
num
,
uint32_t
nodeIdAry
[],
uint8_t
*
arg
,
uint8_t
arg_len
)
{
uint8_t
i
,
j
;
uint8_t
err
=
0
;
uint8_t
skill_type
;
int
ep
;
int
pid
=
0
;
dev_handle_func
func
;
char
productCode
[
32
]
=
{
0
};
char
deviceCode
[
32
]
=
{
0
};
char
productCode
[
PRODUCT_CODE_LEN
]
=
{
0
};
char
deviceCode
[
DEVICE_CODE_LEN
]
=
{
0
};
cJSON
*
msg
=
NULL
;
cJSON
*
params
=
NULL
;
kk_map_dev_node_t
*
node
=
NULL
;
KK_VP_CTRL
*
pVpCtr
=
vp_ctrl_table
;
if
(
arg_len
<=
1
){
debug_log
(
LOG_ERROR_LEVEL
,
"[err].
\n
"
);
return
1
;
}
skill_type
=
arg
[
0
];
for
(
i
=
0
;
i
<
num
;
i
++
){
memset
(
deviceCode
,
0
,
sizeof
(
deviceCode
));
...
...
@@ -197,30 +498,33 @@ void kk_lan_vp_control(uint8_t num,uint32_t nodeIdAry[],uint8_t *arg)
continue
;
}
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
snprintf
(
productCode
,
sizeof
(
productCode
),
"%s"
,
node
->
productCode
);
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
pid
=
atoi
(
productCode
);
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
params
=
NULL
;
for
(
j
=
0
;
j
<
sizeof
(
vp_ctrl_table
)
/
sizeof
(
KK_VP_CTRL
);
j
++
,
pVpCtr
++
){
if
(
pVpCtr
->
mth
!=
NULL
&&
pVpCtr
->
handle
!=
NULL
){
if
(
pVpCtr
->
mth
(
pid
)){
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
params
=
pVpCtr
->
handle
(
ep
,
arg
);
break
;
}
if
(
is_ac_gw_pid
(
pid
)
!=
0
){
debug_log
(
LOG_FOCUS_LEVEL
,
"air conditioner,pid=%d
\n
"
,
pid
);
params
=
air_conditioner_dev_handle
(
ep
,
arg
,
arg_len
);
}
else
{
if
((
func
=
dev_pid_dispatch
(
pid
))
!=
NULL
){
debug_log
(
LOG_FOCUS_LEVEL
,
"skill_type=%02x,ep=%d
\n
"
,
skill_type
,
ep
);
params
=
func
(
ep
,
arg
,
arg_len
);
}
}
if
(
params
!=
NULL
){
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
msg
=
property_set
(
productCode
,
deviceCode
,
"*"
,
"*"
,
params
);
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
kk_ipc_send_json
(
msg
);
}
else
{
err
=
1
;
break
;
}
}
return
err
;
}
...
...
application/klansdk/kk_lan_vp_ctrl.h
View file @
a8ec59b6
...
...
@@ -44,7 +44,60 @@
void
kk_lan_vp_control
(
uint8_t
num
,
uint32_t
nodeIdAry
[],
uint8_t
*
arg
);
//SKILL TYPE(0x12)----------------------------------------->WINDSPEED
#define VP_SKILLTYPE_12_WINDSPEED_LOW 0x01
#define VP_SKILLTYPE_12_WINDSPEED_MID 0x02
#define VP_SKILLTYPE_12_WINDSPEED_HIGH 0x03
#define VP_SKILLTYPE_12_WINDSPEED_AUTO 0x04
//SKILL TYPE(0X1C)----------------------------------------->WORKMODE
#define VP_SKILLTYPE_1C_WORKMODE_AUTO 0x01
#define VP_SKILLTYPE_1C_WORKMODE_MANUAL 0x02
#define VP_SKILLTYPE_1C_WORKMODE_COLD 0x03
#define VP_SKILLTYPE_1C_WORKMODE_HEATING 0x04
#define VP_SKILLTYPE_1C_WORKMODE_ENERGY 0x05
#define VP_SKILLTYPE_1C_WORKMODE_COMFORT 0x06
#define VP_SKILLTYPE_1C_WORKMODE_FAN 0x07
#define VP_SKILLTYPE_1C_WORKMODE_DEHUM 0x08
#define AIR_CONDITIONER_DEV_PID {\
3062\
}
//DEVICE PID DEFINE
//3001,3002,3003,3022,3023,3024
#define LIGHT_DEV_PID {\
3024\
}
//3005,3006,3007,3008,3009,3010,3011,3026,3027,3067
#define CURTAIN_DEV_PID {\
3027\
}
//3019,3020,3037,3038
#define OUTLET_DEV_PID {\
3019,3020,3037,3038\
}
#define FRESHAIR_DEV_PID {\
3032\
}
#define FANCOILSWITCH_DEV_PID {\
3034\
}
int
kk_lan_vp_control
(
uint8_t
num
,
uint32_t
nodeIdAry
[],
uint8_t
*
arg
,
uint8_t
arg_len
);
...
...
application/klansdk/kk_login_handle.c
View file @
a8ec59b6
...
...
@@ -52,15 +52,18 @@ int kk_send_data_to_sdk(char *buf)
INFO_PRINT
(
"tmpBuf:%s
\n
"
,
tmpBuf
);
for
(
i
=
0
;
i
<
LISTEN_MAX
;
i
++
){
tcp_data_mutex_lock
();
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
if
(
s_ConnInfo
[
i
].
socketfd
!=
-
1
){
send
(
s_ConnInfo
[
i
].
socketfd
,
tmpBuf
,
strlen
(
tmpBuf
),
0
);
}
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
tcp_data_mutex_unlock
();
}
free
(
tmpBuf
);
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
return
0
;
}
static
int
_kk_handle_data
(
char
*
buf
,
int
sockfd
){
...
...
@@ -83,6 +86,7 @@ static int _kk_handle_data(char *buf,int sockfd){
kk_data_handle
(
json
,
sockfd
);
cJSON_Delete
(
json
);
}
return
0
;
}
static
void
PrintMesg
(
int
i
,
char
buf
[])
...
...
application/klansdk/kk_newccu_msg.c
View file @
a8ec59b6
...
...
@@ -11,6 +11,7 @@
#include "kk_newccu_msg.h"
#include "kk_product.h"
#include "kk_lan_node_db.h"
static
pthread_mutex_t
*
mutex
=
NULL
;
...
...
@@ -83,6 +84,8 @@ cJSON * property_report(const char *productCode,const char *deviceCode,const cha
}
extern
int
kk_lan_get_ccuid
(
_OU_
char
*
device_code
);
cJSON
*
scene_payload_build
(
const
char
*
method
,
const
char
*
msgId
,
cJSON
*
params
)
{
char
ccuid
[
33
]
=
{
0
};
...
...
@@ -141,7 +144,7 @@ int kk_ipc_send_json(cJSON *root)
}
msg
=
cJSON_Print
(
root
);
printf
(
"[lan->midware]json:
\n
%s
\n
"
,
msg
);
debug_log
(
LOG_NORMAL_LEVEL
,
"[lan->midware]json:
\n
%s
\n
"
,
msg
);
cJSON_Minify
(
msg
);
pthread_mutex_lock
(
mutex
);
...
...
application/klansdk/kk_oldccu_msg.c
View file @
a8ec59b6
...
...
@@ -13,10 +13,9 @@
#include "kk_lan_ctrl.h"
#include "kk_data_mng.h"
#include "kk_oldccu_msg.h"
#include "kk_lan_sync.h"
#include "kk_data_mng.h"
#include "kk_data_handle.h"
cJSON
*
old_ccu_msg_build_json
(
const
char
*
nodeid
,
const
char
*
opcode
,
const
char
*
status
,
cJSON
*
arg
)
{
...
...
@@ -382,7 +381,7 @@ static int kk_lan_property_convert(const char *deviceCode,kk_map_dev_node_t *dev
static
int
attr_indoorAir_report
(
cJSON
*
params
)
static
int
attr_indoorAir_report
(
cJSON
*
params
,
const
char
*
deviceCode
)
{
int
k
=
0
;
if
(
params
==
NULL
){
...
...
@@ -390,14 +389,18 @@ static int attr_indoorAir_report(cJSON *params)
}
cJSON
*
epsAry
=
cJSON_GetObjectItem
(
params
,
"eps"
);
if
(
epsAry
==
NULL
){
kk_send_indoorAir_status
(
params
,
deviceCode
);
return
-
1
;
}
int
epsize
=
cJSON_GetArraySize
(
epsAry
);
for
(
k
=
0
;
k
<
epsize
;
k
++
){
char
tmpIdx
[
4
]
=
{
0
};
cJSON
*
infoItem
=
cJSON_GetArrayItem
(
epsAry
,
k
);
if
(
infoItem
==
NULL
)
continue
;
kk_send_indoorAir_status
(
infoItem
);
}
else
{
int
epsize
=
cJSON_GetArraySize
(
epsAry
);
for
(
k
=
0
;
k
<
epsize
;
k
++
){
char
tmpIdx
[
4
]
=
{
0
};
cJSON
*
infoItem
=
cJSON_GetArrayItem
(
epsAry
,
k
);
if
(
infoItem
==
NULL
)
continue
;
kk_send_indoorAir_status
(
infoItem
,
deviceCode
);
}
}
return
0
;
}
...
...
@@ -413,8 +416,11 @@ int kk_lan_property_post_deal(const char *deviceCode,cJSON *payload)
params
=
cJSON_GetObjectItem
(
payload
,
"params"
);
if
(
strcmp
(
dev
->
productCode
,
"3062"
)
==
0
){
attr_indoorAir_report
(
params
);
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
attr_indoorAir_report
(
params
,
deviceCode
);
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
}
else
{
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
return
kk_lan_property_convert
(
deviceCode
,
dev
,
params
);
}
}
else
{
...
...
application/klansdk/kk_oldccu_msg.h
View file @
a8ec59b6
...
...
@@ -25,6 +25,10 @@ int kk_lan_device_delete_notify(cJSON *payload);
cJSON
*
_kk_sync_devicestatus_arg_build
(
kk_map_dev_node_t
*
node
);
int
kk_send_indoorAir_status
(
cJSON
*
info
,
const
char
*
deviceCode
);
#endif
...
...
application/klansdk/kk_voice_panel_cfg.c
View file @
a8ec59b6
...
...
@@ -9,6 +9,10 @@
#include "kk_voice_panel_cfg.h"
#include "kk_ccu_msg.h"
#include "kk_lan_node_db.h"
#include "kk_voice_panel_handle.h"
static
_OUT
int
node_id_check
(
_IN
cJSON
*
zbDevsAry
,
_IN
const
char
*
id
);
...
...
@@ -20,18 +24,12 @@ _OUT cJSON *gws_ary_build(_IN int num,_IN VP_GW_ITEM list[]);
static
pthread_mutex_t
*
mutex
;
int
kk_vp_cfg_init
(
void
)
void
kk_vp_ac_mutex_init
(
void
)
{
int
err
=
0
;
mutex
=
(
pthread_mutex_t
*
)
malloc
(
sizeof
(
pthread_mutex_t
));
if
(
0
!=
(
err
=
pthread_mutex_init
(
mutex
,
NULL
)
))
{
if
(
0
!=
pthread_mutex_init
(
mutex
,
NULL
))
{
free
(
mutex
);
}
pthread_mutex_init
(
&
mutex
,
NULL
);
return
err
;
}
static
_OUT
cJSON
*
zigbee_devices_item_build
(
_IN
VP_ZB_DEV_ITEM
*
item
);
...
...
@@ -224,18 +222,19 @@ static _OUT cJSON *kk_vp_sync_scences(_IN cJSON *data)
static
int
kk_vp_get_device_name
(
_IN
cJSON
*
devices
,
_IN
const
char
*
epNum
,
_IN
const
char
*
deviceCode
,
_IN
int
size
,
_OUT
char
*
buf
)
static
int
kk_vp_get_device_name
(
_IN
cJSON
*
devices
,
_IN
const
char
*
epNum
,
_IN
const
char
*
deviceCode
,
_IN
int
multi
,
_IN
int
size
,
_OUT
char
*
buf
)
{
int
i
=
0
,
devNum
=
0
;
cJSON
*
name
=
NULL
;
cJSON
*
epNumObj
=
NULL
;
cJSON
*
deviceItem
=
NULL
,
*
devCodeObj
=
NULL
;
devNum
=
cJSON_GetArraySize
(
devices
);
//
printf("[%s][%d]devNum=%d\n",__FUNCTION__,__LINE__,devNum);
printf
(
"[%s][%d]devNum=%d
\n
"
,
__FUNCTION__
,
__LINE__
,
devNum
);
for
(
i
=
0
;
i
<
devNum
;
i
++
){
deviceItem
=
cJSON_GetArrayItem
(
devices
,
i
);
if
(
deviceItem
->
type
!=
cJSON_Object
){
//
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
continue
;
}
...
...
@@ -243,31 +242,45 @@ static int kk_vp_get_device_name(_IN cJSON *devices,_IN const char*epNum,_IN con
devCodeObj
=
cJSON_GetObjectItem
(
deviceItem
,
"deviceCode"
);
if
(
devCodeObj
==
NULL
||
devCodeObj
->
type
!=
cJSON_String
){
//
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
continue
;
}
//
printf("[%s][%d]%d,%d,%s,%s\n",__FUNCTION__,__LINE__,strlen(devCodeObj->valuestring),strlen(deviceCode),devCodeObj->valuestring,deviceCode);
printf
(
"[%s][%d]%d,%d,%s,%s
\n
"
,
__FUNCTION__
,
__LINE__
,
strlen
(
devCodeObj
->
valuestring
),
strlen
(
deviceCode
),
devCodeObj
->
valuestring
,
deviceCode
);
if
((
strlen
(
devCodeObj
->
valuestring
)
==
strlen
(
deviceCode
))
&&
!
strcmp
(
devCodeObj
->
valuestring
,
deviceCode
)){
//
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
if
((
name
=
cJSON_GetObjectItem
(
deviceItem
,
"name"
))
!=
NULL
&&
name
->
type
==
cJSON_String
){
//printf("[%s][%d]name=%s\n",__FUNCTION__,__LINE__,name->valuestring);
snprintf
(
buf
,
size
,
"%s"
,
name
->
valuestring
);
return
1
;
printf
(
"[%s][%d]name=%s
\n
"
,
__FUNCTION__
,
__LINE__
,
name
->
valuestring
);
if
(
multi
!=
0
){
if
((
epNumObj
=
cJSON_GetObjectItem
(
deviceItem
,
"epNum"
))
!=
NULL
&&
epNumObj
->
type
==
cJSON_String
&&
!
strcmp
(
epNumObj
->
valuestring
,
epNum
)){
snprintf
(
buf
,
size
,
"%s"
,
name
->
valuestring
);
return
1
;
}
}
else
{
if
((
epNumObj
=
cJSON_GetObjectItem
(
deviceItem
,
"epNum"
))
!=
NULL
&&
epNumObj
->
type
==
cJSON_String
&&
!
strcmp
(
epNumObj
->
valuestring
,
"1"
)){
snprintf
(
buf
,
size
,
"%s"
,
name
->
valuestring
);
return
1
;
}
return
1
;
}
}
}
}
//
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
return
0
;
}
static
int
kk_vp_get_device_info
(
_IN
cJSON
*
rooms
,
_IN
VP_ZB_DEV_ITEM
*
pDevs
)
static
int
kk_vp_get_device_info
(
_IN
cJSON
*
rooms
,
_IN
VP_ZB_DEV_ITEM
*
pDevs
,
_IN
int
multi
)
{
cJSON
*
roomItem
=
NULL
;
cJSON
*
roomId
=
NULL
,
*
devices
=
NULL
;
...
...
@@ -292,9 +305,10 @@ static int kk_vp_get_device_info(_IN cJSON *rooms,_IN VP_ZB_DEV_ITEM *pDevs)
continue
;
}
isFind
=
kk_vp_get_device_name
(
devices
,
pDevs
->
ch
,
pDevs
->
mac
,
sizeof
(
pDevs
->
name
),
pDevs
->
name
);
isFind
=
kk_vp_get_device_name
(
devices
,
pDevs
->
ch
,
pDevs
->
mac
,
multi
,
sizeof
(
pDevs
->
name
),
pDevs
->
name
);
if
(
isFind
!=
0
){
debug_log
(
LOG_CRITICAL_LEVEL
,
"roomId->valuestring=%s
\n
"
,
roomId
->
valuestring
);
snprintf
(
pDevs
->
room
,
sizeof
(
pDevs
->
room
),
"%s"
,
roomId
->
valuestring
);
//printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return
isFind
;
...
...
@@ -369,20 +383,29 @@ static int kk_vp_sync_device_multi_eps(_IN cJSON *zbDevsAry,_IN cJSON *dev,_IN c
nodeId
=
kk_lan_db_node_get
(
pDevs
->
mac
,
atoi
(
pDevs
->
ch
));
snprintf
(
pDevs
->
nodeId
,
sizeof
(
pDevs
->
nodeId
)
-
1
,
"%d"
,
nodeId
);
if
(
kk_map_dev_search_by_deviceCode
(
pDevs
->
mac
,
&
node
)
!=
0
){
if
(
kk_map_dev_search_by_deviceCode
(
pDevs
->
mac
,
&
node
)
==
0
){
snprintf
(
pDevs
->
operateType
,
sizeof
(
pDevs
->
operateType
)
-
1
,
"%s"
,
node
->
opearteType
);
}
else
{
snprintf
(
pDevs
->
operateType
,
sizeof
(
pDevs
->
operateType
)
-
1
,
"%s"
,
"1"
);
if
(
is_ac_gw_pid
(
atoi
(
pDevs
->
pid
))
!=
0
){
snprintf
(
pDevs
->
operateType
,
sizeof
(
pDevs
->
operateType
)
-
1
,
"%s"
,
"12008"
);
}
else
{
snprintf
(
pDevs
->
operateType
,
sizeof
(
pDevs
->
operateType
)
-
1
,
"%s"
,
"1"
);
}
}
printf
(
"pDevs->mac=%s,pDevs->ch=%s,pDevs->nodeId=%s
\n
"
,
pDevs
->
mac
,
pDevs
->
ch
,
pDevs
->
nodeId
);
if
(
kk_vp_get_device_info
(
rooms
,
pDevs
)
!=
0
){
if
((
zbDevObj
=
zigbee_devices_item_build
(
pDevs
))
!=
NULL
){
cJSON_AddItemToArray
(
zbDevsAry
,
zbDevObj
);
isFind
=
1
;
if
(
kk_vp_get_device_info
(
rooms
,
pDevs
,
1
)
!=
0
){
if
(
node_id_check
(
zbDevsAry
,
pDevs
->
nodeId
)
==
0
){
if
((
zbDevObj
=
zigbee_devices_item_build
(
pDevs
))
!=
NULL
){
cJSON_AddItemToArray
(
zbDevsAry
,
zbDevObj
);
isFind
=
1
;
}
}
}
}
...
...
@@ -439,11 +462,15 @@ static int kk_vp_sync_device_single_ep(_IN cJSON *zbDevsAry,_IN cJSON *dev,_IN c
if
(
kk_map_dev_search_by_deviceCode
(
pDevs
->
mac
,
&
node
)
!=
0
){
snprintf
(
pDevs
->
operateType
,
sizeof
(
pDevs
->
operateType
)
-
1
,
"%s"
,
node
->
opearteType
);
}
else
{
snprintf
(
pDevs
->
operateType
,
sizeof
(
pDevs
->
operateType
)
-
1
,
"%s"
,
"1"
);
if
(
is_ac_gw_pid
(
atoi
(
pDevs
->
pid
))
!=
0
){
snprintf
(
pDevs
->
operateType
,
sizeof
(
pDevs
->
operateType
)
-
1
,
"%s"
,
"12008"
);
}
else
{
snprintf
(
pDevs
->
operateType
,
sizeof
(
pDevs
->
operateType
)
-
1
,
"%s"
,
"1"
);
}
}
if
(
kk_vp_get_device_info
(
rooms
,
pDevs
)
!=
0
){
if
(
kk_vp_get_device_info
(
rooms
,
pDevs
,
0
)
!=
0
){
//printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if
((
zbDevObj
=
zigbee_devices_item_build
(
pDevs
))
!=
NULL
){
cJSON_AddItemToArray
(
zbDevsAry
,
zbDevObj
);
...
...
@@ -459,9 +486,92 @@ static int kk_vp_sync_device_single_ep(_IN cJSON *zbDevsAry,_IN cJSON *dev,_IN c
}
#define VP_AC_GW_MAX_DEVICE_NUMBER 5
#define VP_AC_GW_INDOOR_MAX_DEVICE_NUMBER 16
static
const
int
ac_gw_pid
[]
=
{
3062
};
typedef
struct
{
int
insert
;
char
mac
[
17
];
}
AC_GW_TABLE_S
;
static
AC_GW_TABLE_S
ac_gw_mac
[
VP_AC_GW_MAX_DEVICE_NUMBER
];
static
void
ac_gw_table_init
(
void
)
{
memset
(
ac_gw_mac
,
0
,
sizeof
(
ac_gw_mac
));
}
static
int
ac_gw_table_insert
(
const
char
*
mac
)
{
int
i
;
for
(
i
=
0
;
i
<
VP_AC_GW_MAX_DEVICE_NUMBER
;
i
++
){
if
(
ac_gw_mac
[
i
].
insert
==
0
){
snprintf
(
ac_gw_mac
[
i
].
mac
,
17
,
"%s"
,
mac
);
ac_gw_mac
[
i
].
insert
=
1
;
debug_log
(
LOG_DEBUG_LEVEL
,
"[insert suc] index=%d,mac=%s
\n
"
,
i
,
ac_gw_mac
[
i
].
mac
);
return
0
;
}
}
debug_log
(
LOG_DEBUG_LEVEL
,
"[insert fail] no space!mac=%s
\n
"
,
ac_gw_mac
[
i
].
mac
);
return
-
1
;
}
static
int
ac_gw_table_find
(
const
char
*
mac
)
{
int
i
;
if
(
mac
==
NULL
){
return
0
;
}
for
(
i
=
0
;
i
<
VP_AC_GW_MAX_DEVICE_NUMBER
;
i
++
){
if
(
ac_gw_mac
[
i
].
insert
!=
0
){
if
(
!
strcmp
(
mac
,
ac_gw_mac
[
i
].
mac
)){
return
1
;
}
}
}
return
0
;
}
static
int
ac_gw_table_handle
(
cJSON
*
productCode
,
cJSON
*
mac
)
{
int
i
;
int
pid
=
0
;
if
(
productCode
==
NULL
||
mac
==
NULL
||
productCode
->
type
!=
cJSON_String
||
mac
->
type
!=
cJSON_String
){
return
0
;
}
pid
=
atoi
(
productCode
->
valuestring
);
for
(
i
=
0
;
i
<
sizeof
(
ac_gw_pid
)
/
sizeof
(
int
);
i
++
){
if
(
pid
==
ac_gw_pid
[
i
]){
ac_gw_table_insert
(
mac
->
valuestring
);
return
1
;
}
}
return
0
;
}
int
is_ac_gw_pid
(
int
pid
)
{
int
i
;
for
(
i
=
0
;
i
<
sizeof
(
ac_gw_pid
)
/
sizeof
(
int
);
i
++
){
if
(
pid
==
ac_gw_pid
[
i
]){
return
1
;
}
}
return
0
;
}
static
_OUT
cJSON
*
kk_vp_sync_device
(
_IN
cJSON
*
data
)
{
int
i
,
j
;
int
isAcGw
=
0
;
cJSON
*
zbDevsAry
=
NULL
;
...
...
@@ -477,6 +587,9 @@ static _OUT cJSON *kk_vp_sync_device(_IN cJSON *data)
cJSON
*
properties
=
NULL
;
cJSON
*
eps
=
NULL
;
cJSON
*
productCode
=
NULL
;
cJSON
*
mac
=
NULL
;
if
((
zbDevsAry
=
cJSON_CreateArray
())
==
NULL
){
printf
(
"[cJSON_CreateArray err]zbDevsAry...
\n
"
);
...
...
@@ -511,33 +624,57 @@ static _OUT cJSON *kk_vp_sync_device(_IN cJSON *data)
for
(
j
=
0
;
j
<
subDevAryNum
;
j
++
){
if
((
dev
=
cJSON_GetArrayItem
(
subDevAry
,
j
))
==
NULL
||
dev
->
type
!=
cJSON_Object
){
printf
(
"[prase fail]dev...
\n
"
);
continue
;
}
if
((
properties
=
cJSON_GetObjectItem
(
dev
,
"properties"
))
==
NULL
||
properties
->
type
!=
cJSON_Object
){
printf
(
"[prase fail]properties...
\n
"
);
continue
;
}
productCode
=
cJSON_GetObjectItem
(
dev
,
"productCode"
);
mac
=
cJSON_GetObjectItem
(
dev
,
"mac"
);
eps
=
cJSON_GetObjectItem
(
properties
,
"eps"
);
roomsAry
=
cJSON_GetObjectItem
(
data
,
ROOMS_STR
);
if
(
roomsAry
==
NULL
||
roomsAry
->
type
!=
cJSON_Array
){
printf
(
"[prase fail]roomsAry...
\n
"
);
continue
;
}
pthread_mutex_lock
(
mutex
);
isAcGw
=
ac_gw_table_handle
(
productCode
,
mac
);
pthread_mutex_unlock
(
mutex
);
if
(
eps
==
NULL
){
//printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if
(
isAcGw
!=
0
){
roomsAry
=
cJSON_GetObjectItem
(
data
,
ROOMS_STR
);
if
(
roomsAry
==
NULL
||
roomsAry
->
type
!=
cJSON_Array
){
printf
(
"[prase fail]roomsAry...
\n
"
);
continue
;
}
debug_log
(
LOG_CRITICAL_LEVEL
,
"~~~~~~~~~~~~~~~~~~~
\n
"
);
kk_vp_sync_device_single_ep
(
zbDevsAry
,
dev
,
roomsAry
);
}
else
if
(
eps
->
type
==
cJSON_Array
){
//printf("[%s][%d]\n",__FUNCTION__,__LINE__);
kk_vp_sync_device_multi_eps
(
zbDevsAry
,
dev
,
roomsAry
,
eps
);
}
else
{
if
((
properties
=
cJSON_GetObjectItem
(
dev
,
"properties"
))
==
NULL
||
properties
->
type
!=
cJSON_Object
){
printf
(
"[prase fail]properties...
\n
"
);
continue
;
}
eps
=
cJSON_GetObjectItem
(
properties
,
"eps"
);
roomsAry
=
cJSON_GetObjectItem
(
data
,
ROOMS_STR
);
if
(
roomsAry
==
NULL
||
roomsAry
->
type
!=
cJSON_Array
){
printf
(
"[prase fail]roomsAry...
\n
"
);
continue
;
}
if
(
eps
==
NULL
){
printf
(
"[%s][%d]---------------->
\n
"
,
__FUNCTION__
,
__LINE__
);
kk_vp_sync_device_single_ep
(
zbDevsAry
,
dev
,
roomsAry
);
}
else
if
(
eps
->
type
==
cJSON_Array
){
printf
(
"[%s][%d]---------------->
\n
"
,
__FUNCTION__
,
__LINE__
);
kk_vp_sync_device_multi_eps
(
zbDevsAry
,
dev
,
roomsAry
,
eps
);
}
}
}
}
//printf("[%s][%d]\n",__FUNCTION__,__LINE__);
...
...
@@ -598,9 +735,110 @@ static _OUT cJSON *kk_vp_sync_gws(_IN cJSON *data)
static
_OUT
cJSON
*
kk_vp_sync_ac_indoors
(
_IN
cJSON
*
data
)
{
//todo:
return
ac_indoors_ary_build
(
0
,
NULL
);
cJSON
*
roomsAry
=
NULL
;
cJSON
*
roomObj
=
NULL
;
cJSON
*
roomId
=
NULL
,
*
room_name
=
NULL
;
cJSON
*
devsAry
=
NULL
,
*
devObj
=
NULL
;
cJSON
*
dev_name
=
NULL
,
*
epNum
=
NULL
,
*
deviceCode
=
NULL
;
VP_AC_INDOOR_ITEM
*
indoorList
=
NULL
;
VP_AC_INDOOR_ITEM
*
pIndoorItem
=
NULL
;
int
i
,
j
,
roomNum
=
0
,
devNum
=
0
;
int
node
;
int
max_indoor_size
=
VP_AC_GW_MAX_DEVICE_NUMBER
*
VP_AC_GW_INDOOR_MAX_DEVICE_NUMBER
;
int
indoor_num
=
0
;
if
((
roomsAry
=
cJSON_GetObjectItem
(
data
,
ROOMS_STR
))
==
NULL
||
roomsAry
->
type
!=
cJSON_Array
){
return
ac_indoors_ary_build
(
0
,
NULL
);
}
if
((
roomNum
=
cJSON_GetArraySize
(
roomsAry
))
==
0
){
return
ac_indoors_ary_build
(
0
,
NULL
);
}
indoorList
=
(
VP_AC_INDOOR_ITEM
*
)
malloc
(
sizeof
(
VP_AC_INDOOR_ITEM
)
*
VP_AC_GW_MAX_DEVICE_NUMBER
*
VP_AC_GW_INDOOR_MAX_DEVICE_NUMBER
);
memset
(
indoorList
,
0
,
sizeof
(
VP_AC_INDOOR_ITEM
)
*
VP_AC_GW_MAX_DEVICE_NUMBER
*
VP_AC_GW_INDOOR_MAX_DEVICE_NUMBER
);
pIndoorItem
=
indoorList
;
for
(
i
=
0
;
i
<
roomNum
;
i
++
){
if
((
roomObj
=
cJSON_GetArrayItem
(
roomsAry
,
i
))
==
NULL
||
roomObj
->
type
!=
cJSON_Object
){
continue
;
}
roomId
=
cJSON_GetObjectItem
(
roomObj
,
ROOMS_ID_STR
);
room_name
=
cJSON_GetObjectItem
(
roomObj
,
NAME_STR
);
if
(
roomId
==
NULL
||
roomId
->
type
!=
cJSON_String
||
room_name
==
NULL
||
room_name
->
type
!=
cJSON_String
){
continue
;
}
if
((
devsAry
=
cJSON_GetObjectItem
(
roomObj
,
DEVICES_STR
))
==
NULL
&&
devsAry
->
type
!=
cJSON_Array
){
continue
;
}
if
((
devNum
=
cJSON_GetArraySize
(
devsAry
))
==
0
){
continue
;
}
for
(
j
=
0
;
j
<
devNum
;
j
++
){
devObj
=
cJSON_GetArrayItem
(
devsAry
,
j
);
if
((
deviceCode
=
cJSON_GetObjectItem
(
devObj
,
"deviceCode"
))
==
NULL
||
deviceCode
->
type
!=
cJSON_String
){
continue
;
}
pthread_mutex_lock
(
mutex
);
if
(
ac_gw_table_find
(
deviceCode
->
valuestring
)
!=
0
){
pthread_mutex_unlock
(
mutex
);
dev_name
=
cJSON_GetObjectItem
(
devObj
,
NAME_STR
);
epNum
=
cJSON_GetObjectItem
(
devObj
,
"epNum"
);
if
(
dev_name
->
type
!=
cJSON_String
||
epNum
->
type
!=
cJSON_String
||
!
strcmp
(
epNum
->
valuestring
,
"1"
)){
continue
;
}
debug_log
(
LOG_DEBUG_LEVEL
,
"deviceCode=%s,epNum=%s,dev_name=%s"
,
deviceCode
->
valuestring
,
epNum
->
valuestring
,
dev_name
->
valuestring
);
pIndoorItem
->
online
=
1
;
node
=
kk_lan_db_node_get
(
deviceCode
->
valuestring
,
1
);
snprintf
(
pIndoorItem
->
ac_gw_nodeId
,
sizeof
(
pIndoorItem
->
ac_gw_nodeId
),
"%d"
,
node
);
node
=
kk_lan_db_node_get
(
deviceCode
->
valuestring
,
atoi
(
epNum
->
valuestring
));
snprintf
(
pIndoorItem
->
nodeId
,
sizeof
(
pIndoorItem
->
nodeId
),
"%d"
,
node
);
snprintf
(
pIndoorItem
->
addr
,
sizeof
(
pIndoorItem
->
addr
),
"%s"
,
epNum
->
valuestring
);
snprintf
(
pIndoorItem
->
operateType
,
sizeof
(
pIndoorItem
->
operateType
),
"%s"
,
"-5"
);
snprintf
(
pIndoorItem
->
name
,
sizeof
(
pIndoorItem
->
name
),
"%s"
,
dev_name
->
valuestring
);
snprintf
(
pIndoorItem
->
room
,
sizeof
(
pIndoorItem
->
room
),
"%s"
,
roomId
->
valuestring
);
indoor_num
+=
1
;
++
pIndoorItem
;
}
pthread_mutex_unlock
(
mutex
);
}
}
roomsAry
=
ac_indoors_ary_build
(
indoor_num
,
indoorList
);
free
(
indoorList
);
return
roomsAry
;
}
//保留
static
_OUT
cJSON
*
infrared_codelib_info_ary_build
(
_IN
cJSON
*
data
)
{
...
...
@@ -661,6 +899,54 @@ _OUT cJSON * kk_voice_panel_cfg_build(_IN VP_CFG_JSON *arg,int ver)
static
_OUT
int
node_id_check
(
_IN
cJSON
*
zbDevsAry
,
_IN
const
char
*
id
)
{
int
itemNum
;
int
chansItemNum
;
int
i
,
j
;
cJSON
*
itemObj
=
NULL
;
cJSON
*
chans
=
NULL
;
cJSON
*
chansItem
=
NULL
;
cJSON
*
idObj
=
NULL
;
if
(
zbDevsAry
==
NULL
||
zbDevsAry
->
type
!=
cJSON_Array
){
return
0
;
}
itemNum
=
cJSON_GetArraySize
(
zbDevsAry
);
for
(
i
=
0
;
i
<
itemNum
;
i
++
){
if
((
itemObj
=
cJSON_GetArrayItem
(
zbDevsAry
,
i
))
==
NULL
||
itemObj
->
type
!=
cJSON_Object
){
continue
;
}
if
((
chans
=
cJSON_GetObjectItem
(
itemObj
,
"chans"
))
==
NULL
||
chans
->
type
!=
cJSON_Array
){
continue
;
}
chansItemNum
=
cJSON_GetArraySize
(
chans
);
for
(
j
=
0
;
j
<
chansItemNum
;
j
++
){
if
((
chansItem
=
cJSON_GetArrayItem
(
chans
,
j
))
==
NULL
||
chansItem
->
type
!=
cJSON_Object
){
continue
;
}
if
((
idObj
=
cJSON_GetObjectItem
(
chansItem
,
"id"
))
==
NULL
||
idObj
->
type
!=
cJSON_String
){
continue
;
}
if
(
!
strcmp
(
id
,
idObj
->
valuestring
)){
return
1
;
}
}
}
return
0
;
}
...
...
@@ -924,6 +1210,14 @@ _OUT int kk_vp_syncinfo(_IN cJSON *payload,_IN int ver,_OUT cJSON **root)
return
-
1
;
}
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
pthread_mutex_lock
(
mutex
);
ac_gw_table_init
();
pthread_mutex_unlock
(
mutex
);
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
json
.
controller_buttons_config
=
infrared_codelib_info_ary_build
(
data
);
json
.
infrared_codelib_info
=
infrared_codelib_info_ary_build
(
data
);
...
...
application/klansdk/kk_voice_panel_cfg.h
View file @
a8ec59b6
...
...
@@ -34,12 +34,12 @@ typedef struct{
typedef
struct
{
char
*
ac_gw_nodeId
;
char
*
addr
;
char
*
nodeId
;
char
*
name
;
char
*
operateType
;
char
*
room
;
char
ac_gw_nodeId
[
8
]
;
char
addr
[
8
]
;
char
nodeId
[
8
]
;
char
name
[
32
]
;
char
operateType
[
8
]
;
char
room
[
32
]
;
int
online
;
}
VP_AC_INDOOR_ITEM
;
...
...
@@ -64,7 +64,9 @@ typedef struct{
int
kk_vp_cfg_init
(
void
);
void
kk_vp_ac_mutex_init
(
void
);
int
is_ac_gw_pid
(
int
pid
);
_OUT
int
kk_vp_syncinfo
(
_IN
cJSON
*
payload
,
_IN
int
ver
,
_OUT
cJSON
**
root
);
...
...
application/klansdk/kk_voice_panel_handle.c
View file @
a8ec59b6
...
...
@@ -9,6 +9,8 @@
#include "kk_voice_panel_handle.h"
#include "uart_proto.h"
#include "kk_lan_vp_ctrl.h"
#include "Serial.h"
#include "kk_oldccu_msg.h"
#define MK_VERSION(x) ((*x<<24) | (*(x+1)<<16) | (*(x+2)<<8) | *(x+3))
...
...
@@ -40,6 +42,8 @@ static void kk_vp_config_file_update_data_req_handle(pro_data_t *pro_data);
static
void
kk_vp_config_file_update_stop_handle
(
pro_data_t
*
pro_data
);
static
void
kk_vp_config_file_info_query_handle
(
pro_data_t
*
pro_data
);
static
void
kk_vp_config_file_update_status_handle
(
pro_data_t
*
pro_data
);
static
void
kk_vp_voice_control_handle
(
pro_data_t
*
pro_data
);
static
VP_OPCODE_HANDLE
vp_opcode_table
[]
=
{
...
...
@@ -53,7 +57,8 @@ static VP_OPCODE_HANDLE vp_opcode_table[] = {
{
OPCODE_CONFIG_DATA_REQUEST
,
kk_vp_config_file_update_data_req_handle
},
{
OPCODE_CONFIG_FILE_UPDATE_STOP
,
kk_vp_config_file_update_stop_handle
},
{
OPCODE_CONFIG_FILE_INFO_GET
,
kk_vp_config_file_info_query_handle
},
{
OPCODE_CONFIG_FILE_UPDATE_STATUS
,
kk_vp_config_file_update_status_handle
}
{
OPCODE_CONFIG_FILE_UPDATE_STATUS
,
kk_vp_config_file_update_status_handle
},
{
OPCODE_VOICE_CONTROL_NOTIFY
,
kk_vp_voice_control_handle
}
};
...
...
@@ -118,7 +123,7 @@ uint32_t CreateCrc32(const uint8_t* s, uint32_t len) {
typedef
struct
typedef
struct
VP_SCENE_MAP
{
int
raw_id
;
uint16_t
map_id
;
...
...
@@ -172,8 +177,7 @@ int vp_scene_id_item_add(int scene_id)
pScene
->
raw_id
=
scene_id
;
pScene
->
map_id
=
vp_map_id
++
;
printf
(
"[vp scene map]%d->%d
\n
"
,
pScene
->
raw_id
,
pScene
->
map_id
);
_debug_log
(
LOG_NORMAL_LEVEL
,
"[vp scene map]%d->%d
\n
"
,
pScene
->
raw_id
,
pScene
->
map_id
);
if
(
vp_scene_map
==
NULL
){
vp_scene_map
=
pScene
;
...
...
@@ -195,7 +199,8 @@ int vp_scene_id_item_load(int scene_id,uint16_t map_id)
pScene
->
raw_id
=
scene_id
;
pScene
->
map_id
=
map_id
;
printf
(
"[vp scene map load]%d->%d
\n
"
,
pScene
->
raw_id
,
pScene
->
map_id
);
_debug_log
(
LOG_NORMAL_LEVEL
,
"[vp scene map load]%d->%d
\n
"
,
pScene
->
raw_id
,
pScene
->
map_id
);
if
(
vp_scene_map
==
NULL
){
...
...
@@ -272,7 +277,8 @@ int vp_scene_id_map_save(void)
cJSON
*
json
=
vp_scene_id_map_file_build
();
pStr
=
cJSON_Print
(
json
);
printf
(
"[%s][%d][vp scene id file]%s
\n
"
,
__FUNCTION__
,
__LINE__
,
pStr
);
debug_log
(
LOG_NORMAL_LEVEL
,
"[vp scene id file]%s
\n
"
,
pStr
);
cJSON_Minify
(
pStr
);
length
=
strlen
(
pStr
);
...
...
@@ -310,15 +316,14 @@ int vp_scene_id_map_load(void)
fp
=
fopen
(
VP_SCENE_ID_FILE
,
"r"
);
if
(
fp
==
NULL
){
printf
(
"open err.
\n
"
);
return
;
debug_log
(
LOG_WARNING_LEVEL
,
"[%s]fopen err!
\n
"
,
VP_SCENE_ID_FILE
);
return
-
1
;
}
printf
(
"vp_scene_id_map_load
\n
"
);
fseek
(
fp
,
0
,
SEEK_END
);
size
=
ftell
(
fp
);
printf
(
"size=%d
\n
"
,
size
);
fseek
(
fp
,
0
,
SEEK_SET
);
...
...
@@ -378,12 +383,12 @@ void vp_send_data_build(uint16_t opCode,uint8_t len,uint8_t *data)
data_len
=
proto_frame_to_uart
(
&
pro_data
,
data_buf
);
printf
(
"
\n
*********************************
\n
"
);
printf
(
"[send]
len=%d
\n
"
,
data_len
);
_debug_log
(
LOG_INFO_LEVEL
,
"
\n
[LAN->VP]
len=%d
\n
"
,
data_len
);
for
(
int
i
=
0
;
i
<
data_len
;
i
++
){
printf
(
"%02X "
,
data_buf
[
i
]);
_debug_log
(
LOG_INFO_LEVEL
,
"%02X "
,
data_buf
[
i
]);
}
printf
(
"
\n
"
);
_debug_log
(
LOG_INFO_LEVEL
,
"
\n
\n
"
);
eSerial_WriteBuffer
(
data_buf
,
data_len
);
}
...
...
@@ -408,12 +413,12 @@ void vp_reply_data_build(uint16_t seq,uint8_t ch,uint16_t opCode,uint8_t len,uin
data_len
=
proto_frame_to_uart
(
&
pro_data
,
data_buf
);
printf
(
"
\n
*********************************
\n
"
);
printf
(
"[reply]
len=%d
\n
"
,
data_len
);
_debug_log
(
LOG_INFO_LEVEL
,
"
\n
[LAN->VP]
len=%d
\n
"
,
data_len
);
for
(
int
i
=
0
;
i
<
data_len
;
i
++
){
printf
(
"%02X "
,
data_buf
[
i
]);
_debug_log
(
LOG_INFO_LEVEL
,
"%02X "
,
data_buf
[
i
]);
}
printf
(
"
\n\n
"
);
_debug_log
(
LOG_INFO_LEVEL
,
"
\n\n
"
);
eSerial_WriteBuffer
(
data_buf
,
data_len
);
}
...
...
@@ -451,7 +456,7 @@ int _vp_get_cfg_file_size(void)
fp
=
fopen
(
VP_CONFIG_FILE_TAR_GZ
,
"r"
);
if
(
fp
==
NULL
){
perror
(
"open err"
);
debug_log
(
LOG_WARNING_LEVEL
,
"[%s]fopen err!
\n
"
,
VP_CONFIG_FILE_TAR_GZ
);
return
0
;
}
fseek
(
fp
,
0
,
SEEK_END
);
...
...
@@ -475,13 +480,13 @@ int _vp_get_cfg_file_crc32(void)
fp
=
fopen
(
VP_CONFIG_FILE
,
"r"
);
if
(
fp
==
NULL
){
debug_log
(
LOG_WARNING_LEVEL
,
"[%s]fopen err!
\n
"
,
VP_CONFIG_FILE
);
printf
(
"open err.
\n
"
);
return
;
return
-
1
;
}
fseek
(
fp
,
0
,
SEEK_END
);
size
=
ftell
(
fp
);
printf
(
"size=%d
\n
"
,
size
);
fseek
(
fp
,
0
,
SEEK_SET
);
...
...
@@ -500,11 +505,11 @@ int _vp_get_cfg_file_crc32(void)
printf
(
"[remain]r_len=%d,remain=%d
\n
"
,
r_len
,
remain
);
}
else
{
remain
=
0
;
printf
(
"[remain] 0
\n
"
,
remain
);
pRead
[
size
]
=
'\0'
;
}
}
crc32
=
CreateCrc32
(
buff
,
size
);
crc32
=
CreateCrc32
(
(
uint8_t
*
)
buff
,
size
);
printf
(
"crc32=%x
\n
"
,
crc32
);
free
(
buff
);
...
...
@@ -517,7 +522,7 @@ static void vp_open_fd()
{
update_fp
=
fopen
(
VP_CONFIG_FILE_TAR_GZ
,
"rb"
);
if
(
update_fp
==
NULL
){
printf
(
"update_fp open err.
\n
"
);
debug_log
(
LOG_WARNING_LEVEL
,
"[%s]fopen err!
\n
"
,
VP_CONFIG_FILE_TAR_GZ
);
}
}
static
void
vp_close_fd
()
...
...
@@ -585,8 +590,8 @@ static void kk_vp_get_8009_snapshoot_handle(pro_data_t *pro_data)
kk_vp_set_state_machine
(
SET_8009_SYSTEM
);
kk_vp_set_config_file_version
(
f_ver
);
VP_RECV_PRINT
(
"
\n
[VP->LAN]
sv=%06X,hv=%06X,%d-%d-%d %d:%d:%d,volume=%d,f_ver=%08X
\n
"
,
_debug_log
(
LOG_INFO_LEVEL
,
"
\n
sv=%06X,hv=%06X,%d-%d-%d %d:%d:%d,volume=%d,f_ver=%08X
\n
"
,
sv
,
hv
,
year
,
month
,
day
,
hour
,
minute
,
second
,
volume
,
f_ver
);
}
}
...
...
@@ -613,7 +618,7 @@ static void kk_vp_get_snapshoot_handle(pro_data_t *pro_data)
data
[
9
]
=
(
nodeId
>>
8
)
&
0xff
;
data
[
10
]
=
nodeId
&
0xff
;
data
[
11
]
=
netStatus
;
VP_RECV_PRINT
(
"
\n
[vp snapshoot get]
\n
"
);
vp_reply_data_build
(
pro_data
->
seq
,
pro_data
->
ch
,
OPCODE_SNAPSHOOT
,
sizeof
(
data
),
data
);
}
...
...
@@ -636,19 +641,18 @@ static void kk_vp_scene_trigger_handle(pro_data_t *pro_data)
sceneNum
=
pro_data
->
arg
[
0
];
sceneAry
=
malloc
(
sizeof
(
uint16_t
)
*
sceneNum
);
VP_RECV_PRINT
(
"[VP]execute scene!"
,
sceneNum
);
printf
(
"sceneNum=%d
\n
"
,
sceneNum
);
debug_log
(
LOG_FOCUS_LEVEL
,
"execute scene
\n
"
);
_debug_log
(
LOG_FOCUS_LEVEL
,
"sceneNum=%d
\n
"
,
sceneNum
);
for
(
i
=
0
;
i
<
sceneNum
;
i
++
){
sceneAry
[
i
]
=
MK_UINT16
(
&
pro_data
->
arg
[
1
+
2
*
i
]);
printf
(
"scene
%d:%d
\n
"
,
i
,
sceneAry
[
i
]);
_debug_log
(
LOG_INFO_LEVEL
,
"scene-
%d:%d
\n
"
,
i
,
sceneAry
[
i
]);
}
VP_RECV_PRINT
(
"
\n
[vp call scene]
\n
"
);
for
(
i
=
0
;
i
<
sceneNum
;
i
++
){
if
((
sceneId
=
vp_scene_id_get_scene_id
(
sceneAry
[
i
]))
!=-
1
){
printf
(
"1...
\n
"
);
char
buff
[
32
]
=
{
0
};
memset
(
buff
,
0
,
32
);
snprintf
(
buff
,
32
,
"%d"
,
sceneId
);
...
...
@@ -659,13 +663,13 @@ static void kk_vp_scene_trigger_handle(pro_data_t *pro_data)
off
+=
1
;
}
}
printf
(
"2...
\n
"
);
if
(
off
!=
0
){
data
[
0
]
=
0x00
;
}
else
{
data
[
0
]
=
1
;
}
printf
(
"3...
\n
"
);
vp_reply_data_build
(
pro_data
->
seq
,
pro_data
->
ch
,
OPCODE_SCENE_ID_NOTIFY
,
1
+
2
*
off
+
1
,
data
);
free
(
sceneAry
);
}
...
...
@@ -694,7 +698,7 @@ static void kk_vp_set_8009_system_time_handle(pro_data_t *pro_data)
sec
=
pro_data
->
arg
[
7
];
kk_vp_set_state_machine
(
GET_8009_CONFIG_FILE_INFO
);
VP_RECV_PRINT
(
"
\n
[VP->LAN]
%d-%d-%d %d:%d:%d
\n
"
,
year
,
month
,
day
,
hour
,
minute
,
sec
);
_debug_log
(
LOG_INFO_LEVEL
,
"
\n
%d-%d-%d %d:%d:%d
\n
"
,
year
,
month
,
day
,
hour
,
minute
,
sec
);
}
static
void
kk_vp_get_system_time_handle
(
pro_data_t
*
pro_data
)
...
...
@@ -720,70 +724,70 @@ static void kk_vp_get_system_time_handle(pro_data_t *pro_data)
data
[
6
]
=
c
->
tm_min
;
data
[
7
]
=
c
->
tm_sec
;
VP_RECV_PRINT
(
"
\n
[vp system time get reply]
%d-%d-%d %d:%d:%d
\n
"
,(
c
->
tm_year
+
1900
),(
c
->
tm_mon
+
1
),
c
->
tm_mday
,
c
->
tm_hour
,
c
->
tm_min
,
c
->
tm_sec
);
_debug_log
(
LOG_INFO_LEVEL
,
"
\n
%d-%d-%d %d:%d:%d
\n
"
,(
c
->
tm_year
+
1900
),(
c
->
tm_mon
+
1
),
c
->
tm_mday
,
c
->
tm_hour
,
c
->
tm_min
,
c
->
tm_sec
);
vp_reply_data_build
(
pro_data
->
seq
,
pro_data
->
ch
,
OPCODE_SYSTEM_TIME_GET
,
sizeof
(
data
),
data
);
}
static
void
kk_vp_action_handle
(
pro_data_t
*
pro_data
)
{
uint8_t
err
=
0
;
uint8_t
i
=
0
;
uint8_t
devNum
=
0
;
uint32_t
*
nodeIdAry
=
NULL
;
uint32_t
*
OperatorIdAry
=
NULL
;
uint8_t
skillType
;
VP_RECV_PRINT
(
"
\n\n
******************0x010B***********************
\n\n
"
);
_debug_log
(
LOG_FOCUS_LEVEL
,
"
\n\n
*****************VP CTRL*****************
\n
"
);
if
((
devNum
=
pro_data
->
arg
[
0
])
!=
0
){
nodeIdAry
=
malloc
(
sizeof
(
uint32_t
)
*
devNum
);
OperatorIdAry
=
malloc
(
sizeof
(
uint32_t
)
*
devNum
);
printf
(
"devNum=%d"
,
devNum
);
_debug_log
(
LOG_DEBUG_LEVEL
,
"devNum=%d"
,
devNum
);
for
(
i
=
0
;
i
<
devNum
;
i
++
){
nodeIdAry
[
i
]
=
(
pro_data
->
arg
[
1
+
8
*
i
]
<<
24
)
|
(
pro_data
->
arg
[
2
+
8
*
i
]
<<
16
)
|
(
pro_data
->
arg
[
3
+
8
*
i
]
<<
8
)
|
pro_data
->
arg
[
4
+
8
*
i
];
OperatorIdAry
[
i
]
=
(
pro_data
->
arg
[
5
+
8
*
i
]
<<
24
)
|
(
pro_data
->
arg
[
6
+
8
*
i
]
<<
16
)
|
(
pro_data
->
arg
[
7
+
8
*
i
]
<<
8
)
|
pro_data
->
arg
[
8
+
8
*
i
];
VP_RECV_PRINT
(
"[Node Id %d] %08x
"
,
i
,
nodeIdAry
[
i
]);
VP_RECV_PRINT
(
"[Operator Id %d] %08x
"
,
i
,
OperatorIdAry
[
i
]);
_debug_log
(
LOG_DEBUG_LEVEL
,
"[Node Id %d] %08x
\n
"
,
i
,
nodeIdAry
[
i
]);
_debug_log
(
LOG_DEBUG_LEVEL
,
"[Operator Id %d] %08x
\n
"
,
i
,
OperatorIdAry
[
i
]);
}
skillType
=
pro_data
->
arg
[
1
+
8
*
i
];
VP_RECV_PRINT
(
"[skillType] %02x"
,
skillType
);
_debug_log
(
LOG_DEBUG_LEVEL
,
"[skillType] %02x
\n
"
,
skillType
);
_debug_log
(
LOG_DEBUG_LEVEL
,
"arg len=%d
\n
"
,
pro_data
->
args_len
-
1
-
8
*
devNum
);
kk_lan_vp_control
(
devNum
,
nodeIdAry
,
&
pro_data
->
arg
[
1
+
8
*
i
]);
uint8_t
data
[
256
]
=
{
0
};
memset
(
data
,
0
,
sizeof
(
data
));
data
[
0
]
=
0x00
;
data
[
1
]
=
devNum
;
//todo:根据实际的执行
for
(
i
=
0
;
i
<
devNum
;
i
++
){
data
[
2
+
8
*
i
]
=
(
nodeIdAry
[
i
]
>>
24
)
&
0xff
;
data
[
3
+
8
*
i
]
=
(
nodeIdAry
[
i
]
>>
16
)
&
0xff
;
data
[
4
+
8
*
i
]
=
(
nodeIdAry
[
i
]
>>
8
)
&
0xff
;
data
[
5
+
8
*
i
]
=
nodeIdAry
[
i
]
&
0xff
;
data
[
6
+
8
*
i
]
=
(
OperatorIdAry
[
i
]
>>
24
)
&
0xff
;
data
[
7
+
8
*
i
]
=
(
OperatorIdAry
[
i
]
>>
16
)
&
0xff
;
data
[
8
+
8
*
i
]
=
(
OperatorIdAry
[
i
]
>>
8
)
&
0xff
;
data
[
9
+
8
*
i
]
=
OperatorIdAry
[
i
]
&
0xff
;
}
data
[
2
+
8
*
i
]
=
skillType
;
data
[
3
+
8
*
i
]
=
0x20
;
data
[
4
+
8
*
i
]
=
devNum
;
int
off
=
5
+
8
*
i
;
for
(
i
=
0
;
i
<
devNum
;
i
++
){
data
[
off
+
i
]
=
0
;
err
=
kk_lan_vp_control
(
devNum
,
nodeIdAry
,
&
pro_data
->
arg
[
1
+
8
*
i
],
pro_data
->
args_len
-
1
-
8
*
devNum
);
if
(
err
==
0
){
uint8_t
data
[
256
]
=
{
0
};
memset
(
data
,
0
,
sizeof
(
data
));
data
[
0
]
=
err
;
data
[
1
]
=
devNum
;
//todo:根据实际的执行
for
(
i
=
0
;
i
<
devNum
;
i
++
){
data
[
2
+
8
*
i
]
=
(
nodeIdAry
[
i
]
>>
24
)
&
0xff
;
data
[
3
+
8
*
i
]
=
(
nodeIdAry
[
i
]
>>
16
)
&
0xff
;
data
[
4
+
8
*
i
]
=
(
nodeIdAry
[
i
]
>>
8
)
&
0xff
;
data
[
5
+
8
*
i
]
=
nodeIdAry
[
i
]
&
0xff
;
data
[
6
+
8
*
i
]
=
(
OperatorIdAry
[
i
]
>>
24
)
&
0xff
;
data
[
7
+
8
*
i
]
=
(
OperatorIdAry
[
i
]
>>
16
)
&
0xff
;
data
[
8
+
8
*
i
]
=
(
OperatorIdAry
[
i
]
>>
8
)
&
0xff
;
data
[
9
+
8
*
i
]
=
OperatorIdAry
[
i
]
&
0xff
;
}
data
[
2
+
8
*
i
]
=
skillType
;
data
[
3
+
8
*
i
]
=
0x20
;
data
[
4
+
8
*
i
]
=
devNum
;
int
off
=
5
+
8
*
i
;
for
(
i
=
0
;
i
<
devNum
;
i
++
){
data
[
off
+
i
]
=
0
;
}
vp_reply_data_build
(
pro_data
->
seq
,
pro_data
->
ch
,
OPCODE_ACTION_NOTIFY
,
off
+
i
,
data
);
}
vp_reply_data_build
(
pro_data
->
seq
,
pro_data
->
ch
,
OPCODE_ACTION_NOTIFY
,
off
+
i
,
data
);
free
(
nodeIdAry
);
free
(
OperatorIdAry
);
}
//OPCODE_ACTION_NOTIFY
}
static
void
kk_vp_config_file_update_notify_handle
(
pro_data_t
*
pro_data
)
...
...
@@ -804,7 +808,7 @@ static void kk_vp_config_file_update_notify_handle(pro_data_t *pro_data)
kk_vp_config_file_info_check
(
f_ver
,
f_size
,
crc32
);
VP_RECV_PRINT
(
"
\n
[cfg file update notify ack]
File Version=%08x,File Size=%d,CRC32 Value=%08X
\n
"
,
_debug_log
(
LOG_DEBUG_LEVEL
,
"
File Version=%08x,File Size=%d,CRC32 Value=%08X
\n
"
,
f_ver
,
f_size
,
crc32
);
}
else
{
printf
(
"
\n
"
);
...
...
@@ -832,9 +836,9 @@ static void kk_vp_config_file_update_data_req_handle(pro_data_t *pro_data)
offset
=
MK_UINT32
(
&
pro_data
->
arg
[
4
]);
req_size
=
MK_UINT16
(
&
pro_data
->
arg
[
8
]);
VP_RECV_PRINT
(
"
\n
[vp config file req]
f_ver=%d,offset=%d,req_size=%d
\n
"
,
f_ver
,
offset
,
req_size
);
_debug_log
(
LOG_DEBUG_LEVEL
,
"
\n
f_ver=%d,offset=%d,req_size=%d
\n
"
,
f_ver
,
offset
,
req_size
);
if
(
update_fp
==
NULL
){
printf
(
"[update_fp] NULL!
\n
"
);
_debug_log
(
LOG_ERROR_LEVEL
,
"[update_fp] NULL!
\n
"
);
err
=
1
;
}
/*
...
...
@@ -855,13 +859,13 @@ static void kk_vp_config_file_update_data_req_handle(pro_data_t *pro_data)
data
[
len
++
]
=
req_size
&
0xff
;
pCrc
=
&
data
[
len
];
printf
(
"-------->=%d
\n
"
,
len
);
if
(
err
==
0
){
int
err
=
fseek
(
update_fp
,
offset
,
SEEK_SET
);
if
(
err
==
0
){
while
(
req_size
>
t_len
){
r_len
=
fread
(
&
data
[
len
],
1
,
req_size
,
update_fp
);
printf
(
"r_len=%d
\n
"
,
r_len
);
if
(
r_len
>=
0
){
t_len
+=
r_len
;
len
+=
r_len
;
...
...
@@ -870,7 +874,7 @@ static void kk_vp_config_file_update_data_req_handle(pro_data_t *pro_data)
}
}
}
else
{
printf
(
"[fseek fail]offset=%d
\n
"
,
offset
);
debug_log
(
LOG_ERROR_LEVEL
,
"[fseek fail]offset=%d
\n
"
,
offset
);
}
}
...
...
@@ -879,7 +883,7 @@ static void kk_vp_config_file_update_data_req_handle(pro_data_t *pro_data)
data
[
len
++
]
=
(
crc
>>
16
)
&
0xff
;
data
[
len
++
]
=
(
crc
>>
8
)
&
0xff
;
data
[
len
++
]
=
crc
&
0xff
;
printf
(
"crc32=%x
\n
"
,
crc
);
_debug_log
(
LOG_DEBUG_LEVEL
,
"crc32=%x
\n
"
,
crc
);
vp_reply_data_build
(
pro_data
->
seq
,
pro_data
->
ch
,
OPCODE_CONFIG_DATA_REQUEST
,
len
,
data
);
usleep
(
100
*
1000
);
...
...
@@ -901,9 +905,9 @@ static void kk_vp_config_file_update_stop_handle(pro_data_t *pro_data)
return
;
}
ver
=
MK_VERSION
(
&
pro_data
->
arg
[
1
]);
VP_RECV_PRINT
(
"
\n
[vp config file update stop ack]
version=%d
\n
"
,
ver
);
_debug_log
(
LOG_DEBUG_LEVEL
,
"
\n
version=%d
\n
"
,
ver
);
}
else
{
printf
(
"err=%d
\n
"
,
ve
r
);
printf
(
"err=%d
\n
"
,
er
r
);
}
ver
=
(
pro_data
->
arg
[
0
]
<<
24
)
|
(
pro_data
->
arg
[
1
]
<<
16
)
|
(
pro_data
->
arg
[
2
]
<<
8
)
|
pro_data
->
arg
[
3
];
...
...
@@ -927,7 +931,7 @@ static void kk_vp_config_file_update_status_handle(pro_data_t *pro_data)
VP_RECV_PRINT
(
"
\n
[config file update status]
ver=%d,status=%d
\n
"
,
ver
,
status
);
_debug_log
(
LOG_DEBUG_LEVEL
,
"
\n
ver=%d,status=%d
\n
"
,
ver
,
status
);
uint8_t
data
[
6
]
=
{
0
};
...
...
@@ -947,6 +951,42 @@ static void kk_vp_config_file_update_status_handle(pro_data_t *pro_data)
}
static
void
kk_vp_voice_control_notify
(
uint8_t
status
)
{
if
(
status
!=
1
&&
status
!=
2
){
return
;
}
cJSON
*
root
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
root
,
"node"
,
"*"
);
cJSON_AddStringToObject
(
root
,
"opcode"
,
"VOICE_CTRL"
);
if
(
status
==
1
){
_debug_log
(
LOG_DEBUG_LEVEL
,
"[VP]wake up.
\n\n
"
);
cJSON_AddStringToObject
(
root
,
"arg"
,
"ON"
);
}
else
if
(
status
==
2
){
_debug_log
(
LOG_DEBUG_LEVEL
,
"[VP]sleep.
\n\n
"
);
cJSON_AddStringToObject
(
root
,
"arg"
,
"OFF"
);
}
cJSON_AddStringToObject
(
root
,
"status"
,
"success"
);
send_msg_to_module
(
root
);
cJSON_Delete
(
root
);
}
static
void
kk_vp_voice_control_handle
(
pro_data_t
*
pro_data
)
{
if
(
pro_data
->
args_len
!=
1
)
{
return
;
}
debug_log
(
LOG_FOCUS_LEVEL
,
"[VP] voice contrl status =%d.
\n\n
"
,
pro_data
->
arg
[
0
]);
kk_vp_voice_control_notify
(
pro_data
->
arg
[
0
]);
}
static
void
kk_vp_config_file_info_query_handle
(
pro_data_t
*
pro_data
)
{
uint8_t
err
;
...
...
@@ -965,11 +1005,9 @@ static void kk_vp_config_file_info_query_handle(pro_data_t *pro_data)
f_size
=
MK_UINT32
(
&
pro_data
->
arg
[
5
]);
crc32
=
MK_UINT32
(
&
pro_data
->
arg
[
9
]);
VP_RECV_PRINT
(
"[VP->LAN]
File Version=%08x,File Size=%08x,CRC32=%08x
\n
"
,
f_ver
,
f_size
,
crc32
);
_debug_log
(
LOG_DEBUG_LEVEL
,
"
File Version=%08x,File Size=%08x,CRC32=%08x
\n
"
,
f_ver
,
f_size
,
crc32
);
kk_vp_cfg_info_check
(
f_ver
,
f_size
,
crc32
);
}
else
{
printf
(
""
);
}
}
...
...
@@ -979,7 +1017,7 @@ static void kk_vp_config_file_info_query_handle(pro_data_t *pro_data)
void
kk_vp_get_8009_snapshoot
(
void
)
{
uint8_t
res
[
1
]
=
{
0
};
VP_SEND_PRINT
(
"[LAN->VP]
get snapshoot
\n
"
);
debug_log
(
LOG_DEBUG_LEVEL
,
"
get snapshoot
\n
"
);
vp_send_data_build
(
OPCODE_8009_SNAPSHOOT
,
sizeof
(
res
),
res
);
}
...
...
@@ -998,7 +1036,7 @@ void kk_vp_set_8009_system_time(void)
data
[
5
]
=
c
->
tm_min
;
data
[
6
]
=
c
->
tm_sec
;
VP_SEND_PRINT
(
"[LAN->VP]
set system (%d-%d-%d %d:%d:%d)
\n
"
,(
c
->
tm_year
+
1900
),(
c
->
tm_mon
+
1
),
c
->
tm_mday
,
c
->
tm_hour
,
c
->
tm_min
,
c
->
tm_sec
);
debug_log
(
LOG_DEBUG_LEVEL
,
"
set system (%d-%d-%d %d:%d:%d)
\n
"
,(
c
->
tm_year
+
1900
),(
c
->
tm_mon
+
1
),
c
->
tm_mday
,
c
->
tm_hour
,
c
->
tm_min
,
c
->
tm_sec
);
vp_send_data_build
(
OPCODE_SYSTEM_TIME_SET
,
sizeof
(
data
),
data
);
}
...
...
@@ -1033,7 +1071,8 @@ void kk_vp_config_file_update_start(uint32_t ver)
kk_vp_cfg_info_set
(
f_ver
,
f_size
,
crc32
);
VP_SEND_PRINT
(
"[cfg file update notify]File Version=%08x,File Size=%d,CRC32 Value=%08X
\n
"
,
debug_log
(
LOG_DEBUG_LEVEL
,
"[LAN->VP]config file update start,OPCODE=%04X
\n
"
,
OPCODE_CONFIG_FILE_UPDATE_NOTIFY
);
_debug_log
(
LOG_DEBUG_LEVEL
,
"File Version=%08x,File Size=%d,CRC32 Value=%08X
\n
"
,
f_ver
,
f_size
,
crc32
);
vp_send_data_build
(
OPCODE_CONFIG_FILE_UPDATE_NOTIFY
,
sizeof
(
data
),
data
);
...
...
@@ -1052,19 +1091,19 @@ void kk_vp_config_file_update_stop(uint32_t ver)
f_ver
[
2
]
=
(
ver
>>
8
)
&
0xff
;
f_ver
[
3
]
=
ver
&
0xff
;
VP_SEND_PRINT
(
"[vp config file update stop] version=%d
\n
"
,
ver
);
debug_log
(
LOG_DEBUG_LEVEL
,
"[LAN->VP]config file update stop,OPCODE=%04X
\n
"
,
OPCODE_CONFIG_FILE_UPDATE_STOP
);
vp_send_data_build
(
OPCODE_CONFIG_FILE_UPDATE_STOP
,
sizeof
(
f_ver
),
f_ver
);
}
void
kk_vp_get_config_file_info
(
void
)
{
uint8_t
res
[
1
]
=
{
0
};
VP_SEND_PRINT
(
"[config file info get]
\n
"
);
debug_log
(
LOG_DEBUG_LEVEL
,
"[LAN->VP]config file info get,OPCODE=%04X
\n
"
,
OPCODE_CONFIG_FILE_INFO_GET
);
vp_send_data_build
(
OPCODE_CONFIG_FILE_INFO_GET
,
sizeof
(
res
),
res
);
}
/////////////////////////////////////////////////////
int
kk_vp_opcode_handle
(
_IN
pro_data_t
*
pro_data
)
{
...
...
@@ -1079,13 +1118,13 @@ int kk_vp_opcode_handle(_IN pro_data_t *pro_data)
for
(
i
=
0
;
i
<
sizeof
(
vp_opcode_table
)
/
sizeof
(
VP_OPCODE_HANDLE
);
i
++
,
pFunc
++
){
if
(
pFunc
->
opcode
==
pro_data
->
opcode
){
if
(
pFunc
->
func
!=
NULL
){
printf
(
"[%s][%d][vp handle opcode]%04X
\n
"
,
__FUNCTION__
,
__LINE__
,
pro_data
->
opcode
);
debug_log
(
LOG_NORMAL_LEVEL
,
"[handle Opcode]%04X
\n
"
,
pro_data
->
opcode
);
pFunc
->
func
(
pro_data
);
return
1
;
}
}
}
printf
(
"[%s][%d][vp unknow opcode]%04X
\n
"
,
__FUNCTION__
,
__LINE__
,
pro_data
->
opcode
);
debug_log
(
LOG_WARNING_LEVEL
,
"[unknow Opcode]%04X
\n
"
,
pro_data
->
opcode
);
return
0
;
}
...
...
@@ -1110,6 +1149,7 @@ static int kk_vp_config_file_save(_IN cJSON *json)
pWrite
=
pStr
;
if
((
fp
=
fopen
(
VP_CONFIG_FILE
,
"w"
))
==
NULL
)
{
debug_log
(
LOG_WARNING_LEVEL
,
"[%s] fopen fail
\n
"
,
VP_CONFIG_FILE
);
return
0
;
}
...
...
@@ -1147,14 +1187,14 @@ static _OUT int kk_vp_config_file_update_check(void)
if
(
access
(
VP_CONFIG_FILE_MD5
,
F_OK
)
!=
0
){
memset
(
cmd
,
0
,
sizeof
(
cmd
));
snprintf
(
cmd
,
sizeof
(
cmd
),
md5_create
,
VP_CONFIG_FILE
,
VP_CONFIG_FILE_MD5
);
EXECUTE_CMD
(
cmd
);
debug_log
(
LOG_FOCUS_LEVEL
,
"%s
\n
"
,
cmd
);
system
(
cmd
);
updateFlag
=
1
;
}
else
{
memset
(
cmd
,
0
,
sizeof
(
cmd
));
snprintf
(
cmd
,
sizeof
(
cmd
),
md5_check
,
VP_CONFIG_FILE_MD5
);
EXECUTE_CMD
(
cmd
);
debug_log
(
LOG_FOCUS_LEVEL
,
"%s
\n
"
,
cmd
);
fp
=
popen
(
cmd
,
"r"
);
fread
(
buf
,
1
,
sizeof
(
buf
),
fp
);
...
...
@@ -1166,7 +1206,7 @@ static _OUT int kk_vp_config_file_update_check(void)
updateFlag
=
1
;
memset
(
cmd
,
0
,
sizeof
(
cmd
));
snprintf
(
cmd
,
sizeof
(
cmd
),
md5_create
,
VP_CONFIG_FILE
,
VP_CONFIG_FILE_MD5
);
EXECUTE_CMD
(
cmd
);
debug_log
(
LOG_FOCUS_LEVEL
,
"%s
\n
"
,
cmd
);
system
(
cmd
);
}
}
...
...
@@ -1174,7 +1214,7 @@ static _OUT int kk_vp_config_file_update_check(void)
if
(
updateFlag
!=
0
){
memset
(
cmd
,
0
,
sizeof
(
cmd
));
snprintf
(
cmd
,
sizeof
(
cmd
),
tar_cmd
,
VP_CONFIG_FILE_TAR_GZ
,
VP_CONFIG_FILE
);
EXECUTE_CMD
(
cmd
);
debug_log
(
LOG_FOCUS_LEVEL
,
"%s
\n
"
,
cmd
);
system
(
cmd
);
}
...
...
@@ -1186,14 +1226,17 @@ void kk_vp_syncinfo_handle(_IN cJSON *payload)
{
cJSON
*
root
=
NULL
;
int
err
=
0
;
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
if
((
err
=
kk_vp_syncinfo
(
payload
,
kk_vp_get_config_file_version
(),
&
root
))
!=
0
){
printf
(
"[%s][%d]SYNC fail,err=%d
\n
"
,
__FUNCTION__
,
__LINE__
,
err
);
}
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
if
(
kk_vp_config_file_save
(
root
)
!=
0
){
printf
(
"[%s][%d][vp config file] save.
\n
"
,
__FUNCTION__
,
__LINE__
);
}
debug_log
(
LOG_CRITICAL_LEVEL
,
"mark
\n
"
);
if
(
kk_vp_config_file_update_check
()
!=
0
){
printf
(
"[%s][%d][vp config file] update.
\n
"
,
__FUNCTION__
,
__LINE__
);
...
...
application/klansdk/kk_voice_panel_handle.h
View file @
a8ec59b6
...
...
@@ -5,11 +5,10 @@
#include "kk_lan_voice_panel.h"
#include "kk_voice_panel_cfg.h"
#define VP_CONFIG_FILE "/etc/smarthome/voice_data.json"
#define VP_CONFIG_FILE_MD5 "/data/kk/voice_data.MD5"
#define VP_CONFIG_FILE_TAR_GZ "/data/kk/voice_data.tar.gz"
#define VP_VP_CONFIG_FILE_DIR "/etc/smarthome"
#define VP_CONFIG_FILE "/etc/smarthome/voice_data.json"
#define VP_CONFIG_FILE_MD5 "/data/kk/voice_data.MD5"
#define VP_CONFIG_FILE_TAR_GZ "/data/kk/voice_data.tar.gz"
#define OPCODE_8009_SNAPSHOOT 0x1000
#define OPCODE_SNAPSHOOT 0x1001
...
...
@@ -22,16 +21,7 @@
#define OPCODE_CONFIG_FILE_UPDATE_STOP 0x100E
#define OPCODE_CONFIG_FILE_INFO_GET 0x100F
#define OPCODE_CONFIG_FILE_UPDATE_STATUS 0x1010
#define EXECUTE_CMD(cmd) do {\
printf("\n[%s][%d]------------------execte cmd------------------\n",__FUNCTION__,__LINE__);\
printf("%s\n",cmd);\
}while(0)
#define VP_SEND_PRINT(format,...) printf("\n\033[33;32m"format"\033[0m\n",##__VA_ARGS__)
#define VP_RECV_PRINT(format,...) printf("\n\033[33;34m"format"\033[0m\n",##__VA_ARGS__)
#define OPCODE_VOICE_CONTROL_NOTIFY 0x1022
typedef
void
(
*
vp_handle_func
)(
pro_data_t
*
pro_data
);
typedef
struct
...
...
@@ -68,8 +58,13 @@ void kk_vp_get_8009_snapshoot(void);
void
kk_vp_syncinfo_handle
(
_IN
cJSON
*
payload
);
int
kk_vp_opcode_handle
(
_IN
pro_data_t
*
pro_data
);
int
kk_vp_get_config_file_version
(
void
);
void
vp_scene_id_map_deinit
(
void
);
int
vp_scene_id_item_add
(
int
scene_id
);
int
vp_scene_id_item_load
(
int
scene_id
,
uint16_t
map_id
);
int
vp_scene_id_map_save
(
void
);
...
...
application/klansdk/uart_proto.c
View file @
a8ec59b6
...
...
@@ -8,7 +8,7 @@
#include <unistd.h>
#include "Serial.h"
#include "main.h"
//#include "common.h"
...
...
@@ -18,7 +18,7 @@
//#include "net_handle.h"
#include "uart_proto.h"
#include "kk_lan_debug.h"
uart_data_t
g_uart_data
;
...
...
@@ -464,23 +464,23 @@ void dev_send_uart(uint8_t *data, uint16_t data_len)
static
void
uart_protocol_print
(
pro_data_t
*
pro_data
)
{
printf
(
"seq
%02X
\n
"
,
pro_data
->
seq
);
printf
(
"channel
%02X
\n
"
,
pro_data
->
ch
);
printf
(
"opcode
%04X
\n
"
,
pro_data
->
opcode
);
printf
(
"args_len:
%d
\n
"
,
pro_data
->
args_len
);
_debug_log
(
LOG_DEBUG_LEVEL
,
"
\n
[VP->LAN]
\n
"
);
_debug_log
(
LOG_DEBUG_LEVEL
,
"seq:
\t\t
%02X
\n
"
,
pro_data
->
seq
);
_debug_log
(
LOG_DEBUG_LEVEL
,
"channel:
\t
%02X
\n
"
,
pro_data
->
ch
);
_debug_log
(
LOG_DEBUG_LEVEL
,
"opcode:
\t\t
%04X
\n
"
,
pro_data
->
opcode
);
_debug_log
(
LOG_DEBUG_LEVEL
,
"args_len:
\t
%d
\n
"
,
pro_data
->
args_len
);
char
print_buf
[
512
]
=
{
0
};
int
i
=
0
;
snprintf
(
print_buf
,
sizeof
(
print_buf
),
"args:
"
);
snprintf
(
print_buf
,
sizeof
(
print_buf
),
"args:
\t\t
"
);
for
(
i
=
0
;
i
<
pro_data
->
args_len
;
i
++
)
{
snprintf
(
print_buf
+
strlen
(
print_buf
),
sizeof
(
print_buf
),
"%02X "
,
pro_data
->
arg
[
i
]);
}
printf
(
"%s
\n
"
,
print_buf
);
_debug_log
(
LOG_DEBUG_LEVEL
,
"%s
\n
\n
"
,
print_buf
);
}
...
...
@@ -875,7 +875,6 @@ extern void kk_vp_opcode_handle(pro_data_t *pro_data);
void
uart_frame_handle
()
{
GW_LOG_DBG
(
"uart_frame_handle
\n
"
);
uint8_t
*
data
=
g_uart_data
.
data
;
uint8_t
data_len
=
g_uart_data
.
data_len
;
pro_data_t
pro_data
;
...
...
midware/midware/dm/kk_sync_data.c
View file @
a8ec59b6
...
...
@@ -105,11 +105,11 @@ static cJSON * kk_get_room_devices(const char *roomId)
if
(
kk_check_multi_ep_num
(
deviceCode
)){
cJSON_AddStringToObject
(
dev
,
KK_SYNC_SCENE_EPNUM_STR
,
epNum
);
}
else
if
(
strcmp
(
node
->
productType
,
KK_DM_AIR_GATEWAY_TYPE
)
==
0
){
if
(
atoi
(
epNum
)
==
1
){
//epNum为1的是空调网关
continue
;
}
else
{
//
if(atoi(epNum) == 1){//epNum为1的是空调网关
//
continue;
//
}else{
cJSON_AddStringToObject
(
dev
,
KK_SYNC_SCENE_EPNUM_STR
,
epNum
);
}
//
}
}
cJSON_AddStringToObject
(
dev
,
KK_SYNC_DEVICECODE_STR
,
deviceCode
);
//cJSON_AddStringToObject(dev,KK_SYNC_SCENE_EPNUM_STR,epNum);
...
...
@@ -761,6 +761,7 @@ static int kk_get_scenes_actions_info(cJSON *actionArray,int id)
char
*
propertyName
=
NULL
;
char
*
propertyValue
=
NULL
;
char
room_name
[
64
]
=
{
0
};
cJSON
*
prtyObj
=
NULL
;
char
*
type
=
NULL
;
int
delay
=
0
,
epNum
=
0
,
scene_id
=
0
;
...
...
@@ -807,7 +808,13 @@ static int kk_get_scenes_actions_info(cJSON *actionArray,int id)
//cJSON_AddNumberToObject(actionItem, KK_SYNC_SCENE_EPNUM_STR, epNum);
cJSON_AddStringToObject
(
actionItem
,
KK_SYNC_SCENE_TYPE_STR
,
type
);
cJSON_AddStringToObject
(
actionItem
,
KK_SYNC_SCENE_PROPERTYVALUE_STR
,
propertyValue
);
if
((
prtyObj
=
cJSON_Parse
(
propertyValue
))
==
NULL
){
cJSON_AddStringToObject
(
actionItem
,
KK_SYNC_SCENE_PROPERTYVALUE_STR
,
propertyValue
);
}
else
{
cJSON_AddItemToObject
(
actionItem
,
KK_SYNC_SCENE_PROPERTYVALUE_STR
,
prtyObj
);
}
cJSON_AddStringToObject
(
actionItem
,
KK_SYNC_ROOMID_STR
,
room_name
);
cJSON_AddItemToArray
(
actionArray
,
actionItem
);
}
...
...
midware/midware/scene/kk_scene_db.c
View file @
a8ec59b6
...
...
@@ -640,6 +640,9 @@ int kk_scene_insert_scene_action(const char* type,const char* deviceCode,int epN
char
*
sqlCmd
=
NULL
;
char
*
zErrMsg
=
0
;
printf
(
"----->kk_scene_insert_scene_action
\n
"
);
printf
(
"propertyValue----->%s
\n
"
,
propertyValue
);
const
char
*
insertCmd
=
"insert into SceneActionInfo (type, deviceCode,epNum,propertyName,propertyValue,delay,sceneId,gwdeviceCode) \
values ('%s','%s','%d','%s','%s','%d','%s','%s');"
;
...
...
midware/midware/scene/kk_scene_handle.c
View file @
a8ec59b6
...
...
@@ -510,6 +510,7 @@ int kk_scene_action_add(const char *gwdeviceCode,const char *sceneId,kk_scene_ac
cJSON
*
array
;
cJSON
*
info
;
char
*
out
;
cJSON
*
prtyObj
=
NULL
;
kk_scene_action_t
*
ptr
=
p_kk_scene_action
;
kk_scene_action_info_ex_t
*
ptmp
=
NULL
;
if
(
ptr
==
NULL
){
...
...
@@ -524,7 +525,13 @@ int kk_scene_action_add(const char *gwdeviceCode,const char *sceneId,kk_scene_ac
info
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
info
,
MSG_DEVICE_CODE_STR
,
ptr
->
actionInfo
->
info
.
deviceCode
);
cJSON_AddStringToObject
(
info
,
MSG_SCENE_PROPERTYNAME
,
ptr
->
actionInfo
->
info
.
propertyName
);
cJSON_AddStringToObject
(
info
,
MSG_SCENE_PROPERTYVALUE
,
ptr
->
actionInfo
->
info
.
propertyValue
);
if
((
prtyObj
=
cJSON_Parse
(
ptr
->
actionInfo
->
info
.
propertyValue
))
==
NULL
){
cJSON_AddStringToObject
(
info
,
MSG_SCENE_PROPERTYVALUE
,
ptr
->
actionInfo
->
info
.
propertyValue
);
}
else
{
cJSON_AddItemToObject
(
info
,
MSG_SCENE_PROPERTYVALUE
,
prtyObj
);
}
cJSON_AddNumberToObject
(
info
,
MSG_SCENE_DELAY
,
ptr
->
actionInfo
->
info
.
delay
);
cJSON_AddNumberToObject
(
info
,
MSG_SCENE_EPNUM
,
ptr
->
actionInfo
->
info
.
epNum
);
cJSON_AddItemToArray
(
array
,
info
);
...
...
@@ -949,8 +956,20 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat
delay
=
cJSON_GetObjectItem
(
item
,
MSG_SCENE_DELAY
);
if
(
delay
==
NULL
)
return
FAIL_RETURN
;
int
idelay
=
delay
->
valueint
;
kk_subDev_set_action_by_productType
(
productType
->
valuestring
,
sceneId
,
propertyName
->
valuestring
,
propertyValue
->
valuestring
,
type
->
valuestring
,
idelay
);
if
(
propertyValue
->
type
==
cJSON_String
){
kk_subDev_set_action_by_productType
(
productType
->
valuestring
,
sceneId
,
propertyName
->
valuestring
,
propertyValue
->
valuestring
,
type
->
valuestring
,
idelay
);
}
else
{
printf
(
"1111
\r\n
"
);
char
*
str
=
cJSON_PrintUnformatted
(
propertyValue
);
printf
(
"222
\r\n
"
);
kk_subDev_set_action_by_productType
(
productType
->
valuestring
,
sceneId
,
propertyName
->
valuestring
,
str
,
type
->
valuestring
,
idelay
);
printf
(
"333
\r\n
"
);
free
(
str
);
printf
(
"4444
\r\n
"
);
}
}
else
{
memset
(
propertyValueStr
,
0x0
,
sizeof
(
propertyValueStr
));
...
...
@@ -989,8 +1008,20 @@ int kk_scene_parse_scene_action(const cJSON* str,const char *sceneId,int isUpdat
kk_scene_action_detail_t
info
=
{
0
};
memcpy
(
info
.
deviceCode
,
node
->
deviceCode
,
strlen
(
node
->
deviceCode
));
memcpy
(
info
.
propertyValue
,
propertyValueStr
,
strlen
(
propertyValueStr
));
memcpy
(
info
.
propertyName
,
propertyName
->
valuestring
,
strlen
(
propertyName
->
valuestring
));
if
(
propertyValue
->
type
==
cJSON_Number
){
memset
(
propertyValueStr
,
0
,
sizeof
(
propertyValueStr
));
snprintf
(
propertyValueStr
,
sizeof
(
propertyValueStr
),
"%d"
,
propertyValue
->
valueint
);
}
else
if
(
propertyValue
->
type
==
cJSON_String
){
snprintf
(
propertyValueStr
,
sizeof
(
propertyValueStr
),
"%s"
,
propertyValue
->
valuestring
);
}
else
{
char
*
str
=
cJSON_PrintUnformatted
(
propertyValue
);
snprintf
(
propertyValueStr
,
sizeof
(
propertyValueStr
),
"%s"
,
str
);
free
(
str
);
}
memcpy
(
info
.
propertyValue
,
propertyValueStr
,
strlen
(
propertyValueStr
));
info
.
epNum
=
iepnum
;
info
.
delay
=
idelay
;
...
...
@@ -2134,4 +2165,5 @@ int kk_scene_execute_quickpanel(const char *buttonId,char *deviceCode)
}
INFO_PRINT
(
"[%d]kk_scene_execute_quickpanel called!!!
\n
"
,
__LINE__
);
return
res
;
}
\ No newline at end of file
}
midware/tsl/tsl_handle/kk_tsl_common.h
View file @
a8ec59b6
...
...
@@ -26,7 +26,7 @@
#define DM_UTILS_UINT32_STRLEN (10)
#define DM_UTILS_UINT64_STRLEN (20)
#define DEVICE_PROPERTY_NAME_MAX (64+1)
#define DEVICE_PROPERTY_VALUE_MAX (
64
+1)
#define DEVICE_PROPERTY_VALUE_MAX (
255
+1)
#define DEVICE_PROPERTY_NUM_MAX (16)
#define KK_TSL_KEY_SCHEMA "schema"
...
...
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