Files
youled63d_bluetooth/component/ble/ip/bt/api/em_map_bt.h
T
moyuhai 966451d245 V1.0
2026-06-11 13:04:09 +08:00

287 lines
9.9 KiB
C

/**
****************************************************************************************
*
* @file em_map_bt.h
*
* @brief Mapping of the different descriptors in the exchange memory
*
* Copyright (C) RivieraWaves 2009-2015
*
*
****************************************************************************************
*/
#ifndef EM_MAP_BT_H_
#define EM_MAP_BT_H_
/**
****************************************************************************************
* @addtogroup EM Exchange Memory
* @ingroup CONTROLLER
* @brief Mapping of the different descriptors in the exchange memory
*
* @{
****************************************************************************************
*/
/*
* INCLUDE FILES
****************************************************************************************
*/
#include "rwip_config.h"
#include <stdint.h> // integer
#include "_reg_em_bt_cs.h"
#include "_reg_em_bt_rxdesc.h"
#include "_reg_em_bt_txdesc.h"
/// Null pointer in EM offset space
#define EM_PTR_NULL (0x0000)
/*
* CONTROL STRUCTURES
****************************************************************************************
*/
/**
* Control Structures area definition
*
* - ACL (N)
* - INQ
* - ISCAN
* - Active slave broadcast
* - Sync train
* - Sync scan
* - Connectionless slave broadcast TX
* - Connectionless slave broadcast RX
*/
#define EM_BT_CS_OFFSET (CO_ALIGN4_HI(EM_BT_OFFSET))
#define EM_BT_CS_NB (MAX_NB_ACTIVE_ACL+5+2*CSB_SUPPORT)
#define EM_BT_CS_END (EM_BT_CS_OFFSET + EM_BT_CS_NB * REG_EM_BT_CS_SIZE)
/**
* Control Structures indexes definition
*/
#define EM_BT_CS_ACL_INDEX(acl) (acl)
#define EM_BT_CS_IDX_TO_LID(idx) (idx)
#define EM_BT_CS_INQ_INDEX (MAX_NB_ACTIVE_ACL)
#define EM_BT_CS_ISCAN_INDEX (EM_BT_CS_INQ_INDEX + 1)
#define EM_BT_CS_ACT_BCST_INDEX (EM_BT_CS_ISCAN_INDEX + 1)
#define EM_BT_CS_STRAIN_INDEX (EM_BT_CS_ACT_BCST_INDEX + 1)
#define EM_BT_CS_SSCAN_INDEX (EM_BT_CS_STRAIN_INDEX + 1)
#define EM_BT_CS_CSB_TX_INDEX (EM_BT_CS_SSCAN_INDEX + 1)
#define EM_BT_CS_CSB_RX_INDEX (EM_BT_CS_CSB_TX_INDEX + 1)
#define EM_BT_CS_INDEX_MAX (EM_BT_CS_CSB_RX_INDEX + 1)
/**
* Frame Format
* Bluetooth state and device activity used for frequency selection and TDD frame format. See section 3.5 for further details
* Note this field is automatically updated by the RW-BT Core when changing from Page to Master Page Response mode.
* - 0000x: Do not use. -
* - 00010: Master connect. Master device
* - 00011: Slave connect. Slave device
* - 00100: Page. Initiator device
* - 00101: Page scan. Responder device
* - 00110: Master page response. -
* - 00111: Slave page response. -
* - 01000: Inquiry. Initiator device
* - 01001: Inquiry response Responder device
* - 01010: Do not use. -
* - 01011: Do not use. -
* - 011xx: Do not use. -
* - 10xxx: Do not use. -
* - 11000: Master Broadcast Master device
* - 11001: Broadcast Scan Slave device
* - 11010: Master Access window. Master device
* - 11011: Slave Access window 1. Slave device
* - 11100: Slave Access window 2. Slave device
* - 11101: Do not use. -
* - 1111x: Do not use -
*/
#define EM_BT_CS_FMT_MST_CONNECT 0x02
#define EM_BT_CS_FMT_SLV_CONNECT 0x03
#define EM_BT_CS_FMT_PAGE 0x04
#define EM_BT_CS_FMT_PAGE_SCAN 0x05
#define EM_BT_CS_FMT_MST_PAGE_RSP 0x06
#define EM_BT_CS_FMT_SLV_PAGE_RSP 0x07
#define EM_BT_CS_FMT_INQUIRY 0x08
#define EM_BT_CS_FMT_INQ_RSP 0x09
#define EM_BT_CS_FMT_MST_BCST 0x18
#define EM_BT_CS_FMT_BCST_SCAN 0x19
#define EM_BT_CS_FMT_MST_ACC_WIN 0x1A
#define EM_BT_CS_FMT_SLV_ACC_WIN1 0x1B
#define EM_BT_CS_FMT_SLV_ACC_WIN2 0x1C
/// Maximum value of RXWINSZ field (8191)
#define EM_BT_CS_RXWINSZ_MAX ((1 << 13)-1)
/// Maximum value of MAXFRMTIME field (8191)
#define EM_BT_CS_MAXFRMTIME_MAX ((1 << 13)-1)
/*
* RX DESCRIPTORS
****************************************************************************************
*/
/**
* RX Descriptors area definition
*/
#define EM_BT_RXDESC_OFFSET (CO_ALIGN4_HI(EM_BT_CS_END))
#define EM_BT_RXDESC_NB (BT_RXDESC_NB)
#define EM_BT_RXDESC_END (EM_BT_RXDESC_OFFSET + EM_BT_RXDESC_NB * REG_EM_BT_RXDESC_SIZE)
/*
* TX DESCRIPTORS
****************************************************************************************
*/
/**
* TX Descriptors area definition
*
* - ACL (2xN)
* - Active slave broadcast
* - FHS
* - EIR
* - Sync train packet
* - Connectionless slave broadcast
*/
#define EM_BT_TXDESC_OFFSET (CO_ALIGN4_HI(EM_BT_RXDESC_END))
#define EM_BT_TXDESC_NB (2*MAX_NB_ACTIVE_ACL + 4 + CSB_SUPPORT)
#define EM_BT_TXDESC_END (EM_BT_TXDESC_OFFSET + EM_BT_TXDESC_NB * REG_EM_BT_TXDESC_SIZE)
#define EM_BT_TXDESC_ACL_INDEX(acl, tog) (2*acl + tog)
#define EM_BT_TXDESC_ACT_BCST_INDEX (2*MAX_NB_ACTIVE_ACL)
#define EM_BT_TXDESC_ISCANFHS_INDEX (EM_BT_TXDESC_ACT_BCST_INDEX + 1)
#define EM_BT_TXDESC_EIR_INDEX (EM_BT_TXDESC_ISCANFHS_INDEX + 1)
#define EM_BT_TXDESC_STP_INDEX (EM_BT_TXDESC_EIR_INDEX + 1)
#define EM_BT_TXDESC_CSB_INDEX (EM_BT_TXDESC_STP_INDEX + 1)
/*
* LMP RX BUFFERS
****************************************************************************************
*/
/// LMP RX buffers area definition
#define EM_BT_LMPRXBUF_OFFSET (CO_ALIGN4_HI(EM_BT_TXDESC_END))
#define EM_BT_LMPRXBUF_NB (EM_BT_RXDESC_NB)
#define EM_BT_LMPRXBUF_SIZE (20)
#define EM_BT_LMPRXBUF_END (EM_BT_LMPRXBUF_OFFSET + EM_BT_LMPRXBUF_NB * EM_BT_LMPRXBUF_SIZE)
/*
* LMP TX BUFFERS
****************************************************************************************
*/
/// LMP TX buffers area definition
#define EM_BT_LMPTXBUF_OFFSET (CO_ALIGN4_HI(EM_BT_LMPRXBUF_END))
#define EM_BT_LMPTXBUF_NB (BT_LMP_BUF_NB_TX)
#define EM_BT_LMPTXBUF_SIZE (24)
#define EM_BT_LMPTXBUF_END (EM_BT_LMPTXBUF_OFFSET + EM_BT_LMPTXBUF_NB * EM_BT_LMPTXBUF_SIZE)
/*
* ISCAN FHS TX BUFFER
****************************************************************************************
*/
/// ISCAN FHS TX buffer area definition
#define EM_BT_ISCANFHSTXBUF_OFFSET (CO_ALIGN4_HI(EM_BT_LMPTXBUF_END))
#define EM_BT_ISCANFHSTXBUF_SIZE (20)
#define EM_BT_ISCANFHSTXBUF_END (EM_BT_ISCANFHSTXBUF_OFFSET + EM_BT_ISCANFHSTXBUF_SIZE)
/*
* PAGE FHS TX BUFFER
****************************************************************************************
*/
/// PAGE FHS TX buffer area definition
#define EM_BT_PAGEFHSTXBUF_OFFSET (CO_ALIGN4_HI(EM_BT_ISCANFHSTXBUF_END))
#define EM_BT_PAGEFHSTXBUF_SIZE (20)
#define EM_BT_PAGEFHSTXBUF_END (EM_BT_PAGEFHSTXBUF_OFFSET + EM_BT_PAGEFHSTXBUF_SIZE)
/*
* EIR TX BUFFER
****************************************************************************************
*/
/// EIR TX buffer area definition
#define EM_BT_EIRTXBUF_OFFSET (CO_ALIGN4_HI(EM_BT_PAGEFHSTXBUF_END))
#define EM_BT_EIRTXBUF_SIZE (240)
#define EM_BT_EIRTXBUF_END (EM_BT_EIRTXBUF_OFFSET + EM_BT_EIRTXBUF_SIZE)
/*
* SAM SUBMAP BUFFER
****************************************************************************************
*/
/// SAM SUBMAP (Local) buffer area definition
#define EM_BT_LOCAL_SAM_SUBMAP_OFFSET (CO_ALIGN4_HI(EM_BT_EIRTXBUF_END))
#define EM_BT_LOCAL_SAM_SUBMAP_SIZE (SAM_TYPE0_SUBMAP_LEN)
#define EM_BT_LOCAL_SAM_SUBMAP_END (EM_BT_LOCAL_SAM_SUBMAP_OFFSET + EM_BT_LOCAL_SAM_SUBMAP_SIZE)
/// SAM MAP (Peer) buffer area definition
#define EM_BT_PEER_SAM_MAP_OFFSET (CO_ALIGN4_HI(EM_BT_LOCAL_SAM_SUBMAP_END))
#define EM_BT_PEER_SAM_MAP_OFF(acl) (EM_BT_PEER_SAM_MAP_OFFSET + (acl * RW_PEER_SAM_MAP_MAX_LEN))
#define EM_BT_PEER_SAM_MAP_SIZE (MAX_NB_ACTIVE_ACL * RW_PEER_SAM_MAP_MAX_LEN) // HW restriction
#define EM_BT_PEER_SAM_MAP_END (EM_BT_PEER_SAM_MAP_OFFSET + EM_BT_PEER_SAM_MAP_SIZE)
/*
* STP TX BUFFER
****************************************************************************************
*/
/// Sync Train Packet TX buffer area definition
#define EM_BT_STPTXBUF_OFFSET (CO_ALIGN4_HI(EM_BT_PEER_SAM_MAP_END))
#define EM_BT_STPTXBUF_SIZE (28)
#define EM_BT_STPTXBUF_END (EM_BT_STPTXBUF_OFFSET + EM_BT_STPTXBUF_SIZE)
/*
* ACL RX BUFFERS
****************************************************************************************
*/
/// ACL RX buffers area definition
#define EM_BT_ACLRXBUF_OFFSET (CO_ALIGN4_HI(EM_BT_STPTXBUF_END))
#define EM_BT_ACLRXBUF_NB (ACL_DATA_BUF_NB_RX)
#define EM_BT_ACLRXBUF_SIZE (1028)
#define EM_BT_ACLRXBUF_END (EM_BT_ACLRXBUF_OFFSET + EM_BT_ACLRXBUF_NB * EM_BT_ACLRXBUF_SIZE)
/*
* ACL TX BUFFERS
****************************************************************************************
*/
/// ACL TX buffers area definition
#define EM_BT_ACLTXBUF_OFFSET (CO_ALIGN4_HI(EM_BT_ACLRXBUF_END))
#define EM_BT_ACLTXBUF_NB (ACL_DATA_BUF_NB_TX)
#define EM_BT_ACLTXBUF_SIZE (1028)
#define EM_BT_ACLTXBUF_END (EM_BT_ACLTXBUF_OFFSET + EM_BT_ACLTXBUF_NB * EM_BT_ACLTXBUF_SIZE)
/*
* AUDIO RX BUFFERS
****************************************************************************************
*/
/// AUDIO buffers area definition
#define EM_BT_AUDIOBUF_OFFSET (CO_ALIGN4_HI(EM_BT_ACLTXBUF_END))
#define EM_BT_AUDIOBUF_NB (MAX_NB_SYNC)
#define EM_BT_AUDIOBUF_SIZE (2*1080) // (4*1080) !!! Maximum configuration (2 x eSCO-3EV5) not possible on Bubble
#define EM_BT_AUDIOBUF_END (EM_BT_AUDIOBUF_OFFSET + EM_BT_AUDIOBUF_NB * EM_BT_AUDIOBUF_SIZE)
#define EM_BT_AUDIOBUF_OFF(sco) (EM_BT_AUDIOBUF_OFFSET + (sco * EM_BT_AUDIOBUF_SIZE))
/*
* END
****************************************************************************************
*/
#define EM_BT_END (EM_BT_AUDIOBUF_END)
/// @} EM
#endif // EM_MAP_BT_H_