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

157 lines
5.7 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_DATA_API_H
#define MAC_DATA_API_H
#include "os_types.h"
#include "iot_pkt_api.h"
#include "plc_utils.h"
#ifdef __cplusplus
extern "C" {
#endif
/* define mac ppm adjust type */
#define MAC_PPM_STEP_TYPE_TXRX 0
#define MAC_PPM_STEP_TYPE_TX 1
typedef struct _mac_tx_info {
/* priority of the packet */
lid_t link_id;
/* flag to mark if this packet is broacast */
uint8_t bcast :1,
/* flag to mark if this packet is power collapse related */
pw_collapse :1,
/* flag to mark if this packet should be send on 3 phases simultaneously */
tx_3_phase :1,
/* flag to mark if this packet is debug pkt */
is_dbg_pkt :1,
/* flag to mark if this packet is sent to our own device */
same_vendor :1,
/* flag to mark if tx_band is valid */
tx_band_valid :1,
/* logical phase to send the packet */
phase :2;
/* band id to send the packet */
uint8_t tx_band;
/* flag to mark if this packet is sent to rf link */
uint8_t is_rf_data :1,
/* retry count for this tx frame. this value will take affect only when
* max_send_count = 0 in mac header. if this value set to 0, it means
* mac layer could use default try count.
*/
retry_cnt :4,
/* scan ppm step type, see MAC_PPM_STEP_TYPE_XXX */
ppm_step_type :2,
/* flag to mark if retry_cnt take priority even if max_send_count != 0
* in mac header.
*/
retry_prior :1;
/* next hop's TEI */
uint16_t receiver :12,
/* is encrypt or not */
is_encrypt :1,
/* the index of key to encrypt */
key_idx :1,
resv1 :2;
/* scan ppm step, only for is_dbg_pkt = 1 message */
int8_t ppm_step;
} mac_tx_info;
/*
* send data to mac layer
* Notice:
* cvg layer fills mac header.
* mac layer need to update the msdu_sn field.
*
* @vdev_id: the vdev on which data will be sent.
* @msdu_buf: the buffer containing the msdu data to be sent.
* msdu data is containted in data block of the iot_pkt.
* head block is reserved for prepending mac header.
* @link_id: link_id on which data to be sent.
*
* return:
* true for successful case.
* false for failed case.
*/
uint32_t mac_send_msdu_ex(pdevid_t pdev_id, vdevid_t vdev_id,
iot_pkt_t* msdu_buf, mac_tx_info *tx_info);
/* this is the rx desc placed at
* the start of the iot buf, no need
* to be freed seperately
*/
typedef struct _mac_rx_info {
/* NTB delta between local device network and remote device network.
* if local device and remote device are in the same network, the delta
* should be very very small.
* remote NTB - local NTB
*/
int32_t delta_ntb;
/* resv the 32 bit field for phy info */
struct {
int8_t snr; /* SNR of this mpdu */
uint8_t resv1 : 4, /* receive band id */
phase : 2, /* receive phase */
is_rf : 1, /* 1: rf packet, 0: plc packet */
resv0 : 1;
/* hplc : receive rssi -87 - 33 dbm if not sw agc
* or else INV_RSSI_RF if sw agc
* rf: rssi -127 - 127 dbm invald rssi:INV_RSSI_RF
*/
int8_t rssi;
/* rf channel id, only for rf device */
uint8_t channel_id;
/* rf option id, only for rf device */
uint8_t rf_option;
/* hplc band id, only for hplc device, see BEACON_FREQ_BAND_ID_XXX */
uint8_t band_id;
/* for address 4byte alignment */
uint8_t resv2;
uint8_t resv3;
} phy;
uint8_t fc[16]; // place holder for tmp, to be removed
} mac_rx_info_t;
/*
* callback method prototype to receive data from mac layer
*
* @arg: arg parameter registered alone with the callback
* @msdu_buf: the buffer containing the msdu data received.
* msdu data is containted in data block of the iot_pkt.
* in front of the data is the mac_rx_info_t meta info.
*/
typedef void (*mac_recv_msdu_func_t)(void *arg, iot_pkt_t *msdu_buf);
/*
* @brief callback method prototype to receive payload error and
* no payload frames snr info sent by CCO from mac layer
*
* @param arg: arg parameter registered alone with the callback
* @param cco_info: iot pkt to contain cco info. the ownership will be
* transferred to callback function. see mac_cco_snr_rpt_t
* for more details.
*/
typedef void (*mac_recv_snr_from_cco_func_t)(void *arg,
iot_pkt_t *cco_info);
#ifdef __cplusplus
}
#endif
#endif /* MAC_DATA_API_H */