Files
kunlun/plc/inc/mac_bcm_api.h
2024-09-28 14:24:04 +08:00

738 lines
26 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 MAC_BCM_API_H
#define MAC_BCM_API_H
/* os shim includes */
#include "os_types.h"
/* common includes */
#include "iot_utils.h"
#include "iot_pkt_api.h"
#include "iot_errno.h"
/* plc protocol includes */
#include "plc_protocol.h"
#include "plc_utils.h"
#include "plc_fr.h"
#ifdef __cplusplus
extern "C" {
#endif
/* beacon update action type */
#define MAC_BC_ACT_ADD (1) /* add content */
#define MAC_BC_ACT_DEL (2) /* delete content */
/* define the beacon entry section */
#define MAC_BC_FC_INFO (0) /* beacon frame control info */
#define MAC_BC_FIX_P (1) /* fixed beacon payload */
#define MAC_BC_BMI_STA_CAP (2) /* sta capability */
#define MAC_BC_BMI_RT_PARAM (3) /* route parameter */
#define MAC_BC_BMI_FREQ_CHG (4) /* frequency change */
#define MAC_BC_BMI_TIME_SLOT (5) /* time slot assignment */
#define MAC_BC_BMI_VENDOR_SPEC (6) /* vendor specific */
#define MAC_BC_BMI_METER (7) /* meter reading control info */
#define MAC_BC_BMI_FB_DETECT (8) /* freq band detection */
#define MAC_BC_BMI_RF_CHANNEL_CHG (9) /* rf channel change */
#define MAC_BC_BMI_RF_ROUTE (10) /* rf route parameter */
#define MAC_BC_BMI_RF_SIMPLE_PARAM (11) /* rf simple param */
#define MAC_BC_BMI_RTC (12) /* real time clock */
#define MAC_BC_BMI_HTBUS_FIX_P (13) /* HTBUS fixed beacon payload */
#define MAC_BC_BMI_HTBUS_TIME_SLOT (14) /* HTBUS time slot assignment */
#define MAC_BC_BMI_HTBUS_USER_DATA (15) /* HTBUS user data entry */
#define MAC_BC_BMI_UNKNOWN (16) /* unknown entry */
/* max beacon entries. always keep it defined as the last one */
#define MAC_BC_ENTRY_MAX (MAC_BC_BMI_UNKNOWN + 1)
/* define how many bcn entries participate in sorting */
#define MAC_BCN_SORT_MAX_CNT (15)
/* define the rf status of tx beacon. just send tidy beacon */
#define MAC_RF_SEND_SIMPLE_BCN (0)
/* define the rf status of tx beacon. just send standard beacon */
#define MAC_RF_SEND_STD_BCN (1)
/* max beacon vendor app data size */
#define MAC_BC_APP_DATA_MAX 14
/* meter reading control entry data size */
#define MAC_MAX_BC_METER_DATA_SIZE (0x20)
/* min beacon csma slot, unit is 1ms */
#define MAC_BC_CSMA_SLOT_MIN (50)
/* beacon entry descriptor */
typedef struct _mac_bc_ent {
/* beacon entry type */
uint8_t type;
/* beacon entry data */
void *data;
} mac_bc_ent_t;
/* beacon update descriptor */
typedef struct _mac_bc_update {
/* flag to mark if a beacon tx need to be triggered after beacon updated */
uint8_t tx_req :1,
/* flag to mark if a new beacon period need to be loaded after beacon
* update.
*/
new_bp_req :1,
/* flag to mark if phase a is allowed for tx if local device is sta role */
phase_a_tx :1,
/* flag to mark if phase b is allowed for tx if local device is sta role */
phase_b_tx :1,
/* flag to mark if phase c is allowed for tx if local device is sta role */
phase_c_tx :1,
/* flag to mark if use high power */
high_power :1,
/* flag to mark if discovery beacon send with non cco node info */
bc_d_with_non :1;
/* entry count */
uint8_t count;
/* for CCO role device, this value indicate the number of STA devices in
* the network.
* for STA role device, this value indicate the number of devices nearby
* in the same network.
*/
uint16_t peer_cnt;
/* valid bcn entries in entry_sort */
uint8_t entry_sort_cnt;
/* bcn entries fill order */
uint8_t entry_sort[MAC_BCN_SORT_MAX_CNT];
/* beacon update action */
uint8_t action[MAC_BC_ENTRY_MAX];
/* beacon entries to be updated */
mac_bc_ent_t entry[MAC_BC_ENTRY_MAX];
} mac_bc_update_t;
/* frame control entry */
typedef struct _mac_bc_fc {
/* network ID */
uint32_t nid :24,
/* rx band ID */
band_id :8;
/* ntb delta. remote device network ntb - local device network ntb.
* this info is gotten from beacon rx meta infor from mac layer.
*/
int32_t delta_ntb;
/* snr of the beacon */
int8_t snr;
/* rssi of the beacon */
int8_t rssi;
/* network type */
uint8_t net_type;
/* targeted phase of the beacon */
uint8_t phase :2,
/* flag to indicate is rf package or not */
is_rf :1,
/* version info */
version :5;
/* beacon period count */
uint32_t bp_cnt;
} mac_bc_fc_t;
/* fixed payload entry */
typedef struct _mac_bc_fp {
uint8_t type : 2,
assoc_done : 1,
allow_assoc : 1,
allow_chan_eval : 1,
simple_beacon : 1,
rf_option : 2;
uint8_t network_sn;
uint8_t cco_addr[IOT_MAC_ADDR_LEN];
uint32_t bc_period_cnt;
uint32_t rf_channel :8,
/* flag to mark if enable the authorization process */
auth_enable :1,
/* encryption mode, see ENCRYP_MODE_XXX */
encrypt_mode :1,
/* communication encryption key sequence */
cek_seq :2,
/* encryption_algorithm, see ENCRYPT_ALGO_XXX */
encrypt_algo :1,
/* to solve compatibility problems */
used_rsvd1 :18,
/* reserved for future */
rsvd :1;
/* to solve compatibility problems */
uint32_t used_rsvd2;
} mac_bc_fp_t;
/* sta capability entry */
typedef struct _mac_bc_sta_cap {
/* tei */
tei_t tei;
/* proxy tei */
tei_t proxy;
/* mac address */
uint8_t addr[IOT_MAC_ADDR_LEN];
/* minimum traffic success ratio with CCO */
uint8_t min_ul_dl_sr;
/* role */
uint8_t role;
/* level info */
uint8_t level : 6,
/* to solve compatibility problems */
used_rsvd : 2;
/* snr of proxy */
int8_t snr;
/* phase info */
uint8_t phase : 3,
/* rf hop */
rf_hop : 4,
/* flag to mark if min_ul_dl_sr is invalid */
min_sr_invalid : 1;
} mac_bc_sta_cap_t;
/* simple param entry */
typedef struct _mac_bc_simple_param {
/* tei */
uint32_t tei : 12,
/* proxy tei */
pco_tei : 12,
/* role, see PLC_DEV_ROLE_XXX */
role : 4,
/* level */
level : 4;
/* rf hop to cco */
uint8_t rf_hop : 4,
/* encryption mode, see ENCRYPTION_MODE_XXX */
encrypt_mode : 1,
/* encryption_algorithm, see ENCRYPTION_ALGORITHM_XXX */
encrypt_algo : 1,
/* to solve compatibility problems */
used_rsvd : 2;
/* mac addr */
uint8_t addr[IOT_MAC_ADDR_LEN];
/* csma slot start ntb */
uint32_t csma_start_ntb;
/* csma slot duration, unit 1ms */
uint16_t csma_dur;
} mac_bc_simple_param_t;
/* route parameter entry */
typedef struct _mac_bc_rt_param {
/* route period, unit is 1s */
uint16_t rt_period;
/* time to next route period. see CVG_RT_RP_MARK_0_DUR for more info */
uint16_t rt_left_period;
/* proxy discovery period, unit is 1s */
uint16_t p_dis_period;
/* sta discovery period, unit is 1s */
uint16_t s_dis_period;
} mac_bc_rt_param_t;
typedef struct _mac_bc_fp_spg {
uint8_t type : 2,
assoc_done : 1,
allow_assoc : 1,
multi_select : 1, /* diff */
simple_beacon : 1,
rf_option : 2;
uint8_t rf_channel;
uint8_t network_sn;
uint8_t short_network_id: 4,
allow_chan_eval : 1,
/* to solve compatibility problems */
used_rsvd1 : 2,
/* reserved for future */
rsvd : 1;
uint8_t cco_addr[IOT_MAC_ADDR_LEN];
/* to solve compatibility problems */
uint16_t used_rsvd2;
} mac_bc_fp_spg_t;
typedef struct _mac_bc_sta_cap_spg {
/* tei */
tei_t tei;
/* proxy tei */
tei_t proxy;
/* mac address */
uint8_t addr[IOT_MAC_ADDR_LEN];
/* minimum traffic success ratio with CCO */
uint8_t min_ul_dl_sr;
/* role */
uint8_t role;
/* level info */
uint8_t level;
/* phase info */
uint8_t phase : 3,
/* rf hop */
rf_hop : 4,
/* flag to mark if min_ul_dl_sr is invalid */
min_sr_invalid : 1;
/* if set, use beacon for channel evaluated */
uint8_t allow_chan_eval;
/* to solve compatibility problems */
uint32_t used_rsvd;
} mac_bc_sta_cap_spg_t;
/* simple param entry */
typedef struct _mac_bc_simple_param_spg {
/* tei */
uint32_t tei : 12,
/* proxy tei */
pco_tei : 12,
/* role, see PLC_DEV_ROLE_XXX */
role : 4,
/* level */
level : 4;
/* rf hop to cco */
uint8_t rf_hop : 4,
/* hplc frequency band id */
freq_band : 2,
/* to solve compatibility problems */
used_rsvd : 2;
/* mac addr */
uint8_t addr[IOT_MAC_ADDR_LEN];
/* csma slot start ntb */
uint32_t csma_start_ntb;
/* csma slot duration, unit 1ms */
uint16_t csma_dur;
} mac_bc_simple_param_spg_t;
typedef struct _mac_bc_rt_param_spg {
/* route period, unit is 1s */
uint16_t rt_period;
/* time to next route period, unit is 1s */
uint16_t rt_left_period;
/* to solve compatibility problems */
uint16_t used_rsvd1;
/* CCO MAC address */
uint8_t cco_addr[IOT_MAC_ADDR_LEN];
/* to solve compatibility problems */
uint8_t used_rsvd2[20];
} mac_bc_rt_param_spg_t;
/* frequency change entry */
typedef struct _mac_bc_freq_chg {
/* target frequency */
uint8_t targer_freq;
/* time left */
uint32_t time_left;
} mac_bc_freq_chg_t;
/* rf channel change entry */
typedef struct _mac_bc_rf_channel_chg {
/* target rf channel */
uint8_t target_rf_channel;
/* target rf option */
uint8_t target_rf_option :2,
/* solve compatibility problems */
used_rsvd :6;
/* time left, unit is 1ms */
uint32_t time_left;
} mac_bc_rf_channel_chg_t;
/* rf route param entry */
typedef struct _mac_bc_rf_route {
/* rf discover list period, unit is 1s */
uint8_t rf_dis_period;
/* rf traffic success ratio expired period, unit is 1 rf_dis_period */
uint8_t rf_age_period;
} mac_bc_rf_route_t;
/* meter reading control entry */
typedef struct _mac_bc_meter {
/* data len */
uint8_t len;
/* data */
uint8_t data[MAC_MAX_BC_METER_DATA_SIZE];
} mac_bc_meter_t;
/* freq band detection entry */
typedef struct _mac_bc_fb_detect {
/* target frequency band id of detection */
uint8_t band_id;
/* dedicated csma slot supported link id */
uint8_t d_csma_lid;
} mac_bc_fb_detect_t;
/* rtc entry */
typedef struct _mac_bc_rtc {
/* stand for the delta between cco rtc and the base timer 2000.1.1 00:00:00,
* unit is 1s
*/
uint32_t cco_date;
/* cco ntb of corresponding date, unit is 1NTB */
uint32_t cco_ntb;
} mac_bc_rtc_t;
/* beacon tx assignment node info */
typedef struct _mac_bc_tx_as_node {
/* designated TEI to send beacon */
uint16_t tei : 12,
/* 0x0 - discovery, 0x1 - proxy */
type : 1,
/* tx type flag, see BEACON_TX_XXX */
tx_flag : 3;
} mac_bc_tx_as_node_t;
#if PLC_SUPPORT_CCO_ROLE
#if RUN_IN_PSRAM
/* beacon tx assignment info */
#define MAC_MAX_BC_TX_PER_BP (210)
#else /* RUN_IN_PSRAM */
#define MAC_MAX_BC_TX_PER_BP (100)
#endif /* RUN_IN_PSRAM */
#else /* PLC_SUPPORT_CCO_ROLE */
/* beacon tx assignment info */
#define MAC_MAX_BC_TX_PER_BP (210)
#endif /* PLC_SUPPORT_CCO_ROLE */
typedef struct _mac_bc_tx_as {
/* proxy and discover beacon count */
uint8_t bc_cnt;
/* flag to mark if the per tei info available. according to smart grid
* spec, only central and discovery beacon tain per tei info. discovery
* beacon don't have such info.
*/
uint8_t tei_valid;
#if PLC_SUPPORT_CCO_ROLE
/* phase of the tei, defination is same as PLC_PHASE_XXX macro */
uint8_t phase[MAC_MAX_BC_TX_PER_BP];
#endif
/* assignment node info */
mac_bc_tx_as_node_t sta[MAC_MAX_BC_TX_PER_BP];
} mac_bc_tx_as_t;
/* csma slot info */
typedef struct _mac_bc_csma_si {
/* csma slot supported phase count */
uint8_t phase_cnt;
/* csma phase */
uint8_t phase[PLC_PHASE_CNT];
/* to solve compatibility problems */
uint8_t used_rsvd[PLC_PHASE_CNT];
/* cmsa slot duration, unit is 1ms*/
uint32_t slot_dur[PLC_PHASE_CNT];
} mac_bc_cmsa_si_t;
/* time slot assignment entry */
typedef struct _mac_bc_time_slot {
/* central beacon count */
uint8_t cco_bc_cnt;
/* proxy beacon count */
uint8_t proxy_bc_cnt;
/* beacon slot duration, unit is 1ms */
uint8_t bc_slot_dur;
/* original csma slot fragment size for beacon send,
* unit is 10ms for cco
* unit is 1ms or 10ms for sta
*/
uint8_t org_csma_slot_frag_s;
/* csma slot fragment size, unit is 1ms */
uint16_t csma_slot_frag_s;
/* dedicated csma slot supported phase count */
uint8_t d_csma_lid;
/* tdma slot duration, unit is 1ms */
uint8_t tdma_slot_dur;
/* tdma slot supported link id */
uint8_t tdma_lid;
/* protected region length of future beacon period, unit is 1ms */
uint16_t protected_region_dur;
/* beacon period */
uint32_t bc_period : 16,
/* rf standard beacon slot duration, unit is 1ms */
rf_bc_slot_dur : 10,
/* flag to mark if current time slot is allowed to be reused for following
* beacon periods. this flag is only valid for sta role device case.
*/
allow_reuse : 1,
/* flag to mark if send rf standard beacon if local device is cco role */
rf_std_tx : 1,
/* reserved for future */
rsvd1 : 4;
/* beacon period start NTB */
uint32_t bp_start_ntb;
union {
struct {
/* solve compatibility problems for sg time slot entry */
uint32_t sg_used_rsvd1 : 10,
sg_used_rsvd2 : 6,
/* reserved for future */
rsvd2 : 16;
};
struct {
/* solve compatibility problems for spg time slot entry */
uint32_t spg_used_rsvd : 22,
/* reserved for future */
rsvd3 : 10;
};
};
/* proxy and discover beacons info */
mac_bc_tx_as_t non_cco_bc_info;
/* csma time slot info */
mac_bc_cmsa_si_t csma_info;
/* dedicated csma time slot info */
mac_bc_cmsa_si_t d_csma_info;
} mac_bc_time_slot_t;
/* vendor specific entry */
typedef struct _mac_bc_vendor_spec {
/* allowed to cco traffic success ratio. if sta to cco's traffic success
* ratio is equal or higher than this value, than sta is allowed to join
* the network.
*/
uint8_t allowed_cco_tf_sr;
/* hplc tx power cap. unit is 1 dbuv */
uint8_t power;
/* rf tx power cap, unit is 1 dbm */
int8_t rf_power;
/* network for debug purpose */
uint8_t cco_debug :1,
/* flag to mark if debug target mac address is valid */
addr_valid :1,
/* suggested proxy selection duration, each sta should spend at least
* the duration for proxy slection. note that this value should not be
* changed in the whole network life time. the unit is 1 route period.
*/
proxy_select_dur :3,
/* flag to mark if the threshold data info available */
th_data_valid :1,
/* flag to mark if fixed rate required for this network */
fixed_rate :1,
/* flag to mark if the application data is valid */
app_data_valid :1;
/* flag to mark if the tsfm is valid */
uint8_t tsfm_valid :1,
/* flag to mark if tsfm cco direct network detection enable */
tsfm_cco_detect_en :1,
/* flag to mark if PCO should report SNR with it's direct sub STA
* periodically.
*/
pco_snr_rpt :1,
/* flag to mark if simple pair passcode is valid */
passcode_valid :1,
/* algorithm to be used for transformer detection */
tsfm_algorithm :4;
/* lowest valid snr threshold for tsfm, unit is 1 db */
int8_t tsfm_low_snr_th;
/* percentage of highest snr statistics collected to be used for tsfm */
uint8_t tsfm_snr_stat_high_th;
/* vendor id of cco */
uint16_t vendor_id;
/* app data if any */
uint8_t app_data[MAC_BC_APP_DATA_MAX];
/* debug target mac address if any */
uint8_t addr[IOT_MAC_ADDR_LEN];
/* define the rank from which the cco/pco role candidate start to take
* higher priority, this value must be equal or smaller than
* CANDIDATE_PROXY_COUNT.
*/
uint8_t sta_proxy_weight_rank :4,
/* for (level - base_level) <= level_score_high_th, level_score_l
* will take effect. Otherwise, level_score_h will take effect. The
* purpose is to try to minimize the topo tree depth while giving enough
* flexibility for candidate pco selection.
*/
level_score_h_th :4;
/* define sta proxy traffic success ratio threshold */
uint8_t sta_proxy_good_tf_sr_th;
/* define proxy roaming gap. if the new proxy is better enough than current
* proxy, then roaming to the new proxy.
* new_proxy_score > (cur_proxy_score + roaming_gap)
* the smaller the gap, the easier to roaming to a better proxy.
* if traffic success ratio with proxy lower than sta_proxy_good_tf_sr_th,
* local device will start to use sta_roaming_gap_l while selecting
* candidate pco. otherwise, sta_roaming_gap_h will be used.
*/
uint8_t sta_roaming_gap_h;
uint8_t sta_roaming_gap_l;
/* define cco phase traffic success ratio threshold */
uint8_t cco_phase_check_tf_sr_th;
/* define level 1 device switch phase gap. if the new phase is better enough
* than current phase, then switch to the new phase.
* new_phase_score > (cur_phase_score + phase_gap)
* the smaller the gap, the easier to switch the phase.
* if traffic success ratio with cco higher than cco_phase_check_tf_sr_th,
* local device will start to use cco_phase_gap_other while selecting
* logical phase. if traffic success ratio with cco lower than
* sta_proxy_good_tf_sr_th, use cco_phase_gap_own_l, otherwise
* cco_phase_gap_own_h will be used.
*/
uint8_t cco_phase_gap_own_h;
uint8_t cco_phase_gap_own_l;
uint8_t cco_phase_gap_other;
/* define 1 level corresponding to how many score while calculating path
* score.
*/
uint8_t level_score_h;
uint8_t level_score_l;
/* see CVG_RT_STA_CCO_GOOD_XXX */
uint8_t cco_good_tf_sr_th;
uint8_t cco_good_tx_sr_th;
uint8_t cco_good_rx_sr_th;
/* see CVG_RT_STA_PCO_GOOD_XXX */
uint8_t pco_good_tf_sr_th;
uint8_t pco_good_tx_sr_th;
uint8_t pco_good_rx_sr_th;
/* see CVG_RT_STA_CLAMBER_TF_SR_TH */
uint8_t clamber_tf_sr_th;
/* see CVG_RT_STA_CLAMBER_TARGET_TF_SR_TH */
uint8_t clamber_target_tf_sr_th;
/* see CVG_RT_STA_PROXY_TF_SR_RANK */
uint8_t proxy_tf_sr_rank;
/* see CVG_RT_STA_ROAM_LEARNING_CNT */
uint8_t roam_learn_cnt;
/* interval that sta should report calculated tsfm detection data to
* cco. unit is 1s.
*/
uint16_t rpt_tsfm_dur;
/* interval that sta should do tsfm detection check to unit is 1s. */
uint16_t check_tsfm_dur;
/* snr difference threshold if two networks level is same, unit is 1 db */
uint8_t tsfm_snr_diff_th1;
/* snr difference threshold if two networks level is same, unit is 1 db */
uint8_t tsfm_snr_diff_th2;
/* level difference threshold if two networks level has big difference */
uint8_t tsfm_level_big_diff_th;
/* cco lowest valid snr threshold for tsfm, unit is 1 db */
int8_t tsfm_cco_low_snr_th;
/* penalty value if no cco snr was received in this statistical period,
* unit is 1 db.
*/
uint8_t tsfm_cco_snr_penal;
/* cco difference threshold if two networks level is same, unit is 1 db
*/
uint8_t tsfm_cco_diff_th1;
/* cco difference threshold if two networks level is same, unit is 1 times
*/
uint8_t tsfm_cco_diff_th2;
/* zc ntb delta threshold for tsfm, unit is 100 ntb */
uint8_t tsfm_zc_diff_th1;
/* zc ntb delta variance threshold for tsfm, unit is 1 times */
uint8_t tsfm_zc_diff_th2;
/* zc period delta variance threshold for tsfm, unit is 1 times */
uint8_t tsfm_zc_diff_th3;
/* zc ntb delta threshold for tsfm, unit is 1 times or 100 ntb */
uint8_t tsfm_zc_diff_th4;
/* weight factor of received beacon snr for tsfm */
uint8_t tsfm_snr_bc_factor;
/* weight factor of received sof snr for tsfm */
uint8_t tsfm_snr_sof_factor;
/* dual mode device tx config, 0 - invalid, 1 - async tx, 2 - sync tx */
uint8_t dm_tx_cfg :2,
/* flag to mark if rf tx power is valid */
rf_power_valid :1,
/* flag to mark if force link communication */
force_link_valid :1,
/* force link type, 0 - force hplc, 1 - force rf */
force_rf_link :1,
/* reserved for future */
rsvd :3;
/* simple pair passcode */
uint16_t passcode;
} mac_bc_vendor_spec_t;
/* htbus fixed information descriptor */
typedef struct _mac_bc_htbus_fp {
/* htbus becacon type, see PLC_HTBUS_BC_TYPE_XXX */
uint8_t type;
/* reboot counter */
uint8_t reboot_cnt;
/* reques period counter */
uint16_t req_period_cnt;
} mac_bc_htbus_fp_t;
/* habus time slot alloc entry */
typedef struct _mac_bc_htbus_time_slot {
/* cco slot duration, uint is 1ms */
uint8_t cco_slot;
/* sta slot duration, uint is 1ms */
uint8_t sta_slot;
/* beacon period start NTB */
uint32_t start_ntb;
/* node tei bitmap with response slot assigned.
*/
uint8_t rsp_bm[iot_ceil(PLC_TEI_MAX_NUM, 8)];
} mac_bc_htbus_time_slot_t;
/* htbus user data entry */
typedef struct _mac_bc_htbus_user_data {
/* user data length */
uint16_t len;
/* pointer user data */
uint8_t *data_ptr;
} mac_bc_htbus_user_data_t;
/*
* @brief update beacon payload to be broadcast by mac
* @param vdev_id: mac vdev id of the device to be updated
* @param ent: beacon entries to be updated
* @param tx_cnt: return beacon tx count of this update
*
* @return:
* 0 -- for success case
* othersie -- error code
*/
uint32_t mac_update_beacon(uint8_t pdev_id, uint8_t vdev_id,
mac_bc_update_t *ent, uint8_t *tx_cnt);
/*
* function callback to receive beacons from mac
* @arg: arg parameter registered alone with the callback
* @beacon: iot_pkt containing beacon raw data
* @new_bp: indicate if this beacon is the first beacon of a new beacon
* period
*/
typedef void (*mac_bc_rx_func_t)(void *arg, iot_pkt_t *beacon, uint8_t new_bp);
#if (PLC_SUPPORT_CCO_ROLE)
/*
* mac_start_beacon() - start sending beacon
* @pdev_id: mac pdev id of the device to start sending beacon
* @vdev_id: mac vdev id of the device to start sending beacon
*
* return:
* 0 -- for success case
* othersie -- error code
*/
uint32_t mac_start_beacon(uint8_t pdev_id, uint8_t vdev_id);
/*
* mac_stop_beacon() - stop sending beacon
* @pdev_id: mac pdev id of the device to stop sending beacon
* @vdev_id: mac vdev id of the device to stop sending beacon
*
* return:
* 0 -- for success case
* othersie -- error code
*/
uint32_t mac_stop_beacon(uint8_t pdev_id, uint8_t vdev_id);
#else /* PLC_SUPPORT_CCO_ROLE */
#define mac_start_beacon(pdev_id, vdev_id) IOT_ASSERT(0)
#define mac_stop_beacon(pdev_id, vdev_id) IOT_ASSERT(0)
#endif /* PLC_SUPPORT_CCO_ROLE */
#ifdef __cplusplus
}
#endif
#endif /* MAC_BCM_API_H */