Files
kunlun/export/inc/plc_lib/iot_plc_api.h
2024-09-28 14:24:04 +08:00

677 lines
29 KiB
C
Executable File

/****************************************************************************
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_API_H
#define IOT_PLC_API_H
#include "os_types_api.h"
#include "iot_plc_msg_api.h"
#include "iot_pkt_api.h"
#ifdef __cplusplus
extern "C" {
#endif
/* application id range definition */
#define IOT_PLC_APP_ID_MIN 48
#define IOT_PLC_APP_ID_VENDOR_MIN 128
#define IOT_PLC_APP_ID_MAX 254
/* application layer data traffic load level */
#define IOT_PLC_APP_LOAD_LIGHT (0)
#define IOT_PLC_APP_LOAD_MEDIUM (1)
#define IOT_PLC_APP_LOAD_HEAVY (2)
#define IOT_PLC_APP_LOAD_MIN IOT_PLC_APP_LOAD_LIGHT
#define IOT_PLC_APP_LOAD_MAX IOT_PLC_APP_LOAD_HEAVY
#define IOT_PLC_APP_LOAD_DEFAULT IOT_PLC_APP_LOAD_LIGHT
/* local default retry count */
#define IOT_PLC_LOCAL_RETRY_CNT 0
/* max retry count */
#define IOT_PLC_MAX_RETRY_CNT 5
/* whole network broadcast max retry count */
#define IOT_PLC_BCAST_ALL_MAX_RETRY_CNT 3
/** \defgroup PLCLIB_APIs PLCLIB APIs
* @brief WQ30x1 PLCLIB APIs
*/
/** @addtogroup PLCLIB_APIs
* @{
*/
/** \defgroup PLC_SHARE_APIs PLC SHARE APIs
* @brief Share APIs
*
* APIs can be called by CCO or STA devices
*/
/** @addtogroup PLC_SHARE_APIs
* @{
*/
/**
* @brief (*iot_plc_recv_func_t)() - callback to receive event from plc.
* @param: parameter registered in iot_plc_register_app
* @param: buffer to store the event detail, application should call
* iot_free_pkt functio ASAP to free the iot pkt. it's very scarce
* resource.
*/
typedef void (*iot_plc_recv_func_t)(void *param, iot_pkt_t *pkt);
typedef struct _iot_plc_app {
/** application id */
uint8_t app_id;
/** default priority */
uint8_t prio;
/** application load */
uint8_t load;
/** callback to receive event from plc */
iot_plc_recv_func_t recv;
/** parameter that will be transferred back alone with the callback */
void *param;
} iot_plc_app_t;
/** plc application hanlder */
typedef void *iot_plc_app_h;
/**
* @brief iot_plc_register_app() - register plc application. the result will
* be notified through iot_plc_recv_func_t callback.
* @param app: pointer to application descripter
*
* @return NULL -- for failure case
* @return otherwise -- plc application handler
*/
iot_plc_app_h iot_plc_register_app(iot_plc_app_t *app);
/**
* @brief iot_plc_calc_msdu_len_with_pad_info() - since no matter appdata len,
* the PB block size is fixed by 136 264 or 520. we reuse the
* padding bytes which transferred by MAC HW. It's
* no cost on communication bandwidth.
* @param app_len: application data length.
* @param is_connless: msdu send by connection or connectionless mode, cared
* by head length different.
* @param pad_len: padding info len which can be reused.
* @return proper msdu length needed apply for mac.
*/
uint16_t iot_plc_calc_msdu_len_with_pad_info(uint16_t app_len,
uint8_t is_connless, uint16_t *pad_len);
/**
* @brief iot_plc_alloc_msdu() - allocate iot packet for msdu data send.
* data rx will be notified through iot_plc_recv_func_t callback.
* @param handle: plc application handler
* @param msg_type: type of the message. see IOT_PLC_MSG_TYPE_XXX
* @param ack_type: required ack type. see IOT_PLC_ACK_TYPE_XXX
* @param dst: final destination mac address
* @param src: original source mac address
* @param lid: link identifier.
* 0 - 3 priority,
* 4 - 254 business category,
* 255 invalid. if set to 255, default
* priority registered will be used.
* @param len: message length
* @param send_cnt: times of sending if remote not acked,
* 0 mean default times.
* @return the pointer of iot packet
*/
iot_pkt_t *iot_plc_alloc_msdu(iot_plc_app_h handle, uint8_t msg_type,
uint8_t ack_type, uint8_t *dst, uint8_t *src, uint8_t lid, uint16_t len,
uint8_t send_cnt);
/**
* @brief iot_plc_alloc_msdu_no_encrypt() - allocate iot packet for msdu data
* send. this packet can only be sent in plaintext and cannot be
* encrypted, data rx will be notified through iot_plc_recv_func_t
* callback.
* @param handle: plc application handler
* @param msg_type: type of the message. see IOT_PLC_MSG_TYPE_XXX
* @param ack_type: required ack type. see IOT_PLC_ACK_TYPE_XXX
* @param dst: final destination mac address
* @param src: original source mac address
* @param lid: link identifier.
* 0 - 3 priority,
* 4 - 254 business category,
* 255 invalid. if set to 255, default
* priority registered will be used.
* @param len: message length
* @param send_cnt: times of sending if remote not acked,
* 0 mean default times.
* @return the pointer of iot packet
*/
iot_pkt_t *iot_plc_alloc_msdu_no_encrypt(iot_plc_app_h handle, uint8_t msg_type,
uint8_t ack_type, uint8_t *dst, uint8_t *src, uint8_t lid, uint16_t len,
uint8_t send_cnt);
/**
* @brief iot_plc_alloc_msdu_by_tei() - allocate iot packet for msdu data send.
* data rx will be notified through iot_plc_recv_func_t callback.
* @param handle: plc application handler
* @param msg_type: type of the message. see IOT_PLC_MSG_TYPE_XXX
* @param ack_type: required ack type. see IOT_PLC_ACK_TYPE_XXX
* @param dst: final destination tei, broadcast TEI is not allowed.
* @param src: original source mac address
* @param lid: link identifier.
* 0 - 3 priority,
* 4 - 254 business category,
* 255 invalid. if set to 255, default
* priority registered will be used.
* @param len: message length
* @param send_cnt: times of sending if remote not acked,
* 0 mean default times.
* @return the pointer of iot packet
*/
iot_pkt_t *iot_plc_alloc_msdu_by_tei(iot_plc_app_h handle, uint8_t msg_type,
uint8_t ack_type, uint16_t dst, uint8_t *src, uint8_t lid, uint16_t len,
uint8_t send_cnt);
/**
* @brief iot_plc_alloc_conn_less_msdu_ext() - allocate iot packet for
* connectionless data send with specified ppm fix value.
* data rx will be notified through iot_plc_recv_func_t callback.
* @param handle: plc application handler
* @param msg_type: type of the connectionless message.
* see IOT_PLC_MSG_TYPE_CONN_LESS_XXX
* @param dst: final destination mac address
* @param src: original source mac address
* @param lid: link identifier.
* 0 - 3 priority,
* 4 - 254 business category,
* 255 invalid. if set to 255, default
* priority registered will be used.
* @param len: message length
* @param send_cnt: times of sending if remote not acked,
* 0 mean default times.
* @param fix_ppm: The ppm value fixed.
* @param is_only_tx: flag to mark if rx need to be switched to this ppm.
* set 0 if not required.
* @param tx_link_type: tx link type, see IOT_PLC_TX_LINK_TYPE_XX.
* @return the pointer of iot packet
*/
iot_pkt_t *iot_plc_alloc_conn_less_msdu_ext(iot_plc_app_h handle,
uint8_t msg_type, uint8_t *dst, uint8_t *src, uint8_t lid, uint16_t len,
uint8_t send_cnt, int8_t fix_ppm, uint8_t is_only_tx, uint8_t tx_link_type);
/**
* @brief iot_plc_alloc_conn_less_msdu() - allocate iot packet for
* connectionless data send. data rx will be notified through
* iot_plc_recv_func_t callback.
* @param handle: plc application handler
* @param msg_type: type of the connectionless message.
* see IOT_PLC_MSG_TYPE_CONN_LESS_XXX
* @param dst: final destination mac address
* @param src: original source mac address
* @param lid: link identifier.
* 0 - 3 priority,
* 4 - 254 business category,
* 255 invalid. if set to 255, default
* priority registered will be used.
* @param len: message length
* @param send_cnt: times of sending if remote not acked,
* 0 mean default times.
* @return the pointer of iot packet
*/
#define iot_plc_alloc_conn_less_msdu(handle, msg_type, dst, src, lid, len, \
send_cnt) iot_plc_alloc_conn_less_msdu_ext(handle, msg_type, \
dst, src, lid, len, send_cnt, 0, 0, IOT_PLC_TX_LINK_TYPE_HPLC)
/**
* @brief iot_plc_rf_alloc_conn_less_msdu() - allocate rf iot packet for
* connectionless data send. data rx will be notified through
* iot_plc_recv_func_t callback.
* @param handle: plc application handler
* @param msg_type: type of the connectionless message.
* see IOT_PLC_MSG_TYPE_CONN_LESS_XXX
* @param dst: final destination mac address
* @param src: original source mac address
* @param lid: link identifier.
* 0 - 3 priority,
* 4 - 254 business category,
* 255 invalid. if set to 255, default
* priority registered will be used.
* @param len: message length
* @param send_cnt: times of sending if remote not acked,
* 0 mean default times.
* @return the pointer of iot packet
*/
#define iot_plc_rf_alloc_conn_less_msdu(handle, msg_type, dst, src, lid, len, \
send_cnt) iot_plc_alloc_conn_less_msdu_ext(handle, msg_type, \
dst, src, lid, len, send_cnt, 0, 0, IOT_PLC_TX_LINK_TYPE_RF)
/**
* @brief iot_plc_alloc_ctrl_proto_msdu() - allocate iot packet for Controller
* protocol data send. data rx will be notified through
* iot_plc_recv_func_t callback.
* @param handle: plc application handler
* @param dst: final destination mac address
* @param src: original source mac address
* @param lid: link identifier.
* 0 - 3 priority,
* 4 - 254 business category,
* 255 invalid. if set to 255, default
* priority registered will be used.
* @param len: message length
* @param send_cnt: times of sending if remote not acked,
* 0 mean default times.
* @return the pointer of iot packet
*/
iot_pkt_t *iot_plc_alloc_ctrl_proto_msdu(iot_plc_app_h handle,
uint8_t *dst, uint8_t *src, uint8_t lid, uint16_t len, uint8_t send_cnt);
/**
* @brief iot_plc_send_msdu() - send a packet through the plc. there is no
* guarantee that the packet will be delivered to the
* final destination as the plc network is unreliable. the
* pkt must be allocated through iot_plc_alloc_msdu api.
* @param handle: plc application handler
* @param pkt: pointer to the packet
*/
void iot_plc_send_msdu(iot_plc_app_h handle, iot_pkt_t *pkt);
/**
* @brief iot_plc_query_dev_info() - get info of local device
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
*/
void iot_plc_query_dev_info(iot_plc_app_h handle, uint8_t req_id);
/**
* @brief iot_plc_query_nid() - get nid of the current network, a
* iot_plc_dev_info_rpt message will be replied
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
*/
void iot_plc_query_nid(iot_plc_app_h handle, uint8_t req_id);
/**
* @brief iot_plc_query_nb_nw_info() - get info of neighbour network
* a iot_plc_nb_nw_info_t message will be replied
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
*/
void iot_plc_query_nb_nw_info(iot_plc_app_h handle, uint8_t req_id);
/**
* @brief iot_plc_query_whitelist() - query whitelist
* @param start: start index of whitelist entry
* @param req_id: request id, the request id will be transferred back
* to app in the report. app can define the mean of
* each id itself.
* @param cnt: count of entries to retrieve
*/
void iot_plc_query_whitelist(iot_plc_app_h handle, uint8_t req_id,
uint16_t start,uint16_t cnt);
/**
* @brief iot_plc_query_blacklist() - query blacklist
* @param start: start index of blacklist entry
* @param req_id: request id, the request id will be transferred back
* to app in the report. app can define the mean of
* each id itself.
* @param cnt: count of entries to retrieve
*/
void iot_plc_query_blacklist(iot_plc_app_h handle, uint8_t req_id,
uint16_t start, uint16_t cnt);
/**
* @brief iot_plc_set_whitelist() - set whitelist
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back
* to app in the report. app can define the mean of
* each id itself.
* @param action: action of whitelist operation. available
* value is IOT_PLC_WL_XXX
* @param count: number of mac address
* @param mac_addry_array: array of mac address, big endian
*/
void iot_plc_set_whitelist(iot_plc_app_h handle, uint8_t req_id, uint8_t action,
uint16_t count, uint8_t *mac_addr_array);
/**
* @brief iot_plc_set_whitelist_ex() - set whitelist
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back
* to app in the report. app can define the mean of
* each id itself.
* @param action: action of whitelist operation. available
* value is IOT_PLC_WL_XXX
* @param count: number of mac address
* @param mac_addry: array of mac address
* @param big: flag to mark if the mac address is big endian
* in the array
*/
void iot_plc_set_whitelist_ex(iot_plc_app_h handle, uint8_t req_id,
uint8_t action, uint16_t count, uint8_t *mac_addr, uint8_t big);
/**
* @brief iot_plc_set_blacklist() - set blacklist
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back
* to app in the report. app can define the mean of
* each id itself.
* @param action: action of blacklist operation. available
* value is IOT_PLC_WL_XXX
* @param count: number of mac address
* @param mac_addry_array: array of mac address
*/
void iot_plc_set_blacklist(iot_plc_app_h handle, uint8_t req_id, uint8_t action,
uint16_t count, uint8_t * mac_addr_array);
/**
* @brief iot_plc_set_cfg() - set configuration of local device
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
* @param cfg: pointer to detail configuration
*/
void iot_plc_set_cfg(iot_plc_app_h handle, uint8_t req_id,
iot_plc_cfg_set_req_t *cfg);
/**
* @brief iot_plc_set_freq_band() - set carrier communication frequency band.
* if local device is CCO, the band id info will be saved and applied
* after each restart.
* if local device is STA, the request is only accepted when STA is
* not associated with any network. in addition, the band id info will
* be lost after each restart or associated with a network.
*
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
* @param freq_band: see PLC_LIB_FREQ_BAND_xxx
*/
void iot_plc_set_freq_band(iot_plc_app_h handle, uint8_t req_id,
uint8_t freq_band);
/**
* @brief iot_plc_set_rf_channel() - plc set rf channel.
*
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
* @param option: rf option, see IOT_PLC_RF_OPTION_XXX.
* @param channel: rf channel, see IOT_PLC_CHANNEL_ID_XXX.
* @param rf_cod_enable: flag to mark if enable rf channel coordination,
* 0 - disable, 1 - enable, it only valid for CCO device.
*/
void iot_plc_set_rf_channel(iot_plc_app_h handle, uint8_t req_id,
uint8_t option, uint8_t channel, uint8_t rf_cod_enable);
/**
* @brief iot_plc_start_nw_fmt() - start network formation
* @param handle: plc application handler
* @param force: flag to mark if force start required. if plc network
* formation already started, set this flag will restart
* the whole process from the very beginning.
*/
void iot_plc_start_nw_fmt(iot_plc_app_h handle, uint8_t force);
/**
* @brief iot_plc_stop_nw_fmt() - stop network formation
* @param handle: plc application handler
*/
void iot_plc_stop_nw_fmt(iot_plc_app_h handle);
/**
* @brief iot_plc_query_band_info() - query carrier communication frequency band
*
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
*/
void iot_plc_query_band_info(iot_plc_app_h handle, uint8_t req_id);
/**
* @brief iot_plc_query_neighbor_by_mac() - query the founded neighbor devices in
* the same network by mac. the result will be notified through
* iot_plc_recv_func_t callback.
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
* @param node_mac: the node mac array to be queried, big endian
* @param node_cnt: count of nodes to be queried
*/
void iot_plc_query_neighbor_by_mac(iot_plc_app_h handle,
uint8_t req_id, uint8_t *node_mac, uint8_t node_cnt);
/**
* @brief iot_plc_query_neighbor_dev() - query the founded neighbor devices in
* the same network. the result will be notified through
* iot_plc_recv_func_t callback.
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
* @param start: start tei of the query
* @param cnt: requested number of valid entries
* @param start_type: start type, see IOT_PLC_QUERY_TOPO_START_AS_XXX
*/
void iot_plc_query_neighbor_dev(iot_plc_app_h handle, uint8_t req_id,
uint16_t start, uint16_t cnt, uint8_t start_type);
/**
* @brief iot_plc_query_tei_addr_info() - query tei address information
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
* @param start_tei: start tei
* @param offset: start query position. bit0 = 0, bit1 = 1, bit2 = 2, ...
* @param bm_len: bm len
* @param bm: tei bitmap used for query tei addr,
* bit0 represent start tei,
* bit1 represent start tei + 1 and so on
*/
void iot_plc_query_tei_addr_info(iot_plc_app_h handle, uint8_t req_id,
uint16_t start_tei, uint16_t offset, uint8_t bm_len, uint8_t *bm);
/**
* @brief iot_plc_set_tx_power_cap() - set carrier communication tx power cap
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to app
* in the report. app can define the mean of each id itself.
* @param hplc_power: pointer to hplc tx power cap. unit is 1 dbuv,
* range 95 - 137, see IOT_PLC_HPLC_TX_POWER_XXX.
* @param rf_power: pointer to rf tx power cap. unit is 1 dbm,
* range -35 - 20, see IOT_PLC_RF_TX_POWER_XXX.
* @return:
* ERR_OK -- for success case
* otherwise -- error code
*/
uint32_t iot_plc_set_tx_power_cap(iot_plc_app_h handle, uint8_t req_id,
uint8_t *hplc_power, int8_t *rf_power);
/**
* @brief iot_plc_tsfm_state_change() - change the state of transformer detect.
*
* @param handle: plc application handler.
* @param req_id: request id, the request id will be transferred back to app
* in the report. app can define the mean of each id itself.
* @param status: the status of transformer detect, see
* IOT_PLC_TSFM_STATE_XXX.
* @param tsfm_addr: transformer mac address. only used in
* IOT_PLC_TSFM_STATE_LOCK case.
* @param wl_notify_enable: flag to mark if white list notification enable,
* invalid for sta role case. 0 - disable, 1 - enable.
* @param zc_notify_enable: flag to mark if zc ntb notification enable,
* invalid for sta role case. 1 - broadcast, 0 - not.
* @param net_lock_time: pointer to the net lock time, NULL mean that the net
* lock time is invalid.
* @param abn_lock_time: pointer to the lock time of abnormal leave net, NULL
* mean that the lock time of abnormal leave net is invalid.
* @param unlock_delay: network unlock delay time, unit is 1min.
*/
void iot_plc_tsfm_state_change(iot_plc_app_h handle, uint8_t req_id,
uint8_t status, uint8_t *tsfm_addr, uint8_t wl_notify_enable,
uint8_t zc_notify_enable, uint16_t *net_lock_time, uint16_t *abn_lock_time,
uint16_t unlock_delay);
/**
* @brief get NTB value of local device. note that, if network
* formation is not done, this value is not reliable.
*
* @param handle: plc application handler.
*/
uint32_t iot_plc_get_ntb(iot_plc_app_h handle);
/**
* @brief enable/disable watch dog function in PLC. by default, if plc
* network formation can't be done within 30 min, system restart
* will be triggered.
*
* @param handle: plc application handler.
* @param enable: 1 to enable. 0 to disable.
* @param interval: watch dog bite interval, unit is 1 min, less than 30
* minutes is disallowed.
*/
void iot_plc_wdg_set(iot_plc_app_h handle, uint8_t enable, uint16_t interval);
/**
* @brief: get if device is running in sta or cco role
*
* @retval: return true if device is running in sta role.
*/
bool_t iot_plc_is_client_mode();
/**
* @brief iot_plc_query_local_phase() - query phase information of local device.
*
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
*/
void iot_plc_query_local_phase(iot_plc_app_h handle, uint8_t req_id);
/**
* @brief iot_plc_zc_collect() - collect zero-crossing information of
* local device.
*
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
* @param start_ntb: time to start collecting, unit is 1 ntb. the actual number
* of collection may be less than the required number, because
* there is not enough data at the current time, so caller
* need to delay the request for a while, caller can delay
* 1-5s based on the amount of data and then request again.
* @param cnt: collection count, if the local device has 3 phase zc data,
* and collecton count is not a multiple of 3, the count of
* actual collection returned is a multiple of 3.
*/
void iot_plc_zc_collect(iot_plc_app_h handle, uint8_t req_id,
uint32_t start_ntb, uint8_t cnt);
/**
* @brief iot_plc_query_band_bitmap() - plc query band bitmap.
*
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
* @param is_scan_band: 0: scan band bitmap; 1: support band bitmap.
*/
void iot_plc_query_band_bitmap(iot_plc_app_h handle, uint8_t req_id,
uint8_t is_scan_band);
/**
* @brief iot_plc_set_rate_adapt_mode() - set tx adapt mode
*
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
* @param target_node: see IOT_PLC_RATE_ADAPT_NODE_XXX
* @param rate_adapt_mode: see IOT_PLC_RATE_ADAPT_MODE_XXX
* @param fixed_rate_level: see IOT_PLC_RATE_ADAPT_RATE_XXX, this value is valid
* only when target_node == IOT_PLC_RATE_ADAPT_NODE_LOCAL
* and rate_adapt_mode == IOT_PLC_RATE_ADAPT_MODE_FIX.
* note that the higher the rate, the weaker the
* anti-attenuation ability.
* @return: none
*/
void iot_plc_set_rate_adapt_mode(iot_plc_app_h handle, uint8_t req_id,
uint8_t target_node, uint8_t rate_adapt_mode, uint8_t fixed_rate_level);
/**
* @brief iot_plc_set_authrz_dak() - set authorized DAK/MAC pair info
*
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
* @param dak: DAK/MAC pair info
*/
void iot_plc_set_authrz_dak(iot_plc_app_h handle, uint8_t req_id,
iot_plc_authrz_dak_set_req_t *dak);
/**
* @brief iot_plc_get_link_load() - get hplc link traffic load
* @return: percentage value: 0 - 100. 0 means light, 100 means heavy.
*/
uint8_t iot_plc_get_link_load();
/**
* @brief iot_plc_get_link_statistics() - get plc link statistics
* @param stat: return plc link statistics
*/
void iot_plc_get_link_statistics(iot_plc_link_statistics_t *stat);
/**
* @brief iot_plc_set_rf_scan_tbl() - plc set rf scan table.
*
* @param handle: plc application handler
* @param req_id: request id, the request id will be transferred back to
* app in the report. app can define the mean of each id
* itself.
* @param rf_scan_tbl: pointer to rf scan table.
* @param rf_cnt: count of valid rf entry in rf scan table, and no more
* than IOT_PLC_RF_SCAN_TBL_MAX.
*/
void iot_plc_set_rf_scan_tbl(iot_plc_app_h handle, uint8_t req_id,
iot_plc_rf_scan_t *rf_scan_tbl, uint8_t rf_cnt);
/**
* @brief iot_plc_get_comm_type() - get plc communication type
* @return: IOT_PLC_COMM_TYPE_XXX
*/
uint8_t iot_plc_get_comm_type();
/**
* @brief iot_plc_get_local_nf() - get local noise floor.
* @return: unit is dBuV, valid value is 20 ~ 117.
*/
uint8_t iot_plc_get_local_nf();
#ifdef __cplusplus
}
#endif
#endif /* IOT_PLC_API_H */