FreeCalypso > hg > fc-selenite
diff src/g23m-fad/rlp/rlp_sndf.c @ 1:d393cd9bb723
src/g23m-*: initial import from Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 15 Jul 2018 04:40:46 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/g23m-fad/rlp/rlp_sndf.c Sun Jul 15 04:40:46 2018 +0000 @@ -0,0 +1,317 @@ +/* ++----------------------------------------------------------------------------- +| Project : CSD (8411) +| Modul : Rlp_sndf.c ++----------------------------------------------------------------------------- +| Copyright 2002 Texas Instruments Berlin, AG +| All rights reserved. +| +| This file is confidential and a trade secret of Texas +| Instruments Berlin, AG +| The receipt of or possession of this file does not convey +| any rights to reproduce or disclose its contents or to +| manufacture, use, or sell anything it may describe, in +| whole, or in part, without the specific written consent of +| Texas Instruments Berlin, AG. ++----------------------------------------------------------------------------- +| Purpose : This Modul defines the procedures and functions for +| the component Radio Link Protocol of the base station ++----------------------------------------------------------------------------- +*/ + + +#ifndef RLP_SNDF_C +#define RLP_SNDF_C +#endif + +#define ENTITY_RLP + +/*==== INCLUDES ===================================================*/ + +#include <string.h> +#include "typedefs.h" +#include "vsi.h" +#include "macdef.h" +#include "custom.h" +#include "gsm.h" +#include "cus_rlp.h" +#include "prim.h" +#include "tok.h" +#include "rlp.h" + +#ifdef _TARGET_ + #include "ra_l1int.h" +#endif + +/*==== CONST =======================================================*/ + +/*==== TYPES =======================================================*/ + +/*==== VAR EXPORT ==================================================*/ + +/*==== VAR LOCAL ===================================================*/ + +/*==== FUNCTIONS ===================================================*/ + +/* ++------------------------------------------------------------------------------ +| Function : snd_sendDataToRA ++------------------------------------------------------------------------------ +| Description : send a RA_DATA_REQ primitive to RA. In the implementation +| this function uses the functional interface of the +| RA-Adaptation layer to pass the primitive to RA. +| +| +| Parameters : dataDesc +| +| +| Return : - ++------------------------------------------------------------------------------ +*/ + + +LOCAL void snd_sendDataToRA(T_FRAME_DESC *dataDesc) +{ +#ifdef _SIMULATION_ + + UBYTE i, j; + USHORT sduLen = (dataDesc->Len[0]+dataDesc->Len[1]+3)<<3; + + PALLOC_SDU (ra_data_req, RA_DATA_REQ, sduLen); + + TRACE_FUNCTION ("snd_sendDataToRA()"); + + ra_data_req->fr_type = FR_RLP; + ra_data_req->dtx_flg = DTX_DIS; + ra_data_req->sdu.l_buf = sduLen; + ra_data_req->sdu.o_buf = 0; + + j=0; + + for (i=0; i < dataDesc->Len[0]; i++) + ra_data_req->sdu.buf[j++] = dataDesc->Adr[0][i]; + + for (i=0; i < dataDesc->Len[1]; i++) + ra_data_req->sdu.buf[j++] = dataDesc->Adr[1][i]; + + ra_data_req->sdu.buf[rlp_data->snd.FrameSize - TRAILER_LEN] = 0x4f; + ra_data_req->sdu.buf[rlp_data->snd.FrameSize - TRAILER_LEN + 1] = 0x4f; + ra_data_req->sdu.buf[rlp_data->snd.FrameSize - TRAILER_LEN + 2] = 0x4f; + +#ifdef TRACE_RLP_FRAME + if (rlp_data->uplink_frame_trace) + { + ker_trace_rlp_frame((T_RLP_FRAMEPTR)ra_data_req->sdu.buf); + } +#endif + + PSENDX (RA, ra_data_req); + +#else /* _TARGET_ */ + /* + * use functional interface of RA + */ + T_RA_DATA_REQ RA_data_req; + + RA_data_req.fr_type = FR_RLP; + RA_data_req.dtx_flg = DTX_DIS; + RA_data_req.status = 0; + +#ifdef TRACE_RLP_FRAME + if (rlp_data->uplink_frame_trace) + { + ker_trace_rlp_frame((T_RLP_FRAMEPTR)datadesc->Adr[0]); + } +#endif + + l1i_ra_data_req (&RA_data_req, dataDesc); + +#endif /* _TARGET_ */ +} + +/* ++------------------------------------------------------------------------------ +| Function : snd_init ++------------------------------------------------------------------------------ +| Description : initialise the rlp data for the send formatter process +| +| Parameters : +| +| +| Return : ++------------------------------------------------------------------------------ +*/ + + +GLOBAL void snd_init(T_SND *snd) +{ + USHORT i; + + TRACE_FUNCTION ("snd_init()"); + + /* + * initialize the header only frame descriptor + */ + snd->HO_FrameDesc.Adr[0] = snd->HO_Frame; + snd->HO_FrameDesc.Len[0] = FRAME_SIZE_LONG; + snd->HO_FrameDesc.Adr[1] = NULL; + snd->HO_FrameDesc.Len[1] = 0; + +/* memset (rlp_data->snd.HO_Frame, 0x2b, FRAME_SIZE_LONG); */ + + for (i = 2; i < FRAME_SIZE_LONG; i++) + { + snd->HO_Frame[i] = 0x41 + i; + } + INIT_STATE (SND, SPDU_WAIT_EVENT); +} + +/* ++------------------------------------------------------------------------------ +| Function : snd_send_u_frame ++------------------------------------------------------------------------------ +| Description : build and send a U-Frame in uplink direction +| +| Parameters : frameType - +| pFBit - +| crBit - +| dataDesc - +| +| +| Return : - ++------------------------------------------------------------------------------ +*/ + +GLOBAL void snd_send_u_frame + ( + T_UF frameType, + T_BIT pFBit, + T_BIT crBit, + T_FRAME_DESC *dataDesc + ) +{ + UBYTE *frame; + + TRACE_FUNCTION ("snd_send_u_frame()"); + + if (dataDesc EQ NULL) + dataDesc = &rlp_data->snd.HO_FrameDesc; + + frame = dataDesc->Adr[0]; + + /* + * M5-M1 Bits (16, 15-11) + */ + frame[1] = (UBYTE) (frameType << 2); + /* + * P/F Bit (10) and Bit 9=1 + */ + frame[1] |= ((pFBit << 1) | 1); + /* + * Bits 8-2=1111100 Bit 1 = crBit + */ + frame[0] = (0xf8 | crBit); + + snd_sendDataToRA (dataDesc); +} + +/* ++------------------------------------------------------------------------------ +| Function : snd_send_s_frame ++------------------------------------------------------------------------------ +| Description : build and send a S-Frame in uplink direction +| +| Parameters : +| +| +| Return : ++------------------------------------------------------------------------------ +*/ + + +GLOBAL void snd_send_s_frame + ( + T_SF frameType, + T_FRAME_NUM nr, + T_BIT pFBit, + T_BIT crBit, + T_FRAME_DESC *dataDesc + ) +{ + UBYTE *frame; + + TRACE_FUNCTION ("snd_send_s_frame()"); + + if (dataDesc EQ NULL) + dataDesc = &rlp_data->snd.HO_FrameDesc; + + frame = dataDesc->Adr[0]; + /* + * N(R) Bits (16-11) + */ + frame[1] = (UBYTE) (nr << 2); + /* + * P/F Bit (10) and Bit 9=1 + */ + frame[1] |= ((pFBit << 1) | 1); + /* + * Bits 8-4=11111, Bits 3-2 = frameType, Bit 1 = crBit + */ + frame[0] = (0xf0 | (frameType << 1) | crBit); + + snd_sendDataToRA (dataDesc); +} + +/* ++------------------------------------------------------------------------------ +| Function : snd_send_si_frame ++------------------------------------------------------------------------------ +| Description : build and send a S+I-Frame in uplink direction +| +| Parameters : frameType - +| nr - +| pFBit - +| ns - +| crBit - +| dataDesc - +| +| Return : - ++------------------------------------------------------------------------------ +*/ + + +GLOBAL void snd_send_si_frame + ( + T_SF frameType, + T_FRAME_NUM nr, + T_BIT pFBit, + T_FRAME_NUM ns, + T_BIT crBit, + T_FRAME_DESC *dataDesc + ) +{ + UBYTE *frame; + + TRACE_FUNCTION ("snd_send_si_frame()"); + + if (dataDesc EQ NULL) + dataDesc = &rlp_data->snd.HO_FrameDesc; + + frame = dataDesc->Adr[0]; + + /* + * N(R) Bits (16-11) + */ + frame[1] = (UBYTE) (nr << 2); + /* + * P/F Bit (10) and Bit 9=ns(bit 0-4) + */ + frame[1] |= ((pFBit << 1) | (ns >> 5)); + /* + * Bits 8-4 = ns (bits 4-0), Bits 3-2 = frameType, Bit 1 = crBit + */ + frame[0] = ((ns << 3) | (frameType << 1) | crBit); + + snd_sendDataToRA (dataDesc); +} +