630 lines
24 KiB
C
Executable File
630 lines
24 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 CVG_API_H
|
|
#define CVG_API_H
|
|
|
|
/* os shim includes */
|
|
#include "os_types.h"
|
|
|
|
/* common includes */
|
|
#include "iot_errno.h"
|
|
#include "iot_utils.h"
|
|
#include "iot_pib.h"
|
|
#include "iot_plc_msg_api.h"
|
|
#include "iot_plc_msg_cco_api.h"
|
|
|
|
/* plc common includes */
|
|
#include "plc_utils.h"
|
|
#include "plc_mme_assoc.h"
|
|
#include "plc_scan_tbl.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* cvg vdev start up reason */
|
|
#define CVG_VDEV_START_INVALID 0
|
|
/* chip boot up */
|
|
#define CVG_VDEV_START_BOOT_UP 1
|
|
/* configuration changed */
|
|
#define CVG_VDEV_START_CFG_CHANGED 2
|
|
/* application request */
|
|
#define CVG_VDEV_START_APP_REQ 3
|
|
/* nid confict detected */
|
|
#define CVG_VDEV_START_NID_CONFLICT 4
|
|
/* enter certification test mode */
|
|
#define CVG_VDEV_START_ENTER_CERT_TEST 5
|
|
/* exit certification test mode */
|
|
#define CVG_VDEV_START_EXIT_CERT_TEST 6
|
|
/* leave network */
|
|
#define CVG_VDEV_START_LEAVE_NETWORK 7
|
|
/* sta assoc request timeout */
|
|
#define CVG_VDEV_START_ASSOC_TIMEOUT 8
|
|
/* sta assoc request rejected by CCO */
|
|
#define CVG_VDEV_START_ASSOC_REJECTED 9
|
|
/* boot up for certification test */
|
|
#define CVG_VDEV_START_BOOT_UP_CERT_ONLY 10
|
|
/* sta device leave network due to rule 1 */
|
|
#define CVG_VDEV_START_LEAVE_NW_RULE_1 11
|
|
/* sta device leave network due to rule 2 */
|
|
#define CVG_VDEV_START_LEAVE_NW_RULE_2 12
|
|
/* sta device leave network due to rule 5 */
|
|
#define CVG_VDEV_START_LEAVE_NW_RULE_5 13
|
|
/* sta device leave network due to rule 6 */
|
|
#define CVG_VDEV_START_LEAVE_NW_RULE_6 14
|
|
/* sta device leave network due to rule 7 */
|
|
#define CVG_VDEV_START_LEAVE_NW_RULE_7 15
|
|
/* sta device leave network due to PCO ABNORMAL */
|
|
#define CVG_VDEV_START_LEAVE_NW_PCO_ABNORMAL 16
|
|
/* sta device leave network due to receive leave indication mme from CCO */
|
|
#define CVG_VDEV_START_LEAVE_NW_LEAVE_IND 17
|
|
/* sta device leave network due to current preferred network SN changed */
|
|
#define CVG_VDEV_START_NW_SN_CHG 18
|
|
/* sta device no candidate pco available in pco selection stage */
|
|
#define CVG_VDEV_START_NO_CAND_PCO 19
|
|
/* sta device no beacon received in whole route period in pco selection stage */
|
|
#define CVG_VDEV_START_NO_BC_RX 20
|
|
/* sta device found remote peer in the network with same mac address exist */
|
|
#define CVG_VDEV_START_DUPLICATE_MAC_EXIST 21
|
|
/* sta device force roaming failed */
|
|
#define CVG_VDEV_START_ROAM_FAILED 22
|
|
/* sta device receive assoc response from cco with invalid pco */
|
|
#define CVG_VDEV_START_PCO_INVALID 23
|
|
/* sta device detect debug cco network */
|
|
#define CVG_VDEV_START_DEBUG_CCO 24
|
|
/* sta device leave network due to cco mac address not in white list */
|
|
#define CVG_VDEV_START_LEAVE_NW_CCO_ADDR_WL 25
|
|
/* sta device leave network due to cco mac address in black list */
|
|
#define CVG_VDEV_START_LEAVE_NW_CCO_ADDR_BL 26
|
|
/* sta device leave network due to exist other best network */
|
|
#define CVG_VDEV_START_LEAVE_NW_EXIST_BEST_NW 27
|
|
/* sta device leave network due to level info out of sync with the network */
|
|
#define CVG_VDEV_START_LEAVE_NW_LEVEL_ABNORMAL 28
|
|
/* sta device leave network due to no assigned beacon time slot in the
|
|
* expected time.
|
|
*/
|
|
#define CVG_VDEV_START_LEAVE_NW_NO_BC_TS 29
|
|
/* sta device leave network due to target transformer found */
|
|
#define CVG_VDEV_START_LEAVE_NW_TARGET_TSFM 30
|
|
/* restart due to current network band switch */
|
|
#define CVG_VDEV_START_BAND_SWITCH 31
|
|
/* same network NID changed */
|
|
#define CVG_VDEV_START_SAME_NW_NID_CHG 32
|
|
/* route table corrupted */
|
|
#define CVG_VDEV_START_RT_TABLE_ERR 33
|
|
/* connecting target devices */
|
|
#define CVG_VDEV_START_CONNECT_WITH_CTRL_PROTO 34
|
|
/* sta device leave network due to hw tsfm send */
|
|
#define CVG_VDEV_START_HW_TSFM_SEND 35
|
|
/* white list cleared */
|
|
#define CVG_VDEV_START_WL_CLEAR 36
|
|
/* sta device leave network due to authorizd request timeout */
|
|
#define CVG_VDEV_START_AUTH_TIMEOUT 37
|
|
/* sta device leave network due to authentication failed */
|
|
#define CVG_VDEV_START_AUTH_FAILED 38
|
|
/* max start reason number, always keep this in the last */
|
|
#define CVG_VDEV_START_REASON_NUMBER 38
|
|
|
|
/* software build date buffer length */
|
|
#define SW_BUILD_DATE_LEN 6
|
|
|
|
/* max vdev number supported for each pdev */
|
|
#define CVG_MAX_VDEV_PER_PDEV 1
|
|
|
|
/* max pdev number supported */
|
|
#define CVG_MAX_PDEV 1
|
|
|
|
/* CVG writable PIB configation special mark to identify if the configuration
|
|
* is valid.
|
|
*/
|
|
#define CVG_CFG_RW_MARK 0x5A3DE68
|
|
|
|
/* vdev common configurations */
|
|
typedef struct _cvg_vdev_cmn_cfg {
|
|
/* device role. see PLC_DEV_ROLE_XXX */
|
|
uint8_t role;
|
|
/* device type. see PLC_DEV_TYPE_XXX */
|
|
uint8_t type;
|
|
/* reboot count */
|
|
uint8_t reboot_cnt;
|
|
/* proto supported */
|
|
uint8_t proto;
|
|
/* mac addr type. see PLC_MAC_ADDR_TYPE_METER_XX */
|
|
uint8_t addr_type;
|
|
/* mac address */
|
|
uint8_t mac_addr[IOT_MAC_ADDR_LEN];
|
|
/* original module address */
|
|
uint8_t module_addr[IOT_MAC_ADDR_LEN];
|
|
/* simple pair passcode value. Only same passcode CCO and STA can be
|
|
* associated.
|
|
*/
|
|
uint16_t passcode;
|
|
/* support band bitmap, band id see PLC_LIB_FREQ_BAND_xxx */
|
|
uint8_t band_bm[IOT_PLC_BAND_BITMAP_SIZE];
|
|
} cvg_vdev_cmn_cfg_t;
|
|
|
|
/* cco vdev configurations */
|
|
typedef struct _cvg_cco_vdev_cfg {
|
|
/* sta assoc retry interval after cco reject sta assoc request. the
|
|
* unit is 1 ms.
|
|
*/
|
|
uint32_t assoc_retry_int;
|
|
/* short network interface id */
|
|
uint32_t nid;
|
|
/* delay for each frequency band switch request, uint is 1ms */
|
|
uint32_t fb_chg_delay;
|
|
/* number of supported physical phases. The range should be from 1 - 3.
|
|
* if set to 1, only phase A supported.
|
|
* if set to 2, both phase A and B are supported.
|
|
* if set to 3, Phase A, B and C are supported.
|
|
*/
|
|
uint8_t p_phase_cnt;
|
|
/* network serial number */
|
|
uint8_t network_sn;
|
|
/* initial frequency band ID */
|
|
uint8_t freq_band_id;
|
|
/* network hplc tx power cap, unit is 1 dbuv */
|
|
uint8_t tx_power_cap;
|
|
/* network rf tx power cap, unit is 1 dbm */
|
|
int8_t rf_tx_power_cap;
|
|
/* allow to use beacon for channel evaluation */
|
|
uint8_t allow_chan_eval :1,
|
|
/* notify white list info to STA */
|
|
wl_notify_enable :1,
|
|
/* flag to mark if disable freq band detection */
|
|
fb_detect_disable :1,
|
|
/* flag to mark if rf tx power is valid */
|
|
rf_tx_power_valid :1,
|
|
/* flag to mark if enable the authorization process */
|
|
auth_enable :1,
|
|
/* encryption mode, see ENCRYPT_MODE_XXX */
|
|
encrypt_mode :1,
|
|
/* encryption_algorithm, see ENCRYPT_ALGO_XXX */
|
|
encrypt_algo :1,
|
|
/* reserved for future */
|
|
rsvd :1;
|
|
/* initial allowed to cco traffic success ratio, the unit is 1% */
|
|
uint8_t allowed_cco_tf_sr;
|
|
/* number of full route period sta need to spend on tr_sf calc. the unit
|
|
* is 1 route period.
|
|
*/
|
|
uint8_t proxy_select_dur;
|
|
/* minimal beacon period, the unit is 1s */
|
|
uint8_t min_bc_period;
|
|
/* allowed maximum nid */
|
|
uint16_t max_nid;
|
|
/* mac address used in previous network formation */
|
|
uint8_t prev_mac_addr[IOT_MAC_ADDR_LEN];
|
|
/* rf channel, see RF_CHANNEL_ID_XXX */
|
|
uint8_t rf_channel;
|
|
/* rf option, see RF_OPTION_XXX */
|
|
uint8_t rf_option :2,
|
|
/* flag to mark if enable rf channel coordination, default is enabled */
|
|
rf_cod_enable :1,
|
|
/* disable tx 3phase function */
|
|
tx_3phase_disable :1,
|
|
/* reserved for future */
|
|
rsvd1 :4;
|
|
/* delay for each rf channel switch request, uint is 1s */
|
|
uint16_t rf_chg_delay;
|
|
#if HPLC_RF_SUPPORT
|
|
/* record rf scan table index of loop */
|
|
uint8_t rf_tbl_idx;
|
|
/* valid number in the rf scan table */
|
|
uint8_t rf_tbl_cnt;
|
|
/* rf select bitmap, 1 - have been selected, 0 - not be selected */
|
|
uint8_t rf_select_bm[iot_ceil(IOT_PLC_RF_SCAN_TBL_MAX, 8)];
|
|
/* valid size of rf select bitmap */
|
|
uint8_t rf_bm_size;
|
|
/* rf scan table */
|
|
iot_plc_rf_scan_t rf_scan_tbl[IOT_PLC_RF_SCAN_TBL_MAX];
|
|
#endif
|
|
} cvg_vdev_cco_cfg_t;
|
|
|
|
/* sta vdev configurations */
|
|
typedef struct _cvg_sta_vdev_cfg {
|
|
/* association random number */
|
|
uint32_t assoc_rand_num;
|
|
/* network monitor enable flag */
|
|
uint8_t nw_monitor_enable :1,
|
|
/* flag to mark if lock network for tsfm */
|
|
tsfm_nw_lock :1,
|
|
/* role of last joined network, 1 is PCO role, 0 is STA role */
|
|
last_role :1,
|
|
/* preferred rf option, see RF_OPTION_XXX */
|
|
prefer_rf_option :2,
|
|
/* 3ps device gpio tx-rx switch phase, see PLC_PHASE_XXX */
|
|
gpio_trx_phase :2,
|
|
/* reserved for future */
|
|
rsvd :1;
|
|
/* preferred cco mac address, big endian */
|
|
uint8_t prefer_cco_addr[IOT_MAC_ADDR_LEN];
|
|
/* prefered sta mac address. big endian */
|
|
uint8_t prefer_sta_addr[IOT_MAC_ADDR_LEN];
|
|
/* preferred network id */
|
|
uint32_t prefer_nid :24,
|
|
/* preferred rf channel, see RF_CHANNEL_ID_XXX */
|
|
prefer_rf_channel :8;
|
|
#if HPLC_RF_DEV_SUPPORT
|
|
/* valid number in the rf scan table */
|
|
uint8_t rf_tbl_cnt;
|
|
/* total duration of rf channel scan table, unit is 1s */
|
|
uint32_t rf_scan_dur;
|
|
/* total duration of rf channel scan table when no network is found,
|
|
* unit is 1s
|
|
*/
|
|
uint32_t rf_scan_min_dur;
|
|
/* rf scan table */
|
|
iot_plc_rf_scan_t rf_scan_tbl[IOT_PLC_RF_SCAN_TBL_MAX];
|
|
#endif
|
|
/* valid number in the plc scan table */
|
|
uint8_t plc_tbl_cnt;
|
|
/* plc scan table */
|
|
plc_scan_band_t plc_scan_tbl[PLC_SCAN_BAND_MAX_CNT];
|
|
} cvg_vdev_sta_cfg_t;
|
|
|
|
/* vdev configurations */
|
|
typedef struct _cvg_vdev_cfg {
|
|
cvg_vdev_cmn_cfg_t cmn_cfg;
|
|
union {
|
|
cvg_vdev_sta_cfg_t vdev_sta;
|
|
cvg_vdev_cco_cfg_t vdev_cco;
|
|
} cfg;
|
|
} cvg_vdev_cfg_t;
|
|
|
|
/* pdev configurations */
|
|
typedef struct _cvg_pdev_cfg {
|
|
uint8_t vdev_cnt;
|
|
cvg_vdev_cfg_t vdev_array[CVG_MAX_VDEV_PER_PDEV];
|
|
} cvg_pdev_cfg_t;
|
|
|
|
/* global configurations */
|
|
typedef struct _cvg_cfg {
|
|
/* version info */
|
|
mme_ver_info_t ver_info;
|
|
/* vendor specific info */
|
|
mme_vendor_info_t vendor_info;
|
|
/* chip management id */
|
|
mme_chip_id_t chip_mm_id;
|
|
/* software reset count */
|
|
uint16_t sw_reset_cnt;
|
|
/* hardware reset count */
|
|
uint16_t hw_reset_cnt;
|
|
/* vendor mark */
|
|
uint16_t same_vendor_mark;
|
|
/* user type, see USER_TYPE_XXX */
|
|
uint8_t user_type;
|
|
/* number of physical device */
|
|
uint8_t pdev_cnt;
|
|
/* ntb offset between collected zc and real zc, negative offset means
|
|
* collected zc is earlier than real zc, unit is 0.04us
|
|
*/
|
|
int32_t zc_ntb_offset;
|
|
/* configuration of each physical device */
|
|
cvg_pdev_cfg_t pdev_array[CVG_MAX_PDEV];
|
|
/* pointer to read only PIB section */
|
|
iot_pib_r_cvg_real_cfg_t *pib_ro;
|
|
/* pointer to writable PIB section */
|
|
iot_pib_w_cvg_real_cfg_t *pib_rw;
|
|
} cvg_cfg_t;
|
|
|
|
|
|
/*
|
|
* @brief cvg_init - initialize cvg modules
|
|
* @param proto: config the protocol for cvg layer. see PLC_PROTO_TYPE_XXX
|
|
*
|
|
* @retval ERR_OK - for success case
|
|
* @retval otherwise - for failure case. see ERR_XXX
|
|
*/
|
|
uint32_t cvg_init(uint8_t proto);
|
|
|
|
/*
|
|
* @brief start vdev function extended version.
|
|
* @param id: vdev id to be started. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
* @param cfg: vdev config. default config initialized in cvg_init will be
|
|
* used for NULL case.
|
|
* @param reason: start up reason. see CVG_VDEV_START_XXX.
|
|
* @param force: flag to mark if restart required if vdev is already started.
|
|
*
|
|
* @retval 0 for success
|
|
* @retval non-zero for failure.
|
|
*/
|
|
uint32_t cvg_start_vdev_ext(uint8_t id, cvg_vdev_cfg_t* cfg, uint8_t reason,
|
|
uint8_t force_restart);
|
|
|
|
/*
|
|
* @brief start vdev. if vdev is already started, this request will
|
|
* be ignored.
|
|
* @param id: vdev id to be started. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
* @param cfg: vdev config. default config initialized in cvg_init will be
|
|
* used for NULL case.
|
|
* @param reason: start up reason. see CVG_VDEV_START_XXX.
|
|
*
|
|
* @retval 0 for success
|
|
* @retval non-zero for failure.
|
|
*/
|
|
uint32_t cvg_start_vdev(uint8_t id, cvg_vdev_cfg_t* cfg, uint8_t reason);
|
|
|
|
/* cvg_add_addr_into_wl - add mac address into while list table
|
|
* @id vdev id to be added. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
* @cnt number of mac address to be added
|
|
* @addr mac address array
|
|
* @phase power line phase of sta device working
|
|
*
|
|
* return:
|
|
* 0 -- for success case
|
|
* otherwise -- error code
|
|
*/
|
|
uint32_t cvg_add_addr_into_wl(uint8_t id, uint32_t cnt,
|
|
uint8_t addr[][IOT_MAC_ADDR_LEN], uint8_t phase);
|
|
|
|
/* cvg_add_addr_into_bl - add mac address into black list table
|
|
* @id vdev id to be added. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
* @cnt number of mac address to be added
|
|
* @addr mac address array
|
|
*
|
|
* return:
|
|
* 0 -- for success case
|
|
* otherwise -- error code
|
|
*/
|
|
uint32_t cvg_add_addr_into_bl(uint8_t id, uint32_t cnt,
|
|
uint8_t addr[][IOT_MAC_ADDR_LEN]);
|
|
|
|
/* cvg_rm_addr_from_wl - remove mac address from while list table
|
|
* @id vdev id to be removed. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
* @cnt number of mac address to be removed
|
|
* @addr mac address array
|
|
*
|
|
* return:
|
|
* 0 -- for success case
|
|
* otherwise -- error code
|
|
*/
|
|
uint32_t cvg_rm_addr_from_wl(uint8_t id, uint32_t cnt,
|
|
uint8_t addr[][IOT_MAC_ADDR_LEN]);
|
|
|
|
/* cvg_rm_all_addr_from_wl - remove all mac address from while list table
|
|
* @id vdev id to be removed. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
*
|
|
* return:
|
|
* 0 -- for success case
|
|
* otherwise -- error code
|
|
*/
|
|
uint32_t cvg_rm_all_addr_from_wl(uint8_t id);
|
|
|
|
/* cvg_rm_addr_from_bl - remove mac address from black list table
|
|
* @id vdev id to be removed. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
* @cnt number of mac address to be removed
|
|
* @addr mac address array
|
|
*
|
|
* return:
|
|
* 0 -- for success case
|
|
* otherwise -- error code
|
|
*/
|
|
uint32_t cvg_rm_addr_from_bl(uint8_t id, uint32_t cnt,
|
|
uint8_t addr[][IOT_MAC_ADDR_LEN]);
|
|
|
|
/* cvg_rm_all_addr_from_bl - remove all mac address from black list table
|
|
* @id vdev id to be removed. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
*
|
|
* return:
|
|
* 0 -- for success case
|
|
* otherwise -- error code
|
|
*/
|
|
uint32_t cvg_rm_all_addr_from_bl(uint8_t id);
|
|
|
|
/* cvg_set_wl_state - enable or disable whitelist.
|
|
* all whitelist check passed with disabled
|
|
* @id: vdev id to be removed. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
* @enable: non-zero to enable whitelist. 0 to disable whitelist.
|
|
*/
|
|
void cvg_set_wl_state(uint8_t id, uint8_t enable);
|
|
|
|
/* cvg_set_wl_state - enable or disable blacklist.
|
|
* all blacklist check passed with disabled
|
|
* @id: vdev id to be removed. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
* @enable: non-zero to enable blacklist. 0 to disable blacklist.
|
|
*/
|
|
void cvg_set_bl_state(uint8_t id, uint8_t enable);
|
|
|
|
/* cvg_query_addr_from_wl - query mac address from while list table
|
|
* @id vdev id to be queried. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
* @start start index to be queried.
|
|
* @cnt number of mac address to be queried.
|
|
* this will be set to number of queried mac addres for return.
|
|
* @addr queried mac address array for return
|
|
*
|
|
* return:
|
|
* 0 -- for success case
|
|
* otherwise -- error code
|
|
*/
|
|
uint32_t cvg_query_addr_from_wl(uint8_t id, uint32_t start, uint32_t *cnt,
|
|
uint8_t addr[][IOT_MAC_ADDR_LEN]);
|
|
|
|
/* cvg_query_wl_ext - query whitelist extend information
|
|
* @id vdev id to be queried. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
* @start start index to be queried.
|
|
* @cnt number of whitelist to be queried.
|
|
* this will be set to number of queried whitelist for return.
|
|
* @wl queried whitelist array for return
|
|
*
|
|
* return:
|
|
* 0 -- for success case
|
|
* otherwise -- error code
|
|
*/
|
|
uint32_t cvg_query_wl_ext(uint8_t id, uint32_t start, uint32_t *cnt,
|
|
iot_plc_wl_ext_t wl[]);
|
|
|
|
/* cvg_query_addr_from_bl - query mac address from black list table
|
|
* @id vdev id to be queried. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
* @start start index to be queried.
|
|
* @cnt number of mac address to be queried.
|
|
* this will be set to number of queried mac addres for return.
|
|
* @addr queried mac address array for return
|
|
*
|
|
* return:
|
|
* 0 -- for success case
|
|
* otherwise -- error code
|
|
*/
|
|
uint32_t cvg_query_addr_from_bl(uint8_t id, uint32_t start, uint32_t *cnt,
|
|
uint8_t addr[][IOT_MAC_ADDR_LEN]);
|
|
|
|
/**
|
|
* @brief cvg_set_wl_joined_done() - set whitelist nodes joined network status.
|
|
* @param id: vdev id to be queried. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
* @param wl_joined_done: 1 - whitelist nodes join network completed.
|
|
* 0 - whitelist nodes join network not completed.
|
|
*/
|
|
void cvg_set_wl_joined_done(uint8_t id, uint8_t wl_joined_done);
|
|
|
|
/**
|
|
* @brief cvg_set_freq_band() - set freq band.
|
|
* @param id: vdev id to be set. The upper 4 bits is pdev array
|
|
* index, and the lower 4 bits is vdev array index.
|
|
* @param freq_band_id: new frequency band ID to be set.
|
|
* @retval: 0 -- for success case
|
|
* @retval: otherwise -- error code
|
|
*/
|
|
uint32_t cvg_set_freq_band(uint8_t id, uint8_t freq_band_id);
|
|
|
|
/**
|
|
* @brief cvg_get_freq_band() - gets the currently used frequency band ID.
|
|
* @param id: vdev id to be queried. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
* @retval: currently used frequency band ID.
|
|
*/
|
|
uint8_t cvg_get_freq_band(uint8_t id);
|
|
|
|
/**
|
|
* @brief cvg_set_rf() - set rf option channel and option.
|
|
* @param id: vdev id to be set. The upper 4 bits is pdev array
|
|
* index, and the lower 4 bits is vdev array index.
|
|
* @param rf_option: new rf option to be set, see RF_OPTION_XXX
|
|
* @param rf_channel: new rf channel to be set.
|
|
* @retval: 0 -- for success case
|
|
* @retval: otherwise -- error code
|
|
*/
|
|
uint32_t cvg_set_rf(uint8_t id, uint8_t rf_option, uint8_t rf_channel);
|
|
|
|
/**
|
|
* @brief cvg_set_rf_ext() - set rf option channel, option and rf cod flag.
|
|
* @param id: vdev id to be set. The upper 4 bits is pdev array
|
|
* index, and the lower 4 bits is vdev array index.
|
|
* @param rf_option: new rf option to be set, see RF_OPTION_XXX
|
|
* @param rf_channel: new rf channel to be set.
|
|
* @param rf_cod: pointer to coordination flag.
|
|
* @param is_from_inner: flag to mark if rf channel change is initiated
|
|
* by internal module.
|
|
* @retval: 0 -- for success case
|
|
* @retval: otherwise -- error code
|
|
*/
|
|
uint32_t cvg_set_rf_ext(uint8_t id, uint8_t rf_option, uint8_t rf_channel,
|
|
uint8_t *rf_cod, uint8_t is_from_inner);
|
|
|
|
/**
|
|
* @brief cvg_get_rf() - gets the currently used rf channel and option.
|
|
* @param id: vdev id to be queried. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
* @param option: returns the rf option value currently used, see
|
|
* RF_OPRION_XXX.
|
|
* @param channel: returns the rf channel value currently used, see
|
|
* RF_CHANNEL_ID_XXX.
|
|
*/
|
|
void cvg_get_rf(uint8_t id, uint8_t *option, uint8_t *channel);
|
|
|
|
/**
|
|
* @brief cvg_get_rf_ext() - gets the currently used rf channel, option and
|
|
* rf coordination flag.
|
|
* @param id: vdev id to be queried. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
* @param option: returns the rf option value currently used, see
|
|
* RF_OPRION_XXX.
|
|
* @param channel: returns the rf channel value currently used, see
|
|
* RF_CHANNEL_ID_XXX.
|
|
* @param rf_cod: returns the flag of rf channel coordination enable
|
|
*/
|
|
void cvg_get_rf_ext(uint8_t id, uint8_t *option, uint8_t *channel,
|
|
uint8_t *rf_cod);
|
|
|
|
/**
|
|
* @brief set hplc and rf tx power cap
|
|
* @param id: vdev id to be set. The upper 4 bits is pdev array
|
|
* index, and the lower 4 bits is vdev array index.
|
|
* @param hplc_power: pointer to hplc tx power cap to be set. unit is 1dbuv.
|
|
* @param rf_power: pointer to rf tx power cap to be set. unit is 1dbm.
|
|
* @return:
|
|
* ERR_OK -- for success case
|
|
* otherwise -- error code
|
|
*/
|
|
uint32_t cvg_set_tx_power_cap(uint8_t id, uint8_t *hplc_power,
|
|
int8_t *rf_power);
|
|
|
|
/**
|
|
* @brief gets the currently used rf tx power cap.
|
|
* @param id: vdev id to be queried. The upper 4 bits is pdev array index,
|
|
* and the lower 4 bits is vdev array index.
|
|
* @retval: rf tx power cap. unit is 1dbm.
|
|
*/
|
|
int8_t cvg_get_rf_tx_power_cap(uint8_t id);
|
|
|
|
/**
|
|
* @brief set rf scan table
|
|
* @param id: vdev id to be set. The upper 4 bits is pdev array
|
|
* index, and the lower 4 bits is vdev array index.
|
|
* @param rf_scan_tbl: pointer to rf scan table.
|
|
* @param rf_cnt: count of valid rf entry in rf scan table.
|
|
* @param set_mac: flag to mark if rf scan table set to mac, this parameter
|
|
* is valid only for sta device.
|
|
* @return:
|
|
* 0 -- for success case
|
|
* otherwise -- error code
|
|
*/
|
|
uint32_t cvg_set_rf_scan_tbl(uint8_t id, iot_plc_rf_scan_t *rf_scan_tbl,
|
|
uint8_t rf_cnt, uint8_t set_mac);
|
|
|
|
/**
|
|
* @brief set beacon data. beacon data can be broadcast to whole network in
|
|
* each beacon period.
|
|
* @param id: vdev id to be set. The upper 4 bits is pdev array
|
|
* index, and the lower 4 bits is vdev array index.
|
|
* @param data: data to be carried in each beacon
|
|
* @param len: length of the data
|
|
*
|
|
* @return 0 - for success case
|
|
* otherwise - error code. see ERR_XXX
|
|
*/
|
|
uint32_t cvg_set_beacon_data(uint8_t id, uint8_t *data, uint8_t len);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* CVG_API_H */
|