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
a37d38b7
Commit
a37d38b7
authored
Jul 27, 2021
by
尹佳钦
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add
parent
f7abf54d
Changes
16
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
2863 additions
and
4 deletions
+2863
-4
application/klansdk/kk_ccu_msg.c
application/klansdk/kk_ccu_msg.c
+353
-0
application/klansdk/kk_ccu_msg.h
application/klansdk/kk_ccu_msg.h
+46
-0
application/klansdk/kk_data_mng.c
application/klansdk/kk_data_mng.c
+5
-2
application/klansdk/kk_lan_ctrl.c
application/klansdk/kk_lan_ctrl.c
+332
-0
application/klansdk/kk_lan_ctrl.h
application/klansdk/kk_lan_ctrl.h
+32
-0
application/klansdk/kk_lan_main.c
application/klansdk/kk_lan_main.c
+3
-2
application/klansdk/kk_lan_new_dev_notify.c
application/klansdk/kk_lan_new_dev_notify.c
+393
-0
application/klansdk/kk_lan_new_dev_notify.h
application/klansdk/kk_lan_new_dev_notify.h
+149
-0
application/klansdk/kk_lan_node_db.c
application/klansdk/kk_lan_node_db.c
+427
-0
application/klansdk/kk_lan_node_db.h
application/klansdk/kk_lan_node_db.h
+36
-0
application/klansdk/kk_lan_queue.c
application/klansdk/kk_lan_queue.c
+166
-0
application/klansdk/kk_lan_queue.h
application/klansdk/kk_lan_queue.h
+30
-0
application/klansdk/kk_newccu_msg.c
application/klansdk/kk_newccu_msg.c
+91
-0
application/klansdk/kk_newccu_msg.h
application/klansdk/kk_newccu_msg.h
+26
-0
application/klansdk/kk_oldccu_msg.c
application/klansdk/kk_oldccu_msg.c
+747
-0
application/klansdk/kk_oldccu_msg.h
application/klansdk/kk_oldccu_msg.h
+27
-0
No files found.
application/klansdk/kk_ccu_msg.c
0 → 100644
View file @
a37d38b7
#include "kk_ccu_msg.h"
cJSON
*
bool_type_convert
(
cJSON
*
n_id
,
cJSON
*
n_dataType
);
cJSON
*
int_type_convert
(
cJSON
*
n_id
,
cJSON
*
n_dataType
);
cJSON
*
double_type_convert
(
cJSON
*
n_id
,
cJSON
*
n_dataType
);
cJSON
*
string_bool_type_convert
(
cJSON
*
n_id
,
cJSON
*
n_dataType
);
cJSON
*
string_int_type_convert
(
cJSON
*
n_id
,
cJSON
*
n_dataType
);
cJSON
*
string_double_type_convert
(
cJSON
*
n_id
,
cJSON
*
n_dataType
);
cJSON
*
string_time_type_convert
(
cJSON
*
n_id
,
cJSON
*
n_dataType
);
typedef
cJSON
*
(
*
convert_func
)(
cJSON
*
,
cJSON
*
);
typedef
struct
{
char
*
type
;
convert_func
func
;
}
CONVERT_ITEM_S
;
static
CONVERT_ITEM_S
convert_table
[]
=
{
{
"bool"
,
bool_type_convert
},
{
"int"
,
int_type_convert
},
{
"double"
,
double_type_convert
},
{
"string_bool"
,
string_bool_type_convert
},
{
"string_int"
,
string_int_type_convert
},
{
"string_double"
,
string_double_type_convert
},
{
"string_time"
,
string_time_type_convert
}
};
cJSON
*
bool_type_convert
(
cJSON
*
n_id
,
cJSON
*
n_dataType
)
{
cJSON
*
args
=
NULL
;
int
bVal
=
0
;
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
if
(
strcmp
(
n_dataType
->
valuestring
,
"dummy"
)
==
0
)
{
return
NULL
;
}
if
((
strcmp
(
n_dataType
->
valuestring
,
"int"
)
==
0
)
||
(
strcmp
(
n_dataType
->
valuestring
,
"bool"
)
==
0
)){
args
=
cJSON_CreateBool
(
n_id
->
valueint
);
}
else
if
(
strcmp
(
n_dataType
->
valuestring
,
"double"
)
==
0
)
{
bVal
=
(
n_id
->
valuedouble
>
0
)
?
1
:
0
;
args
=
cJSON_CreateBool
(
bVal
);
}
else
if
(
strcmp
(
n_dataType
->
valuestring
,
"string_bool"
)
==
0
)
{
if
(
strcmp
(
n_id
->
valuestring
,
"true"
)
==
0
||
strcmp
(
n_id
->
valuestring
,
"TRUE"
)
==
0
){
args
=
cJSON_CreateBool
(
1
);
}
else
if
(
strcmp
(
n_id
->
valuestring
,
"true"
)
==
0
||
strcmp
(
n_id
->
valuestring
,
"TRUE"
)
==
0
){
args
=
cJSON_CreateBool
(
0
);
}
}
else
if
(
strcmp
(
n_dataType
->
valuestring
,
"string_int"
)
==
0
)
{
int
iVal
=
atoi
(
n_id
->
valuestring
);
bVal
=
(
iVal
>
0
)
?
1
:
0
;
args
=
cJSON_CreateBool
(
bVal
);
}
else
if
(
strcmp
(
n_dataType
->
valuestring
,
"string_double"
)
==
0
)
{
double
dVal
=
atof
(
n_id
->
valuestring
);
bVal
=
(
dVal
>
0
)
?
1
:
0
;
args
=
cJSON_CreateBool
(
bVal
);
}
return
args
;
}
cJSON
*
int_type_convert
(
cJSON
*
n_id
,
cJSON
*
n_dataType
)
{
cJSON
*
args
=
NULL
;
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
if
(
strcmp
(
n_dataType
->
valuestring
,
"dummy"
)
==
0
)
{
return
NULL
;
}
if
((
strcmp
(
n_dataType
->
valuestring
,
"int"
)
==
0
)
||
(
strcmp
(
n_dataType
->
valuestring
,
"bool"
)
==
0
)){
args
=
cJSON_CreateNumber
(
n_id
->
valueint
);
}
else
if
(
strcmp
(
n_dataType
->
valuestring
,
"double"
)
==
0
)
{
args
=
cJSON_CreateNumber
(
n_id
->
valuedouble
);
}
else
if
(
strcmp
(
n_dataType
->
valuestring
,
"string_bool"
)
==
0
)
{
if
(
strcmp
(
n_id
->
valuestring
,
"true"
)
==
0
||
strcmp
(
n_id
->
valuestring
,
"TRUE"
)
==
0
){
args
=
cJSON_CreateNumber
(
1
);
}
else
if
(
strcmp
(
n_id
->
valuestring
,
"true"
)
==
0
||
strcmp
(
n_id
->
valuestring
,
"TRUE"
)
==
0
){
args
=
cJSON_CreateNumber
(
0
);
}
}
else
if
(
strcmp
(
n_dataType
->
valuestring
,
"string_int"
)
==
0
)
{
args
=
cJSON_CreateNumber
(
atoi
(
n_id
->
valuestring
));
}
else
if
(
strcmp
(
n_dataType
->
valuestring
,
"string_double"
)
==
0
)
{
args
=
cJSON_CreateNumber
((
int
)
atof
(
n_id
->
valuestring
));
}
return
args
;
}
cJSON
*
double_type_convert
(
cJSON
*
n_id
,
cJSON
*
n_dataType
)
{
return
int_type_convert
(
n_id
,
n_dataType
);
}
cJSON
*
string_bool_type_convert
(
cJSON
*
n_id
,
cJSON
*
n_dataType
)
{
cJSON
*
args
=
NULL
;
int
flag
=
-
1
;
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
if
(
strcmp
(
n_dataType
->
valuestring
,
"dummy"
)
==
0
)
{
return
NULL
;
}
if
((
strcmp
(
n_dataType
->
valuestring
,
"int"
)
==
0
)
||
(
strcmp
(
n_dataType
->
valuestring
,
"bool"
)
==
0
)){
flag
=
(
n_id
->
valueint
>
0
)
?
1
:
0
;
}
else
if
(
strcmp
(
n_dataType
->
valuestring
,
"double"
)
==
0
)
{
flag
=
(
n_id
->
valuedouble
>
0
)
?
1
:
0
;
}
else
if
(
strcmp
(
n_dataType
->
valuestring
,
"string_bool"
)
==
0
)
{
if
(
strcmp
(
n_id
->
valuestring
,
"true"
)
==
0
||
strcmp
(
n_id
->
valuestring
,
"TRUE"
)
==
0
){
flag
=
1
;
}
else
if
(
strcmp
(
n_id
->
valuestring
,
"false"
)
==
0
||
strcmp
(
n_id
->
valuestring
,
"FALSE"
)
==
0
){
flag
=
0
;
}
}
else
if
(
strcmp
(
n_dataType
->
valuestring
,
"string_int"
)
==
0
)
{
flag
=
(
atoi
(
n_id
->
valuestring
)
>
0
)
?
1
:
0
;
}
else
if
(
strcmp
(
n_dataType
->
valuestring
,
"string_double"
)
==
0
)
{
flag
=
(
atof
(
n_id
->
valuestring
)
>
0
)
?
1
:
0
;
}
if
(
flag
==
1
)
{
args
=
cJSON_CreateString
(
"true"
);
}
else
if
(
flag
==
0
){
args
=
cJSON_CreateString
(
"false"
);
}
return
args
;
}
static
cJSON
*
string_val_type_convert
(
int
type
,
cJSON
*
n_id
,
cJSON
*
n_dataType
)
{
cJSON
*
args
=
NULL
;
char
sVal
[
32
]
=
{
0
};
union
{
int
iVal
;
double
dVal
;
}
val
=
{
0
};
memset
(
sVal
,
0
,
sizeof
(
sVal
));
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
if
(
strcmp
(
n_dataType
->
valuestring
,
"dummy"
)
==
0
)
{
return
NULL
;
}
if
((
strcmp
(
n_dataType
->
valuestring
,
"int"
)
==
0
)
||
(
strcmp
(
n_dataType
->
valuestring
,
"bool"
)
==
0
)){
if
(
type
==
1
){
val
.
dVal
=
(
n_id
->
valueint
>
0
)
?
1
:
0
;
}
else
{
val
.
iVal
=
(
n_id
->
valueint
>
0
)
?
1
:
0
;
}
}
else
if
(
strcmp
(
n_dataType
->
valuestring
,
"double"
)
==
0
)
{
if
(
type
==
1
){
val
.
dVal
=
n_id
->
valuedouble
;
}
else
{
val
.
iVal
=
n_id
->
valueint
;
}
}
else
if
(
strcmp
(
n_dataType
->
valuestring
,
"string_bool"
)
==
0
)
{
if
(
strcmp
(
n_id
->
valuestring
,
"true"
)
==
0
||
strcmp
(
n_id
->
valuestring
,
"TRUE"
)
==
0
){
if
(
type
==
1
){
val
.
dVal
=
1
;
}
else
{
val
.
iVal
=
1
;
}
}
else
if
(
strcmp
(
n_id
->
valuestring
,
"false"
)
==
0
||
strcmp
(
n_id
->
valuestring
,
"FALSE"
)
==
0
)
if
(
type
==
1
){
val
.
dVal
=
0
;
}
else
{
val
.
iVal
=
0
;
}
}
else
if
(
strcmp
(
n_dataType
->
valuestring
,
"string_int"
)
==
0
)
{
if
(
type
==
1
){
val
.
dVal
=
atoi
(
n_id
->
valuestring
);
}
else
{
val
.
iVal
=
atoi
(
n_id
->
valuestring
);
}
}
else
if
(
strcmp
(
n_dataType
->
valuestring
,
"string_double"
)
==
0
)
{
if
(
type
==
1
){
val
.
dVal
=
atof
(
n_id
->
valuestring
);
}
else
{
val
.
iVal
=
atof
(
n_id
->
valuestring
);
}
}
if
(
type
==
1
){
snprintf
(
sVal
,
sizeof
(
sVal
),
"%f"
,
val
.
dVal
);
}
else
{
snprintf
(
sVal
,
sizeof
(
sVal
),
"%d"
,
val
.
iVal
);
}
args
=
cJSON_CreateString
(
sVal
);
return
args
;
}
cJSON
*
string_int_type_convert
(
cJSON
*
n_id
,
cJSON
*
n_dataType
)
{
return
string_val_type_convert
(
0
,
n_id
,
n_dataType
);
}
cJSON
*
string_double_type_convert
(
cJSON
*
n_id
,
cJSON
*
n_dataType
)
{
return
string_val_type_convert
(
1
,
n_id
,
n_dataType
);
}
cJSON
*
string_time_type_convert
(
cJSON
*
n_id
,
cJSON
*
n_dataType
)
{
cJSON
*
args
=
NULL
;
int
val
;
char
tm
[
10
]
=
{
0
};
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
if
(
strcmp
(
n_dataType
->
valuestring
,
"dummy"
)
==
0
)
{
return
NULL
;
}
if
(
strcmp
(
n_dataType
->
valuestring
,
"double"
)
==
0
){
val
=
n_id
->
valuedouble
*
10
;
memset
(
tm
,
0
,
sizeof
(
tm
));
snprintf
(
tm
,
sizeof
(
tm
),
"%02d:%2s"
,(
int
)
n_id
->
valuedouble
,((
val
%
10
>=
5
)
?
"30"
:
"00"
));
args
=
cJSON_CreateString
(
tm
);
}
return
args
;
}
cJSON
*
msg_convert_value
(
cJSON
*
d_type
,
cJSON
*
s_type
,
cJSON
*
value
)
{
int
i
,
size
;
cJSON
*
rlt
=
NULL
;
CONVERT_ITEM_S
*
crt
;
printf
(
"[%s][%d]type:%s->%s,val=%s
\n
"
,
__FUNCTION__
,
__LINE__
,
d_type
->
valuestring
,
s_type
->
valuestring
,
cJSON_Print
(
value
));
size
=
sizeof
(
convert_table
)
/
sizeof
(
CONVERT_ITEM_S
);
crt
=
&
convert_table
[
0
];
for
(
i
=
0
;
i
<
size
;
i
++
,
crt
++
){
if
(
strcmp
(
d_type
->
valuestring
,
crt
->
type
)
==
0
)
{
rlt
=
crt
->
func
(
value
,
s_type
);
break
;
}
}
return
rlt
;
}
cJSON
*
map_type_convert
(
cJSON
*
s_dataType
,
cJSON
*
s_valueRange
,
cJSON
*
value
,
cJSON
*
d_valueRange
)
{
cJSON
*
args
=
NULL
;
cJSON
*
rlt
;
int
j
;
int
vra_size
=
cJSON_GetArraySize
(
s_valueRange
);
printf
(
"[%s][%d]type:%s
\n
"
,
__FUNCTION__
,
__LINE__
,
s_dataType
->
valuestring
);
printf
(
"s_valueRange=%s
\n
"
,
cJSON_Print
(
s_valueRange
));
printf
(
"d_valueRange=%s
\n
"
,
cJSON_Print
(
d_valueRange
));
printf
(
"value=%s
\n
"
,
cJSON_Print
(
value
));
for
(
j
=
0
;
j
<
vra_size
;
j
++
){
if
(
strcmp
(
s_dataType
->
valuestring
,
"dummy"
)
==
0
){
continue
;
}
rlt
=
cJSON_GetArrayItem
(
s_valueRange
,
j
);
if
(
strcmp
(
s_dataType
->
valuestring
,
"bool"
)
==
0
||
strcmp
(
s_dataType
->
valuestring
,
"int"
)
==
0
)
{
if
(
rlt
->
valueint
==
value
->
valueint
)
{
args
=
cJSON_GetArrayItem
(
d_valueRange
,
j
);
break
;
}
}
else
if
(
strcmp
(
s_dataType
->
valuestring
,
"double"
)
==
0
){
if
(
rlt
->
valuedouble
==
value
->
valuedouble
)
{
args
=
cJSON_GetArrayItem
(
d_valueRange
,
j
);
break
;
}
}
else
if
(
strstr
(
s_dataType
->
valuestring
,
"string"
)){
if
(
strcmp
(
rlt
->
valuestring
,
value
->
valuestring
)
==
0
){
args
=
cJSON_GetArrayItem
(
d_valueRange
,
j
);
break
;
}
}
else
if
(
strstr
(
s_dataType
->
valuestring
,
"map"
)){
printf
(
"rlt=%d
\n
"
,
rlt
->
type
);
if
(
rlt
->
type
==
cJSON_String
){
printf
(
"111111
\n
"
);
if
(
strcmp
(
rlt
->
valuestring
,
value
->
valuestring
)
==
0
){
printf
(
"22222
\n
"
);
args
=
cJSON_GetArrayItem
(
d_valueRange
,
j
);
break
;
}
}
else
if
(
rlt
->
type
==
cJSON_Number
){
printf
(
"44444
\n
"
);
if
(
rlt
->
valueint
==
value
->
valueint
)
{
printf
(
"33333
\n
"
);
args
=
cJSON_GetArrayItem
(
d_valueRange
,
j
);
break
;
}
}
}
}
return
args
;
}
application/klansdk/kk_ccu_msg.h
0 → 100644
View file @
a37d38b7
#ifndef _KK_CCU_MSG_H
#define _KK_CCU_MSG_H
#include "kk_log.h"
#include "klist.h"
#include "kk_product.h"
#include "com_api.h"
#include "kk_opcode.h"
#include "kk_lan_ctrl.h"
#include "kk_data_mng.h"
#include "cJSON.h"
#define SWITCH_ARG_ON "ON"
#define SWITCH_ARG_OFF "OFF"
#define HJ_SERVER "HJ_Server"
#define SUCCESS_STATUS_STR "success"
#define NODEID_STR "nodeid"
#define OPCODE_STR "opcode"
#define ARG_STR "arg"
#define REQUEST_STR "requester"
#define INFO_STRING "info"
#define PAYLOAD_STRING "payload"
#define PARAMS_STRING "params"
cJSON
*
msg_convert_value
(
cJSON
*
d_type
,
cJSON
*
s_type
,
cJSON
*
value
);
cJSON
*
map_type_convert
(
cJSON
*
s_dataType
,
cJSON
*
s_valueRange
,
cJSON
*
value
,
cJSON
*
d_valueRange
);
#endif
application/klansdk/kk_data_mng.c
View file @
a37d38b7
...
...
@@ -422,12 +422,15 @@ int kk_create_devicestatus_to_sdk(cJSON *root)
cJSON
*
device_status
=
cJSON_CreateArray
();
cJSON
*
args
;
cJSON
*
sub_device
;
list_for_each_entry
(
node
,
&
ctx
->
dev_list
,
linked_list
,
kk_map_dev_node_t
){
kk_map_dev_node_t
*
n
=
NULL
;
list_for_each_entry_safe
(
node
,
n
,
&
ctx
->
dev_list
,
linked_list
,
kk_map_dev_node_t
){
if
(
node
->
syn_type
==
1
){
kk_creater_nodeid
(
node
->
deviceCode
,
1
,
nodeid
);
if
((
args
=
kk_devicestatus_build
(
node
))
!=
NULL
){
sub_device
=
old_ccu_msg_build_json_node_int
(
atoi
(
nodeid
),
node
->
syn_opcode
,
NULL
,
args
);
if
(
sub_device
){
cJSON_AddItemToArray
(
device_status
,
sub_device
);
...
...
application/klansdk/kk_lan_ctrl.c
0 → 100644
View file @
a37d38b7
#include "kk_log.h"
#include "klist.h"
#include "kk_product.h"
#include "com_api.h"
#include "kk_opcode.h"
#include "kk_lan_ctrl.h"
#include "kk_data_mng.h"
#include "cJSON.h"
#include "kk_ccu_msg.h"
#include "kk_oldccu_msg.h"
#include "kk_newccu_msg.h"
int
find_match_pos
(
cJSON
*
array
,
const
char
*
tag
,
const
char
*
match
)
{
int
i
=
0
;
int
pos
=
-
1
;
cJSON
*
item
;
cJSON
*
mh
;
int
size
=
cJSON_GetArraySize
(
array
);
for
(;
i
<
size
;
i
++
){
item
=
cJSON_GetArrayItem
(
array
,
i
);
mh
=
cJSON_GetObjectItem
(
item
,
tag
);
if
(
strcmp
(
mh
->
valuestring
,
match
)
==
0
){
pos
=
i
;
break
;
}
}
return
pos
;
}
int
match_opcode_pos
(
cJSON
*
array
,
const
char
*
opcode
,
int
ch
)
{
int
i
=
0
;
int
pos
=
-
1
;
cJSON
*
item
;
cJSON
*
mh
;
cJSON
*
channel
;
int
size
=
cJSON_GetArraySize
(
array
);
for
(;
i
<
size
;
i
++
){
item
=
cJSON_GetArrayItem
(
array
,
i
);
mh
=
cJSON_GetObjectItem
(
item
,
"opcode"
);
channel
=
cJSON_GetObjectItem
(
item
,
"channel"
);
if
((
strcmp
(
mh
->
valuestring
,
opcode
)
==
0
)
&&
(
atoi
(
channel
->
valuestring
)
==
ch
)){
pos
=
i
;
break
;
}
}
return
pos
;
}
int
match_value_string
(
cJSON
*
valueRange
,
const
char
*
val
)
{
cJSON
*
item
;
int
i
=
0
;
int
pos
=
-
1
;
int
size
=
cJSON_GetArraySize
(
valueRange
);
for
(;
i
<
size
;
i
++
){
item
=
cJSON_GetArrayItem
(
valueRange
,
i
);
if
(
strcmp
(
item
->
valuestring
,
val
)
==
0
){
pos
=
i
;
break
;
}
}
return
pos
;
}
cJSON
*
ctrl_conver
(
kk_map_dev_node_t
*
devNode
,
int
nodeId
,
cJSON
*
arg
,
cJSON
*
opcode
)
{
cJSON
*
params
=
cJSON_CreateObject
();
cJSON
*
val
;
cJSON
*
newccuItem
;
cJSON
*
oldccuItem
;
cJSON
*
o_dataType
;
cJSON
*
n_dataType
;
cJSON
*
n_valueRange
;
cJSON
*
o_valueRange
;
cJSON
*
n_identifier
;
int
pos
;
int
channel
;
char
ch
[
33
];
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
kk_lan_db_channel_get
(
nodeId
,
&
channel
);
snprintf
(
ch
,
33
,
"%d"
,
channel
);
printf
(
"nodeId=%d,channel=%d,ch=%s
\n
"
,
nodeId
,
channel
,
ch
);
pos
=
match_opcode_pos
(
devNode
->
oldccu
,
opcode
->
valuestring
,
channel
);
printf
(
"[opcode->valuestring]%s
\n
"
,
opcode
->
valuestring
);
printf
(
"[match pos]%d
\n
"
,
pos
);
if
(
pos
==-
1
){
return
NULL
;
}
newccuItem
=
cJSON_GetArrayItem
(
devNode
->
newccu
,
pos
);
oldccuItem
=
cJSON_GetArrayItem
(
devNode
->
oldccu
,
pos
);
o_dataType
=
cJSON_GetObjectItem
(
oldccuItem
,
"dataType"
);
o_valueRange
=
cJSON_GetObjectItem
(
oldccuItem
,
"valueRange"
);
n_dataType
=
cJSON_GetObjectItem
(
newccuItem
,
"dataType"
);
n_valueRange
=
cJSON_GetObjectItem
(
newccuItem
,
"valueRange"
);
n_identifier
=
cJSON_GetObjectItem
(
newccuItem
,
"identifier"
);
printf
(
"1111
\n
"
);
if
(
strcmp
(
o_dataType
->
valuestring
,
"map"
)
==
0
){
printf
(
"2222
\n
"
);
val
=
map_type_convert
(
o_dataType
,
o_valueRange
,
arg
,
n_valueRange
);
}
else
{
printf
(
"3333
\n
"
);
val
=
msg_convert_value
(
o_dataType
,
n_dataType
,
arg
);
}
printf
(
"4444-->%d
\n
"
,
val
->
type
);
if
(
val
->
type
==
cJSON_False
){
cJSON_AddFalseToObject
(
params
,
n_identifier
->
valuestring
);
}
else
if
(
val
->
type
==
cJSON_True
){
cJSON_AddTrueToObject
(
params
,
n_identifier
->
valuestring
);
}
else
if
(
val
->
type
==
cJSON_NULL
){
cJSON_AddNullToObject
(
params
,
n_identifier
->
valuestring
);
}
else
if
(
val
->
type
==
cJSON_Number
){
cJSON_AddNumberToObject
(
params
,
n_identifier
->
valuestring
,
val
->
valuedouble
);
}
else
if
(
val
->
type
==
cJSON_String
){
cJSON_AddStringToObject
(
params
,
n_identifier
->
valuestring
,
val
->
valuestring
);
}
else
if
(
val
->
type
==
cJSON_Array
){
printf
(
"......................
\n
"
);
}
return
params
;
}
typedef
int
(
*
match_func
)(
cJSON
*
);
typedef
struct
{
char
*
Opcode
;
match_func
func
;
}
MATCH_ITEM_S
;
int
opcode_switch
(
cJSON
*
root
);
static
MATCH_ITEM_S
match_table
[]
=
{
{
SWITCH_OPCODE
,
opcode_switch
}
};
MATCH_ITEM_S
*
get_match_table
(
void
)
{
return
&
match_table
;
}
int
kk_ccu_opcode_handle
(
cJSON
*
root
)
{
int
i
;
//int size = sizeof(match_table)/sizeof(MATCH_ITEM_S);
cJSON
*
opcode
=
cJSON_GetObjectItem
(
root
,
OPCODE_STR
);
//MATCH_ITEM_S *pMh = get_match_table();
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
if
(
opcode
==
NULL
||
opcode
->
type
!=
cJSON_String
){
return
-
1
;
}
/*for(i=0;i<size;i++,pMh++) {
if(strcmp(opcode->valuestring,pMh->Opcode)==0){
if(pMh->func){
printf("[%s][%d]match table[%d]\n",__FUNCTION__,__LINE__,i);
pMh->func(root);
}
}
}*/
opcode_switch
(
root
);
}
//向midware发送数据
int
kk_ipc_send_json
(
cJSON
*
root
)
{
char
*
msg
;
if
(
root
==
NULL
){
return
-
1
;
}
msg
=
cJSON_Print
(
root
);
printf
(
"[lan->midware]json:
\n
%s
\n
"
,
msg
);
cJSON_Minify
(
msg
);
kk_ipc_send
(
IPC_APP2MID
,
msg
,
strlen
(
msg
)
+
1
);
free
(
msg
);
return
0
;
}
int
opcode_switch
(
cJSON
*
root
)
{
cJSON
*
msg
;
cJSON
*
nodeId
;
cJSON
*
opcode
;
cJSON
*
arg
;
cJSON
*
requester
;
char
deviceCode
[
33
]
=
{
0
};
kk_map_dev_node_t
*
dev
;
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
nodeId
=
cJSON_GetObjectItem
(
root
,
NODEID_STR
);
opcode
=
cJSON_GetObjectItem
(
root
,
OPCODE_STR
);
arg
=
cJSON_GetObjectItem
(
root
,
ARG_STR
);
requester
=
cJSON_GetObjectItem
(
root
,
REQUEST_STR
);
if
(
nodeId
==
NULL
||
opcode
==
NULL
||
arg
==
NULL
){
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
return
;
}
if
((
requester
!=
NULL
)
&&
(
strcmp
(
requester
->
valuestring
,
HJ_SERVER
)
!=
0
)){
WARNING_PRINT
(
"[%s] err,%s,%s
\n
"
,
REQUEST_STR
,
HJ_SERVER
,
requester
->
valuestring
);
}
kk_lan_db_deviceCode_get
(
atoi
(
nodeId
->
valuestring
),
deviceCode
);
if
(
kk_map_dev_search_by_deviceCode
(
deviceCode
,
&
dev
)
==
0
){
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
cJSON
*
params
=
ctrl_conver
(
dev
,
atoi
(
nodeId
->
valuestring
),
arg
,
opcode
);
msg
=
property_set
(
dev
->
productCode
,
dev
->
deviceCode
,
"*"
,
"*"
,
params
);
kk_ipc_send_json
(
msg
);
}
else
{
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
}
}
char
*
node_string
(
int
nodeId
)
{
char
*
node
=
(
char
*
)
malloc
(
33
);
memset
(
node
,
0
,
33
);
snprintf
(
node
,
32
,
"%d"
,
nodeId
);
return
node
;
}
char
*
double_string
(
double
dVal
,
int
size
)
{
char
*
buff
=
(
char
*
)
malloc
(
size
+
1
);
memset
(
buff
,
0
,
size
+
1
);
snprintf
(
buff
,
size
,
"%6f"
,
dVal
);
return
buff
;
}
int
update_device_status_2_oldccu
(
int
nodeId
,
const
char
*
opcode
,
const
char
*
arg
)
{
cJSON
*
msg
;
char
*
nodeStr
;
if
(
arg
==
NULL
){
return
-
1
;
}
printf
(
"[%s][%d]nodeId=%d,status=%s
\n
"
,
__FUNCTION__
,
__LINE__
,
nodeId
,
arg
);
if
((
nodeStr
=
node_string
(
nodeId
))
!=
NULL
){
msg
=
old_ccu_msg_build
(
nodeStr
,
opcode
,
"success"
,
arg
);
send_msg_to_module
(
msg
);
cJSON_Delete
(
msg
);
free
(
nodeStr
);
return
0
;
}
return
-
1
;
}
application/klansdk/kk_lan_ctrl.h
0 → 100644
View file @
a37d38b7
#ifndef _KK_LAN_CTRL_H
#define _KK_LAN_CTRL_H
#include "cJSON.h"
int
kk_ccu_opcode_handle
(
cJSON
*
root
);
void
property_post_deal
(
const
char
*
deviceCode
,
cJSON
*
payload
);
#endif
application/klansdk/kk_lan_main.c
View file @
a37d38b7
...
...
@@ -37,6 +37,7 @@ static void sig_handler(int sig)
extern
void
ttttt_test
();
extern
void
kk_scene_build_test
(
void
);
int
main
(
int
argc
,
char
*
argv
[])
{
...
...
@@ -44,6 +45,7 @@ int main(int argc, char* argv[])
char
*
ppp
;
open
(
"kk_lan"
,
LOG_PID
,
LOG_USER
);
ttttt_test
();
kk_scene_build_test
();
/*set the callback to get the device date to cloud*/
kk_ipc_init
(
IPC_APP2MID
,(
ipc_cb
*
)
KK_Data_FromMid
,
NULL
,
NULL
);
kk_findccu_handle_init
();
...
...
@@ -63,8 +65,7 @@ int main(int argc, char* argv[])
while
(
1
){
extern
void
kk_scene_build_test
(
void
);
kk_scene_build_test
();
//count++;
//if(count == 10){
//kk_ipc_send(IPC_APP2MID, "wooooooooooooooooooooooooooooooooooollllll!", strlen("wooooooooooooooooooooooooooooooooooollllll!")+1);
...
...
application/klansdk/kk_lan_new_dev_notify.c
0 → 100644
View file @
a37d38b7
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "kk_data_mng.h"
#include "kk_lan_node_db.h"
#include "kk_log.h"
#include "klist.h"
#include "kk_product.h"
#include "com_api.h"
#include "kk_opcode.h"
#include "kk_lan_ctrl.h"
#include "kk_data_mng.h"
#include "kk_oldccu_msg.h"
#include "kk_ccu_msg.h"
#include "kk_lan_new_dev_notify.h"
static
cJSON
*
_new_device_build
(
void
*
arg
);
static
cJSON
*
_new_hue_light_build
(
void
*
arg
);
static
cJSON
*
_new_ipc_build
(
void
*
arg
);
static
cJSON
*
_new_konke_socket_build
(
void
*
arg
);
static
cJSON
*
_new_konke_light_build
(
void
*
arg
);
static
cJSON
*
_new_cnwise_music_controller_build
(
void
*
arg
);
static
cJSON
*
_new_modbus_dev_build
(
void
*
arg
);
static
cJSON
*
_new_modbus_daikin_indoorunit_build
(
void
*
arg
);
static
cJSON
*
_new_konke_humidifier_build
(
void
*
arg
);
static
cJSON
*
_new_konke_aircleaner_build
(
void
*
arg
);
static
cJSON
*
_new_central_ac_gw_build
(
void
*
arg
);
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
{
#define NEW_DEVICES_BUILD_TYPE 0
#define NEW_HUE_LIGHTS_BUILD_TYPE 1
#define NEW_IPCS_BUILD_TYPE 2
#define NEW_KONKE_SOCKETS_BUILD_TYPE 3
#define NEW_KONKE_LIGHTS_BUILD_TYPE 4
#define NEW_CNWISE_MUSIC_CONTROLLERS_BUILD_TYPE 5
#define NEW_MODBUS_DEVS_BUILD_TYPE 6
#define NEW_MODBUS_DAIKIN_INDOORUNIT_BUILD_TYPE 7
#define NEW_KONKE_HUMIDIFIERS_BUILD_TYPE 8
#define NEW_KONKE_AIRCLEANERS_BUILD_TYPE 9
#define NEW_CENTRAL_AC_GWS_BUILD_TYPE 10
#define NEW_CENTRAL_AC_GW_INDOORS_BUILD_TYPE 11
#define NEW_YOUZHUAN_MUSIC_CONTROLLERS_BUILD_TYPE 12
int
type
;
build_func
func
;
}
BUILD_FUNC
;
static
BUILD_FUNC
new_dev_build_table
[]
=
{
{
NEW_DEVICES_BUILD_TYPE
,
_new_device_build
},
{
NEW_HUE_LIGHTS_BUILD_TYPE
,
_new_hue_light_build
},
{
NEW_IPCS_BUILD_TYPE
,
_new_ipc_build
},
{
NEW_KONKE_SOCKETS_BUILD_TYPE
,
_new_konke_socket_build
},
{
NEW_KONKE_LIGHTS_BUILD_TYPE
,
_new_konke_light_build
},
{
NEW_CNWISE_MUSIC_CONTROLLERS_BUILD_TYPE
,
_new_cnwise_music_controller_build
},
{
NEW_MODBUS_DEVS_BUILD_TYPE
,
_new_modbus_dev_build
},
{
NEW_MODBUS_DAIKIN_INDOORUNIT_BUILD_TYPE
,
_new_modbus_daikin_indoorunit_build
},
{
NEW_KONKE_HUMIDIFIERS_BUILD_TYPE
,
_new_konke_humidifier_build
},
{
NEW_KONKE_AIRCLEANERS_BUILD_TYPE
,
_new_konke_aircleaner_build
},
{
NEW_CENTRAL_AC_GWS_BUILD_TYPE
,
_new_central_ac_gw_build
},
{
NEW_CENTRAL_AC_GW_INDOORS_BUILD_TYPE
,
_new_central_ac_gw_indoor_build
},
{
NEW_YOUZHUAN_MUSIC_CONTROLLERS_BUILD_TYPE
,
_new_youzhuan_music_controllers_build
},
};
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
;
for
(
i
=
0
;
i
<
size
;
i
++
,
func
++
){
if
(
func
->
type
==
type
){
return
func
->
func
;
}
}
return
NULL
;
}
static
cJSON
*
new_devices_build
(
int
type
,
int
num
,
void
**
items
)
{
cJSON
*
ary
=
cJSON_CreateArray
();
cJSON
*
dev
;
build_func
func
;
int
i
;
if
(
items
==
NULL
||*
items
==
NULL
){
return
ary
;
}
if
((
func
=
find_build_func
(
type
))
==
NULL
){
return
ary
;
}
for
(
i
=
0
;
i
<
num
;
i
++
){
dev
=
func
(
items
[
i
]);
cJSON_AddItemToArray
(
ary
,
dev
);
}
return
ary
;
}
static
cJSON
*
_new_device_build
(
void
*
arg
)
{
cJSON
*
dev
=
cJSON_CreateObject
();
new_dev_item
*
item
=
arg
;
cJSON_AddStringToObject
(
dev
,
"channel"
,
item
->
channel
);
cJSON_AddStringToObject
(
dev
,
"mac"
,
item
->
mac
);
cJSON_AddStringToObject
(
dev
,
"nodeid"
,
item
->
nodeid
);
cJSON_AddStringToObject
(
dev
,
"operate_type"
,
item
->
operate_type
);
cJSON_AddStringToObject
(
dev
,
"gw_mac"
,
item
->
gw_mac
);
cJSON_AddStringToObject
(
dev
,
"status"
,
item
->
status
);
return
dev
;
}
static
cJSON
*
_new_hue_light_build
(
void
*
arg
)
{
cJSON
*
dev
=
cJSON_CreateObject
();
HUE_LIGHT_ITEM
*
item
=
arg
;
cJSON_AddStringToObject
(
dev
,
"hue_light_id"
,
item
->
hue_light_id
);
cJSON_AddStringToObject
(
dev
,
"hue_gw_id"
,
item
->
hue_gw_id
);
cJSON_AddStringToObject
(
dev
,
"hue_light_status"
,
item
->
hue_light_status
);
return
dev
;
}
static
cJSON
*
_new_ipc_build
(
void
*
arg
)
{
cJSON
*
dev
=
cJSON_CreateObject
();
const
char
*
item
=
arg
;
cJSON_AddStringToObject
(
dev
,
"ipcid"
,
item
);
return
dev
;
}
static
cJSON
*
_new_konke_socket_build
(
void
*
arg
)
{
cJSON
*
dev
=
cJSON_CreateObject
();
KK_SOCKET_ITEM
*
item
=
arg
;
cJSON_AddStringToObject
(
dev
,
"konke_socket_id"
,
item
->
konke_socket_id
);
cJSON_AddStringToObject
(
dev
,
"konke_socket_mac"
,
item
->
konke_socket_mac
);
cJSON_AddStringToObject
(
dev
,
"konke_socket_online"
,
item
->
konke_socket_online
);
cJSON_AddStringToObject
(
dev
,
"konke_socket_status"
,
item
->
konke_socket_status
);
return
dev
;
}
static
cJSON
*
_new_konke_light_build
(
void
*
arg
)
{
cJSON
*
dev
=
cJSON_CreateObject
();
KK_LIGHT_ITEM
*
item
=
arg
;
cJSON_AddStringToObject
(
dev
,
"konke_light_id"
,
item
->
konke_light_id
);
cJSON_AddStringToObject
(
dev
,
"konke_light_mac"
,
item
->
konke_light_mac
);
cJSON_AddStringToObject
(
dev
,
"konke_light_online"
,
item
->
konke_light_online
);
cJSON_AddStringToObject
(
dev
,
"konke_light_status"
,
item
->
konke_light_status
);
return
dev
;
}
static
cJSON
*
_new_cnwise_music_controller_build
(
void
*
arg
)
{
cJSON
*
dev
=
cJSON_CreateObject
();
MC_CTRL_ITEM
*
item
=
arg
;
cJSON_AddStringToObject
(
dev
,
"id"
,
item
->
id
);
cJSON_AddStringToObject
(
dev
,
"music_controller_mac"
,
item
->
music_controller_mac
);
cJSON_AddStringToObject
(
dev
,
"music_controller_type"
,
item
->
music_controller_type
);
cJSON_AddStringToObject
(
dev
,
"music_controller_online"
,
item
->
music_controller_online
);
cJSON_AddStringToObject
(
dev
,
"music_controller_status"
,
item
->
music_controller_status
);
return
dev
;
}
static
cJSON
*
_new_modbus_dev_build
(
void
*
arg
)
{
cJSON
*
dev
=
cJSON_CreateObject
();
MODBUS_DEV_ITEM
*
item
=
arg
;
cJSON_AddStringToObject
(
dev
,
"id"
,
item
->
id
);
cJSON_AddStringToObject
(
dev
,
"dev_type"
,
item
->
dev_type
);
cJSON_AddStringToObject
(
dev
,
"daikin_gw"
,
item
->
daikin_gw
);
cJSON_AddStringToObject
(
dev
,
"dev_addr"
,
item
->
dev_addr
);
cJSON_AddStringToObject
(
dev
,
"bind_modbus_gw_node_id"
,
item
->
bind_modbus_gw_node_id
);
return
dev
;
}
static
cJSON
*
_new_modbus_daikin_indoorunit_build
(
void
*
arg
)
{
cJSON
*
dev
=
cJSON_CreateObject
();
MODBUS_DAIKIN_INDOORUNIT_ITEM
*
item
=
arg
;
cJSON_AddStringToObject
(
dev
,
"id"
,
item
->
id
);
cJSON_AddStringToObject
(
dev
,
"indooruint_addr"
,
item
->
indooruint_addr
);
cJSON_AddStringToObject
(
dev
,
"bind_daikin_gw_devid"
,
item
->
bind_daikin_gw_devid
);
return
dev
;
}
static
cJSON
*
_new_konke_humidifier_build
(
void
*
arg
)
{
cJSON
*
dev
=
cJSON_CreateObject
();
KK_HUMIDIFIER_ITEM
*
item
=
arg
;
cJSON_AddStringToObject
(
dev
,
"konke_humidifier_id"
,
item
->
konke_humidifier_id
);
cJSON_AddStringToObject
(
dev
,
"konke_humidifier_mac"
,
item
->
konke_humidifier_mac
);
cJSON_AddStringToObject
(
dev
,
"konke_humidifier_online"
,
item
->
konke_humidifier_online
);
cJSON_AddStringToObject
(
dev
,
"konke_humidifier_status"
,
item
->
konke_humidifier_status
);
return
dev
;
}
static
cJSON
*
_new_konke_aircleaner_build
(
void
*
arg
)
{
cJSON
*
dev
=
cJSON_CreateObject
();
KK_AIRCLEANER_ITEM
*
item
=
arg
;
cJSON_AddStringToObject
(
dev
,
"konke_aircleaner_id"
,
item
->
konke_aircleaner_id
);
cJSON_AddStringToObject
(
dev
,
"konke_aircleaner_mac"
,
item
->
konke_aircleaner_mac
);
cJSON_AddStringToObject
(
dev
,
"konke_aircleaner_online"
,
item
->
konke_aircleaner_online
);
cJSON_AddStringToObject
(
dev
,
"konke_aircleaner_status"
,
item
->
konke_aircleaner_status
);
return
dev
;
}
static
cJSON
*
_new_central_ac_gw_build
(
void
*
arg
)
{
cJSON
*
dev
=
cJSON_CreateObject
();
CENTRAL_AC_ITEM
*
item
=
arg
;
cJSON_AddStringToObject
(
dev
,
"id"
,
item
->
id
);
cJSON_AddStringToObject
(
dev
,
"bind_central_ac_gw_node_id"
,
item
->
bind_central_ac_gw_node_id
);
cJSON_AddStringToObject
(
dev
,
"ac_gw_status"
,
item
->
ac_gw_status
);
return
dev
;
}
static
cJSON
*
_new_central_ac_gw_indoor_build
(
void
*
arg
)
{
cJSON
*
dev
=
cJSON_CreateObject
();
CENTRAL_AC_INDOOR_ITEM
*
item
=
arg
;
cJSON_AddStringToObject
(
dev
,
"id"
,
item
->
id
);
cJSON_AddStringToObject
(
dev
,
"bind_central_ac_gw_node_id"
,
item
->
bind_central_ac_gw_node_id
);
cJSON_AddStringToObject
(
dev
,
"ac_gw_status"
,
item
->
ac_gw_status
);
return
dev
;
}
static
cJSON
*
_new_youzhuan_music_controllers_build
(
void
*
arg
)
{
cJSON
*
dev
=
cJSON_CreateObject
();
YOUZHUAN_MC_CTRL_ITEM
*
item
=
arg
;
cJSON_AddStringToObject
(
dev
,
"id"
,
item
->
id
);
cJSON_AddStringToObject
(
dev
,
"music_controller_mac"
,
item
->
music_controller_mac
);
cJSON_AddStringToObject
(
dev
,
"music_controller_type"
,
item
->
music_controller_type
);
cJSON_AddStringToObject
(
dev
,
"music_controller_online"
,
item
->
music_controller_online
);
cJSON_AddStringToObject
(
dev
,
"music_controller_status"
,
item
->
music_controller_status
);
return
dev
;
}
cJSON
*
new_device_notify_msg_build
(
NEW_DEVICE_NOTIFY
*
info
)
{
cJSON
*
arg
;
cJSON
*
msg
;
if
(
info
==
NULL
){
return
;
}
arg
=
cJSON_CreateObject
();
cJSON_AddItemToObject
(
arg
,
"new_device_count"
,
info
->
new_device_count
);
cJSON_AddItemToObject
(
arg
,
"new_devices"
,
info
->
new_devices
);
cJSON_AddItemToObject
(
arg
,
"new_hue_lights_count"
,
info
->
new_hue_lights_count
);
cJSON_AddItemToObject
(
arg
,
"new_hue_lights"
,
info
->
new_hue_lights
);
cJSON_AddItemToObject
(
arg
,
"new_ipc_count"
,
info
->
new_ipc_count
);
cJSON_AddItemToObject
(
arg
,
"new_ipcs"
,
info
->
new_ipcs
);
cJSON_AddItemToObject
(
arg
,
"new_konke_count"
,
info
->
new_konke_count
);
cJSON_AddItemToObject
(
arg
,
"new_konke_sockets"
,
info
->
new_konke_sockets
);
cJSON_AddItemToObject
(
arg
,
"new_konke_lights_count"
,
info
->
new_konke_lights_count
);
cJSON_AddItemToObject
(
arg
,
"new_konke_lights"
,
info
->
new_konke_lights
);
cJSON_AddItemToObject
(
arg
,
"new_cnwise_music_controllers_count"
,
info
->
new_cnwise_music_controllers_count
);
cJSON_AddItemToObject
(
arg
,
"new_cnwise_music_controllers"
,
info
->
new_cnwise_music_controllers
);
cJSON_AddItemToObject
(
arg
,
"new_modbus_devs_count"
,
info
->
new_modbus_devs_count
);
cJSON_AddItemToObject
(
arg
,
"new_modbus_devs"
,
info
->
new_modbus_devs
);
cJSON_AddItemToObject
(
arg
,
"new_modbus_daikin_indoorunits_count"
,
info
->
new_modbus_daikin_indoorunits_count
);
cJSON_AddItemToObject
(
arg
,
"new_modbus_daikin_indoorunits"
,
info
->
new_modbus_daikin_indoorunits
);
cJSON_AddItemToObject
(
arg
,
"new_konke_humidifiers_count"
,
info
->
new_konke_humidifiers_count
);
cJSON_AddItemToObject
(
arg
,
"new_konke_humidifiers"
,
info
->
new_konke_humidifiers
);
cJSON_AddItemToObject
(
arg
,
"new_konke_aircleaners_count"
,
info
->
new_konke_aircleaners_count
);
cJSON_AddItemToObject
(
arg
,
"new_konke_aircleaners"
,
info
->
new_konke_aircleaners
);
cJSON_AddItemToObject
(
arg
,
"new_central_ac_gws_count"
,
info
->
new_central_ac_gws_count
);
cJSON_AddItemToObject
(
arg
,
"new_central_ac_gws"
,
info
->
new_central_ac_gws
);
cJSON_AddItemToObject
(
arg
,
"new_central_ac_indoorunits_count"
,
info
->
new_central_ac_indoorunits_count
);
cJSON_AddItemToObject
(
arg
,
"new_central_ac_indoorunits"
,
info
->
new_central_ac_indoorunits
);
cJSON_AddItemToObject
(
arg
,
"new_youzhuan_music_controllers_count"
,
info
->
new_youzhuan_music_controllers_count
);
cJSON_AddItemToObject
(
arg
,
"new_youzhuan_music_controllers"
,
info
->
new_youzhuan_music_controllers
);
msg
=
old_ccu_msg_build_json
(
"*"
,
"NEW_DEVICES"
,
NULL
,
arg
);
return
msg
;
}
void
ttttt_test
()
{
NEW_DEVICE_NOTIFY
info
;
cJSON
*
msg
;
info
.
new_device_count
=
cJSON_CreateString
(
"0"
);
info
.
new_devices
=
new_devices_build
(
NEW_DEVICES_BUILD_TYPE
,
0
,
NULL
);
info
.
new_hue_lights_count
=
cJSON_CreateString
(
"0"
);
info
.
new_hue_lights
=
new_devices_build
(
NEW_HUE_LIGHTS_BUILD_TYPE
,
0
,
NULL
);
info
.
new_ipc_count
=
cJSON_CreateString
(
"0"
);
info
.
new_ipcs
=
new_devices_build
(
NEW_IPCS_BUILD_TYPE
,
0
,
NULL
);
info
.
new_konke_count
=
cJSON_CreateString
(
"0"
);
info
.
new_konke_sockets
=
new_devices_build
(
NEW_KONKE_SOCKETS_BUILD_TYPE
,
0
,
NULL
);
info
.
new_konke_lights_count
=
cJSON_CreateString
(
"0"
);
info
.
new_konke_lights
=
new_devices_build
(
NEW_KONKE_LIGHTS_BUILD_TYPE
,
0
,
NULL
);
info
.
new_cnwise_music_controllers_count
=
cJSON_CreateString
(
"0"
);
info
.
new_cnwise_music_controllers
=
new_devices_build
(
NEW_CNWISE_MUSIC_CONTROLLERS_BUILD_TYPE
,
0
,
NULL
);
info
.
new_modbus_devs_count
=
cJSON_CreateString
(
"0"
);
info
.
new_modbus_devs
=
new_devices_build
(
NEW_MODBUS_DEVS_BUILD_TYPE
,
0
,
NULL
);
info
.
new_modbus_daikin_indoorunits_count
=
cJSON_CreateString
(
"0"
);
info
.
new_modbus_daikin_indoorunits
=
new_devices_build
(
NEW_MODBUS_DAIKIN_INDOORUNIT_BUILD_TYPE
,
0
,
NULL
);
info
.
new_konke_humidifiers_count
=
cJSON_CreateString
(
"0"
);
info
.
new_konke_humidifiers
=
new_devices_build
(
NEW_KONKE_HUMIDIFIERS_BUILD_TYPE
,
0
,
NULL
);
info
.
new_konke_aircleaners_count
=
cJSON_CreateString
(
"0"
);
info
.
new_konke_aircleaners
=
new_devices_build
(
NEW_KONKE_AIRCLEANERS_BUILD_TYPE
,
0
,
NULL
);
info
.
new_central_ac_gws_count
=
cJSON_CreateString
(
"0"
);
info
.
new_central_ac_gws
=
new_devices_build
(
NEW_CENTRAL_AC_GWS_BUILD_TYPE
,
0
,
NULL
);
info
.
new_central_ac_indoorunits_count
=
cJSON_CreateString
(
"0"
);
info
.
new_central_ac_indoorunits
=
new_devices_build
(
NEW_CENTRAL_AC_GW_INDOORS_BUILD_TYPE
,
0
,
NULL
);
info
.
new_youzhuan_music_controllers_count
=
cJSON_CreateString
(
"0"
);
info
.
new_youzhuan_music_controllers
=
new_devices_build
(
NEW_YOUZHUAN_MUSIC_CONTROLLERS_BUILD_TYPE
,
0
,
NULL
);
msg
=
new_device_notify_msg_build
(
&
info
);
printf
(
"
\n\n
----------------------------------->%s
\n\n
"
,
cJSON_Print
(
msg
));
}
application/klansdk/kk_lan_new_dev_notify.h
0 → 100644
View file @
a37d38b7
#ifndef __KK_LAN_NEW_DEV_NOTIFY_H
#define __KK_LAN_NEW_DEV_NOTIFY_H
#include "kk_ccu_msg.h"
typedef
struct
{
cJSON
*
new_device_count
;
cJSON
*
new_devices
;
cJSON
*
new_hue_lights_count
;
cJSON
*
new_hue_lights
;
cJSON
*
new_ipc_count
;
cJSON
*
new_ipcs
;
cJSON
*
new_konke_count
;
cJSON
*
new_konke_sockets
;
cJSON
*
new_konke_lights_count
;
cJSON
*
new_konke_lights
;
cJSON
*
new_cnwise_music_controllers_count
;
cJSON
*
new_cnwise_music_controllers
;
cJSON
*
new_modbus_devs_count
;
cJSON
*
new_modbus_devs
;
cJSON
*
new_modbus_daikin_indoorunits_count
;
cJSON
*
new_modbus_daikin_indoorunits
;
cJSON
*
new_konke_humidifiers_count
;
cJSON
*
new_konke_humidifiers
;
cJSON
*
new_konke_aircleaners_count
;
cJSON
*
new_konke_aircleaners
;
cJSON
*
new_central_ac_gws_count
;
cJSON
*
new_central_ac_gws
;
cJSON
*
new_central_ac_indoorunits_count
;
cJSON
*
new_central_ac_indoorunits
;
cJSON
*
new_youzhuan_music_controllers_count
;
cJSON
*
new_youzhuan_music_controllers
;
}
NEW_DEVICE_NOTIFY
;
typedef
struct
{
char
*
channel
;
char
*
mac
;
char
*
nodeid
;
char
*
operate_type
;
char
*
gw_mac
;
char
*
status
;
}
new_dev_item
;
typedef
struct
{
char
*
hue_light_id
;
char
*
hue_gw_id
;
char
*
hue_light_status
;
}
HUE_LIGHT_ITEM
;
typedef
struct
{
char
*
konke_socket_id
;
char
*
konke_socket_mac
;
char
*
konke_socket_online
;
char
*
konke_socket_status
;
}
KK_SOCKET_ITEM
;
typedef
struct
{
char
*
konke_light_id
;
char
*
konke_light_mac
;
char
*
konke_light_online
;
char
*
konke_light_status
;
}
KK_LIGHT_ITEM
;
typedef
struct
{
char
*
id
;
char
*
music_controller_mac
;
char
*
music_controller_type
;
char
*
music_controller_online
;
char
*
music_controller_status
;
}
MC_CTRL_ITEM
;
typedef
struct
{
char
*
id
;
char
*
dev_type
;
char
*
daikin_gw
;
char
*
dev_addr
;
char
*
bind_modbus_gw_node_id
;
}
MODBUS_DEV_ITEM
;
typedef
struct
{
char
*
id
;
char
*
indooruint_addr
;
char
*
bind_daikin_gw_devid
;
}
MODBUS_DAIKIN_INDOORUNIT_ITEM
;
typedef
struct
{
char
*
konke_humidifier_id
;
char
*
konke_humidifier_mac
;
char
*
konke_humidifier_online
;
char
*
konke_humidifier_status
;
}
KK_HUMIDIFIER_ITEM
;
typedef
struct
{
char
*
konke_aircleaner_id
;
char
*
konke_aircleaner_mac
;
char
*
konke_aircleaner_online
;
char
*
konke_aircleaner_status
;
}
KK_AIRCLEANER_ITEM
;
typedef
struct
{
char
*
id
;
char
*
bind_central_ac_gw_node_id
;
char
*
ac_gw_status
;
}
CENTRAL_AC_ITEM
;
typedef
struct
{
char
*
id
;
char
*
bind_central_ac_gw_node_id
;
char
*
ac_gw_status
;
}
CENTRAL_AC_INDOOR_ITEM
;
typedef
struct
{
char
*
id
;
char
*
music_controller_mac
;
char
*
music_controller_type
;
char
*
music_controller_online
;
char
*
music_controller_status
;
}
YOUZHUAN_MC_CTRL_ITEM
;
#endif
application/klansdk/kk_lan_node_db.c
0 → 100644
View file @
a37d38b7
#include <stdio.h>
#include "kk_tsl_api.h"
#include "kk_log.h"
#include "kk_dm_mng.h"
#include "kk_lan_node_db.h"
static
sqlite3
*
g_lan_pDb
;
static
kk_lan_node_db_ctx_t
s_kk_lan_node_db_ctx
=
{
0
};
static
kk_lan_node_db_ctx_t
*
_kk_lan_node_db_get_ctx
(
void
)
{
return
&
s_kk_lan_node_db_ctx
;
}
static
void
_kk_lan_node_db_lock
(
void
)
{
kk_lan_node_db_ctx_t
*
ctx
=
_kk_lan_node_db_get_ctx
();
if
(
ctx
->
mutex
)
{
HAL_MutexLock
(
ctx
->
mutex
);
}
}
static
void
_kk_lan_node_db_unlock
(
void
)
{
kk_lan_node_db_ctx_t
*
ctx
=
_kk_lan_node_db_get_ctx
();
if
(
ctx
->
mutex
)
{
HAL_MutexUnlock
(
ctx
->
mutex
);
}
}
/************************************************************
*功能描述: 属性数据表初始化
*输入参数: 无
*输出参数: 无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
_kk_lan_node_db_Init
(
void
)
{
kk_lan_node_db_ctx_t
*
ctx
=
_kk_lan_node_db_get_ctx
();
const
char
*
pNodeTable
=
"CREATE TABLE IF NOT EXISTS Map2Node( \
idx INTEGER PRIMARY KEY, \
deviceCode varchar(33), \
channel INTEGER, \
nodeId INTEGER)"
;
char
*
pcErr
;
_kk_lan_node_db_lock
();
if
(
sqlite3_open_v2
(
KK_LAN_NODE_DB_FILE
,
&
g_lan_pDb
,
SQLITE_OPEN_READWRITE
|
SQLITE_OPEN_CREATE
|
SQLITE_OPEN_FULLMUTEX
,
NULL
)
!=
SQLITE_OK
)
{
ERROR_PRINT
(
"Error initialising linkage database fail!!!
\n
"
);
return
-
1
;
}
ctx
->
pDb
=
g_lan_pDb
;
if
(
sqlite3_exec
(
ctx
->
pDb
,
pNodeTable
,
NULL
,
NULL
,
&
pcErr
)
!=
SQLITE_OK
)
{
ERROR_PRINT
(
"Error creating table (%s)
\n
"
,
pcErr
);
sqlite3_free
(
pcErr
);
_kk_lan_node_db_unlock
();
return
-
1
;
}
_kk_lan_node_db_unlock
();
return
0
;
}
/************************************************************
*功能描述: 属性模块初始化
*输入参数: 无
*输出参数: 无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_lan_db_node_init
(
void
)
{
int
res
=
0
;
kk_lan_node_db_ctx_t
*
ctx
=
_kk_lan_node_db_get_ctx
();
ctx
->
mutex
=
HAL_MutexCreate
();
if
(
ctx
->
mutex
==
NULL
)
{
return
-
1
;
}
res
=
_kk_lan_node_db_Init
();
if
(
res
!=
0
){
ERROR_PRINT
(
"[%s][%d]kk_lan_node_db_init FAIL!!!
\n
"
,
__FUNCTION__
,
__LINE__
);
return
res
;
}
return
0
;
}
int
kk_check_lan_node
(
int
nodeId
)
{
int
isExist
=
0
;
sqlite3_stmt
*
stmt
;
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;"
;
_kk_lan_node_db_lock
();
sqlite3_prepare_v2
(
ctx
->
pDb
,
searchCmd
,
strlen
(
searchCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
node
=
sqlite3_column_int
(
stmt
,
LAN_DB_NODE
);
printf
(
"$$$$$$$$$$$$$$$$$$check node=%d,nodeId=%d
\n
"
,
node
,
nodeId
);
if
(
node
==
nodeId
)
{
isExist
=
1
;
break
;
}
}
sqlite3_finalize
(
stmt
);
_kk_lan_node_db_unlock
();
return
isExist
;
}
/************************************************************
*功能描述: check属性是否重复
*输入参数: deviceCode:设备deviceCode
identifier:属性名称
*输出参数: 无
*返 回 值: 1:已经存在;0:不存在
*其他说明:
*************************************************************/
int
kk_check_lan_node_exist
(
const
char
*
deviceCode
,
int
channel
)
{
int
isExist
=
0
;
sqlite3_stmt
*
stmt
;
char
*
pDeviceCode
=
NULL
;
int
ch
=
0
;
int
node
=
0
;
kk_lan_node_db_ctx_t
*
ctx
=
_kk_lan_node_db_get_ctx
();
const
char
*
searchCmd
=
"select * from Map2Node;"
;
_kk_lan_node_db_lock
();
sqlite3_prepare_v2
(
ctx
->
pDb
,
searchCmd
,
strlen
(
searchCmd
),
&
stmt
,
NULL
);
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
)
{
isExist
=
1
;
break
;
}
}
sqlite3_finalize
(
stmt
);
_kk_lan_node_db_unlock
();
return
isExist
;
}
static
int
_kk_check_lan_node_same
(
const
char
*
deviceCode
,
int
channel
,
int
nodeId
)
{
int
same
=
0
;
sqlite3_stmt
*
stmt
;
char
*
pDeviceCode
=
NULL
;
int
ch
=
0
;
int
node
=
0
;
kk_lan_node_db_ctx_t
*
ctx
=
_kk_lan_node_db_get_ctx
();
const
char
*
searchCmd
=
"select * from Map2Node;"
;
_kk_lan_node_db_lock
();
sqlite3_prepare_v2
(
ctx
->
pDb
,
searchCmd
,
strlen
(
searchCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
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
)
{
same
=
1
;
break
;
}
}
sqlite3_finalize
(
stmt
);
_kk_lan_node_db_unlock
();
return
same
;
}
/************************************************************
*功能描述: 更新属性值
*输入参数: deviceCode:设备deviceCode
identifier:属性名称
value:属性值
*输出参数: 无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
static
int
kk_lan_db_node_update
(
const
char
*
deviceCode
,
int
channel
,
int
node
)
{
char
*
sqlCmd
=
NULL
;
int
rc
=
0
;
char
*
zErrMsg
=
0
;
kk_lan_node_db_ctx_t
*
ctx
=
_kk_lan_node_db_get_ctx
();
_kk_lan_node_db_lock
();
sqlCmd
=
sqlite3_mprintf
(
"UPDATE Map2Node SET nodeId='%d' WHERE deviceCode= '%s' and channel = '%d'"
,
node
,
deviceCode
,
channel
);
rc
=
sqlite3_exec
(
ctx
->
pDb
,
sqlCmd
,
NULL
,
NULL
,
&
zErrMsg
);
if
(
rc
!=
SQLITE_OK
){
ERROR_PRINT
(
"SQL error: %s
\n
"
,
zErrMsg
);
sqlite3_free
(
zErrMsg
);
}
else
{
DEBUG_PRINT
(
"kk_lan_node_db_update_value successfully
\n
"
);
}
sqlite3_free
(
sqlCmd
);
_kk_lan_node_db_unlock
();
return
SUCCESS_RETURN
;
}
/************************************************************
*功能描述: 插入属性到数据库
*输入参数: deviceCode:设备deviceCode
identifier:属性名称
valuetype:属性值类型
devtype:设备类型
*输出参数: 无
*返 回 值: 0:成功;其他:失败
*其他说明:属性的值插入的时候先置空,后续再update
*************************************************************/
int
kk_lan_db_node_insert
(
const
char
*
deviceCode
,
int
channel
,
int
node
)
{
const
char
*
insertCmd
=
"insert into Map2Node (deviceCode,channel,nodeId) \
values ('%s','%d','%d');"
;
char
*
sqlCmd
=
NULL
;
int
rc
=
0
;
char
*
zErrMsg
=
0
;
kk_lan_node_db_ctx_t
*
ctx
=
_kk_lan_node_db_get_ctx
();
if
(
kk_check_lan_node_exist
(
deviceCode
,
channel
)){
if
(
_kk_check_lan_node_same
(
deviceCode
,
channel
,
node
)){
kk_lan_db_node_update
(
deviceCode
,
channel
,
node
);
}
return
0
;
}
_kk_lan_node_db_lock
();
sqlCmd
=
sqlite3_mprintf
(
insertCmd
,
deviceCode
,
channel
,
node
);
rc
=
sqlite3_exec
(
ctx
->
pDb
,
sqlCmd
,
NULL
,
NULL
,
&
zErrMsg
);
if
(
rc
!=
SQLITE_OK
){
ERROR_PRINT
(
"SQL error: %s
\n
"
,
zErrMsg
);
sqlite3_free
(
zErrMsg
);
}
else
{
}
sqlite3_free
(
sqlCmd
);
_kk_lan_node_db_unlock
();
return
SUCCESS_RETURN
;
}
/*
int kk_lan_db_node_get_max(const char *deviceCode,int channel)
{
char *sqlCmd = NULL;
int rc = 0;
char *zErrMsg = 0;
sqlite3_stmt *stmt;
int node = -1;
kk_lan_node_db_ctx_t *ctx = _kk_lan_node_db_get_ctx();
_kk_lan_node_db_lock();
sqlCmd = sqlite3_mprintf("select Max(cast(nodeId as int)) from Map2Node",);
sqlite3_prepare_v2(ctx->pDb, sqlCmd, strlen(sqlCmd), &stmt, NULL);
while(sqlite3_step(stmt) == SQLITE_ROW){
node = sqlite3_column_value(stmt, LAN_DB_NODE);
}
sqlite3_free(sqlCmd);
_kk_lan_node_db_unlock();
sqlite3_finalize(stmt);
return node;
}
*/
/************************************************************
*功能描述: 获取属性值
*输入参数: deviceCode:设备deviceCode
identifier:属性名称
*输出参数: value:属性值,返回的是字串
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_lan_db_node_get_all
(
const
char
*
deviceCode
,
int
*
nodes
)
{
char
*
sqlCmd
=
NULL
;
int
rc
=
0
;
char
*
zErrMsg
=
0
;
sqlite3_stmt
*
stmt
;
int
num
=
0
;
kk_lan_node_db_ctx_t
*
ctx
=
_kk_lan_node_db_get_ctx
();
_kk_lan_node_db_lock
();
sqlCmd
=
sqlite3_mprintf
(
"select * from Map2Node WHERE deviceCode= '%s'"
,
deviceCode
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
nodes
[
num
++
]
=
sqlite3_column_int
(
stmt
,
LAN_DB_NODE
);
}
sqlite3_free
(
sqlCmd
);
_kk_lan_node_db_unlock
();
sqlite3_finalize
(
stmt
);
return
num
;
}
int
kk_lan_db_node_get
(
const
char
*
deviceCode
,
int
channel
)
{
char
*
sqlCmd
=
NULL
;
int
rc
=
0
;
char
*
zErrMsg
=
0
;
sqlite3_stmt
*
stmt
;
int
node
=
-
1
;
kk_lan_node_db_ctx_t
*
ctx
=
_kk_lan_node_db_get_ctx
();
_kk_lan_node_db_lock
();
sqlCmd
=
sqlite3_mprintf
(
"select * from Map2Node WHERE deviceCode= '%s' and channel = '%d'"
,
deviceCode
,
channel
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
node
=
sqlite3_column_int
(
stmt
,
LAN_DB_NODE
);
}
sqlite3_free
(
sqlCmd
);
_kk_lan_node_db_unlock
();
sqlite3_finalize
(
stmt
);
return
node
;
}
int
kk_lan_db_get_item_by_node
(
int
node
,
char
*
deviceCode
,
int
*
channel
)
{
char
*
sqlCmd
=
NULL
;
int
rc
=
0
;
char
*
zErrMsg
=
0
;
sqlite3_stmt
*
stmt
;
kk_lan_node_db_ctx_t
*
ctx
=
_kk_lan_node_db_get_ctx
();
char
*
dCode
=
0
;
_kk_lan_node_db_lock
();
sqlCmd
=
sqlite3_mprintf
(
"select * from Map2Node WHERE nodeId= '%d' "
,
node
);
sqlite3_prepare_v2
(
ctx
->
pDb
,
sqlCmd
,
strlen
(
sqlCmd
),
&
stmt
,
NULL
);
while
(
sqlite3_step
(
stmt
)
==
SQLITE_ROW
){
if
(
deviceCode
!=
NULL
){
dCode
=
sqlite3_column_text
(
stmt
,
LAN_DB_DEVICECODE
);
memcpy
(
deviceCode
,
dCode
,
strlen
(
dCode
));
}
if
(
channel
!=
NULL
){
*
channel
=
sqlite3_column_int
(
stmt
,
LAN_DB_CHANNEL
);
}
}
sqlite3_free
(
sqlCmd
);
_kk_lan_node_db_unlock
();
sqlite3_finalize
(
stmt
);
return
0
;
}
int
kk_lan_db_channel_get
(
int
node
,
int
*
channel
)
{
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
);
}
/************************************************************
*功能描述:通过deviceCode删除设备属性
*输入参数: deviceCode:设备deviceCode
*输出参数: 无
*返 回 值: 0:成功;其他:失败
*其他说明:
*************************************************************/
int
kk_lan_db_node_delete
(
char
*
deviceCode
)
{
const
char
*
deleteCmd
=
"delete from Map2Node where deviceCode = '%s';"
;
char
*
sqlCmd
=
NULL
;
int
rc
=
0
;
char
*
zErrMsg
=
0
;
kk_lan_node_db_ctx_t
*
ctx
=
_kk_lan_node_db_get_ctx
();
_kk_lan_node_db_lock
();
sqlCmd
=
sqlite3_mprintf
(
deleteCmd
,
deviceCode
);
INFO_PRINT
(
"Table delete data sqlCmd:%s
\n
"
,
sqlCmd
);
rc
=
sqlite3_exec
(
ctx
->
pDb
,
sqlCmd
,
NULL
,
NULL
,
&
zErrMsg
);
if
(
rc
!=
SQLITE_OK
){
ERROR_PRINT
(
"SQL error: %s
\n
"
,
zErrMsg
);
sqlite3_free
(
zErrMsg
);
}
else
{
INFO_PRINT
(
"Table delete data successfully
\n
"
);
}
sqlite3_free
(
sqlCmd
);
_kk_lan_node_db_unlock
();
return
SUCCESS_RETURN
;
}
application/klansdk/kk_lan_node_db.h
0 → 100644
View file @
a37d38b7
#ifndef __KK_LAN_NODE_DB_H_
#define __KK_LAN_NODE_DB_H_
#include "sqlite3.h"
#define KK_LAN_NODE_DB_FILE "./kk_lan_node.db"
typedef
struct
{
void
*
mutex
;
sqlite3
*
pDb
;
}
kk_lan_node_db_ctx_t
;
enum
{
LAN_DB_IDX
=
0
,
LAN_DB_DEVICECODE
,
LAN_DB_CHANNEL
,
LAN_DB_NODE
,
};
int
kk_lan_db_node_init
(
void
);
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
);
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_check_lan_node_exist
(
const
char
*
deviceCode
,
int
channel
);
int
kk_check_lan_node
(
int
nodeId
);
#endif
application/klansdk/kk_lan_queue.c
0 → 100644
View file @
a37d38b7
#include <pthread.h>
#include "kk_lan_queue.h"
#include "kk_log.h"
static
lan_queue_s
g_lan_queue
[
LAN_QUEUE_END
];
static
lan_queue_s
*
_lan_queue_get_ctx
(
LAN_QUEUE_ENUM
ix
)
{
return
&
g_lan_queue
[
ix
];
}
static
void
_lan_queue_lock
(
LAN_QUEUE_ENUM
ix
)
{
int
err_num
;
lan_queue_s
*
ctx
=
_lan_queue_get_ctx
(
ix
);
if
(
0
!=
(
err_num
=
pthread_mutex_lock
((
pthread_mutex_t
*
)
ctx
->
mutex
)))
{
WARNING_PRINT
(
"
\n
lock queue mutex[%d] failed: - '%s' (%d)
\n
"
,
ix
,
strerror
(
err_num
),
err_num
);
}
}
static
void
_lan_queue_unlock
(
LAN_QUEUE_ENUM
ix
)
{
int
err_num
;
lan_queue_s
*
ctx
=
_lan_queue_get_ctx
(
ix
);
if
(
0
!=
(
err_num
=
pthread_mutex_unlock
((
pthread_mutex_t
*
)
ctx
->
mutex
)))
{
WARNING_PRINT
(
"unlock queue mutex[%d] failed - '%s' (%d)
\n
"
,
ix
,
strerror
(
err_num
),
err_num
);
}
}
static
int
_lan_queue_init
(
LAN_QUEUE_ENUM
ix
,
int
max_size
)
{
int
err_num
;
lan_queue_s
*
ctx
=
_lan_queue_get_ctx
(
ix
);
memset
(
ctx
,
0
,
sizeof
(
lan_queue_s
));
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
;
}
if
(
0
!=
(
err_num
=
pthread_mutex_init
(
ctx
->
mutex
,
NULL
)))
{
WARNING_PRINT
(
"
\n
init queue mutex[%d] failed
\n
"
,
ix
);
free
(
ctx
->
mutex
);
return
-
2
;
}
ctx
->
max_size
=
max_size
;
INIT_LIST_HEAD
(
&
ctx
->
list
);
INFO_PRINT
(
"
\n
lan queue[%d] init success~~~
\n
"
,
ix
);
return
0
;
}
int
lan_queue_init
(
void
)
{
_lan_queue_init
(
NODE_MAP
,
LAN_QUEUE_SIZE
(
1
));
}
void
lan_queue_deinit
(
void
)
{
//do it;
}
int
lan_queue_enqueue
(
LAN_QUEUE_ENUM
ix
,
void
*
data
)
{
lan_queue_s
*
ctx
=
_lan_queue_get_ctx
(
ix
);
lan_queue_msg_s
*
node
=
NULL
;
if
(
data
==
NULL
)
{
INFO_PRINT
(
"
\n
enqueue-[%d] fail,data is NULL!!!
\n
"
,
ix
);
return
-
2
;
}
_lan_queue_lock
(
ix
);
INFO_PRINT
(
"
\n
list size: %d, max size: %d
\n
"
,
ctx
->
size
,
ctx
->
max_size
);
if
(
ctx
->
size
>=
ctx
->
max_size
)
{
INFO_PRINT
(
"
\n
enqueue-[%d] fail,queue full!!!
\n
"
,
ix
);
_lan_queue_unlock
(
ix
);
return
-
3
;
}
node
=
malloc
(
sizeof
(
lan_queue_msg_s
));
if
(
node
==
NULL
)
{
INFO_PRINT
(
"
\n
enqueue-[%d] fail,node is NULL!!!
\n
"
,
ix
);
_lan_queue_unlock
(
ix
);
return
-
4
;
}
memset
(
node
,
0
,
sizeof
(
lan_queue_msg_s
));
node
->
data
=
data
;
INIT_LIST_HEAD
(
&
node
->
list
);
ctx
->
size
++
;
list_add_tail
(
&
node
->
list
,
&
ctx
->
list
);
_lan_queue_unlock
(
ix
);
INFO_PRINT
(
"
\n
enqueue-[%d] success~~~
\n
"
,
ix
);
return
0
;
}
int
lan_queue_dequeue
(
LAN_QUEUE_ENUM
ix
,
void
**
data
)
{
lan_queue_s
*
ctx
=
_lan_queue_get_ctx
(
ix
);
lan_queue_msg_s
*
node
=
NULL
;
if
(
data
==
NULL
)
{
return
-
2
;
}
_lan_queue_lock
(
ix
);
if
(
list_empty
(
&
ctx
->
list
))
{
_lan_queue_unlock
(
ix
);
return
-
3
;
}
node
=
list_first_entry
(
&
ctx
->
list
,
lan_queue_msg_s
,
list
);
list_del
(
&
node
->
list
);
ctx
->
size
--
;
*
data
=
node
->
data
;
free
(
node
);
_lan_queue_unlock
(
ix
);
INFO_PRINT
(
"
\n
dequeue queue[%d] success~~~
\n
"
,
ix
);
return
0
;
}
application/klansdk/kk_lan_queue.h
0 → 100644
View file @
a37d38b7
#ifndef _LAN_QUEUE_H_
#define _LAN_QUEUE_H_
#include "klist.h"
typedef
struct
{
void
*
data
;
struct
list_head
list
;
}
lan_queue_msg_s
;
typedef
struct
{
void
*
mutex
;
int
max_size
;
int
size
;
struct
list_head
list
;
}
lan_queue_s
;
typedef
enum
{
NODE_MAP
=
0
,
LAN_QUEUE_END
}
LAN_QUEUE_ENUM
;
#define LAN_QUEUE1_SIZE 50
#define LAN_QUEUE2_SIZE 20
#define LAN_QUEUE_SIZE(x) LAN_QUEUE##x##_SIZE
int
lan_queue_init
(
void
);
int
lan_queue_dequeue
(
LAN_QUEUE_ENUM
ix
,
void
**
data
);
int
lan_queue_enqueue
(
LAN_QUEUE_ENUM
ix
,
void
*
data
);
#endif
application/klansdk/kk_newccu_msg.c
0 → 100644
View file @
a37d38b7
#include "kk_log.h"
#include "klist.h"
#include "kk_product.h"
#include "com_api.h"
#include "kk_opcode.h"
#include "kk_lan_ctrl.h"
#include "kk_data_mng.h"
#include "kk_newccu_msg.h"
cJSON
*
property_info_build
(
const
char
*
msgtype
,
const
char
*
productCode
,
const
char
*
deviceCode
)
{
cJSON
*
info
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
info
,
"msgtype"
,
msgtype
);
cJSON_AddStringToObject
(
info
,
"productCode"
,
productCode
);
cJSON_AddStringToObject
(
info
,
"deviceCode"
,
deviceCode
);
return
info
;
}
cJSON
*
property_payload_build
(
const
char
*
method
,
const
char
*
msgId
,
const
char
*
version
,
cJSON
*
params
)
{
cJSON
*
payload
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
payload
,
"msgId"
,
msgId
);
cJSON_AddStringToObject
(
payload
,
"version"
,
version
);
cJSON_AddItemToObject
(
payload
,
PARAMS_STRING
,
params
);
cJSON_AddStringToObject
(
payload
,
"method"
,
method
);
return
payload
;
}
cJSON
*
property_set
(
const
char
*
productCode
,
const
char
*
deviceCode
,
const
char
*
msgId
,
const
char
*
version
,
cJSON
*
params
)
{
cJSON
*
root
=
cJSON_CreateObject
();
cJSON
*
info
=
property_info_build
(
"/thing/service/property/set"
,
productCode
,
deviceCode
);
cJSON
*
payload
=
property_payload_build
(
"thing.service.property.set"
,
msgId
,
version
,
params
);
cJSON_AddItemToObject
(
root
,
INFO_STRING
,
info
);
cJSON_AddItemToObject
(
root
,
PAYLOAD_STRING
,
payload
);
return
root
;
}
cJSON
*
property_report
(
const
char
*
productCode
,
const
char
*
deviceCode
,
const
char
*
msgId
,
const
char
*
version
,
cJSON
*
params
)
{
cJSON
*
root
=
cJSON_CreateObject
();
cJSON
*
info
=
property_info_build
(
"/thing/event/{tsl.event.identifier}/post"
,
productCode
,
deviceCode
);
cJSON
*
payload
=
property_payload_build
(
"thing.event.{tsl.event.identifier}.post"
,
msgId
,
version
,
params
);
cJSON_AddItemToObject
(
root
,
INFO_STRING
,
info
);
cJSON_AddItemToObject
(
root
,
PAYLOAD_STRING
,
payload
);
return
root
;
}
application/klansdk/kk_newccu_msg.h
0 → 100644
View file @
a37d38b7
#ifndef _KK_NEWCCU_MSG_H
#define _KK_NEWCCU_MSG_H
#include "kk_ccu_msg.h"
cJSON
*
property_info_build
(
const
char
*
msgtype
,
const
char
*
productCode
,
const
char
*
deviceCode
);
cJSON
*
property_payload_build
(
const
char
*
method
,
const
char
*
msgId
,
const
char
*
version
,
cJSON
*
params
);
cJSON
*
property_set
(
const
char
*
productCode
,
const
char
*
deviceCode
,
const
char
*
msgId
,
const
char
*
version
,
cJSON
*
params
);
cJSON
*
property_report
(
const
char
*
productCode
,
const
char
*
deviceCode
,
const
char
*
msgId
,
const
char
*
version
,
cJSON
*
params
);
#endif
application/klansdk/kk_oldccu_msg.c
0 → 100644
View file @
a37d38b7
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "kk_data_mng.h"
#include "kk_lan_node_db.h"
#include "kk_log.h"
#include "klist.h"
#include "kk_product.h"
#include "com_api.h"
#include "kk_opcode.h"
#include "kk_lan_ctrl.h"
#include "kk_data_mng.h"
#include "kk_oldccu_msg.h"
cJSON
*
old_ccu_msg_build_json_node_int
(
int
nodeid
,
const
char
*
opcode
,
const
char
*
status
,
cJSON
*
arg
)
{
cJSON
*
root
;
if
(
nodeid
==
NULL
||
opcode
==
NULL
||
arg
==
NULL
)
{
return
NULL
;
}
root
=
cJSON_CreateObject
();
if
(
root
){
cJSON_AddNumberToObject
(
root
,
"nodeid"
,
nodeid
);
cJSON_AddStringToObject
(
root
,
"opcode"
,
opcode
);
cJSON_AddStringToObject
(
root
,
"status"
,
"success"
);
cJSON_AddItemToObject
(
root
,
"arg"
,
arg
);
}
return
root
;
}
cJSON
*
old_ccu_msg_build_json
(
const
char
*
nodeid
,
const
char
*
opcode
,
const
char
*
status
,
cJSON
*
arg
)
{
cJSON
*
root
;
if
(
nodeid
==
NULL
||
opcode
==
NULL
||
arg
==
NULL
)
{
return
NULL
;
}
root
=
cJSON_CreateObject
();
if
(
root
){
cJSON_AddStringToObject
(
root
,
"nodeid"
,
nodeid
);
cJSON_AddStringToObject
(
root
,
"opcode"
,
opcode
);
cJSON_AddStringToObject
(
root
,
"status"
,
"success"
);
cJSON_AddItemToObject
(
root
,
"arg"
,
arg
);
}
return
root
;
}
cJSON
*
old_ccu_msg_build
(
const
char
*
nodeid
,
const
char
*
opcode
,
const
char
*
status
,
const
char
*
arg
)
{
cJSON
*
root
;
if
(
nodeid
==
NULL
||
opcode
==
NULL
||
arg
==
NULL
)
{
return
NULL
;
}
root
=
cJSON_CreateObject
();
if
(
root
){
cJSON_AddStringToObject
(
root
,
"nodeid"
,
nodeid
);
cJSON_AddStringToObject
(
root
,
"opcode"
,
opcode
);
if
(
status
==
NULL
){
cJSON_AddStringToObject
(
root
,
"status"
,
"success"
);
}
else
{
cJSON_AddStringToObject
(
root
,
"status"
,
status
);
}
cJSON_AddStringToObject
(
root
,
"arg"
,
arg
);
}
return
root
;
}
int
send_msg_to_module
(
cJSON
*
root
)
{
char
*
msg
;
if
(
root
==
NULL
){
return
-
1
;
}
if
((
msg
=
cJSON_Print
(
root
))
!=
NULL
){
printf
(
"[lan->module]json:
\n
%s
\n
"
,
msg
);
cJSON_Minify
(
msg
);
kk_send_data_to_sdk
(
msg
);
free
(
msg
);
}
return
0
;
}
cJSON
*
val_conver_new2old
(
cJSON
*
newccuItem
,
cJSON
*
oldccuItem
,
int
syn_type
)
{
cJSON
*
n_dataType
=
cJSON_GetObjectItem
(
newccuItem
,
DATATYPE_STRING
);
cJSON
*
n_value
=
cJSON_GetObjectItem
(
newccuItem
,
"value"
);
cJSON
*
o_dataType
;
cJSON
*
val
;
cJSON
*
o_valueRange
=
cJSON_GetObjectItem
(
oldccuItem
,
"valueRange"
);
cJSON
*
n_valueRange
=
cJSON_GetObjectItem
(
newccuItem
,
"valueRange"
);
if
(
syn_type
==
1
){
o_dataType
=
cJSON_GetObjectItem
(
oldccuItem
,
"synType"
);
}
else
{
o_dataType
=
cJSON_GetObjectItem
(
oldccuItem
,
DATATYPE_STRING
);
}
if
(
strcmp
(
o_dataType
->
valuestring
,
"map"
)
==
0
){
val
=
map_type_convert
(
n_dataType
,
n_valueRange
,
n_value
,
o_valueRange
);
}
else
{
val
=
msg_convert_value
(
o_dataType
,
n_dataType
,
n_value
);
}
return
val
;
}
typedef
struct
{
char
*
area
;
char
*
name
;
char
*
delay
;
char
*
nodeid
;
char
*
operate_type
;
char
*
operation
;
char
*
room_id
;
}
SCENE_ACTION
;
typedef
struct
{
char
*
scene_id
;
char
*
name
;
char
*
pannel_id
;
char
*
room_id
;
char
*
time
;
char
*
week
;
SCENE_ACTION
**
act
;
int
act_num
;
}
SCENE_BUILD
;
cJSON
*
kk_action_build
(
SCENE_ACTION
*
act
)
{
cJSON
*
action
=
cJSON_CreateObject
();
if
(
act
->
nodeid
==
NULL
||
act
->
operation
==
NULL
||
act
->
operation
==
NULL
||
act
->
room_id
==
NULL
){
return
;
}
cJSON_AddStringToObject
(
action
,
"area"
,(
act
->
area
==
NULL
)
?
""
:
act
->
area
);
cJSON_AddStringToObject
(
action
,
"name"
,(
act
->
name
==
NULL
)
?
""
:
act
->
name
);
cJSON_AddStringToObject
(
action
,
"delay"
,(
act
->
delay
==
NULL
)
?
"0"
:
act
->
delay
);
cJSON_AddStringToObject
(
action
,
"nodeid"
,
act
->
nodeid
);
cJSON_AddStringToObject
(
action
,
"operate_type"
,
act
->
operate_type
);
cJSON_AddStringToObject
(
action
,
"operation"
,
act
->
operation
);
cJSON_AddStringToObject
(
action
,
"room_id"
,
act
->
room_id
);
return
action
;
}
cJSON
*
kk_actions_build
(
SCENE_ACTION
**
act
,
int
num
)
{
int
i
;
cJSON
*
actions
=
cJSON_CreateArray
();
cJSON
*
action
;
for
(
i
=
0
;
i
<
num
;
i
++
){
action
=
kk_action_build
(
act
[
i
]);
cJSON_AddItemToArray
(
actions
,
action
);
}
return
actions
;
}
cJSON
*
kk_scene_build
(
SCENE_BUILD
*
content
)
{
cJSON
*
scene
=
cJSON_CreateObject
();
cJSON
*
actions
=
kk_actions_build
(
content
->
act
,
content
->
act_num
);
cJSON_AddItemToObject
(
scene
,
"actions"
,
actions
);
cJSON_AddStringToObject
(
scene
,
"id"
,
content
->
scene_id
);
cJSON_AddStringToObject
(
scene
,
"name"
,
content
->
name
);
cJSON_AddStringToObject
(
scene
,
"pannel_id"
,(
content
->
pannel_id
==
NULL
)
?
"*"
:
content
->
pannel_id
);
cJSON_AddStringToObject
(
scene
,
"room_id"
,
content
->
room_id
);
cJSON_AddStringToObject
(
scene
,
"scene_image"
,
""
);
cJSON_AddStringToObject
(
scene
,
"scene_type"
,
""
);
if
(
content
->
time
==
NULL
){
cJSON_AddStringToObject
(
scene
,
"timer_enable"
,
"0"
);
cJSON_AddStringToObject
(
scene
,
"time"
,
""
);
}
else
{
cJSON_AddStringToObject
(
scene
,
"timer_enable"
,
"1"
);
cJSON_AddStringToObject
(
scene
,
"time"
,
content
->
time
);
}
cJSON_AddStringToObject
(
scene
,
"week"
,
content
->
week
);
return
scene
;
}
void
kk_scene_build_test
(
void
)
{
cJSON
*
msg
;
SCENE_BUILD
scene
;
scene
.
name
=
calloc
(
1
,
20
);
memcpy
(
scene
.
name
,
"离家"
,
strlen
(
"离家"
));
scene
.
scene_id
=
calloc
(
1
,
20
);
memcpy
(
scene
.
scene_id
,
"123"
,
strlen
(
"123"
));
scene
.
pannel_id
=
calloc
(
1
,
20
);
memcpy
(
scene
.
pannel_id
,
"*"
,
strlen
(
"*"
));
scene
.
room_id
=
calloc
(
1
,
20
);
memcpy
(
scene
.
room_id
,
"456"
,
strlen
(
"456"
));
scene
.
time
=
calloc
(
1
,
20
);
memcpy
(
scene
.
time
,
""
,
strlen
(
""
));
scene
.
week
=
calloc
(
1
,
20
);
memcpy
(
scene
.
week
,
""
,
strlen
(
""
));
scene
.
act_num
=
1
;
SCENE_ACTION
*
act
=
calloc
(
1
,
sizeof
(
SCENE_ACTION
)
*
scene
.
act_num
);
scene
.
act
=&
act
;
scene
.
act
[
0
]
->
area
=
calloc
(
1
,
20
);
memcpy
(
scene
.
act
[
0
]
->
area
,
""
,
strlen
(
""
));
scene
.
act
[
0
]
->
delay
=
calloc
(
1
,
20
);
memcpy
(
scene
.
act
[
0
]
->
delay
,
""
,
strlen
(
""
));
scene
.
act
[
0
]
->
name
=
calloc
(
1
,
20
);
memcpy
(
scene
.
act
[
0
]
->
name
,
""
,
strlen
(
""
));
scene
.
act
[
0
]
->
nodeid
=
calloc
(
1
,
20
);
memcpy
(
scene
.
act
[
0
]
->
nodeid
,
""
,
strlen
(
""
));
scene
.
act
[
0
]
->
operate_type
=
calloc
(
1
,
20
);
memcpy
(
scene
.
act
[
0
]
->
operate_type
,
""
,
strlen
(
""
));
scene
.
act
[
0
]
->
operation
=
calloc
(
1
,
20
);
memcpy
(
scene
.
act
[
0
]
->
operation
,
""
,
strlen
(
""
));
scene
.
act
[
0
]
->
room_id
=
calloc
(
1
,
20
);
memcpy
(
scene
.
act
[
0
]
->
room_id
,
""
,
strlen
(
""
));
msg
=
kk_scene_build
(
&
scene
);
printf
(
"--------scene--------->
\n
%s
\n
"
,
cJSON_Print
(
msg
));
}
cJSON
*
kk_devicestatus_build
(
kk_map_dev_node_t
*
node
)
{
char
nodeid
[
32
]
=
{
0
};
char
indxId
[
4
]
=
{
0
};
int
idx
=
1
;
int
syn_type
=
0
;
cJSON
*
dev_status
;
if
(
node
==
NULL
)
return
NULL
;
dev_status
=
cJSON_CreateObject
();
kk_map_dev_ctx
*
ctx
=
_kk_map_dev_ctx
();
#if 1
cJSON
*
newccuItem
=
node
->
newccu
->
child
;
cJSON
*
oldccuItem
=
node
->
oldccu
->
child
;
syn_type
=
node
->
syn_type
;
{
cJSON
*
status
=
cJSON_CreateObject
();
cJSON
*
synKey
;
cJSON
*
synType
;
printf
(
"yyy-1
\n
"
);
memset
(
nodeid
,
0x0
,
sizeof
(
nodeid
));
printf
(
"yyy-2
\n
"
);
kk_creater_nodeid
(
node
->
deviceCode
,
1
,
nodeid
);
printf
(
"yyy-3,%s
\n
"
,
nodeid
);
if
(
node
->
syn_opcode
){
cJSON_AddStringToObject
(
status
,
OPCODE_STRING
,
node
->
syn_opcode
);
}
printf
(
"yyy-4
\n
"
);
cJSON_AddNumberToObject
(
status
,
NODEID_STRING
,
atoi
(
nodeid
));
printf
(
"yyy-5
\n
"
);
sprintf
(
indxId
,
"%d"
,
idx
++
);
printf
(
"yyy-6
\n
"
);
cJSON_AddStringToObject
(
status
,
"index"
,
indxId
);
printf
(
"yyy-7
\n
"
);
while
(
newccuItem
!=
NULL
){
//printf("oldccuItem--->%s\n",cJSON_Print(oldccuItem));
synType
=
cJSON_GetObjectItem
(
oldccuItem
,
"synType"
);
printf
(
"synType->valuestring--->%s
\n
"
,
synType
->
valuestring
);
if
(
strcmp
(
synType
->
valuestring
,
"dummy"
)){
synKey
=
cJSON_GetObjectItem
(
oldccuItem
,
"syn"
);
if
(
strcmp
(
synType
->
valuestring
,
"timing_shutdown"
)
==
0
)
{
cJSON
*
syn_obj
=
cJSON_CreateObject
();
double
t
=
cJSON_GetObjectItem
(
newccuItem
,
"value"
)
->
valuedouble
;
char
buff
[
32
]
=
{
0
};
snprintf
(
buff
,
32
,
"%f"
,
t
);
printf
(
"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%s
\n
"
,
buff
);
if
(
t
>
0
){
cJSON_AddBoolToObject
(
syn_obj
,
"enable"
,
1
);
cJSON_AddStringToObject
(
syn_obj
,
"time"
,
buff
);
}
else
{
cJSON_AddBoolToObject
(
syn_obj
,
"enable"
,
0
);
cJSON_AddNullToObject
(
syn_obj
,
"time"
);
}
cJSON_AddItemToObject
(
dev_status
,
synKey
->
valuestring
,
syn_obj
);
}
else
{
cJSON
*
val
=
val_conver_new2old
(
newccuItem
,
oldccuItem
,
1
);
if
(
val
){
printf
(
"val--->%s
\n
"
,
cJSON_Print
(
val
));
printf
(
"val->type=%d,%d,%d
\n
"
,
val
->
type
,
cJSON_String
,
cJSON_Number
);
if
(
val
->
type
==
cJSON_String
)
{
cJSON_AddStringToObject
(
dev_status
,
synKey
->
valuestring
,
val
->
valuestring
);
}
else
if
(
val
->
type
==
cJSON_Number
)
{
cJSON_AddNumberToObject
(
dev_status
,
synKey
->
valuestring
,
val
->
valuedouble
);
}
else
{
cJSON_AddItemToObject
(
dev_status
,
synKey
->
valuestring
,
val
);
}
}
}
}
newccuItem
=
newccuItem
->
next
;
oldccuItem
=
oldccuItem
->
next
;
}
}
#endif
printf
(
"@##$%^&&*(*(((*^%$$#@@@--->%s
\n
"
,
cJSON_Print
(
dev_status
));
return
dev_status
;
}
int
kk_devicestatus_build_aaa
(
cJSON
*
Array
,
kk_map_dev_node_t
*
node
)
{
char
nodeid
[
32
]
=
{
0
};
char
indxId
[
4
]
=
{
0
};
int
idx
=
1
;
cJSON
*
dev_status
;
if
(
node
==
NULL
)
return
-
1
;
kk_map_dev_ctx
*
ctx
=
_kk_map_dev_ctx
();
cJSON
*
newccuItem
=
node
->
newccu
->
child
;
cJSON
*
oldccuItem
=
node
->
oldccu
->
child
;
while
(
newccuItem
!=
NULL
){
dev_status
=
cJSON_CreateObject
();
memset
(
nodeid
,
0x0
,
sizeof
(
nodeid
));
char
*
opcodemap
=
cJSON_GetObjectItem
(
newccuItem
,
OPCODEMAP_STRING
)
->
valuestring
;
char
*
channel
=
cJSON_GetObjectItem
(
newccuItem
,
CHANNEL_STRING
)
->
valuestring
;
char
*
dataType
=
cJSON_GetObjectItem
(
newccuItem
,
DATATYPE_STRING
)
->
valuestring
;
cJSON
*
range
=
cJSON_GetObjectItem
(
newccuItem
,
VALUERANGE_STRING
);
char
*
o_dataType
=
cJSON_GetObjectItem
(
oldccuItem
,
DATATYPE_STRING
)
->
valuestring
;
printf
(
"identifier=%s
\n
"
,
cJSON_GetObjectItem
(
newccuItem
,
"identifier"
)
->
valuestring
);
printf
(
"newccuItem=%s
\n
"
,
cJSON_Print
(
newccuItem
));
kk_creater_nodeid
(
node
->
deviceCode
,
atoi
(
channel
),
nodeid
);
cJSON_AddStringToObject
(
dev_status
,
OPCODE_STRING
,
opcodemap
);
cJSON_AddNumberToObject
(
dev_status
,
NODEID_STRING
,
atoi
(
nodeid
));
sprintf
(
indxId
,
"%d"
,
idx
++
);
cJSON_AddStringToObject
(
dev_status
,
"index"
,
indxId
);
printf
(
"index=%s,dataType=%s,o_dataType=%s
\n
"
,
indxId
,
dataType
,
o_dataType
);
if
(
strcmp
(
o_dataType
,
"string"
)
==
0
){
if
(
strcmp
(
dataType
,
"int"
)
==
0
||
strcmp
(
dataType
,
"double"
)
==
0
){
int
value
=
cJSON_GetObjectItem
(
newccuItem
,
"value"
)
->
valueint
;
if
(
range
!=
NULL
){
int
index
=
kk_get_int_value_idx
(
range
,
value
);
if
(
index
==-
1
){
index
=
0
;
}
cJSON
*
ary
=
cJSON_GetObjectItem
(
oldccuItem
,
"valueRange"
);
cJSON
*
def
=
cJSON_GetArrayItem
(
ary
,
index
);
cJSON_AddStringToObject
(
dev_status
,
"arg"
,
def
->
valuestring
);
printf
(
"yjq=%d
\n
"
,
index
);
}
}
else
if
(
strcmp
(
dataType
,
"double"
)
==
0
){
}
}
else
if
(
strcmp
(
o_dataType
,
"string_double"
)
==
0
){
double
value
=
cJSON_GetObjectItem
(
newccuItem
,
"value"
)
->
valuedouble
;
char
*
val
=
double_value_string
(
value
);
cJSON_AddNumberToObject
(
dev_status
,
"arg"
,
value
);
free
(
val
);
}
cJSON_AddItemToArray
(
Array
,
dev_status
);
//todo
newccuItem
=
newccuItem
->
next
;
oldccuItem
=
oldccuItem
->
next
;
}
return
0
;
}
cJSON
*
attr_report_conver
(
const
char
*
deviceCode
,
kk_map_dev_node_t
*
devNode
,
cJSON
*
params
)
{
cJSON
*
root
;
//
cJSON
*
newccu
;
cJSON
*
n_item
;
cJSON
*
n_id
,
*
n_valueRange
,
*
n_dataType
;
cJSON
*
n_value
;
//
cJSON
*
oldccu
;
cJSON
*
o_item
;
cJSON
*
o_id_map
,
*
o_valueRange
,
*
o_dataType
;
cJSON
*
o_value
;
cJSON
*
val
;
cJSON
*
item_size
;
cJSON
*
channel
;
cJSON
*
opcode
;
int
i
,
j
;
int
ch
;
int
nodeId
;
char
*
node_str
;
cJSON
*
msg
;
cJSON
*
args
;
oldccu
=
devNode
->
oldccu
;
newccu
=
devNode
->
newccu
;
item_size
=
cJSON_GetArraySize
(
oldccu
);
printf
(
"item_size=%d
\n
"
,
item_size
);
for
(
i
=
0
;
i
<
item_size
;
i
++
){
o_item
=
cJSON_GetArrayItem
(
oldccu
,
i
);
n_item
=
cJSON_GetArrayItem
(
newccu
,
i
);
o_id_map
=
cJSON_GetObjectItem
(
o_item
,
"identifiermap"
);
printf
(
"o_id_map=%s
\n
"
,
o_id_map
->
valuestring
);
if
(
o_id_map
){
printf
(
"o_id_map=%s
\n
"
,
cJSON_Print
(
o_id_map
));
}
n_id
=
cJSON_GetObjectItem
(
params
,
o_id_map
->
valuestring
);
printf
(
"[%s][%d]n_id=%s
\n
"
,
__FUNCTION__
,
__LINE__
,
cJSON_Print
(
n_id
));
if
(
n_id
!=
NULL
){
if
(
params
){
printf
(
"21-params=%s
\n
"
,
cJSON_Print
(
params
));
}
n_dataType
=
cJSON_GetObjectItem
(
n_item
,
"dataType"
);
n_valueRange
=
cJSON_GetObjectItem
(
n_item
,
"valueRange"
);
o_dataType
=
cJSON_GetObjectItem
(
o_item
,
"dataType"
);
o_valueRange
=
cJSON_GetObjectItem
(
o_item
,
"valueRange"
);
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
channel
=
cJSON_GetObjectItem
(
o_item
,
"channel"
);
ch
=
atoi
(
channel
->
valuestring
);
nodeId
=
kk_lan_db_node_get
(
deviceCode
,
ch
);
opcode
=
cJSON_GetObjectItem
(
o_item
,
"opcode"
);
printf
(
"[%s][%d]n_dataType->valuestring=%s,opcode->valuestring=%s
\n
"
,
__FUNCTION__
,
__LINE__
,
n_dataType
->
valuestring
,
opcode
->
valuestring
);
printf
(
"
\n
n_id->type=%d
\n
"
,
n_id
->
type
);
//cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateString(""));//
if
(
n_id
->
type
==
cJSON_False
){
cJSON_ReplaceItemInObject
(
n_item
,
"value"
,
cJSON_CreateFalse
());
}
else
if
(
n_id
->
type
==
cJSON_True
){
cJSON_ReplaceItemInObject
(
n_item
,
"value"
,
cJSON_CreateTrue
());
}
else
if
(
n_id
->
type
==
cJSON_NULL
){
cJSON_ReplaceItemInObject
(
n_item
,
"value"
,
cJSON_CreateNull
());
}
else
if
(
n_id
->
type
==
cJSON_Number
){
if
(
strcmp
(
n_dataType
->
valuestring
,
"double"
)
==
0
){
cJSON_ReplaceItemInObject
(
n_item
,
"value"
,
cJSON_CreateNumber
(
n_id
->
valuedouble
));
}
else
{
cJSON_ReplaceItemInObject
(
n_item
,
"value"
,
cJSON_CreateNumber
(
n_id
->
valueint
));
}
}
else
if
(
n_id
->
type
==
cJSON_String
){
cJSON_ReplaceItemInObject
(
n_item
,
"value"
,
cJSON_CreateString
(
n_id
->
valuestring
));
}
else
if
(
n_id
->
type
==
cJSON_Array
){
//cJSON_ReplaceItemInObject(n_item, "value", cJSON_CreateArray(n_id->valuestring));
/*
#define cJSON_Array (1 << 5)
#define cJSON_Object (1 << 6)
#define cJSON_Raw (1 << 7)
*/
printf
(
"......................
\n
"
);
}
//cJSON_ReplaceItemInObject(newccuItem, "value", cJSON_CreateNumber(val));
printf
(
"o_dataType=%s
\n
"
,
o_dataType
->
valuestring
);
if
(
strcmp
(
o_dataType
->
valuestring
,
"map"
)
==
0
){
args
=
map_type_convert
(
n_dataType
,
n_valueRange
,
n_id
,
o_valueRange
);
}
else
{
args
=
msg_convert_value
(
o_dataType
,
n_dataType
,
n_id
);
}
if
(
args
){
printf
(
"yy111y,args=%s
\n
"
,
cJSON_Print
(
args
));
update_device_status_2_oldccu
(
nodeId
,
opcode
->
valuestring
,
args
->
valuestring
);
}
else
{
printf
(
"yy111y,args=NULL
\n
"
);
}
}
}
printf
(
"yy2222y
\n
"
);
if
(
devNode
->
syn_type
==
1
){
cJSON
*
arg
;
char
*
node_str
;
arg
=
kk_devicestatus_build
(
devNode
);
printf
(
"yy444y
\n
"
);
nodeId
=
kk_lan_db_node_get
(
deviceCode
,
1
);
printf
(
"yy555y
\n
"
);
node_str
=
node_string
(
nodeId
);
printf
(
"yy666y
\n
"
);
msg
=
old_ccu_msg_build_json
(
node_str
,
devNode
->
syn_opcode
,
NULL
,
arg
);
printf
(
"66666666666=%s
\n
"
,
cJSON_Print
(
msg
));
send_msg_to_module
(
msg
);
free
(
node_str
);
cJSON_Delete
(
msg
);
}
return
root
;
}
int
del_device
(
const
char
*
deviceCode
,
const
char
*
nodeid
)
{
cJSON
*
msg
;
cJSON
*
arg
;
kk_map_dev_node_t
*
dev
;
if
(
deviceCode
==
NULL
||
nodeid
==
NULL
){
return
-
1
;
}
arg
=
cJSON_CreateObject
();
cJSON_AddStringToObject
(
arg
,
"mac"
,
deviceCode
);
msg
=
old_ccu_msg_build_json
(
nodeid
,
"DEL_DEVICE"
,
NULL
,
arg
);
send_msg_to_module
(
msg
);
cJSON_Delete
(
msg
);
return
0
;
}
int
del_device_all_node
(
const
char
*
deviceCode
)
{
#define MAX_CHANNEL_NUM 32
int
list
[
MAX_CHANNEL_NUM
]
=
{
0
};
int
i
,
num
=
0
;
char
*
nodeid
;
//删除数据库
kk_lan_db_node_delete
(
deviceCode
);
num
=
kk_lan_db_node_get_all
(
deviceCode
,
list
);
for
(
i
=
0
;
i
<
num
;
i
++
){
nodeid
=
node_string
(
list
[
i
]);
del_device
(
deviceCode
,
nodeid
);
free
(
nodeid
);
}
if
(
num
){
kk_handle_sync_info
();
}
}
void
device_delete_sync
(
cJSON
*
payload
)
{
cJSON
*
params
;
cJSON
*
deviceCode
;
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
params
=
cJSON_GetObjectItem
(
payload
,
"params"
);
deviceCode
=
cJSON_GetObjectItem
(
params
,
"deviceCode"
);
del_device_all_node
(
deviceCode
->
valuestring
);
}
void
device_add_sync
(
cJSON
*
payload
)
{
//NEW_DEVICES
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
kk_handle_sync_info
();
}
void
device_new_device_sync
(
cJSON
*
payload
)
{
//NEW_DEVICES
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
kk_handle_sync_info
();
}
void
property_post_deal
(
const
char
*
deviceCode
,
cJSON
*
payload
)
{
cJSON
*
params
;
kk_map_dev_node_t
*
dev
;
printf
(
"[%s][%d]
\n
"
,
__FUNCTION__
,
__LINE__
);
if
(
kk_map_dev_search_by_deviceCode
(
deviceCode
,
&
dev
)
==
0
){
params
=
cJSON_GetObjectItem
(
payload
,
"params"
);
attr_report_conver
(
deviceCode
,
dev
,
params
);
}
}
void
property_syn_deal
(
const
char
*
deviceCode
,
cJSON
*
properties
)
{
cJSON
*
params
;
kk_map_dev_node_t
*
dev
;
if
(
kk_map_dev_search_by_deviceCode
(
deviceCode
,
&
dev
)
==
0
){
attr_report_conver
(
deviceCode
,
dev
,
properties
);
}
}
application/klansdk/kk_oldccu_msg.h
0 → 100644
View file @
a37d38b7
#ifndef _KK_OLDCCU_MSG_H
#define _KK_OLDCCU_MSG_H
#include "kk_ccu_msg.h"
cJSON
*
old_ccu_msg_build_json
(
const
char
*
nodeid
,
const
char
*
opcode
,
const
char
*
status
,
cJSON
*
arg
);
cJSON
*
old_ccu_msg_build
(
const
char
*
nodeid
,
const
char
*
opcode
,
const
char
*
status
,
const
char
*
arg
);
int
send_msg_to_module
(
cJSON
*
root
);
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment