Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
Telin_Zigbee_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
Merge Requests
0
Merge Requests
0
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
limm
Telin_Zigbee_SDK
Commits
4f207db8
Commit
4f207db8
authored
Dec 29, 2021
by
limm
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add unincluded files
parent
682c75ca
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
945 additions
and
0 deletions
+945
-0
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-common-utils.c
...e_sdk/apps/common/00ikonke_app/general/ikk-common-utils.c
+454
-0
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-common-utils.h
...e_sdk/apps/common/00ikonke_app/general/ikk-common-utils.h
+190
-0
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-interpan.c
...igbee_sdk/apps/common/00ikonke_app/general/ikk-interpan.c
+259
-0
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-interpan.h
...igbee_sdk/apps/common/00ikonke_app/general/ikk-interpan.h
+42
-0
No files found.
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-common-utils.c
0 → 100644
View file @
4f207db8
This diff is collapsed.
Click to expand it.
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-common-utils.h
0 → 100644
View file @
4f207db8
#ifndef __IKONKE_COMMON_UTILS_H______________________________
#define __IKONKE_COMMON_UTILS_H______________________________
#include "ikk-module-def.h"
#define U16MERG(h,l) ((((uint16_t)(h)) << 8) | (l))
#define U32MERG(b3,b2,b1,b0) ((((uint32_t)(b3)) << 24) | (((uint32_t)(b2)) << 16) | (((uint32_t)(b1)) << 8) | (b0))
#define GET_U32_L( x ) (uint32_t)( (x[3]<<24)+(x[2]<<16)+(x[1]<<8)+x[0] )
#define GET_U32_B( x ) (uint32_t)( (x[0]<<24)+(x[1]<<16)+(x[2]<<8)+x[3] )
#define H3_UINT32(a) (((a) >> 24) & 0xFF)
#define H2_UINT32(a) (((a) >> 16) & 0xFF)
#define H1_UINT32(a) (((a) >> 8) & 0xFF)
#define H0_UINT32(a) ((a) & 0xFF)
#define HI_UINT16(a) (((a) >> 8) & 0xFF)
#define LO_UINT16(a) ((a) & 0xFF)
#define UINT16_HL(a,b) (((((uint16_t)(a)) << 8)&(0XFF00)) | ((0X00FF)&(b)))
#define UINT32_HL(a,b,c,d) ( ((((uint32_t)(a)) << 24)&(0XFF000000)) | ((((uint32_t)(b)) << 16)&(0X00FF0000))| \
((((
uint32_t
)(
c
))
<<
8
)
&
(
0X0000FF00
))
|
((
0X000000FF
)
&
(
d
)))
#define S_CMP(s1,s2) (strcmp((s1),(s2)) == 0)
#define M_CMP(m1,m2,n) (memcmp((m1),(m2),(n)) == 0)
// 子字符串解析
#define STRING_ITEM_NUM_MAX 8
#define STRING_ITEM_SIZE_MAX 48
typedef
char
(
*
StrSubItem
)[
STRING_ITEM_SIZE_MAX
];
void
SWAP_EUI64
(
uint8_t
*
ptr
);
bool
All_Same_Data
(
uint8_t
*
buffer
,
uint8_t
value
,
uint8_t
len
);
/* DESP: Convert OCT string to hex data stream.
Auth: dingmz_frc.20191018.
*/
int
kUtilsStr2Hex
(
char
*
octstr
,
unsigned
char
*
phexout
,
int
max_length
);
/* DESP: Convert hex data to OCT string stream.
Auth: LMM_frc.20210607.
*/
void
kUtilsHex2Str
(
uint8_t
ucChar
,
uint8_t
*
pcResult
);
#if 0
//typedef struct tag_data_type_info {
// uint8_t datatype;
// uint8_t length;
//}DataInfoSt;
//
//#define STATIC_DATA_INFO_DEF { \
// {ZCL_DATA_TYPE_DATA8, 1}, \
// {ZCL_DATA_TYPE_DATA16, 2}, \
// {ZCL_DATA_TYPE_DATA24, 3}, \
// {ZCL_DATA_TYPE_DATA32, 4}, \
// {ZCL_DATA_TYPE_DATA40, 5}, \
// {ZCL_DATA_TYPE_DATA48, 6}, \
// {ZCL_DATA_TYPE_DATA56, 7}, \
// {ZCL_DATA_TYPE_DATA64, 8}, \
// {ZCL_DATA_TYPE_BITMAP16, 2}, \
// {ZCL_DATA_TYPE_BITMAP24, 3}, \
// {ZCL_DATA_TYPE_BITMAP32, 4}, \
// {ZCL_DATA_TYPE_BITMAP48, 6}, \
// {ZCL_DATA_TYPE_BITMAP64, 8}, \
// {ZCL_DATA_TYPE_BITMAP8, 1}, \
// {ZCL_DATA_TYPE_BOOLEAN, 1}, \
// {ZCL_DATA_TYPE_UINT8, 1}, \
// {ZCL_DATA_TYPE_ENUM16, 2}, \
// {ZCL_DATA_TYPE_ENUM8, 1}, \
// {ZCL_DATA_TYPE_SINGLE_PREC, 4}, \
// {ZCL_DATA_TYPE_IEEE_ADDR, 8}, \
// {ZCL_DATA_TYPE_INT16, 2}, \
// {ZCL_DATA_TYPE_UINT16, 2}, \
// {ZCL_DATA_TYPE_INT24, 3}, \
// {ZCL_DATA_TYPE_UINT24, 3}, \
// {ZCL_DATA_TYPE_UINT32, 4}, \
// {ZCL_DATA_TYPE_UINT32, 4}, \
// {ZCL_DATA_TYPE_INT48, 6}, \
// {ZCL_DATA_TYPE_INT56, 7}, \
// {ZCL_DATA_TYPE_INT8, 1}, \
// {ZCL_DATA_TYPE_UINT8, 1}, \
// {ZCL_DATA_TYPE_128_BIT_SEC_KEY, 16},\
// {ZCL_DATA_TYPE_UTC, 4}, \
// {ZCL_DATA_TYPE_DATE, 4}, \
// {ZCL_DATA_TYPE_CLUSTER_ID, 2}, \
// {ZCL_DATA_TYPE_ATTR_ID, 2}, \
// {ZCL_DATA_TYPE_BAC_OID, 4}, \
//}
#define GLOBAL_BUFFER_SIZE 256
extern uint8_t g_u8GlobalBufferN1[];
extern uint8_t g_u8GlobalBufferN2[];
extern uint8_t g_u8GlobalLengthN1;
extern uint8_t g_u8GlobalLengthN2;
/* DESP: 64bits大小端转换.
Auth: dingmz_frc.20180627.
*/
extern uint64_t __CPU_ENDIAN_HTONLL__(uint64_t u64_host );
// 转换字节序
#define NT16(nv) ((unsigned short)(((nv) << 8) | ((nv) >> 8)))
#define NT32(nv) ((unsigned int)((NT16((nv) & 0xffff) << 16) | (NT16((nv) >> 16))))
#define NT64(nv) __CPU_ENDIAN_HTONLL__(nv)
void NWK_AddRssi(uint16_t node_id, int8_t rssi);
bool NWK_DeleteRssiByNodeid(uint16_t node_id);
bool getEndDeviceRssiByNodeid(uint16_t node_id, int8_t *rssi, uint8_t *index);
/* DESP: Gets the byte length of the specified data type.
* Auth: dingmz_frc.20191025.
* */
uint8_t kUtilsGetDataLength(uint8_t type );
/* DESP: check whether the data set content is specified byte data!
* Auth: dingmz_frc.20190520.
* */
bool kUtilsCheckDataSetContext(void *data_set, uint8_t spec_v, int length );
/* DESP: get the crc16 value of specific InstallCode.
* Auth: dingmz_frc.20191007.
* */
uint16_t kUtilsInstallCodeX25CRC16(uint8_t* u8InstallCode, uint8_t length );
/* DESP: CRC16 algorithm.
* Auth: dingmz_frc.20191018.
* */
uint16_t kUtilsCRC16Sum(const unsigned char *msg, unsigned int length );
/* DESP: 消息格式解析 - 字符串分段解析成子串.
Auth: dingmz_frc.20180607.
*/
int kUtilsStringSplit(char *string, char (*item)[STRING_ITEM_SIZE_MAX], char spec/*分隔符*/);
/* DESP: Check whether the given string is a number.
* Auth: dingmz_frc.20191023.
* */
bool kUtilsIsNumber(char *string );
/* DESP: Check whether the given string is OCT string.
* Auth: dingmz_frc.20191023.
* */
bool kUtilsIsOct(char *string );
/* DESP: Gets the value[in 64-bits] of the specified length from the specified OCT string.
* Note: expected output value max 64bits, so max length input is 16!!!
Auth: dingmz_frc.20191018.
*/
uint64_t kUtilsOct2Value(char *oct, int length/* ≤ 16 */ );
/* DESP: High precision random interface,value in[minNum, maxNum].
Auth: dingmz_frc.20190701.
*/
uint32_t kUtilsGetRandNum(uint32_t minNum, uint32_t maxNum );
/* DESP: Reverse uint8 array contents.
* PARAM[bModifyOriginalData]: Note that this interface modifies the original data content When bModifyOriginalData is true!!!
Auth: dingmz_frc.20191019.
*/
uint8_t *kUtilsReverseArrayU8int(uint8_t *org_data, int length, bool bModifyOriginalData );
/* DESP: Check if it is a valid IEEE address.
* Auth: dingmz_frc.20191106.
* */
bool kUtilsIsValidEui64Addr(EmberEUI64 ineui64addr );
/* DESP: 对一个buffer数据进行排序去除最大的和最小的滤波个数取平均值
filter_num 滤波最大和最小的个数, 相等的
* Auth: maozj.20191123.
* */
uint32_t kUtilsGetAverage(uint32_t *buf, uint8_t len, uint8_t filter_num); //计算平均值
/* DESP: Get the first endpoint containing the specified cluster with mask.
Auth: dingmz_frc.20191024.
*/
uint8_t kCmdGetEndpointByCluserID(uint16_t cluster_id, uint8_t mask );
/* Partition the filename.
Auth: dingmz_frc.20180620.
*/
char *__FNAME__(char *dname);
/* DESP: RewriteCustomMac
Auth:
*/
uint32_t kRewriteCustomMacAddr(EmberEUI64 *eui64);
/* DESP: ReadCustomMac
Auth:
*/
void ReadCustomMacAddr(EmberEUI64 *eui64);
/* DESP: SWAP_EUI64
Auth:
*/
void SWAP_EUI64(uint8_t *ptr);
/* DESP: Get the Data_Code.
Auth: dingmz_frc.20191024.
*/
uint32_t Get_Date_Code( int8u * pData, int8u *pStr );
#endif
#endif
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-interpan.c
0 → 100644
View file @
4f207db8
/**********************************************************************
* INCLUDES
*/
#include "tl_common.h"
#include "zb_api.h"
#include "zcl_include.h"
#include "ikk-interpan.h"
#include "ikk-debug.h"
#include "ikk-token.h"
#include "ikk-network.h"
static
bool
gInterPanEnabled
;
// 1:enable
static
uint16_t
gInterPanID
=
0x1111
;
// 1:enable
static
uint8_t
g_interpanChannel
=
20
;
pInterPanMsgIncomingCallback
gInterPanMsgIncomingCallback
;
static
ev_timer_event_t
*
Interpan_timerEvt
=
NULL
;
static
ev_timer_event_t
*
Interpan_DelaySendEvt
=
NULL
;
static
INCOM_MESSAGE_INFO
sIncomingMessageInfo
=
{
0
};
static
s32
kInterPanEventHandler
(
void
);
static
s32
kInterPanDelaySendTestDataEventHandler
(
void
);
/**
* @brief Definition for Incoming cluster / Sever Cluster
*/
const
u16
kInterpan_inClusterList
[]
=
{
ZCL_CLUSTER_INTERPAN_REQ
,
};
/**
* @brief Definition for Outgoing cluster / Client Cluster
*/
const
u16
kInterpan_outClusterList
[]
=
{
ZCL_CLUSTER_INTERPAN_REQ
,
};
/**
* @brief Definition for Server cluster number and Client cluster number
*/
#define KINTERPAN_IN_CLUSTER_NUM (sizeof(kInterpan_inClusterList)/sizeof(kInterpan_inClusterList[0]))
#define KINTERPAN_OUT_CLUSTER_NUM (sizeof(kInterpan_outClusterList)/sizeof(kInterpan_outClusterList[0]))
/**
* @brief Definition for simple description for HA profile
*/
const
af_simple_descriptor_t
kInterpanSimpleDesc
=
{
ZDO_PROFILE_ID
,
/* Application profile identifier */
HA_DEV_ONOFF_LIGHT_SWITCH
,
/* Application device identifier */
INTERPAN_ENDPOINT
,
/* Endpoint */
0
,
/* Application device version */
0
,
/* Reserved */
KINTERPAN_IN_CLUSTER_NUM
,
/* Application input cluster count */
KINTERPAN_OUT_CLUSTER_NUM
,
/* Application output cluster count */
(
u16
*
)
kInterpan_inClusterList
,
/* Application input cluster list */
(
u16
*
)
kInterpan_outClusterList
,
/* Application output cluster list */
};
void
afInterpan_rx_handler
(
void
*
arg
)
{
apsdeDataInd_t
*
pApsdeInd
=
(
apsdeDataInd_t
*
)
arg
;
UMsgNodeSt
*
pMsgNode
=
(
UMsgNodeSt
*
)
pApsdeInd
->
indInfo
.
asdu
;
pMsgNode
->
length
=
pApsdeInd
->
indInfo
.
asduLength
;
sIncomingMessageInfo
.
seq
=
pApsdeInd
->
indInfo
.
aps_counter
;
sIncomingMessageInfo
.
src_ep
=
pApsdeInd
->
indInfo
.
src_ep
;
sIncomingMessageInfo
.
src_addr_mode
=
pApsdeInd
->
indInfo
.
src_addr_mode
;
if
(
pApsdeInd
->
indInfo
.
src_addr_mode
==
APS_LONG_DSTADDR_WITHEP
)
memcpy
(
sIncomingMessageInfo
.
src_ext_addr
,
pApsdeInd
->
indInfo
.
src_ext_addr
,
8
);
else
if
(
pApsdeInd
->
indInfo
.
src_addr_mode
==
APS_SHORT_DSTADDR_WITHEP
)
sIncomingMessageInfo
.
src_short_id
=
pApsdeInd
->
indInfo
.
src_short_addr
;
iKonkeAfSelfPrint
(
"afInterpan_rx_handler,data len =%d
\r\n
"
,
pApsdeInd
->
indInfo
.
asduLength
);
iKonkeAfSelfPrintBuffer
(
pApsdeInd
->
indInfo
.
asdu
,
pApsdeInd
->
indInfo
.
asduLength
);
switch
(
pApsdeInd
->
indInfo
.
cluster_id
){
case
ZCL_CLUSTER_INTERPAN_REQ
:
gInterPanMsgIncomingCallback
(
pMsgNode
);
break
;
default:
break
;
}
/* Must be free here. */
ev_buf_free
((
u8
*
)
arg
);
}
void
afInterpan_dataSendConfirm
(
void
*
arg
)
{
apsdeDataConf_t
*
pApsDataCnf
=
(
apsdeDataConf_t
*
)
arg
;
printf
(
"afInterpan_dataSendConfirm,dest ep = %d
\r\n
!!
\r\n
"
,
pApsDataCnf
->
dstEndpoint
);
}
void
kInterPanEnable
(
uint8_t
channel
)
{
rf_setChannel
(
channel
);
printf
(
"kInterPanEnable enable,Regesiter Interpan Func,network = %d
\r\n
!!
\r\n
"
,
kNwkGetCurrentStatus
());
if
(
kNwkGetCurrentStatus
()
==
ENS_LEAVED
)
{
af_endpointRegister
(
INTERPAN_ENDPOINT
,
(
af_simple_descriptor_t
*
)
&
kInterpanSimpleDesc
,
afInterpan_rx_handler
,
afInterpan_dataSendConfirm
);
}
else
{
kNwkFactoryReset
(
false
);
}
}
void
kInterpanDisable
(
void
)
{
if
(
gInterPanEnabled
==
true
)
{
af_endpointUnregister
(
INTERPAN_ENDPOINT
);
kInterPanSetEnableStatus
(
false
);
if
(
Interpan_DelaySendEvt
){
TL_ZB_TIMER_CANCEL
(
&
Interpan_DelaySendEvt
);
}
}
}
void
kInterPanMoudleInit
(
pInterPanMsgIncomingCallback
pfunc_incoming
)
{
bool
interPanEnabledFlg
=
kGetInterpanEnableFlg
();
if
(
interPanEnabledFlg
)
{
gInterPanEnabled
=
true
;
}
if
(
gInterPanEnabled
==
true
)
{
kInterPanEnable
(
INTERPAN_CHANNEL
);
if
(
Interpan_timerEvt
){
TL_ZB_TIMER_CANCEL
(
&
Interpan_timerEvt
);
}
Interpan_timerEvt
=
TL_ZB_TIMER_SCHEDULE
(
kInterPanEventHandler
,
NULL
,
INTERPAN_AUTO_OFF_TIME
);
if
(
kNwkGetCurrentStatus
()
==
ENS_LEAVED
)
{
if
(
Interpan_DelaySendEvt
)
TL_ZB_TIMER_CANCEL
(
&
Interpan_DelaySendEvt
);
Interpan_DelaySendEvt
=
TL_ZB_TIMER_SCHEDULE
(
kInterPanDelaySendTestDataEventHandler
,
NULL
,
INTERPAN_DELAY_SEND_INTERVAL
);
}
}
gInterPanMsgIncomingCallback
=
pfunc_incoming
;
}
static
void
afTest_dataSendDemo
(
void
)
{
epInfo_t
dstEp
;
TL_SETSTRUCTCONTENT
(
dstEp
,
0
);
//uint8_t aucData[] = {0x5C,0x2B,0xCD,0xFE,0xFF,0x27,0xFD,0x84};
dstEp
.
dstAddrMode
=
APS_SHORT_DSTADDR_WITHEP
;
dstEp
.
dstEp
=
5
;
dstEp
.
dstAddr
.
shortAddr
=
0xFFFF
;
dstEp
.
profileId
=
ZDO_PROFILE_ID
;
dstEp
.
txOptions
=
APS_TX_OPT_INTRA_PAN
;
dstEp
.
radius
=
0
;
g_zbMacPib
.
panId
=
gInterPanID
;
u8
apsCnt
=
0
;
u8
asdu
[]
=
{
0xAA
,
0x55
,
0x00
,
0x09
,
0x10
,
0x00
,
0x00
,
0x04
,
0x00
,
0x00
,
0x0d
,
0x00
,
0xF3
,
0xD0
,
0xFF
};
u8
asdulength
=
sizeof
(
asdu
);
af_dataSend
(
5
,
&
dstEp
,
0x0001
,
asdulength
,
asdu
,
&
apsCnt
);
printf
(
"afTest_Receive--------------ok!!
\r\n
"
);
}
/**
* @description:
* @param {*}
* @return {*}
*/
bool
kInterPanSetEnableStatus
(
uint8_t
enable
)
{
gInterPanEnabled
=
enable
;
kSetInterpanEnableFlg
(
!
gInterPanEnabled
);
}
void
SetInterpanPara
(
uint8_t
channel
,
uint16_t
panid
,
bool
is_enable
)
{
if
(
panid
!=
0xffff
)
gInterPanID
=
panid
;
if
((
channel
!=
0xff
)
&&
(
channel
>=
11
)
&&
(
channel
<=
26
))
g_interpanChannel
=
channel
;
if
(
is_enable
)
{
gInterPanEnabled
=
TRUE
;
kSetInterpanEnableFlg
(
gInterPanEnabled
);
}
else
kInterpanDisable
();
}
static
uint8_t
sSend_Count
=
0
;
static
s32
kInterPanDelaySendTestDataEventHandler
(
void
)
{
if
(
sSend_Count
<
INTERPAN_DELAY_SEND_TIMES
)
{
sSend_Count
++
;
afTest_dataSendDemo
();
//for coo find this device
return
0
;
}
sSend_Count
=
0
;
return
-
1
;
}
static
s32
kInterPanEventHandler
(
void
)
{
iKonkeAfSelfPrint
(
"kInterPanEventHandler
\r\n
"
);
if
(
gInterPanEnabled
==
true
)
{
af_endpointUnregister
(
INTERPAN_ENDPOINT
);
kInterPanSetEnableStatus
(
false
);
}
return
-
1
;
}
kk_err_t
kInterPanSend
(
UMsgNodeSt
*
pMsgNode
)
{
epInfo_t
dstEp
;
kk_err_t
err
=
KET_OK
;
TL_SETSTRUCTCONTENT
(
dstEp
,
0
);
dstEp
.
dstAddrMode
=
sIncomingMessageInfo
.
src_addr_mode
;
if
(
sIncomingMessageInfo
.
src_addr_mode
==
APS_LONG_DSTADDR_WITHEP
)
memcpy
(
dstEp
.
dstAddr
.
extAddr
,
sIncomingMessageInfo
.
src_ext_addr
,
8
);
else
if
(
sIncomingMessageInfo
.
src_addr_mode
==
APS_SHORT_DSTADDR_WITHEP
)
dstEp
.
dstAddr
.
shortAddr
=
sIncomingMessageInfo
.
src_short_id
;
dstEp
.
dstEp
=
sIncomingMessageInfo
.
src_ep
;
dstEp
.
profileId
=
ZDO_PROFILE_ID
;
dstEp
.
txOptions
=
APS_TX_OPT_INTRA_PAN
;
dstEp
.
radius
=
0
;
g_zbMacPib
.
panId
=
gInterPanID
;
u8
apsCnt
=
sIncomingMessageInfo
.
seq
;
af_dataSend
(
INTERPAN_ENDPOINT
,
&
dstEp
,
ZCL_CLUSTER_INTERPAN_REQ
,
pMsgNode
->
length
,
pMsgNode
->
buffer
,
&
apsCnt
);
return
err
;
}
/**
* @description:
* @param {*}
* @return {*}
*/
bool
kInterPanGetEnableStatus
(
void
)
{
return
gInterPanEnabled
;
}
tl_zigbee_sdk/apps/common/00ikonke_app/general/ikk-interpan.h
0 → 100644
View file @
4f207db8
#ifndef _IKONKE_OPT_TUNNEL_H_
#define _IKONKE_OPT_TUNNEL_H_
#include "ikk-module-def.h"
#include "../driver/ikk-uart.h"
extern
const
af_simple_descriptor_t
kInterpanSimpleDesc
;
#define INTERPAN_ENDPOINT 5
#define INTERPAN_EVENT_INIT 0x00 // interPan Event
#define INTERPAN_EVENT_OFF 0x01 //
#define INTERPAN_AUTO_OFF_TIME (10 * 60 * 1000)
#define INTERPAN_DELAY_SEND_INTERVAL (3 * 1000)
#define INTERPAN_DELAY_SEND_TIMES (2)
#define INTERPAN_CHANNEL 20
#define ZCL_CLUSTER_INTERPAN_REQ 0x0001
typedef
void
(
*
pInterPanMsgIncomingCallback
)(
UMsgNodeSt
*
pMsgNode
);
typedef
struct
{
uint8_t
seq
;
uint8_t
src_addr_mode
;
uint8_t
src_ext_addr
[
8
];
uint16_t
src_short_id
;
uint8_t
src_ep
;
uint8_t
reserved
[
8
];
}
INCOM_MESSAGE_INFO
;
void
SetInterpanPara
(
uint8_t
channel
,
uint16_t
panid
,
bool
is_enable
);
void
afInterpan_dataSendConfirm
(
void
*
arg
);
void
afInterpan_rx_handler
(
void
*
arg
);
void
kInterpanDisable
(
void
);
kk_err_t
kInterPanSend
(
UMsgNodeSt
*
pMsgNode
);
void
kInterpan_Init
(
void
);
bool
kInterPanSetEnableStatus
(
uint8_t
enable
);
void
kInterPanMoudleInit
(
pInterPanMsgIncomingCallback
pfunc_incoming
);
#endif
/* _SAMPLE_LIGHT_H_ */
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