Introduce API and firmware files for the sysmoBTS v1 and v2.

This commit is contained in:
Holger Hans Peter Freyther 2012-04-28 19:45:20 +02:00
commit aeedfeb703
14 changed files with 2531 additions and 0 deletions

4
LICENSE Normal file
View File

@ -0,0 +1,4 @@
The firmware is copyrighted and may only be used by owners of a sysmoBTS.
TODO: Clarify these terms.

6
README Normal file
View File

@ -0,0 +1,6 @@
This is to be used with the sysmoBTS of sysmocom s.f.m.c. GmbH
This firmware contains:
- header files to communicate with the Layer1 implementation
- firmware for DSP/FPGA for HW v1 and v2

526
api/gsml1const.h Normal file
View File

@ -0,0 +1,526 @@
#ifndef GSML1CONST_H__
#define GSML1CONST_H__
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
/* V1 and V2 firmware supports EFR */
#define L1_HAS_EFR
/* V2 allows to select If2/RTP for the payload */
#ifndef HW_SYSMOBTS_V1
#define L1_HAS_RTP_MODE
#endif
/****************************************************************************
* Public macro *
****************************************************************************/
/****************************************************************************
* Macro : CALL_GSML1
************************************************************************//**
*
* This macro calls a GsmL1 function and jump to the gsml1_error label if the
* returned value is different from GsmL1_Status_Success.
*
* @note A gsml1_error label must be defined in the function.
*
* @ingroup gsml1_api_const
*
***************************************************************************/
#define CALL_GSML1(x) if( ( status = x ) != GsmL1_Status_Success ) goto gsml1_error;
/****************************************************************************
* Public constants *
****************************************************************************/
/****************************************************************************
* Enum: : GsmL1_SubCh_t
************************************************************************//**
*
* GSM Layer 1 sub-channel identifiers.
*
* @ingroup gsml1_api_const
*
***************************************************************************/
typedef enum GsmL1_SubCh_t
{
GsmL1_SubCh_0 = 0, ///< Sub-channel 0
GsmL1_SubCh_1, ///< Sub-channel 1
GsmL1_SubCh_2, ///< Sub-channel 2
GsmL1_SubCh_3, ///< Sub-channel 3
GsmL1_SubCh_4, ///< Sub-channel 4
GsmL1_SubCh_5, ///< Sub-channel 5
GsmL1_SubCh_6, ///< Sub-channel 6
GsmL1_SubCh_7, ///< Sub-channel 7
GsmL1_SubCh_8, ///< Sub-channel 8
GsmL1_SubCh_9, ///< Sub-channel 9
GsmL1_SubCh_10, ///< Sub-channel 10
GsmL1_SubCh_11, ///< Sub-channel 11
GsmL1_SubCh_12, ///< Sub-channel 12
GsmL1_SubCh_13, ///< Sub-channel 13
GsmL1_SubCh_14, ///< Sub-channel 14
GsmL1_SubCh_15, ///< Sub-channel 15
GsmL1_SubCh_NA = 0x1F ///< No sub-channel (not applicable)
} GsmL1_SubCh_t;
/****************************************************************************
* typedef : GsmL1_Sapi_t
************************************************************************//**
*
* Service Access Point Identifier (SAPI).
*
* An SAPI is used to identifie a specific Service Access Point (SAP)
*
* @ingroup gsml1_api_const
*
***************************************************************************/
typedef enum GsmL1_Sapi_t
{
GsmL1_Sapi_Idle = 0, ///< Idle burst pseudo-channel
GsmL1_Sapi_Fcch, ///< Frequency correction burst pseudo-channel
GsmL1_Sapi_Sch, ///< Synchronization channel
GsmL1_Sapi_Sacch, ///< Slow associated control channel
GsmL1_Sapi_Sdcch, ///< Stand-alone dedicated control channel
GsmL1_Sapi_Bcch, ///< Broadcast control channel
GsmL1_Sapi_Pch, ///< Paging channel
GsmL1_Sapi_Agch, ///< Access grant channel
GsmL1_Sapi_Cbch, ///< Cell Broadcast Channel
GsmL1_Sapi_Rach, ///< Random access channel
GsmL1_Sapi_TchF, ///< Full rate speech traffic channel
GsmL1_Sapi_FacchF, ///< Fast associated control channel at full rate
GsmL1_Sapi_TchH, ///< Half rate speech traffic channel
GsmL1_Sapi_FacchH, ///< Fast associated control channel at half rate
GsmL1_Sapi_Nch, ///< Notification Channel
GsmL1_Sapi_Pdtch, ///< Packet data traffic channel
GsmL1_Sapi_Pacch, ///< Packet associated control channel
GsmL1_Sapi_Pbcch, ///< Packet broadcast control channel
GsmL1_Sapi_Pagch, ///< Packet access grant channel
GsmL1_Sapi_Ppch, ///< Packet paging channel
GsmL1_Sapi_Pnch, ///< Packet notification channel
GsmL1_Sapi_Ptcch, ///< Packet timing advance control channel
GsmL1_Sapi_Prach, ///< Packet random access channel
GsmL1_Sapi_NUM ///< Only used to retrieve the last SAPI number
} GsmL1_Sapi_t;
/****************************************************************************
* Enum: GsmL1_Status_t
************************************************************************//**
*
* Status used by layer 1 functions.
*
* @ingroup gsml1_api_const
*
****************************************************************************/
typedef enum GsmL1_Status_t
{
GsmL1_Status_Success = 0, ///< No error
GsmL1_Status_Generic = -1, ///< Generic error
GsmL1_Status_NoMemory = -2, ///< Not enough memory error
GsmL1_Status_Timeout = -3, ///< Timeout error
GsmL1_Status_InvalidParam = -4, ///< Invalid parameter error
GsmL1_Status_Busy = -5, ///< Busy ressource error
GsmL1_Status_NoRessource = -6, ///< No more ressource available error
GsmL1_Status_Uninitialized = -7, ///< Trying to use an unitialized resource
GsmL1_Status_NullInterface = -8, ///< Trying to call a NULL interface
GsmL1_Status_NullFctnPtr = -9, ///< Trying to call a NULL function ptr
GsmL1_Status_BadCrc = -10, ///< Bad CRC error
GsmL1_Status_BadUsf = -11, ///< Bad USF error
GsmL1_Status_InvalidCPS = -12, ///< Invalid CPS field
GsmL1_Status_UnexpectedBurst = -13, ///< Unexpected Burst
GsmL1_Status_UnavailCodec = -14, ///< AMR codec is unavailable
GsmL1_Status_CriticalError = -15, ///< Critical error
GsmL1_Status_OverheatError = -16, ///< Overheat error
GsmL1_Status_DeviceError = -17, ///< Device error
GsmL1_Status_FacchError = -18, /**< Trying to activate a Facch prior activating a Tch logCh or
Trying to deactivate a Tch logCh prior deactivating all active Facch blocks */
GsmL1_Status_AlreadyDeactivated = -19, ///< Trying to deactivate an already deactivated LogCh
GsmL1_Status_TxBurstFifoOvrn = -20, ///< Trying to write into a Full Fifo
GsmL1_Status_TxBurstFifoUndr = -21, ///< Fifo underrun
GsmL1_Status_NotSynchronized = -22, ///< Not synchronized
GsmL1_Status_Unsupported = -23, ///< Unsupported feature
GSML1_STATUS_NUM = 24
} GsmL1_Status_t;
/****************************************************************************
* Enum: GsmL1_LogChComb_t
************************************************************************//**
*
* Permitted logical channel combinations over a physical channel.
*
* @ingroup gsml1_api_const
*
****************************************************************************/
typedef enum GsmL1_LogChComb_t
{
GsmL1_LogChComb_0 = 0, ///< UNUSED (DUMMY BURST)
GsmL1_LogChComb_I, ///< TCH/F + FACCH/F + SACCH/TF
GsmL1_LogChComb_II, ///< TCH/H(0,1) + FACCH/H(0,1) + SACCH/TH(0,1)
GsmL1_LogChComb_IV, ///< FCCH + SCH + BCCH + CCCH
GsmL1_LogChComb_V, ///< FCCH + SCH + BCCH + CCCH + SDCCH/4(0..3) + SACCH/C4(0..3)
GsmL1_LogChComb_VII, ///< SDCCH/8(0 .7) + SACCH/C8(0 . 7)
GsmL1_LogChComb_XIII ///< PDTCH/F + PACCH/F + PTCCH/F
} GsmL1_LogChComb_t;
/****************************************************************************
* Enum : GsmL1_DevType_t
************************************************************************//**
*
* PHY device type.
*
* @ingroup gsml1_api_const
*
****************************************************************************/
typedef enum GsmL1_DevType_t
{
GsmL1_DevType_TxdRxu = 0x06, ///< Base station type (TX downlink, RX uplink)
GsmL1_DevType_TxuRxd = 0x09, ///< Mobile station type (TX uplink, RX downlink)
GsmL1_DevType_Rxd = 0x01, ///< Monitor type (RX downlink only)
GsmL1_DevType_Rxu = 0x02, ///< Monitor type (RX uplink only)
GsmL1_DevType_Txd = 0x04, ///< Jammer type (TX downlink only)
GsmL1_DevType_Txu = 0x08 ///< Jammer type (TX uplink only)
} GsmL1_DevType_t;
/****************************************************************************
* Enum : GsmL1_Dir_t
************************************************************************//**
*
* Indicate the path of the transmission.
*
* @ingroup gsml1_api_const
*
****************************************************************************/
typedef enum GsmL1_Dir_t
{
GsmL1_Dir_None = 0x00, ///< No path
GsmL1_Dir_RxDownlink = 0x01, ///< Receive transmission path from Bts to the mobile station
GsmL1_Dir_RxUplink = 0x02, ///< Receive transmission path from mobile station to the Bts
GsmL1_Dir_TxDownlink = 0x04, ///< Transmit on transmission path from Bts to the mobile station
GsmL1_Dir_TxUplink = 0x08 ///< Transmit on transmission path from mobile station to the Bts
} GsmL1_Dir_t;
/****************************************************************************
* Enum : GsmL1_CipherId_t
************************************************************************//**
*
* Ciphering algorithm ID.
*
* @ingroup gsml1_api_const
*
****************************************************************************/
typedef enum GsmL1_CipherId_t
{
GsmL1_CipherId_A50 = 0x00, ///< No encryption
GsmL1_CipherId_A51 = 0x01, ///< A5/1
GsmL1_CipherId_A52 = 0x02, ///< A5/2
GsmL1_CipherId_A53 = 0x03 ///< A5/3
} GsmL1_CipherId_t;
/****************************************************************************
* Enum : GsmL1_FreqBand_t
************************************************************************//**
*
* GSM frequency bands.
*
* @ingroup gsml1_api_const
*
****************************************************************************/
typedef enum GsmL1_FreqBand_t
{
GsmL1_FreqBand_850 = 0, ///< GSM-850 frequency band
GsmL1_FreqBand_900, ///< GSM-900 frequency band
GsmL1_FreqBand_1800, ///< GSM-1800 frequency band
GsmL1_FreqBand_1900, ///< GSM-1900 frequency band
Num_GsmL1_FreqBand ///< Number of frequency bands
} GsmL1_FreqBand_t;
/****************************************************************************
* Enum : GsmL1_TchFormat_t
************************************************************************//**
*
* TCH message packin format.
*
* @ingroup gsml1_api_const
*
****************************************************************************/
typedef enum GsmL1_TchFormat_t
{
GsmL1_TchFormat_Rtp = 0, ///< RTP format
GsmL1_TchFormat_If2 ///< IF2 format (AMR), custom (HR, FR, EFR)
} GsmL1_TchFormat_t;
/****************************************************************************
* Enum : GsmL1_PrimId_t
************************************************************************//**
*
* Inter-layer communication primitives ID definitions
*
* @ingroup gsml1_api_const
*
****************************************************************************/
typedef enum GsmL1_PrimId_t
{
GsmL1_PrimId_MphInitReq = 0, ///< Initialize the base station.
GsmL1_PrimId_MphCloseReq, ///< Closes the base station.
GsmL1_PrimId_MphConnectReq, ///< Connect a physical channel.
GsmL1_PrimId_MphDisconnectReq, ///< Disconnect a physical channel.
GsmL1_PrimId_MphActivateReq, ///< Activate a logical channel over a physical channel.
GsmL1_PrimId_MphDeactivateReq, ///< Deactivate a logical channel from a physical channel.
GsmL1_PrimId_MphConfigReq, ///< Configure a physical channel.
GsmL1_PrimId_MphMeasureReq, ///< Measure the received signal strenght indication on a device.
GsmL1_PrimId_MphInitCnf, ///< Confirm the reception of a MPH-INIT_REQ primitive.
GsmL1_PrimId_MphCloseCnf, ///< Confirm the reception of a MPH-CLOSE_REQ primitive.
GsmL1_PrimId_MphConnectCnf, ///< Returns an handle pointing to the connected physical channel.
GsmL1_PrimId_MphDisconnectCnf, ///< Confirm the reception of a MPH-DISCONNECT_REQ primitive.
GsmL1_PrimId_MphActivateCnf, ///< Confirm the reception of a MPH-ACTIVATE_REQ primitive.
GsmL1_PrimId_MphDeactivateCnf, ///< Confirm the reception of a MPH-DEACTIVATE_REQ primitive.
GsmL1_PrimId_MphConfigCnf, ///< Confirm the reception of a MPH-CONFIG_REQ primitive.
GsmL1_PrimId_MphMeasureCnf, ///< Returns the measurement made on the reception of a MPH-MEASURE-REQ primitive.
GsmL1_PrimId_MphTimeInd, ///< Infom upper layer of the actual timeslot and frame number.
GsmL1_PrimId_MphSyncInd, ///< Synchronization status indication
GsmL1_PrimId_PhEmptyFrameReq, ///< Layer 2 has nothing to transmit on a PH-READY-TO-SEND.
GsmL1_PrimId_PhDataReq, ///< Transfer a message frame unit to the layer 1.
GsmL1_PrimId_PhConnectInd, ///< Inform layer 2 that a logical channel has connected on layer 1.
GsmL1_PrimId_PhReadyToSendInd, ///< Ask layer 3 for something to transmit.
GsmL1_PrimId_PhDataInd, ///< Transmit a message frame unit to layer 2.
GsmL1_PrimId_PhRaInd, ///< Inform the layer 2 of a random access initiated by the MS.
GsmL1_PrimId_NUM ///< Only used to validate parameters
} GsmL1_PrimId_t;
/****************************************************************************
* enum: GsmL1_BurstType_t
************************************************************************//**
*
* GSM Burst Types
*
* @see
* TS 3GPP 45.002 - 5.0
*
* @ingroup gsml1_common_const
*
***************************************************************************/
typedef enum GsmL1_BurstType_t
{
GsmL1_BurstType_Sync = 0, ///< Synchronization Burst
GsmL1_BurstType_Normal = 1, ///< Normal Burst
GsmL1_BurstType_Dummy = 2, ///< Dummy Burst
GsmL1_BurstType_Normal8Psk = 3, ///< Normal Burst (8PSK)
GsmL1_BurstType_Access_0 = 4, ///< Access Burst (Training sequence 0)
GsmL1_BurstType_Access_1 = 5, ///< Access Burst (Training sequence 1)
GsmL1_BurstType_Access_2 = 6, ///< Access Burst (Training sequence 2)
GsmL1_BurstType_Freq = 7, ///< Frequency Correction Burst
GsmL1_BurstType_NUM ///< Only used to validate parameters
} GsmL1_BurstType_t;
/****************************************************************************
* typedef enum : GsmL1_If2FrTypeIdx_t
************************************************************************//**
*
* List of every IF2 frame types.
*
* @ingroup gsml1_api_const
*
***************************************************************************/
typedef enum GsmL1_If2FrTypeIdx_t
{
GsmL1_If2FrTypeIdx_4_75 = 0, ///< AMR 4,75
GsmL1_If2FrTypeIdx_5_15, ///< AMR 5,15
GsmL1_If2FrTypeIdx_5_9, ///< AMR 5,9
GsmL1_If2FrTypeIdx_6_7, ///< AMR 6,7
GsmL1_If2FrTypeIdx_7_4, ///< AMR 7,4
GsmL1_If2FrTypeIdx_7_95, ///< AMR 7,95
GsmL1_If2FrTypeIdx_10_2, ///< AMR 10,2
GsmL1_If2FrTypeIdx_12_2, ///< AMR 12,2
GsmL1_If2FrTypeIdx_SID, ///< AMR SID
GsmL1_If2FrTypeIdx_NoData = 15 ///< NO DATA
} GsmL1_If2FrTypeIdx_t;
/****************************************************************************
* typedef enum : GsmL1_TchPlType_t
************************************************************************//**
*
* List of every payload type supported on a TCH physical channel.
*
* @ingroup gsml1_api_const
*
***************************************************************************/
typedef enum GsmL1_TchPlType_t
{
GsmL1_TchPlType_NA = 0, ///< Not applicable, unknown, invalid
GsmL1_TchPlType_Fr, ///< Compacted ETSI full-rate traffic speech frame
GsmL1_TchPlType_Hr, ///< Compacted ETSI half-rate traffic speech frame
GsmL1_TchPlType_Efr, ///< Compacted ETSI enhanced full-rate traffic speech frame
GsmL1_TchPlType_Amr, ///< RTP/IF2 adaptive multi-rate traffic speech frame
// These cannot be formatted using IF2 format !!
GsmL1_TchPlType_Amr_SidBad, ///< Indicates that errors are detected
GsmL1_TchPlType_Amr_Onset, ///< Used to signal the Codec mode for the first speech frame after DTX
GsmL1_TchPlType_Amr_Ratscch, ///< Frames used to convey RATSCCH messages
GsmL1_TchPlType_Amr_SidUpdateInH, ///< Used to inhibit the second part of a SID_UPDATE frame if there is a speech onset
GsmL1_TchPlType_Amr_SidFirstP1, ///< First part of marker to define end of speech, start of DTX
GsmL1_TchPlType_Amr_SidFirstP2, ///< Second part of marker to define end of speech, start of DTX
GsmL1_TchPlType_Amr_SidFirstInH, ///< Used to inhibit the second part of a SID_FIRST_P1 frame if there is a speech onset
GsmL1_TchPlType_Amr_RatscchMarker, ///< Marker to identify Ratscch frames
GsmL1_TchPlType_Amr_RatscchData ///< Frame that conveys the actual Ratscch message
} GsmL1_TchPlType_t;
/****************************************************************************
* Enum : GsmL1_TchPlFmt_t
************************************************************************//**
*
* List of every payload packing format supported on a TCH physical channel.
*
* @ingroup gsml1_api_const
*
****************************************************************************/
typedef enum GsmL1_TchPlFmt_t
{
GsmL1_TchPlFmt_Rtp = 0, ///< RFC XXXX - RTP format
GsmL1_TchPlFmt_If2 ///< Etsi IF2 format (AMR), custom (HR, FR, EFR)
} GsmL1_TchPlFmt_t;
/****************************************************************************
* typedef enum : GsmL1_PdtchPlType_t
************************************************************************//**
*
* List of every payload type supported on a PDTCH physical channel.
*
* @ingroup gsml1_api_const
*
***************************************************************************/
typedef enum GsmL1_PdtchPlType_t
{
GsmL1_PdtchPlType_NA = 0x00, ///< Not applicable, unknown, invalid
GsmL1_PdtchPlType_Hdr = 0x01, ///< Header only is present and valid
GsmL1_PdtchPlType_Hdr_Data1 = 0x03, ///< Header and 1st half of data (2nd half is present but invalid)
GsmL1_PdtchPlType_Hdr_Data2 = 0x05, ///< Header and 2nd half of data (1st half is present but invalid)
GsmL1_PdtchPlType_Full = 0x07 ///< Full data present and valid
} GsmL1_PdtchPlType_t;
/****************************************************************************
* typedef enum : GsmL1_AmrCodec_t
************************************************************************//**
*
* List of every supported codecs of a TCH/AMR active codec set.
*
* @ingroup gsml1_api_const
*
***************************************************************************/
typedef enum GsmL1_AmrCodec_t
{
GsmL1_AmrCodec_Unset = 0, ///< Used to indicate that a slot of the Active Codec Slot is unset
GsmL1_AmrCodec_4_75, ///< 4,75 Kbits/s codec
GsmL1_AmrCodec_5_15, ///< 5,15 Kbits/s codec
GsmL1_AmrCodec_5_9, ///< 5,9 Kbits/s codec
GsmL1_AmrCodec_6_7, ///< 6,7 Kbits/s codec
GsmL1_AmrCodec_7_4, ///< 7,4 Kbits/s codec
GsmL1_AmrCodec_7_95, ///< 7,95 Kbits/s codec
GsmL1_AmrCodec_10_2, ///< 10,2 Kbits/s codec
GsmL1_AmrCodec_12_2, ///< 12,2 Kbits/s codec
GsmL1_AmrCodec_NUM ///< Only used to retrieve the last Codec number
} GsmL1_AmrCodec_t;
/****************************************************************************
* typedef enum : GsmL1_AmrCmiPhase_t
************************************************************************//**
*
* Available codec mode indication phase.
*
* @ingroup gsml1_api_const
*
***************************************************************************/
typedef enum GsmL1_AmrCmiPhase_t
{
GsmL1_AmrCmiPhase_NA = 0, ///< AMR CMI phase is not applicable
GsmL1_AmrCmiPhase_Odd, ///< AMR odd phase codec mode indication (default)
GsmL1_AmrCmiPhase_Even ///< AMR even phase codec mode indication
} GsmL1_AmrCmiPhase_t;
/****************************************************************************
* typedef enum : GsmL1_AmrCodecMode_t
************************************************************************//**
*
* Available codec modes of a TCH/AFS or TCH/AHS active codec set.
*
* @ingroup gsml1_api_const
*
***************************************************************************/
typedef enum GsmL1_AmrCodecMode_t
{
GsmL1_AmrCodecMode_1 = 0, ///< AMR Codec Mode 1
GsmL1_AmrCodecMode_2, ///< AMR Codec Mode 2
GsmL1_AmrCodecMode_3, ///< AMR Codec Mode 3
GsmL1_AmrCodecMode_4, ///< AMR Codec Mode 4
GsmL1_AmrCodecMode_Unset ///< Unset AMR Codec Mode
} GsmL1_AmrCodecMode_t;
/****************************************************************************
* typedef : GsmL1_ConfigParamId_t
************************************************************************//**
*
* Id used to identify which parameter is configured through a MPH-CONFIG-REQ.
*
* @ingroup gsml1_api_const
*
***************************************************************************/
typedef enum GsmL1_ConfigParamId_t
{
GsmL1_ConfigParamId_SetNbTsc, ///< Set the normal burst TSC of the specified RF device
GsmL1_ConfigParamId_SetTxPowerLevel, ///< Set the TX power level of the specified RF device
GsmL1_ConfigParamId_SetLogChParams, ///< Configure the logical channel specific parameters
GsmL1_ConfigParamId_SetCipheringParams, ///< Configure the ciphering parameters
GsmL1_ConfigParamId_NUM ///< Only used to validate parameters
} GsmL1_ConfigParamId_t;
/****************************************************************************
* Public constant *
****************************************************************************/
/// Maximum length of a layer 2 message unit.
#define MAX_L2MSGSIZE 160 // ( Based on a PDTCH block type 13 (MCS-9) [155 bytes] )
/// Advance taken by the library (counted in frames where 1 frame = 8 timeslots )
#define GSML1_FN_ADVANCE 6
///< Size (in byte) of a Traffic Channel header located at the start of every msg unit
#define TCH_HEADER_SIZE 1
#ifdef __cplusplus
}
#endif // extern "C"
#endif // GSML1CONST_H__

174
api/gsml1dbg.h Normal file
View File

@ -0,0 +1,174 @@
#ifndef GSMDBG_H__
#define GSMDBG_H__
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
/****************************************************************************
* Includes *
****************************************************************************/
#include <stdint.h>
#include <stdio.h>
#include "gsml1types.h" // GsmL1_RxBurst_t
/****************************************************************************
* Defines *
****************************************************************************/
// Debugging system's verbosity level flags
#define DBG_NONE 0x00000000
#define DBG_ALL 0xFFFFFFFF
#define DBG_DEBUG 0x80000000
#define DBG_L1WARNING 0x40000000
#define DBG_ERROR 0x20000000
#define DBG_L1RXMSG 0x10000000
#define DBG_L1RXMSGBYTE 0x08000000
#define DBG_L1TXMSG 0x04000000
#define DBG_L1TXMSGBYTE 0x02000000
#define DBG_MPHCNF 0x01000000
#define DBG_MPHIND 0x00800000
#define DBG_MPHREQ 0x00400000
#define DBG_PHIND 0x00200000
#define DBG_PHREQ 0x00100000
#define DBG_PHYRF 0x00080000
#define DBG_PHYRFMSGBYTE 0x00040000
#define DBG_MODE 0x00020000
#define DBG_TDMAINFO 0x00010000
#define DBG_BADCRC 0x00008000
#define DBG_PHINDBYTE 0x00004000
#define DBG_PHREQBYTE 0x00002000
#define DBG_DEVICEMSG 0x00000800
#define DBG_RACHINFO 0x00000040
#define DBG_LOGCHINFO 0x00000020
#define DBG_MEMORY 0x00000010
#define DBG_PROFILING 0x00000008
#define DBG_TESTCOMMENT 0x00000004
#define DBG_TEST 0x00000002
#define DBG_STATUS 0x00000001
#define DBG_RSSI_THRESHOLD -60.0f ///< Minimum RSSI to be considered a valid burst
/****************************************************************************
* Public functions *
****************************************************************************/
/****************************************************************************
* Function : GsmL1Dbg_Init
************************************************************************//**
*
* Print a debug string to the standard output.
*
* @param [in] u32Level
* Verbosity level of the printed message.
*
* @param [in] pExtPrintfCb
* Function pointer to an external routine able to print the formated string.
*
* @param [out] pstrOutputFileName
* Name of the output file ( Set to NULL in order to disable this feature )
*
* @return
* None.
*
* @ingroup gsm_common_debug
*
***************************************************************************/
void GsmL1Dbg_Init( uint32_t u32Level,
void (*pExtPrintfCb) ( char *pString),
char *pstrOutputFileName );
/****************************************************************************
* Function : GsmL1Dbg_SetLevel
************************************************************************//**
*
* Set the verbosity level.
*
* @param [in] u32Level
* Verbosity level of the printed message.
*
* @return
* None.
*
* @ingroup gsm_common_debug
*
***************************************************************************/
void GsmL1Dbg_SetLevel( uint32_t u32Level );
/****************************************************************************
* Function : GsmL1Dbg_Close
************************************************************************//**
*
* Close the debugging system.
*
* @return
* None.
*
* @ingroup gsm_common_debug
*
***************************************************************************/
void GsmL1Dbg_Close();
/****************************************************************************
* Function : GsmL1Dbg_Printf
************************************************************************//**
*
* Print a debug string to the standard output.
*
* @param [in] u32Level
* Verbosity level of the printed message.
*
* @param [in] *format
* String that contains the text to be written to the stdout.
*
* @return
* None.
*
* @ingroup gsm_common_debug
*
***************************************************************************/
void GsmL1Dbg_Printf( uint32_t u32Level, char const *format, ... );
/****************************************************************************
* Function : GsmL1Dbg_DumpBuffer
************************************************************************//**
*
* Dump a generic uint8_t buffer.
*
* @param [in] u32Level
* Verbosity level of the printed message.
*
* @param [in] u32FirstByte
* Starting byte index
*
* @param [in] u32Length
* Number of bytes to dump
*
* @param [in] pu8Buffer
* Pointer to the dumped buffer
*
* @return
* None.
*
* @ingroup gsm_common_debug
*
***************************************************************************/
void GsmL1Dbg_DumpBuffer( uint32_t u32Level,
uint32_t u32FirstByte,
uint32_t u32Length,
uint8_t *pu8Buffer );
#ifdef __cplusplus
}
#endif // extern "C"
#endif // GSMDBG_H__

101
api/gsml1link.h Normal file
View File

@ -0,0 +1,101 @@
#ifndef GSML1LINK_H__
#define GSML1LINK_H__
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
/****************************************************************************
* Includes *
****************************************************************************/
#include "gsml1serv.h"
#include "gsml1prim.h"
#include "gsml1const.h"
#include "gsml1types.h"
/****************************************************************************
* Types *
****************************************************************************/
/****************************************************************************
* Public Functions *
****************************************************************************/
/****************************************************************************
* Function : GsmL1Link_Init
************************************************************************//**
*
* Initialise the GSM layer 1 library.
*
* @return
* GsmL1_Status_Success or the error code
*
* @ingroup gsml1_api_services
*
****************************************************************************/
GsmL1_Status_t GsmL1Link_Init( void );
/****************************************************************************
* Function : GsmL1Link_SetExternalServices
************************************************************************//**
*
* Set every services provided to the layer 1 by external libraries
*
* @param [in] pL3ProvidedServices
* Points to a structure containing all Layer 3 external services
*
* @param [in] pL2ProvidedServices
* Points to a structure containing all Layer 3 external services
*
* @param [in] pPhyRfProvidedServices
* Points to a structure containing all PhyRf external services
*
* @return
* GsmL1_Status_Success or the error code
*
* @ingroup gsml1_api_services
*
****************************************************************************/
GsmL1_Status_t GsmL1Link_SetExternalServices( Gsm_L3ProvidedServices_t *pL3ProvidedServices,
Gsm_L2ProvidedServices_t *pL2ProvidedServices,
Gsm_PhyRfProvidedServices_t *pPhyRfProvidedServices );
/****************************************************************************
* Function : GsmL1Link_GetProvidedServices
************************************************************************//**
*
* Return a strucuture containing all service functions pointer provided
* by the physical link layer library to the external context.
*
* @param [out] pPhyLinkProvidedServices
* Points to a structure of all GSM layer 1 library services function pointer.
*
* @return
* GsmL1_Status_Success or the error code
*
* @ingroup gsml1_api_services
*
****************************************************************************/
GsmL1_Status_t GsmL1Link_GetProvidedServices( Gsm_PhyLinkProvidedServices_t *pPhyLinkProvidedServices );
/****************************************************************************
* Function : GsmL1Link_Close
************************************************************************//**
*
* Close the GSM layer 1 instance and free every allocated ressources.
*
* @return
* GsmL1_Status_Success or the error code
*
* @ingroup gsml1_api_services
*
****************************************************************************/
GsmL1_Status_t GsmL1Link_Close( void );
#ifdef __cplusplus
}
#endif // extern "C"
#endif // GSML1_H__

877
api/gsml1prim.h Normal file
View File

@ -0,0 +1,877 @@
#ifndef GSML1PRIM_H__
#define GSML1PRIM_H__
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
/****************************************************************************
* Includes *
****************************************************************************/
#ifndef WIN32
#include <stdint.h>
#endif
#include "gsml1const.h"
#include "gsml1types.h"
/****************************************************************************
* Types (Primitive Parameters) *
****************************************************************************/
/****************************************************************************
* typedef : GsmL1_MsgUnitParam_t
************************************************************************//**
*
* Buffer structure used to transfer all messages frame units between
* the layers.
*
* @ingroup gsml1_api_prim_params
*
***************************************************************************/
typedef struct GsmL1_MsgUnitParam_t
{
uint8_t u8Size; ///< Size of the msg. unit
uint8_t u8Buffer[MAX_L2MSGSIZE]; ///< Buffer containing the msg. unit
// uint32_t u32Control; ///< Control word associated with the MsgUnit (0 if not applicable)
} GsmL1_MsgUnitParam_t;
/****************************************************************************
* typedef : GsmL1_MeasParam_t
************************************************************************//**
*
* Used to report library specific measured informations.
*
* @ingroup gsml1_api_prim_params
*
***************************************************************************/
typedef struct GsmL1_MeasParam_t
{
float fRssi; ///< Received Signal Strength Indication (in dBm)
int16_t i16BurstTiming; ///< Burst timing (in quarter of bits)
float fLinkQuality; ///< Link quality of the communication (dB)
float fBer; ///< Bit error rate of the last decoded frame [0..1]
} GsmL1_MeasParam_t;
/****************************************************************************
* typedef : GsmL1_DeviceParam_t
************************************************************************//**
*
* TRX device parameters
*
* @ingroup gsml1_api_prim_params
*
***************************************************************************/
typedef struct GsmL1_DeviceParam_t
{
GsmL1_DevType_t devType; ///< Device type
GsmL1_FreqBand_t freqBand; ///< GSM Frequency band used by the TRX device
uint16_t u16Arfcn; ///< Radio frequency channel number
uint16_t u16BcchArfcn; ///< Associated beacon radio frequency channel number
uint8_t u8NbTsc; ///< Training sequence code to be used for normal bursts
uint8_t u8AutoTA; ///< Automatic timing advance (0:TA is handled by upper layers, 1:TA is handled by layer 1)
float fRxPowerLevel; ///< Nominal RX power level in dBm (use 0 if the control is handled by upper layers)
float fTxPowerLevel; /**< Transmission power level if applicable (in dBm).
@see Verify the values supported by the hardware. */
} GsmL1_DeviceParam_t;
/****************************************************************************
* Types (Primitives) *
****************************************************************************/
/****************************************************************************
* Struct : GsmL1_MphInitReq_t
************************************************************************//**
*
* This structure contains every necessary parameters to initialize a
* Base Tranceiver Station on a specific GSM Radio Frequency band.
*
* Primitive : MPH-INIT-REQ (L3 -> L1)
*
* @ingroup gsml1_api_prim_mph
*
****************************************************************************/
typedef struct GsmL1_MphInitReq_t
{
HANDLE hLayer3; ///< Handle to a layer 3 entity
GsmL1_DeviceParam_t deviceParam; ///< TRX Device parameters
} GsmL1_MphInitReq_t;
/***************************************************************************
* Struct : GsmL1_MphInitCnf
************************************************************************//**
*
* This structure is sent back to the layer 3 in order to confirm the
* reception of a MPH-INIT-REQ primitive.
*
* @ingroup gsml1_api_prim_mph
*
***************************************************************************/
typedef struct GsmL1_MphInitCnf_t
{
HANDLE hLayer3; /**< Handle to the layer 3 entity.
The layer 3 handle received in the
MPH-INIT-REQ primitive is sent back
to the layer 3 (unmodified). */
HANDLE hLayer1; ///< Handle to the initialized Layer1 entity
GsmL1_FreqBand_t freqBand; ///< GSM Frequency band used by the TRX device
GsmL1_Status_t status; ///< Status of the MPH-INIT-REQ primitive
} GsmL1_MphInitCnf_t;
/***************************************************************************
* Struct : GsmL1_MphCloseReq
************************************************************************//**
*
* This structure contains every necessary parameters to close a
* Base Tranceiver Station using a specific GSM Radio Frequency band.
*
* @ingroup gsml1_api_prim_mph
*
***************************************************************************/
typedef struct GsmL1_MphCloseReq_t
{
HANDLE hLayer3; ///< Handle to the layer 3 entity
HANDLE hLayer1; ///< Handle of the Layer1 entity to close
} GsmL1_MphCloseReq_t;
/***************************************************************************
* Struct : GsmL1_MphCloseCnf
************************************************************************//**
*
* This structure is sent back to the layer 3 in order to confirm the
* reception of a MPH-CLOSE-REQ primitive.
*
* @ingroup gsml1_api_prim_mph
*
***************************************************************************/
typedef struct GsmL1_MphCloseCnf_t
{
HANDLE hLayer3; ///< Handle to the layer 3 entity
GsmL1_Status_t status; ///< Status of the MPH-CLOSE-REQ primitive
} GsmL1_MphCloseCnf_t;
/****************************************************************************
* Struct : GsmL1_MphConnectReq_t
************************************************************************//**
*
* This structure contains all the necessary parameters to connect a physical
* channel on an layer 1 entity.
*
* Primitive : MPH-CONNECT-REQ (L3 -> L1)
*
* @ingroup gsml1_api_prim_mph
*
****************************************************************************/
typedef struct GsmL1_MphConnectReq_t
{
HANDLE hLayer3; ///< Handle to a layer 3 entity
HANDLE hLayer1; /**< Handle to the layer1 on which the
physical channel is connected. */
uint8_t u8Tn; ///< Time-slot [0..7]
#ifndef HW_SYSMOBTS_V1
uint8_t u8AutoDummy; /**< Automatically transmit dummy burst
when there is nothing else to transmit. */
#endif
GsmL1_LogChComb_t logChComb; /**< Logical channel multiplexing
over the physical channel */
} GsmL1_MphConnectReq_t;
/***************************************************************************
* Struct : GsmL1_MphConnectCnf
************************************************************************//**
*
* This structure is sent back to the layer 3 in order to confirm the
* reception of a MPH-CONNECT-REQ primitive.
*
* @ingroup gsml1_api_prim_mph
*
***************************************************************************/
typedef struct GsmL1_MphConnectCnf_t
{
HANDLE hLayer3; /**< The layer 3 handle received from in
MPH-CONNECT-REQ primitive is sent back to
the layer 3 (unmodified). */
HANDLE hLayer1; /**< Handle to the layer1 on which the
physical channel is connected. */
GsmL1_Status_t status; ///< Status of the MPH-INIT-CONNECT-REQ primitive
uint8_t u8Tn; ///< Time-slot [0..7]
} GsmL1_MphConnectCnf_t;
/***************************************************************************
* Struct : GsmL1_MphDisconnectReq_t
************************************************************************//**
*
* This structure contains all the necessary parameters to disconnect a
* physical channel on an layer 1 entity.
*
* @ingroup gsml1_api_prim_mph
*
***************************************************************************/
typedef struct GsmL1_MphDisconnectReq_t
{
HANDLE hLayer3; ///< Handle to a layer 3 entity
HANDLE hLayer1; /**< Handle to the layer1 on which the
physical channel is disconnected. */
uint8_t u8Tn; ///< Time-slot [0..7]
} GsmL1_MphDisconnectReq_t;
/***************************************************************************
* Struct : GsmL1_MphDisconnectCnf
************************************************************************//**
*
* This structure is sent back to the layer 3 in order to confirm the
* reception of a MPH-DISCONNECT-REQ primitive.
*
* @ingroup gsml1_api_prim_mph
*
***************************************************************************/
typedef struct GsmL1_MphDisconnectCnf_t
{
HANDLE hLayer3; /**< The layer 3 handle received from in
MPH-DISCONNECT-REQ primitive is sent
back to the layer 3 (unmodified). */
HANDLE hLayer1; /**< Handle to the layer1 on which the
physical channel is disconnected. */
GsmL1_Status_t status; ///< Status of the MPH-DISCONNECT-REQ primitive
uint8_t u8Tn; ///< Time-slot [0..7]
} GsmL1_MphDisconnectCnf_t;
/****************************************************************************
* Struct : GsmL1_MphActivateReq_t
************************************************************************//**
*
* This structure contains all the necessary parameters to activate a
* logical channel over a connected physical channel.
*
* Primitive : MPH-ACTIVATE-REQ (L3 -> L1)
*
* @ingroup gsml1_api_prim_mph
*
****************************************************************************/
typedef struct GsmL1_MphActivateReq_t
{
HANDLE hLayer3; ///< Layer 3 entity
HANDLE hLayer2; ///< Layer 2 entity
HANDLE hLayer1; /**< Handle of the Layer 1 entity on which the
logical channel is activated */
uint8_t u8Tn; ///< Time-slot [0..7]
GsmL1_SubCh_t subCh; ///< Sub-channel number (1Fh if not applicable)
GsmL1_Sapi_t sapi; ///< Service access point identifier
GsmL1_Dir_t dir; ///< Direction path to configure
float fBFILevel; /**< Bad Frame Indication RX power level in dBm
(use 0 do disable BFI) */
GsmL1_LogChParam_t logChPrm; ///< Additional configuration parameters
} GsmL1_MphActivateReq_t;
/***************************************************************************
* Struct : GsmL1_MphActivateCnf
************************************************************************//**
*
* This structure is sent back to the layer 3 in order to confirm the
* reception of a MPH-ACTIVATE-REQ primitive.
*
* @ingroup gsml1_api_prim_mph
*
***************************************************************************/
typedef struct GsmL1_MphActivateCnf
{
HANDLE hLayer3; /**< The layer 3 handle received from in
MPH-ACTIVATE-REQ primitive is sent
back to the layer 3 (unmodified). */
HANDLE hLayer1; /**< Handle of the Layer 1 entity on which the
logical channel is activated */
GsmL1_Status_t status; ///< Status of the MPH-INIT-ACTIVATE-REQ primitive
uint8_t u8Tn; ///< Time-slot [0..7]
GsmL1_SubCh_t subCh; ///< Sub-channel number (1Fh if not applicable)
GsmL1_Sapi_t sapi; ///< Service access point identifier
GsmL1_Dir_t dir; ///< Uplink/Downlink
} GsmL1_MphActivateCnf_t;
/****************************************************************************
* Struct : GsmL1_MphDeactivateReq_t
************************************************************************//**
*
* This structure contains all the necessary parameters to deactivate a
* logical channel from a connected physical channel.
*
* Primitive : MPH-DEACTIVATE-REQ (L3 -> L1)
*
* @ingroup gsml1_api_prim_mph
*
****************************************************************************/
typedef struct GsmL1_MphDeactivateReq_t
{
HANDLE hLayer3; ///< Layer 3 entity
HANDLE hLayer1; /**< Handle of the Layer 1 entity on which the
logical channel is activated */
uint8_t u8Tn; ///< Time-slot [0..7]
GsmL1_SubCh_t subCh; ///< Sub-channel number (1Fh if not applicable)
GsmL1_Sapi_t sapi; ///< Service access point identifier
GsmL1_Dir_t dir; ///< Uplink/Downlink/Both
} GsmL1_MphDeactivateReq_t;
/***************************************************************************
* Struct : GsmL1_MphDeactivateCnf
************************************************************************//**
*
* This structure is sent back to the layer 3 in order to confirm the
* reception of a MPH-DEACTIVATE-REQ primitive.
*
* @ingroup gsml1_api_prim_mph
*
***************************************************************************/
typedef struct GsmL1_MphDeactivateCnf
{
HANDLE hLayer3; /**< The layer 3 handle received from in
MPH-DEACTIVATE-REQ primitive is sent
back to the layer 3 (unmodified). */
HANDLE hLayer1; /**< Handle of the Layer 1 entity on which the
logical channel is activated */
GsmL1_Status_t status; ///< Status of the MPH-INIT-DEACTIVATE-REQ primitive
uint8_t u8Tn; ///< Time-slot [0..7]
GsmL1_SubCh_t subCh; ///< Sub-channel number (1Fh if not applicable)
GsmL1_Sapi_t sapi; ///< Service access point identifier
GsmL1_Dir_t dir; ///< Uplink/Downlink
} GsmL1_MphDeactivateCnf_t;
/****************************************************************************
* Struct : GsmL1_MphConfigReq_t
************************************************************************//**
*
* This structure contains all the necessary parameters to configure
* physical channel parameters through the SACCH burst.
*
* Primitive : MPH-CONFIG-REQ (L3 -> L1)
*
* @ingroup gsml1_api_prim_mph
*
****************************************************************************/
typedef struct GsmL1_MphConfigReq_t
{
HANDLE hLayer3; ///< Layer 3 instance handle
HANDLE hLayer1; /**< Handle of the Layer 1 entity which has the
physical channel on which the configuration
is done. */
GsmL1_ConfigParamId_t cfgParamId; ///< Configuration parameter ID
GsmL1_ConfigParam_t cfgParams; ///< Configuration parameters
} GsmL1_MphConfigReq_t;
/***************************************************************************
* Struct : GsmL1_MphConfigCnf
************************************************************************//**
*
* This structure is sent back to the layer 3 in order to confirm the
* reception of a MPH-CONFIG-REQ primitive.
*
* @ingroup gsml1_api_prim_mph
*
***************************************************************************/
typedef struct GsmL1_MphConfigCnf_t
{
GsmL1_Status_t status; ///< Status of the MPH-CONFIG-REQ primitive
HANDLE hLayer3; ///< Layer 3 instance handle
HANDLE hLayer1; /**< Handle of the Layer 1 entity which has the
physical channel on which the configuration
is done. */
GsmL1_ConfigParamId_t cfgParamId; ///< Configuration parameter ID
GsmL1_ConfigParam_t cfgParams; ///< Configuration parameters
} GsmL1_MphConfigCnf_t;
/****************************************************************************
* Struct : GsmL1_MphMeasureReq_t
************************************************************************//**
*
* This structure contains all the necessary parameters to measure the
* RSSI on a RF channel.
*
* Primitive : MPH-MEASURE-REQ (L3 -> L1)
*
* @ingroup gsml1_api_prim_mph
*
*
****************************************************************************/
typedef struct GsmL1_MphMeasureReq_t
{
HANDLE hLayer3; ///< Layer 3 instance handle
HANDLE hLayer1; /**< Handle of the Layer 1 entity which has the
physical channel on which the configuration
is done. */
uint32_t u32Duration; ///< Duration of the measurement (in number of frames, 0:now)
} GsmL1_MphMeasureReq_t;
/****************************************************************************
* Struct : GsmL1_MphMeasureCnf_t
************************************************************************//**
*
* This structure is sent back to the layer 3 in order to confirm the
* reception of a MPH-MEASURE-REQ primitive.
*
* Primitive : MPH-MEASURE-CNF (L3 -> L1)
*
* @ingroup gsml1_api_prim_mph
*
*
****************************************************************************/
typedef struct GsmL1_MphMeasureCnf_t
{
HANDLE hLayer3; ///< Layer 3 instance handle
HANDLE hLayer1; /**< Handle of the Layer 1 entity which has the
physical channel on which the configuration
is done. */
GsmL1_Status_t status; ///< Status of the MPH-MEASURE-REQ primitive
float fMeanRssi; ///< RF channel mean received signal strength (dBm)
float fPeakRssi; ///< RF channel maximum received signal strength (dBm)
struct
{
float fMeanRssi; ///< Timeslot N mean received signal strength (dBm)
float fPeakRssi; ///< Timeslot N maximum received signal strength (dBm)
} tn[8];
} GsmL1_MphMeasureCnf_t;
/***************************************************************************
* Struct : GsmL1_MphTimeInd
************************************************************************//**
*
* This structure is sent to the layer 3 at the beginning of every frame.
* It is sent when u8Tn is equal to 0.
*
* @ingroup gsml1_api_prim_mph
*
***************************************************************************/
typedef struct GsmL1_MphTimeInd_t
{
HANDLE hLayer1; /**< Handle of the Layer 1 entity sending the
MphTimeInd primitive */
uint32_t u32Fn; ///< Current frame number [0 .. 2 715 647]
uint8_t u8Tn; ///< Current timeslot [0..7]
} GsmL1_MphTimeInd_t;
/****************************************************************************
* Struct : GsmL1_MphSyncInd_t
************************************************************************//**
*
* This structure is sent back to the layer 3 in order indicate when the
* RF device is synchronized to a surrounding BTS or also when it looses its
* synchronization.
*
* Primitive : MPH-SYNC-IND (L1 -> L3)
*
* @ingroup gsml1_api_prim_mph
*
*
****************************************************************************/
typedef struct GsmL1_MphSyncInd_t
{
HANDLE hLayer1; ///< Handle of the device which is sync/unsynced
uint8_t u8Synced; ///< Indicates if the RF device is synchronized to a BTS.
} GsmL1_MphSyncInd_t;
/******************************************************************************
* Struct : GsmL1_PhDataInd_t
**************************************************************************//**
*
* This structure is sent to the layer 2 to pass message units containing
* frames used by the data link layer or RLC/MAC peer-to-peer communications.
*
* @ingroup gsml1_api_prim_ph
*
*****************************************************************************/
typedef struct GsmL1_PhDataInd_t
{
HANDLE hLayer2; /**< Layer 2 instance handle.
This handle is sent through the
MPH-CONNECT-REQ primitive. */
HANDLE hLayer1; /**< Handle of the Layer 1 entity on which the
logical channel is activated */
GsmL1_Sapi_t sapi; ///< Service access point identifier
GsmL1_Dir_t dir; ///< Uplink/Downlink
GsmL1_MeasParam_t measParam; ///< Measurement parameters infos
GsmL1_MsgUnitParam_t msgUnitParam; ///< Message unit sent from the MS
uint16_t u16Arfcn; ///< Absolute radio frequency number
uint8_t u8Tn; ///< Time-slot [0..7]
GsmL1_SubCh_t subCh; ///< Sub-channel number (1Fh if not applicable)
uint32_t u32Fn; ///< Frame number of the 1st RX burst
uint8_t u8BlockNbr; ///< Block number
} GsmL1_PhDataInd_t;
/******************************************************************************
* Struct : GsmL1_PhConnectInd_t
**************************************************************************//**
*
* This structure is sent to the layer 2 in order to indicate that a
* specific type of logical channel has been connected on a physical channel.
*
* @ingroup gsml1_api_prim_ph
*
*****************************************************************************/
typedef struct GsmL1_PhConnectInd_t
{
HANDLE hLayer2; /**< Layer 2 instance handle.
This handle is sent in the MPH-ACTIVATE-REQ
primitive. */
HANDLE hLayer1; /**< Handle of the Layer 1 entity on which the
logical channel is activated */
uint16_t u16Arfcn; ///< Absolute radio frequency number
uint8_t u8Tn; ///< Time-slot [0..7]
GsmL1_SubCh_t subCh; ///< Sub-channel number (1Fh if not applicable)
GsmL1_Sapi_t sapi; ///< Service access point identifier
GsmL1_Dir_t dir; ///< Indicate the path of the transmission.
} GsmL1_PhConnectInd_t;
/******************************************************************************
* Struct : GsmL1_PhReadyToSendInd_t
**************************************************************************//**
*
* This structure is sent to allow the data link or the RLC/MAC layer
* to synchronize to the next instant of physical transmission.
*
* @ingroup gsml1_api_prim_ph
*
*****************************************************************************/
typedef struct GsmL1_PhReadyToSendInd_t
{
HANDLE hLayer1; /**< Handle of the Layer 1 entity on which the
logical channel is activated */
HANDLE hLayer2; /**< Layer 2 instance handle.
This handle is sent in the MPH-ACTIVATE-REQ
primitive. */
GsmL1_Sapi_t sapi; ///< Service access point identifier
uint32_t u32Fn; ///< Frame number of the 1st TX burst
uint16_t u16Arfcn; ///< Absolute radio frequency number
uint8_t u8Tn; ///< Timeslot number [0..7]
GsmL1_SubCh_t subCh; ///< Sub-channel number (1Fh if not applicable)
uint8_t u8BlockNbr; ///< Block number
} GsmL1_PhReadyToSendInd_t;
/******************************************************************************
* Struct : GsmL1_PhEmptyFrameReq_t
**************************************************************************//**
*
* This structure is sent back to the layer 1 when no frame has to be
* transmitted on the reception of a PH-READY-TO-SEND-IND primitive.
*
* @ingroup gsml1_api_prim_ph
*
*****************************************************************************/
typedef struct GsmL1_PhEmptyFrameReq_t
{
HANDLE hLayer1; /**< Handle of the Layer 1 entity on which the
logical channel is activated */
uint32_t u32Fn; ///< Frame number of the 1st TX burst
uint8_t u8Tn; ///< Timeslot number
GsmL1_SubCh_t subCh; ///<Sub-channel number (1Fh if not applicable)
GsmL1_Sapi_t sapi; ///< Service access point identifier
uint8_t u8BlockNbr; ///< Block number
} GsmL1_PhEmptyFrameReq_t;
/******************************************************************************
* Struct : GsmL1_PhDataReq_t
**************************************************************************//**
*
* This structure is used to send a message unit to the layer 1 in response
* to a PH-READY-To-SEND-IND primitive.
*
* @note
* For FR and HR traffic channel (TCH/FS, TCH/HS), the first byte of the
* message unit represents the payload type of the data (GsmL1_FrPlType_t
* or GsmL1_HrPlType_t). It is follow by the paqcked bits output from the
* vocoder.
*
* For AMR traffic channel (TCH/AFS, TCH/AHS), the first byte of the message
* unit represents the payload type of the data (GsmL1_FrPlType_t or
* GsmL1_HrPlType_t). The second byte is always the codec mode indication
* (CMI) and the third byte is always the codec mode response (CMR). They
* are followed by the IF2 frame.
*
* Refer to 3GPP TS 45.009 for more information about the in-band signaling.
* The format of IF2 frames are defined in 3GPP TS 26.101.
*
* @see GsmL1_FrPlType_t
* @see GsmL1_HrPlType_t
* @see GsmL1_CodecMode_t
*
* @ingroup gsml1_api_prim_ph
*
*****************************************************************************/
typedef struct GsmL1_PhDataReq_t
{
HANDLE hLayer1; /**< Handle of the Layer 1 entity on which the
logical channel is activated */
uint32_t u32Fn; ///< Frame number of the 1st TX burst
GsmL1_Sapi_t sapi; ///< Service access point identifier
GsmL1_MsgUnitParam_t msgUnitParam; ///< Message unit structure
uint8_t u8Tn; ///< Timeslot number
GsmL1_SubCh_t subCh; ///< Sub-channel number (1Fh if not applicable)
uint8_t u8BlockNbr; ///< Block number
} GsmL1_PhDataReq_t;
/***************************************************************************
* Struct : GsmL1_PhRaInd_t
************************************************************************//**
*
* This structure is sent to the layer 3 on the arrival (in the network )
* of a RACH frame.
*
* @ingroup gsml1_api_prim_ph
*
***************************************************************************/
typedef struct GsmL1_PhRaInd_t
{
HANDLE hLayer1; /**< Handle of the Layer 1 entity on which the
logical channel is activated */
HANDLE hLayer2; ///< Layer 2 instance handle.
uint32_t u32Fn; ///< Frame number of the RX burst
uint16_t u16Arfcn; ///< Absolute radio frequency number
uint8_t u8Tn; ///< Timeslot number
uint8_t u8BlockNbr; ///< Block number
GsmL1_Sapi_t sapi; ///< Service access point identifier
GsmL1_MsgUnitParam_t msgUnitParam; ///< Message unit structure
GsmL1_MeasParam_t measParam; ///< Measurement parameters infos
GsmL1_BurstType_t burstType; /**< Indicate which training sequence was used
to send the RACH/PRACH burst */
GsmL1_SubCh_t subCh; ///< Sub-channel number (1Fh if not applicable)
} GsmL1_PhRaInd_t;
/***************************************************************************
* Struct : GsmL1_Prim_t
************************************************************************//**
*
* Layer 1 primitive definition.
*
* @ingroup gsml1_api_prim
*
***************************************************************************/
typedef struct
{
GsmL1_PrimId_t id; ///< Primitive ID
union
{
GsmL1_MphInitReq_t mphInitReq; ///< Initialize the base station.
GsmL1_MphCloseReq_t mphCloseReq; ///< Closes the base station.
GsmL1_MphConnectReq_t mphConnectReq; ///< Connect a physical channel.
GsmL1_MphDisconnectReq_t mphDisconnectReq; ///< Disconnect a physical channel.
GsmL1_MphActivateReq_t mphActivateReq; ///< Activate a logical channel over a physical channel.
GsmL1_MphDeactivateReq_t mphDeactivateReq; ///< Deactivate a logical channel from a physical channel.
GsmL1_MphConfigReq_t mphConfigReq; ///< Configure a physical channel.
GsmL1_MphMeasureReq_t mphMeasureReq; ///< Measure the RSSI and frequency drift
GsmL1_MphInitCnf_t mphInitCnf; ///< Confirm the reception of a MPH-INIT_REQ primitive.
GsmL1_MphCloseCnf_t mphCloseCnf; ///< Confirm the reception of a MPH-CLOSE_REQ primitive.
GsmL1_MphConnectCnf_t mphConnectCnf; ///< Returns an handle pointing to the connected physical channel.
GsmL1_MphDisconnectCnf_t mphDisconnectCnf; ///< Confirm the reception of a MPH-DISCONNECT_REQ primitive.
GsmL1_MphActivateCnf_t mphActivateCnf; ///< Confirm the reception of a MPH-ACTIVATE_REQ primitive.
GsmL1_MphDeactivateCnf_t mphDeactivateCnf; ///< Confirm the reception of a MPH-DEACTIVATE_REQ primitive.
GsmL1_MphConfigCnf_t mphConfigCnf; ///< Confirm the reception of a MPH-CONFIG_REQ primitive.
GsmL1_MphMeasureCnf_t mphMeasureCnf; ///< Return the RSSI and freq. drift
GsmL1_MphTimeInd_t mphTimeInd; ///< Infom upper layer of the actual timeslot and frame number.
GsmL1_MphSyncInd_t mphSyncInd; ///< Synchronization status indication
GsmL1_PhEmptyFrameReq_t phEmptyFrameReq; ///< Layer 2 has nothing to transmit on a PH-READY-TO-SEND.
GsmL1_PhDataReq_t phDataReq; ///< Transfer a message frame unit to the layer 1.
GsmL1_PhConnectInd_t phConnectInd; ///< Inform layer 2 that a logical channel has connected on layer 1.
GsmL1_PhReadyToSendInd_t phReadyToSendInd; ///< Ask layer 3 for something to transmit.
GsmL1_PhDataInd_t phDataInd; ///< Transmit a message frame unit to layer 2.
GsmL1_PhRaInd_t phRaInd; ///< Inform the layer 2 of a random access initiated by the MS.
} u;
} GsmL1_Prim_t;
/****************************************************************************
* Public Functions *
****************************************************************************/
#ifdef _TMS320C6400
/****************************************************************************
* Public routines *
****************************************************************************/
/****************************************************************************
* Function : GsmL1_SendMphReq
************************************************************************//**
*
* This routine is used by the layer 3 to request a service from layer 1.
*
* @param [in] pMphReq
* Structure containing the primitive parameters
*
* @return
* GsmL1_Status_Success or the error code
*
* @ingroup gsml1_api_prim_mph
*
****************************************************************************/
GsmL1_Status_t GsmL1_SendMphReq( GsmL1_Prim_t *pMphReq );
/****************************************************************************
* Function : GsmL1_SendMphCnf
************************************************************************//**
*
* This routine is used by layer 1 to send the confirmation of a previously
* received request.
*
* @param [out] pMphCnf
* Structure containing the confirmation primitive parameters
*
* @return
* GsmL1_Status_Success or the error code
*
* @ingroup gsml1_api_prim_mph
*
****************************************************************************/
GsmL1_Status_t GsmL1_SendMphCnf( GsmL1_Prim_t *pMphCnf );
/****************************************************************************
* Function : GsmL1_SendMphInd
************************************************************************//**
*
* This routine is used by layer 1 to indicate something to layer 3.
*
* @param [out] pMphInd
* Structure containing indication primitive parameters
*
* @return
* GsmL1_Status_Success or the error code
*
* @ingroup gsml1_api_prim_mph
*
****************************************************************************/
GsmL1_Status_t GsmL1_SendMphInd( GsmL1_Prim_t *pMphInd );
/****************************************************************************
* Function : GsmL1_SendPhReq
************************************************************************//**
*
* This routine is used by the layer 2 to request a service from layer 1.
*
* @param [in] pPhReq
* Structure containing request primitive parameters
*
* @return
* GsmL1_Status_Success or the error code
*
* @ingroup gsml1_api_prim_ph
*
****************************************************************************/
GsmL1_Status_t GsmL1_SendPhReq( GsmL1_Prim_t *pPhReq );
/****************************************************************************
* Function : GsmL1_SendPhCnf
************************************************************************//**
*
* This routine is used by layer 1 to send the confirmation of a previously
* received request from layer 2.
*
* @param [out] pPhCnf
* Structure containing the confirmation primitive parameters
*
* @return
* GsmL1_Status_Success or the error code
*
* @ingroup gsml1_api_prim_mph
*
****************************************************************************/
GsmL1_Status_t GsmL1_SendPhCnf( GsmL1_Prim_t *pPhCnf );
/****************************************************************************
* Function : GsmL1_SendPhInd
************************************************************************//**
*
* This routine is used by layer 1 to indicate something to layer 2.
*
* @param [out] pPhInd
* Structure containing indication primitive parameters
*
* @return
* GsmL1_Status_Success or the error code
*
* @ingroup gsml1_api_prim_mph
*
****************************************************************************/
GsmL1_Status_t GsmL1_SendPhInd( GsmL1_Prim_t *pPhInd );
#endif // _TMS320C6400
#ifdef __cplusplus
}
#endif // extern "C"
#endif // GSML1PRIM_H__

87
api/gsml1rf.h Normal file
View File

@ -0,0 +1,87 @@
#ifndef GSML1RF_H__
#define GSML1RF_H__
/****************************************************************************
* Includes *
****************************************************************************/
#include <stdint.h>
#include "gsml1serv.h"
/****************************************************************************
* Defines *
****************************************************************************/
#define GSML1RF_NOCHANGE 2 ///< Do not modify RX or TX device in the FPGA side
#define GSML1RF_ENABLE 1 ///< Enable RX or TX device in the FPGA side
#define GSML1RF_DISABLE 0 ///< Disable RX or TX device in the FPGA side
/****************************************************************************
* Public functions *
****************************************************************************/
/****************************************************************************
* Function : GsmL1Rf_Init
************************************************************************//**
*
* Initialize the PhyRf library.
*
* @return
* GsmL1_Status_Success or an error code otherwise.
*
* @ingroup gsml1_api_phyrf
*
****************************************************************************/
GsmL1_Status_t GsmL1Rf_Init( void );
/****************************************************************************
* Function : GsmL1Rf_Close
************************************************************************//**
*
* Uninitialize the PhyRf library.
*
* @return
* GsmL1_Status_Success or an error code otherwise.
*
* @ingroup gsml1_api_phyrf
*
****************************************************************************/
void GsmL1Rf_Close( void );
/****************************************************************************
* Function : GsmL1Rf_GetProvidedServices
************************************************************************//**
*
* Used to retrieve a structure of every services provided by the PhyRf layer.
*
* @param [out] pPhyRfProvidedServices
* Points to a structure of every services provided by the PhyRf layer
*
* @return
* GsmL1_Status_Success or an error code otherwise.
*
* @ingroup gsml1_api_phyrf
*
****************************************************************************/
GsmL1_Status_t GsmL1Rf_GetProvidedServices( Gsm_PhyRfProvidedServices_t *pPhyRfProvidedServices );
/****************************************************************************
* Function : GsmL1Rf_IsInitialized
************************************************************************//**
*
* Used to determinate if the PhyRf library is initialized
*
* @return
* 1 if initialized, 0 otherwise
*
* @ingroup gsml1_api_phyrf
*
****************************************************************************/
uint8_t GsmL1Rf_IsInitialized( void );
#ifdef __cplusplus
}
#endif // extern "C"
#endif // GSML1PHYRF_H__

135
api/gsml1serv.h Normal file
View File

@ -0,0 +1,135 @@
#ifndef GSML1SERV_H__
#define GSML1SERV_H__
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
/****************************************************************************
* Includes *
****************************************************************************/
#include "gsml1const.h"
#include "gsml1types.h"
#include "gsml1prim.h"
/****************************************************************************
* Struct : PhyRf_ExternalServices_t
************************************************************************//**
*
* All external services provided from the PhyLink Layer to the PhyRf layer.
*
* @ingroup gsml1_api_phyrf
*
****************************************************************************/
typedef struct PhyRf_ExternalServices_t
{
GsmL1_Status_t (*pfRecvBurst) ( HANDLE hPhyLink, GsmL1_RxBurst_t *pRxBurst );
GsmL1_Status_t (*pfUpdateTn) ( HANDLE hPhyLink, uint32_t u32Fn, uint8_t u8Tn );
} PhyRf_ExternalServices_t;
/****************************************************************************
* typedef : Gsm_L3ProvidedServices_t
************************************************************************//**
*
* Structure which contains a function pointer to every service provided
* by the Gsm Layer 3 library.
*
* @ingroup gsml1_api_services
*
***************************************************************************/
typedef struct Gsm_L3ProvidedServices
{
GsmL1_Status_t (*pfMphCnf)( GsmL1_Prim_t *pPrim );
GsmL1_Status_t (*pfMphInd)( GsmL1_Prim_t *pPrim );
} Gsm_L3ProvidedServices_t;
/****************************************************************************
* typedef : Gsm_L2ProvidedServices_t
************************************************************************//**
*
* Structure which contains a function pointer to every service provided
* by the Gsm Layer 2 library.
*
* @ingroup gsml1_api_services
*
***************************************************************************/
typedef struct Gsm_L2ProvidedServices_t
{
GsmL1_Status_t (*pfPhCnf)( GsmL1_Prim_t *pPrim );
GsmL1_Status_t (*pfPhInd)( GsmL1_Prim_t *pPrim );
} Gsm_L2ProvidedServices_t;
/****************************************************************************
* typedef : Gsm_PhyLinkProvidedServices_t
************************************************************************//**
*
* Structure which contains a function pointer to every service provided
* by the physical link layer library.
*
* @ingroup gsml1_api_services
*
***************************************************************************/
typedef struct Gsm_PhyLinkProvidedServices_t
{
// Services provided to the layer 3
GsmL1_Status_t (*pfMphReq)( GsmL1_Prim_t *pPrim );
// Services provided to the Layer 2
GsmL1_Status_t (*pfPhReq)( GsmL1_Prim_t *pPrim );
// Services provided to the physical radio frequency layer
GsmL1_Status_t (*pfRecvBurst) ( HANDLE hDevice, GsmL1_RxBurst_t *pRxBurst );
GsmL1_Status_t (*pfUpdateTn) ( HANDLE hDevice, uint32_t u32Fn, uint8_t u8Tn );
} Gsm_PhyLinkProvidedServices_t;
/****************************************************************************
* typedef : Gsm_PhyRfProvidedServices_t
************************************************************************//**
*
* Structure which contains a function pointer to every service provided
* by the PhyRf library.
*
* @ingroup gsml1_api_services
*
***************************************************************************/
typedef struct Gsm_PhyRfProvidedServices_t
{
// Services provided from the physical radio frequency layer
GsmL1_Status_t (*pfInitDevice) ( PhyRf_ExternalServices_t *pPhyRfExternalServices,
GsmL1_DevType_t devType,
GsmL1_FreqBand_t freqBand,
uint16_t u16Arfcn,
float fTxPowerLevel,
uint8_t u8NbTsc,
HANDLE hPhyLink,
HANDLE *hPhyRf );
void (*pfCloseDevice ) ( HANDLE hPhyRfDevice );
GsmL1_Status_t (*pfSendBurst ) ( HANDLE hPhyRfDevice, GsmL1_TxBurst_t *pTxBurst );
GsmL1_Status_t (*pfConfigTs ) ( HANDLE hPhyRfDevice,
uint8_t u8Tn,
uint8_t u8EnableRx,
uint8_t u8EnableTxAutoDummy );
GsmL1_Status_t (*pfSetTxPowerLevel) ( HANDLE hPhyRfDevice,
float fTxPowerLevel );
GsmL1_Status_t (*pfSetNbTsc) ( HANDLE hPhyRfDevice,
uint8_t u8NbTsc );
// Services provided by the physical RF layer to the FPGA layer
void (*pfNewTnIsr) ( void );
} Gsm_PhyRfProvidedServices_t;
#ifdef __cplusplus
}
#endif // extern "C"
#endif // GSMSERVICES_H__

142
api/gsml1types.h Normal file
View File

@ -0,0 +1,142 @@
#ifndef GSML1TYPES_H__
#define GSML1TYPES_H__
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
/****************************************************************************
* Includes *
****************************************************************************/
#ifndef WIN32
#include <stdint.h>
#endif
#include "gsml1const.h"
/****************************************************************************
* Types *
****************************************************************************/
/****************************************************************************
* typedef : HANDLE
************************************************************************//**
*
* Generic type used to identify an entity.
*
* @ingroup gsml1_api_types
*
***************************************************************************/
typedef uint32_t HANDLE;
/****************************************************************************
* typedef : GsmL1_LogChParam_t
************************************************************************//**
*
* Logical channel configuration parameters
*
* @ingroup gsml1_api_prim_params
*
***************************************************************************/
typedef union
{
// RACH
struct
{
uint8_t u8Bsic; ///< Base Station Identity Code
} rach;
// AGCH
struct
{
uint8_t u8NbrOfAgch; /**< Number of AGCH blocks on a CCCH
@see BS_AG_BLKS_RES parameter in 3GPP TS 45_02 Section 7 Table 5 */
} agch;
// SACCH
struct
{
uint8_t u8MsPowerLevel; /**< Power level control
@see TS 3GPP 45.005 - 4.1.1 Mobile station output power */
} sacch;
// TCH
struct
{
#ifndef HW_SYSMOBTS_V1
GsmL1_TchPlFmt_t tchPlFmt; ///< Payload format (RFC RTP, Etsi IF2)
#endif
GsmL1_TchPlType_t tchPlType; ///< Expected payload type (HR, FR, EFR or AMR)
GsmL1_AmrCmiPhase_t amrCmiPhase; ///< AMR Codec Mode Indication phase (downlink)
GsmL1_AmrCodecMode_t amrInitCodecMode; ///< AMR Initial Codec Mode
GsmL1_AmrCodec_t amrActiveCodecSet[4]; ///< AMR Active Codec Set
} tch;
// PRACH
struct
{
uint8_t u8Bsic; ///< Base Station Identity Code
} prach;
// PTCCH
struct
{
uint8_t u8Bsic; ///< Base Station Identity Code
} ptcch;
} GsmL1_LogChParam_t;
/****************************************************************************
* typedef : GsmL1_ConfigParam_t
************************************************************************//**
*
* Layer 1 configuration parameters
*
* @ingroup gsml1_api_prim_params
*
***************************************************************************/
typedef union
{
// Set the normal burst TSC of the specified RF device
struct
{
uint8_t u8NbTsc; ///< Normal burst training sequence code of the specified RF device
} setNbTsc;
// Set the TX power level of the specified RF device
struct
{
float fTxPowerLevel; ///< Transmitter power of the specified RF device
} setTxPowerLevel;
// Set the logical channel specific parameters
struct
{
GsmL1_Sapi_t sapi; ///< Service access point identifier
uint8_t u8Tn; ///< Time-slot [0..7]
GsmL1_SubCh_t subCh; ///< Sub-channel number (0x1F if not applicable)
GsmL1_Dir_t dir; ///< Direction path to configure
GsmL1_LogChParam_t logChParams; ///< Logical channel parameters
} setLogChParams;
///< Configure the ciphering parameters
struct
{
uint8_t u8Tn; ///< Time-slot [0..7]
GsmL1_SubCh_t subCh; ///< Sub-channel number (0x1F if not applicable)
GsmL1_Dir_t dir; ///< Direction path to configure
GsmL1_CipherId_t cipherId; ///< Ciphering algorithm
uint8_t u8Kc[8]; ///< 64-bit ciphering key
} setCipheringParams;
} GsmL1_ConfigParam_t;
#ifdef __cplusplus
}
#endif // extern "C"
#endif // GSML1TYPES_H__

479
api/superfemto.h Normal file
View File

@ -0,0 +1,479 @@
#ifndef SUPERFEMTO_H__
#define SUPERFEMTO_H__
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
/****************************************************************************
* Includes *
****************************************************************************/
#include <stdint.h>
#include "gsml1const.h"
/****************************************************************************
* Const *
****************************************************************************/
/****************************************************************************
* Enum: SuperFemto_Status_t
************************************************************************//**
*
* Status used by the SuperFemto.
*
* @ingroup superfemto_api
*
****************************************************************************/
typedef GsmL1_Status_t SuperFemto_Status_t;
/****************************************************************************
* Enum : SuperFemto_PrimId_t
************************************************************************//**
*
* System management primitives.
*
* @ingroup superfemto_api
*
****************************************************************************/
typedef enum SuperFemto_PrimId_t
{
SuperFemto_PrimId_SystemInfoReq, ///< Request system information
SuperFemto_PrimId_SystemInfoCnf, ///< Confirm system information
SuperFemto_PrimId_SystemFailureInd, ///< System failure indication
SuperFemto_PrimId_ActivateRfReq, ///< Request activation of the RF section
SuperFemto_PrimId_ActivateRfCnf, ///< Confirm activation of the RF section
SuperFemto_PrimId_DeactivateRfReq, ///< Request deactivation of the RF section
SuperFemto_PrimId_DeactivateRfCnf, ///< Confirm deactivation of the RF section
SuperFemto_PrimId_SetTraceFlagsReq, ///< Set the verbosity of the system
SuperFemto_PrimId_RfClockInfoReq, ///< Request information about the RF clock sub-system
SuperFemto_PrimId_RfClockInfoCnf, ///< Returns the RF clock sub-system information
SuperFemto_PrimId_RfClockSetupReq, ///< Configure the RF clock sub-system
SuperFemto_PrimId_RfClockSetupCnf, ///< Confirm the configuration of the RF clock sub-system
SuperFemto_PrimId_Layer1ResetReq, ///< Trigger a reset of the GSM layer 1 library
SuperFemto_PrimId_Layer1ResetCnf, ///< Confirm that the GSM layer 1 library was reset
SuperFemto_PrimId_NUM
} SuperFemto_PrimId_t;
/****************************************************************************
* Types *
****************************************************************************/
/****************************************************************************
* Struct : SuperFemto_SystemInfoCnf_t
************************************************************************//**
*
* Structure is used to confirm the information about the system.
*
* @ingroup superfemto_api_prim_sys
*
****************************************************************************/
typedef struct SuperFemto_SystemInfoCnf
{
SuperFemto_Status_t status; ///< Status
struct
{
uint8_t major; ///< DSP firmware major version number
uint8_t minor; ///< DSP firmware minor version number
uint8_t build; ///< DSP firmware build version number
} dspVersion;
struct
{
uint8_t major; ///< FPGA firmware major version number
uint8_t minor; ///< FPGA firmware minor version number
uint8_t build; ///< FPGA firmware build version number
} fpgaVersion;
#ifdef HW_SYSMOBTS_V1
struct
{
uint8_t gsm850; ///< Support GSM-850 band (0:unsupported, 1:supported)
uint8_t gsm900; ///< Support GSM-900 band (0:unsupported, 1:supported)
uint8_t dcs1800; ///< Support GSM-1800 band (0:unsupported, 1:supported)
uint8_t pcs1900; ///< Support GSM-1900 band (0:unsupported, 1:supported)
} rfBand;
struct
{
uint8_t txvcxo; ///< TCVCXO presence flag
uint8_t ocvcxo; ///< OCVCXO presence flag
uint16_t u12ClkVc; ///< Current voltage control value
} rfClock;
#endif
} SuperFemto_SystemInfoCnf_t;
/****************************************************************************
* Struct : SuperFemto_SystemFailureInd_t
************************************************************************//**
*
* Structure is used to indicate a system failure.
*
* @ingroup superfemto_api_prim_sys
*
****************************************************************************/
typedef struct SuperFemto_SystemFailureInd
{
SuperFemto_Status_t status; ///< Status
} SuperFemto_SysemFailureInd_t;
/****************************************************************************
* Struct : SuperFemto_ActivateRfReq_t
************************************************************************//**
*
* This primitive is used to request the activation the RF section of the system.
*
* @ingroup superfemto_api
*
***************************************************************************/
typedef struct SuperFemto_ActivateRfReq
{
// Timing source (FN/TN)
struct
{
uint8_t u8TimSrc; ///< Timing source (0:Slave/Get timing from remote master BTS, 1:Master/Generates its own timing)
} timing;
// Message queue options
struct {
uint8_t u8UseTchMsgq; ///< Set to '1' to use a separate MSGQUEUE for TCH primitives
uint8_t u8UsePdtchMsgq; ///< Set to '1' to use a separate MSGQUEUE for PDTCH primitives
} msgq;
// TRX RF clock options
struct
{
int iClkCor; ///< Clock correction value in PPB.
uint8_t u8ClkSrc; ///< Clock source (0:None, 1:OCXO, 2:TCXO, 3:External, 4:GPS PPS, 5:reserved, 6:RX)
} rfTrx;
// RX RF clock options
struct
{
int iClkCor; ///< Clock calibration value in PPB.
uint8_t u8ClkSrc; ///< Clock source (0:None, 1:OCXO, 2:TCXO, 3:External, 4:GPS PPS, 5:TRX, 6:reserved)
} rfRx;
} SuperFemto_ActivateRfReq_t;
/****************************************************************************
* Struct : FemtoBts_ActivateRfReq_t
************************************************************************//**
*
* This primitive is used to request the activation the RF section of the system.
*
* @ingroup superfemto_api
*
***************************************************************************/
typedef struct FemtoBts_ActivateRfReq
{
uint16_t u12ClkVc; /**< Initial clock voltage control value
or 0xFFFF to use the defaultvalue */
} FemtoBts_ActivateRfReq_t;
/****************************************************************************
* Struct : SuperFemto_ActivateRfCnf_t
************************************************************************//**
*
* This primitive is used to confirm the activation the RF section of the system.
*
* @ingroup superfemto_api
*
***************************************************************************/
typedef struct SuperFemto_ActivateRfCnf
{
SuperFemto_Status_t status; ///< Status
} SuperFemto_ActivateRfCnf_t;
/****************************************************************************
* Struct : SuperFemto_DeactivateRfCnf_t
************************************************************************//**
*
* This primitive is used to confirm the deactivation the RF section of the system.
*
* @ingroup superfemto_api
*
***************************************************************************/
typedef struct SuperFemto_DeactivateRfCnf
{
SuperFemto_Status_t status; ///< Status
} SuperFemto_DeactivateRfCnf_t;
/****************************************************************************
* Struct : SuperFemto_SetTraceFlagsReq_t
************************************************************************//**
*
* This primitive is used to setup the trace flag values.
*
* @ingroup superfemto_api_prim_dbg
*
***************************************************************************/
typedef struct SuperFemto_SetTraceFlagsReq
{
uint32_t u32Tf; ///< Trace flag level
} SuperFemto_SetTraceFlagsReq_t;
/****************************************************************************
* Struct : FemtoBts_RfClockInfoReq
************************************************************************//**
*
* This primitive is used to retrive information about the RF clock
*
* @ingroup superfemto_api_prim_dbg
*
***************************************************************************/
typedef struct FemtoBts_RfClockInfoReq
{
uint8_t u8RstClkErrCnt; ///< When set, it resets the clk error counter module
} FemtoBts_RfClockInfoReq_t;
/****************************************************************************
* Struct : SuperFemto_RfClockInfoReq
************************************************************************//**
*
* This primitive is used to retrive information about the RF clock
*
* @ingroup superfemto_api_prim_dbg
*
***************************************************************************/
typedef struct SuperFemto_RfClockInfoReq
{
uint8_t u8RstClkCal; ///< Set to '1' to reset the calibration module
} SuperFemto_RfClockInfoReq_t;
/****************************************************************************
* Struct : FemtoBts_RfClockSetupReq
************************************************************************//**
*
* This primitive is used to configure the RF clock sub-system.
*
* @ingroup superfemto_api_prim_dbg
*
***************************************************************************/
typedef struct FemtoBts_RfClockSetupReq
{
uint16_t u12ClkVc; /**< Clock voltage control value (12 bits DAC). */
} FemtoBts_RfClockSetupReq_t;
/****************************************************************************
* Struct : SuperFemto_RfClockSetupReq
************************************************************************//**
*
* This primitive is used to configure the RF clock sub-system.
*
* @ingroup superfemto_api_prim_dbg
*
***************************************************************************/
typedef struct SuperFemto_RfClockSetupReq
{
// TRX RF clock options
struct
{
int iClkCor; ///< Clock correction value in PPB.
uint8_t u8ClkSrc; ///< Clock source (0:None, 1:OCXO, 2:TCXO, 3:External, 4:GPS PPS, 5:reserved, 6:RX)
} rfTrx;
// RX RF clock options
struct
{
int iClkCor; ///< Clock calibration value in PPB.
uint8_t u8ClkSrc; ///< Clock source (0:None, 1:OCXO, 2:TCXO, 3:External, 4:GPS PPS, 5:TRX, 6:reserved)
} rfRx;
// RF clock calibration
struct {
uint8_t u8ClkSrc; ///< Reference clock source (0:Off, 1:OCXO, 2:TCXO, 3:External, 4:GPS PPS, 5:reserved, 6:reserved, 7:NL)
} rfTrxClkCal;
} SuperFemto_RfClockSetupReq_t;
/****************************************************************************
* Struct : SuperFemto_RfClockSetupCnf
************************************************************************//**
*
* This primitive is sent back to confirm the configuration of the RF clock sub-system.
*
* @ingroup superfemto_api_prim_dbg
*
***************************************************************************/
typedef struct SuperFemto_RfClockSetupCnf
{
SuperFemto_Status_t status; ///< Status of the RF-CLOCK-SETUP-REQ
} SuperFemto_RfClockSetupCnf_t;
/****************************************************************************
* Struct : FemtoBts_RfClockInfoCnf
************************************************************************//**
*
* This primitive is used to send back information on the RF clock sub-system.
*
* @ingroup superfemto_api_prim_dbg
*
***************************************************************************/
typedef struct FemtoBts_RfClockInfoCnf
{
uint8_t u8ClkErrValid; /**< Set when the parameter of this primitives are valid.
It won't be set if the system was unable to synchronize
to a surrounding basestation long enough */
float fClkErr; // Measured clock error (in ppm).
float fClkErrRes; /**< Indicates the resolution of the fErrPpm parameter (in ppm).
The resolution of the error depends on the period
(in frame) of the measurement. The longer the period,
the better is the resolution. */
} FemtoBts_RfClockInfoCnf_t;
/****************************************************************************
* Struct : SuperFemto_RfClockInfoCnf
************************************************************************//**
*
* This primitive is used to send back information on the RF clock sub-system.
*
* @ingroup superfemto_api_prim_dbg
*
***************************************************************************/
typedef struct SuperFemto_RfClockInfoCnf
{
// TRX RF clock options
struct
{
int iClkCor; ///< Clock correction value in PPB.
uint8_t u8ClkSrc; ///< Clock source (0:None, 1:OCXO, 2:TCXO, 3:External, 4:GPS PPS, 5:reserved, 6:RX)
} rfTrx;
// RX RF clock options
struct
{
int iClkCor; ///< Clock calibration value in PPB.
uint8_t u8ClkSrc; ///< Clock source (0:None, 1:OCXO, 2:TCXO, 3:External, 4:GPS PPS, 5:TRX, 6:reserved)
} rfRx;
// RF clock calibration
struct {
uint8_t u8ClkSrc; ///< Reference clock source (0:Off, 1:OCXO, 2:TCXO, 3:External, 4:GPS PPS, 5:reserved, 6:reserved, 7:NL)
int iClkErr; ///< RF clock error (PPB).
int iClkErrRes; ///< Clock error resolution (PPT).
} rfTrxClkCal;
} SuperFemto_RfClockInfoCnf_t;
/****************************************************************************
* Struct : SuperFemto_Layer1ResetReq_t
************************************************************************//**
*
* Structure is used to request a reset of the layer 1 module.
*
* @ingroup superfemto_api_prim_sys
*
****************************************************************************/
typedef struct SuperFemto_Layer1ResetReq
{
uint32_t u32Reserved;
} SuperFemto_Layer1ResetReq_t;
/****************************************************************************
* Struct : SuperFemto_Layer1ResetCnf_t
************************************************************************//**
*
* Structure is used to confirm the reset of the layer 1 module.
*
* @ingroup superfemto_api_prim_sys
*
****************************************************************************/
typedef struct SuperFemto_Layer1ResetCnf
{
GsmL1_Status_t status;
} SuperFemto_Layer1ResetCnf_t;
/****************************************************************************
* Struct : SuperFemto_Primt_t
************************************************************************//**
*
* System level primitive definition.
*
* @ingroup superfemto_api_prim_sys
*
****************************************************************************/
typedef struct SuperFemto_Prim
{
SuperFemto_PrimId_t id; ///< Primitive ID
union
{
SuperFemto_SystemInfoCnf_t systemInfoCnf; ///< Confirm system information
SuperFemto_SysemFailureInd_t sysemFailureInd; ///< System failure indication
#ifdef HW_SYSMOBTS_V1
FemtoBts_ActivateRfReq_t activateRfReq; ///< Request activation of the RF section
#else
SuperFemto_ActivateRfReq_t activateRfReq; ///< Request activation of the RF section
#endif
SuperFemto_ActivateRfCnf_t activateRfCnf; ///< Confirm activation of the RF section
SuperFemto_DeactivateRfCnf_t deactivateRfCnf; ///< Confirm deactivation of the RF section
SuperFemto_SetTraceFlagsReq_t setTraceFlagsReq; ///< Set the verbosity of the system
#ifdef HW_SYSMOBTS_V1
FemtoBts_RfClockInfoReq_t rfClockInfoReq; ///< Request information about the RF clock
FemtoBts_RfClockInfoCnf_t rfClockInfoCnf; ///< Returns information about the RF clock
FemtoBts_RfClockSetupReq_t rfClockSetupReq; ///< Setup the RF clock
#else
SuperFemto_RfClockInfoReq_t rfClockInfoReq; ///< Request information about the RF clock
SuperFemto_RfClockInfoCnf_t rfClockInfoCnf; ///< Returns information about the RF clock
SuperFemto_RfClockSetupReq_t rfClockSetupReq; ///< Setup the RF clock
#endif
SuperFemto_RfClockSetupCnf_t rfClockSetupCnf; ///< Confirm the setup of the RF clock
SuperFemto_Layer1ResetReq_t layer1ResetReq; ///< Request a reset of the layer 1 module
SuperFemto_Layer1ResetCnf_t layer1ResetCnf; ///< Conrifm that the layer 1 module was reset
} u;
} SuperFemto_Prim_t;
#ifdef _TMS320C6400
/****************************************************************************
* Public Functions *
****************************************************************************/
/****************************************************************************
* Function : SuperFemto_RxPrimCallback
************************************************************************//**
*
* SuperFemto primitive reception callback routine. Process primitives sent
* by the ARM processor.
*
* @param [in] pPrim
* Address of the buffer containing the received primitive.
*
* @return
* GsmL1_Status_Success or the error code
*
* @ingroup superfemto_api_prim_sys
*
****************************************************************************/
void SuperFemto_RxPrimCallback( SuperFemto_Prim_t *pPrim );
#endif // _TMS320C6400
#ifdef __cplusplus
}
#endif // extern "C"
#endif // SUPERFEMTO_H__

BIN
firmware/sysmobts-v1.bit Normal file

Binary file not shown.

BIN
firmware/sysmobts-v1.out Normal file

Binary file not shown.

BIN
firmware/sysmobts-v2.bit Normal file

Binary file not shown.

BIN
firmware/sysmobts-v2.out Normal file

Binary file not shown.