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
7b21e73c
Commit
7b21e73c
authored
Nov 08, 2021
by
尹佳钦
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1108代码合并
parent
fd31b751
Changes
15
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
8280 additions
and
7205 deletions
+8280
-7205
application/klansdk/Serial.c
application/klansdk/Serial.c
+450
-448
application/klansdk/kk_data_handle.c
application/klansdk/kk_data_handle.c
+33
-0
application/klansdk/kk_data_mng.c
application/klansdk/kk_data_mng.c
+1
-1
application/klansdk/kk_lan_main.c
application/klansdk/kk_lan_main.c
+4
-0
application/klansdk/kk_lan_sync.c
application/klansdk/kk_lan_sync.c
+1614
-1456
application/klansdk/kk_lan_sync.h
application/klansdk/kk_lan_sync.h
+97
-76
application/klansdk/kk_lan_voice_panel.c
application/klansdk/kk_lan_voice_panel.c
+521
-463
application/klansdk/kk_lan_voice_panel.h
application/klansdk/kk_lan_voice_panel.h
+58
-30
application/klansdk/kk_lan_vp_ctrl.c
application/klansdk/kk_lan_vp_ctrl.c
+1275
-660
application/klansdk/kk_oldccu_msg.c
application/klansdk/kk_oldccu_msg.c
+2
-0
application/klansdk/kk_voice_panel_cfg.c
application/klansdk/kk_voice_panel_cfg.c
+1271
-1261
application/klansdk/kk_voice_panel_handle.c
application/klansdk/kk_voice_panel_handle.c
+1816
-1628
application/klansdk/kk_voice_panel_handle.h
application/klansdk/kk_voice_panel_handle.h
+100
-92
application/klansdk/uart_proto.c
application/klansdk/uart_proto.c
+895
-947
application/klansdk/uart_proto.h
application/klansdk/uart_proto.h
+143
-143
No files found.
application/klansdk/Serial.c
View file @
7b21e73c
...
...
@@ -245,6 +245,7 @@ void eSerial_start()
#endif
serial_fd
=
devOpen
(
serialDev
);
printf
(
"------------------------------------>serial_fd=%d
\n
"
,
serial_fd
);
}
/***********************************************************
...
...
@@ -290,7 +291,8 @@ teSerial_Status eSerial_Read(unsigned char *data)
}
else
{
printf
(
"Serial read: %d
\n
"
,
res
);
printf
(
"Serial read: %d,serial_fd=%d
\n
"
,
res
,
serial_fd
);
if
(
res
==
0
)
{
...
...
application/klansdk/kk_data_handle.c
View file @
7b21e73c
...
...
@@ -374,6 +374,22 @@ int kk_data_handle(cJSON *json,int sockfd)
kk_zb_devs_hw_ack
(
sockfd
,
conditions
);
}
else
if
(
strcmp
(
opcode
->
valuestring
,
GET_HISTORY_ALARM_LOG
)
==
0
){
kk_handle_get_history_info
();
}
else
if
(
strcmp
(
opcode
->
valuestring
,
"SOUND_VAL"
)
==
0
){
arg
=
cJSON_GetObjectItem
(
json
,
ARG_STRING
);
int
val
=
atoi
(
arg
->
valuestring
);
if
(
val
>
100
){
val
=
100
;
}
else
if
(
val
<
0
){
val
=
0
;
}
}
else
if
(
strcmp
(
opcode
->
valuestring
,
"SOUND_SWITCH"
)
==
0
){
arg
=
cJSON_GetObjectItem
(
json
,
ARG_STRING
);
if
(
strcmp
(
arg
->
valuestring
,
"on"
)){
}
else
if
(
strcmp
(
arg
->
valuestring
,
"off"
)){
}
}
else
if
(
strcmp
(
opcode
->
valuestring
,
DEL_HISTORY_ALARM_LOG
)
==
0
){
cJSON
*
key
=
cJSON_GetObjectItem
(
json
,
"arg"
);
if
(
key
!=
NULL
){
...
...
@@ -495,8 +511,19 @@ int is_arming_status_notify(cJSON *payload)
return
-
1
;
}
static
void
kk_dev_node_onoffline_handle
(
const
char
*
deviceCode
,
int
online
)
{
kk_map_dev_node_t
*
node
=
NULL
;
if
(
kk_map_dev_search_by_deviceCode
(
deviceCode
,
&
node
)
!=
0
){
return
;
}
node
->
online_status
=
(
online
==
1
)
?
1
:
0
;
}
static
int
kk_device_onoffline_handle
(
cJSON
*
payload
,
int
online
)
{
if
(
payload
==
NULL
){
return
-
1
;
}
...
...
@@ -504,6 +531,9 @@ static int kk_device_onoffline_handle(cJSON *payload,int online)
if
(
params
==
NULL
)
return
-
1
;
cJSON
*
deviceCode
=
cJSON_GetObjectItem
(
params
,
"deviceCode"
);
if
(
deviceCode
==
NULL
)
return
-
1
;
kk_dev_node_onoffline_handle
(
deviceCode
->
valuestring
,
online
);
cJSON
*
hw_info
=
kk_zb_dev_hw_info_build_by_deviceCode
(
0
,
deviceCode
->
valuestring
,
online
);
cJSON
*
root
;
cJSON
*
array
=
cJSON_CreateArray
();
...
...
@@ -515,6 +545,9 @@ static int kk_device_onoffline_handle(cJSON *payload,int online)
cJSON_AddItemToObject
(
root
,
"arg"
,
array
);
send_msg_to_module
(
root
);
cJSON_Delete
(
root
);
return
0
;
}
static
int
kk_del_historyalarm_handle
(
cJSON
*
payload
)
...
...
application/klansdk/kk_data_mng.c
View file @
7b21e73c
...
...
@@ -141,7 +141,7 @@ static kk_map_dev_node_t *kk_map_dev_node_create(const char *deviceCode,const ch
memcpy
(
node
->
deviceCode
,
deviceCode
,
strlen
(
deviceCode
));
memcpy
(
node
->
productCode
,
productCode
,
strlen
(
productCode
));
node
->
online_status
=
(
strcmp
(
onlineStatus
,
"1"
)
==
0
)
?
1
:
0
;
debug_log
(
LOG_ALERT_LEVEL
,
"[add node]node->deviceCode=%s
\n
"
,
node
->
deviceCode
);
debug_log
(
LOG_ALERT_LEVEL
,
"[add node]node->deviceCode=%s
,node->online_status=%d
\n
"
,
node
->
deviceCode
,
node
->
online_status
);
memcpy
(
node
->
opearteType
,
optype
->
valuestring
,
strlen
(
optype
->
valuestring
));
node
->
channelNum
=
channel
->
valueint
;
...
...
application/klansdk/kk_lan_main.c
View file @
7b21e73c
...
...
@@ -157,6 +157,10 @@ int kk_sync_timer_is_running(void)
int
main
(
int
argc
,
char
*
argv
[])
{
int
ret
=
0
;
...
...
application/klansdk/kk_lan_sync.c
View file @
7b21e73c
...
...
@@ -971,6 +971,152 @@ char *speedMap[] = {
"UNKONWN"
,
"UNKONWN"
,
};
static
INDOOR_AIR_DEV
indoor_air_status
[
MAX_AC_GW_AIR_NUM
];
int
indoor_airstatus_table_match_item
(
const
char
*
deviceCode
)
{
int
i
;
for
(
i
=
0
;
i
<
MAX_AC_GW_AIR_NUM
;
i
++
){
if
(
strcmp
(
deviceCode
,
indoor_air_status
[
i
].
deviceCode
)
==
0
){
return
i
;
}
}
return
-
1
;
}
int
indoor_airstatus_table_find_empty_item
(
void
)
{
int
i
;
for
(
i
=
0
;
i
<
MAX_AC_GW_AIR_NUM
;
i
++
){
if
(
strlen
(
indoor_air_status
[
i
].
deviceCode
)
==
0
){
return
i
;
}
}
return
-
1
;
}
int
indoor_airstatus_table_match_status_item
(
int
epNum
,
INDOOR_AIR_STATUS
*
status
)
{
int
i
;
INDOOR_AIR_STATUS
*
ptr
=
status
;
for
(
i
=
0
;
i
<
MAX_AC_INDOOR_AIR_NUM
;
i
++
,
ptr
++
){
if
(
ptr
->
epNum
==
epNum
){
return
i
;
}
}
return
-
1
;
}
int
indoor_airstatus_table_find_empty_status_item
(
INDOOR_AIR_STATUS
*
status
)
{
int
i
;
INDOOR_AIR_STATUS
*
ptr
=
status
;
for
(
i
=
0
;
i
<
MAX_AC_INDOOR_AIR_NUM
;
i
++
,
ptr
++
){
if
(
ptr
->
epNum
==
0
){
return
i
;
}
}
return
-
1
;
}
int
indoor_airstatus_table_insert_item
(
const
char
*
deviceCode
,
int
epNum
,
int
online
,
int
PowerSwitch
,
double
Temperature
,
int
WindSpeed
,
int
WorkMode
)
{
if
(
PowerSwitch
==
0
&&
Temperature
==
0
&&
WindSpeed
==
0
&&
WorkMode
==
0
){
return
-
1
;
}
int
ix
=
indoor_airstatus_table_match_item
(
deviceCode
);
if
(
ix
!=-
1
){
int
ix2
=
indoor_airstatus_table_match_status_item
(
epNum
,
indoor_air_status
[
ix
].
status
);
if
(
ix2
!=-
1
){
indoor_air_status
[
ix
].
status
[
ix2
].
online
=
online
;
indoor_air_status
[
ix
].
status
[
ix2
].
PowerSwitch
=
PowerSwitch
;
indoor_air_status
[
ix
].
status
[
ix2
].
Temperature
=
Temperature
;
indoor_air_status
[
ix
].
status
[
ix2
].
WindSpeed
=
WindSpeed
;
indoor_air_status
[
ix
].
status
[
ix2
].
WorkMode
=
WorkMode
;
debug_log
(
LOG_NOTICE_LEVEL
,
"[update] ix=%d,ix2=%d
\n
"
,
ix
,
ix2
);
}
else
{
ix2
=
indoor_airstatus_table_find_empty_status_item
(
indoor_air_status
[
ix
].
status
);
if
(
ix2
==-
1
){
debug_log
(
LOG_WARNING_LEVEL
,
"table full!!!
\n
"
);
return
-
1
;
}
debug_log
(
LOG_NOTICE_LEVEL
,
"[add] epNum=%d,ix2=%d
\n
"
,
epNum
,
ix2
);
indoor_air_status
[
ix
].
status
[
ix2
].
epNum
=
epNum
;
indoor_air_status
[
ix
].
status
[
ix2
].
online
=
online
;
indoor_air_status
[
ix
].
status
[
ix2
].
PowerSwitch
=
PowerSwitch
;
indoor_air_status
[
ix
].
status
[
ix2
].
Temperature
=
Temperature
;
indoor_air_status
[
ix
].
status
[
ix2
].
WindSpeed
=
WindSpeed
;
indoor_air_status
[
ix
].
status
[
ix2
].
WorkMode
=
WorkMode
;
}
}
else
{
ix
=
indoor_airstatus_table_find_empty_item
();
if
(
ix
==-
1
){
debug_log
(
LOG_WARNING_LEVEL
,
"table full!!!
\n
"
);
return
-
1
;
}
debug_log
(
LOG_NOTICE_LEVEL
,
"[add] deviceCode=%s
\n
"
,
deviceCode
);
snprintf
(
indoor_air_status
[
ix
].
deviceCode
,
PRODUCT_CODE_LEN
,
"%s"
,
deviceCode
);
indoor_air_status
[
ix
].
status
[
0
].
epNum
=
epNum
;
indoor_air_status
[
ix
].
status
[
0
].
online
=
online
;
indoor_air_status
[
ix
].
status
[
0
].
PowerSwitch
=
PowerSwitch
;
indoor_air_status
[
ix
].
status
[
0
].
Temperature
=
Temperature
;
indoor_air_status
[
ix
].
status
[
0
].
WindSpeed
=
WindSpeed
;
indoor_air_status
[
ix
].
status
[
0
].
WorkMode
=
WorkMode
;
}
return
0
;
}
INDOOR_AIR_STATUS
*
indoor_airstatus_table_find_item
(
const
char
*
deviceCode
,
int
epNum
)
{
int
ix
=
indoor_airstatus_table_match_item
(
deviceCode
);
if
(
ix
!=-
1
){
int
ix2
=
indoor_airstatus_table_match_status_item
(
epNum
,
indoor_air_status
[
ix
].
status
);
if
(
ix2
!=-
1
){
return
&
indoor_air_status
[
ix
].
status
[
ix2
];
}
}
return
NULL
;
}
int
indoor_airstatus_table_delete_item
(
const
char
*
deviceCode
)
{
debug_log
(
LOG_NOTICE_LEVEL
,
"[delete] deviceCode=%s
\n
"
,
deviceCode
);
int
ix
=
indoor_airstatus_table_match_item
(
deviceCode
);
if
(
ix
!=-
1
){
memset
(
indoor_air_status
[
ix
].
deviceCode
,
0
,
PRODUCT_CODE_LEN
);
for
(
int
i
=
0
;
i
<
MAX_AC_INDOOR_AIR_NUM
;
i
++
){
memset
(
&
indoor_air_status
[
ix
].
status
[
i
],
0
,
sizeof
(
INDOOR_AIR_STATUS
));
}
}
else
{
return
-
1
;
}
return
0
;
}
int
kk_send_indoorAir_status
(
cJSON
*
info
,
const
char
*
deviceCode
)
{
char
epStr
[
4
]
=
{
0
};
...
...
@@ -1011,6 +1157,8 @@ int kk_send_indoorAir_status(cJSON *info,const char *deviceCode)
cJSON_AddStringToObject
(
arg
,
"runModel"
,
modeMap
[
WorkMode
->
valueint
]);
cJSON_AddItemToObject
(
root
,
"arg"
,
arg
);
indoor_airstatus_table_insert_item
(
deviceCode
,
atoi
(
epNum
->
valuestring
),
1
,
PowerSwitch
->
valueint
,
Temperature
->
valuedouble
,
WindSpeed
->
valueint
,
WorkMode
->
valueint
);
send_msg_to_module
(
root
);
cJSON_Delete
(
root
);
return
0
;
...
...
@@ -1052,6 +1200,7 @@ cJSON *kk_sync_central_ac_to_sdk(cJSON *root,cJSON *data)
kk_creater_nodeid
(
deviceCode
->
valuestring
,
1
,
ac_gw_nodeid
);
cJSON
*
properties
=
cJSON_GetObjectItem
(
subitem
,
"properties"
);
cJSON
*
onlineStatus
=
cJSON_GetObjectItem
(
subitem
,
"onlineStatus"
);
cJSON
*
indoorItem
=
cJSON_CreateObject
();
kk_get_ac_indoor_info_by_deviceCode
(
data
,
deviceCode
->
valuestring
,
roomId
,
NULL
,
1
);
...
...
@@ -1065,6 +1214,8 @@ cJSON *kk_sync_central_ac_to_sdk(cJSON *root,cJSON *data)
cJSON
*
epsAry
=
cJSON_GetObjectItem
(
properties
,
"eps"
);
cJSON
*
EpTotal
=
cJSON_GetObjectItem
(
properties
,
"EpTotal"
);
int
epsize
=
cJSON_GetArraySize
(
epsAry
);
g_indoor_item
=
(
CENTRAL_AC_INDOOR_ITEM
*
)
malloc
(
sizeof
(
CENTRAL_AC_INDOOR_ITEM
)
*
epsize
);
if
(
g_indoor_item
==
NULL
){
...
...
@@ -1097,6 +1248,13 @@ cJSON *kk_sync_central_ac_to_sdk(cJSON *root,cJSON *data)
memcpy
(
g_indoor_item
[
k
].
ac_gw_status
.
speed
,
speedMap
[
WindSpeed
->
valueint
],
strlen
(
speedMap
[
WindSpeed
->
valueint
]));
cJSON
*
WorkMode
=
cJSON_GetObjectItem
(
infoItem
,
"WorkMode"
);
memcpy
(
g_indoor_item
[
k
].
ac_gw_status
.
mode
,
modeMap
[
WorkMode
->
valueint
],
strlen
(
modeMap
[
WorkMode
->
valueint
]));
cJSON
*
epNum
=
cJSON_GetObjectItem
(
infoItem
,
"epNum"
);
indoor_airstatus_table_insert_item
(
deviceCode
->
valuestring
,
epNum
->
valueint
,
onlineStatus
->
valueint
,
PowerSwitch
->
valueint
,
Temperature
->
valuedouble
,
WindSpeed
->
valueint
,
WorkMode
->
valueint
);
debug_log
(
LOG_EMERG_LEVEL
,
"mark!!!
\n
"
);
}
kk_create_new_central_ac
(
gwDeviceCode
->
valuestring
,
deviceCode
->
valuestring
,
nodeid
);
}
...
...
application/klansdk/kk_lan_sync.h
View file @
7b21e73c
...
...
@@ -3,6 +3,8 @@
#include "cJSON.h"
#define MAX_AC_GW_AIR_NUM 5
#define MAX_AC_INDOOR_AIR_NUM 16
#define AIR_AC_INDOOR_ID_SIZE 8
#define AIR_AC_INDOOR_ROOM_ID_SIZE 24
...
...
@@ -46,6 +48,23 @@ typedef struct{
}
SYN_SCENE_ITEM
;
typedef
struct
{
int
epNum
;
int
online
;
int
PowerSwitch
;
double
Temperature
;
int
WindSpeed
;
int
WorkMode
;
}
INDOOR_AIR_STATUS
;
typedef
struct
{
char
deviceCode
[
PRODUCT_CODE_LEN
];
INDOOR_AIR_STATUS
status
[
MAX_AC_INDOOR_AIR_NUM
];
}
INDOOR_AIR_DEV
;
cJSON
*
kk_get_raw_sync_data
(
cJSON
*
payload
);
...
...
@@ -64,7 +83,9 @@ cJSON * val_conver_new2old(cJSON *newccuItem,cJSON *oldccuItem,int syn_type);
int
indoor_airstatus_table_insert_item
(
const
char
*
deviceCode
,
int
epNum
,
int
online
,
int
PowerSwitch
,
double
Temperature
,
int
WindSpeed
,
int
WorkMode
);
INDOOR_AIR_STATUS
*
indoor_airstatus_table_find_item
(
const
char
*
deviceCode
,
int
epNum
);
int
indoor_airstatus_table_delete_item
(
const
char
*
deviceCode
);
...
...
application/klansdk/kk_lan_voice_panel.c
View file @
7b21e73c
...
...
@@ -96,9 +96,14 @@ typedef struct {
}
vpCFGInfo
;
typedef
struct
{
int
state
;
int
set_time_flag
;
int
get_ver_flag
;
int
ota_update_flag
;
int
file_update_flag
;
vpCFGInfo
cfg_info
;
int
updateFlag
;
}
VP_MANAGE
;
...
...
@@ -185,36 +190,20 @@ static int _vp_config_file_version_load(void)
return
1
;
}
void
kk_vp_set_updateFlag
(
int
flag
)
{
vp_mag
.
updateFlag
=
(
flag
!=
0
)
?
1
:
0
;
}
void
kk_v
p_config_file_update
(
void
)
void
kk_v
oice_update_config_file
(
void
)
{
if
(
vp_mag
.
updateFlag
==
0
){
return
;
}
kk_vp_config_file_update_stop
(
vp_mag
.
cfg_info
.
f_ver
);
if
(
vp_mag
.
state
==
UPDATING_8009_CONFIG_FILE_INFO
||
vp_mag
.
state
==
START_8009_CONFIG_FILE_UPDATE
){
kk_vp_set_state_machine
(
STOP_8009_CONFIG_FILE_UPDATE
);
}
else
{
kk_vp_set_state_machine
(
START_8009_CONFIG_FILE_UPDATE
);
}
kk_vp_config_file_update_start
(
vp_mag
.
cfg_info
.
next_ver
);
kk_vp_set_updateFlag
(
0
);
vp_mag
.
file_update_flag
=
1
;
}
void
kk_vp_set_state_machine
(
int
state
)
{
if
(
vp_mag
.
state
!=
state
){
INFO_PRINT
(
"[vp state machine]%d->%d
\n
"
,
vp_mag
.
state
,
state
);
vp_mag
.
state
=
state
;
}
}
int
kk_vp_get_config_file_version
(
void
)
{
...
...
@@ -244,8 +233,9 @@ void kk_vp_cfg_info_check(uint32_t f_ver,uint32_t f_size,uint32_t crc32)
printf
(
"[VP]File Version=%08x,File Size=%08x,CRC32=%08x
\n
"
,
f_ver
,
f_size
,
crc32
);
printf
(
"[LAN]File Version=%08x,File Size=%08x,CRC32=%08x
\n
"
,
vp_mag
.
cfg_info
.
f_ver
,
vp_mag
.
cfg_info
.
f_size
,
vp_mag
.
cfg_info
.
crc32
);
kk_vp_set_updateFlag
(
1
);
printf
(
"[%s][%d]update config file.
\n
"
,
__FUNCTION__
,
__LINE__
);
debug_log
(
LOG_EMERG_LEVEL
,
"-------------------->start update config file<------------------
\n
"
);
kk_voice_update_config_file
();
}
}
...
...
@@ -254,13 +244,29 @@ void kk_vp_update_result_check(uint8_t status,uint32_t f_ver)
if
(
status
==
0
&&
(
vp_mag
.
cfg_info
.
f_ver
==
f_ver
)
){
vp_mag
.
cfg_info
.
next_ver
=
vp_mag
.
cfg_info
.
f_ver
+
1
;
printf
(
"[cfg ver]File Version=%08x
\n
"
,
vp_mag
.
cfg_info
.
f_ver
);
kk_vp_set_state_machine
(
GET_8009_CONFIG_FILE_INFO
);
}
else
{
kk_vp_set_updateFlag
(
1
);
printf
(
"[%s][%d]update config file.
\n
"
,
__FUNCTION__
,
__LINE__
);
debug_log
(
LOG_EMERG_LEVEL
,
"-------------------->start update config file again<------------------
\n
"
);
kk_voice_update_config_file
();
}
}
void
kk_voice_reset_ver_flag
(
void
)
{
vp_mag
.
get_ver_flag
=
0
;
vp_mag
.
ota_update_flag
=
0
;
}
void
kk_voice_set_time_flag
(
void
)
{
vp_mag
.
set_time_flag
=
1
;
}
void
kk_get_voice_version
(
void
)
{
debug_log
(
LOG_INFO_LEVEL
,
"mark!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
\n
"
);
vp_mag
.
get_ver_flag
=
1
;
}
...
...
@@ -270,13 +276,11 @@ void kk_vp_update_result_check(uint8_t status,uint32_t f_ver)
int
kk_vp_config_file_info_check
(
int
f_ver
,
int
f_size
,
int
crc32
)
{
kk_vp_set_state_machine
(
UPDATING_8009_CONFIG_FILE_INFO
);
if
(
vp_mag
.
cfg_info
.
f_ver
==
f_ver
&&
vp_mag
.
cfg_info
.
f_size
==
f_size
&&
vp_mag
.
cfg_info
.
crc32
==
crc32
){
kk_vp_set_state_machine
(
UPDATING_8009_CONFIG_FILE_INFO
);
return
1
;
}
...
...
@@ -301,6 +305,8 @@ void kk_voice_ota_mtu_set(uint16_t mtu)
void
kk_vp_manage_init
(
void
)
{
kk_voice_ota_mtu_set
(
KK_VOICE_OTA_MTU
);
vp_scene_id_map_load
();
_vp_config_file_version_load
();
vp_mag
.
cfg_info
.
f_size
=
_vp_get_cfg_file_size
();
...
...
@@ -310,63 +316,80 @@ void kk_vp_manage_init(void)
void
*
kk_vp_manage_thread
(
void
*
arg
)
{
INFO_PRINT
(
"[%s] start...
\n
"
,
__FUNCTION__
);
usleep
(
100
*
1000
);
kk_vp_manage_init
();
while
(
1
)
{
kk_vp_config_file_update
();
if
(
vp_mag
.
file_update_flag
==
1
||
vp_mag
.
ota_update_flag
==
1
){
sleep
(
1
);
continue
;
}
kk_vp_get_config_file_info
();
sleep
(
60
*
30
);
}
switch
(
vp_mag
.
state
){
case
GET_8009_SNAPSHOOT_STATE
:
kk_vp_get_8009_snapshoot
();
kk_vp_get_ota_file_info
();
ERROR_PRINT
(
"[%s]thread end...
\n
"
,
__FUNCTION__
);
return
0
;
}
sleep
(
5
);
break
;
static
void
*
kk_voice_ctrl_status_thread
(
void
*
arg
)
{
debug_log
(
LOG_INFO_LEVEL
,
"[%s] start...
\n
"
,
__FUNCTION__
);
case
SET_8009_SYSTEM
:
kk_vp_set_8009_system_time
();
sleep
(
5
);
break
;
case
START_8009_CONFIG_FILE_UPDATE
:
#define SET_8009_TIME (60*60)
kk_vp_config_file_update_start
(
vp_mag
.
cfg_info
.
next_ver
);
kk_vp_set_state_machine
(
UPDATING_8009_CONFIG_FILE_INFO
);
break
;
case
UPDATING_8009_CONFIG_FILE_INFO
:
//debug_log(LOG_INFO,"updating...\n");
static
time_t
set_time
;
while
(
1
)
{
int
delay
=
1
;
time_t
curTime
=
time
(
NULL
);
if
(
vp_mag
.
get_ver_flag
==
0
){
debug_log
(
LOG_DEBUG_LEVEL
,
"get 8009 snapshoot
\n
"
);
kk_vp_get_8009_snapshoot
();
sleep
(
2
);
continue
;
}
if
(
vp_mag
.
set_time_flag
==
0
){
struct
tm
*
c
=
localtime
(
&
curTime
);
if
(
c
->
tm_year
!=
70
){
set_time
=
curTime
;
debug_log
(
LOG_NOTICE_LEVEL
,
"set 8009 system time
\n
"
);
kk_vp_set_8009_system_time
();
}
sleep
(
2
);
continue
;
}
if
(
vp_mag
.
file_update_flag
==
1
||
vp_mag
.
ota_update_flag
==
1
){
sleep
(
1
);
//todo :超时取消
break
;
continue
;
}
case
STOP_8009_CONFIG_FILE_UPDATE
:
kk_vp_config_file_update_stop
(
vp_mag
.
cfg_info
.
f_ver
);
if
(
vp_mag
.
updateFlag
==
1
){
kk_vp_set_state_machine
(
UPDATING_8009_CONFIG_FILE_INFO
);
}
else
{
kk_vp_set_state_machine
(
GET_8009_CONFIG_FILE_INFO
);
if
((
curTime
-
set_time
)
>=
SET_8009_TIME
){
set_time
=
curTime
;
debug_log
(
LOG_NOTICE_LEVEL
,
"[timing %ds] set 8009 system time
\n
"
,
SET_8009_TIME
);
kk_vp_set_8009_system_time
();
}
sleep
(
3
);
break
;
case
GET_8009_CONFIG_FILE_INFO
:
kk_vp_get_config_file_info
();
sleep
(
15
);
break
;
default:
break
;
if
(
delay
){
usleep
(
100
*
1000
);
}
usleep
(
50
*
1000
);
}
ERROR_PRINT
(
"[%s]thread end...
\n
"
,
__FUNCTION__
);
return
0
;
}
void
kk_voice_panel_uart_dev_chose
(
int
argc
,
char
*
argv
[])
{
int
flag
=
0
;
...
...
@@ -407,12 +430,43 @@ static int kk_vp_cfg_file_dir_create(void){
return
system
(
cmd
);
}
static
pthread_mutex_t
voice_uart_mutex
;
void
voice_uart_lock
(
void
)
{
pthread_mutex_lock
(
&
voice_uart_mutex
);
}
void
voice_uart_unlock
(
void
)
{
pthread_mutex_unlock
(
&
voice_uart_mutex
);
}
void
kk_voice_ota_start
(
char
*
in
)
{
char
file
[
128
]
=
{
0
};
char
*
ptr
=
strstr
(
in
,
"_"
);
if
(
ptr
!=
NULL
)
{
snprintf
(
file
,
sizeof
(
file
),
"/data/OTA/%s"
,
ptr
+
1
);
}
else
{
snprintf
(
file
,
sizeof
(
file
),
"/data/OTA/%s"
,
in
);
}
debug_log
(
LOG_WARNING_LEVEL
,
"%s.
\n
"
,
file
);
kk_vp_ota_file_update_start
(
file
);
}
int
kk_voice_panel_init
(
int
argc
,
char
*
argv
[])
{
size_t
s
=
1500
;
pthread_t
uart_tid
=
0
;
pthread_t
mag_tid
=
0
;
pthread_t
t_tid
=
0
;
pthread_attr_t
attr
;
pthread_attr_init
(
&
attr
);
...
...
@@ -443,6 +497,10 @@ int kk_voice_panel_init(int argc, char* argv[])
return
-
3
;
}
if
((
pthread_create
(
&
t_tid
,
NULL
,
kk_voice_ctrl_status_thread
,
NULL
))
!=
0
)
{
return
-
4
;
}
return
0
;
}
...
...
application/klansdk/kk_lan_voice_panel.h
View file @
7b21e73c
...
...
@@ -8,23 +8,51 @@
int
kk_voice_panel_init
(
int
argc
,
char
*
argv
[]);
#define GET_8009_SNAPSHOOT_STATE 0
#define SET_8009_SYSTEM 1
#define START_8009_CONFIG_FILE_UPDATE 2
#define UPDATING_8009_CONFIG_FILE_INFO 3
#define STOP_8009_CONFIG_FILE_UPDATE 4
#define GET_8009_CONFIG_FILE_INFO 5
#define KK_VOICE_OTA_MTU 128
void
kk_vp_set_state_machine
(
int
state
);
void
kk_vp_set_config_file_version
(
int
ver
);
int
kk_vp_config_file_info_check
(
int
f_ver
,
int
f_size
,
int
crc32
);
void
kk_vp_update_result_check
(
uint8_t
status
,
uint32_t
f_ver
);
void
kk_vp_set_config_file_version
(
int
ver
);
void
kk_vp_cfg_info_check
(
uint32_t
f_ver
,
uint32_t
f_size
,
uint32_t
crc32
);
void
kk_vp_cfg_info_set
(
uint32_t
f_ver
,
uint32_t
f_size
,
uint32_t
crc32
);
void
kk_vp_set_updateFlag
(
int
flag
);
void
kk_voice_ota_mtu_set
(
uint16_t
mtu
);
void
voice_uart_lock
(
void
);
void
voice_uart_unlock
(
void
);
void
kk_voice_ota_start
(
char
*
in
);
int
kk_voice_exit_factory_mode
(
void
);
void
kk_voice_ota_mtu_set
(
uint16_t
mtu
);
void
kk_voice_update_config_file
(
void
);
void
kk_voice_reset_ver_flag
(
void
);
void
kk_get_voice_version
(
void
);
#endif
application/klansdk/kk_lan_vp_ctrl.c
View file @
7b21e73c
...
...
@@ -3,8 +3,9 @@
#include "kk_lan_debug.h"
#include "cJSON.h"
#include "kk_voice_panel_cfg.h"
#include "kk_lan_sync.h"
typedef
cJSON
*
(
*
dev_handle_func
)(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
);
typedef
cJSON
*
(
*
dev_handle_func
)(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
,
kk_map_dev_node_t
*
node
);
typedef
struct
{
const
int
*
pidAry
;
...
...
@@ -12,15 +13,15 @@ typedef struct {
dev_handle_func
func
;
}
DEV_PID_S
;
static
cJSON
*
air_conditioner_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
);
static
cJSON
*
air_conditioner_dev_handle
(
const
char
*
deviceCode
,
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
cJSON
*
underfloor_heating_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
);
static
cJSON
*
dimming_light_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
,
kk_map_dev_node_t
*
node
);
static
cJSON
*
curtain_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
,
kk_map_dev_node_t
*
node
);
static
cJSON
*
outlet_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
,
kk_map_dev_node_t
*
node
);
static
cJSON
*
freshAir_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
,
kk_map_dev_node_t
*
node
);
static
cJSON
*
fanCoilSwitch_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
,
kk_map_dev_node_t
*
node
);
static
cJSON
*
underfloor_heating_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
,
kk_map_dev_node_t
*
node
);
static
cJSON
*
dimming_light_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
,
kk_map_dev_node_t
*
node
);
static
const
int
air_conditioner_dev_pid
[]
=
AIR_CONDITIONER_DEV_PID
;
...
...
@@ -63,9 +64,40 @@ static dev_handle_func dev_pid_dispatch(int pid)
return
NULL
;
}
//****************************************************************************
cJSON
*
PowerSwitch_msg_build
(
int
ep
,
int
onoff
)
static
cJSON
*
get_value
(
kk_map_dev_node_t
*
node
,
const
char
*
key
)
{
cJSON
*
value
=
NULL
;
int
i
,
size
;
if
(
key
==
NULL
||
node
==
NULL
||
node
->
newccu
==
NULL
||
node
->
newccu
->
type
!=
cJSON_Array
){
return
NULL
;
}
size
=
cJSON_GetArraySize
(
node
->
newccu
);
for
(
i
=
0
;
i
<
size
;
i
++
){
cJSON
*
obj
=
cJSON_GetArrayItem
(
node
->
newccu
,
i
);
cJSON
*
id
=
cJSON_GetObjectItem
(
obj
,
"identifier"
);
if
(
id
==
NULL
){
continue
;
}
if
(
strcmp
(
id
->
valuestring
,
key
)
==
0
){
value
=
cJSON_GetObjectItem
(
obj
,
"value"
);
return
value
;
}
}
return
NULL
;
}
//****************************************************************************
cJSON
*
air_conditioner_dev_powerswitch_msg_build
(
int
ep
,
int
onoff
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
...
...
@@ -77,7 +109,7 @@ cJSON *PowerSwitch_msg_build(int ep,int onoff)
return
params
;
}
static
cJSON
*
windSpeed_msg_build
(
int
ep
,
int
level
)
static
cJSON
*
air_conditioner_dev_windspeed_msg_build
(
int
ep
,
int
level
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
...
...
@@ -86,12 +118,13 @@ static cJSON *windSpeed_msg_build(int ep,int level)
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"PowerSwitch"
,
1
);
cJSON_AddNumberToObject
(
params
,
"WindSpeed"
,
level
);
return
params
;
}
static
cJSON
*
workMode_msg_build
(
int
ep
,
int
mode
)
static
cJSON
*
air_conditioner_dev_workmode_msg_build
(
int
ep
,
int
mode
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
...
...
@@ -100,14 +133,12 @@ static cJSON *workMode_msg_build(int ep,int mode)
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"PowerSwitch"
,
1
);
cJSON_AddNumberToObject
(
params
,
"WorkMode"
,
mode
);
return
params
;
}
static
cJSON
*
temperature_msg_build
(
int
ep
,
int
tmp
)
static
cJSON
*
air_conditioner_dev_temperature_msg_build
(
int
ep
,
int
tmp
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
...
...
@@ -116,206 +147,367 @@ static cJSON *temperature_msg_build(int ep,int tmp)
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"PowerSwitch"
,
1
);
cJSON_AddNumberToObject
(
params
,
"Temperature"
,
tmp
);
return
params
;
}
static
cJSON
*
ColorTemperature_msg_build
(
int
ep
,
int
val
)
static
cJSON
*
air_conditioner_dev_handle
(
const
char
*
deviceCode
,
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
memset
(
epNum
,
0
,
sizeof
(
epNum
));
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
uint8_t
skill_type
=
arg
[
0
];
cJSON
*
param
=
NULL
;
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"ColorTemperature"
,
val
);
switch
(
skill_type
){
case
VP_CTRL_OPEN
:{
debug_log
(
LOG_INFO_LEVEL
,
"[OnOff] on
\n
"
);
param
=
air_conditioner_dev_powerswitch_msg_build
(
ep
,
1
);
}
break
;
return
params
;
}
case
VP_CTRL_CLOSE
:{
debug_log
(
LOG_INFO_LEVEL
,
"[OnOff] off
\n
"
);
param
=
air_conditioner_dev_powerswitch_msg_build
(
ep
,
0
);
}
break
;
static
cJSON
*
Brightness_msg_build
(
int
ep
,
int
val
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
case
VP_CTRL_WINDSPEE_SET
:{
if
(
arg_len
!=
3
||
arg
[
1
]
!=
0x20
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
memset
(
epNum
,
0
,
sizeof
(
epNum
));
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
uint8_t
windspeed
=
arg
[
2
];
debug_log
(
LOG_INFO_LEVEL
,
"[windspeed] %d
\n
"
,
windspeed
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"Brightness"
,
val
);
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_LOW
){
param
=
air_conditioner_dev_windspeed_msg_build
(
ep
,
2
);
}
else
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_MID
){
param
=
air_conditioner_dev_windspeed_msg_build
(
ep
,
3
);
}
else
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_HIGH
){
param
=
air_conditioner_dev_windspeed_msg_build
(
ep
,
4
);
}
else
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_AUTO
){
param
=
air_conditioner_dev_windspeed_msg_build
(
ep
,
0
);
}
}
break
;
return
params
;
}
case
VP_CTRL_MODE
:{
if
(
arg_len
!=
3
||
arg
[
1
]
!=
0x20
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
uint8_t
mode
=
arg
[
2
];
debug_log
(
LOG_INFO_LEVEL
,
"[mode] %d
\n
"
,
mode
);
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_COLD
){
param
=
air_conditioner_dev_workmode_msg_build
(
ep
,
1
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_HEATING
){
param
=
air_conditioner_dev_workmode_msg_build
(
ep
,
2
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_FAN
){
param
=
air_conditioner_dev_workmode_msg_build
(
ep
,
3
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_DEHUM
){
param
=
air_conditioner_dev_workmode_msg_build
(
ep
,
4
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_AUTO
){
param
=
air_conditioner_dev_workmode_msg_build
(
ep
,
0
);
}
}
break
;
case
VP_CTRL_TMP_SET
:{
if
(
arg_len
!=
3
||
arg
[
1
]
!=
0x20
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
uint8_t
tmp
=
arg
[
2
];
debug_log
(
LOG_INFO_LEVEL
,
"[tmp] %d
\n
"
,
tmp
);
if
(
tmp
>
30
){
tmp
=
30
;
}
else
if
(
tmp
<
17
){
tmp
=
17
;
}
param
=
air_conditioner_dev_temperature_msg_build
(
ep
,
tmp
);
}
break
;
case
VP_CTRL_WINDSPEE_UP
:{
if
(
arg
[
1
]
!=
0x42
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
INDOOR_AIR_STATUS
*
pStatus
=
indoor_airstatus_table_find_item
(
deviceCode
,
ep
);
if
(
pStatus
==
NULL
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] value err
\n
"
);
return
NULL
;
}
if
(
pStatus
->
online
!=
1
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] offline
\n
"
);
return
NULL
;
}
debug_log
(
LOG_INFO_LEVEL
,
"[pStatus->WindSpeed] %d
\n
"
,
pStatus
->
WindSpeed
);
debug_log
(
LOG_INFO_LEVEL
,
"[WindSpeed] inc
\n
"
);
if
(
pStatus
->
WindSpeed
==
2
){
param
=
air_conditioner_dev_windspeed_msg_build
(
ep
,
3
);
}
else
if
(
pStatus
->
WindSpeed
==
3
||
pStatus
->
WindSpeed
==
4
||
pStatus
->
WindSpeed
==
0
){
param
=
air_conditioner_dev_windspeed_msg_build
(
ep
,
4
);
}
}
break
;
case
VP_CTRL_WINDSPEE_DOWN
:{
if
(
arg
[
1
]
!=
0x42
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
INDOOR_AIR_STATUS
*
pStatus
=
indoor_airstatus_table_find_item
(
deviceCode
,
ep
);
if
(
pStatus
==
NULL
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] value err
\n
"
);
return
NULL
;
}
if
(
pStatus
->
online
!=
1
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] offline
\n
"
);
return
NULL
;
}
//****************************************************************************
debug_log
(
LOG_INFO_LEVEL
,
"[pStatus->WindSpeed] %d
\n
"
,
pStatus
->
WindSpeed
);
debug_log
(
LOG_INFO_LEVEL
,
"[WindSpeed] dec
\n
"
);
static
cJSON
*
light_msg_build
(
int
ep
,
int
onoff
)
{
return
PowerSwitch_msg_build
(
ep
,
onoff
);
}
if
(
pStatus
->
WindSpeed
==
4
){
param
=
air_conditioner_dev_windspeed_msg_build
(
ep
,
3
);
}
else
if
(
pStatus
->
WindSpeed
==
3
||
pStatus
->
WindSpeed
==
2
||
pStatus
->
WindSpeed
==
0
){
param
=
air_conditioner_dev_windspeed_msg_build
(
ep
,
2
);
}
}
break
;
case
VP_CTRL_TMP_UP
:{
if
(
arg_len
!=
5
||
arg
[
1
]
!=
0x42
&&
arg
[
2
]
!=
0x02
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
INDOOR_AIR_STATUS
*
pStatus
=
indoor_airstatus_table_find_item
(
deviceCode
,
ep
);
static
cJSON
*
freshAir_msg_build
(
int
ep
,
int
onoff
)
{
return
PowerSwitch_msg_build
(
ep
,
onoff
);
}
if
(
pStatus
==
NULL
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] value err
\n
"
);
return
NULL
;
}
if
(
pStatus
->
online
!=
1
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] offline
\n
"
);
return
NULL
;
}
debug_log
(
LOG_INFO_LEVEL
,
"[pStatus->Temperature] %f
\n
"
,
pStatus
->
Temperature
);
debug_log
(
LOG_INFO_LEVEL
,
"[tmp] inc %d
\n
"
,
arg
[
3
]);
double
tmp
=
pStatus
->
Temperature
+
arg
[
3
];
//****************************************************************************
if
(
tmp
>
30
){
tmp
=
30
;
}
else
if
(
tmp
<
17
){
tmp
=
17
;
}
debug_log
(
LOG_INFO_LEVEL
,
"[tmp] %f
\n
"
,
tmp
);
param
=
air_conditioner_dev_temperature_msg_build
(
ep
,
tmp
);
}
break
;
static
cJSON
*
air_conditioner_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
)
{
uint8_t
skill_type
=
arg
[
0
];
case
VP_CTRL_TMP_DOWN
:{
if
(
arg_len
!=
5
||
arg
[
1
]
!=
0x42
&&
arg
[
2
]
!=
0x02
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
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
);
INDOOR_AIR_STATUS
*
pStatus
=
indoor_airstatus_table_find_item
(
deviceCode
,
ep
);
case
VP_CTRL_WINDSPEE_SET
:{
if
(
arg
[
1
]
!=
0x20
){
if
(
pStatus
==
NULL
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] value err
\n
"
);
return
NULL
;
}
uint8_t
windspeed
=
arg
[
2
];
debug_log
(
LOG_CRIT_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
;
}
case
VP_CTRL_MODE
:{
if
(
arg
[
1
]
!=
0x20
){
if
(
pStatus
->
online
!=
1
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] offline
\n
"
);
return
NULL
;
}
uint8_t
mode
=
arg
[
2
];
debug_log
(
LOG_CRIT_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
;
debug_log
(
LOG_INFO_LEVEL
,
"[pStatus->Temperature] %f
\n
"
,
pStatus
->
Temperature
);
debug_log
(
LOG_INFO_LEVEL
,
"[tmp] dec %d
\n
"
,
arg
[
3
]);
double
tmp
=
pStatus
->
Temperature
-
arg
[
3
];
if
(
tmp
>
30
){
tmp
=
30
;
}
else
if
(
tmp
<
17
){
tmp
=
17
;
}
uint8_t
tmp
=
arg
[
2
];
debug_log
(
LOG_CRIT_LEVEL
,
"[VP] set tmp=%d
\n
"
,
tmp
);
return
temperature_msg_build
(
ep
,
tmp
);
debug_log
(
LOG_INFO_LEVEL
,
"[tmp] %f
\n
"
,
tmp
);
param
=
air_conditioner_dev_temperature_msg_build
(
ep
,
tmp
);
}
break
;
default:
break
;
}
return
NULL
;
return
param
;
}
static
cJSON
*
light_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
)
static
cJSON
*
light_dev_msg_build
(
int
ep
,
int
onoff
)
{
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
,
"PowerSwitch"
,
onoff
);
return
params
;
}
static
cJSON
*
light_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
,
kk_map_dev_node_t
*
node
)
{
uint8_t
skill_type
=
arg
[
0
];
cJSON
*
param
=
NULL
;
switch
(
skill_type
){
case
VP_CTRL_OPEN
:
//
return
light_msg_build
(
ep
,
1
);
case
VP_CTRL_CLOSE
:
return
light_msg_build
(
ep
,
0
);
case
VP_CTRL_OPEN
:{
debug_log
(
LOG_INFO_LEVEL
,
"[OnOff] on
\n
"
);
param
=
light_dev_msg_build
(
ep
,
1
);
}
break
;
case
VP_CTRL_CLOSE
:{
debug_log
(
LOG_INFO_LEVEL
,
"[OnOff] off
\n
"
);
param
=
light_dev_msg_build
(
ep
,
0
);
}
break
;
default:
break
;
}
return
NULL
;
return
param
;
}
static
cJSON
*
curtain_dev_m
sg_build
(
int
ep
,
int
OperationMode
)
static
cJSON
*
curtain_dev_m
ode_msg_build
(
int
ep
,
int
OperationMode
)
{
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
,
"OperationMode"
,
OperationMode
);
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
return
params
;
}
static
cJSON
*
curtain_dev_position_msg_build
(
int
ep
,
int
position
)
{
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
,
"OperationMode"
,
1
);
cJSON_AddNumberToObject
(
params
,
"Position"
,
position
);
return
params
;
}
static
cJSON
*
curtain_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
,
kk_map_dev_node_t
*
node
)
{
uint8_t
skill_type
=
arg
[
0
];
debug_log
(
LOG_CRIT_LEVEL
,
"skill_type=%d,ep=%d
\n
"
,
skill_type
,
ep
);
cJSON
*
param
=
NULL
;
switch
(
skill_type
){
case
VP_CTRL_OPEN
:
//
return
curtain_dev_msg_build
(
ep
,
1
);
case
VP_CTRL_CLOSE
:
return
curtain_dev_msg_build
(
ep
,
0
);
case
VP_CTRL_STOP
:
return
curtain_dev_msg_build
(
ep
,
2
);
case
VP_CTRL_OPEN
:{
if
(
arg_len
==
3
&&
arg
[
1
]
==
0x20
){
int
position
=
arg
[
2
];
debug_log
(
LOG_INFO_LEVEL
,
"[position] %d%
\n
"
,
position
);
if
(
position
<
0
){
position
=
0
;
}
else
if
(
position
>
100
){
position
=
100
;
}
param
=
curtain_dev_position_msg_build
(
ep
,
position
);
}
else
{
debug_log
(
LOG_INFO_LEVEL
,
"[mode] open
\n
"
);
param
=
curtain_dev_mode_msg_build
(
ep
,
1
);
}
}
break
;
case
VP_CTRL_CLOSE
:{
debug_log
(
LOG_INFO_LEVEL
,
"[mode] close
\n
"
);
param
=
curtain_dev_mode_msg_build
(
ep
,
0
);
}
break
;
case
VP_CTRL_STOP
:{
debug_log
(
LOG_INFO_LEVEL
,
"[mode] stop
\n
"
);
param
=
curtain_dev_mode_msg_build
(
ep
,
2
);
}
default:
break
;
}
return
NULL
;
return
param
;
}
static
cJSON
*
outlet_
msg_build
(
int
ep
,
int
onoff
)
static
cJSON
*
outlet_
dev_msg_build
(
int
ep
,
int
onoff
)
{
return
PowerSwitch_msg_build
(
ep
,
onoff
);
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
,
"PowerSwitch"
,
onoff
);
return
params
;
}
static
cJSON
*
outlet_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
,
kk_map_dev_node_t
*
node
)
{
uint8_t
skill_type
=
arg
[
0
];
debug_log
(
LOG_CRIT_LEVEL
,
"skill_type=%d,ep=%d
\n
"
,
skill_type
,
ep
);
cJSON
*
param
=
NULL
;
switch
(
skill_type
){
case
VP_CTRL_OPEN
:
//
return
outlet_msg_build
(
ep
,
1
);
case
VP_CTRL_CLOSE
:
return
outlet_msg_build
(
ep
,
0
);
case
VP_CTRL_OPEN
:{
debug_log
(
LOG_INFO_LEVEL
,
"[OnOff] on
\n
"
);
param
=
outlet_dev_msg_build
(
ep
,
1
);
}
break
;
case
VP_CTRL_CLOSE
:{
debug_log
(
LOG_INFO_LEVEL
,
"[OnOff] off
\n
"
);
param
=
outlet_dev_msg_build
(
ep
,
0
);
}
break
;
default:
break
;
}
return
NULL
;
return
param
;
}
cJSON
*
freshair_dev_powerswitch_msg_build
(
int
ep
,
int
onoff
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
static
cJSON
*
freshAir_windspeed_msg_build
(
int
ep
,
int
level
)
memset
(
epNum
,
0
,
sizeof
(
epNum
));
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"PowerSwitch"
,
onoff
);
return
params
;
}
static
cJSON
*
freshair_dev_windspeed_msg_build
(
int
ep
,
int
level
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
...
...
@@ -324,12 +516,13 @@ static cJSON *freshAir_windspeed_msg_build(int ep,int level)
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"PowerSwitch"
,
1
);
cJSON_AddNumberToObject
(
params
,
"WindSpeed"
,
level
);
return
params
;
}
static
cJSON
*
fresh
Air_workMode_msg_build
(
int
ep
,
int
mode
)
static
cJSON
*
fresh
air_dev_workmode_msg_build
(
int
ep
,
int
mode
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
...
...
@@ -338,6 +531,7 @@ static cJSON *freshAir_workMode_msg_build(int ep,int mode)
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"PowerSwitch"
,
1
);
cJSON_AddNumberToObject
(
params
,
"WorkMode"
,
mode
);
return
params
;
...
...
@@ -345,59 +539,119 @@ static cJSON *freshAir_workMode_msg_build(int ep,int mode)
static
cJSON
*
freshAir_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
,
kk_map_dev_node_t
*
node
)
{
uint8_t
skill_type
=
arg
[
0
];
if
(
arg_len
!=
3
){
debug_log
(
LOG_ERROR_LEVEL
,
"[err] arg_len=%d
\n
"
,
arg_len
);
return
NULL
;
}
cJSON
*
param
=
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_OPEN
:{
debug_log
(
LOG_INFO_LEVEL
,
"[OnOff] on
\n
"
);
param
=
freshair_dev_powerswitch_msg_build
(
ep
,
1
);
}
break
;
case
VP_CTRL_CLOSE
:{
debug_log
(
LOG_INFO_LEVEL
,
"[OnOff] off
\n
"
);
param
=
freshair_dev_powerswitch_msg_build
(
ep
,
0
);
}
break
;
case
VP_CTRL_WINDSPEE_SET
:{
if
(
arg
[
1
]
!=
0x20
){
if
(
arg_len
!=
3
||
arg
[
1
]
!=
0x20
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
uint8_t
windspeed
=
arg
[
2
];
debug_log
(
LOG_CRIT_LEVEL
,
"[VP] set windspeed=%d
\n
"
,
windspeed
);
debug_log
(
LOG_INFO_LEVEL
,
"[windspeed] %d
\n
"
,
windspeed
);
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_LOW
){
return
freshAir_windspeed_msg_build
(
ep
,
1
);
param
=
freshair_dev_windspeed_msg_build
(
ep
,
1
);
}
else
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_MID
){
return
freshAir_windspeed_msg_build
(
ep
,
2
);
param
=
freshair_dev_windspeed_msg_build
(
ep
,
2
);
}
else
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_HIGH
){
return
freshAir_windspeed_msg_build
(
ep
,
3
);
param
=
freshair_dev_windspeed_msg_build
(
ep
,
3
);
}
break
;
}
}
break
;
case
VP_CTRL_MODE
:{
if
(
arg
[
1
]
!=
0x20
){
if
(
arg_len
!=
3
||
arg
[
1
]
!=
0x20
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
uint8_t
mode
=
arg
[
2
];
debug_log
(
LOG_CRIT_LEVEL
,
"[VP] set mode=%d
\n
"
,
mode
);
debug_log
(
LOG_INFO_LEVEL
,
"[mode] %d
\n
"
,
mode
);
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_AUTO
){
return
freshAir_workMode_msg_build
(
ep
,
0
);
param
=
freshair_dev_workmode_msg_build
(
ep
,
0
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_MANUAL
){
return
freshAir_workMode_msg_build
(
ep
,
1
);
param
=
freshair_dev_workmode_msg_build
(
ep
,
1
);
}
break
;
}
break
;
case
VP_CTRL_WINDSPEE_UP
:{
if
(
arg_len
!=
3
||
arg
[
1
]
!=
0x42
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
default:
break
;
cJSON
*
value
=
get_value
(
node
,
"WindSpeed"
);
if
(
value
==
NULL
||
value
->
type
!=
cJSON_Number
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] value err
\n
"
);
return
NULL
;
}
if
(
value
->
valueint
==
0
){
param
=
freshair_dev_windspeed_msg_build
(
ep
,
1
);
}
else
if
(
value
->
valueint
==
1
){
param
=
freshair_dev_windspeed_msg_build
(
ep
,
2
);
}
else
if
(
value
->
valueint
==
2
||
value
->
valueint
==
3
){
param
=
freshair_dev_windspeed_msg_build
(
ep
,
3
);
}
}
break
;
case
VP_CTRL_WINDSPEE_DOWN
:{
if
(
arg_len
!=
3
||
arg
[
1
]
!=
0x42
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
cJSON
*
value
=
get_value
(
node
,
"WindSpeed"
);
if
(
value
==
NULL
||
value
->
type
!=
cJSON_Number
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] value err
\n
"
);
return
NULL
;
}
if
(
value
->
valueint
==
3
){
param
=
freshair_dev_windspeed_msg_build
(
ep
,
2
);
}
else
if
(
value
->
valueint
==
2
){
param
=
freshair_dev_windspeed_msg_build
(
ep
,
1
);
}
else
if
(
value
->
valueint
==
1
||
value
->
valueint
==
0
){
param
=
freshair_dev_windspeed_msg_build
(
ep
,
0
);
}
}
break
;
default:
break
;
}
return
param
;
}
cJSON
*
fanCoilSwitch_powerswitch_msg_build
(
int
ep
,
int
onoff
)
{
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
,
"PowerSwitch"
,
onoff
);
return
params
;
}
static
cJSON
*
fan
CoilSwitch_windspeed_msg_build
(
int
ep
,
int
level
)
static
cJSON
*
fan
coilswitch_dev_windspeed_msg_build
(
int
ep
,
int
level
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
...
...
@@ -406,11 +660,12 @@ static cJSON *fanCoilSwitch_windspeed_msg_build(int ep,int level)
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"PowerSwitch"
,
1
);
cJSON_AddNumberToObject
(
params
,
"WindSpeed"
,
level
);
return
params
;
}
static
cJSON
*
fan
CoilSwitch_workMode_msg_build
(
int
ep
,
int
mode
)
static
cJSON
*
fan
coilswitch_dev_workmode_msg_build
(
int
ep
,
int
mode
)
{
char
epNum
[
12
]
=
{
0
};
cJSON
*
params
=
cJSON_CreateObject
();
...
...
@@ -419,6 +674,7 @@ static cJSON *fanCoilSwitch_workMode_msg_build(int ep,int mode)
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"PowerSwitch"
,
1
);
cJSON_AddNumberToObject
(
params
,
"WorkMode"
,
mode
);
return
params
;
...
...
@@ -433,150 +689,501 @@ static cJSON *fanCoilSwitch_Temperature_msg_build(int ep,int tmp)
snprintf
(
epNum
,
sizeof
(
epNum
),
"%d"
,
ep
);
cJSON_AddStringToObject
(
params
,
"epNum"
,
epNum
);
cJSON_AddNumberToObject
(
params
,
"PowerSwitch"
,
1
);
cJSON_AddNumberToObject
(
params
,
"Temperature"
,
tmp
);
return
params
;
}
static
cJSON
*
fanCoilSwitch_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
,
kk_map_dev_node_t
*
node
)
{
uint8_t
skill_type
=
arg
[
0
];
cJSON
*
param
=
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_OPEN
:{
debug_log
(
LOG_INFO_LEVEL
,
"[OnOff] on
\n
"
);
param
=
fanCoilSwitch_powerswitch_msg_build
(
ep
,
1
);
}
break
;
case
VP_CTRL_CLOSE
:{
debug_log
(
LOG_INFO_LEVEL
,
"[OnOff] off
\n
"
);
param
=
fanCoilSwitch_powerswitch_msg_build
(
ep
,
0
);
}
break
;
case
VP_CTRL_WINDSPEE_SET
:{
if
(
arg
[
1
]
!=
0x20
){
if
(
arg_len
!=
3
||
arg
[
1
]
!=
0x20
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
uint8_t
windspeed
=
arg
[
2
];
debug_log
(
LOG_
CRIT_LEVEL
,
"[VP] set windspeed=%d
\n
"
,
windspeed
);
debug_log
(
LOG_
INFO_LEVEL
,
"[windSpeed] %d
\n
"
,
windspeed
);
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_LOW
){
return
fanCoilSwitch_windspeed_msg_build
(
ep
,
2
);
param
=
fancoilswitch_dev_windspeed_msg_build
(
ep
,
2
);
}
else
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_MID
){
return
fanCoilSwitch_windspeed_msg_build
(
ep
,
3
);
param
=
fancoilswitch_dev_windspeed_msg_build
(
ep
,
3
);
}
else
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_HIGH
){
return
fanCoilSwitch_windspeed_msg_build
(
ep
,
4
);
param
=
fancoilswitch_dev_windspeed_msg_build
(
ep
,
4
);
}
else
if
(
windspeed
==
VP_SKILLTYPE_12_WINDSPEED_AUTO
){
return
fanCoilSwitch_windspeed_msg_build
(
ep
,
0
);
}
break
;
param
=
fancoilswitch_dev_windspeed_msg_build
(
ep
,
0
);
}
else
{
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
}
break
;
case
VP_CTRL_MODE
:{
if
(
arg
[
1
]
!=
0x20
){
if
(
arg_len
!=
3
||
arg
[
1
]
!=
0x20
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
uint8_t
mode
=
arg
[
2
];
debug_log
(
LOG_
CRIT_LEVEL
,
"[VP] set mode=%d
\n
"
,
mode
);
debug_log
(
LOG_
INFO_LEVEL
,
"[mode] %d
\n
"
,
mode
);
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_COLD
){
return
freshAir_workMode_msg_build
(
ep
,
1
);
param
=
fancoilswitch_dev_workmode_msg_build
(
ep
,
1
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_HEATING
){
return
freshAir_workMode_msg_build
(
ep
,
2
);
param
=
fancoilswitch_dev_workmode_msg_build
(
ep
,
2
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_FAN
){
return
freshAir_workMode_msg_build
(
ep
,
3
);
param
=
fancoilswitch_dev_workmode_msg_build
(
ep
,
3
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_DEHUM
){
return
freshAir_workMode_msg_build
(
ep
,
4
);
}
break
;
param
=
fancoilswitch_dev_workmode_msg_build
(
ep
,
4
);
}
else
{
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
}
break
;
case
VP_CTRL_TMP_SET
:
if
(
arg
[
1
]
!=
0x20
){
case
VP_CTRL_TMP_SET
:{
if
(
arg_len
!=
3
||
arg
[
1
]
!=
0x20
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
uint8_t
tmp
=
arg
[
2
];
debug_log
(
LOG_CRIT_LEVEL
,
"[VP] set tmp=%d
\n
"
,
tmp
);
return
fanCoilSwitch_Temperature_msg_build
(
ep
,
tmp
);
debug_log
(
LOG_INFO_LEVEL
,
"[tmp] %d
\n
"
,
tmp
);
if
(
tmp
>
30
){
tmp
=
30
;
}
else
if
(
tmp
<
17
){
tmp
=
17
;
}
default:
break
;
param
=
fanCoilSwitch_Temperature_msg_build
(
ep
,
tmp
);
}
break
;
case
VP_CTRL_WINDSPEE_UP
:{
if
(
arg
[
1
]
!=
0x42
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
cJSON
*
value
=
get_value
(
node
,
"WindSpeed"
);
if
(
value
==
NULL
||
value
->
type
!=
cJSON_Number
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] value err
\n
"
);
return
NULL
;
}
debug_log
(
LOG_INFO_LEVEL
,
"[value] %d
\n
"
,
value
->
valueint
);
debug_log
(
LOG_INFO_LEVEL
,
"[WindSpeed] inc
\n
"
);
if
(
value
->
valueint
==
2
){
param
=
fancoilswitch_dev_windspeed_msg_build
(
ep
,
3
);
}
else
if
(
value
->
valueint
==
3
){
param
=
fancoilswitch_dev_windspeed_msg_build
(
ep
,
4
);
}
else
if
(
value
->
valueint
==
4
||
value
->
valueint
==
0
){
param
=
fancoilswitch_dev_windspeed_msg_build
(
ep
,
4
);
}
else
{
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] value=%d
\n
"
,
value
->
valueint
);
return
NULL
;
}
}
break
;
case
VP_CTRL_WINDSPEE_DOWN
:{
if
(
arg
[
1
]
!=
0x42
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
cJSON
*
value
=
get_value
(
node
,
"WindSpeed"
);
if
(
value
==
NULL
||
value
->
type
!=
cJSON_Number
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] value err
\n
"
);
return
NULL
;
}
debug_log
(
LOG_INFO_LEVEL
,
"[value] %d
\n
"
,
value
->
valueint
);
debug_log
(
LOG_INFO_LEVEL
,
"[WindSpeed] dec
\n
"
);
if
(
value
->
valueint
==
4
){
param
=
fancoilswitch_dev_windspeed_msg_build
(
ep
,
3
);
}
else
if
(
value
->
valueint
==
3
){
param
=
fancoilswitch_dev_windspeed_msg_build
(
ep
,
2
);
}
else
if
(
value
->
valueint
==
2
||
value
->
valueint
==
0
){
param
=
fancoilswitch_dev_windspeed_msg_build
(
ep
,
2
);
}
else
{
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] value=%d
\n
"
,
value
->
valueint
);
return
NULL
;
}
}
break
;
case
VP_CTRL_TMP_UP
:{
if
(
arg_len
!=
5
||
arg
[
1
]
!=
0x42
&&
arg
[
2
]
!=
0x02
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
cJSON
*
value
=
get_value
(
node
,
"Temperature"
);
if
(
value
==
NULL
||
value
->
type
!=
cJSON_Number
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] value err
\n
"
);
return
NULL
;
}
debug_log
(
LOG_INFO_LEVEL
,
"[value] %d
\n
"
,
value
->
valueint
);
debug_log
(
LOG_INFO_LEVEL
,
"[tmp] inc %d
\n
"
,
arg
[
3
]);
double
tmp
=
value
->
valuedouble
+
arg
[
3
];
if
(
tmp
>
30
){
tmp
=
30
;
}
else
if
(
tmp
<
17
){
tmp
=
17
;
}
debug_log
(
LOG_INFO_LEVEL
,
"[tmp] %f
\n
"
,
tmp
);
param
=
fanCoilSwitch_Temperature_msg_build
(
ep
,
tmp
);
}
break
;
case
VP_CTRL_TMP_DOWN
:{
if
(
arg_len
!=
5
||
arg
[
1
]
!=
0x42
&&
arg
[
2
]
!=
0x02
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
cJSON
*
value
=
get_value
(
node
,
"Temperature"
);
if
(
value
==
NULL
||
value
->
type
!=
cJSON_Number
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] value err
\n
"
);
return
NULL
;
}
debug_log
(
LOG_INFO_LEVEL
,
"[value] %d
\n
"
,
value
->
valueint
);
debug_log
(
LOG_INFO_LEVEL
,
"[tmp] dec %d
\n
"
,
arg
[
3
]);
double
tmp
=
value
->
valuedouble
-
arg
[
3
];
if
(
tmp
>
30
){
tmp
=
30
;
}
else
if
(
tmp
<
17
){
tmp
=
17
;
}
debug_log
(
LOG_INFO_LEVEL
,
"[tmp] %f
\n
"
,
tmp
);
param
=
fanCoilSwitch_Temperature_msg_build
(
ep
,
tmp
);
}
break
;
default:
break
;
}
return
param
;
}
static
cJSON
*
underfloor_heating_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
)
cJSON
*
underfloor_heating_powerswitch_msg_build
(
int
ep
,
int
onoff
)
{
uint8_t
skill_type
=
arg
[
0
];
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
,
"PowerSwitch"
,
onoff
);
return
params
;
}
static
cJSON
*
underfloor_heating_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
,
"PowerSwitch"
,
1
);
cJSON_AddNumberToObject
(
params
,
"WorkMode"
,
mode
);
return
params
;
}
static
cJSON
*
underfloor_heating_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
,
"PowerSwitch"
,
1
);
cJSON_AddNumberToObject
(
params
,
"WorkMode"
,
1
);
cJSON_AddNumberToObject
(
params
,
"Temperature"
,
tmp
);
return
params
;
}
static
cJSON
*
underfloor_heating_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
,
kk_map_dev_node_t
*
node
)
{
uint8_t
skill_type
=
arg
[
0
];
cJSON
*
param
=
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_OPEN
:{
debug_log
(
LOG_INFO_LEVEL
,
"[OnOff] on
\n
"
);
param
=
underfloor_heating_powerswitch_msg_build
(
ep
,
1
);
}
break
;
case
VP_CTRL_CLOSE
:{
debug_log
(
LOG_INFO_LEVEL
,
"[OnOff] off
\n
"
);
param
=
underfloor_heating_powerswitch_msg_build
(
ep
,
0
);
}
break
;
case
VP_CTRL_MODE
:{
if
(
arg
[
1
]
!=
0x20
){
if
(
arg_len
!=
3
||
arg
[
1
]
!=
0x20
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
uint8_t
mode
=
arg
[
2
];
debug_log
(
LOG_
CRIT_LEVEL
,
"[VP] set mode=%d
\n
"
,
mode
);
debug_log
(
LOG_
INFO_LEVEL
,
"[mode] %d
\n
"
,
mode
);
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_AUTO
){
return
workMode_msg_build
(
ep
,
0
);
param
=
underfloor_heating_workmode_msg_build
(
ep
,
0
);
}
else
if
(
mode
==
VP_SKILLTYPE_1C_WORKMODE_MANUAL
){
return
workMode_msg_build
(
ep
,
1
);
}
break
;
param
=
underfloor_heating_workmode_msg_build
(
ep
,
1
);
}
}
break
;
case
VP_CTRL_TMP_SET
:
if
(
arg
[
1
]
!=
0x20
){
case
VP_CTRL_TMP_SET
:{
if
(
arg_len
!=
3
||
arg
[
1
]
!=
0x20
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
uint8_t
tmp
=
arg
[
2
];
debug_log
(
LOG_CRIT_LEVEL
,
"[VP] set tmp=%d
\n
"
,
tmp
);
return
temperature_msg_build
(
ep
,
tmp
);
debug_log
(
LOG_INFO_LEVEL
,
"[tmp] %d
\n
"
,
tmp
);
default:
break
;
if
(
tmp
>
30
){
tmp
=
30
;
}
else
if
(
tmp
<
20
){
tmp
=
20
;
}
param
=
underfloor_heating_temperature_msg_build
(
ep
,
tmp
);
}
break
;
case
VP_CTRL_TMP_UP
:{
if
(
arg_len
!=
5
||
arg
[
1
]
!=
0x42
&&
arg
[
2
]
!=
0x02
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
cJSON
*
value
=
get_value
(
node
,
"Temperature"
);
if
(
value
==
NULL
||
value
->
type
!=
cJSON_Number
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] value err
\n
"
);
return
NULL
;
}
debug_log
(
LOG_INFO_LEVEL
,
"[value] %d
\n
"
,
value
->
valueint
);
debug_log
(
LOG_INFO_LEVEL
,
"[tmp] inc %d
\n
"
,
arg
[
3
]);
double
tmp
=
value
->
valuedouble
+
arg
[
3
];
if
(
tmp
>
30
){
tmp
=
30
;
}
else
if
(
tmp
<
20
){
tmp
=
20
;
}
debug_log
(
LOG_INFO_LEVEL
,
"tmp=%f
\n
"
,
tmp
);
param
=
underfloor_heating_temperature_msg_build
(
ep
,
tmp
);
}
break
;
case
VP_CTRL_TMP_DOWN
:{
if
(
arg
[
1
]
!=
0x42
&&
arg
[
2
]
!=
0x02
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
cJSON
*
value
=
get_value
(
node
,
"Temperature"
);
if
(
value
==
NULL
||
value
->
type
!=
cJSON_Number
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] value err
\n
"
);
return
NULL
;
}
debug_log
(
LOG_INFO_LEVEL
,
"[value] %d
\n
"
,
value
->
valueint
);
debug_log
(
LOG_INFO_LEVEL
,
"[tmp] dec %d
\n
"
,
arg
[
3
]);
double
tmp
=
value
->
valuedouble
-
arg
[
3
];
if
(
tmp
>
30
){
tmp
=
30
;
}
else
if
(
tmp
<
20
){
tmp
=
20
;
}
debug_log
(
LOG_INFO_LEVEL
,
"tmp=%f
\n
"
,
tmp
);
param
=
underfloor_heating_temperature_msg_build
(
ep
,
tmp
);
}
break
;
default:
break
;
}
return
param
;
}
cJSON
*
dimming_light_dev_powerSwitch_msg_build
(
int
ep
,
int
onoff
)
{
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
,
"PowerSwitch"
,
onoff
);
return
params
;
}
static
cJSON
*
dimming_light_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
)
static
cJSON
*
dimming_light_dev_colortemperature_msg_build
(
int
ep
,
int
val
)
{
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
,
"PowerSwitch"
,
1
);
cJSON_AddNumberToObject
(
params
,
"ColorTemperature"
,
val
);
return
params
;
}
static
cJSON
*
dimming_light_dev_brightness_msg_build
(
int
ep
,
int
val
)
{
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
,
"PowerSwitch"
,
1
);
cJSON_AddNumberToObject
(
params
,
"Brightness"
,
val
);
return
params
;
}
static
cJSON
*
dimming_light_dev_handle
(
int
ep
,
uint8_t
*
arg
,
uint8_t
arg_len
,
kk_map_dev_node_t
*
node
)
{
uint8_t
skill_type
=
arg
[
0
];
cJSON
*
param
=
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_OPEN
:{
debug_log
(
LOG_INFO_LEVEL
,
"[OnOff] on
\n
"
);
param
=
dimming_light_dev_powerSwitch_msg_build
(
ep
,
1
);
}
break
;
case
VP_CTRL_CLOSE
:{
debug_log
(
LOG_INFO_LEVEL
,
"[OnOff] off
\n
"
);
param
=
dimming_light_dev_powerSwitch_msg_build
(
ep
,
0
);
}
break
;
case
VP_CTRL_SET_COLOR_TMP
:{
if
(
arg
[
1
]
!=
0x20
){
if
(
arg_len
!=
3
||
arg
[
1
]
!=
0x20
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
uint8_t
mode
=
arg
[
2
];
debug_log
(
LOG_
CRIT_LEVEL
,
"[VP] set mode=%d
\n
"
,
mode
);
debug_log
(
LOG_
INFO_LEVEL
,
"[mode] %d
\n
"
,
mode
);
if
(
mode
==
0x01
){
return
ColorTemperature_msg_build
(
ep
,
20
);
param
=
dimming_light_dev_colortemperature_msg_build
(
ep
,
20
);
}
else
if
(
mode
==
0x02
){
return
ColorTemperature_msg_build
(
ep
,
50
);
param
=
dimming_light_dev_colortemperature_msg_build
(
ep
,
50
);
}
else
if
(
mode
==
0x03
){
return
ColorTemperature_msg_build
(
ep
,
100
);
}
break
;
param
=
dimming_light_dev_colortemperature_msg_build
(
ep
,
100
);
}
case
VP_CTRL_BRIGHTNESS_SET
:
if
(
arg
[
1
]
!=
0x20
){
}
break
;
case
VP_CTRL_BRIGHTNESS_SET
:{
if
(
arg_len
!=
3
||
arg
[
1
]
!=
0x20
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
uint8_t
bri
=
arg
[
2
];
return
Brightness_msg_build
(
ep
,
bri
);
break
;
debug_log
(
LOG_INFO_LEVEL
,
"[bri] %d
\n
"
,
bri
);
if
(
bri
>
100
){
bri
=
100
;
}
else
if
(
bri
<=
1
){
bri
=
1
;
}
param
=
dimming_light_dev_brightness_msg_build
(
ep
,
bri
);
}
break
;
default:
break
;
case
VP_CTRL_BRIGHTNESS_DOWN
:{
if
(
arg_len
!=
5
||
arg
[
1
]
!=
0x42
&&
arg
[
2
]
!=
0x02
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
cJSON
*
value
=
get_value
(
node
,
"Brightness"
);
if
(
value
==
NULL
||
value
->
type
!=
cJSON_Number
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] value err
\n
"
);
return
NULL
;
}
debug_log
(
LOG_INFO_LEVEL
,
"[value] %d
\n
"
,
value
->
valueint
);
debug_log
(
LOG_INFO_LEVEL
,
"[bri] dec %d
\n
"
,
arg
[
3
]);
int
bri
=
value
->
valueint
-
arg
[
3
];
if
(
bri
>
100
){
bri
=
100
;
}
else
if
(
bri
<=
1
){
bri
=
1
;
}
debug_log
(
LOG_INFO_LEVEL
,
"bri=%d
\n
"
,
bri
);
param
=
dimming_light_dev_brightness_msg_build
(
ep
,
bri
);
}
break
;
case
VP_CTRL_BRIGHTNESS_UP
:{
if
(
arg_len
!=
5
||
arg
[
1
]
!=
0x42
&&
arg
[
2
]
!=
0x02
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] para err
\n
"
);
return
NULL
;
}
cJSON
*
value
=
get_value
(
node
,
"Brightness"
);
if
(
value
==
NULL
||
value
->
type
!=
cJSON_Number
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] value err
\n
"
);
return
NULL
;
}
debug_log
(
LOG_INFO_LEVEL
,
"[value] %d
\n
"
,
value
->
valueint
);
debug_log
(
LOG_INFO_LEVEL
,
"[bri] inc %d
\n
"
,
arg
[
3
]);
int
bri
=
value
->
valueint
+
arg
[
3
];
if
(
bri
>
100
){
bri
=
100
;
}
else
if
(
bri
<=
1
){
bri
=
1
;
}
debug_log
(
LOG_INFO_LEVEL
,
"bri=%d
\n
"
,
bri
);
param
=
dimming_light_dev_brightness_msg_build
(
ep
,
bri
);
}
break
;
default:
break
;
}
return
param
;
}
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
;
int
err
=
1
;
uint8_t
skill_type
;
int
ep
;
int
pid
=
0
;
...
...
@@ -616,24 +1223,32 @@ int kk_lan_vp_control(uint8_t num,uint32_t nodeIdAry[],uint8_t *arg,uint8_t arg_
params
=
NULL
;
if
(
is_ac_gw_pid
(
pid
)
!=
0
){
debug_log
(
LOG_CRIT_LEVEL
,
"air conditioner,pid=%d
\n
"
,
pid
);
params
=
air_conditioner_dev_handle
(
ep
,
arg
,
arg_len
);
params
=
air_conditioner_dev_handle
(
deviceCode
,
ep
,
arg
,
arg_len
);
}
else
{
if
((
func
=
dev_pid_dispatch
(
pid
))
!=
NULL
){
debug_log
(
LOG_CRIT_LEVEL
,
"skill_type=%02x,ep=%d
\n
"
,
skill_type
,
ep
);
params
=
func
(
ep
,
arg
,
arg_len
);
if
(
node
==
NULL
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] node=NULL
\n
"
);
continue
;
}
if
(
node
->
online_status
==
0
){
debug_log
(
LOG_WARNING_LEVEL
,
"[ctrl fail] dev offline
\n
"
);
continue
;
}
params
=
func
(
ep
,
arg
,
arg_len
,
node
);
}
}
if
(
params
!=
NULL
){
msg
=
property_set
(
productCode
,
deviceCode
,
"*"
,
"*"
,
params
);
kk_ipc_send_json
(
msg
);
}
else
{
err
=
1
;
break
;
err
=
0
;
}
}
return
err
;
}
...
...
application/klansdk/kk_oldccu_msg.c
View file @
7b21e73c
...
...
@@ -560,7 +560,9 @@ int kk_lan_device_delete_notify(cJSON *payload)
return
-
1
;
}
indoor_airstatus_table_delete_item
(
deviceCode
->
valuestring
);
_kk_lan_delete_device
(
deviceCode
->
valuestring
);
return
0
;
}
...
...
application/klansdk/kk_voice_panel_cfg.c
View file @
7b21e73c
...
...
@@ -390,7 +390,11 @@ static int kk_vp_sync_device_multi_eps(_IN cJSON *zbDevsAry,_IN cJSON *dev,_IN c
if
(
kk_map_dev_search_by_deviceCode
(
pDevs
->
mac
,
&
node
)
==
0
){
/*if(strcmp(pDevs->online,"1")==0){
node->online_status = 1;
}else{
node->online_status = 0;
}*/
snprintf
(
pDevs
->
operateType
,
sizeof
(
pDevs
->
operateType
)
-
1
,
"%s"
,
node
->
opearteType
);
}
else
{
...
...
@@ -467,6 +471,12 @@ 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
);
/*if(strcmp(pDevs->online,"1")==0){
node->online_status = 1;
}else{
node->online_status = 0;
}*/
}
else
{
if
(
is_ac_gw_pid
(
atoi
(
pDevs
->
pid
))
!=
0
){
...
...
application/klansdk/kk_voice_panel_handle.c
View file @
7b21e73c
...
...
@@ -3,6 +3,7 @@
#include <time.h>
#include <unistd.h>
#include <fcntl.h>
#include "kk_newccu_msg.h"
#include "kk_voice_panel_cfg.h"
#include "kk_voice_panel_handle.h"
...
...
@@ -20,7 +21,7 @@
static
char
s_voice_sw
[
16
]
=
{
0
};
static
uint16_t
_g_seq
;
static
FILE
*
update_fp
=
NULL
;
...
...
@@ -28,6 +29,7 @@ static FILE *ota_fp = NULL;
#define VP_CH 0
#define SOUND_SETE_VP_CH 9
#define VP_RES 0
...
...
@@ -393,11 +395,43 @@ uint16_t vp_get_seq(void)
{
return
_g_seq
++
;
}
void
vp_send_data_build_ex
(
uint16_t
opCode
,
int
len
,
uint8_t
*
data
)
{
uint8_t
data_buf
[
1024
]
=
{
0
};
int
data_len
=
0
;
pro_data_t
pro_data
;
memset
(
&
pro_data
,
0
,
sizeof
(
pro_data_t
));
pro_data
.
seq
=
vp_get_seq
();
pro_data
.
ch
=
SOUND_SETE_VP_CH
;
pro_data
.
opcode
=
opCode
;
pro_data
.
cf
.
ack
=
0
;
pro_data
.
cf
.
dir
=
1
;
pro_data
.
cf
.
sof_flag
=
1
;
void
vp_send_data_build
(
uint16_t
opCode
,
uint8_t
len
,
uint8_t
*
data
)
pro_data
.
args_len
=
len
;
memcpy
(
pro_data
.
arg
,
data
,
len
);
data_len
=
proto_frame_to_uart
(
&
pro_data
,
data_buf
);
debug_log
(
LOG_INFO_LEVEL
,
"
\n
[LAN->VP]len=%d
\n
"
,
data_len
);
uint8_t
dataStr
[
512
]
=
{
0
};
for
(
int
i
=
0
;
i
<
data_len
;
i
++
){
snprintf
((
char
*
)
dataStr
+
strlen
((
char
*
)
dataStr
),
sizeof
(
dataStr
),
"%02X "
,
data_buf
[
i
]);
}
debug_log
(
LOG_INFO_LEVEL
,
"%s
\n\n
"
,
dataStr
);
voice_uart_lock
();
eSerial_WriteBuffer
(
data_buf
,
data_len
);
voice_uart_unlock
();
}
void
vp_send_data_build
(
uint16_t
opCode
,
int
len
,
uint8_t
*
data
)
{
uint8_t
data_buf
[
256
]
=
{
0
};
uint8_t
data_len
=
0
;
uint8_t
data_buf
[
1024
]
=
{
0
};
int
data_len
=
0
;
pro_data_t
pro_data
;
memset
(
&
pro_data
,
0
,
sizeof
(
pro_data_t
));
...
...
@@ -422,13 +456,16 @@ void vp_send_data_build(uint16_t opCode,uint8_t len,uint8_t *data)
snprintf
((
char
*
)
dataStr
+
strlen
((
char
*
)
dataStr
),
sizeof
(
dataStr
),
"%02X "
,
data_buf
[
i
]);
}
debug_log
(
LOG_INFO_LEVEL
,
"%s
\n\n
"
,
dataStr
);
voice_uart_lock
();
eSerial_WriteBuffer
(
data_buf
,
data_len
);
voice_uart_unlock
();
}
void
vp_reply_data_build
(
uint16_t
seq
,
uint8_t
ch
,
uint16_t
opCode
,
uint8_t
len
,
uint8_t
*
data
)
void
vp_reply_data_build
(
uint16_t
seq
,
uint8_t
ch
,
uint16_t
opCode
,
int
len
,
uint8_t
*
data
)
{
uint8_t
data_buf
[
256
]
=
{
0
};
uint8_t
data_len
=
0
;
uint8_t
data_buf
[
1024
]
=
{
0
};
int
data_len
=
0
;
pro_data_t
pro_data
;
memset
(
&
pro_data
,
0
,
sizeof
(
pro_data_t
));
...
...
@@ -447,13 +484,16 @@ 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
);
debug_log
(
LOG_INFO_LEVEL
,
"
\n
[LAN->VP]len=%d
\n
"
,
data_len
);
uint8_t
dataStr
[
512
]
=
{
0
};
uint8_t
dataStr
[
1024
]
=
{
0
};
for
(
int
i
=
0
;
i
<
data_len
;
i
++
){
snprintf
((
char
*
)
dataStr
+
strlen
((
char
*
)
dataStr
),
sizeof
(
dataStr
),
"%02X "
,
data_buf
[
i
]);
}
debug_log
(
LOG_INFO_LEVEL
,
"%s
\n\n
"
,
dataStr
);
voice_uart_lock
();
eSerial_WriteBuffer
(
data_buf
,
data_len
);
voice_uart_unlock
();
}
...
...
@@ -551,19 +591,35 @@ int _vp_get_cfg_file_crc32(void)
return
crc32
;
}
int
kk_vp_voice_version_set
(
char
*
ver
,
int
len
)
{
if
(
ver
==
NULL
||
len
>=
strlen
(
s_voice_sw
)){
return
-
1
;
}
memcpy
(
s_voice_sw
,
ver
,
strlen
(
ver
));
return
0
;
}
static
void
vp_open_fd
()
{
if
(
update_fp
!=
NULL
){
fclose
(
update_fp
);
}
update_fp
=
fopen
(
VP_CONFIG_FILE_TAR_GZ
,
"rb"
);
if
(
update_fp
==
NULL
){
debug_log
(
LOG_WARNING_LEVEL
,
"[%s]fopen err!
\n
"
,
VP_CONFIG_FILE_TAR_GZ
);
}
}
static
void
vp_close_fd
()
int
kk_vp_voice_version_get
(
char
*
ver
,
int
len
)
{
if
(
update_fp
!=
NULL
){
fclose
(
update_fp
);
if
(
ver
==
NULL
||
len
<
strlen
(
s_voice_sw
)){
return
-
1
;
}
memcpy
(
ver
,
s_voice_sw
,
strlen
(
s_voice_sw
));
return
0
;
}
...
...
@@ -593,23 +649,37 @@ static void vp_close_fd()
static
char
s_voice_sw
[
16
]
=
{
0
};
int
kk_vp_voice_version_get
(
char
*
ver
,
int
len
)
{
if
(
ver
==
NULL
||
len
<
strlen
(
s_voice_sw
)){
return
-
1
;
}
memcpy
(
ver
,
s_voice_sw
,
strlen
(
s_voice_sw
));
return
0
;
}
int
kk_vp_voice_version_set
(
char
*
ver
,
int
len
)
{
if
(
ver
==
NULL
||
len
>=
strlen
(
s_voice_sw
)){
return
-
1
;
}
memcpy
(
s_voice_sw
,
ver
,
strlen
(
ver
));
return
0
;
}
static
void
kk_vp_get_8009_snapshoot_handle
(
pro_data_t
*
pro_data
)
{
uint8_t
err
;
...
...
@@ -639,7 +709,6 @@ static void kk_vp_get_8009_snapshoot_handle(pro_data_t *pro_data)
f_ver
=
MK_UINT32
(
&
pro_data
->
arg
[
15
]);
kk_vp_set_state_machine
(
SET_8009_SYSTEM
);
kk_vp_set_config_file_version
(
f_ver
);
memset
(
s_voice_sw
,
0x0
,
sizeof
(
s_voice_sw
));
//string version=std::to_string(pro_data->arg[1])+"."+std::to_string(pro_data->arg[2])+"."+std::to_string(pro_data->arg[3]);
...
...
@@ -649,6 +718,89 @@ static void kk_vp_get_8009_snapshoot_handle(pro_data_t *pro_data)
}
}
char
MAC
[
18
];
#define CMD_MAC "fw_printenv ethaddr -n"
int
_System
(
const
char
*
cmd
,
char
*
pRetMsg
,
int
msg_len
){
FILE
*
fp
;
int
res
=
-
1
;
int
ret
=
0
;
if
(
cmd
==
NULL
||
pRetMsg
==
NULL
||
msg_len
<
0
)
{
printf
(
"Param Error!
\n
"
);
return
-
1
;
}
if
((
fp
=
popen
(
cmd
,
"r"
)
)
==
NULL
)
{
printf
(
"Popen Error!
\n
"
);
return
-
2
;
}
else
{
int
i
=
0
;
char
c
=
0
;
memset
(
pRetMsg
,
0
,
msg_len
);
//while(fgets(pRetMsg, msg_len, fp) != NULL)
while
(
fread
(
&
c
,
1
,
1
,
fp
),
!
feof
(
fp
))
{
//printf("%s, i=%d\n",pRetMsg, i);
pRetMsg
[
i
++
]
=
c
;
if
(
i
>=
msg_len
-
1
){
break
;
}
}
//printf("end %s \n",pRetMsg);
if
((
res
=
pclose
(
fp
))
==
-
1
)
{
printf
(
"close popenerror!
\n
"
);
return
-
3
;
}
if
(
pRetMsg
[
strlen
(
pRetMsg
)
-
1
]
==
'\n'
){
pRetMsg
[
strlen
(
pRetMsg
)
-
1
]
=
'\0'
;
}
return
ret
;
}
}
char
*
getMac
(){
char
tmp
[
128
]
=
{
0
};
int
ret
=
0
;
if
(
strlen
(
MAC
)
>
0
){
return
MAC
;
}
ret
=
_System
(
CMD_MAC
,
tmp
,
sizeof
(
tmp
));
if
(
ret
==
0
&&
strlen
(
tmp
)
>
0
){
memset
(
MAC
,
0x00
,
sizeof
(
MAC
));
strncpy
(
MAC
,
tmp
,
sizeof
(
MAC
));
MAC
[
sizeof
(
MAC
)
-
1
]
=
0
;
return
MAC
;
}
else
{
printf
(
"==== get mac error, exit sys_ota!!!!!!
\n
"
);
return
NULL
;
}
}
static
char
convert_byte
(
char
temp
)
{
char
data
=
0
;
if
((
temp
>=
'0'
)
&&
(
temp
<=
'9'
))
{
data
=
(
temp
-
'0'
);
}
else
if
((
temp
>=
'a'
)
&&
(
temp
<=
'f'
))
{
data
=
(
temp
-
'a'
+
10
);
}
else
if
((
temp
>=
'A'
)
&&
(
temp
<=
'F'
))
{
data
=
(
temp
-
'A'
+
10
);
}
return
data
;
}
static
void
kk_vp_get_snapshoot_handle
(
pro_data_t
*
pro_data
)
{
uint8_t
data
[
12
]
=
{
0
};
...
...
@@ -659,10 +811,16 @@ static void kk_vp_get_snapshoot_handle(pro_data_t *pro_data)
uint16_t
nodeId
=
0
;
uint8_t
netStatus
=
0x02
;
if
(
pro_data
->
args_len
!=
1
){
char
*
pMac
=
getMac
();
if
(
pro_data
->
args_len
!=
1
||
pMac
==
NULL
){
return
;
}
for
(
int
j
=
0
;
j
<
6
;
j
++
){
mac
[
j
]
=
(
convert_byte
(
pMac
[
3
*
j
])
<<
4
)
|
convert_byte
(
pMac
[
3
*
j
+
1
]);
}
//todo:
data
[
0
]
=
err
;
for
(
i
=
0
;
i
<
8
;
i
++
){
...
...
@@ -679,7 +837,7 @@ static void kk_vp_scene_trigger_handle(pro_data_t *pro_data)
{
cJSON
*
msg
=
NULL
;
uint8_t
data
[
256
]
=
{
0
};
uint8_t
data
[
1024
]
=
{
0
};
uint8_t
off
=
0
;
uint16_t
*
sceneAry
;
...
...
@@ -750,7 +908,8 @@ static void kk_vp_set_8009_system_time_handle(pro_data_t *pro_data)
minute
=
pro_data
->
arg
[
6
];
sec
=
pro_data
->
arg
[
7
];
kk_vp_set_state_machine
(
GET_8009_CONFIG_FILE_INFO
);
kk_voice_set_time_flag
();
debug_log
(
LOG_INFO_LEVEL
,
"
\n
%d-%d-%d %d:%d:%d
\n
"
,
year
,
month
,
day
,
hour
,
minute
,
sec
);
}
...
...
@@ -766,7 +925,7 @@ static void kk_vp_get_system_time_handle(pro_data_t *pro_data)
}
time_t
curTime
=
time
(
NULL
);
struct
tm
*
c
=
gmtime
(
&
curTime
);
struct
tm
*
c
=
localtime
(
&
curTime
);
data
[
0
]
=
0
;
data
[
1
]
=
((
c
->
tm_year
+
1900
)
>>
8
)
&
0Xff
;
...
...
@@ -791,31 +950,30 @@ static void kk_vp_action_handle(pro_data_t *pro_data)
uint32_t
*
OperatorIdAry
=
NULL
;
uint8_t
skillType
;
debug_log
(
LOG_CRIT_LEVEL
,
"
\n\n
*****************VP CTRL*****************
\n
"
);
debug_log
(
LOG_CRIT_LEVEL
,
"
\n\n
****************************KK VOICE CONTROL****************************
\n
"
);
if
((
devNum
=
pro_data
->
arg
[
0
])
!=
0
){
nodeIdAry
=
malloc
(
sizeof
(
uint32_t
)
*
devNum
);
OperatorIdAry
=
malloc
(
sizeof
(
uint32_t
)
*
devNum
);
debug_log
(
LOG_DEBUG_LEVEL
,
"devNum=%d"
,
devNum
);
debug_log
(
LOG_DEBUG_LEVEL
,
"devNum=%d
\n
"
,
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
];
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
]);
debug_log
(
LOG_DEBUG_LEVEL
,
"[%d]Node Id=0x%08x,Operator Id=0x%08x
\n
"
,
i
,
nodeIdAry
[
i
],
OperatorIdAry
[
i
]);
}
skillType
=
pro_data
->
arg
[
1
+
8
*
i
];
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
);
debug_log
(
LOG_DEBUG_LEVEL
,
"skill type=0x%02x,arg len=%d
\n
"
,
skillType
,
pro_data
->
args_len
-
1
-
8
*
devNum
);
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
;
...
...
@@ -870,14 +1028,14 @@ static void kk_vp_config_file_update_notify_handle(pro_data_t *pro_data)
static
void
kk_vp_config_file_update_data_req_handle
(
pro_data_t
*
pro_data
)
{
uint8_t
err
=
0
;
int
err
=
0
;
uint32_t
f_ver
,
offset
;
uint16_t
req_size
;
uint8_t
data
[
256
]
=
{
0
};
uint
8_t
len
=
0
;
uint
8_t
r_len
=
0
;
uint
8_t
t_len
=
0
;
uint8_t
data
[
1024
]
=
{
0
};
uint
16_t
len
=
0
;
uint
16_t
r_len
=
0
;
uint
16_t
t_len
=
0
;
uint8_t
*
pCrc
=
NULL
;
uint32_t
crc
;
...
...
@@ -914,14 +1072,40 @@ static void kk_vp_config_file_update_data_req_handle(pro_data_t *pro_data)
pCrc
=
&
data
[
len
];
if
(
err
==
0
){
int
err
=
fseek
(
update_fp
,
offset
,
SEEK_SET
);
if
(
update_fp
!=
NULL
){
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
);
debug_log
(
LOG_ERROR_LEVEL
,
"r_len=%d
\n
"
,
r_len
);
if
(
r_len
>=
0
){
if
(
update_fp
==
NULL
){
debug_log
(
LOG_ERROR_LEVEL
,
"NULL
\n
"
);
}
if
(
r_len
<
req_size
){
debug_log
(
LOG_ERROR_LEVEL
,
"r_len<req_size
\n
"
);
if
(
feof
(
update_fp
)
!=
0
){
debug_log
(
LOG_ERROR_LEVEL
,
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@eof
\n
"
);
break
;
}
else
if
(
ferror
(
update_fp
)
!=
0
){
debug_log
(
LOG_ERROR_LEVEL
,
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@err:%d,%d
\n
"
,
ferror
(
update_fp
),
errno
);
break
;
}
}
if
(
r_len
>
0
){
t_len
+=
r_len
;
len
+=
r_len
;
}
else
if
(
r_len
==
0
){
if
(
errno
!=
EINTR
){
break
;
}
}
else
{
break
;
}
...
...
@@ -938,7 +1122,7 @@ static void kk_vp_config_file_update_data_req_handle(pro_data_t *pro_data)
data
[
len
++
]
=
crc
&
0xff
;
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
);
//usleep(100*1000);
}
...
...
@@ -1034,9 +1218,7 @@ static void kk_vp_voice_control_handle(pro_data_t *pro_data)
return
;
}
debug_log
(
LOG_CRIT_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
)
...
...
@@ -1066,10 +1248,65 @@ static void kk_vp_config_file_info_query_handle(pro_data_t *pro_data)
///////////////////////////////////////////
void
kk_voice_control
(
int
val
)
{
uint8_t
res
[
1
]
=
{
0
};
if
(
val
>
100
){
val
=
100
;
}
else
if
(
val
<
0
){
val
=
0
;
}
res
[
0
]
=
val
;
debug_log
(
LOG_DEBUG_LEVEL
,
"sound control
\n
"
);
vp_send_data_build_ex
(
OPCODE_VOICE_CONTROL
,
sizeof
(
res
),
res
);
}
void
kk_voice_switch
(
int
val
)
{
uint8_t
res
[
3
]
=
{
0
};
if
(
val
==
0
||
val
==
1
){
res
[
0
]
=
val
;
res
[
1
]
=
0xff
;
res
[
2
]
=
0xff
;
debug_log
(
LOG_DEBUG_LEVEL
,
"voice switch
\n
"
);
vp_send_data_build
(
OPCODE_VOICE_SWITCH
,
sizeof
(
res
),
res
);
}
}
void
kk_voice_cfg_init
(
void
)
{
uint8_t
res
[
3
]
=
{
0
};
res
[
0
]
=
0xff
;
res
[
1
]
=
(
KK_VOICE_OTA_MTU
>>
8
)
&
0xff
;
res
[
2
]
=
KK_VOICE_OTA_MTU
&
0xff
;
debug_log
(
LOG_DEBUG_LEVEL
,
"@@@@@@@@@@@@@@@@@@@@@@@
\n
"
);
vp_send_data_build
(
OPCODE_VOICE_SWITCH
,
sizeof
(
res
),
res
);
}
void
kk_voice_test
(
void
)
{
uint8_t
res
[
1
]
=
{
1
};
vp_send_data_build
(
0XEDB4
,
sizeof
(
res
),
res
);
}
void
kk_vp_get_8009_snapshoot
(
void
)
{
uint8_t
res
[
1
]
=
{
0
};
debug_log
(
LOG_DEBUG_LEVEL
,
"get snapshoot
\n
"
);
kk_get_voice_version
();
vp_send_data_build
(
OPCODE_8009_SNAPSHOOT
,
sizeof
(
res
),
res
);
}
...
...
@@ -1078,7 +1315,9 @@ void kk_vp_set_8009_system_time(void)
uint8_t
data
[
7
]
=
{
0
};
time_t
curTime
=
time
(
NULL
);
struct
tm
*
c
=
gmtime
(
&
curTime
);
struct
tm
*
c
=
localtime
(
&
curTime
);
data
[
0
]
=
((
c
->
tm_year
+
1900
)
>>
8
)
&
0Xff
;
data
[
1
]
=
(
c
->
tm_year
+
1900
)
&
0Xff
;
...
...
@@ -1104,6 +1343,10 @@ void kk_vp_config_file_update_start(uint32_t ver)
f_ver
=
ver
;
f_size
=
_vp_get_cfg_file_size
();
printf
(
"f_size=%d
\n
"
,
f_size
);
if
(
f_size
==
0
){
debug_log
(
LOG_EMERG_LEVEL
,
"[err]!!!!!!!!!!!!!!
\n
"
);
return
;
}
crc32
=
_vp_get_cfg_file_crc32
();
data
[
0
]
=
(
f_ver
>>
24
)
&
0xff
;
...
...
@@ -1165,7 +1408,9 @@ void kk_vp_get_ota_file_info(void)
vp_send_data_build
(
OPCODE_VOICE_OTA_INFO_GET
,
sizeof
(
res
),
res
);
}
static
int
_vp_get_ota_file_crc32
(
char
*
file
)
static
int
_vp_get_ota_file_crc32
(
char
*
file
)
{
char
*
buff
=
NULL
;
char
*
pRead
=
NULL
;
...
...
@@ -1319,12 +1564,6 @@ void kk_vp_ota_file_update_start(char* file)
debug_log
(
LOG_DEBUG_LEVEL
,
"File Version=%d.%d.%d,File Size=%d,CRC32 Value=%08X
\n
"
,
(
f_ver
>>
16
)
&
0xff
,(
f_ver
>>
8
&
0xff
),
f_ver
&
0xff
,
f_size
,
crc32
);
char
dateTime
[
64
]
=
{
0
};
time_t
curTime
=
time
(
NULL
);
struct
tm
*
ptm
=
localtime
(
&
curTime
);
snprintf
(
dateTime
,
sizeof
(
dateTime
),
"%d-%d-%d %d:%d:%d"
,(
ptm
->
tm_year
+
1900
),(
ptm
->
tm_mon
+
1
),
ptm
->
tm_mday
,
ptm
->
tm_hour
,
ptm
->
tm_min
,
ptm
->
tm_sec
);
debug_log
(
LOG_EMERG_LEVEL
,
"ota start time:%s
\n
"
,
dateTime
);
vp_send_data_build
(
OPCODE_VOICE_OTA_UPGRADE_STATR
,
sizeof
(
data
),
data
);
...
...
@@ -1476,8 +1715,10 @@ void kk_vp_syncinfo_handle(_IN cJSON *payload)
}
if
(
kk_vp_config_file_update_check
()
!=
0
){
printf
(
"[%s][%d][vp config file] update.
\n
"
,
__FUNCTION__
,
__LINE__
);
kk_vp_set_updateFlag
(
1
);
debug_log
(
LOG_EMERG_LEVEL
,
"-------------------->start update config file<------------------
\n
"
);
kk_voice_update_config_file
();
}
if
(
root
!=
NULL
){
...
...
@@ -1541,6 +1782,7 @@ static void kk_vp_ota_file_update_data_req_handle(pro_data_t *pro_data)
err = 2;
}*/
data
[
len
++
]
=
err
;
data
[
len
++
]
=
(
offset
>>
24
)
&
0xff
;
...
...
@@ -1553,6 +1795,7 @@ static void kk_vp_ota_file_update_data_req_handle(pro_data_t *pro_data)
data
[
len
++
]
=
req_size
&
0xff
;
pCrc
=
&
data
[
len
];
if
(
err
==
0
){
int
err
=
fseek
(
ota_fp
,
offset
,
SEEK_SET
);
if
(
err
==
0
){
...
...
@@ -1569,12 +1812,15 @@ static void kk_vp_ota_file_update_data_req_handle(pro_data_t *pro_data)
debug_log
(
LOG_ERROR_LEVEL
,
"[fseek fail]offset=%d
\n
"
,
offset
);
}
}
crc
=
CreateCrc32
(
pCrc
,
req_size
);
data
[
len
++
]
=
(
crc
>>
24
)
&
0xff
;
data
[
len
++
]
=
(
crc
>>
16
)
&
0xff
;
data
[
len
++
]
=
(
crc
>>
8
)
&
0xff
;
data
[
len
++
]
=
crc
&
0xff
;
vp_reply_data_build
(
pro_data
->
seq
,
pro_data
->
ch
,
OPCODE_VOICE_OTA_REQUEST
,
len
,
data
);
usleep
(
100
*
1000
);
}
...
...
@@ -1621,15 +1867,17 @@ static void kk_vp_ota_file_update_status_handle(pro_data_t *pro_data)
status
=
pro_data
->
arg
[
3
];
if
(
status
==
0x00
){
kk_vp_set_state_machine
(
GET_8009_SNAPSHOOT_STATE
);
sprintf
(
verBuf
,
"%d.%d.%d"
,
pro_data
->
arg
[
0
],
pro_data
->
arg
[
1
],
pro_data
->
arg
[
2
]);
kk_vp_voice_version_set
(
verBuf
,
strlen
(
verBuf
));
kk_voice_ota_finish_notify
(
verBuf
);
debug_log
(
LOG_NOTICE_LEVEL
,
"
\n
*********************OTA SUCCESS******************
\n
"
);
kk_voice_reset_ver_flag
();
}
debug_log
(
LOG_DEBUG_LEVEL
,
"
\n
ver=%d.%d.%d,status=%d
\n
"
,
pro_data
->
arg
[
0
],
pro_data
->
arg
[
1
],
pro_data
->
arg
[
2
],
status
);
uint8_t
data
[
5
]
=
{
0
};
data
[
0
]
=
err
;
data
[
1
]
=
(
ver
>>
16
)
&
0xff
;
...
...
@@ -1639,12 +1887,7 @@ static void kk_vp_ota_file_update_status_handle(pro_data_t *pro_data)
vp_reply_data_build
(
pro_data
->
seq
,
pro_data
->
ch
,
OPCODE_VOICE_OTA_STATUS_NOTIFY
,
sizeof
(
data
),
data
);
char
dateTime
[
64
]
=
{
0
};
time_t
curTime
=
time
(
NULL
);
struct
tm
*
ptm
=
localtime
(
&
curTime
);
snprintf
(
dateTime
,
sizeof
(
dateTime
),
"%d-%d-%d %d:%d:%d"
,(
ptm
->
tm_year
+
1900
),(
ptm
->
tm_mon
+
1
),
ptm
->
tm_mday
,
ptm
->
tm_hour
,
ptm
->
tm_min
,
ptm
->
tm_sec
);
debug_log
(
LOG_EMERG_LEVEL
,
"ota stop time:%s
\n
"
,
dateTime
);
//kk_vp_update_result_check(status,ver);
}
...
...
@@ -1700,61 +1943,6 @@ static void kk_voice_volume_handle(pro_data_t *pro_data)
cJSON_Delete
(
root
);
}
}
#define SOUND_SETE_VP_CH 9
void
vp_send_data_build_ex
(
uint16_t
opCode
,
int
len
,
uint8_t
*
data
)
{
uint8_t
data_buf
[
1024
]
=
{
0
};
int
data_len
=
0
;
pro_data_t
pro_data
;
memset
(
&
pro_data
,
0
,
sizeof
(
pro_data_t
));
pro_data
.
seq
=
vp_get_seq
();
pro_data
.
ch
=
SOUND_SETE_VP_CH
;
pro_data
.
opcode
=
opCode
;
pro_data
.
cf
.
ack
=
0
;
pro_data
.
cf
.
dir
=
1
;
pro_data
.
cf
.
sof_flag
=
1
;
pro_data
.
args_len
=
len
;
memcpy
(
pro_data
.
arg
,
data
,
len
);
data_len
=
proto_frame_to_uart
(
&
pro_data
,
data_buf
);
debug_log
(
LOG_INFO_LEVEL
,
"
\n
[LAN->VP]len=%d
\n
"
,
data_len
);
uint8_t
dataStr
[
512
]
=
{
0
};
for
(
int
i
=
0
;
i
<
data_len
;
i
++
){
snprintf
((
char
*
)
dataStr
+
strlen
((
char
*
)
dataStr
),
sizeof
(
dataStr
),
"%02X "
,
data_buf
[
i
]);
}
debug_log
(
LOG_INFO_LEVEL
,
"%s
\n\n
"
,
dataStr
);
eSerial_WriteBuffer
(
data_buf
,
data_len
);
}
void
kk_voice_control
(
int
val
)
{
uint8_t
res
[
1
]
=
{
0
};
if
(
val
>
100
){
val
=
100
;
}
else
if
(
val
<
0
){
val
=
0
;
}
res
[
0
]
=
val
;
debug_log
(
LOG_DEBUG_LEVEL
,
"sound control
\n
"
);
vp_send_data_build_ex
(
OPCODE_VOICE_CONTROL
,
sizeof
(
res
),
res
);
}
void
kk_voice_switch
(
int
val
)
{
uint8_t
res
[
3
]
=
{
0
};
if
(
val
==
0
||
val
==
1
){
res
[
0
]
=
val
;
res
[
1
]
=
0xff
;
res
[
2
]
=
0xff
;
debug_log
(
LOG_DEBUG_LEVEL
,
"voice switch
\n
"
);
vp_send_data_build
(
OPCODE_VOICE_SWITCH
,
sizeof
(
res
),
res
);
}
}
\ No newline at end of file
application/klansdk/kk_voice_panel_handle.h
View file @
7b21e73c
...
...
@@ -37,6 +37,7 @@
#define KK_VOICE_OTA_MTU 128
typedef
void
(
*
vp_handle_func
)(
pro_data_t
*
pro_data
);
...
...
@@ -65,7 +66,7 @@ void kk_vp_get_config_file_info(void);
void
kk_vp_get_ota_file_info
(
void
);
void
kk_vp_ota_file_update_start
(
char
*
file
);
void
kk_vp_ota_file_update_stop
(
uint32_t
ver
);
...
...
@@ -86,6 +87,10 @@ 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
);
int
_vp_get_cfg_file_crc32
(
void
);
int
_vp_get_cfg_file_size
(
void
);
void
kk_voice_control
(
int
val
);
...
...
@@ -93,7 +98,10 @@ int kk_vp_voice_version_get(char *ver,int len);
void
kk_voice_switch
(
int
val
);
void
kk_vp_ota_file_update_start
(
char
*
file
);
void
vp_send_data_build
(
uint16_t
opCode
,
uint8_t
len
,
uint8_t
*
data
);
void
vp_send_data_build
(
uint16_t
opCode
,
int
len
,
uint8_t
*
data
);
void
kk_voice_set_time_flag
(
void
);
#endif
application/klansdk/uart_proto.c
View file @
7b21e73c
...
...
@@ -378,11 +378,11 @@ uint8_t cf_to_uint8_t(control_field_t *cf)
return
((((
uint8_t
)(
cf
->
ack
)))
+
((
cf
->
dir
)
<<
5
)
+
((
cf
->
sof_flag
)
<<
4
)
+
((
cf
->
mf_flag
)
<<
3
));
}
uint
8_t
proto_frame_to_uart
(
pro_data_t
*
pro_data
,
uint8_t
*
uart_data
)
uint
16_t
proto_frame_to_uart
(
pro_data_t
*
pro_data
,
uint8_t
*
uart_data
)
{
uint
8_t
i
=
0
;
uint
16_t
i
=
0
;
uint16_t
cf
;
uint8_t
len
;
int
len
;
uint16_t
crc
;
uart_data
[
i
++
]
=
PRO_SOF_1
;
...
...
@@ -422,7 +422,7 @@ void pro_send_link_ack(pro_data_t *pro_data)
uint8_t
buf
[
PRO_LINK_PAKCET_SIZE
];
uint16_t
len
=
2
;
uint16_t
crc
;
uint
8_t
i
=
0
;
uint
16_t
i
=
0
;
buf
[
i
++
]
=
PRO_SOF_1
;
buf
[
i
++
]
=
PRO_SOF_2
;
...
...
@@ -464,16 +464,15 @@ void dev_send_uart(uint8_t *data, uint16_t data_len)
static
void
uart_protocol_print
(
pro_data_t
*
pro_data
)
{
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
,
"opcode:
\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:
\t
\t
"
);
snprintf
(
print_buf
,
sizeof
(
print_buf
),
"args:
\t
"
);
for
(
i
=
0
;
i
<
pro_data
->
args_len
;
i
++
)
{
...
...
@@ -499,7 +498,7 @@ void connect_status_ack(pro_data_t pro_data)
pro_data_tmp
.
arg
[
pro_data_tmp
.
args_len
++
]
=
0
;
// err status
uint8_t
data_buf
[
255
]
=
{
0
};
uint8_t
data_len
=
0
;
int
data_len
=
0
;
data_len
=
proto_frame_to_uart
(
&
pro_data_tmp
,
data_buf
);
dev_send_uart
(
data_buf
,
data_len
);
...
...
@@ -518,7 +517,7 @@ void system_restart_ack(pro_data_t pro_data)
pro_data_tmp
.
arg
[
pro_data_tmp
.
args_len
++
]
=
0
;
// err status
uint8_t
data_buf
[
255
]
=
{
0
};
uint8_t
data_len
=
0
;
int
data_len
=
0
;
data_len
=
proto_frame_to_uart
(
&
pro_data_tmp
,
data_buf
);
dev_send_uart
(
data_buf
,
data_len
);
...
...
@@ -744,7 +743,7 @@ void set_mac_ack(pro_data_t pro_data)
pro_data_tmp
.
cf
.
sof_flag
=
0
;
//pro_data_tmp.arg[pro_data_tmp.args_len++] = 0; // err status
uint8_t
mac_len
=
pro_data_tmp
.
arg
[
0
];
int
mac_len
=
pro_data_tmp
.
arg
[
0
];
int
i
=
0
;
for
(
i
=
0
;
i
<
mac_len
;
i
++
)
...
...
@@ -771,7 +770,7 @@ void set_mac_ack(pro_data_t pro_data)
pro_data_tmp
.
args_len
++
;
uint8_t
data_buf
[
255
]
=
{
0
};
uint8_t
data_len
=
0
;
int
data_len
=
0
;
data_len
=
proto_frame_to_uart
(
&
pro_data_tmp
,
data_buf
);
dev_send_uart
(
data_buf
,
data_len
);
...
...
@@ -806,7 +805,7 @@ void read_flash_mac_ack(pro_data_t pro_data)
uint8_t
data_buf
[
255
]
=
{
0
};
uint8_t
data_len
=
0
;
int
data_len
=
0
;
data_len
=
proto_frame_to_uart
(
&
pro_data_tmp
,
data_buf
);
dev_send_uart
(
data_buf
,
data_len
);
...
...
@@ -876,7 +875,7 @@ extern void kk_vp_opcode_handle(pro_data_t *pro_data);
void
uart_frame_handle
()
{
uint8_t
*
data
=
g_uart_data
.
data
;
uint8_t
data_len
=
g_uart_data
.
data_len
;
int
data_len
=
g_uart_data
.
data_len
;
pro_data_t
pro_data
;
//uint8_t pro_data_buf[256];
...
...
@@ -891,57 +890,6 @@ void uart_frame_handle()
kk_vp_opcode_handle
(
&
pro_data
);
// handle msg
switch
(
pro_data
.
opcode
)
{
case
OPCODE_CONNECT_STATUS_QUERY
:
{
connect_status_ack
(
pro_data
);
break
;
}
case
OPCODE_BURN_MAC
:
{
//��ʱ��֧��
set_mac_ack
(
pro_data
);
break
;
}
case
OPCODE_READ_MAC
:
{
read_mac_ack
(
pro_data
);
break
;
}
case
OPCODE_READ_VERSION
:
{
read_version_ack
(
pro_data
);
break
;
}
case
OPCODE_EXIT_SUBBOARD_TEST
:
{
exit_subboard_test_ack
(
pro_data
);
break
;
}
case
OPCODE_READ_MAC_FROM_FLASH
:
{
read_flash_mac_ack
(
pro_data
);
break
;
}
case
OPCODE_SYSTEM_RESTART
:
{
system_restart_ack
(
pro_data
);
break
;
}
default:
{
//GW_LOG_DBG("gw others opcode %04X ack\n", pro_data.opcode);
break
;
}
}
return
;
}
application/klansdk/uart_proto.h
View file @
7b21e73c
...
...
@@ -113,7 +113,7 @@ typedef struct
uint8_t
ch
;
uint16_t
opcode
;
uint16_t
args_len
;
uint8_t
arg
[
256
];
uint8_t
arg
[
1024
];
}
pro_data_t
;
int
my_system
(
const
char
*
cmd
);
...
...
@@ -130,7 +130,7 @@ int get_proto_frame(uint8_t *data, uint16_t data_len, pro_data_t *pro_data);
void
pro_send_link_ack
(
pro_data_t
*
pro_data
);
uint
8_t
proto_frame_to_uart
(
pro_data_t
*
pro_data
,
uint8_t
*
uart_data
);
uint
16_t
proto_frame_to_uart
(
pro_data_t
*
pro_data
,
uint8_t
*
uart_data
);
int
get_uart_frame
(
uint8_t
*
buf
,
int
len
);
void
uart_frame_handle
();
...
...
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