Files
kunlun/app/utils/iot_plc_sync_api.h
2024-09-28 14:24:04 +08:00

390 lines
12 KiB
C
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/****************************************************************************
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
be copied by any method or incorporated into another program without
the express written consent of Aerospace C.Power. This Information or any portion
thereof remains the property of Aerospace C.Power. The Information contained herein
is believed to be accurate and Aerospace C.Power assumes no responsibility or
liability for its use in any way and conveys no license or title under
any patent or copyright and makes no representation or warranty that this
Information is free from patent or copyright infringement.
****************************************************************************/
#ifndef IOT_PLC_SYNC_API_H
#define IOT_PLC_SYNC_API_H
#ifdef __cplusplus
extern "C" {
#endif
#define IOT_SYNC_TASK_PARSER_STRUCT_LEN (255)
/* command id */
#define IOT_SYNC_API_CMD_IDLE (0)
/* cco 查询topo */
#define IOT_SYNC_API_CMD_CCO_QUERY_TOPO (1)
/* cco 设置白名单 */
#define IOT_SYNC_API_CMD_CCO_SET_WL (2)
/* cco 查询白名单 */
#define IOT_SYNC_API_CMD_CCO_GET_WL (3)
/* cco 查询白名单状态 */
#define IOT_SYNC_API_CMD_CCO_GET_WL_STATE (4)
/* cco 设置nid */
#define IOT_SYNC_API_CMD_CCO_SET_NID (5)
/* cco 查询nid */
#define IOT_SYNC_API_CMD_CCO_GET_NID (6)
/* sta 查询与指定节点间的snr */
#define IOT_SYNC_API_CMD_STA_GET_SNR (7)
/* sta 查询指定节点通信成功率 */
#define IOT_SYNC_API_CMD_STA_GET_TF_SR (8)
/* sta 查询与指定节点间的信道衰减 */
#define IOT_SYNC_API_CMD_STA_GET_ATTEN (9)
/* sta/cco 查询载波通信频段 */
#define IOT_SYNC_API_CMD_QUERY_BAND (10)
/* sta/cco 设置载波通信发射功率 */
#define IOT_SYNC_API_CMD_SET_TX_POWER (11)
/* sta 查询指定节点的相位 */
#define IOT_SYNC_API_CMD_GET_PHASE (12)
/* sta 查询指定节点的节点信息 */
#define IOT_SYNC_API_CMD_GET_TOPO_NODE (13)
/* sta/cco 查询邻居网络 */
#define IOT_SYNC_API_CMD_QUERY_NBNET (14)
/* cco 设置白名单带相位 */
#define IOT_SYNC_API_CMD_CCO_SET_WL_EXT (15)
/* cco 查询白名单带相位 */
#define IOT_SYNC_API_CMD_CCO_GET_WL_EXT (16)
/* sta/cco set work band */
#define IOT_SYNC_API_CMD_SET_BAND (17)
typedef uint32_t(* POST_MSG_CB)(void *data);
/* pack for the structures in the whole file */
#pragma pack(push) // save the pack status
#pragma pack(1) // 1 byte align
typedef struct _iot_plc_band_info {
/** 载波通信频段. see PLC_LIB_FREQ_BAND_XXX */
uint8_t freq_band;
/** 当前频段的噪声. unit is 1dbm */
uint8_t noise_floor;
/** 发射功率. 0 means no tx power cap. unit is 1dbm */
uint8_t power_cap;
} iot_plc_freq_band_info;
typedef struct _iot_plc_nid_info {
/** 当前网络的nid */
uint32_t nid;
} iot_plc_nid_info;
typedef struct _iot_plc_topo_node_info {
/** MAC address */
uint8_t mac[IOT_MAC_ADDR_LEN];
/** 所在层级 */
uint8_t level;
/** 代理节点的TEI */
uint16_t proxy_tei;
/** role CCO: 4. Proxy: 2. STA: 1. Unknown:0. */
uint8_t role;
/** sta 自身tei */
uint16_t sta_tei;
/** physical phase of the station */
uint8_t phy_phase1 :2,
phy_phase2 :2,
phy_phase3 :2,
reserved :2;
} iot_plc_topo_node_info;
typedef struct _iot_plc_nbcco_info
{
/* cco mac地址 */
uint8_t cco_mac[IOT_MAC_ADDR_LEN];
/* 当前网络的nid */
uint32_t nid;
/* 三相信噪比 */
int8_t snr[IOT_PLC_PHASE_CNT];
} iot_plc_nbcco_info;
typedef struct _iot_plc_nbnet_info
{
/* 邻居网络总数量 */
uint8_t count;
/* 单个邻居网络信息 */
iot_plc_nbcco_info nbnet_info[0];
} iot_plc_nbnet_info;
typedef struct _iot_plc_topo_info {
uint16_t total_cnt;
uint8_t cur_cnt;
iot_plc_topo_node_info topo_info[0];
} iot_plc_topo_info;
typedef struct _iot_plc_white_info {
/* 白名单总数量 */
uint16_t total;
/* 本次返回数量 */
uint8_t cur_cnt;
/* mac 地址列表 */
uint8_t mac_list[0][IOT_MAC_ADDR_LEN];
} iot_plc_white_info;
typedef struct _white_info {
/* mac 地址 */
uint8_t mac[IOT_MAC_ADDR_LEN];
/* 对应相位 */
uint8_t phase:2,
revd:6;
} white_info;
typedef struct _iot_plc_white_info_ext {
/* 白名单总数量 */
uint16_t total;
/* 本次返回数量 */
uint8_t cur_cnt;
/* mac phase列表 */
white_info white_info[0];
} iot_plc_white_info_ext;
#pragma pack(pop) /* restore the pack status */
/**
* @function_name:iot_plc_query_band
* @brief : 查询载波频段信息.
* @param[out] band_info: 回复band信息
* @note sta/cco查询band信息
**/
void iot_plc_query_band(iot_plc_freq_band_info **band_info);
/**
* @function_name:iot_plc_set_band
* @brief : 设置载波通信工作频段.
* @param[in] band: band
* @note sta/cco设置载波band
**/
uint8_t iot_plc_set_band(uint8_t band);
/**
* @function_name:iot_plc_set_tx_power
* @brief : 设置载波通信发射功率.
* @param[in] power: power
* @note sta/cco设置发射功率
**/
uint8_t iot_plc_set_tx_power(uint8_t power);
/**
* @function_name:iot_plc_cco_set_nid
* @brief : 设置nid.
* @param[in] new_nid: nid
* @note cco端设置nid
**/
uint8_t iot_plc_cco_set_nid(uint32_t new_nid);
/**
* @function_name:iot_plc_cco_get_nid
* @brief : 查询nid信息.
* @param[out] nid_info: 回复nid信息
* @note cco端查询nid信息
**/
void iot_plc_cco_get_nid(iot_plc_nid_info **nid_info);
/**
* @function_name:iot_plc_cco_query_node_level
* @brief : 查询节点层级.
* @param[in] sta_mac: 节点mac地址.
* @return 返回: 0 - 失败, 其他 - 层级
* @note cco端查询topo层级信息
**/
uint8_t iot_plc_cco_query_node_level(uint8_t *sta_mac);
/**
* @function_name:iot_plc_cco_query_nw_topo
* @brief : 查询topo信息.
* @param[out] topo_info: 回复topo信息
* @param[in] start: 开始读取位置.
* @param[in] count: 最多读取个数.
* @note cco端查询topo信息
**/
void iot_plc_cco_query_nw_topo(iot_plc_topo_info **topo_info,
uint16_t start, uint8_t count);
/**
* @function_name:iot_plc_query_nbnet
* @brief : 查询邻居网络信息.
* @param[out] nbnet_info: 邻居网络信息
* @note cco/sta查询邻居信息
**/
void iot_plc_query_nbnet(iot_plc_nbnet_info **nbnet_info);
/**
* @function_name: iot_plc_cco_set_whitelist_func
* @brief :设置白名单
* @param[in] action:删除:IOT_PLC_WL_DEL
添加:IOT_PLC_WL_ADD
添加IOT_PLC_WL_ADD_PA添加A相
添加IOT_PLC_WL_ADD_PB添加B相
添加IOT_PLC_WL_ADD_PC添加C相
清空:IOT_PLC_WL_DEL_ALL
禁用:IOT_PLC_WL_DISABLE即关闭
使能:IOT_PLC_WL_ENABLE即开启
* @param[in] count:设置多少个,当action为清空、禁用、使能时,该参数为0.
* @param[in] mac_addr_array:添加/删除的MAC地址.当action为清空、禁用、使能时,该参数为0.
* 添加/删除的MAC地址为小端模式.
* @return 返回: 0 - 成功, 其他 - 失败
* @note cco端设置白名单
**/
uint8_t iot_plc_cco_set_whitelist_func(uint8_t action,uint16_t count,
uint8_t *mac_addr_array);
/**
* @function_name: iot_plc_cco_get_whiltlist_state_func
* @brief 获取白名单状态
* @param[in] NULL
* @return 0:关闭 1:开启
* @note cco端查询白名单状态
**/
uint8_t iot_plc_cco_get_whiltlist_state_func(void);
/**
* @function_name: iot_plc_cco_get_whitelist_info_func
* @brief: 获取白名单信息
* @param[out] whitelist_info:获取到的白名单信息
* @param[in] start:查询白名单开始位置,从0开始
* @param[in] count:查询白名单个数
* @return 返回白名单数量.
* @note cco端查询白名单
**/
uint8_t iot_plc_cco_get_whitelist_info_func(iot_plc_white_info **whitelist_info,
uint16_t start, uint8_t count);
/**
* @function_name: iot_plc_cco_get_whitelist_info_ext_func
* @brief: 获取扩展白名单信息-带相位信息
* @param[out] whitelist_info:获取到的白名单信息
* @param[in] start:查询白名单开始位置,从0开始
* @param[in] count:查询白名单个数
* @return 返回白名单数量.
* @note cco端查询白名单
**/
uint8_t iot_plc_cco_get_wl_info_ext_func(iot_plc_white_info_ext **whitelist_info,
uint16_t start, uint8_t count);
/**
* @function_name: iot_plc_sta_get_atten_by_tei_func
* @brief 查询与代理节点间的信道衰减.
* @param[in] tei:指定的TEI
* @return 指定tei的信道衰减
* @note sta端获取与代理节点之间的信道衰减
**/
uint8_t iot_plc_sta_get_atten_by_tei_func(uint16_t tei);
/**
* @function_name: iot_plc_sta_get_snr_by_tei_func
* @brief 查询与代理节点间的SNR.
* @param[in] tei:指定的TEI
* @return 指定tei的信噪比
* @note sta端获取与代理节点之间的snr
**/
uint8_t iot_plc_sta_get_snr_by_tei_func(uint16_t tei);
/**
* @function_name: iot_plc_sta_get_snr_by_addr_func
* @brief query the snr attenuation between the agent node.
* @param[in] addr: node mac addr.
* @return snr value.
* @note only for cco.
**/
uint8_t iot_plc_sta_get_snr_by_addr_func(uint8_t *addr);
/**
* @function_name: iot_plc_sta_get_tf_sr_by_tei_func
* @brief 查询指定TEI的通信成功率.
* @param[in] tei:指定的TEI
* @return 回复指定tei的信道通信成功率
* @note sta端获取与代理节点之间的通信成功率
**/
uint8_t iot_plc_sta_get_tf_sr_by_tei_func(uint16_t tei);
/**
* @function_name: iot_plc_sta_get_tf_sr_by_addr_func
* @brief query the communication success rate of a node.
* @param[in] addr: node mac addr.
* @return communication success rate.
* @note only for cco.
**/
uint8_t iot_plc_sta_get_tf_sr_by_addr_func(uint8_t *addr);
/**
* @function_name: iot_plc_sta_get_phase_by_tei_func
* @brief 查询指定TEI的相位.
* @param[in] tei:指定的TEI
* @return 回复指定tei的相位
* @note sta端获取相位
**/
uint8_t iot_plc_sta_get_phase_by_tei_func(uint16_t tei);
/**
* @function_name: iot_plc_sta_get_phase_by_addr_func
* @brief query node phase information.
* @param[in] addr: node mac addr.
* @return phase info.
* @note only for cco.
**/
uint8_t iot_plc_sta_get_phase_by_addr_func(uint8_t *addr);
/**
* @function_name: iot_plc_sta_get_cco_flag_func
* @brief 查询系统中有无CCO.
* @param[in] NULL
* @return true:有, false:无
* @note sta端检查模块是否加入cco网络
**/
uint8_t iot_plc_sta_get_cco_flag_func(void);
/**
* @function_name: iot_plc_sta_get_proxy_tei_func
* @brief 查询代理节点tei.
* @param[in] NULL
* @return 0:查询失败, others:代理节点tei
* @note sta端检查查询代理节点tei,入网后才能查到.
**/
uint16_t iot_plc_sta_get_proxy_tei_func(void);
/**
* @function_name:iot_plc_sta_is_online
* @brief 查看对应地址的sta是否入网.
* @param mac: sta的mac.
* @return: true - sta is joined, false -sta is not joined
**/
uint8_t iot_plc_sta_is_online(uint8_t* mac);
/**
* @function_name:sync_api_msg_from_mac_handle
* @brief plc mac messages handle function.
* @param pkt: message data pkt.
* @return : true - command is executed, false - not executed
**/
uint8_t sync_api_msg_from_mac_handle(iot_pkt_t *pkt);
/**
* @function_name:iot_sync_api_init_app_hdl
* @brief 初始化app handle
* @param handle: 设置sync api 使用的app handle.
* @param module_id: 设置sync api 使用的module_id.
* @param clicb: 传递从CLI接收到的消息.
* @return : true - init success, else false.
**/
uint8_t iot_sync_api_init_app_hdl(iot_plc_app_h handle, module_id_t module_id,
POST_MSG_CB clicb);
/**
* @brief: handle cli message.
*/
void iot_app_handle_cli_msg(iot_pkt_t *pkt);
#ifdef __cplusplus
}
#endif
#endif /* IOT_PLC_SYNC_API_H */