summaryrefslogtreecommitdiffstats
path: root/data/mnet/GP10/Host/Rlc_mac/include
diff options
context:
space:
mode:
Diffstat (limited to 'data/mnet/GP10/Host/Rlc_mac/include')
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/DLDataBlockPool.h74
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/DLRlcLink.h138
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/DLSignallingMsgQueue.h52
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/DLTbf.h107
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/DynamicAllocationStruct.h135
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/FixedAllocationStruct.h114
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/IeBase.h49
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MacHeader.h570
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MeasurementMappingStruct.h53
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgBase.h96
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketAccessReject.h134
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketCellChangeFailure.h83
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketCellChangeOrder.h138
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketControlAcknowledgement.h81
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketDownlinkAckNack.h96
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketDownlinkAssignment.h133
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketDownlinkDummyControlBlock.h68
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketMobileTBFStatus.h81
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketPDCHRelease.h67
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketPagingRequest.h114
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketPollingRequest.h83
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketPowerCtlTimingAdvance.h90
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketResourceRequest.h109
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketTBFRelease.h88
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketTimeslotReconfigure.h159
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketUplinkAckNack.h105
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketUplinkAssignment.h183
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/MsgPacketUplinkDummyControlBlock.h63
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/NCMeasurementStruct.h94
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/RlcMacCommon.h64
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/RlcMacConfig.h34
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/RlcMacMsgType.h143
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/RlcMacResult.h42
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/RlcMacTask.h187
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ScheduleAllocationInfo.h204
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ScheduleInfo.h97
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ScheduleQueue.h82
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/SingleBlockAllocationStruct.h76
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/TAITable.h47
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/TSPool.h213
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/Tbf.h83
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/TbfPool.h84
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/Timeslot.h178
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ULDataBlockPool.h74
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ULRlcLink.h114
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ULTbf.h95
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/USFTable.h50
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/bitstream.h129
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieARFCN.h68
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieARFCNIndexList.h64
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieAccessType.h66
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieAckNackDescription.h95
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieAllocationBitMap.h61
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieBSIC.h68
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieBtsPowerCtlMode.h64
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieChangeMark.h68
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieChannelCodingCommand.h88
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieChannelNeeded.h66
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieChannelRequestDescription.h66
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieFrequencyParameters.h105
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieGPRSMobileAllocation.h68
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieGlobalPacketTimingAdvance.h136
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieGlobalPowerControlParms.h192
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieGlobalTFI.h85
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieHSN.h67
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieLSAParameters.h76
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieMABitMap.h60
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieMACMode.h66
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieMAFreqList.h97
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieMAIO.h67
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieMANumber.h67
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieMSRadioAccessCapability.h169
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieMobileIdentity.h79
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieNLN.h59
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/iePO.h58
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/iePRMode.h64
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/iePTMSI.h68
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/iePacketReqRef.h74
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/iePacketTimingAdvance.h106
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/iePageMode.h66
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/iePersistenceLevel.h65
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/iePowerControlParameters.h78
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieRFLNumberList.h64
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieRLCBlocksGranted.h59
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieRLCMode.h65
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieStartFrameNum.h109
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieTFI.h69
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieTLLI.h69
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieTMSI.h68
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieTQI.h60
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieTSC.h67
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieTimeslotAllocation.h58
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/ieeMLPPPriority.h71
-rw-r--r--data/mnet/GP10/Host/Rlc_mac/include/msgL1.h505
94 files changed, 9363 insertions, 0 deletions
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/DLDataBlockPool.h b/data/mnet/GP10/Host/Rlc_mac/include/DLDataBlockPool.h
new file mode 100644
index 0000000..5e1f934
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/DLDataBlockPool.h
@@ -0,0 +1,74 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : DLDataBlockPool.h
+// Author(s) : Tim Olson
+// Create Date : 1/5/2001
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __DLDATABLOCKPOOL_H__
+#define __DLDATABLOCKPOOL_H__
+
+#include "bitstream.h"
+#include "MacHeader.h"
+#include "ieChannelCodingCommand.h"
+
+// Max RLC PDU size is 1560. Minus header for CS-1 18 bytes may be sent.
+// For safety add a few extra and 100 should be good.
+#define MAX_RL_BLOCKS_PER_PDU 100
+// *******************************************************************
+// class DLDataBlock
+//
+// Description
+//
+// *******************************************************************
+class DLDataBlock {
+public:
+ DLDataBlock(): next(0), streamOutLen(0), dlHeaderLen(0) {}
+ ~DLDataBlock() {}
+ void DisplayDataBlock();
+
+ friend class DLDataBlockPool;
+
+ unsigned char streamOut[MAX_RLC_DATA_MSG];
+ int streamOutLen;
+ DLMacHeader dlHeader;
+ int dlHeaderLen;
+ IeChannelCodingCommand chanCoding;
+private:
+ DLDataBlock *next;
+ static DbgOutput MsgDisplayObj;
+};
+
+
+// *******************************************************************
+// class DLDataBlockPool
+//
+// Description
+//
+// *******************************************************************
+class DLDataBlockPool {
+public:
+ // Constructor
+ DLDataBlockPool();
+ // Destructor
+ ~DLDataBlockPool();
+
+ DLDataBlock *GetDLDataBlock();
+ void ReturnDLDataBlock(DLDataBlock *pDlDataBlock);
+
+private:
+ DLDataBlock *head, *tail;
+};
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/DLRlcLink.h b/data/mnet/GP10/Host/Rlc_mac/include/DLRlcLink.h
new file mode 100644
index 0000000..a803e89
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/DLRlcLink.h
@@ -0,0 +1,138 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : DLRlcLink.h
+// Author(s) : Tim Olson
+// Create Date : 12/1/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __DLRLCLINK_H__
+#define __DLRLCLINK_H__
+
+#include "Os/JCCTimer.h"
+#include "RlcMacCommon.h"
+#include "DLDataBlockPool.h"
+#include "bssgp/bssgp_api.h"
+#include "ieChannelCodingCommand.h"
+#include "MsgPacketDownlinkAckNack.h"
+#include "MsgPacketControlAcknowledgement.h"
+
+#define XMT_WINDOW_SIZE_K 64
+
+// Forward declaration.
+class DLTbf;
+
+#define T3191_VALUE GetMibValueInt(MIB_t3191)*10 // in 100's of ms
+#define T3193_VALUE GetMibValueInt(MIB_t3193) // in 100's of ms
+#define T3195_VALUE GetMibValueInt(MIB_t3195)*10 // in 100's of ms
+
+// *******************************************************************
+// class DLRlcLink
+//
+// Description
+//
+// *******************************************************************
+class DLRlcLink {
+public:
+
+ typedef enum
+ {
+ ACKNOWLEDGED_RLC_MODE,
+ UNACKNOWLEDGED_RLC_MODE
+ } RLC_MODE;
+
+ typedef enum
+ {
+ NACKED,
+ PENDING_ACK,
+ ACKED,
+ INVALID
+ } ACKNOWLEDGE_STATUS;
+
+ // Constructor
+ DLRlcLink();
+ // Destructor
+ ~DLRlcLink() {}
+
+ JC_STATUS EstablishRLCLink(DLTbf *pDlTbf, RLC_MODE mode);
+ JC_STATUS ReestablishRLCLink(DLTbf *pDlTbf, RLC_MODE mode);
+ void UpdateTSSpecificData();
+ JC_STATUS AbnormalRelease();
+ DLDataBlock *GetDLRlcBlock(unsigned char &ctrlAckTag, char &burstType, int reqTrx, int reqTs);
+ bool SetPollingBit(DLDataBlock *pDlDataBlock, unsigned char &ctrlAckTag, char &burstType, int reqTrx, int reqTs);
+ DLDataBlock *BuildDLRlcBlock();
+ bool SegmentLLCPdu(DLDataBlock *pDlDataBlock, int &bytesCopied);
+ bool ReallocateDLResources();
+ DLDataBlock *RetransmitNackedDLRlcBlock();
+ DLDataBlock *RetransmitPendingAckDLRlcBlock();
+ void ReceiveDLAckNack(MsgPacketDownlinkAckNack *pCtrlMsg);
+ void ReceivePacketControlAck(MsgPacketControlAcknowledgement *pCtrlMsg, unsigned char ta);
+ void ReceivePacketControlNack();
+ JC_STATUS SendPacketPowerControlTimingAdvance(unsigned char ta);
+ JC_STATUS SendPacketPollingRequest();
+ bool GetNextLLCPdu();
+ bool MoreLLCPdusAvailable(BSSGP_DL_UNITDATA_MSG **pDlUnitData);
+ void ProcessT3195Expiry();
+ void ProcessT3191Expiry();
+ void ProcessT3193Expiry();
+ void ProcessActivityTimerExpiry();
+ void ReleaseDataBlocks();
+ void SetCurrentCodingRate(IeChannelCodingCommand::CHANNEL_CODING_COMMAND rate)
+ { chanCoding.SetChannelCodingCommand(rate); }
+ IeChannelCodingCommand::CHANNEL_CODING_COMMAND GetCurrentCodingRate()
+ { return(chanCoding.GetChannelCodingCommand()); }
+ void ShowRlcLinkInfo();
+ bool IsT3193Running() { return (isT3193Running); }
+ void CancelT3193() { pT3193->cancelTimer(); isT3193Running = FALSE; }
+
+ static int T3195TimerExpiry(int tbfPointer);
+ static int T3191TimerExpiry(int tbfPointer);
+ static int T3193TimerExpiry(int tbfPointer);
+ static int ActivityTimerExpiry(int tbfPointer);
+ static DLDataBlockPool sysDlDataBlockPool;
+
+private:
+ RLC_MODE rlcMode; // ACK or non ACK mode
+ int k; // Window size
+ int vS; // Send state variable
+ int vCS; // Control send state variable
+ DLDataBlock *pDlBlocks[RLC_MOD_VAL];
+ int lastPendingAckXmit;
+ bool lastBlockSentOnPollTs;
+ int lastDataBlock;
+ IeChannelCodingCommand chanCoding;
+ int n3105;
+ int numBlocksSincePoll;
+ int dlAssignCnt;
+ bool pollOnActivation;
+
+ // Only valid for acknowledged mode.
+ int vA; // Acknowledged state variable
+ ACKNOWLEDGE_STATUS vB[RLC_MOD_VAL]; // Acknowledged state array
+ DLTbf *pAssociatedTbf;
+
+ // Next PDU for segmentation.
+ char * llcPdu;
+ int llcPduLen;
+ int currPduByte;
+
+ int N3105_MAX;
+ static int dlAssignCntMax;
+ JCCTimer *pT3195;
+ JCCTimer *pT3191;
+ JCCTimer *pT3193;
+ JCCTimer *pActivityTimer;
+ bool isT3193Running;
+};
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/DLSignallingMsgQueue.h b/data/mnet/GP10/Host/Rlc_mac/include/DLSignallingMsgQueue.h
new file mode 100644
index 0000000..7dd016d
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/DLSignallingMsgQueue.h
@@ -0,0 +1,52 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : DLSignallingMsgQueue.h
+// Author(s) : Tim Olson
+// Create Date : 12/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __DLSIGNALLINGMSGQUEUE_H__
+#define __DLSIGNALLINGMSGQUEUE_H__
+
+#include "GP10Err.h"
+#include "msgL1.h"
+
+#define MAX_DL_SIGNALLING_QUEUE_ENTRIES 5
+
+// *******************************************************************
+// class DLSignallingMsgQueue
+//
+// Description
+//
+// *******************************************************************
+class DLSignallingMsgQueue {
+public:
+ DLSignallingMsgQueue() : qHead(0), qTail(0), numEntries(0) {}
+ ~DLSignallingMsgQueue() {}
+
+ JC_STATUS QueueDLSignallingMsg
+ (
+ MsgPacchReq *l1Msg
+ );
+
+ MsgPacchReq *DequeueDLSignallingMsg();
+
+
+private:
+ MsgPacchReq pacchMsg[MAX_DL_SIGNALLING_QUEUE_ENTRIES];
+ int qHead, qTail;
+ int numEntries;
+};
+
+
+#endif
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/DLTbf.h b/data/mnet/GP10/Host/Rlc_mac/include/DLTbf.h
new file mode 100644
index 0000000..849df94
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/DLTbf.h
@@ -0,0 +1,107 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : DLTbf.h
+// Author(s) : Tim Olson
+// Create Date : 12/1/2000
+// Description :
+//
+// *******************************************************************
+
+#ifndef __DLTBF_H__
+#define __DLTBF_H__
+
+#include "Tbf.h"
+#include "bssgp/bssgp_api.h"
+#include "DLRlcLink.h"
+
+
+// *******************************************************************
+// class DLTbf
+//
+// Description
+//
+// *******************************************************************
+class DLTbf : public Tbf {
+public:
+
+ const int ControlAckTagArrDepth = 5 * 8; // Max is 5 * num timeslots
+
+ // Constructor
+ DLTbf() : Tbf() {};
+ // Destructor
+ ~DLTbf() {}
+
+ JC_STATUS EstablishDLTbf(BSSGP_DL_UNITDATA_MSG *pUnitDataMsg, bool ctrkAck);
+ JC_STATUS ReestablishDLTbf(BSSGP_DL_UNITDATA_MSG *pUnitDataMsg, bool ctrkAck);
+ void UpdateTSSpecificData();
+ JC_STATUS ReleaseDLTbf(bool deactivateDsp);
+ JC_STATUS InternalReleaseDLTbf();
+ JC_STATUS AbnormalReleaseDLTbf();
+
+ unsigned char GetControlAckTag() { return(ctlAckTag[currAckTag]); }
+ void ClearControlAckTag()
+ {
+ for (int i=0; i<ControlAckTagArrDepth; i++)
+ ctlAckTag[i] = CTL_ACK_TAG_NOT_APPLICABLE;
+ currAckTag=0;
+ }
+ unsigned char SetControlAckTag()
+ {
+ currAckTag = (++currAckTag) % currNumAckTags;
+ ctlAckTag[currAckTag] = (++sysCtlAckCount != CTL_ACK_TAG_NOT_APPLICABLE ? sysCtlAckCount : ++sysCtlAckCount);
+ return (ctlAckTag[currAckTag]);
+ }
+
+ bool CheckControlAckTag(unsigned char tag)
+ {
+ for (int i=0; i<currNumAckTags; i++)
+ if (ctlAckTag[i] == tag) return (TRUE);
+ return (FALSE);
+ }
+
+ void ShowTBFInfo();
+
+ /*
+ * NOTE: In the following accessors, convert class values to ensure Class 1 gets value=1, Class 2
+ * gets 2, etc., as described in GSM 03.60, Section 15. The Scheduler assumes this to index arrays.
+ */
+ int GetDelayClass(void) const
+ {
+ return(qosParams.delay_class-CNI_RIL3_QOS_DELAY_CLASS_1+1);
+ }
+ int GetPrecedenceClass(void) const
+ {
+ return(qosParams.precedence_class-CNI_RIL3_QOS_PRECEDENCE_CLASS_HIGH_PRIORITY+1);
+ }
+ int GetPeakThroughputClass(void) const
+ {
+ return(qosParams.peak_throughput-CNI_RIL3_QOS_PEAK_THROUGHPUT_1_KBPS+1);
+ }
+ int GetMultislotClass(void) const;
+
+ T_RIL3_IE_QOS_PROFILE_ID qosProfile;
+ T_CNI_RIL3_IE_QOS qosParams;
+ T_CNI_RIL3_IE_MS_RADIO_ACCESS_CAPABILITY raCapability;
+ T_CNI_RIL3_IE_DRX_PARAMETER drxParams;
+ T_CNI_RIL3_IE_MOBILE_ID msId;
+ RIL3_IE_PRIORITY priority;
+ DLRlcLink rlcLink;
+ bool controlAck;
+
+private:
+
+ // Control message acknowledgement tags.
+ unsigned char ctlAckTag[ControlAckTagArrDepth];
+ int currAckTag;
+ int currNumAckTags;
+};
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/DynamicAllocationStruct.h b/data/mnet/GP10/Host/Rlc_mac/include/DynamicAllocationStruct.h
new file mode 100644
index 0000000..f5aaef3
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/DynamicAllocationStruct.h
@@ -0,0 +1,135 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : DynamicAllocationStruct.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __DYNAMICALLOCATIONSTRUCT_H__
+#define __DYNAMICALLOCATIONSTRUCT_H__
+
+#include "logging\vclogging.h"
+#include "bitstream.h"
+#include "RlcMacCommon.h"
+#include "ieStartFrameNum.h"
+#include "ieRLCBlocksGranted.h"
+#include "iePO.h"
+#include "iePRMode.h"
+#include "ieTFI.h"
+
+
+// *******************************************************************
+// class DynamicAllocationStruct
+//
+// Description:
+// Dynamic Allocation Struct -- GSM04.60 11.2.29
+//
+// <Dynamic Allocation struct > ::=
+// < Extended Dynamic Allocation : bit (1) >
+// { 0 | 1 < P0 : bit (4) >
+// < PR_MODE : bit (1) > }
+// < USF_GRANULARITY : bit (1) >
+// { 0 | 1 < UPLINK_TFI_ASSIGNMENT : bit (5) > }
+// { 0 | 1 < RLC_DATA_BLOCKS_GRANTED : bit (8) > }
+// { 0 | 1 < TBF Starting Time : < Starting Frame Number Description IE > > }
+// { 0 -- Timeslot Allocation
+// { 0 | 1 < USF_TN0 : bit (3) > }
+// { 0 | 1 < USF_TN1 : bit (3) > }
+// { 0 | 1 < USF_TN2 : bit (3) > }
+// { 0 | 1 < USF_TN3 : bit (3) > }
+// { 0 | 1 < USF_TN4 : bit (3) > }
+// { 0 | 1 < USF_TN5 : bit (3) > }
+// { 0 | 1 < USF_TN6 : bit (3) > }
+// { 0 | 1 < USF_TN7 : bit (3) > }
+// | 1 -- Timeslot Allocation with Power Control Parameters
+// < ALPHA : bit (4) >
+// { 0 | 1 < USF_TN0 : bit (3) >
+// < GAMMA_TN0 : bit (5) > }
+// { 0 | 1 < USF_TN1 : bit (3) >
+// < GAMMA_TN1 : bit (5) > }
+// { 0 | 1 < USF_TN2 : bit (3) >
+// < GAMMA_TN2 : bit (5) > }
+// { 0 | 1 < USF_TN3 : bit (3) >
+// < GAMMA_TN3 : bit (5) > }
+// { 0 | 1 < USF_TN4 : bit (3) >
+// < GAMMA_TN4 : bit (5) > }
+// { 0 | 1 < USF_TN5 : bit (3) >
+// < GAMMA_TN5 : bit (5) > }
+// { 0 | 1 < USF_TN6 : bit (3) >
+// < GAMMA_TN6 : bit (5) > }
+// { 0 | 1 < USF_TN7 : bit (3) >
+// < GAMMA_TN7 : bit (5) > } } ;
+// *******************************************************************
+
+typedef struct
+{
+ bool isValid;
+ unsigned char usf;
+} TimeslotAllocationEntry;
+
+typedef struct
+{
+ bool isValid;
+ unsigned char usf;
+ unsigned char gamma;
+} TimeslotAllocationWithPowerEntry;
+
+class DynamicAllocationStruct {
+public:
+
+ typedef enum
+ {
+ DYNAMIC_ALLOCATION,
+ EXTENDED_DYNAMIC_ALLOCATION,
+ } ALLOCATION_TYPE;
+
+ typedef enum
+ {
+ ONE_RLC_MAC_BLOCK,
+ FOUR_RLC_MAC_BLOCKS
+ } USF_GRANULARITY;
+
+ ALLOCATION_TYPE allocType;
+ IePO po;
+ IePRMode prMode;
+ USF_GRANULARITY usfGranularity;
+ IeRLCBlocksGranted rlcBlocksGranted;
+ IeTFI uplinkTFI;
+ IeStartFrameNum startTime;
+ struct TimeslotAllocationStruct
+ {
+ bool isValid;
+ TimeslotAllocationEntry tsAllocEntry[MAX_TIMESLOTS];
+ } timeslotAllocation;
+ struct TimeslotAllocationWithPowerStruct
+ {
+ bool isValid;
+ unsigned char alpha;
+ TimeslotAllocationWithPowerEntry tsAllocWithPowerEntry[MAX_TIMESLOTS];
+ } timeslotAllocationWithPower;
+ bool isValid;
+
+ // Default constructor
+ DynamicAllocationStruct() : isValid(FALSE), po(), prMode(), uplinkTFI(),
+ startTime(), rlcBlocksGranted(), allocType(EXTENDED_DYNAMIC_ALLOCATION),
+ usfGranularity(ONE_RLC_MAC_BLOCK)
+ {
+ timeslotAllocation.isValid = FALSE;
+ timeslotAllocationWithPower.isValid = FALSE;
+ }
+
+ RlcMacResult EncodeDynamicAllocationStruct(BitStreamOut &dataStream);
+ void DisplayDynamicAllocationStruct(DbgOutput *outObj);
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/FixedAllocationStruct.h b/data/mnet/GP10/Host/Rlc_mac/include/FixedAllocationStruct.h
new file mode 100644
index 0000000..abef5db
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/FixedAllocationStruct.h
@@ -0,0 +1,114 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : FixedAllocationStruct.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __FIXEDALLOCATIONSTRUCT_H__
+#define __FIXEDALLOCATIONSTRUCT_H__
+
+#include "logging\vclogging.h"
+#include "bitstream.h"
+#include "RlcMacCommon.h"
+#include "ieStartFrameNum.h"
+#include "ieRLCBlocksGranted.h"
+#include "iePO.h"
+#include "iePRMode.h"
+#include "ieTFI.h"
+#include "ieAllocationBitMap.h"
+#include "iePowerControlParameters.h"
+#include "ieTimeslotAllocation.h"
+#include "ieBtsPowerCtlMode.h"
+
+
+// *******************************************************************
+// class FixedAllocationStruct
+//
+// Description:
+// Dynamic Allocation Struct -- GSM04.60 11.2.29
+//
+// <Fixed Allocation struct > ::=
+// { 0 | 1 < UPLINK_TFI_ASSIGNMENT : bit (5) > }
+// < FINAL_ALLOCATION : bit (1) >
+// < DOWNLINK_CONTROL_TIMESLOT: bit (3) >
+// { 0 | 1 < P0 : bit (4) >
+// < BTS_PWR_CTRL_MODE : bit (1) >
+// < PR_MODE : bit (1) > }
+// { 0 < TIMESLOT_ALLOCATION : bit (8) >
+// | 1 < Power Control Parameters : < Power Control Parameters IE > > }
+// < HALF_DUPLEX_MODE : bit (1) >
+// < TBF Starting Time : < Starting Frame Number Description IE > >
+// { 0 { 0 -- with length of Allocation Bitmap
+// < BLOCKS_OR_BLOCK_PERIODS : bit (1) >
+// < ALLOCATION_BITMAP_LENGTH : bit (7) >
+// < ALLOCATION_BITMAP : bit (val(ALLOCATION_BITMAP_LENGTH)) >
+// | 1 -- without length of Allocation Bitmap (fills remainder of the message)
+// < ALLOCATION_BITMAP : bit ** > }
+// ! < Message escape : 1 bit (*) = <no string> > } ;
+// *******************************************************************
+
+
+class FixedAllocationStruct {
+public:
+
+ typedef enum
+ {
+ NOT_LAST_ALLOCATION,
+ LAST_ALLOCATION
+ } FINAL_ALLOCATION;
+
+ typedef enum
+ {
+ NOT_HALF_DUPLEX,
+ HALF_DUPLEX
+ } HALF_DUPLEX_MODE;
+
+ typedef enum
+ {
+ BLOCKS,
+ BLOCK_PERIODS
+ } BLOCKS_OR_BLOCK_PERIODS;
+
+ IeTFI uplinkTFI;
+ FINAL_ALLOCATION finalAllocation;
+ unsigned char controlTimeslot;
+ struct PowerControlStruct
+ {
+ bool isValid;
+ IePO po;
+ IeBtsPowerCtlMode btsPowerCtlMode;
+ IePRMode prMode;
+ } powerControl;
+ IeTimeslotAllocation timeslotAllocation;
+ IePowerControlParameters powerControlParameters;
+ HALF_DUPLEX_MODE halfDuplexMode;
+ IeStartFrameNum startTime;
+ BLOCKS_OR_BLOCK_PERIODS allocationBitmapType;
+ IeAllocationBitMap allocationBitMap;
+ bool isValid;
+
+ // Default constructor
+ FixedAllocationStruct() : isValid(FALSE), uplinkTFI(),
+ finalAllocation(NOT_LAST_ALLOCATION), controlTimeslot(0),
+ timeslotAllocation(), powerControlParameters(), halfDuplexMode(HALF_DUPLEX),
+ startTime(), allocationBitmapType(BLOCKS), allocationBitMap()
+ {
+ powerControl.isValid = FALSE;
+ }
+
+ RlcMacResult EncodeFixedAllocationStruct(BitStreamOut &dataStream);
+ void DisplayFixedAllocationStruct(DbgOutput *outObj);
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/IeBase.h b/data/mnet/GP10/Host/Rlc_mac/include/IeBase.h
new file mode 100644
index 0000000..2e351af
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/IeBase.h
@@ -0,0 +1,49 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : IeBase.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEBASE_H__
+#define __IEBASE_H__
+
+#include "RlcMacMsgType.h"
+#include "logging\vclogging.h"
+
+// *******************************************************************
+// class IeBase
+//
+// Description
+//
+// *******************************************************************
+class IeBase {
+public:
+ RlcMacMsgType msgType;
+
+ // Constructor
+ IeBase() : isValid(FALSE) {}
+ // Destructor
+ ~IeBase() {}
+
+ bool IsValid()
+ {
+ return (isValid);
+ }
+
+protected:
+ bool isValid;
+};
+
+
+#endif
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MacHeader.h b/data/mnet/GP10/Host/Rlc_mac/include/MacHeader.h
new file mode 100644
index 0000000..b4d977c
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MacHeader.h
@@ -0,0 +1,570 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MacHeader.h
+// Author(s) : Tim Olson
+// Create Date : 11/22/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MACHEADER_H__
+#define __MACHEADER_H__
+
+#include "bitstream.h"
+#include "RlcMacCommon.h"
+#include "logging\vclogging.h"
+#include "logging\vcmodules.h"
+
+#define MAX_RLC_LENGTH_OCTETS 10
+#define INVALID_LENGTH_VAL 0xff
+
+// *******************************************************************
+// class MacHeader
+//
+// Description:
+// MAC layer header(s)
+//
+// *******************************************************************
+
+class ULMacHeader {
+public:
+
+ typedef enum
+ {
+ RLC_DATA_BLOCK,
+ RLC_CTRL_BLOCK_NO_OPT_OCTETS,
+ RLC_CTRL_BLOCK_OPT_OCTETS,
+ RESERVED
+ } PAYLOAD_TYPE;
+
+ typedef enum
+ {
+ ONE_CHAN_REQ,
+ TWO_OR_MORE_CHAN_REQ
+ } RETRY_BIT;
+
+ typedef enum
+ {
+ NOT_STALLED,
+ STALLED,
+ } STALL_INDICATOR;
+
+ typedef enum
+ {
+ TLLI_NOT_PRESENT,
+ TLLI_PRESENT
+ } TLLI_INDICATOR;
+
+ typedef enum
+ {
+ EXTENSION_OCTET_FOLLOWS,
+ NO_EXTENSION_OCTET
+ } EXTENSION_BIT;
+
+ typedef enum
+ {
+ NO_MORE_LLC_DATA,
+ MORE_LLC_DATA
+ } MORE_BIT;
+
+ ULMacHeader() {}
+
+ RlcMacResult DecodeULMacHeader(BitStreamIn &dataStream);
+ void DisplayDetails();
+
+ RlcMacResult SetPayloadType(PAYLOAD_TYPE val)
+ {
+ payloadType = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ PAYLOAD_TYPE GetPayloadType()
+ {
+ return (payloadType);
+ }
+
+ RlcMacResult SetRetryBit(RETRY_BIT val)
+ {
+ retryBit = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ RETRY_BIT GetRetryBit()
+ {
+ return (retryBit);
+ }
+
+ RlcMacResult SetStallIndicator(STALL_INDICATOR val)
+ {
+ stallInd = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ STALL_INDICATOR GetStallIndicator()
+ {
+ return (stallInd);
+ }
+
+ RlcMacResult SetCountdownVal(unsigned char val)
+ {
+ countdownVal = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ unsigned char GetCountdownVal()
+ {
+ return (countdownVal);
+ }
+
+ RlcMacResult SetTFI(unsigned char val)
+ {
+ tfi = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ unsigned char GetTFI()
+ {
+ return (tfi);
+ }
+
+ RlcMacResult SetTLLIIndicator(TLLI_INDICATOR val)
+ {
+ tlliInd = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ TLLI_INDICATOR GetTLLIIndicator()
+ {
+ return (tlliInd);
+ }
+
+ RlcMacResult SetBSN(unsigned char val)
+ {
+ bsn = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ unsigned char GetBSN()
+ {
+ return (bsn);
+ }
+
+ RlcMacResult SetExtensionBit(EXTENSION_BIT val)
+ {
+ extensionBit = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ EXTENSION_BIT GetExtensionBit()
+ {
+ return (extensionBit);
+ }
+
+ RlcMacResult SetTLLI(unsigned long val)
+ {
+ tlli = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ unsigned long GetTLLI()
+ {
+ return (tlli);
+ }
+
+ RlcMacResult AddLengthOctet(unsigned char length, MORE_BIT more, EXTENSION_BIT extBit)
+ {
+ if (++currLengthOctet < MAX_RLC_LENGTH_OCTETS)
+ {
+ LengthOctets[currLengthOctet].length = length;
+ LengthOctets[currLengthOctet].moreBit = more;
+ LengthOctets[currLengthOctet].extensionBit = extBit;
+ }
+
+ return (RLC_MAC_SUCCESS);
+ }
+
+ bool GetCurrentLengthOctet(unsigned char *length, MORE_BIT *more, EXTENSION_BIT *extBit)
+ {
+ if (currLengthOctet < MAX_RLC_LENGTH_OCTETS)
+ {
+ *length = LengthOctets[currLengthOctet].length;
+ *more = LengthOctets[currLengthOctet].moreBit;
+ *extBit = LengthOctets[currLengthOctet].extensionBit;
+ return (TRUE);
+ }
+ else
+ {
+ return (FALSE);
+ }
+ }
+
+ bool GetNextLengthOctet(unsigned char *length, MORE_BIT *more, EXTENSION_BIT *extBit)
+ {
+ if (++currLengthOctet < MAX_RLC_LENGTH_OCTETS)
+ {
+ *length = LengthOctets[currLengthOctet].length;
+ *more = LengthOctets[currLengthOctet].moreBit;
+ *extBit = LengthOctets[currLengthOctet].extensionBit;
+ return (TRUE);
+ }
+ else
+ {
+ return (FALSE);
+ }
+ }
+
+ void ResetCurrLengthOctet()
+ {
+ currLengthOctet=0;
+ }
+
+private:
+ PAYLOAD_TYPE payloadType;
+ RETRY_BIT retryBit;
+ STALL_INDICATOR stallInd;
+ unsigned char countdownVal;
+ unsigned char tfi;
+ TLLI_INDICATOR tlliInd;
+ unsigned char bsn;
+ EXTENSION_BIT extensionBit;
+ struct
+ {
+ unsigned char length;
+ MORE_BIT moreBit;
+ EXTENSION_BIT extensionBit;
+ } LengthOctets[MAX_RLC_LENGTH_OCTETS];
+ int currLengthOctet;
+ unsigned long tlli;
+
+ // Logger object for displayig header.
+ static DbgOutput HdrDisplayDetailObj;
+};
+
+
+class DLMacHeader {
+public:
+
+ typedef enum
+ {
+
+ RLC_DATA_BLOCK,
+ RLC_CTRL_BLOCK_NO_OPT_OCTETS,
+ RLC_CTRL_BLOCK_OPT_OCTETS,
+ RESERVED
+ } PAYLOAD_TYPE;
+
+ typedef enum
+ {
+ FN_N_13,
+ FN_N_17_OR_N_18,
+ FN_N_21_OR_N_22,
+ FN_N_26
+ } RRBP;
+
+ typedef enum
+ {
+ RRBP_NOT_VALID,
+ RRBP_VALID
+ } SUPPLEMENTARY_POLLING_BIT;
+
+ typedef enum
+ {
+ NOT_FINAL_SEGMENT,
+ FINAL_SEGMENT
+ } FINAL_SEGMENT_BIT;
+
+ typedef enum
+ {
+ TFI_D_NOT_PRESENT,
+ TFI_D_PRESENT
+ } ADDRESS_CONTROL_BIT;
+
+ typedef enum
+ {
+ MODEA_0_2_OR_MODEB_0_6_DB,
+ MODEA_4_6_OR_MODEB_8_14_DB,
+ MODEA_8_10_OR_MODEB_16_22_DB,
+ MODEA_NOT_USABLE_OR_MODEB_24_30_DB
+ } POWER_REDUCTION;
+
+ typedef enum
+ {
+ UPLINK_TBF,
+ DOWNLINK_TBF
+ } DIRECTION_BIT;
+
+ typedef enum
+ {
+ NOT_LAST_RLC_BLOCK,
+ LAST_RLC_BLOCK
+ } FINAL_BLOCK_INDICATOR;
+
+ typedef enum
+ {
+ EXTENSION_OCTET_FOLLOWS,
+ NO_EXTENSION_OCTET
+ } EXTENSION_BIT;
+
+ typedef enum
+ {
+ NO_MORE_LLC_DATA,
+ MORE_LLC_DATA
+ } MORE_BIT;
+
+ DLMacHeader() : currLengthOctet(0) {}
+
+ RlcMacResult EncodeDLMacHeader(BitStreamOut &dataStream);
+ void DisplayDetails();
+
+ RlcMacResult SetPayloadType(PAYLOAD_TYPE val)
+ {
+ payloadType = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ PAYLOAD_TYPE GetPayloadType()
+ {
+ return (payloadType);
+ }
+
+ RlcMacResult SetRRBP(RRBP val)
+ {
+ rrbp = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ RRBP GetRRBP()
+ {
+ return (rrbp);
+ }
+
+ RlcMacResult SetSPBit(SUPPLEMENTARY_POLLING_BIT val)
+ {
+ spBit = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ SUPPLEMENTARY_POLLING_BIT GetSPBit()
+ {
+ return (spBit);
+ }
+
+ RlcMacResult SetUSF(unsigned char val)
+ {
+ usf = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ unsigned char GetUSF()
+ {
+ return (usf);
+ }
+
+ RlcMacResult SetRBSN(unsigned char val)
+ {
+ rbsn = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ unsigned char GetRBSN()
+ {
+ return (rbsn);
+ }
+
+ RlcMacResult SetRTI(unsigned char val)
+ {
+ rti = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ unsigned char GetRTI()
+ {
+ return (rti);
+ }
+
+ RlcMacResult SetFinalSegment(FINAL_SEGMENT_BIT val)
+ {
+ finalSegBit = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ FINAL_SEGMENT_BIT GetFinalSegment()
+ {
+ return (finalSegBit);
+ }
+
+ RlcMacResult SetAddressControl(ADDRESS_CONTROL_BIT val)
+ {
+ acBit = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ ADDRESS_CONTROL_BIT GetAddressControl()
+ {
+ return (acBit);
+ }
+
+ RlcMacResult SetPowerReduction(POWER_REDUCTION val)
+ {
+ powerReduction = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ POWER_REDUCTION GetPowerReduction()
+ {
+ return (powerReduction);
+ }
+
+ RlcMacResult SetTFI(unsigned char val)
+ {
+ tfi = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ unsigned char GetTFI()
+ {
+ return (tfi);
+ }
+
+ RlcMacResult SetDirectionBit(DIRECTION_BIT val)
+ {
+ directionBit = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ DIRECTION_BIT GetDirectionBit()
+ {
+ return (directionBit);
+ }
+
+ RlcMacResult SetBSN(unsigned char val)
+ {
+ bsn = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ unsigned char GetBSN()
+ {
+ return (bsn);
+ }
+
+ RlcMacResult SetExtensionBit(EXTENSION_BIT val)
+ {
+ extensionBit = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ EXTENSION_BIT GetExtensionBit()
+ {
+ return (extensionBit);
+ }
+
+ RlcMacResult SetFinalBlockIndicator(FINAL_BLOCK_INDICATOR val)
+ {
+ fbiBit = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ FINAL_BLOCK_INDICATOR GetFinalBlockIndicator()
+ {
+ return (fbiBit);
+ }
+
+ bool SetLengthOctet(unsigned char length, MORE_BIT more, EXTENSION_BIT extBit)
+ {
+ if (currLengthOctet < MAX_RLC_LENGTH_OCTETS)
+ {
+ LengthOctets[currLengthOctet].length = length;
+ LengthOctets[currLengthOctet].moreBit = more;
+ LengthOctets[currLengthOctet].extensionBit = extBit;
+ return (TRUE);
+ }
+ else
+ {
+ return (FALSE);
+ }
+ }
+
+ RlcMacResult SetCurrLengthOctetExtension(EXTENSION_BIT extBit)
+ {
+ if (currLengthOctet < MAX_RLC_LENGTH_OCTETS)
+ {
+ LengthOctets[currLengthOctet].extensionBit = extBit;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_ERROR);
+ }
+ }
+
+ bool GetNextLengthOctet(unsigned char *length, MORE_BIT *more, EXTENSION_BIT *extBit)
+ {
+ if (++currLengthOctet < MAX_RLC_LENGTH_OCTETS)
+ {
+ *length = LengthOctets[currLengthOctet].length;
+ *more = LengthOctets[currLengthOctet].moreBit;
+ *extBit = LengthOctets[currLengthOctet].extensionBit;
+ return (TRUE);
+ }
+ else
+ {
+ return (FALSE);
+ }
+ }
+
+ int GetCurrLengthOctetIndex() { return (currLengthOctet); }
+ void IncrementCurrLengthOctetIndex()
+ {
+ if (currLengthOctet < MAX_RLC_LENGTH_OCTETS) currLengthOctet++;
+ }
+ void DecrementCurrLengthOctetIndex()
+ {
+ if (currLengthOctet) currLengthOctet--;
+ }
+
+ void ResetCurrLengthOctet()
+ {
+ currLengthOctet=0;
+ }
+
+ static int GetDataHdrSize()
+ {
+ return(3); // Base header size for a data block
+ }
+
+private:
+ PAYLOAD_TYPE payloadType;
+ RRBP rrbp;
+ SUPPLEMENTARY_POLLING_BIT spBit;
+ unsigned char usf;
+ unsigned char rbsn;
+ unsigned char rti;
+ FINAL_SEGMENT_BIT finalSegBit;
+ ADDRESS_CONTROL_BIT acBit;
+ POWER_REDUCTION powerReduction;
+ unsigned char tfi;
+ FINAL_BLOCK_INDICATOR fbiBit;
+ DIRECTION_BIT directionBit;
+ unsigned char bsn;
+ EXTENSION_BIT extensionBit;
+ struct
+ {
+ unsigned char length;
+ MORE_BIT moreBit;
+ EXTENSION_BIT extensionBit;
+ } LengthOctets[MAX_RLC_LENGTH_OCTETS];
+ int currLengthOctet;
+
+ // Logger object for displayig header.
+ static DbgOutput HdrDisplayDetailObj;
+};
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MeasurementMappingStruct.h b/data/mnet/GP10/Host/Rlc_mac/include/MeasurementMappingStruct.h
new file mode 100644
index 0000000..0897d3a
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MeasurementMappingStruct.h
@@ -0,0 +1,53 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MeasurementMappingStruct.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MEASUREMENTMAPPINGSTRUCT_H__
+#define __MEASUREMENTMAPPINGSTRUCT_H__
+
+#include "logging\vclogging.h"
+#include "bitstream.h"
+#include "ieStartFrameNum.h"
+
+
+// *******************************************************************
+// class MeasurementMappingStruct
+//
+// Description:
+// Measurement Mapping Struct -- GSM04.60 11.2.7
+//
+// < Measurement Mapping struct > ::=
+// < Measurement Starting Time : < Starting Frame Number Description IE > >
+// < MEASUREMENT_INTERVAL : bit (5) >
+// < MEASUREMENT_BITMAP : bit (8) > ;
+// *******************************************************************
+
+class MeasurementMappingStruct {
+public:
+
+ IeStartFrameNum measStartTime;
+ unsigned char measInterval;
+ unsigned char measBitMap;
+ bool isValid;
+
+ // Default constructor
+ MeasurementMappingStruct() : isValid(FALSE), measStartTime() {}
+
+ RlcMacResult EncodeMeasurementMappingStruct(BitStreamOut &dataStream);
+ void DisplayMeasurementMappingStruct(DbgOutput *outObj);
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgBase.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgBase.h
new file mode 100644
index 0000000..f42e02a
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgBase.h
@@ -0,0 +1,96 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgBase.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGBASE_H__
+#define __MSGBASE_H__
+
+#include "RlcMacResult.h"
+#include "RlcMacMsgType.h"
+#include "logging\vclogging.h"
+
+
+// *******************************************************************
+// class MsgBase
+//
+// Description
+//
+// *******************************************************************
+class MsgBase {
+public:
+ RlcMacMsgType msgType;
+
+ // Constructor
+ MsgBase(RlcMacMsgType type) : msgType(type) {}
+ // Destructor
+ ~MsgBase() {};
+
+protected:
+ static DbgOutput MsgDisplayObj;
+ static DbgOutput MsgDisplayDetailObj;
+
+ // Default constuctor
+ MsgBase() {};
+};
+
+
+
+// *******************************************************************
+// class DownlinkMsgBase
+//
+// Description
+//
+// *******************************************************************
+class DownlinkMsgBase : public MsgBase {
+public:
+ DownlinkMsgBase(RlcMacMsgType type) : MsgBase(type) {}
+ ~DownlinkMsgBase() {}
+
+ void DisplayMsgShort(BitStreamOut *dataStream);
+ virtual void DisplayMsgDetail() = 0;
+ virtual RlcMacResult EncodeMsg(BitStreamOut &dataStream) = 0;
+
+protected:
+
+ // Default constructor
+ DownlinkMsgBase() {}
+};
+
+
+
+// *******************************************************************
+// class UplinkMsgBase
+//
+// Description
+//
+// *******************************************************************
+class UplinkMsgBase : public MsgBase {
+public:
+ UplinkMsgBase(RlcMacMsgType type) : MsgBase(type) {}
+ ~UplinkMsgBase() {}
+
+ void DisplayMsgShort(BitStreamIn *dataStream);
+
+protected:
+
+ // Default contructor
+ UplinkMsgBase(){}
+};
+
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketAccessReject.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketAccessReject.h
new file mode 100644
index 0000000..b6662a3
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketAccessReject.h
@@ -0,0 +1,134 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketAccessReject.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETACCESSREJECT_H__
+#define __MSGPACKETACCESSREJECT_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "iePageMode.h"
+#include "ieTLLI.h"
+#include "iePacketReqRef.h"
+#include "ieGlobalTFI.h"
+
+
+// *******************************************************************
+// class IeWaitIndication
+//
+// Description:
+// Wait Indication IE -- GSM04.60 11.2.1
+// *******************************************************************
+
+class IeWaitIndication : public IeBase {
+public:
+
+ typedef enum
+ {
+ UNITS_OF_SECONDS,
+ UNITS_OF_20_MS
+ } RLC_MAC_WAIT_IND_SIZE;
+
+ IeWaitIndication() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetWaitIndication(unsigned char ind, RLC_MAC_WAIT_IND_SIZE size)
+ {
+ waitInd = ind;
+ waitIndSize = size;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ void GetWaitIndication(unsigned char *wait, RLC_MAC_WAIT_IND_SIZE *size)
+ {
+ *wait = waitInd;
+ *size = waitIndSize;
+ }
+
+ void ClearWaitIndication() { isValid = FALSE; }
+private:
+ unsigned char waitInd;
+ RLC_MAC_WAIT_IND_SIZE waitIndSize;
+};
+
+
+// *******************************************************************
+// PACKET ACCESS REJECT
+//
+// GSM 04.60 11.2.1
+//
+// < Packet Access Reject message content > ::=
+// < PAGE_MODE : bit (2) >
+// < Reject : < Reject struct > >
+// { { 1 < Additional Reject: < Reject struct > > } ** 0
+// < padding bits > } // -- truncation at end of message allowed, bits '0' assumed
+// ! < Distribution part error : bit (*) = < no string > > ;
+//
+// < Reject struct > ::=
+// { 0 < TLLI : bit (32) >
+// | 1 { 0 < Packet Request Reference : < Packet Request Reference IE > >
+// | 1 < Global TFI : < Global TFI IE > > } }
+// { 0 | 1 < WAIT_INDICATION : bit (8) >
+// < WAIT _INDICATION_SIZE : bit (1) > }
+// ! < Ignore : bit (*) = <no string> > ;
+//
+// *******************************************************************
+
+class RejectStruct {
+public:
+ IeTLLI tlli;
+ IePacketReqRef packetReqRef;
+ IeGlobalTFI globalTFI;
+ IeWaitIndication waitInd;
+ bool isValid;
+
+ // Default constructor
+ RejectStruct() : isValid(FALSE), tlli(), packetReqRef(), globalTFI(), waitInd() {}
+
+ RlcMacResult EncodeRejectStruct(BitStreamOut &dataStream);
+ void DisplayRejectStruct(DbgOutput *outObj);
+};
+
+class MsgPacketAccessReject : public DownlinkMsgBase {
+public:
+
+ // Message type is included in MsgBase.
+
+ // Distributed message contents
+ IePageMode pageMode;
+ RejectStruct reject;
+ RejectStruct additionalReject;
+
+ // Default constructor
+ MsgPacketAccessReject() : DownlinkMsgBase(RlcMacMsgType::PACKET_ACCESS_REJECT),
+ pageMode(), reject(), additionalReject(){}
+
+ // Default destructor
+ ~MsgPacketAccessReject() {}
+
+ // Pack IE into an output stream of bits.
+ RlcMacResult EncodeMsg(BitStreamOut &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketCellChangeFailure.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketCellChangeFailure.h
new file mode 100644
index 0000000..bfae4cc
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketCellChangeFailure.h
@@ -0,0 +1,83 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketCellChangeFailure.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETCELLCHANGEFAILURE_H__
+#define __MSGPACKETCELLCHANGEFAILURE_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "ieTLLI.h"
+#include "ieARFCN.h"
+#include "ieBSIC.h"
+
+
+// *******************************************************************
+// PACKET CELL CHANGE FAILURE
+//
+// GSM 04.60 11.2.26
+//
+// < Packet Cell Change Failure message content > ::=
+// < TLLI : bit (32) >
+// < ARFCN : bit (10) >
+// < BSIC : bit (6) >
+// < CAUSE : bit (4) >
+// < padding bits > ;
+//
+// *******************************************************************
+
+class MsgPacketCellChangeFailure : public UplinkMsgBase {
+public:
+
+ typedef enum
+ {
+ FREQUENCY_NOT_IMPLEMENTED,
+ NO_RESPONSE_ON_TARGET_CELL,
+ REJECT_ON_TARGET_CELL,
+ ON_GOING_CS_CONNECTION,
+ ANONYMOUS_ACCESS,
+ MS_IN_GMM_STANDBY,
+ FORCED_TO_STANDBY,
+ INVALID_CAUSE
+ } FAILURE_CAUSE;
+
+ // Message type is included in MsgBase.
+
+ // Message contents
+ IeTLLI tlli;
+ IeARFCN arfcn;
+ IeBSIC bsic;
+ FAILURE_CAUSE failCause;
+
+ // Default constructor
+ MsgPacketCellChangeFailure() : UplinkMsgBase(RlcMacMsgType::PACKET_CELL_CHANGE_FAILURE),
+ tlli(), arfcn(), bsic(), failCause(INVALID_CAUSE)
+ {
+ }
+
+ // Default destructor
+ ~MsgPacketCellChangeFailure() {}
+
+ // Decode input stream of bits into message.
+ RlcMacResult DecodeMsg(BitStreamIn &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketCellChangeOrder.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketCellChangeOrder.h
new file mode 100644
index 0000000..63eac83
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketCellChangeOrder.h
@@ -0,0 +1,138 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketCellChangeOrder.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETCELLCHANGEORDER_H__
+#define __MSGPACKETCELLCHANGEORDER_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "iePageMode.h"
+#include "ieTLLI.h"
+#include "ieGlobalTFI.h"
+#include "NCMeasurementStruct.h"
+#include "ieLSAParameters.h"
+#include "ieARFCN.h"
+#include "ieBSIC.h"
+
+
+
+
+// *******************************************************************
+// PACKET CELL CHANGE ORDER
+//
+// GSM 04.60 11.2.4
+//
+// < Packet Cell Change Order message content > ::=
+// < PAGE_MODE : bit (2) >
+// { { 0 < Global TFI : < Global TFI IE > >
+// | 10 < TLLI : bit (32) > }
+// { 0 -- Message escape
+// { < IMMEDIATE_REL : bit >
+// < ARFCN : bit (10) >
+// < BSIC : bit (6) >
+// < NC Measurement Parameters : < NC Measurement Parameters struct > >
+// { 0 | 1 < LSA Parameters : < LSA Parameters IE >> }
+// < padding bits >
+// ! < Non-distribution part error : bit (*) = < no string > > }
+// ! < Message escape : 1 bit (*) = <no string> > }
+// ! < Address information part error : bit (*) = < no string > > }
+// ! < Distribution part error : bit (*) = < no string > > ;
+//
+// < NC Measurement Parameters struct > ::=
+// < NETWORK_CONTROL_ORDER : bit (2) >
+// { 0 | 1 < NC_NON_DRX_PERIOD : bit (3) >
+// < NC_REPORTING_PERIOD_I : bit (3) >
+// < NC_REPORTING_PERIOD_T : bit (3) > }
+// { 0 | 1 < NC_FREQUENCY_LIST : NC Frequency list struct > } ;
+//
+// < NC Frequency list struct > ::=
+// { 0 | 1 < NR_OF_REMOVED_FREQ : bit (5) >
+// { < REMOVED_FREQ_INDEX : bit (6) > } * (1 + val(NR_OF_REMOVED_FREQ)) }
+// { 1 < List of added Frequency : < Add Frequency list struct > >} ** 0;
+//
+// < Add Frequency list struct > ::=
+// < START_FREQUENCY : bit (10) >
+// < BSIC : bit (6) >
+// { 0 | 1 < Cell selection params : < Cell Selection struct > > }
+// < NR_OF_FREQUENCIES : bit (5) >
+// < FREQ_DIFF_LENGTH : bit (3) >
+// { < FREQUENCY_DIFF : bit (val(FREQ_DIFF_LENGTH)) >
+// < BSIC : bit (6) >
+// { 0 | 1 < Cell selection params :
+// < Cell Selection struct > > } } * (val(NR_OF_FREQUENCIES));
+//
+// < Cell Selection struct > ::=
+// < CELL_BAR_ACCESS_2 : bit (1) >
+// < EXC_ACC : bit >
+// < SAME_RA_AS_SERVING_CELL : bit (1) >
+// { 0 | 1 < GPRS_RXLEV_ACCESS_MIN : bit (6) >
+// < GPRS_MS_TXPWR_MAX_CCH : bit (5) > }
+// { 0 | 1 < GPRS_TEMPORARY_OFFSET : bit (3) >
+// < GPRS_PENALTY_TIME : bit (5) > }
+// { 0 | 1 < GPRS_RESELECT_OFFSET : bit (5) > }
+// { 0 | 1 < HCS params : < HCS struct > > }
+// { 0 | 1 < SI13_PBCCH_LOCATION : < SI13_PBCCH_LOCATION struct > > } ;
+//
+// < SI13_PBCCH_LOCATION struct > ::=
+// { 0 < SI13_LOCATION : bit (1) >
+// | 1 < PBCCH_LOCATION : bit (2) >
+// < PSI1_REPEAT_PERIOD : bit (4) > } ;
+//
+// < HCS struct > ::=
+// < PRIORITY_CLASS : bit (3) >
+// < HCS_THR : bit (5) > ;
+// *******************************************************************
+
+
+class MsgPacketCellChangeOrder : public DownlinkMsgBase {
+public:
+
+ typedef enum
+ {
+ NOT_REQUIRED,
+ REQUIRED
+ } IMMEDIATE_REL;
+
+ // Message type is included in MsgBase.
+
+ // Distributed message contents
+ IePageMode pageMode;
+ IeGlobalTFI globalTFI;
+ IeTLLI tlli;
+ IMMEDIATE_REL immediateRel;
+ IeARFCN arfcn;
+ IeBSIC bsic;
+ NCMeasParamStruct ncMeasParam;
+ IeLSAParameters lsaParameters;
+
+ // Default constructor
+ MsgPacketCellChangeOrder() : DownlinkMsgBase(RlcMacMsgType::PACKET_CELL_CHANGE_ORDER),
+ pageMode(), globalTFI(), tlli(), immediateRel(NOT_REQUIRED), arfcn(), bsic(),
+ ncMeasParam(), lsaParameters() {}
+
+ // Default destructor
+ ~MsgPacketCellChangeOrder() {}
+
+ // Pack IE into an output stream of bits.
+ RlcMacResult EncodeMsg(BitStreamOut &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketControlAcknowledgement.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketControlAcknowledgement.h
new file mode 100644
index 0000000..19a6ccf
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketControlAcknowledgement.h
@@ -0,0 +1,81 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketControlAcknowledgement.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETCONTROLACKNOWLEDGEMENT_H__
+#define __MSGPACKETCONTROLACKNOWLEDGEMENT_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "ieTLLI.h"
+
+
+// *******************************************************************
+// PACKET CELL CONTROL ACKNOWLEDGEMENT
+//
+// GSM 04.60 11.2.2
+//
+// < Packet Control Acknowledgement message content > ::= -- RLC/MAC control block format
+// < TLLI : bit (32) >
+// < CTRL_ACK : bit (2) >
+// < padding bits > ;
+//
+// < Packet Control Acknowledgement 11 bit message > ::= -- 11-bit access burst format
+// < MESSAGE_TYPE : bit (9) == 1111 1100 1 >
+// < CTRL_ACK : bit (2) > ;
+//
+// < Packet Control Acknowledgement 8 bit message > ::= -- 8-bit access burst format
+// < MESSAGE_TYPE : bit (6) == 0111 11 >
+// < CTRL_ACK : bit (2) > ;
+//
+// *******************************************************************
+
+class MsgPacketControlAcknowledgement : public UplinkMsgBase {
+public:
+
+ typedef enum
+ {
+ RESERVED,
+ ONE_BLOCK_RBSN_EQ_1,
+ ONE_BLOCK_RBSN_EQ_0,
+ TWO_BLOCKS_RBSN_EQ_0_AND_1
+ } CTRL_ACK;
+
+ // Message type is included in MsgBase.
+
+ // Message contents
+ IeTLLI tlli;
+ CTRL_ACK ctrlAck;
+
+ // Default constructor
+ MsgPacketControlAcknowledgement(RlcMacMsgType type) : UplinkMsgBase(type),
+ tlli(), ctrlAck(RESERVED)
+ {
+ }
+
+ // Default destructor
+ ~MsgPacketControlAcknowledgement() {}
+
+ // Decode input stream of bits into message.
+ RlcMacResult DecodeMsg(BitStreamIn &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketDownlinkAckNack.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketDownlinkAckNack.h
new file mode 100644
index 0000000..c02f13b
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketDownlinkAckNack.h
@@ -0,0 +1,96 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketDownlinkAckNack.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETDOWNLINKACKNACK_H__
+#define __MSGPACKETDOWNLINKACKNACK_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "ieAckNackDescription.h"
+#include "ieChannelRequestDescription.h"
+#include "ieTFI.h"
+
+
+// *******************************************************************
+// PACKET DOWNLINK ACK NACK
+//
+// GSM 04.60 11.2.6
+//
+// < Packet Downlink Ack/Nack message content > ::=
+// < DOWNLINK_TFI : bit (5) >
+// < Ack/Nack Description : < Ack/Nack Description IE > >
+// { 0 | 1 < Channel Request Description : < Channel Request Description IE > > }
+// < Channel Quality Report : < Channel Quality Report struct > >
+// < padding bits > ;
+//
+// < Channel Quality Report struct > ::=
+// < C_VALUE : bit (6) >
+// < RXQUAL : bit (3) >
+// < SIGN_VAR : bit (6) >
+// { 0 | 1 < I_LEVEL_TN0 : bit (4) > }
+// { 0 | 1 < I_LEVEL_TN1 : bit (4) > }
+// { 0 | 1 < I_LEVEL_TN2 : bit (4) > }
+// { 0 | 1 < I_LEVEL_TN3 : bit (4) > }
+// { 0 | 1 < I_LEVEL_TN4 : bit (4) > }
+// { 0 | 1 < I_LEVEL_TN5 : bit (4) > }
+// { 0 | 1 < I_LEVEL_TN6 : bit (4) > }
+// { 0 | 1 < I_LEVEL_TN7 : bit (4) > } ;
+//
+// *******************************************************************
+
+class MsgPacketDownlinkAckNack : public UplinkMsgBase {
+public:
+
+
+ // Message type is included in MsgBase.
+
+ // Message contents
+ IeTFI dlTfi;
+ IeAckNackDescription ackNackDescription;
+ IeChannelRequestDescription chanReqDescription;
+ unsigned char cValue;
+ unsigned char rxqual;
+ unsigned char signVar;
+ struct ILevelStruct
+ {
+ unsigned char iLevel;
+ bool isValid;
+ } ILevel[MAX_TIMESLOTS];
+
+ // Default constructor
+ MsgPacketDownlinkAckNack() : UplinkMsgBase(RlcMacMsgType::PACKET_DOWNLINK_ACK_NACK),
+ ackNackDescription(), chanReqDescription(), cValue(0), rxqual(0), signVar(0)
+ {
+ for (int i=0; i < MAX_TIMESLOTS; i++)
+ {
+ ILevel[i].isValid = FALSE;
+ }
+ }
+
+ // Default destructor
+ ~MsgPacketDownlinkAckNack() {}
+
+ // Decode input stream of bits into message.
+ RlcMacResult DecodeMsg(BitStreamIn &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketDownlinkAssignment.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketDownlinkAssignment.h
new file mode 100644
index 0000000..442f353
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketDownlinkAssignment.h
@@ -0,0 +1,133 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketDownlinkAssignment.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETDOWNLINKASSIGNMENT_H__
+#define __MSGPACKETDOWNLINKASSIGNMENT_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "iePageMode.h"
+#include "iePersistenceLevel.h"
+#include "ieTLLI.h"
+#include "iePacketReqRef.h"
+#include "ieGlobalTFI.h"
+#include "ieMACMode.h"
+#include "ieRLCMode.h"
+#include "ieTimeslotAllocation.h"
+#include "iePacketTimingAdvance.h"
+#include "iePO.h"
+#include "ieBtsPowerCtlMode.h"
+#include "iePRMode.h"
+#include "ieFrequencyParameters.h"
+#include "ieTFI.h"
+#include "iePowerControlParameters.h"
+#include "ieStartFrameNum.h"
+#include "MeasurementMappingStruct.h"
+
+
+// *******************************************************************
+// PACKET DOWNLINK ASSIGNMENT
+//
+// GSM 04.60 11.2.7
+//
+// < Packet Downlink Assignment message content > ::=
+// < PAGE_MODE : bit (2) >
+// { 0 | 1 <PERSISTENCE_LEVEL : bit (4) > * 4 }
+// { { 0 < Global TFI : < Global TFI IE > >
+// | 10 < TLLI : bit (32) > }
+// { 0 -- Message escape
+// { < MAC_MODE : bit (2) >
+// < RLC_MODE : bit (1) >
+// < CONTROL_ACK : bit (1) >
+// < TIMESLOT_ALLOCATION : bit (8) >
+// < Packet Timing Advance : < Packet Timing Advance IE > >
+// { 0 | 1 < P0 : bit (4) >
+// < BTS_PWR_CTRL_MODE : bit (1) >
+// < PR_MODE : bit (1) >}
+// { { 0 | 1 < Frequency Parameters : < Frequency Parameters IE > > }
+// { 0 | 1 < DOWNLINK_TFI_ASSIGNMENT : bit (5) > }
+// { 0 | 1 < Power Control Parameters : < Power Control Parameters IE > > }
+// { 0 | 1 < TBF Starting Time : < Starting Frame Number Description IE > > }
+// { 0 | 1 < Measurement Mapping : < Measurement Mapping struct > > }
+// < padding bits > } // -- truncation at end of message allowed, bits '0' assumed
+// ! < Non-distribution part error : bit (*) = < no string > > }
+// ! < Message escape : 1 bit (*) = <no string> > }
+// ! < Address information part error : bit (*) = < no string > > }
+// ! < Distribution part error : bit (*) = < no string > > ;
+//
+// < Measurement Mapping struct > ::=
+// < Measurement Starting Time : < Starting Frame Number Description IE > >
+// < MEASUREMENT_INTERVAL : bit (5) >
+// < MEASUREMENT_BITMAP : bit (8) > ;
+//
+// *******************************************************************
+
+class MsgPacketDownlinkAssignment : public DownlinkMsgBase {
+public:
+
+ // Message type is included in MsgBase.
+
+ // Distributed message contents
+ IePageMode pageMode;
+ struct PersistenceLevelStruct
+ {
+ IePersistenceLevel persistenceLevel[4];
+ bool isValid;
+ } PersistenceLevelParams;
+ IeGlobalTFI globalTFI;
+ IeTLLI tlli;
+ IeMacMode macMode;
+ IeRlcMode rlcMode;
+ bool controlAck;
+ IeTimeslotAllocation tsAllocation;
+ IePacketTimingAdvance timingAdvance;
+ struct PwrParamsStruct
+ {
+ IePO po;
+ IeBtsPowerCtlMode pCtlMode;
+ IePRMode prMode;
+ bool isValid;
+ } PwrParams;
+ IeFrequencyParameters frequencyParameters;
+ IeTFI dlTFIAssignment;
+ IePowerControlParameters powerControlParameters;
+ IeStartFrameNum tbfStartingTime;
+ MeasurementMappingStruct measMapping;
+
+ // Default constructor
+ MsgPacketDownlinkAssignment() : DownlinkMsgBase(RlcMacMsgType::PACKET_DOWNLINK_ASSIGNMENT),
+ pageMode(), globalTFI(), tlli(), macMode(), rlcMode(),
+ controlAck(FALSE), tsAllocation(), timingAdvance(), frequencyParameters(),
+ dlTFIAssignment(), powerControlParameters(), tbfStartingTime(), measMapping()
+ {
+ PwrParams.isValid = FALSE;
+ PersistenceLevelParams.isValid = FALSE;
+ }
+
+ // Default destructor
+ ~MsgPacketDownlinkAssignment() {}
+
+ // Pack IE into an output stream of bits.
+ RlcMacResult EncodeMsg(BitStreamOut &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketDownlinkDummyControlBlock.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketDownlinkDummyControlBlock.h
new file mode 100644
index 0000000..dfe89d9
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketDownlinkDummyControlBlock.h
@@ -0,0 +1,68 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketDownlinkDummyControlBlock.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETDOWNLINKDUMMYCONTROL_BLOCK_H__
+#define __MSGPACKETDOWNLINKDUMMYCONTROL_BLOCK_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "iePageMode.h"
+#include "iePersistenceLevel.h"
+
+
+// *******************************************************************
+// PACKET DOWNLINK DUMMY CONTROL BLOCK
+//
+// GSM 04.60 11.2.7
+//
+// < Packet Downlink Dummy Control Block message content > ::=
+// < PAGE_MODE : bit (2) >
+// { 0 | 1 <PERSISTENCE_LEVEL : bit (4) > * 4 }
+// < padding bits >
+// ! < Distribution part error : bit (*) = < no string > > ;
+//
+// *******************************************************************
+
+class MsgPacketDownlinkDummyControlBlock : public DownlinkMsgBase {
+public:
+
+ // Message type is included in MsgBase.
+
+ // Distributed message contents
+ IePageMode pageMode;
+ IePersistenceLevel persistenceLevel;
+
+ // Default constructor
+ MsgPacketDownlinkDummyControlBlock() :
+ DownlinkMsgBase(RlcMacMsgType::PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK),
+ pageMode(), persistenceLevel()
+ {
+ }
+
+ // Default destructor
+ ~MsgPacketDownlinkDummyControlBlock() {}
+
+ // Pack IE into an output stream of bits.
+ RlcMacResult EncodeMsg(BitStreamOut &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketMobileTBFStatus.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketMobileTBFStatus.h
new file mode 100644
index 0000000..764c46b
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketMobileTBFStatus.h
@@ -0,0 +1,81 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketMobileTBFStatus.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETMOBILETBFSTATUS_H__
+#define __MSGPACKETMOBILETBFSTATUS_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "ieGlobalTFI.h"
+
+
+// *******************************************************************
+// PACKET MOBILE TBF STATUS
+//
+// GSM 04.60 11.2.9c
+//
+// < Packet Mobile TBF Status message content > ::=
+// < GLOBAL TFI : < Global TFI IE > >
+// < TBF_CAUSE : bit (3) >
+// { 0 | 1 < STATUS_MESSAGE_TYPE : bit (6) > }
+// < padding bits > ;
+//
+// *******************************************************************
+
+class MsgPacketMobileTBFStatus : public UplinkMsgBase {
+public:
+
+ typedef enum
+ {
+ NORMAL_EVENT,
+ STATUS_UNSPECIFIED,
+ NON_DISTRIBUTION_TYPE,
+ MESSAGE_ESCAPE,
+ INCOMPATIBLE_WITH_CURRENT_STATE
+ } TBF_CAUSE;
+
+ // Message type is included in MsgBase.
+
+ // Message contents
+ IeGlobalTFI globalTfi;
+ TBF_CAUSE tbfCause;
+ struct
+ {
+ bool isValid;
+ RlcMacMsgType msgType;
+ } StatusMsgType;
+
+ // Default constructor
+ MsgPacketMobileTBFStatus() : UplinkMsgBase(RlcMacMsgType::PACKET_MOBILE_TBF_STATUS),
+ globalTfi(), tbfCause(NORMAL_EVENT)
+ {
+ StatusMsgType.isValid = FALSE;
+ }
+
+ // Default destructor
+ ~MsgPacketMobileTBFStatus() {}
+
+ // Decode input stream of bits into message.
+ RlcMacResult DecodeMsg(BitStreamIn &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketPDCHRelease.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketPDCHRelease.h
new file mode 100644
index 0000000..8e6679d
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketPDCHRelease.h
@@ -0,0 +1,67 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketPDCHRelease.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETPDCHRELEASE_H__
+#define __MSGPACKETPDCHRELEASE_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "iePageMode.h"
+#include "ieTimeslotAllocation.h"
+
+
+// *******************************************************************
+// PACKET PDCH RELEASE
+//
+// GSM 04.60 11.2.11
+//
+// < Packet PDCH Release message content > ::=
+// < PAGE_MODE : bit (2) >
+// { 0 | 1 < TIMESLOTS_AVAILABLE : bit (8) > }
+// < padding bits >
+// ! < Distribution part error : bit (*) = < no string > > ;
+//
+// *******************************************************************
+
+class MsgPacketPDCHRelease : public DownlinkMsgBase {
+public:
+
+ // Message type is included in MsgBase.
+
+ // Distributed message contents
+ IePageMode pageMode;
+ IeTimeslotAllocation tsAllocation;
+
+ // Default constructor
+ MsgPacketPDCHRelease() : DownlinkMsgBase(RlcMacMsgType::PACKET_PDCH_RELEASE),
+ pageMode(), tsAllocation()
+ {
+ }
+
+ // Default destructor
+ ~MsgPacketPDCHRelease() {}
+
+ // Pack IE into an output stream of bits.
+ RlcMacResult EncodeMsg(BitStreamOut &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketPagingRequest.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketPagingRequest.h
new file mode 100644
index 0000000..39bc2e0
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketPagingRequest.h
@@ -0,0 +1,114 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketPagingRequest.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETPAGINGREQUEST_H__
+#define __MSGPACKETPAGINGREQUEST_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "iePageMode.h"
+#include "iePersistenceLevel.h"
+#include "ieNLN.h"
+#include "ieTMSI.h"
+#include "iePTMSI.h"
+#include "ieMobileIdentity.h"
+#include "ieChannelNeeded.h"
+#include "ieeMLPPPriority.h"
+
+#define MAX_NUM_REPEATED_PAGES 4
+
+// *******************************************************************
+// PACKET PAGING REQUEST
+//
+// GSM 04.60 11.2.10
+//
+// < Packet Paging Request message content > ::=
+// < PAGE_MODE : bit (2) >
+// { 0 | 1 < PERSISTENCE_LEVEL : bit (4) >* 4}
+// { 0 | 1 < NLN : bit (2) > }
+// { { 1 < Repeated Page info : < Repeated Page info struct > > } ** 0
+// < padding bits > } // -- truncation at end of message allowed, bits '0' assumed
+// ! < Distribution part error : bit (*) = < no string > > ;
+//
+// < Repeated Page info struct > ::=
+// { 0 -- Page request for TBF establishment
+// { 0 < PTMSI : bit (32) >
+// | 1 < Length of Mobile Identity contents : bit (4) >
+// < Mobile Identity : octet (val (Length of Mobile Identity contents)) > }
+// | 1 -- Page request for RR conn. establishment
+// { 0 < TMSI : bit (32) >
+// | 1 < Length of Mobile Identity contents : bit (4) >
+// < Mobile Identity : octet (val (Length of Mobile Identity contents)) > }
+// < CHANNEL_NEEDED : bit (2) >
+// { 0 | 1 < eMLPP_PRIORITY : bit (3) > } }
+// ! < Ignore : bit (*) = <no string> > ;
+//
+// *******************************************************************
+
+class MsgPacketPagingRequest : public DownlinkMsgBase {
+public:
+
+ // Message type is included in MsgBase.
+
+ // Distributed message contents
+ IePageMode pageMode;
+ IePersistenceLevel persistenceLevel;
+ IeNLN nln;
+ struct RepeatedPageInfoStruct
+ {
+ bool isValid;
+ struct TBFPageStruct
+ {
+ bool isValid;
+ IePTMSI ptmsi;
+ IeMobileIdentity mobileId;
+ } TBFPage;
+ struct RRConnPageStruct
+ {
+ bool isValid;
+ IeTMSI tmsi;
+ IeMobileIdentity mobileId;
+ IeChannelNeeded chanNeeded;
+ IeeMLPPPriority emlpPriority;
+ } RRConnPage;
+ } RepeatedPageInfo[MAX_NUM_REPEATED_PAGES];
+
+ // Default constructor
+ MsgPacketPagingRequest() : DownlinkMsgBase(RlcMacMsgType::PACKET_PAGING_REQUEST),
+ pageMode(), persistenceLevel(), nln()
+ {
+ for (int i = 0; i < MAX_NUM_REPEATED_PAGES; i++)
+ {
+ RepeatedPageInfo[i].isValid = FALSE;
+ RepeatedPageInfo[i].TBFPage.isValid = FALSE;
+ RepeatedPageInfo[i].RRConnPage.isValid = FALSE;
+ }
+ }
+
+ // Default destructor
+ ~MsgPacketPagingRequest() {}
+
+ // Pack IE into an output stream of bits.
+ RlcMacResult EncodeMsg(BitStreamOut &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketPollingRequest.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketPollingRequest.h
new file mode 100644
index 0000000..29a4099
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketPollingRequest.h
@@ -0,0 +1,83 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketPollingRequest.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETPOLLINGREQUEST_H__
+#define __MSGPACKETPOLLINGREQUEST_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "iePageMode.h"
+#include "ieGlobalTFI.h"
+#include "ieTLLI.h"
+#include "ieTQI.h"
+
+
+// *******************************************************************
+// PACKET POLLING REQUEST
+//
+// GSM 04.60 11.2.12
+//
+// < Packet Polling Request message content > ::=
+// < PAGE_MODE : bit (2) >
+// { { 0 < Global TFI : < Global TFI IE > >
+// | 10 < TLLI : bit (32) >
+// | 110 < TQI : bit (16) > }
+// < TYPE_OF_ACK : bit (1) >
+// { < padding bits >
+// ! < Non-distribution part error : bit (*) = < no string > > }
+// ! < Address information part error : bit (*) = < no string > > }
+// ! < Distribution part error : bit (*) = < no string > > ;
+//
+// *******************************************************************
+
+class MsgPacketPollingRequest : public DownlinkMsgBase {
+public:
+
+ typedef enum
+ {
+ ACK_MSG_FOUR_ACCESS_BURSTS,
+ ACK_MSG_RLCMAC_CONTROL_BLOCK,
+ INVALID_TYPE_OF_ACK=-1
+ } TYPE_OF_ACK;
+ // Message type is included in MsgBase.
+
+ // Distributed message contents
+ IePageMode pageMode;
+ IeGlobalTFI globalTFI;
+ IeTLLI tlli;
+ IeTQI tqi;
+ TYPE_OF_ACK typeOfAck;
+
+ // Default constructor
+ MsgPacketPollingRequest() : DownlinkMsgBase(RlcMacMsgType::PACKET_POLLING_REQUEST),
+ pageMode(), globalTFI(), tlli(), tqi(), typeOfAck(INVALID_TYPE_OF_ACK)
+ {
+ }
+
+ // Default destructor
+ ~MsgPacketPollingRequest() {}
+
+ // Pack IE into an output stream of bits.
+ RlcMacResult EncodeMsg(BitStreamOut &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketPowerCtlTimingAdvance.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketPowerCtlTimingAdvance.h
new file mode 100644
index 0000000..706cdfb
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketPowerCtlTimingAdvance.h
@@ -0,0 +1,90 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketPowerCtlTimingAdvance.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETPOWERCTLTIMINGADVANCE_H__
+#define __MSGPACKETPOWERCTLTIMINGADVANCE_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "iePageMode.h"
+#include "ieGlobalTFI.h"
+#include "ieTQI.h"
+#include "iePacketReqRef.h"
+#include "ieGlobalPowerControlParms.h"
+#include "iePowerControlParameters.h"
+#include "ieGlobalPacketTimingAdvance.h"
+
+
+// *******************************************************************
+// PACKET POWER CONTROL / TIMING ADVANCE
+//
+// GSM 04.60 11.2.13
+//
+// < Packet Power Control/Timing Advance message content > ::=
+// < PAGE_MODE : bit (2) >
+// { { 0 < Global TFI : < Global TFI IE > >
+// | 110 < TQI : bit (16) >
+// | 111 < Packet Request Reference : < Packet Request Reference IE > > }
+// { 0 -- Message escape
+// { { 0 | 1 < Global Power Control Parameters : < Global Power Control Parameters IE >> }
+// { 0 < Global Packet Timing Advance : < Global Packet Timing Advance IE > >
+// < Power Control Parameters : < Power Control Parameters IE > >
+// | 1 { 0 < Global Packet Timing Advance : < Global Packet Timing Advance IE > >
+// | 1 < Power Control Parameters : < Power Control parameters IE > > } }
+// < padding bits >
+// ! < Non-distribution part error : bit (*) = < no string > > }
+// ! < Message escape : 1 bit (*) = <no string> > }
+// ! < Address information part error : bit (*) = < no string > > }
+// ! < Distribution part error : bit (*) = < no string > > ;
+//
+// *******************************************************************
+
+class MsgPacketPowerCtlTimingAdvance : public DownlinkMsgBase {
+public:
+
+ // Message type is included in MsgBase.
+
+ // Distributed message contents
+ IePageMode pageMode;
+ IeGlobalTFI globalTFI;
+ IeTQI tqi;
+ IePacketReqRef packetReqRef;
+ IeGlobalPowerControlParms globalPowerControlParams;
+ IeGlobalPacketTimingAdvance globalTA;
+ IePowerControlParameters powerControlParameters;
+
+ // Default constructor
+ MsgPacketPowerCtlTimingAdvance() :
+ DownlinkMsgBase(RlcMacMsgType::PACKET_POWER_CONTROL_TIMING_ADVANCE),
+ pageMode(), globalTFI(), tqi(), globalPowerControlParams(),
+ packetReqRef(), globalTA(), powerControlParameters()
+ {
+ }
+
+ // Default destructor
+ ~MsgPacketPowerCtlTimingAdvance() {}
+
+ // Pack IE into an output stream of bits.
+ RlcMacResult EncodeMsg(BitStreamOut &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketResourceRequest.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketResourceRequest.h
new file mode 100644
index 0000000..b2d687f
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketResourceRequest.h
@@ -0,0 +1,109 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketResourceRequest.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETRESOURCEREQUEST_H__
+#define __MSGPACKETRESOURCEREQUEST_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "RlcMacCommon.h"
+#include "ieAckNackDescription.h"
+#include "ieChannelRequestDescription.h"
+#include "ieGlobalTFI.h"
+#include "ieTLLI.h"
+#include "ieAccessType.h"
+#include "ieMSRadioAccessCapability.h"
+#include "ieChangeMark.h"
+
+
+// *******************************************************************
+// PACKET RESOURCE REQUEST
+//
+// GSM 04.60 11.2.16
+//
+// < Packet Resource Request message content > ::=
+// { 0 | 1 < ACCESS_TYPE : bit (2) > }
+// { 0 < Global TFI : < Global TFI IE > >
+// | 1 < TLLI : < TLLI IE > > }
+// { 0 | 1 < MS Radio Access Capability : < MS Radio Access Capability IE > > }
+// < Channel Request Description : < Channel Request Description IE > >
+// { 0 | 1 < CHANGE_MARK : bit (2) > }
+// < C_VALUE : bit (6) >
+// { 0 | 1 < SIGN_VAR : bit (6) >}
+// { 0 | 1 < I_LEVEL_TN0 : bit (4) > }
+// { 0 | 1 < I_LEVEL_TN1 : bit (4) > }
+// { 0 | 1 < I_LEVEL_TN2 : bit (4) > }
+// { 0 | 1 < I_LEVEL_TN3 : bit (4) > }
+// { 0 | 1 < I_LEVEL_TN4 : bit (4) > }
+// { 0 | 1 < I_LEVEL_TN5 : bit (4) > }
+// { 0 | 1 < I_LEVEL_TN6 : bit (4) > }
+// { 0 | 1 < I_LEVEL_TN7 : bit (4) > }
+// < padding bits > ;
+//
+// *******************************************************************
+
+class MsgPacketResourceRequest : public UplinkMsgBase {
+public:
+
+
+ // Message type is included in MsgBase.
+
+ // Message contents
+ IeAccessType accessType;
+ IeGlobalTFI globalTfi;
+ IeTLLI tlli;
+ IeMSRadioAccessCapability msRadioAccessCapability;
+ IeChannelRequestDescription chanReqDescription;
+ IeChangeMark changeMark;
+ unsigned char cValue;
+ struct SignVarStruct
+ {
+ unsigned char signVar;
+ bool isValid;
+ } SignVar;
+ struct ILevelStruct
+ {
+ unsigned char iLevel;
+ bool isValid;
+ } ILevel[MAX_TIMESLOTS];
+
+ // Default constructor
+ MsgPacketResourceRequest() : UplinkMsgBase(RlcMacMsgType::PACKET_RESOURCE_REQUEST),
+ accessType(), globalTfi(), tlli(), msRadioAccessCapability(), chanReqDescription(),
+ changeMark(), cValue(0)
+ {
+ for (int i=0; i < MAX_TIMESLOTS; i++)
+ {
+ ILevel[i].isValid = FALSE;
+ }
+
+ SignVar.isValid = FALSE;
+ }
+
+ // Default destructor
+ ~MsgPacketResourceRequest() {}
+
+ // Decode input stream of bits into message.
+ RlcMacResult DecodeMsg(BitStreamIn &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketTBFRelease.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketTBFRelease.h
new file mode 100644
index 0000000..66f117d
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketTBFRelease.h
@@ -0,0 +1,88 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketTBFRelease.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETTBFRELEASE_H__
+#define __MSGPACKETTBFRELEASE_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "iePageMode.h"
+#include "ieGlobalTFI.h"
+
+
+// *******************************************************************
+// PACKET TBF RELEASE
+//
+// GSM 04.60 11.2.26
+//
+// < Packet TBF Release message content > ::=
+// < PAGE_MODE : bit (2) >
+// { 0 < GLOBAL_TFI : Global TFI IE >
+// { < UPLINK_RELEASE : bit (1) >
+// < DOWNLINK_RELEASE : bit (1) >
+// < TBF_RELEASE_CAUSE : bit (4) = { 0000 | 0010 } >
+// < padding bits >
+// ! < Non-distribution part error : bit (*) = < no string > > }
+// ! < Address information part error : bit (*) = < no string > > }
+// ! < Distribution part error : bit (*) = < no string > > ;
+//
+// *******************************************************************
+
+class MsgPacketTBFRelease : public DownlinkMsgBase {
+public:
+
+ typedef enum
+ {
+ TBF_NOT_RELEASED,
+ TBF_RELEASED
+ } TBF_RELEASE_INDICATION;
+
+ typedef enum
+ {
+ NORMAL_RELEASE,
+ ABNORMAL_RELEASE
+ } TBF_RELEASE_CAUSE;
+
+ // Message type is included in MsgBase.
+
+ // Distributed message contents
+ IePageMode pageMode;
+ IeGlobalTFI globalTFI;
+ TBF_RELEASE_INDICATION uplinkRel;
+ TBF_RELEASE_INDICATION downlinkRel;
+ TBF_RELEASE_CAUSE relCause;
+
+ // Default constructor
+ MsgPacketTBFRelease() : DownlinkMsgBase(RlcMacMsgType::PACKET_TBF_RELEASE),
+ pageMode(), globalTFI(), uplinkRel(TBF_NOT_RELEASED),
+ downlinkRel(TBF_NOT_RELEASED) , relCause(NORMAL_RELEASE)
+ {
+ }
+
+ // Default destructor
+ ~MsgPacketTBFRelease() {}
+
+ // Pack IE into an output stream of bits.
+ RlcMacResult EncodeMsg(BitStreamOut &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketTimeslotReconfigure.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketTimeslotReconfigure.h
new file mode 100644
index 0000000..59eb471
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketTimeslotReconfigure.h
@@ -0,0 +1,159 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketTimeslotReconfigure.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETTIMESLOTRECONFIGURE_H__
+#define __MSGPACKETTIMESLOTRECONFIGURE_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "iePageMode.h"
+#include "ieGlobalTFI.h"
+#include "ieGlobalPacketTimingAdvance.h"
+#include "ieRLCMode.h"
+#include "ieTFI.h"
+#include "ieTimeslotAllocation.h"
+#include "ieFrequencyParameters.h"
+#include "ieChannelCodingCommand.h"
+#include "DynamicAllocationStruct.h"
+#include "FixedAllocationStruct.h"
+
+
+// *******************************************************************
+// PACKET TIMESLOT RECONFIGURE
+//
+// GSM 04.60 11.2.31
+//
+// < Packet Timeslot Reconfigure message content > ::=
+// < PAGE_MODE : bit (2) >
+// { 0 < GLOBAL_TFI : < Global TFI IE > >
+// { 0 -- Message escape
+// { < CHANNEL_CODING_COMMAND : bit (2) >
+// < Global Packet Timing Advance : < Global Packet Timing Advance IE > >
+// < DOWNLINK_RLC_MODE : bit (1) >
+// < CONTROL_ACK : bit (1) >
+// { 0 | 1 < DOWNLINK_TFI_ASSIGNMENT : bit (5) > }
+// { 0 | 1 < UPLINK_TFI_ASSIGNMENT : bit (5) > }
+// < DOWNLINK_TIMESLOT_ALLOCATION : bit (8) >
+// { 0 | 1 < Frequency Parameters : < Frequency Parameters IE > > }
+// { 0 < Dynamic Allocation : < Dynamic Allocation struct > >
+// | 1 < Fixed allocation : < Fixed Allocation struct > >}
+// < padding bits >
+// ! < Non-distribution part error : bit (*) = < no string > > }
+// ! < Message escape : 1 bit (*) = <no string> > }
+// ! < Address information part error : bit (*) = < no string > > }
+// ! < Distribution part error : bit (*) = < no string > > ;
+//
+// <Dynamic Allocation struct > ::=
+// < Extended Dynamic Allocation : bit (1) >
+// { 0 | 1 < P0 : bit (4) >
+// < PR_MODE : bit (1) > }
+// < USF_GRANULARITY : bit (1) >
+// { 0 | 1 < RLC_DATA_BLOCKS_GRANTED : bit (8) > }
+// { 0 | 1 < TBF Starting Time : < Starting Frame Number Description IE > > }
+// { 0 -- Timeslot Allocation
+// { 0 | 1 < USF_TN0 : bit (3) > }
+// { 0 | 1 < USF_TN1 : bit (3) > }
+// { 0 | 1 < USF_TN2 : bit (3) > }
+// { 0 | 1 < USF_TN3 : bit (3) > }
+// { 0 | 1 < USF_TN4 : bit (3) > }
+// { 0 | 1 < USF_TN5 : bit (3) > }
+// { 0 | 1 < USF_TN6 : bit (3) > }
+// { 0 | 1 < USF_TN7 : bit (3) > }
+// | 1 -- Timeslot Allocation with Power Control Parameters
+// < ALPHA : bit (4) >
+// { 0 | < USF_TN0 : bit (3) >
+// < GAMMA_TN0 : bit (5) > }
+// { 0 | 1 < USF_TN1 : bit (3) >
+// < GAMMA_TN1 : bit (5) > }
+// { 0 | 1 < USF_TN2 : bit (3) >
+// < GAMMA_TN2 : bit (5) > }
+// { 0 | 1 < USF_TN3 : bit (3) >
+// < GAMMA_TN3 : bit (5) > }
+// { 0 | 1 < USF_TN4 : bit (3) >
+// < GAMMA_TN4 : bit (5) > }
+// { 0 | 1 < USF_TN5 : bit (3) >
+// < GAMMA_TN5 : bit (5) > }
+// { 0 | 1 < USF_TN6 : bit (3) >
+// < GAMMA_TN6 : bit (5) > }
+// { 0 | 1 < USF_TN7 : bit (3) >
+// < GAMMA_TN7 : bit (5) > } } ;
+//
+// <Fixed Allocation struct > ::=
+// { 0 < UPLINK_TIMESLOT_ALLOCATION : bit (8) >
+// | 1 < Power Control Parameters : < Power Control Parameters IE > > }
+// < FINAL_ALLOCATION : bit (1) >
+// < DOWNLINK_CONTROL_TIMESLOT: bit (3) >
+// { 0 | 1 < P0 : bit (4) >
+// < BTS_PWR_CTRL_MODE : bit (1) >
+// < PR_MODE : bit (1) > }
+// { 0 | 1 < Measurement Mapping : < Measurement Mapping struct > > }
+// < TBF Starting Time : < Starting Frame Number Description IE > >
+// { 0 { 0 -- with length of Allocation Bitmap
+// < BLOCKS_OR_BLOCK_PERIODS : bit (1) >
+// < ALLOCATION_BITMAP_LENGTH : bit (7) >
+// < ALLOCATION_BITMAP : bit (val(ALLOCATION_BITMAP_LENGTH)) >
+// | 1 -- without length of Allocation Bitmap (fills remainder of the message)
+// < ALLOCATION_BITMAP : bit ** > }
+// ! < Message escape : 1 bit (*) = <no string> > } ;
+//
+// < Measurement Mapping struct > ::=
+// < Measurement Starting Time : < Starting Frame Number Description IE >
+// < MEASUREMENT_INTERVAL : bit (5) >
+// < MEASUREMENT_BITMAP : bit (8) > ;
+//
+// *******************************************************************
+
+class MsgPacketTimeslotReconfigure : public DownlinkMsgBase {
+public:
+
+ // Message type is included in MsgBase.
+
+ // Distributed message contents
+ IePageMode pageMode;
+ IeGlobalTFI globalTFI;
+ IeChannelCodingCommand chanCoding;
+ IeGlobalPacketTimingAdvance globalTimingAdvance;
+ IeRlcMode dlRlcMode;
+ bool controlAck;
+ IeTFI dlTfi;
+ IeTFI ulTfi;
+ IeTimeslotAllocation dlTimeslotAllocation;
+ IeFrequencyParameters frequencyParameters;
+ DynamicAllocationStruct dynamicAllocation;
+ FixedAllocationStruct fixedAllocation;
+
+ // Default constructor
+ MsgPacketTimeslotReconfigure() : DownlinkMsgBase(RlcMacMsgType::PACKET_TIMESLOT_RECONFIGURE),
+ pageMode(), globalTFI(), chanCoding(), globalTimingAdvance(), dlRlcMode(),
+ dlTfi(), ulTfi(), dlTimeslotAllocation(), frequencyParameters(), dynamicAllocation(),
+ fixedAllocation()
+ {
+ }
+
+ // Default destructor
+ ~MsgPacketTimeslotReconfigure() {}
+
+ // Pack IE into an output stream of bits.
+ RlcMacResult EncodeMsg(BitStreamOut &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketUplinkAckNack.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketUplinkAckNack.h
new file mode 100644
index 0000000..ea0141a
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketUplinkAckNack.h
@@ -0,0 +1,105 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketUplinkAckNack.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETUPLINKACKNACK_H__
+#define __MSGPACKETUPLINKACKNACK_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "iePageMode.h"
+#include "iePacketTimingAdvance.h"
+#include "ieTFI.h"
+#include "ieChannelCodingCommand.h"
+#include "ieAckNackDescription.h"
+#include "FixedAllocationStruct.h"
+#include "ieTLLI.h"
+
+
+// *******************************************************************
+// PACKET UPLINK ACK NACK
+//
+// GSM 04.60 11.2.28
+//
+// < Packet Uplink Ack/Nack message content > ::=
+// < PAGE MODE : bit (2) >
+// { 00 < UPLINK_TFI : bit (5) >
+// { 0 -- Message escape
+// { < CHANNEL_CODING_COMMAND : bit (2) >
+// < Ack/Nack Description : < Ack/Nack Description IE > >
+// { 0 | 1 < CONTENTION_RESOLUTION_TLLI : bit (32) > }
+// { 0 | 1 < Packet Timing Advance : < Packet Timing Advance IE > > }
+// { 0 | 1 < Power Control Parameters : < Power Control Parameters IE > > }
+// { 0 | 1 < Extension Bits : Extension Bits IE > } -- sub-clause 12.26
+// { 0 | 1 < Fixed Allocation Parameters : < Fixed Allocation struct > > }
+// < padding bits >
+// ! < Non-distribution part error : bit (*) = < no string > > }
+// ! < Message escape : 1 bit (*) = <no string> > }
+// ! < Address information part error : bit (*) = < no string > > }
+// ! < Distribution part error : bit (*) = < no string > > ;
+//
+// < Fixed Allocation struct > ::=
+// < FINAL_ALLOCATION : bit (1) >
+// { 0 -- Repeat Allocation
+// < TS_OVERRIDE : bit (8) >
+// | 1 -- Allocation with Allocation bitmap
+// < TBF Starting Time : < Starting Frame Number Description IE > >
+// { 0 | 1 <TIMESLOT_ALLOCATION : bit (8) > }
+// { 0 { 0 -- with length of Allocation Bitmap
+// < BLOCKS_OR_BLOCK_PERIODS : bit (1) >
+// < ALLOCATION_BITMAP_LENGTH : bit (7) >
+// < ALLOCATION_BITMAP : bit (val(ALLOCATION_BITMAP_LENGTH)) >
+// | 1 -- without length of Allocation Bitmap (fills remainder of the message)
+// < ALLOCATION_BITMAP : bit ** > } }
+// ! < Message escape : 1 bit (*) = <no string> >;
+//
+// *******************************************************************
+
+class MsgPacketUplinkAckNack : public DownlinkMsgBase {
+public:
+
+ // Message type is included in MsgBase.
+
+ // Distributed message contents
+ IePageMode pageMode;
+ IeTFI uplinkTFI;
+ IeChannelCodingCommand chanCoding;
+ IeAckNackDescription ackNackDescription;
+ IeTLLI contentionResTLLI;
+ IePacketTimingAdvance timingAdvance;
+ IePowerControlParameters powerControlParameters;
+ FixedAllocationStruct fixedAllocation;
+
+ // Default constructor
+ MsgPacketUplinkAckNack() : DownlinkMsgBase(RlcMacMsgType::PACKET_UPLINK_ACK_NACK),
+ pageMode(), uplinkTFI(), chanCoding(), contentionResTLLI(), ackNackDescription(),
+ timingAdvance(), powerControlParameters(), fixedAllocation()
+ {
+ }
+
+ // Default destructor
+ ~MsgPacketUplinkAckNack() {}
+
+ // Pack IE into an output stream of bits.
+ RlcMacResult EncodeMsg(BitStreamOut &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketUplinkAssignment.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketUplinkAssignment.h
new file mode 100644
index 0000000..9ccf2c1
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketUplinkAssignment.h
@@ -0,0 +1,183 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketUplinkAssignment.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETUPLINKASSIGNMENT_H__
+#define __MSGPACKETUPLINKASSIGNMENT_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "iePageMode.h"
+#include "iePersistenceLevel.h"
+#include "ieTLLI.h"
+#include "iePacketReqRef.h"
+#include "ieGlobalTFI.h"
+#include "ieTQI.h"
+#include "iePacketTimingAdvance.h"
+#include "ieFrequencyParameters.h"
+#include "ieChannelCodingCommand.h"
+#include "DynamicAllocationStruct.h"
+#include "SingleBlockAllocationStruct.h"
+#include "FixedAllocationStruct.h"
+
+
+// *******************************************************************
+// PACKET UPLINK ASSIGNMENT
+//
+// GSM 04.60 11.2.29
+//
+// < Packet Uplink Assignment message content > ::=
+// < PAGE_MODE : bit (2) >
+// { 0 | 1 <PERSISTENCE_LEVEL : bit (4) > * 4 }
+// { { 0 < Global TFI : < Global TFI IE > >
+// | 10 < TLLI : bit (32) >
+// | 110 < TQI : bit (16) >
+// | 111 < Packet Request Reference : < Packet Request Reference IE > > }
+// { 0 -- Message escape
+// { < CHANNEL_CODING_COMMAND : bit (2) >
+// < TLLI_BLOCK_CHANNEL_CODING : bit (1) >
+// < Packet Timing Advance : < Packet Timing Advance IE > >
+// { 0 | 1 < Frequency Parameters : < Frequency Parameters IE > > }
+// { 01 <Dynamic Allocation : < Dynamic Allocation struct > >
+// | 10 <Single Block Allocation : < Single Block Allocation struct > >
+// | 00 < extension >
+// | 11 < Fixed allocation : < Fixed Allocation struct > > }
+// < padding bits >
+// ! < Non-distribution part error : bit (*) = < no string > > }
+// ! < Message escape : 1 bit (*) = <no string> > }
+// ! < Address information part error : bit (*) = < no string > > }
+// ! < Distribution part error : bit (*) = < no string > > ;
+//
+// <extension> ::= -- Future extension can be done by modifying this structure
+// null ;
+//
+// <Dynamic Allocation struct > ::=
+// < Extended Dynamic Allocation : bit (1) >
+// { 0 | 1 < P0 : bit (4) >
+// < PR_MODE : bit (1) > }
+// < USF_GRANULARITY : bit (1) >
+// { 0 | 1 < UPLINK_TFI_ASSIGNMENT : bit (5) > }
+// { 0 | 1 < RLC_DATA_BLOCKS_GRANTED : bit (8) > }
+// { 0 | 1 < TBF Starting Time : < Starting Frame Number Description IE > > }
+// { 0 -- Timeslot Allocation
+// { 0 | 1 < USF_TN0 : bit (3) > }
+// { 0 | 1 < USF_TN1 : bit (3) > }
+// { 0 | 1 < USF_TN2 : bit (3) > }
+// { 0 | 1 < USF_TN3 : bit (3) > }
+// { 0 | 1 < USF_TN4 : bit (3) > }
+// { 0 | 1 < USF_TN5 : bit (3) > }
+// { 0 | 1 < USF_TN6 : bit (3) > }
+// { 0 | 1 < USF_TN7 : bit (3) > }
+// | 1 -- Timeslot Allocation with Power Control Parameters
+// < ALPHA : bit (4) >
+// { 0 | 1 < USF_TN0 : bit (3) >
+// < GAMMA_TN0 : bit (5) > }
+// { 0 | 1 < USF_TN1 : bit (3) >
+// < GAMMA_TN1 : bit (5) > }
+// { 0 | 1 < USF_TN2 : bit (3) >
+// < GAMMA_TN2 : bit (5) > }
+// { 0 | 1 < USF_TN3 : bit (3) >
+// < GAMMA_TN3 : bit (5) > }
+// { 0 | 1 < USF_TN4 : bit (3) >
+// < GAMMA_TN4 : bit (5) > }
+// { 0 | 1 < USF_TN5 : bit (3) >
+// < GAMMA_TN5 : bit (5) > }
+// { 0 | 1 < USF_TN6 : bit (3) >
+// < GAMMA_TN6 : bit (5) > }
+// { 0 | 1 < USF_TN7 : bit (3) >
+// < GAMMA_TN7 : bit (5) > } } ;
+//
+// <Single Block Allocation struct > ::=
+// < TIMESLOT_NUMBER : bit (3) >
+// { 0 | 1 < ALPHA : bit (4) >
+// < GAMMA_TN : bit (5) >}
+// { 0 | 1 < P0 : bit (4) >
+// < BTS_PWR_CTRL_MODE : bit (1) >
+// < PR_MODE : bit (1) > }
+// < TBF Starting Time : < Starting Frame Number Description IE > > ;
+//
+// <Fixed Allocation struct > ::=
+// { 0 | 1 < UPLINK_TFI_ASSIGNMENT : bit (5) > }
+// < FINAL_ALLOCATION : bit (1) >
+// < DOWNLINK_CONTROL_TIMESLOT: bit (3) >
+// { 0 | 1 < P0 : bit (4) >
+// < BTS_PWR_CTRL_MODE : bit (1) >
+// < PR_MODE : bit (1) > }
+// { 0 < TIMESLOT_ALLOCATION : bit (8) >
+// | 1 < Power Control Parameters : < Power Control Parameters IE > > }
+// < HALF_DUPLEX_MODE : bit (1) >
+// < TBF Starting Time : < Starting Frame Number Description IE > >
+// { 0 { 0 -- with length of Allocation Bitmap
+// < BLOCKS_OR_BLOCK_PERIODS : bit (1) >
+// < ALLOCATION_BITMAP_LENGTH : bit (7) >
+// < ALLOCATION_BITMAP : bit (val(ALLOCATION_BITMAP_LENGTH)) >
+// | 1 -- without length of Allocation Bitmap (fills remainder of the message)
+// < ALLOCATION_BITMAP : bit ** > }
+// ! < Message escape : 1 bit (*) = <no string> > } ;
+//
+// *******************************************************************
+
+class MsgPacketUplinkAssignment : public DownlinkMsgBase {
+public:
+
+ typedef enum
+ {
+ USE_CS1_FOR_DATA_BLK_WITH_TLLI,
+ USE_COMMANDED_CS_FOR_DATA_BLOCK_WITH_TLLI
+ } TLLI_BLOCK_CHANNEL_CODING;
+ // Message type is included in MsgBase.
+
+ // Distributed message contents
+ IePageMode pageMode;
+ struct PersistenceLevelStruct
+ {
+ IePersistenceLevel persistenceLevel[4];
+ bool isValid;
+ } PersistenceLevelParams;
+ IeGlobalTFI globalTFI;
+ IeTLLI tlli;
+ IeTQI tqi;
+ IePacketReqRef packetReqRef;
+ IePacketTimingAdvance timingAdvance;
+ IeChannelCodingCommand chanCoding;
+ TLLI_BLOCK_CHANNEL_CODING tlliBlockCoding;
+ IeFrequencyParameters frequencyParameters;
+ DynamicAllocationStruct dynamicAllocation;
+ SingleBlockAllocationStruct singleBlockAllocation;
+ FixedAllocationStruct fixedAllocation;
+
+ // Default constructor
+ MsgPacketUplinkAssignment() : DownlinkMsgBase(RlcMacMsgType::PACKET_UPLINK_ASSIGNMENT),
+ pageMode(), globalTFI(), tlli(), tqi(), packetReqRef(),
+ timingAdvance(), frequencyParameters(), dynamicAllocation(), singleBlockAllocation(),
+ fixedAllocation()
+ {
+ PersistenceLevelParams.isValid = FALSE;
+ }
+
+ // Default destructor
+ ~MsgPacketUplinkAssignment() {}
+
+ // Pack IE into an output stream of bits.
+ RlcMacResult EncodeMsg(BitStreamOut &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketUplinkDummyControlBlock.h b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketUplinkDummyControlBlock.h
new file mode 100644
index 0000000..36c8bfe
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/MsgPacketUplinkDummyControlBlock.h
@@ -0,0 +1,63 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : MsgPacketUplinkDummyControlBlock.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __MSGPACKETUPLINKDUMMYCONTROLBLOCK_H__
+#define __MSGPACKETUPLINKDUMMYCONTROLBLOCK_H__
+
+#include "MsgBase.h"
+#include "bitstream.h"
+#include "ieTLLI.h"
+
+
+// *******************************************************************
+// PACKET UPLINK DUMMY CONTROL BLOCK
+//
+// GSM 04.60 11.2.8b
+//
+// < Packet Uplink Dummy Control Block message content > ::=
+// < TLLI : bit (32) >
+// < padding bits > ;
+//
+// *******************************************************************
+
+class MsgPacketUplinkDummyControlBlock : public UplinkMsgBase {
+public:
+
+ // Message type is included in MsgBase.
+
+ // Message contents
+ IeTLLI tlli;
+
+ // Default constructor
+ MsgPacketUplinkDummyControlBlock() : UplinkMsgBase(RlcMacMsgType::PACKET_UPLINK_DUMMY_CONTROL_BLOCK),
+ tlli()
+ {
+ }
+
+ // Default destructor
+ ~MsgPacketUplinkDummyControlBlock() {}
+
+ // Decode input stream of bits into message.
+ RlcMacResult DecodeMsg(BitStreamIn &dataStream);
+
+ // Display IE details.
+ void DisplayMsgDetail();
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/NCMeasurementStruct.h b/data/mnet/GP10/Host/Rlc_mac/include/NCMeasurementStruct.h
new file mode 100644
index 0000000..c1e9866
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/NCMeasurementStruct.h
@@ -0,0 +1,94 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : NCMeasurementStruct.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __NCMEASUREMENTSTRUCT_H__
+#define __NCMEASUREMENTSTRUCT_H__
+
+#include "logging\vclogging.h"
+#include "bitstream.h"
+
+
+// *******************************************************************
+// class NCMeasurementStruct
+//
+// Description:
+// NC Measurement Struct -- GSM04.60 11.2.4
+//
+// < NC Measurement Parameters struct > ::=
+// < NETWORK_CONTROL_ORDER : bit (2) >
+// { 0 | 1 < NC_NON_DRX_PERIOD : bit (3) >
+// < NC_REPORTING_PERIOD_I : bit (3) >
+// < NC_REPORTING_PERIOD_T : bit (3) > }
+// { 0 | 1 < NC_FREQUENCY_LIST : NC Frequency list struct > } ;
+// *******************************************************************
+
+class NCMeasParamStruct {
+public:
+
+ typedef enum
+ {
+ NC0,
+ NC1,
+ NC2,
+ Reserved
+ } NETWORK_CONTROL_ORDER;
+
+ typedef enum
+ {
+ NO_NON_DRX_MODE,
+ NON_DRX_PERIOD_0_24_SECONDS,
+ NON_DRX_PERIOD_0_48_SECONDS,
+ NON_DRX_PERIOD_0_72_SECONDS,
+ NON_DRX_PERIOD_0_96_SECONDS,
+ NON_DRX_PERIOD_1_20_SECONDS,
+ NON_DRX_PERIOD_1_44_SECONDS,
+ NON_DRX_PERIOD_1_92_SECONDS
+ } NC_NON_DRX_PERIOD;
+
+ typedef enum
+ {
+ REPORTING_PER_0_48_SECONDS,
+ REPORTING_PER_0_96_SECONDS,
+ REPORTING_PER_1_96_SECONDS,
+ REPORTING_PER_3_84_SECONDS,
+ REPORTING_PER_7_68_SECONDS,
+ REPORTING_PER_15_36_SECONDS,
+ REPORTING_PER_30_72_SECONDS,
+ REPORTING_PER_61_44_SECONDS
+ } NC_REPORTING_PERIOD;
+
+ NETWORK_CONTROL_ORDER netCtlOrder;
+ struct PeriodInfoStruct
+ {
+ NC_NON_DRX_PERIOD nonDrxPeriod;
+ NC_REPORTING_PERIOD reportingPeriodI;
+ NC_REPORTING_PERIOD reportingPeriodT;
+ bool isValid;
+ } periodInfo;
+ bool isValid;
+
+ // Default constructor
+ NCMeasParamStruct() : isValid(FALSE), netCtlOrder(NC0)
+ {
+ bzero((char *)&periodInfo, sizeof(periodInfo));
+ }
+
+ RlcMacResult EncodeNCMeasParamStruct(BitStreamOut &dataStream);
+ void DisplayNCMeasParamStruct(DbgOutput *outObj);
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/RlcMacCommon.h b/data/mnet/GP10/Host/Rlc_mac/include/RlcMacCommon.h
new file mode 100644
index 0000000..7dbc51d
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/RlcMacCommon.h
@@ -0,0 +1,64 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : RlcMacCommon.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __RLCMACCOMMON_H__
+#define __RLCMACCOMMON_H__
+
+#include "oam_api.h"
+#include "JCErr.h"
+
+#define RLC_MAC_MAX_RF_FREQS 64
+#define MAX_TFI 32
+#define MAX_NUM_RADIO_PRIORITY 4
+#define MAX_ALPHA_VALUE 16
+#define MAX_TIMESLOTS 8
+#define MAX_TRX 2
+#define MAX_USF_PER_TS 8
+#define MAX_TAI_PER_TS 16
+#define MAX_DATA_RTS_COUNT 1
+#define MAX_SIGNALLING_RTS_COUNT 2
+#define RLC_MOD_VAL 128
+#define MAX_RTI_VAL 32
+#define MAX_RLC_PDU_SIZE 1560
+#define CTL_ACK_TAG_NOT_APPLICABLE 0xff
+#define RLC_MAC_NORMAL_BURST 0
+#define RLC_MAC_ACCESS_BURST 1
+
+#define MAX_ALLOWED_INACTIVE_TIME 100 // in 100's of ms
+
+
+typedef enum
+{
+ MS_ID_TLLI,
+ MS_ID_GLOBAL_TFI
+} MS_ID_TYPE;
+
+
+// Common DSP and Layer one settings
+#define RELATIVE_START_TIME_VAL 1
+
+typedef enum { DL, UL } LinkDirection;
+
+inline int GetMibValueInt(MibTag tag)
+{
+ long val;
+ oam_getMibIntVar(tag, &val);
+ return ((int)val);
+}
+
+
+#endif
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/RlcMacConfig.h b/data/mnet/GP10/Host/Rlc_mac/include/RlcMacConfig.h
new file mode 100644
index 0000000..4c57508
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/RlcMacConfig.h
@@ -0,0 +1,34 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// Version : 1.0
+// Status : Under development
+// File : RlcMacConfig.h
+// Author(s) : Tim Olson
+// Create Date : 10/31/00
+// Description :
+//
+// *******************************************************************
+
+#ifndef __RLCMACCONFIG_H__
+#define __RLCMACCONFIG_H__
+
+#include "bssgp/bssgp_api.h"
+
+// Maximum message size passed to the RlcMacTask
+const int RLCMAC_MAX_MSG_LENGTH = sizeof(BSSGP_API_MSG);
+
+// Maximum number of messages to the RlcMacTask.
+const int RLCMAC_MAX_MSGS = 100;
+
+#define RLCMAC_TASK_NAME "RlcMacTask"
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/RlcMacMsgType.h b/data/mnet/GP10/Host/Rlc_mac/include/RlcMacMsgType.h
new file mode 100644
index 0000000..cda502c
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/RlcMacMsgType.h
@@ -0,0 +1,143 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : RlcMacMsgType.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __RLCMACMSGTYPE_H__
+#define __RLCMACMSGTYPE_H__
+
+#include "bitstream.h"
+#include "RlcMacResult.h"
+
+// Message types defined for RLC/MAC operation.
+// GSM04.60 11.2.0
+
+#define MAX_RLC_MAC_MSG_NAME_SIZE 128
+
+extern char UplinkMsgNames[][MAX_RLC_MAC_MSG_NAME_SIZE];
+extern char NonDistributedDownlinkMsgNames[][MAX_RLC_MAC_MSG_NAME_SIZE];
+extern char DistributedDownlinkMsgNames[][MAX_RLC_MAC_MSG_NAME_SIZE];
+extern char SysInfoDownlinkMsgNames[][MAX_RLC_MAC_MSG_NAME_SIZE];
+
+// *******************************************************************
+// class MsgBase
+//
+// Description
+//
+// *******************************************************************
+
+class RlcMacMsgType
+{
+public:
+
+ // Downlink RLC/MAC messages 11.2.0.1
+ typedef enum {
+ PACKET_CELL_CHANGE_ORDER = 0x01,
+ PACKET_DOWNLINK_ASSIGNMENT = 0x02,
+ PACKET_MEASUREMENT_ORDER = 0x03,
+ PACKET_POLLING_REQUEST = 0x04,
+ PACKET_POWER_CONTROL_TIMING_ADVANCE = 0x05,
+ PACKET_QUEUEING_NOTIFICATION = 0x06,
+ PACKET_TIMESLOT_RECONFIGURE = 0x07,
+ PACKET_TBF_RELEASE = 0x08,
+ PACKET_UPLINK_ACK_NACK = 0x09,
+ PACKET_UPLINK_ASSIGNMENT = 0x0A,
+ RLC_MAC_MAX_NONDISTRIBUTED_DOWNLINK_MSG
+ } RLC_MAC_NONDISTRIBUTED_DOWNLINK_MSGS;
+
+ typedef enum {
+ PACKET_ACCESS_REJECT = 0x21,
+ PACKET_PAGING_REQUEST = 0x22,
+ PACKET_PDCH_RELEASE = 0x23,
+ PACKET_PRACH_PARAMETERS = 0x24,
+ PACKET_DOWNLINK_DUMMY_CONTROL_BLOCK = 0x25,
+ RLC_MAC_MAX_DISTRIBUTED_DOWNLINK_MSG
+ } RLC_MAC_DISTRIBUTED_DOWNLINK_MSGS;
+
+ typedef enum {
+ PACKET_SYSTEM_INFO_1 = 0x31,
+ PACKET_SYSTEM_INFO_2 = 0x32,
+ PACKET_SYSTEM_INFO_3 = 0x33,
+ PACKET_SYSTEM_INFO_3_BIS = 0x34,
+ PACKET_SYSTEM_INFO_4 = 0x35,
+ PACKET_SYSTEM_INFO_5 = 0x36,
+ PACKET_SYSTEM_INFO_13 = 0x37,
+ RLC_MAC_MAX_SYSINFO_MSG
+ } RLC_MAC_SYSINFO_DOWNLINK_MSGS;
+
+ // Uplink RLC/MAC messages 11.2.0.2
+ typedef enum {
+ PACKET_CELL_CHANGE_FAILURE = 0x00,
+ PACKET_CONTROL_ACK = 0x01,
+ PACKET_DOWNLINK_ACK_NACK = 0x02,
+ PACKET_UPLINK_DUMMY_CONTROL_BLOCK = 0x03,
+ PACKET_MEASUREMENT_REPORT = 0x04,
+ PACKET_RESOURCE_REQUEST = 0x05,
+ PACKET_MOBILE_TBF_STATUS = 0x06,
+ PACKET_PSI_STATUS = 0x07,
+ PACKET_CONTROL_ACK_8_BIT = 0x1f,
+ RLC_MAC_MAX_UPLINK_MSG
+ } RLC_MAC_UPLINK_MSGS;
+
+ // Constructors
+ RlcMacMsgType(RLC_MAC_NONDISTRIBUTED_DOWNLINK_MSGS type) : msgType(type) {}
+ RlcMacMsgType(RLC_MAC_DISTRIBUTED_DOWNLINK_MSGS type) : msgType(type) {}
+ RlcMacMsgType(RLC_MAC_SYSINFO_DOWNLINK_MSGS type) : msgType(type) {}
+ RlcMacMsgType(RLC_MAC_UPLINK_MSGS type) : msgType(type) {}
+ RlcMacMsgType(){}
+
+ // Pack message type into a single ouput stream of bits
+ RlcMacResult EncodeMsgType(BitStreamOut &dataStream);
+
+ // Extract message type from a single input stream of bits
+ RlcMacResult DecodeMsgType(BitStreamIn &dataStream);
+
+ // Return a printable message type string.
+ char *DisplayDownlinkMsgType()
+ {
+ if ((msgType < RLC_MAC_MAX_NONDISTRIBUTED_DOWNLINK_MSG) &&
+ (msgType > 0))
+ {
+ return (NonDistributedDownlinkMsgNames[msgType]);
+ }
+ else if ((msgType < RLC_MAC_MAX_DISTRIBUTED_DOWNLINK_MSG) &&
+ (msgType > 0x20))
+ {
+ return (DistributedDownlinkMsgNames[msgType & 0xDF]);
+ }
+ else if ((msgType < RLC_MAC_MAX_SYSINFO_MSG) && (msgType > 0x30))
+ {
+ return (SysInfoDownlinkMsgNames[msgType & 0xCF]);
+ }
+ else
+ {
+ return ("Unknown RLC/MAC downlink message.");
+ }
+ }
+
+ char *DisplayUplinkMsgType()
+ {
+ if (msgType < RLC_MAC_MAX_UPLINK_MSG)
+ return (UplinkMsgNames[msgType]);
+ else
+ return ("Unknown RLC/MAC uplink message.");
+ }
+
+ unsigned char msgType;
+
+};
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/RlcMacResult.h b/data/mnet/GP10/Host/Rlc_mac/include/RlcMacResult.h
new file mode 100644
index 0000000..fa9700f
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/RlcMacResult.h
@@ -0,0 +1,42 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : RlcMacResult.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __RLCMACRESULT_H__
+#define __RLCMACRESULT_H__
+
+#include "logging\vclogging.h"
+
+#define FALSE 0
+#define TRUE 1
+
+typedef enum {
+ RLC_MAC_SUCCESS,
+ RLC_MAC_ERROR,
+ RLC_MAC_INVALID_NUM_BITS,
+ RLC_MAC_PARAMETER_RANGE_ERROR,
+ RLC_MAC_MISSING_IE,
+ RLC_MAC_INVALID_IE
+} RlcMacResult;
+
+#define RLC_MAC_RESULT_CHECK(result) \
+ if(result != RLC_MAC_SUCCESS) \
+ { \
+ DBG_LEAVE();\
+ return (result);\
+ }
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/RlcMacTask.h b/data/mnet/GP10/Host/Rlc_mac/include/RlcMacTask.h
new file mode 100644
index 0000000..284da07
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/RlcMacTask.h
@@ -0,0 +1,187 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : RlcMacTask.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+#ifndef __RLCMACTASK_H__
+#define __RLCMACTASK_H__
+
+#include <msgQLib.h>
+#include "Os/JCTask.h"
+#include "GP10Err.h"
+#include "Rlc_mac/RlcMacIntf.h"
+#include "ril3/msg_channel_request.h"
+#include "MacHeader.h"
+#include "msgL1.h"
+#include "TbfPool.h"
+#include "TSPool.h"
+#include "ULDataBlockPool.h"
+#include "MsgBase.h"
+#include "MsgPacketResourceRequest.h"
+#include "ScheduleAllocationInfo.h"
+#include "MsgPacketTBFRelease.h"
+#include "MsgPacketDownlinkAckNack.h"
+
+typedef enum
+{
+ RESOURCES_UNAVAILABLE,
+ RESOURCES_ALLOCATED,
+ TBF_ACTIVE
+} DL_ALLOC_RES;
+
+class RlcMacTask {
+public:
+
+ static int InitRlcMac(void);
+ static int RlcMacLoop(void);
+
+ // OAM functions
+ JC_STATUS DecodeOamAdminMsgInd(RlcMacAdminStateChangeType *msgReq);
+ JC_STATUS DecodeOamOpMsgInd(RlcMacOpStateChangeType *msgReq);
+
+ // RM MD message handling
+ JC_STATUS ProcessRmMdMsgInd(T_CNI_RIL3MD_RRM_MSG *msgReq);
+ JC_STATUS ProcessChanReq(T_CNI_RIL3MD_RRM_MSG *msgReq);
+
+ // MAC allocation
+ JC_STATUS ULOnePhaseAllocation(T_CNI_RIL3RRM_MSG_CHANNEL_REQUEST *chanReq, T_CNI_RIL3MD_RRM_MSG *msgReq);
+ JC_STATUS ULCCCHImmediateAssignment(ULTbf *pUlTbf,
+ T_CNI_RIL3RRM_MSG_CHANNEL_REQUEST *chanReq, T_CNI_RIL3MD_RRM_MSG *msgReq);
+
+ JC_STATUS ULSingleBlockAllocation
+ (
+ T_CNI_RIL3RRM_MSG_CHANNEL_REQUEST *chanReq,
+ T_CNI_RIL3MD_RRM_MSG *msgReq
+ );
+ JC_STATUS SendPacketAccessReject(int trx, int ts, IeBase *pIe,
+ MS_ID_TYPE idType);
+ JC_STATUS SendPacketUplinkAssignment(int trx, int ts, ULTbf *pUlTbf, IeBase *pIe,
+ MS_ID_TYPE idType);
+ JC_STATUS SendPacketTBFRelease(DLTbf *pDlTbf, ULTbf *pUlTbf,
+ MsgPacketTBFRelease::TBF_RELEASE_CAUSE cause);
+
+
+ JC_STATUS AllocateULResources
+ (
+ MsgPacketResourceRequest &msg,
+ int trx,
+ int ts
+ );
+ JC_STATUS SendPacketDownlinkAssignment(DLTbf *pDlTbf, ULTbf *pUlTbf, bool controlAck);
+ JC_STATUS SendPacketDownlinkAssignment(DLTbf *pDlTbf, int trx, int ts, bool controlAck);
+ DL_ALLOC_RES AllocateDLResources(BSSGP_DL_UNITDATA_MSG *pUnitDataMsg);
+ JC_STATUS CheckDLMsgQueues();
+ JC_STATUS DLCCCHImmediateAssignment(DLTbf *pDlTbf);
+
+
+ // Layer 1 message handling
+ JC_STATUS DecodeL1MsgInd(RlcMacL1MsgIndType *msgReq);
+ JC_STATUS ProcessPhPdtchInd(MsgPdtchInd *l1PdtchInd);
+ JC_STATUS ProcessPhPacchInd(MsgPacchInd *l1PacchInd);
+ JC_STATUS ProcessPhRTSInd(MsgReadyToSend *pL1RTSInd);
+ bool SendDownlinkDummyControlBlock(int trx, int ts);
+ bool SendDownlinkDataBlock(int trx, int ts);
+ void SendULActivationMsg(ULTbf *pUlTbf);
+ void SendULReconfigurationMsg(ULTbf *pUlTbf);
+ void SendULDeactivationMsg(ULTbf *pUlTbf);
+ void SendDLActivationMsg(DLTbf *pDlTbf);
+ void SendDLReconfigurationMsg(DLTbf *pDlTbf);
+ void SendDLDeactivationMsg(DLTbf *pDlTbf);
+ void SendSingleBlockAssignAlertMsg(int trx, int ts, unsigned int frameNum);
+ void SendDLAssignAlertMsg(int trx, int ts, unsigned int frameNum, char tag);
+ void SendDLAckNackInfoMsg(int trx, DLTbf *pDlTbf, MsgPacketDownlinkAckNack *pMsg);
+
+ JC_STATUS SendPacchMsg
+ (
+ int trx,
+ int ts,
+ DLMacHeader *pDlMsgHdr,
+ DownlinkMsgBase *pDlMsg,
+ unsigned char ctlAckTag,
+ char burstType
+ );
+ JC_STATUS SendPdtchMsg
+ (
+ int trx,
+ int ts,
+ unsigned char ctlAckTag,
+ char burstType,
+ DLDataBlock *pDlDataBlock
+ );
+
+ // RLC/MAC message handling
+ JC_STATUS ProcessULRlcDataBlock
+ (
+ MsgPdtchInd *l1PdtchInd,
+ ULDataBlock *pUlDataBlock
+ );
+ JC_STATUS DecodeULRlcControlBlock
+ (
+ MsgPacchInd *l1PacchInd,
+ ULMacHeader &rlcMacMsgHeader,
+ BitStreamIn &l1MsgBitsIn
+ );
+ JC_STATUS DecodeULRlcControlBlockAccessBurst
+ (
+ MsgPacchAbInd *l1PacchAbInd
+ );
+
+
+ // Uplink resource requests
+ bool ULSingleBlockRequest(int *trx, int *ts);
+ bool ULResourceReallocRequest(ULTbf *pUlTbf);
+ bool ULResourceReallocRequest(ULTbf *pUlTbf, DLTbf *pDlTbf);
+ bool ULResourceRequest(ULTbf *pUlTbf);
+ bool ULResourceRequest(ULTbf *pUlTbf, DLTbf *pDlTbf);
+ bool ULReleaseResourceRequest(ULTbf *pUlTbf);
+
+ // Downlink resource requests
+ bool DLSingleTSResourceRequest(DLTbf *pDlTbf);
+ bool DLResourceReallocRequest(DLTbf *pDlTbf);
+ bool DLResourceReallocRequest(DLTbf *pDlTbf, ULTbf *pUlTbf);
+ bool DLResourceRequest(DLTbf *pDlTbf);
+ bool DLResourceRequest(DLTbf *pDlTbf, ULTbf *pUlTbf);
+ bool DLReleaseResourceRequest(DLTbf *pDlTbf);
+
+ // Scheduling requests
+ bool TSSelectionRequest(int *trx, int *ts, DLTbf *pDlTbf);
+ bool TSSelectionRequest(int *trx, int *ts, ULTbf *pUlTbf);
+ bool PollingTsCheck(int trx, int ts, DLTbf *pDlTbf);
+ bool ScheduleRLCBlock(int trx, int ts, DLTbf **ppDlTbf);
+ bool ScheduleRLCBlock(int trx, int ts, ULTbf **ppUlTbf);
+ bool ScheduleRLCBlock(int trx, int ts, DLTbf **ppDlTbf, ULTbf **ppUlTbf);
+
+ // Schedule Helpers
+ bool AllocateUser (ScheduleAllocationInfo *schedAllocInfo);
+ bool AllocateUserIfBetterQoS (ScheduleAllocationInfo *schedAllocInfo);
+ bool AllocateOneSlot (ScheduleAllocationInfo *schedAllocInfo);
+ bool FindBestSlot (ScheduleAllocationInfo *schedAllocInfo);
+ bool DeallocateUser (Tbf* tbf, LinkDirection dir);
+ bool GetLeastUtilizedSlot(Tbf* tbf, int *trxArg, int *tsArg);
+ bool GetNaturalSlot(Tbf* tbf, int *trxArg, int *tsArg) ;
+ int GetBtsGprsConfig(int trx, bool* tsMap, float* capUL, float* capDL);
+ void UpdateAllowedSlots(ScheduleAllocationInfo *schedAllocInfo);
+
+ TbfPool tbfPool;
+ TSPool tsPool;
+ static RlcMacTask *theRlcMacTask;
+
+private:
+
+ static bool isCreated;
+ JCTask RlcMacTaskObj;
+
+};
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ScheduleAllocationInfo.h b/data/mnet/GP10/Host/Rlc_mac/include/ScheduleAllocationInfo.h
new file mode 100644
index 0000000..a58ff46
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ScheduleAllocationInfo.h
@@ -0,0 +1,204 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : Multislot.h
+// Author(s) : Daryl Kaiser
+// Create Date : 12/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __SCHEDULEALLOCATION_H__
+#define __SCHEDULEALLOCATION_H__
+
+#include "RlcMacCommon.h"
+#include "RlcMacResult.h"
+#include "Tbf.h"
+
+
+// *******************************************************************
+// class ScheduleAllocationInfo
+//
+// Description: A transient object created when scheduling a new user
+//
+// *******************************************************************
+class ScheduleAllocationInfo {
+
+public:
+
+ ScheduleAllocationInfo(int mclass, int dclass, int pclass,
+ int ptclass, Tbf* tbfArg, LinkDirection dir,
+ bool* allocatedTsOppositeDirection) :
+ multislotClass(mclass), delayClass(dclass), precedenceClass(pclass),
+ peakThroughputClass(ptclass), tbf(tbfArg), direction(dir),
+ maxDlSlots(0), maxUlSlots(0), nbrOfCandConfigs(0)
+ {
+ if ( allocatedTsOppositeDirection )
+ {
+ if ( dir==DL )
+ {
+ for ( int ts=0; ts<MAX_TIMESLOTS; ts++ )
+ {
+ allocatedTsDL[ts] = FALSE;
+ allocatedTsUL[ts] = allocatedTsOppositeDirection[ts];
+ }
+ }
+ else
+ {
+ for ( int ts=0; ts<MAX_TIMESLOTS; ts++ )
+ {
+ allocatedTsDL[ts] = allocatedTsOppositeDirection[ts];
+ allocatedTsUL[ts] = FALSE;
+ }
+ }
+ }
+ else
+ {
+ for ( int ts=0; ts<MAX_TIMESLOTS; ts++ )
+ {
+ allocatedTsDL[ts] = FALSE;
+ allocatedTsUL[ts] = FALSE;
+ }
+ }
+ }
+
+ ~ScheduleAllocationInfo() {}
+
+ int GetMultislotClass(void) const
+ {
+ return (multislotClass);
+ }
+ int GetDelayClass(void) const
+ {
+ return (delayClass);
+ }
+ int GetPrecedenceClass(void) const
+ {
+ return (precedenceClass);
+ }
+ int GetPeakThroughputClass(void) const
+ {
+ return (peakThroughputClass);
+ }
+ Tbf* GetTbf(void) const
+ {
+ return (tbf);
+ }
+ LinkDirection GetDirection(void) const
+ {
+ return (direction);
+ }
+ void AddSlotAllocation(void)
+ {
+ if ( direction == DL )
+ {
+ allocatedTsDL[slotAlloc.ts] = TRUE;
+ }
+ else
+ {
+ allocatedTsUL[slotAlloc.ts] = TRUE;
+ }
+ }
+ void InitializeNewSlotAllocation(void)
+ {
+ slotAlloc.trx = -1;
+ slotAlloc.ts = -1;
+ slotAlloc.entries = -1;
+ }
+ void SetNewSlotAllocation(int trx, int ts, int entries)
+ {
+ slotAlloc.trx = trx;
+ slotAlloc.ts = ts;
+ slotAlloc.entries = entries;
+ }
+ void GetNewSlotAllocation(int* trx, int* ts, int* entries) const
+ {
+ *trx = slotAlloc.trx;
+ *ts = slotAlloc.ts;
+ *entries = slotAlloc.entries;
+ }
+ int GetNewSlotEntries(void) const
+ {
+ return(slotAlloc.entries);
+ }
+ bool ComputeMultislotOptions(void);
+ int ComputeDesiredNumberOfSlots(void) const;
+ void ConstrainCandMultiConfig(void);
+ bool IsAllowedTs(LinkDirection dir, int ts);
+ bool IncludesNaturalTs(LinkDirection dir, int newTs);
+
+ /*-------------------------------------------------------------------------
+ * Multislot Configuration Generator Tables
+ *-------------------------------------------------------------------------*/
+ enum { PAT_ORDER = 8 };
+ enum { PAT_INDEX = 35 };
+ enum { PAT_SLOTS = 8 };
+ enum { MULTI_CLASS = 12 };
+ enum { MULTI_INDEX = 28 };
+ enum { MULTI_SETS = 28 };
+ enum { MULTI_PARMS = 7 };
+ enum { MAX_MULTI_CONFIG_CANDIDATES = 173 };
+
+ static const int nbrTsPatterns[PAT_ORDER];
+ static const char tsPattern[PAT_ORDER][PAT_INDEX][PAT_SLOTS];
+ static const int nbrMultiConfig[MULTI_CLASS];
+ static const char* multiConfig[MULTI_CLASS][MULTI_INDEX];
+ static const char ms[MULTI_SETS][MULTI_PARMS]; //multislot param sets
+ static const char multiMaxDlSlots[MULTI_CLASS];
+ static const char multiMaxUlSlots[MULTI_CLASS];
+
+ struct MultiSet
+ {
+ const char rangeStartDL;
+ const char rangeEndDL;
+ const char patternOrderDL;
+ const char patternIndexDL;
+ const char slotOffsetUL;
+ const char patternOrderUL;
+ const char patternIndexUL;
+ };
+ /*-------------------------------------------------------------------------
+ * Candidate multislot configurations for new TBF
+ *-------------------------------------------------------------------------*/
+ struct MultislotConfig
+ {
+ bool valid;
+ bool allowedTsDL[MAX_TIMESLOTS];
+ bool allowedTsUL[MAX_TIMESLOTS];
+ };
+ int nbrOfCandConfigs;
+ MultislotConfig candMultiConfig[MAX_MULTI_CONFIG_CANDIDATES];
+
+private:
+
+ int multislotClass;
+ int delayClass;
+ int precedenceClass;
+ int peakThroughputClass;
+ Tbf* tbf;
+ LinkDirection direction;
+ int maxDlSlots;
+ int maxUlSlots;
+ bool allocatedTsDL[MAX_TIMESLOTS];
+ bool allocatedTsUL[MAX_TIMESLOTS];
+ /*-------------------------------------------------------------------------
+ * New slot allocation (temporary for communicating each new slot)
+ *-------------------------------------------------------------------------*/
+ struct SlotAllocation
+ {
+ int trx;
+ int ts;
+ int entries;
+ };
+ SlotAllocation slotAlloc;
+};
+
+
+#endif
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ScheduleInfo.h b/data/mnet/GP10/Host/Rlc_mac/include/ScheduleInfo.h
new file mode 100644
index 0000000..9827000
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ScheduleInfo.h
@@ -0,0 +1,97 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ScheduleInfo.h
+// Author(s) : Daryl Kaiser
+// Create Date : 12/5/2000
+// Description :
+//
+// *******************************************************************
+
+#ifndef __SCHEDULEINFO_H__
+#define __SCHEDULEINFO_H__
+
+#include "RlcMacCommon.h"
+#include "RlcMacResult.h"
+#include "ScheduleQueue.h"
+
+// *******************************************************************
+// class ScheduleInfo
+//
+// Description
+//
+// *******************************************************************
+class ScheduleInfo {
+
+public:
+
+ ScheduleInfo() : scheduleQueueDL(DL), scheduleQueueUL(UL)
+ {
+ nbrUsersDL = 0;
+ nbrUsersUL = 0;
+ utilizedCapacityDL = 0.0;
+ utilizedCapacityUL = 0.0;
+ };
+
+ ~ScheduleInfo() {}
+
+ enum { MAX_USERS_PER_SLOT = 16 };
+ enum { MAX_USERS_PER_SLOT_UL = 7 };
+
+
+ int GetNbrUsers(LinkDirection dir) const
+ {
+ if ( dir == DL )
+ {
+ return (nbrUsersDL);
+ }
+ else
+ {
+ return (nbrUsersUL);
+ }
+ }
+ float GetUtilizedCapacity(LinkDirection dir) const
+ {
+ if ( dir == DL )
+ {
+ return (utilizedCapacityDL);
+ }
+ else
+ {
+ return (utilizedCapacityUL);
+ }
+ return (utilizedCapacityUL);
+ }
+ ScheduleQueue* GetQueue(LinkDirection dir)
+ {
+ if ( dir == DL )
+ {
+ return (&scheduleQueueDL);
+ }
+ else
+ {
+ return (&scheduleQueueUL);
+ }
+ }
+ bool OkayToAddUser(LinkDirection dir) const;
+ void UpdateUsersAndCapacity(LinkDirection dir);
+ int GetNbrGprsTs(void) const;
+
+private:
+
+ int nbrUsersDL;
+ int nbrUsersUL;
+ float utilizedCapacityDL;
+ float utilizedCapacityUL;
+ ScheduleQueue scheduleQueueDL;
+ ScheduleQueue scheduleQueueUL;
+};
+
+
+#endif
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ScheduleQueue.h b/data/mnet/GP10/Host/Rlc_mac/include/ScheduleQueue.h
new file mode 100644
index 0000000..7b11998
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ScheduleQueue.h
@@ -0,0 +1,82 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ScheduleQueue.h
+// Author(s) : Daryl Kaiser
+// Create Date : 12/5/2000
+// Description :
+//
+// *******************************************************************
+
+#ifndef __SCHEDULEQUEUE_H__
+#define __SCHEDULEQUEUE_H__
+
+#include "RlcMacCommon.h"
+#include "Tbf.h"
+
+#define NULL_TBF (Tbf*) 0
+
+// *******************************************************************
+// class ScheduleQueue
+//
+// Description
+//
+// *******************************************************************
+class ScheduleQueue {
+
+public:
+
+ ScheduleQueue(LinkDirection);
+ ~ScheduleQueue() {}
+
+ enum { NULL_IMPORTANCE = 9999 };
+ enum { QUEUE_NUM_LEVELS = 4 };
+ enum { QUEUE_MAX_SIZE = 12 };
+
+ const LinkDirection direction;
+ static const int nbrEntries[QUEUE_NUM_LEVELS];
+ static const float capacityPerEntry[QUEUE_NUM_LEVELS];
+
+ int FindAvailableEntries (Tbf *pTbf, int desiredLevel, int precedence, bool tryOtherLevels);
+ int AllocateEntries (Tbf *pTbf, int desiredLevel, int precedence, bool tryOtherLevels);
+ int DeallocateEntries (Tbf *pTbf, int level);
+ void BalanceEntries (int level);
+ bool ScheduleNextBlock (Tbf **ppTbf);
+ void GetUsersAndCapacity(int *nbrUsers, float *utilizedCapacity);
+ void CopyQueue(void);
+ void RestoreQueue(void);
+
+private:
+
+ struct Entry
+ {
+ Tbf *userTbf;
+ int precedence;
+ int entryNumber;
+ int importance;
+ };
+ int currentIndex[QUEUE_NUM_LEVELS];
+ Entry queue[QUEUE_NUM_LEVELS][QUEUE_MAX_SIZE];
+ Entry savedQueue[QUEUE_NUM_LEVELS][QUEUE_MAX_SIZE]; // a temp copy
+
+ void Rank(int level, int *rankIndex, int *rankImportance, Tbf **rankTbf);
+ bool AllocateOneEntry (int level, int index, Tbf *pTbf,
+ int precedence, int entryNumber);
+ void SetEntry (int level, int index, Tbf *pTbf, int precedence,
+ int entryNumber, int importance);
+ Tbf* GetEntryTbf (int level, int index) const;
+ Tbf* GetCurrentEntryTbf (int level) const;
+ int GetAllTbf(int level, Tbf **ppTbf, int *precedence, int *highestEntry);
+ int GetEntryImportance (int level, int index) const;
+ void ResetCurrentIndex (int level);
+ bool IncrementCurrentIndex (int level);
+};
+
+#endif
+
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/SingleBlockAllocationStruct.h b/data/mnet/GP10/Host/Rlc_mac/include/SingleBlockAllocationStruct.h
new file mode 100644
index 0000000..63454d4
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/SingleBlockAllocationStruct.h
@@ -0,0 +1,76 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : SingleBlockAllocationStruct.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __SINGLEBLOCKALLOCATIONSTRUCT_H__
+#define __SINGLEBLOCKALLOCATIONSTRUCT_H__
+
+#include "logging\vclogging.h"
+#include "bitstream.h"
+#include "ieStartFrameNum.h"
+#include "iePO.h"
+#include "iePRMode.h"
+#include "ieBtsPowerCtlMode.h"
+
+
+// *******************************************************************
+// class SingleBlockAllocationStruct
+//
+// Description:
+// Single Block Allocation Struct -- GSM04.60 11.2.29
+//
+// <Single Block Allocation struct > ::=
+// < TIMESLOT_NUMBER : bit (3) >
+// { 0 | 1 < ALPHA : bit (4) >
+// < GAMMA_TN : bit (5) >}
+// { 0 | 1 < P0 : bit (4) >
+// < BTS_PWR_CTRL_MODE : bit (1) >
+// < PR_MODE : bit (1) > }
+// < TBF Starting Time : < Starting Frame Number Description IE > > ;
+// *******************************************************************
+
+class SingleBlockAllocationStruct {
+public:
+
+ unsigned char timeslot;
+ struct PowerIndicationStruct
+ {
+ bool isValid;
+ unsigned char alpha;
+ unsigned char gamma;
+ } powerIndication;
+ struct PowerControlStruct
+ {
+ bool isValid;
+ IePO po;
+ IeBtsPowerCtlMode btsPowerCtlMode;
+ IePRMode prMode;
+ } powerControl;
+ IeStartFrameNum startTime;
+ bool isValid;
+
+ // Default constructor
+ SingleBlockAllocationStruct() : isValid(FALSE), startTime()
+ {
+ powerIndication.isValid = FALSE;
+ powerControl.isValid = FALSE;
+ }
+
+ RlcMacResult EncodeSingleBlockAllocationStruct(BitStreamOut &dataStream);
+ void DisplaySingleBlockAllocationStruct(DbgOutput *outObj);
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/TAITable.h b/data/mnet/GP10/Host/Rlc_mac/include/TAITable.h
new file mode 100644
index 0000000..99a272e
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/TAITable.h
@@ -0,0 +1,47 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : TAITable.h
+// Author(s) : Tim Olson
+// Create Date : 12/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __TAITABLE_H__
+#define __TAITABLE_H__
+
+#include "RlcMacCommon.h"
+#include "Tbf.h"
+
+
+// *******************************************************************
+// class TAITable
+//
+// Description
+//
+// *******************************************************************
+class TAITable {
+public:
+ TAITable();
+ ~TAITable() {}
+
+ unsigned char AllocateTAI(Tbf *pTbf);
+ void ReleaseTAI(unsigned char tai);
+ void ShowTAITable();
+
+private:
+
+ Tbf *pTAIEntry[MAX_TAI_PER_TS];
+
+};
+
+
+#endif
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/TSPool.h b/data/mnet/GP10/Host/Rlc_mac/include/TSPool.h
new file mode 100644
index 0000000..a3653b6
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/TSPool.h
@@ -0,0 +1,213 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : TSPool.h
+// Author(s) : Tim Olson
+// Create Date : 12/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __TSPOOL_H__
+#define __TSPOOL_H__
+
+#include "Timeslot.h"
+
+#define INVALID_TFI 0xff
+
+
+// *******************************************************************
+// class TSPool
+//
+// Description
+//
+// *******************************************************************
+class TSPool {
+public:
+ TSPool();
+ ~TSPool() {}
+
+ Timeslot *GetTimeslotObj(int trx, int ts)
+ {
+ if (IsTrxTsValid(trx, ts))
+ return (&sysTS[trx][ts]);
+ else
+ return (0);
+ }
+
+ // Functions related to TAI
+ unsigned char AllocateTAI(int trx, int ts, Tbf *pTbf);
+ void ReleaseTAI(int trx, int ts, unsigned char tai);
+ void ShowTAITable(int trx);
+ void ShowTAITable(int trx, int ts);
+
+ // Functions related to USF
+ unsigned char AllocateUSF(int trx, int ts, ULTbf *pTbf);
+ void ReleaseUSF(int trx, int ts, unsigned char usf);
+ void ShowUSFTable(int trx);
+ void ShowUSFTable(int trx, int ts);
+
+ // Functions related to TFI assignment
+ unsigned char AllocateULTFI(int trx, ULTbf *pUlTbf);
+ void ReleaseULTFI(int trx, unsigned char tfi);
+ void ShowULTFITable(int trx);
+ ULTbf *FindULTbf(int trx, unsigned char tfi);
+ unsigned char AllocateDLTFI(int trx, DLTbf *pDlTbf);
+ void ReleaseDLTFI(int trx, unsigned char tfi);
+ void ShowDLTFITable(int trx);
+ DLTbf *FindDLTbf(int trx, unsigned char tfi);
+
+ // Functions related to DL signalling queues
+ JC_STATUS QueueDLSignallingMsg
+ (
+ int trx,
+ int ts,
+ MsgPacchReq *l1Msg
+ );
+ MsgPacchReq *DequeueDLSignallingMsg
+ (
+ int trx,
+ int ts
+ );
+
+ // Functions related to RTS counts
+ int GetDataRTSCount(int trx, int ts)
+ {
+ if (IsTrxTsValid(trx, ts))
+ return (sysTS[trx][ts].GetDataRTSCount());
+ else
+ return (0);
+ }
+
+ int GetSignallingRTSCount(int trx, int ts)
+ {
+ if (IsTrxTsValid(trx, ts))
+ return (sysTS[trx][ts].GetSignallingRTSCount());
+ else
+ return (0);
+ }
+
+ void IncDataRTSCount(int trx, int ts, int inc)
+ {
+ if (IsTrxTsValid(trx, ts))
+ {
+ sysTS[trx][ts].IncDataRTSCount(inc);
+ }
+ }
+
+ void IncSignallingRTSCount(int trx, int ts, int inc)
+ {
+ if (IsTrxTsValid(trx, ts))
+ {
+ sysTS[trx][ts].IncSignallingRTSCount(inc);
+ }
+ }
+
+ void DecDataRTSCount(int trx, int ts)
+ {
+ if (IsTrxTsValid(trx, ts))
+ {
+ sysTS[trx][ts].DecDataRTSCount();
+ }
+ }
+
+ void DecSignallingRTSCount(int trx, int ts)
+ {
+ if (IsTrxTsValid(trx, ts))
+ {
+ sysTS[trx][ts].DecSignallingRTSCount();
+ }
+ }
+
+ // Channel configuration accessors
+ void SetChannelComb(int trx, int ts, int chanComb)
+ {
+ if (IsTrxTsValid(trx, ts))
+ {
+ sysTS[trx][ts].SetChannelComb(chanComb);
+ }
+ }
+
+ int GetChannelComb(int trx, int ts)
+ {
+ if (IsTrxTsValid(trx, ts))
+ {
+ return (sysTS[trx][ts].GetChannelComb());
+ }
+ return (INVALID_CHANNEL_COMBINATION);
+ }
+
+ void ShowChannelComb(int trx);
+ void ShowChannelComb(int trx, int ts);
+
+ // Functions related to RTI allocation.
+ unsigned char GetNextRTIVal(int trx, int ts)
+ {
+ if (IsTrxTsValid(trx, ts))
+ {
+ return (sysTS[trx][ts].GetNextRTIVal());
+ }
+ return (INVALID_RTI);
+ }
+
+ ScheduleQueue* GetQueue(int trx, int ts, LinkDirection dir)
+ {
+ if (IsTrxTsValid(trx, ts))
+ {
+ return (sysTS[trx][ts].GetQueue(dir));
+ }
+ else
+ {
+ return (0);
+ }
+ }
+
+ ScheduleInfo* GetScheduleInfo(int trx, int ts)
+ {
+ if (IsTrxTsValid(trx, ts))
+ {
+ return (sysTS[trx][ts].GetScheduleInfo());
+ }
+ else
+ {
+ return (0);
+ }
+ }
+
+ // General Timeslot functions
+ void ShowTimeslotInfo(int trx);
+ void ShowTimeslotInfo(int trx, int ts);
+
+private:
+
+ Timeslot sysTS[MAX_TRX][MAX_TIMESLOTS];
+ ULTbf *sysUlTFI[MAX_TRX][MAX_TFI];
+ DLTbf *sysDlTFI[MAX_TRX][MAX_TFI];
+
+ // Private Methods
+ inline bool IsTrxValid(int trx)
+ {
+ return ((0 <= trx) && (trx < MAX_TRX));
+ }
+
+ inline bool IsTrxTsValid(int trx, int ts)
+ {
+ return (((0 <= trx) && (trx < MAX_TRX)) && ((0 <= ts) && (ts < MAX_TIMESLOTS)));
+ }
+
+ inline bool IsTfiValid(unsigned char tfi)
+ {
+ return (tfi < MAX_TFI);
+ }
+
+};
+
+
+#endif
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/Tbf.h b/data/mnet/GP10/Host/Rlc_mac/include/Tbf.h
new file mode 100644
index 0000000..0bd6bab
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/Tbf.h
@@ -0,0 +1,83 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : Tbf.h
+// Author(s) : Tim Olson
+// Create Date : 12/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __TBF_H__
+#define __TBF_H__
+
+#include "RlcMacCommon.h"
+#include "ieTFI.h"
+#include "ieTLLI.h"
+
+#define NULL_TRX -1
+#define INVALID_TAI 0xff
+
+// *******************************************************************
+// class Tbf
+//
+// Description
+//
+// *******************************************************************
+class Tbf {
+public:
+ typedef enum
+ {
+ FREE,
+ ALLOCATED,
+ INACTIVE,
+ ACTIVATING,
+ REALLOCATING,
+ RELEASING
+ } TBF_STATE;
+
+ // Constructor
+ Tbf() : tbfState(FREE), trx(NULL_TRX), tai(INVALID_TAI)
+ {
+ // Clear out allocated resources.
+ for (int i=0; i < MAX_TIMESLOTS; i++)
+ {
+ allocatedTs[i] = FALSE;
+ }
+ taiTs = 0xff;
+ tlli.SetTLLI(0xffffffff);
+ tfi.SetTFI(0x1f);
+ };
+
+ // Destructor
+ ~Tbf() {};
+
+ TBF_STATE GetTbfState() { return(tbfState); }
+ void SetTbfState(TBF_STATE state) { tbfState = state; }
+
+ IeTFI tfi;
+ IeTLLI tlli;
+ unsigned char taiTs;
+ unsigned char tai;
+
+ // Allocated resources
+ int trx;
+ bool allocatedTs[MAX_TIMESLOTS];
+ bool naturalTs[MAX_TIMESLOTS];
+
+protected:
+ // Control message acknowledgement tags.
+ static unsigned char sysCtlAckCount;
+private:
+ TBF_STATE tbfState;
+};
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/TbfPool.h b/data/mnet/GP10/Host/Rlc_mac/include/TbfPool.h
new file mode 100644
index 0000000..a549fe8
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/TbfPool.h
@@ -0,0 +1,84 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : TbfPool.h
+// Author(s) : Tim Olson
+// Create Date : 12/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __TBFPOOL_H__
+#define __TBFPOOL_H__
+
+#include "RlcMacCommon.h"
+#include "ULTbf.h"
+#include "DLTbf.h"
+#include "ieGlobalTFI.h"
+#include "ieTFI.h"
+
+
+// *******************************************************************
+// class TbfPool
+//
+// Description
+//
+// *******************************************************************
+class TbfPool {
+public:
+ TbfPool() {}
+ ~TbfPool() {}
+
+ // Functions related to administrative and op state changes
+ void AbnormalReleaseBts();
+ void AbnormalReleaseTrx(int trx);
+ void AbnormalReleaseTs(int trx, int ts);
+
+ // Functions related to uplink TBF
+ ULTbf *EstablishULTbf(
+ IeAccessType *accessType,
+ IeTLLI *tlli,
+ IeChannelRequestDescription *chanReqDesc,
+ IeMSRadioAccessCapability *radioAccessCapability
+ );
+ ULTbf *FindULTbf(IeGlobalTFI &globalTfi);
+ ULTbf *FindULTbf(IeTFI &tfi);
+ ULTbf *FindULTbf(unsigned long tlli);
+ ULTbf *FindULTbf(unsigned char controlAckTag);
+
+ // Functions related to downlink TBF
+ DLTbf *EstablishDLTbf(BSSGP_DL_UNITDATA_MSG *pUnitDataMsg, bool ctrlAck);
+ DLTbf *FindDLTbf(IeGlobalTFI &globalTfi);
+ DLTbf *FindDLTbf(IeTFI &tfi);
+ DLTbf *FindDLTbf(unsigned long tlli);
+ DLTbf *FindDLTbf(unsigned char controlAckTag);
+
+ bool AnyActiveTBF(int trx, int ts);
+
+ void ShowULAllocatedTBF();
+ void ShowDLAllocatedTBF();
+ void ShowULFreeTBF();
+ void ShowDLFreeTBF();
+ void ShowULAllTBF();
+ void ShowDLAllTBF();
+
+private:
+
+ ULTbf sysULTbf[MAX_TRX * MAX_TFI];
+ DLTbf sysDLTbf[MAX_TRX * MAX_TFI];
+
+ inline bool IsTrxValid(int trx)
+ {
+ return (0 <= trx < MAX_TRX);
+ }
+};
+
+
+#endif
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/Timeslot.h b/data/mnet/GP10/Host/Rlc_mac/include/Timeslot.h
new file mode 100644
index 0000000..0cfdbdc
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/Timeslot.h
@@ -0,0 +1,178 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : Timeslot.h
+// Author(s) : Tim Olson
+// Create Date : 12/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __TIMESLOT_H__
+#define __TIMESLOT_H__
+
+#include "RlcMacCommon.h"
+#include "TAITable.h"
+#include "USFTable.h"
+#include "DLSignallingMsgQueue.h"
+#include "Tbf.h"
+#include "ULTbf.h"
+#include "DLTbf.h"
+#include "ScheduleInfo.h"
+#include "ScheduleQueue.h"
+
+#define INVALID_CHANNEL_COMBINATION 0xffffffff
+#define INVALID_RTI 0xff
+
+// *******************************************************************
+// class Timeslot
+//
+// Description
+//
+// *******************************************************************
+class Timeslot {
+public:
+ // Constructor
+ Timeslot()
+ {
+ dataRTSCount = 0;
+ signallingRTSCount = 0;
+ channelComb = INVALID_CHANNEL_COMBINATION;
+ rti = 0;
+ }
+
+ // Destructor
+ ~Timeslot() {};
+
+ // Functions related to TAI
+ unsigned char AllocateTAI(Tbf *pTbf)
+ {
+ return (sysTAI.AllocateTAI(pTbf));
+ }
+
+ void ReleaseTAI(unsigned char tai)
+ {
+ sysTAI.ReleaseTAI(tai);
+ }
+
+ void ShowTAITable()
+ {
+ sysTAI.ShowTAITable();
+ }
+
+ // Functions related to USF
+ unsigned char AllocateUSF(ULTbf *pTbf)
+ {
+ return (sysUSF.AllocateUSF(pTbf));
+ }
+
+ void ReleaseUSF(unsigned char usf)
+ {
+ sysUSF.ReleaseUSF(usf);
+ }
+
+ void ShowUSFTable()
+ {
+ sysUSF.ShowUSFTable();
+ }
+
+ // Functions related to DL Signalling Queues
+ JC_STATUS QueueDLSignallingMsg(MsgPacchReq *l1Msg)
+ {
+ return(sysDLSigMsgQ.QueueDLSignallingMsg(l1Msg));
+ }
+
+ MsgPacchReq *DequeueDLSignallingMsg()
+ {
+ return(sysDLSigMsgQ.DequeueDLSignallingMsg());
+ }
+
+ // Functions related to RTS counts
+ int GetDataRTSCount()
+ {
+ return (dataRTSCount);
+ }
+
+ int GetSignallingRTSCount()
+ {
+ return (signallingRTSCount);
+ }
+
+ void IncDataRTSCount(int inc)
+ {
+ dataRTSCount += inc;
+ if (dataRTSCount > MAX_DATA_RTS_COUNT)
+ dataRTSCount = MAX_DATA_RTS_COUNT;
+ }
+
+ void IncSignallingRTSCount(int inc)
+ {
+ signallingRTSCount += inc;
+ if (signallingRTSCount > MAX_SIGNALLING_RTS_COUNT)
+ signallingRTSCount = MAX_SIGNALLING_RTS_COUNT;
+ }
+
+ void DecDataRTSCount()
+ {
+ dataRTSCount--;
+ if (dataRTSCount < 0)
+ dataRTSCount = 0;
+ }
+
+ void DecSignallingRTSCount()
+ {
+ signallingRTSCount--;
+ if (signallingRTSCount < 0)
+ signallingRTSCount = 0;
+ }
+
+ // Channel configuration accessors
+ void SetChannelComb(int chanComb)
+ {
+ channelComb = chanComb;
+ }
+
+ int GetChannelComb()
+ {
+ return (channelComb);
+ }
+
+ // Functions related to RTI allocation.
+ unsigned char GetNextRTIVal()
+ {
+ rti = rti++ % MAX_RTI_VAL;
+ return (rti);
+ }
+
+ ScheduleQueue* GetQueue(LinkDirection dir)
+ {
+ return(scheduleInfo.GetQueue(dir));
+ }
+
+ ScheduleInfo* GetScheduleInfo(void)
+ {
+ return (&scheduleInfo);
+ }
+
+ void ShowTimeslotInfo();
+
+private:
+ int channelComb;
+ int dataRTSCount;
+ int signallingRTSCount;
+ TAITable sysTAI;
+ USFTable sysUSF;
+ DLSignallingMsgQueue sysDLSigMsgQ;
+ unsigned char rti;
+ ScheduleInfo scheduleInfo;
+};
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ULDataBlockPool.h b/data/mnet/GP10/Host/Rlc_mac/include/ULDataBlockPool.h
new file mode 100644
index 0000000..50b605e
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ULDataBlockPool.h
@@ -0,0 +1,74 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ULDataBlockPool.h
+// Author(s) : Tim Olson
+// Create Date : 12/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __ULDATABLOCKPOOL_H__
+#define __ULDATABLOCKPOOL_H__
+
+#include "bitstream.h"
+#include "MacHeader.h"
+#include "ieChannelCodingCommand.h"
+
+// Max RLC PDU size is 1560. Minus header for CS-1 18 bytes may be sent.
+// For safety add a few extra and 100 should be good.
+#define MAX_RL_BLOCKS_PER_PDU 100
+// *******************************************************************
+// class ULDataBlock
+//
+// Description
+//
+// *******************************************************************
+class ULDataBlock {
+public:
+ ULDataBlock(): next(0) {}
+ ~ULDataBlock() {}
+
+ friend class ULDataBlockPool;
+
+ int GetDataBlockLength() { return (chanCoding.GetRLCDataBlockSize()); }
+ void DisplayDataBlock();
+
+ BitStreamIn streamIn;
+ ULMacHeader ulHeader;
+ IeChannelCodingCommand chanCoding;
+private:
+ ULDataBlock *next;
+ static DbgOutput MsgDisplayObj;
+};
+
+
+// *******************************************************************
+// class ULDataBlockPool
+//
+// Description
+//
+// *******************************************************************
+class ULDataBlockPool {
+public:
+ // Constructor
+ ULDataBlockPool();
+ // Destructor
+ ~ULDataBlockPool();
+
+ ULDataBlock *GetULDataBlock();
+ void ReturnULDataBlock(ULDataBlock *pUlDataBlock);
+
+private:
+ ULDataBlock *head, *tail;
+};
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ULRlcLink.h b/data/mnet/GP10/Host/Rlc_mac/include/ULRlcLink.h
new file mode 100644
index 0000000..09842f3
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ULRlcLink.h
@@ -0,0 +1,114 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ULRlcLink.h
+// Author(s) : Tim Olson
+// Create Date : 12/1/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __ULRLCLINK_H__
+#define __ULRLCLINK_H__
+
+#include "Os/JCCTimer.h"
+#include "RlcMacCommon.h"
+#include "ULDataBlockPool.h"
+#include "ieChannelCodingCommand.h"
+#include "MsgPacketControlAcknowledgement.h"
+
+#define RCV_WINDOW_SIZE_K 64
+#define MAX_RLC_BLOCKS_BETWEEN_ACKS (RCV_WINDOW_SIZE_K/2)
+#define LAST_BLOCK_UNKNOWN -1
+
+#define T3169_VALUE GetMibValueInt(MIB_t3191)*10 // in 100's of ms
+
+// Forward declaration.
+class ULTbf;
+
+// *******************************************************************
+// class ULRlcLink
+//
+// Description
+//
+// *******************************************************************
+class ULRlcLink {
+public:
+
+ typedef enum
+ {
+ ACKNOWLEDGED_RLC_MODE,
+ UNACKNOWLEDGED_RLC_MODE
+ } RLC_MODE;
+
+ typedef enum
+ {
+ RECEIVED,
+ INVALID
+ } RECEIVE_STATUS;
+
+ // Constructor
+ ULRlcLink();
+ // Destructor
+ ~ULRlcLink() {}
+
+ JC_STATUS EstablishRLCLink(ULTbf *pUlTbf, RLC_MODE mode);
+ void UpdateTSSpecificData();
+ JC_STATUS AbnormalRelease();
+ JC_STATUS ReceiveULDataBlock(ULDataBlock *pUlDataBlock);
+ bool UpdateRcvStateVariables(ULDataBlock *pUlDataBlock);
+ void SendULAckNack();
+ void ReassembleULPDU();
+ bool IsPDUAssemblyNeeded(ULDataBlock *pUlDataBlock);
+ void ReleaseDataBlocks(int startBlock, int endBlock);
+ bool ScanDataBlocks(int currDataBlock);
+ void SendBSSGPUnitData(unsigned char *pBuf, int len);
+ void ReceivePacketControlAck(MsgPacketControlAcknowledgement *pCtrlMsg);
+ void ReceivePacketControlNack();
+ void ProcessT3169Expiry();
+ void ProcessActivityTimerExpiry();
+ bool IncrementN3101();
+ void SetCurrentCodingRate(IeChannelCodingCommand::CHANNEL_CODING_COMMAND rate)
+ { chanCoding.SetChannelCodingCommand(rate); }
+ IeChannelCodingCommand::CHANNEL_CODING_COMMAND GetCurrentCodingRate()
+ { return(chanCoding.GetChannelCodingCommand()); }
+
+ void ShowRlcLinkInfo();
+
+ static ULDataBlockPool sysUlDataBlockPool;
+ static int T3169TimerExpiry(int tbfPointer);
+ static int ActivityTimerExpiry(int tbfPointer);
+
+private:
+ RLC_MODE rlcMode; // ACK or non ACK mode
+ int k; // Window size
+ int vQ; // Receive window state
+ RECEIVE_STATUS vN[RLC_MOD_VAL]; // Receive state array
+ int vR; // Receive state variable
+ int n3103;
+ int n3101;
+ int n3101FirstBlkBuffer;
+ IeChannelCodingCommand chanCoding;
+
+ ULDataBlock *pUlBlocks[RLC_MOD_VAL];
+ int firstDataBlock;
+ int lastDataBlock;
+ int numRLCBlocksSinceLastAck;
+ bool endOfTBF;
+ ULTbf *pAssociatedTbf;
+
+ static int N3103_MAX;
+ static int N3101_MAX;
+ JCCTimer *pT3169;
+ JCCTimer *pActivityTimer;
+};
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ULTbf.h b/data/mnet/GP10/Host/Rlc_mac/include/ULTbf.h
new file mode 100644
index 0000000..e96dd2c
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ULTbf.h
@@ -0,0 +1,95 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ULTbf.h
+// Author(s) : Tim Olson
+// Create Date : 12/1/2000
+// Description :
+//
+// *******************************************************************
+
+#ifndef __ULTBF_H__
+#define __ULTBF_H__
+
+#include "Tbf.h"
+#include "ULRlcLink.h"
+#include "ieChannelRequestDescription.h"
+#include "ieMSRadioAccessCapability.h"
+#include "ieAccessType.h"
+
+
+// *******************************************************************
+// class ULTbf
+//
+// Description
+//
+// *******************************************************************
+class ULTbf : public Tbf {
+public:
+
+ // Constructor
+ ULTbf() : Tbf() {};
+ // Destructor
+ ~ULTbf() {};
+
+ JC_STATUS EstablishULTbf(
+ IeAccessType *accessType,
+ IeTLLI *tlli,
+ IeChannelRequestDescription *chanReqDesc,
+ IeMSRadioAccessCapability *radioAccessCapability
+ );
+ JC_STATUS ReallocateTbf(
+ IeAccessType *accessType,
+ IeChannelRequestDescription *chanReqDesc,
+ IeMSRadioAccessCapability *radioAccessCapability
+ );
+ JC_STATUS ReleaseULTbf();
+ JC_STATUS AbnormalReleaseULTbf();
+
+ unsigned char GetControlAckTag() { return(ctlAckTag); }
+ void ClearControlAckTag() { ctlAckTag = CTL_ACK_TAG_NOT_APPLICABLE; }
+ unsigned char SetControlAckTag()
+ {
+ ctlAckTag = (++sysCtlAckCount != CTL_ACK_TAG_NOT_APPLICABLE ? sysCtlAckCount : ++sysCtlAckCount);
+ return (ctlAckTag);
+ }
+
+ void ShowTBFInfo();
+
+ int GetDelayClass(void) const
+ {
+ return(chanReq.radioPriority+1); // input is zero-based; Scheduler uses 1-based values
+ }
+ int GetPrecedenceClass(void) const
+ {
+ return(1); // MS does not send Precedence Class; use constant=1
+ }
+ int GetPeakThroughputClass(void) const
+ {
+ return(chanReq.peakThroughputClass); // input is already one-based (for uplink only)
+ }
+ int GetMultislotClass(void);
+
+ // Allocated resources
+ unsigned char usf[MAX_TIMESLOTS];
+
+ // ULTbf data members
+ IeAccessType accType;
+ IeChannelRequestDescription chanReq;
+ IeMSRadioAccessCapability raCapability;
+ ULRlcLink rlcLink;
+
+private:
+ // Control message acknowledgement tags.
+ unsigned char ctlAckTag;
+
+};
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/USFTable.h b/data/mnet/GP10/Host/Rlc_mac/include/USFTable.h
new file mode 100644
index 0000000..f1d2cb4
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/USFTable.h
@@ -0,0 +1,50 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : USFTable.h
+// Author(s) : Tim Olson
+// Create Date : 12/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __USFTABLE_H__
+#define __USFTABLE_H__
+
+#include "ULTbf.h"
+#include "RlcMacCommon.h"
+
+
+#define INVALID_USF 0xff
+
+
+// *******************************************************************
+// class USFTable
+//
+// Description
+//
+// *******************************************************************
+class USFTable {
+public:
+ USFTable();
+ ~USFTable() {}
+
+ unsigned char AllocateUSF(ULTbf *pTbf);
+ void ReleaseUSF(unsigned char usf);
+ void ShowUSFTable();
+
+private:
+
+ Tbf *pUSFEntry[MAX_USF_PER_TS];
+
+};
+
+
+#endif
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/bitstream.h b/data/mnet/GP10/Host/Rlc_mac/include/bitstream.h
new file mode 100644
index 0000000..b29b9f7
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/bitstream.h
@@ -0,0 +1,129 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : bitstream.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __BITSTREAM_H__
+#define __BITSTREAM_H__
+
+#include <string.h>
+#include "RlcMacResult.h"
+#include "msgL1.h"
+
+#define MAX_BITSTREAM MAX_RLC_DATA_MSG
+
+// *******************************************************************
+// class BitStreamOut
+//
+// Description:
+//
+// *******************************************************************
+
+class BitStreamOut {
+public:
+ BitStreamOut()
+ {
+ bitPointer = 0;
+ streamLen = 0;
+ bzero((char *)dataStream, MAX_BITSTREAM);
+ }
+
+ ~BitStreamOut(){}
+
+ RlcMacResult InsertBits8(unsigned char bits, int numBits);
+ RlcMacResult InsertBits16(unsigned short bits, int numBits);
+ RlcMacResult InsertBits32(unsigned long bits, int numBits);
+ RlcMacResult InsertBytesN(unsigned char *bytes, int numBytes);
+
+ void PadToOctetBoundary();
+
+ void PadWithSparePadding(int len);
+
+ unsigned char *GetBitStream() { return (dataStream); }
+ void ClearBitStream()
+ {
+ bzero((char *)dataStream, MAX_BITSTREAM);
+ bitPointer = 0;
+ streamLen = 0;
+ }
+ void ResetBitPointer() { bitPointer = 0; streamLen = 0; }
+ int GetStreamLen() { return (streamLen); }
+
+private:
+ unsigned char dataStream[MAX_BITSTREAM];
+ int bitPointer;
+ int streamLen;
+};
+
+
+// *******************************************************************
+// class BitStreamIn
+//
+// Description:
+//
+// *******************************************************************
+
+class BitStreamIn {
+public:
+ BitStreamIn(unsigned char *data, int dataLen)
+ {
+ bitPointer = 0;
+ streamLen = dataLen;
+ currByte = 0;
+ for (int i = 0; i < dataLen; i++)
+ {
+ dataStream[i] = data[i];
+ }
+ }
+
+ BitStreamIn()
+ {
+ bitPointer = 0;
+ streamLen = 0;
+ currByte = 0;
+ }
+
+ ~BitStreamIn(){}
+
+ void InitBitStreamIn(unsigned char *data, int dataLen)
+ {
+ bitPointer = 0;
+ streamLen = dataLen;
+ currByte = 0;
+ for (int i = 0; i < dataLen; i++)
+ {
+ dataStream[i] = data[i];
+ }
+ }
+
+ RlcMacResult ExtractBits8(unsigned char &bits, int numBits);
+ RlcMacResult ExtractBits16(unsigned short &bits, int numBits);
+ RlcMacResult ExtractBits32(unsigned long &bits, int numBits);
+ RlcMacResult ExtractBytesN(unsigned char *bytes, int numBytes);
+
+ unsigned char *GetBitStream() { return (dataStream); }
+ int GetCurrentPosition() { return (currByte); }
+ void ResetBitPointer() { bitPointer = 0; currByte = 0; }
+ int GetStreamLen() { return (streamLen); }
+
+private:
+ unsigned char dataStream[MAX_BITSTREAM];
+ int bitPointer;
+ int streamLen;
+ int currByte;
+
+};
+
+#endif
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieARFCN.h b/data/mnet/GP10/Host/Rlc_mac/include/ieARFCN.h
new file mode 100644
index 0000000..b754e2d
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieARFCN.h
@@ -0,0 +1,68 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieARFCN.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEARFCN_H__
+#define __IEARFCN_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+
+// *******************************************************************
+// class IeARFCN
+//
+// Description:
+// ARFCN IE -- GSM04.60 11.2.4
+// *******************************************************************
+
+#define MAX_ARFCN 1023
+
+class IeARFCN : public IeBase {
+public:
+
+ IeARFCN() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ RlcMacResult DecodeIe(BitStreamIn &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetARFCN(unsigned short freq)
+ {
+ if (freq <= MAX_ARFCN)
+ {
+ arfcn = freq;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned short GetARFCN()
+ {
+ return(arfcn);
+ }
+
+ void ClearARFCN() { isValid = FALSE; }
+
+private:
+ unsigned short arfcn;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieARFCNIndexList.h b/data/mnet/GP10/Host/Rlc_mac/include/ieARFCNIndexList.h
new file mode 100644
index 0000000..e225c02
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieARFCNIndexList.h
@@ -0,0 +1,64 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieARFCNIndexList.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEARFCNINDEXLIST_H__
+#define __IEARFCNINDEXLIST_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+#include "RlcMacCommon.h"
+
+// *******************************************************************
+// class IeARFCNIndexList
+//
+// Description:
+// ARFCN Index List IE -- GSM04.60 12.10a
+//
+// < ARFCN index list struct > ::=
+// < ARFCN_INDEX : bit (6) >
+// { 0 | 1 < ARFCN index list struct > } ;
+//
+// *******************************************************************
+
+
+class IeARFCNIndexList : public IeBase {
+public:
+
+ IeARFCNIndexList() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetARFCNIndexList(unsigned char count, unsigned char *list);
+
+ void GetARFCNIndexList(unsigned char *len, unsigned char *list)
+ {
+ *len = numIndex;
+ for (int i = 0; i < numIndex; i++)
+ {
+ list[i] = arfcnIndex[i];
+ }
+ }
+
+ void ClearARFCNIndexList() { isValid = FALSE; }
+
+private:
+ unsigned char numIndex;;
+ unsigned char arfcnIndex[RLC_MAC_MAX_RF_FREQS];
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieAccessType.h b/data/mnet/GP10/Host/Rlc_mac/include/ieAccessType.h
new file mode 100644
index 0000000..9511bfe
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieAccessType.h
@@ -0,0 +1,66 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieAccessType.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEACCESSTYPE_H__
+#define __IEACCESSTYPE_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+// *******************************************************************
+// class IeAccessType
+//
+// Description:
+// ACCESS_TYPE IE -- GSM04.60 11.2.16
+// *******************************************************************
+
+
+class IeAccessType : public IeBase {
+public:
+
+ typedef enum
+ {
+ TWO_PHASE,
+ PAGE_RESPONSE,
+ CELL_UPDATE,
+ MM_PROCEDURE
+ } ACCESS_TYPE;
+
+ IeAccessType() : IeBase() {}
+
+ RlcMacResult DecodeIe(BitStreamIn &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetAccessType(ACCESS_TYPE type)
+ {
+ accessType = type;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ ACCESS_TYPE GetAccessType()
+ {
+ return (accessType);
+ }
+
+ void ClearAccessType() { isValid = FALSE; }
+
+private:
+ ACCESS_TYPE accessType;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieAckNackDescription.h b/data/mnet/GP10/Host/Rlc_mac/include/ieAckNackDescription.h
new file mode 100644
index 0000000..5fae6f9
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieAckNackDescription.h
@@ -0,0 +1,95 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieAckNackDescription.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEACKNACKDESCRIPTION_H__
+#define __IEACKNACKDESCRIPTION_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+#define RRB_SIZE 8
+#define MAX_SSN_SIZE 127
+
+// *******************************************************************
+// class IeAckNackDescription
+//
+// Description:
+// Ack Nack Dscription IE -- GSM04.60 12.3
+//
+// < Ack/Nack Description IE > ::=
+// < FINAL_ACK_INDICATION : bit (1) >
+// < STARTING_SEQUENCE_NUMBER : bit (7) >
+// < RECEIVED_BLOCK_BITMAP : bit (64) > ;
+// *******************************************************************
+
+class IeAckNackDescription : public IeBase {
+public:
+
+ typedef enum
+ {
+ TBF_INCOMPLETE,
+ TBF_COMPLETE
+ } FINAL_ACK_INDICATION;
+
+ IeAckNackDescription() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ RlcMacResult DecodeIe(BitStreamIn &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetAckNackDescription(FINAL_ACK_INDICATION finalAck,
+ unsigned char ssn, unsigned char rrb[RRB_SIZE])
+ {
+ if (ssn <= MAX_SSN_SIZE)
+ {
+ finalAckIndication = finalAck;
+ startingSeqNum = ssn;
+ for (int i = 0; i < RRB_SIZE; i++)
+ {
+ recBlockBitmap[i] = rrb[i];
+ }
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ void GetAckNackDescription(FINAL_ACK_INDICATION *finalAck,
+ unsigned char *ssn, unsigned char *rrb)
+ {
+ *finalAck = finalAckIndication;
+ *ssn = startingSeqNum;
+ for (int i = 0; i < RRB_SIZE; i++)
+ {
+ rrb[i] = recBlockBitmap[i];
+ }
+ }
+
+ FINAL_ACK_INDICATION GetFinalAckInd() { return(finalAckIndication); }
+
+ void ClearAckNackDescription() { isValid = FALSE; }
+
+private:
+ FINAL_ACK_INDICATION finalAckIndication;
+ unsigned char startingSeqNum;
+ unsigned char recBlockBitmap[RRB_SIZE];
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieAllocationBitMap.h b/data/mnet/GP10/Host/Rlc_mac/include/ieAllocationBitMap.h
new file mode 100644
index 0000000..3682028
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieAllocationBitMap.h
@@ -0,0 +1,61 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieAllocationBitMap.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEALLOCATIONBITMAP_H__
+#define __IEALLOCATIONBITMAP_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+#define MAX_ALLOCATION_BITMAP_LEN 128
+
+// *******************************************************************
+// class IeAllocationBitMap
+//
+// Description:
+// Allocation Bit Map IE -- GSM04.60 12.4
+//
+// *******************************************************************
+
+
+class IeAllocationBitMap : public IeBase {
+public:
+
+ IeAllocationBitMap() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetAllocationBitMap(unsigned char len, unsigned char *map);
+
+ void GetAllocationBitMap(unsigned char *len, unsigned char *map)
+ {
+ *len = allocLength;
+ for (int i = 0; i < allocLength; i++)
+ {
+ map[i] = allocBitMap[i];
+ }
+ }
+
+ void ClearAllocationBitMap() { isValid = FALSE; }
+
+private:
+ unsigned char allocLength;
+ unsigned char allocBitMap[MAX_ALLOCATION_BITMAP_LEN>>3];
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieBSIC.h b/data/mnet/GP10/Host/Rlc_mac/include/ieBSIC.h
new file mode 100644
index 0000000..0b00b0d
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieBSIC.h
@@ -0,0 +1,68 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieBSIC.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEBSIC_H__
+#define __IEBSIC_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+
+// *******************************************************************
+// class IeBSIC
+//
+// Description:
+// BSIC IE -- GSM04.60 11.2.4
+// *******************************************************************
+
+#define MAX_BSIC 63
+
+class IeBSIC : public IeBase {
+public:
+
+ IeBSIC() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ RlcMacResult DecodeIe(BitStreamIn &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetBSIC(unsigned char bsicVal)
+ {
+ if (bsicVal <= MAX_BSIC)
+ {
+ bsic = bsicVal;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned char GetBSIC()
+ {
+ return(bsic);
+ }
+
+ void ClearBSIC() { isValid = FALSE; }
+
+private:
+ unsigned char bsic;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieBtsPowerCtlMode.h b/data/mnet/GP10/Host/Rlc_mac/include/ieBtsPowerCtlMode.h
new file mode 100644
index 0000000..82825d4
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieBtsPowerCtlMode.h
@@ -0,0 +1,64 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieBtsPowerCtlMode.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEBTSPOWERCTLMODE_H__
+#define __IEBTSPOWERCTLMODE_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+// *******************************************************************
+// class IeBtsPowerCtlMode
+//
+// Description:
+// Bts Power Control Mode IE -- GSM04.60 11.2.29
+// *******************************************************************
+
+
+class IeBtsPowerCtlMode : public IeBase {
+public:
+
+ typedef enum
+ {
+ MODE_A,
+ MODE_B
+ } BTS_PWR_CTL_MODE;
+
+ IeBtsPowerCtlMode() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetBtsPowerCtlMode(BTS_PWR_CTL_MODE mode)
+ {
+ pCtlMode = mode;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ BTS_PWR_CTL_MODE GetBtsPowerCtlMode()
+ {
+ return (pCtlMode);
+ }
+
+ void ClearBtsPowerCtlMode() { isValid = FALSE; }
+
+private:
+ BTS_PWR_CTL_MODE pCtlMode;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieChangeMark.h b/data/mnet/GP10/Host/Rlc_mac/include/ieChangeMark.h
new file mode 100644
index 0000000..f9e66cf
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieChangeMark.h
@@ -0,0 +1,68 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieChangeMark.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IECHANGEMARK_H__
+#define __IECHANGEMARK_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+
+// *******************************************************************
+// class IeChangeMark
+//
+// Description:
+// Change Mark IE -- GSM04.60 12.8
+// *******************************************************************
+
+#define MAX_CHANGE_MARK 3
+
+class IeChangeMark : public IeBase {
+public:
+
+ IeChangeMark() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ RlcMacResult DecodeIe(BitStreamIn &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetChangeMark(unsigned char val)
+ {
+ if (val <= MAX_CHANGE_MARK)
+ {
+ changeMark = val;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned char GetChangeMark()
+ {
+ return(changeMark);
+ }
+
+ void ClearChangeMark() { isValid = FALSE; }
+
+private:
+ unsigned char changeMark;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieChannelCodingCommand.h b/data/mnet/GP10/Host/Rlc_mac/include/ieChannelCodingCommand.h
new file mode 100644
index 0000000..1c21d80
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieChannelCodingCommand.h
@@ -0,0 +1,88 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieChannelCodingCommand.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IECHANNELCODINGCOMMAND_H__
+#define __IECHANNELCODINGCOMMAND_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+// *******************************************************************
+// class IeChannelCodingCommand
+//
+// Description:
+// PR Mode IE -- GSM04.60 11.2.29
+// *******************************************************************
+
+
+class IeChannelCodingCommand : public IeBase {
+public:
+
+ typedef enum
+ {
+ CS_1,
+ CS_2,
+ CS_3,
+ CS_4
+ } CHANNEL_CODING_COMMAND;
+
+ IeChannelCodingCommand() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetChannelCodingCommand(CHANNEL_CODING_COMMAND val)
+ {
+ coding = val;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ CHANNEL_CODING_COMMAND GetChannelCodingCommand()
+ {
+ return (coding);
+ }
+
+ int GetNumFillBytes()
+ {
+ switch(coding)
+ {
+ case CS_1 : return (20); // 160 / 8
+ case CS_2 : return (30); // 240 / 8
+ case CS_3 : return (36); // 288 / 8
+ case CS_4 : return (50); // 400 / 8
+ }
+ }
+
+ int GetRLCDataBlockSize()
+ {
+ switch(coding)
+ {
+ case CS_1 : return (23);
+ case CS_2 : return (33);
+ case CS_3 : return (39);
+ case CS_4 : return (53);
+ }
+ }
+
+ void ClearChannelCodingCommand() { isValid = FALSE; }
+
+private:
+ CHANNEL_CODING_COMMAND coding;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieChannelNeeded.h b/data/mnet/GP10/Host/Rlc_mac/include/ieChannelNeeded.h
new file mode 100644
index 0000000..ad0e6ea
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieChannelNeeded.h
@@ -0,0 +1,66 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieChannelNeeded.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IECHANNELNEEDED_H__
+#define __IECHANNELNEEDED_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+// *******************************************************************
+// class IeChannelNeeded
+//
+// Description:
+// Channel Needed IE -- GSM04.60 11.2.10
+// *******************************************************************
+
+
+class IeChannelNeeded : public IeBase {
+public:
+
+ typedef enum
+ {
+ ANY_CHANNEL,
+ SDCCH,
+ TCH_F_FULL_RATE,
+ TCH_H_or_TCH_F_DUAL_MODE
+ } CHANNEL_NEEDED;
+
+ IeChannelNeeded() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetChannelNeeded(CHANNEL_NEEDED chan)
+ {
+ chanNeeded = chan;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ CHANNEL_NEEDED GetChannelNeeded()
+ {
+ return (chanNeeded);
+ }
+
+ void ClearChannelNeeded() { isValid = FALSE; }
+
+private:
+ CHANNEL_NEEDED chanNeeded;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieChannelRequestDescription.h b/data/mnet/GP10/Host/Rlc_mac/include/ieChannelRequestDescription.h
new file mode 100644
index 0000000..b8cd41b
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieChannelRequestDescription.h
@@ -0,0 +1,66 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieChannelRequestDescription.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IECHANNELREQUESTDESCRIPTION_H__
+#define __IECHANNELREQUESTDESCRIPTION_H__
+
+#include "logging\vclogging.h"
+#include "bitstream.h"
+#include "ieRLCMode.h"
+
+
+// *******************************************************************
+// class IeChannelRequestDescription
+//
+// Description:
+// Channel Request Description IE -- GSM04.60 12.7
+//
+// < Channel Request Description IE > ::=
+// < PEAK_THROUGHPUT_CLASS : bit (4) >
+// < RADIO_PRIORITY : bit (2) >
+// < RLC_MODE : bit (1) >
+// < LLC_PDU_TYPE : bit (1) >
+// < RLC_OCTET_COUNT : bit (16) > ;
+// *******************************************************************
+
+class IeChannelRequestDescription : public IeBase {
+public:
+
+ typedef enum
+ {
+ SACK_OR_ACK,
+ NOT_SACK_OR_ACK
+ } LLC_PDU_TYPE;
+
+ // IE contents
+ unsigned char peakThroughputClass;
+ unsigned char radioPriority;
+ IeRlcMode rlcMode;
+ LLC_PDU_TYPE llcPduType;
+ unsigned short rlcOctetCount;
+
+ IeChannelRequestDescription() : IeBase(), peakThroughputClass(1), radioPriority(1),
+ rlcMode(), llcPduType(SACK_OR_ACK), rlcOctetCount(0) {}
+
+ RlcMacResult DecodeIe(BitStreamIn &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ void SetChannelRequestDescriptionValid() { isValid = TRUE; }
+ void ClearChannelRequestDescription() { isValid = FALSE; }
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieFrequencyParameters.h b/data/mnet/GP10/Host/Rlc_mac/include/ieFrequencyParameters.h
new file mode 100644
index 0000000..f4666ab
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieFrequencyParameters.h
@@ -0,0 +1,105 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieFrequencyParameters.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEFREQUENCYPARAMETERS_H__
+#define __IEFREQUENCYPARAMETERS_H__
+
+#include "logging\vclogging.h"
+#include "bitstream.h"
+#include "ieTSC.h"
+#include "ieARFCN.h"
+#include "ieMAIO.h"
+#include "ieMANumber.h"
+#include "ieChangeMark.h"
+#include "ieGPRSMobileAllocation.h"
+#include "ieMAFreqList.h"
+
+
+// *******************************************************************
+// class IeFrequencyParameters
+//
+// Description:
+// Frequency Parameters IE -- GSM04.60 12.8
+//
+// < Frequency Parameters IE > ::=
+// < TSC : bit (3) >
+// { 00 < ARFCN : bit (10) >
+// | 01 < Indirect encoding : < Indirect encoding struct > >
+// | 10 < Direct encoding 1 : < Direct encoding 1 struct > >
+// | 11 < Direct encoding 2 : < Direct encoding 2 struct > > } ;
+//
+// < Indirect encoding struct > ::=
+// < MAIO : bit (6) >
+// < MA_NUMBER : bit (4) >
+// { 0 | 1 < CHANGE_MARK_1 : bit (2) >
+// { 0 | 1 < CHANGE_MARK_2 : bit (2) > } } ;
+//
+// < Direct encoding 1 struct > ::=
+// < MAIO : bit (6) >
+// < GPRS Mobile Allocation : < GPRS Mobile Allocation IE > > ;
+//
+// < Direct encoding 2 struct > ::=
+// < MAIO : bit (6) >
+// < HSN : bit (6) >
+// < Length of MA Frequency List contents : bit (4) >
+// < MA Frequency List contents : octet (val(Length of MA Frequency List contents) + 3) > ;
+// *******************************************************************
+
+class IeFrequencyParameters : public IeBase {
+public:
+
+ // IE contents
+ IeTSC tsc;
+ IeARFCN arfcn;
+ struct IndirectEncodingStruct
+ {
+ bool isValid;
+ IeMAIO maio;
+ IeMANumber maNumber;
+ IeChangeMark changeMark1;
+ IeChangeMark changeMark2;
+ } IndirectEncoding;
+ struct DirectEncoding1Struct
+ {
+ bool isValid;
+ IeMAIO maio;
+ IeGPRSMobileAllocation gprsMobileAllocation;
+ } DirectEncoding1;
+ struct DirectEncoding2Struct
+ {
+ bool isValid;
+ IeMAIO maio;
+ IeHSN hsn;
+ IeMAFreqList maFreqList;
+ } DirectEncoding2;
+
+
+ IeFrequencyParameters() : IeBase(), tsc()
+ {
+ IndirectEncoding.isValid = FALSE;
+ DirectEncoding1.isValid = FALSE;
+ DirectEncoding2.isValid = FALSE;
+ }
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ void SetFrequencyParameters() { isValid = TRUE; }
+ void ClearFrequencyParameters() { isValid = FALSE; }
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieGPRSMobileAllocation.h b/data/mnet/GP10/Host/Rlc_mac/include/ieGPRSMobileAllocation.h
new file mode 100644
index 0000000..1d14c9b
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieGPRSMobileAllocation.h
@@ -0,0 +1,68 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieGPRSMobileAllocation.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEGPRSMOBILEALLOCATION_H__
+#define __IEGPRSMOBILEALLOCATION_H__
+
+#include "logging\vclogging.h"
+#include "bitstream.h"
+#include "ieHSN.h"
+#include "ieMABitMap.h"
+#include "ieARFCNIndexList.h"
+#include "ieRFLNumberList.h"
+
+
+// *******************************************************************
+// class IeGPRSMobileAllocation
+//
+// Description:
+// GPRS Mobile Allocation IE -- GSM04.60 12.10a
+//
+// < GPRS Mobile Allocation IE > ::=
+// < HSN : bit (6) >
+// { 0 | 1 < RFL number list : < RFL number list struct > > }
+// { 0 < MA_LENGTH : bit (6) >
+// < MA_BITMAP : bit (val(MA_LENGTH) + 1) >
+// | 1 { 0 | 1 < ARFCN index list : < ARFCN index list struct > > } } ;
+//
+// < RFL number list struct > ::=
+// < RFL_NUMBER : bit (4) >
+// { 0 | 1 < RFL number list struct > } ;
+// < ARFCN index list struct > ::=
+// < ARFCN_INDEX : bit (6) >
+// { 0 | 1 < ARFCN index list struct > } ;
+// *******************************************************************
+
+class IeGPRSMobileAllocation : public IeBase {
+public:
+
+ // IE contents
+ IeHSN hsn;
+ IeRFLNumberList rflNumberList;
+ IeMABitMap maBitMap;
+ IeARFCNIndexList arfcnIndexList;
+
+ IeGPRSMobileAllocation() : IeBase(), hsn(), rflNumberList() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ void SetGPRSMobileAllocationValid() { isValid = TRUE; }
+ void ClearGPRSMobileAllocation() { isValid = FALSE; }
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieGlobalPacketTimingAdvance.h b/data/mnet/GP10/Host/Rlc_mac/include/ieGlobalPacketTimingAdvance.h
new file mode 100644
index 0000000..22ab169
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieGlobalPacketTimingAdvance.h
@@ -0,0 +1,136 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieGlobalPacketTimingAdvance.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEGLOBALPACKETTIMINGADVANCE_H__
+#define __IEGLOBALPACKETTIMINGADVANCE_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+#define MAX_TA_VALUE 63
+#define MAX_TA_INDEX 15
+#define MAX_TA_TIMESLOT 7
+
+// *******************************************************************
+// class IeGlobalPacketTimingAdvance
+//
+// Description:
+// Timing Advance IE -- GSM04.60 12.12a
+//
+// < Global Packet Timing Advance IE > ::=
+// { 0 | 1 < TIMING_ADVANCE_VALUE : bit (6) > }
+// { 0 | 1 < UPLINK_TIMING_ADVANCE_INDEX : bit (4) >
+// < UPLINK_TIMING_ADVANCE_TIMESLOT_NUMBER : bit (3) > }
+// { 0 | 1 < DOWNLINK_TIMING_ADVANCE_INDEX : bit (4) >
+// < DOWNLINK_TIMING_ADVANCE_TIMESLOT_NUMBER : bit (3) > }
+//
+// *******************************************************************
+
+class IeGlobalPacketTimingAdvance : public IeBase {
+public:
+
+ IeGlobalPacketTimingAdvance() : IeBase(), isTaValueValid(FALSE), isUplinkTaIndexValid(FALSE),
+ isDownlinkTaIndexValid(FALSE) {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetGlobalPacketTimingAdvance(unsigned char val)
+ {
+ if (val <= MAX_TA_VALUE)
+ {
+ taValue = val;
+ isTaValueValid = TRUE;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ RlcMacResult SetGlobalPacketTimingAdvanceUplink(unsigned char index, unsigned char timeSlot)
+ {
+ if ((index <= MAX_TA_INDEX) && (timeSlot <= MAX_TA_TIMESLOT))
+ {
+ uplinkTaIndex = index;
+ uplinkTsNumber = timeSlot;
+ isUplinkTaIndexValid = TRUE;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ RlcMacResult SetGlobalPacketTimingAdvanceDownlink(unsigned char index, unsigned char timeSlot)
+ {
+ if ((index <= MAX_TA_INDEX) && (timeSlot <= MAX_TA_TIMESLOT))
+ {
+ downlinkTaIndex = index;
+ downlinkTsNumber = timeSlot;
+ isDownlinkTaIndexValid = TRUE;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+
+ unsigned char GetGlobalPacketTimingAdvance()
+ {
+ return (taValue);
+ }
+
+ void GetGlobalPacketTimingAdvanceUplink(unsigned char *index, unsigned char *timeSlot)
+ {
+ *index = uplinkTaIndex;
+ *timeSlot = uplinkTsNumber;
+ }
+
+ void GetGlobalPacketTimingAdvanceDownlink(unsigned char *index, unsigned char *timeSlot)
+ {
+ *index = downlinkTaIndex;
+ *timeSlot = downlinkTsNumber;
+ }
+
+ void ClearGlobalPacketTimingAdvance()
+ {
+ isValid = FALSE;
+ isTaValueValid=FALSE;
+ isUplinkTaIndexValid=FALSE;
+ isDownlinkTaIndexValid=FALSE;
+ }
+
+private:
+ unsigned char taValue;
+ bool isTaValueValid;
+ unsigned char uplinkTaIndex;
+ unsigned char uplinkTsNumber;
+ bool isUplinkTaIndexValid;
+ unsigned char downlinkTaIndex;
+ unsigned char downlinkTsNumber;
+ bool isDownlinkTaIndexValid;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieGlobalPowerControlParms.h b/data/mnet/GP10/Host/Rlc_mac/include/ieGlobalPowerControlParms.h
new file mode 100644
index 0000000..604bb5b
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieGlobalPowerControlParms.h
@@ -0,0 +1,192 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieGlobalPowerControlParms.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEGLOBALPOWERCONTROLPARMS_H__
+#define __IEGLOBALPOWERCONTROLPARMS_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+#include "RlcMacCommon.h"
+
+#define MAX_T_AVG_W 31
+#define MAX_T_AVG_T 31
+#define MAX_PB 15
+#define MAX_N_AVG_I 15
+
+// *******************************************************************
+// class IeGlobalPowerControlParms
+//
+// Description:
+// Global Power Control Parameters IE -- GSM04.60 12.9
+//
+// < Global Power Control Parameters IE > ::=
+// < ALPHA : bit (4) >
+// < T_AVG_W : bit (5) >
+// < T_AVG_T : bit (5) >
+// < Pb : bit (4) >
+// < PC_MEAS_CHAN : bit (1) >
+// < INT_MEAS_CHANNEL_LIST_AVAIL : bit (1) >
+// < N_AVG_I : bit (4) > ;
+// *******************************************************************
+
+class IeGlobalPowerControlParms : public IeBase {
+public:
+
+ typedef enum
+ {
+ DL_MEAS_ON_BCCH,
+ DL_MEAS_ON_PDCH
+ } PC_MEAS_CHAN_TYPE;
+
+ typedef enum
+ {
+ PSI4_MSG_NOT_BROADCAST,
+ PSI4_MSG_BROADCAST
+ } INT_MEAS_CHAN_LIST_AVAIL_TYPE;
+
+ IeGlobalPowerControlParms() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetAlpha(unsigned char val)
+ {
+ if (val <= MAX_ALPHA_VALUE)
+ {
+ alpha = val;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned char GetAlpha()
+ {
+ return (alpha);
+ }
+
+ RlcMacResult SetTAvgW(unsigned char val)
+ {
+ if (val <= MAX_T_AVG_W)
+ {
+ tAvgW = val;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned char GetTAvgW()
+ {
+ return (tAvgW);
+ }
+
+ RlcMacResult SetTAvgT(unsigned char val)
+ {
+ if (val <= MAX_T_AVG_T)
+ {
+ tAvgT = val;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned char GetTAvgT()
+ {
+ return (tAvgT);
+ }
+
+ RlcMacResult SetPb(unsigned char val)
+ {
+ if (val <= MAX_PB)
+ {
+ pb = val;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned char GetPb()
+ {
+ return (pb);
+ }
+
+ RlcMacResult SetPcMeasChan(PC_MEAS_CHAN_TYPE val)
+ {
+ pcMeasChan = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ PC_MEAS_CHAN_TYPE GetPcMeasChan()
+ {
+ return (pcMeasChan);
+ }
+
+
+ RlcMacResult SetNAvgI(unsigned char val)
+ {
+ if (val <= MAX_N_AVG_I)
+ {
+ nAvgI = val;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned char GetNAvgI()
+ {
+ return (nAvgI);
+ }
+
+ RlcMacResult SetIntMeasChanAvail(INT_MEAS_CHAN_LIST_AVAIL_TYPE val)
+ {
+ intMeasChanAvail = val;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ INT_MEAS_CHAN_LIST_AVAIL_TYPE GetIntMeasChanAvail()
+ {
+ return (intMeasChanAvail);
+ }
+
+ void SetGlobalPowerControlParms() { isValid = TRUE; }
+ void ClearGlobalPowerControlParms() { isValid = FALSE; }
+
+private:
+ unsigned char alpha;
+ unsigned char tAvgW;
+ unsigned char tAvgT;
+ unsigned char pb;
+ PC_MEAS_CHAN_TYPE pcMeasChan;
+ unsigned char nAvgI;
+ INT_MEAS_CHAN_LIST_AVAIL_TYPE intMeasChanAvail;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieGlobalTFI.h b/data/mnet/GP10/Host/Rlc_mac/include/ieGlobalTFI.h
new file mode 100644
index 0000000..36aa389
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieGlobalTFI.h
@@ -0,0 +1,85 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieGlobalTFI.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEGLOBALTFI_H__
+#define __IEGLOBALTFI_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+#define MAX_TFI 32
+
+// *******************************************************************
+// class IeGlobalTFI
+//
+// Description:
+// Global TFI IE -- GSM04.60 12.10
+//
+// < Global TFI IE > ::=
+// { 0 < UPLINK_TFI : bit (5) >
+// | 1 < DOWNLINK_TFI : bit (5) > } ;
+//
+// *******************************************************************
+
+class IeGlobalTFI : public IeBase {
+public:
+
+ typedef enum
+ {
+ UPLINK_TFI,
+ DOWNLINK_TFI
+ } RLC_MAC_TFI_TYPE;
+
+ IeGlobalTFI() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ RlcMacResult DecodeIe(BitStreamIn &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetGlobalTFI(unsigned char tfiIn, RLC_MAC_TFI_TYPE type)
+ {
+ if (tfiIn <= MAX_TFI)
+ {
+ globalTFI = tfiIn;
+ tfiType = type;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned int GetGlobalTFI()
+ {
+ return (globalTFI);
+ }
+
+ RLC_MAC_TFI_TYPE GetGlobalTFIType()
+ {
+ return (tfiType);
+ }
+
+ void ClearGlobalTFI() { isValid = FALSE; }
+
+private:
+ RLC_MAC_TFI_TYPE tfiType;
+ unsigned char globalTFI;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieHSN.h b/data/mnet/GP10/Host/Rlc_mac/include/ieHSN.h
new file mode 100644
index 0000000..6bf1317
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieHSN.h
@@ -0,0 +1,67 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieHSN.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEHSN_H__
+#define __IEHSN_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+
+// *******************************************************************
+// class IeHSN
+//
+// Description:
+// HSN IE -- GSM04.60 12.8
+// *******************************************************************
+
+#define MAX_HSN 63
+
+class IeHSN : public IeBase {
+public:
+
+ IeHSN() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetHSN(unsigned char val)
+ {
+ if (val <= MAX_HSN)
+ {
+ hsn = val;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned char GetHSN()
+ {
+ return(hsn);
+ }
+
+ void ClearHSN() { isValid = FALSE; }
+
+private:
+ unsigned char hsn;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieLSAParameters.h b/data/mnet/GP10/Host/Rlc_mac/include/ieLSAParameters.h
new file mode 100644
index 0000000..f91677d
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieLSAParameters.h
@@ -0,0 +1,76 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieLSAParameters.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IELSAPARAMETERS_H__
+#define __IELSAPARAMETERS_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+#define MAX_FREQ_OR_CELLS 32
+// *******************************************************************
+// class IeLSAParameters
+//
+// Description:
+// LSA Parameters IE -- GSM04.60 12.28
+//
+// < LSA Parameters IE > ::=
+// < NR_OF_FREQ_OR_CELLS : bit (5) >:
+// < LSA ID information : < LSA ID information struct >> } *(val (NR_OF_FREQ_OR_CELLS)) };
+//
+// < LSA ID information struct > ::=
+// { 1 { 0 < LSA_ID : bit (24) >
+// |1 < ShortLSA_ID : bit (10) >} } ** 0 ;
+//
+// *******************************************************************
+
+class IeLSAParameters : public IeBase {
+public:
+
+ IeLSAParameters() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetLSAParameters(unsigned char numIds, unsigned int *ids);
+ RlcMacResult SetLSAParameters(unsigned char numIds, unsigned short *shortIds);
+
+ void GetLSAParameters(unsigned char *numIds, unsigned int *ids)
+ {
+ *numIds = numFreqOrCells;
+ ids = LSAIdInfo.lsaIds;
+ }
+
+ void GetLSAParameters(unsigned char *numIds, unsigned short *shortIds)
+ {
+ *numIds = numFreqOrCells;
+ shortIds = LSAIdInfo.shortLsaIds;
+ }
+
+ void ClearLSAParameters() { isValid = FALSE; }
+
+private:
+ unsigned char numFreqOrCells;
+ enum IdType {SHORT, LONG} type;
+ union LSAIdStruct
+ {
+ unsigned int lsaIds[MAX_FREQ_OR_CELLS];
+ unsigned short shortLsaIds[MAX_FREQ_OR_CELLS];
+ } LSAIdInfo;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieMABitMap.h b/data/mnet/GP10/Host/Rlc_mac/include/ieMABitMap.h
new file mode 100644
index 0000000..d95240c
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieMABitMap.h
@@ -0,0 +1,60 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieMABitMap.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEMABITMAP_H__
+#define __IEMABITMAP_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+#include "RlcMacCommon.h"
+
+// *******************************************************************
+// class IeMABitMap
+//
+// Description:
+// MA Bit Map IE -- GSM04.60 12.10a
+//
+// *******************************************************************
+
+
+class IeMABitMap : public IeBase {
+public:
+
+ IeMABitMap() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetMABitMap(unsigned char len, unsigned char *map);
+
+ void GetMABitMap(unsigned char *len, unsigned char *map)
+ {
+ *len = maLength;
+ for (int i = 0; i < ((maLength+1)>>3); i++)
+ {
+ map[i] = maBitMap[i];
+ }
+ }
+
+ void ClearMABitMap() { isValid = FALSE; }
+
+private:
+ unsigned char maLength;
+ unsigned char maBitMap[RLC_MAC_MAX_RF_FREQS>>3];
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieMACMode.h b/data/mnet/GP10/Host/Rlc_mac/include/ieMACMode.h
new file mode 100644
index 0000000..428f0e7
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieMACMode.h
@@ -0,0 +1,66 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieMACMode.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEMACMODE_H__
+#define __IEMACMODE_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+// *******************************************************************
+// class IeMacMode
+//
+// Description:
+// Mac Mode IE -- GSM04.60 11.2.7
+// *******************************************************************
+
+class IeMacMode : public IeBase {
+public:
+
+ typedef enum
+ {
+ DYNAMIC_ALLOCATION,
+ EXTENDED_DYNAMIC_ALLOCATION,
+ FIXED_ALLOCATION_NO_HALF_DUPLEX,
+ FIXED_ALLOCATION_HALF_DUPLEX
+ } MAC_MODE;
+
+ IeMacMode() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetMacMode(MAC_MODE mode)
+ {
+ macMode = mode;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ MAC_MODE GetMacMode()
+ {
+ return(macMode);
+ }
+
+ void ClearMacMode() { isValid = FALSE; }
+private:
+ MAC_MODE macMode;
+};
+
+
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieMAFreqList.h b/data/mnet/GP10/Host/Rlc_mac/include/ieMAFreqList.h
new file mode 100644
index 0000000..3d0090a
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieMAFreqList.h
@@ -0,0 +1,97 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieMAFreqList.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEMAFREQLIST_H__
+#define __IEMAFREQLIST_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+#include "RlcMacCommon.h"
+
+
+// *******************************************************************
+// class IeMAFreqList
+//
+// Description:
+// MA Frequency List IE -- GSM04.60 12.8
+// *******************************************************************
+
+#define MAX_MA_FREQ_LIST_LEN 18
+#define MA_LIST_MAX_RF_FREQS RLC_MAC_MAX_RF_FREQS
+
+typedef enum
+{
+ FREQ_LIST_FORMAT_BIT_MAP_0 = 0,
+ FREQ_LIST_FORMAT_1024_RANGE = 1,
+ FREQ_LIST_FORMAT_512_RANGE = 20,
+ FREQ_LIST_FORMAT_256_RANGE = 21,
+ FREQ_LIST_FORMAT_128_RANGE = 22,
+ FREQ_LIST_FORMAT_VARIABLE_BIT_MAP = 23,
+} FREQ_LIST_FORMAT_ID;
+
+class IeMAFreqList : public IeBase {
+public:
+
+ IeMAFreqList() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetMAFreqList(unsigned char numEntries, unsigned short *arfcns);
+
+ void GetMAFreqList(unsigned char *numEntries, unsigned short *arfcns)
+ {
+ *numEntries = numArfcns;
+ for (int i = 0; i < numArfcns; i++)
+ {
+ arfcns[i] = arfcnList[i];
+ }
+ }
+
+ void ClearMAFreqList() { isValid = FALSE; }
+
+private:
+ unsigned char numArfcns;
+ unsigned short arfcnList[MA_LIST_MAX_RF_FREQS];
+
+
+ FREQ_LIST_FORMAT_ID SelectFrequencyListFormat();
+ RlcMacResult EncodeFreqList1024Range(unsigned char &MAListLen, unsigned char *MAList);
+ RlcMacResult EncodeFreqList512Range(unsigned char &MAListLen, unsigned char *MAList);
+ RlcMacResult EncodeFreqList256Range(unsigned char &MAListLen, unsigned char *MAList);
+ RlcMacResult EncodeFreqList128Range(unsigned char &MAListLen, unsigned char *MAList);
+ RlcMacResult EncodeFreqListVariableBitMap(unsigned char &MAListLen, unsigned char *MAList);
+ RlcMacResult EncodeFreqListBitMap0(unsigned char &MAListLen, unsigned char *MAList);
+ int GetGreatestPowerOf2LessorOrEqualTo(int index);
+ void EncodeFreqsSubTree(int index, int range,unsigned short *set,
+ short numberInSet, unsigned short *W);
+ void GetFreqSetFromW(unsigned short origArfcn, int original_range,
+ unsigned short *W, short numberInW, unsigned short *set);
+ void SetWbits(int firstNumBits, int arrayLength, unsigned short *Wbits);
+ unsigned short ReduceMinArfcn(int numFreq, unsigned short *reducedArfcn);
+ void StuffArray(
+ int arrayLength,
+ unsigned short *W,
+ unsigned short *Wbits,
+ int &bufferLength,
+ int startBit, // 1-8; 1:lsb, 8:msb, msbs before startBit have to be preserved
+ // startBit is advanced to the next available bit before return
+ unsigned char *buffer);
+
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieMAIO.h b/data/mnet/GP10/Host/Rlc_mac/include/ieMAIO.h
new file mode 100644
index 0000000..0434ad6
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieMAIO.h
@@ -0,0 +1,67 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieMAIO.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEMAIO_H__
+#define __IEMAIO_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+
+// *******************************************************************
+// class IeMAIO
+//
+// Description:
+// MAIO IE -- GSM04.60 12.8
+// *******************************************************************
+
+#define MAX_MAIO 63
+
+class IeMAIO : public IeBase {
+public:
+
+ IeMAIO() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetMAIO(unsigned char val)
+ {
+ if (val <= MAX_MAIO)
+ {
+ maio = val;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned char GetMAIO()
+ {
+ return(maio);
+ }
+
+ void ClearMAIO() { isValid = FALSE; }
+
+private:
+ unsigned char maio;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieMANumber.h b/data/mnet/GP10/Host/Rlc_mac/include/ieMANumber.h
new file mode 100644
index 0000000..453cd4b
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieMANumber.h
@@ -0,0 +1,67 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieMANumber.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEMANUMBER_H__
+#define __IEMANUMBER_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+
+// *******************************************************************
+// class IeMANumber
+//
+// Description:
+// MANumber IE -- GSM04.60 12.8
+// *******************************************************************
+
+#define MAX_MA_NUMBER 15
+
+class IeMANumber : public IeBase {
+public:
+
+ IeMANumber() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetMANumber(unsigned char val)
+ {
+ if (val <= MAX_MA_NUMBER)
+ {
+ maNum = val;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned char GetMANumber()
+ {
+ return(maNum);
+ }
+
+ void ClearMANumber() { isValid = FALSE; }
+
+private:
+ unsigned char maNum;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieMSRadioAccessCapability.h b/data/mnet/GP10/Host/Rlc_mac/include/ieMSRadioAccessCapability.h
new file mode 100644
index 0000000..00a5b3b
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieMSRadioAccessCapability.h
@@ -0,0 +1,169 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieMSRadioAccessCapability.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEMSRADIOACCESSCAPABILITY_H__
+#define __IEMSRADIOACCESSCAPABILITY_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+#include "ril3/ril3_gmm_msg.h"
+
+// *******************************************************************
+// class IeMSRadioAccessCapability
+//
+// Description:
+// Power Control Parameters IE -- GSM04.60 11.2.16, GSM04.08 10.5.5.12a
+//
+// < MS Radio Access Capability IE > ::=
+//
+// <MS RA capability value part struct >::= --recursive structure allows any number of Access technologies
+// < Access Technology Type: bit (4) >
+// < Access capabilities : <Access capabilities struct> >
+// { 0 | 1 <MS RA capability value part struct> } ;
+//
+// < Access capabilities struct > ::=
+// < Length : bit (7) > -- length in bits of Content and spare bits
+// <Access capabilities : <Content>>
+// <spare bits>** ; -- expands to the indicated length
+// -- may be used for future enhancements
+//
+// < Content > ::=
+// < RF Power Capability : bit (3) >
+// { 0 | 1 <A5 bits : <A5 bits> > } -- zero means that the same values apply for parameters as in the immediately preceeding Access capabilities field within this IE
+// -- The presence of the A5 bits is mandatory in the 1st Access capabilities struct within this IE.
+// < ES IND : bit >
+// < PS : bit >
+// < VGCS : bit >
+// < VBS : bit >
+// { 0 | 1 < Multislot capability : Multislot capability struct > } ; -- zero means that the same values apply for multislot parameters as in the immediately preceeding Access capabilities field within this IE.
+// -- The presence of the Multislot capability struct is mandatory in the 1st Access capabilities struct within this IE.
+//
+// < Multislot capability struct > ::=
+// { 0 | 1 < HSCSD multislot class : bit (5) > }
+// { 0 | 1 < GPRS multislot class : bit (5) > < GPRS Extended Dynamic Allocation Capability : bit > }
+// { 0 | 1 < SMS_VALUE : bit (4) > < SM_VALUE : bit (4) > } ;
+//
+// <A5 bits> ::= < A5/1 : bit> <A5/2 : bit> <A5/3 : bit> <A5/4 : bit> <A5/5 : bit> <A5/6 : bit> <A5/7 : bit>; -- bits for circuit mode ciphering algorithms
+//
+// *******************************************************************
+
+// (GSM P, GSM E, GSM R), or GSM 1800, or GSM 1900
+#define MAX_ACCESS_TECHNOLOGIES 3
+
+class IeMSRadioAccessCapability : public IeBase {
+public:
+
+ typedef enum
+ {
+ GSM_P,
+ GSM_E,
+ GSM_R,
+ GSM_1800,
+ GSM_1900
+ } ACCESS_TECHNOLOGY_TYPE;
+
+ typedef enum
+ {
+ A5_X_NOT_AVAILABLE,
+ A5_X_AVAILABLE,
+ } A5_BITS;
+
+ typedef enum
+ {
+ EARLY_CLASSMARK_SENDING_NOT_IMPLEMENTED,
+ EARLY_CLASSMARK_SENDING_IMPLEMENTED
+ } ES_IND;
+
+ typedef enum
+ {
+ PS_NOT_PRESENT,
+ PS_PRESENT
+ } PS;
+
+ typedef enum
+ {
+ NO_VGCS_CAPABILITY,
+ VGCS_CAPABILITY
+ } VGCS;
+
+ typedef enum
+ {
+ NO_VBS_CAPABILITY,
+ VBS_CAPABILITY
+ } VBS;
+
+ typedef enum
+ {
+ EXTENDED_DYNAMIC_ALLOC_NOT_IMPLEMENTED,
+ EXTENDED_DYNAMIC_ALLOC_IMPLEMENTED
+ } GPRS_EXTENDED_DYNAMIC_ALLOC_CAPABILITY;
+
+ // IE contents
+ struct MSRACapabilityValuePartStruct
+ {
+ bool isValid;
+ ACCESS_TECHNOLOGY_TYPE accessTechnologyType;
+ unsigned char length;
+ unsigned char rfPowerCapability;
+ A5_BITS a51Bit;
+ A5_BITS a52Bit;
+ A5_BITS a53Bit;
+ A5_BITS a54Bit;
+ A5_BITS a55Bit;
+ A5_BITS a56Bit;
+ A5_BITS a57Bit;
+ ES_IND esInd;
+ PS ps;
+ VGCS vgcs;
+ VBS vbs;
+ struct
+ {
+ bool isValid;
+ unsigned char hscsdMultislotClass;
+ } HSCSDMultislotClass;
+ struct
+ {
+ bool isValid;
+ unsigned char gprsMultislotClass;
+ GPRS_EXTENDED_DYNAMIC_ALLOC_CAPABILITY gprsExtendedDynamicAllocationCapability;
+ } GPRSCapability;
+ struct
+ {
+ bool isValid;
+ unsigned char smsValue;
+ unsigned char smValue;
+ } SwitchMeasure;
+ } MSRACapabilityValuePart[MAX_ACCESS_TECHNOLOGIES];
+
+ IeMSRadioAccessCapability() : IeBase()
+ {
+ for (int i=0; i < MAX_ACCESS_TECHNOLOGIES; i++)
+ {
+ MSRACapabilityValuePart[i].isValid = FALSE;
+ }
+ }
+
+ RlcMacResult DecodeIe(BitStreamIn &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ void SetMSRadioAccessCapabilityValid() { isValid = TRUE; }
+ void ClearMSRadioAccessCapability() { isValid = FALSE; }
+ IeMSRadioAccessCapability &operator=(const T_CNI_RIL3_IE_MS_RADIO_ACCESS_CAPABILITY &raCap);
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieMobileIdentity.h b/data/mnet/GP10/Host/Rlc_mac/include/ieMobileIdentity.h
new file mode 100644
index 0000000..8be28f7
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieMobileIdentity.h
@@ -0,0 +1,79 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieMobileIdentity.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEMOBILEIDENTITY_H__
+#define __IEMOBILEIDENTITY_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+#define MAX_MOBILE_ID_LEN 16
+// *******************************************************************
+// class IeMobileIdentity
+//
+// Description:
+// Mobile Identity IE -- GSM04.60 11.2.10
+// GSM04.08 10.1.5.4
+// *******************************************************************
+
+
+class IeMobileIdentity : public IeBase {
+public:
+
+ typedef enum
+ {
+ NO_IDENTITY,
+ IMSI,
+ IMEI,
+ IMEISV,
+ TMSI_PTMSI
+ } MOBILE_IDENTITY_TYPE;
+
+ IeMobileIdentity() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetMobileIdentity(MOBILE_IDENTITY_TYPE type, int numDigits, unsigned char *digits);
+ RlcMacResult SetMobileIdentity(MOBILE_IDENTITY_TYPE type, unsigned long tmsi);
+
+ void GetMobileIdentity(MOBILE_IDENTITY_TYPE *type, int *numDigits, unsigned char *digits)
+ {
+ *type = miType;
+ *numDigits = numMiDigits;
+ for (int i = 0; i < numMiDigits; i++)
+ {
+ digits[i] = miDigits[i];
+ }
+ }
+
+ void GetMobileIdentity(MOBILE_IDENTITY_TYPE *type, unsigned long *tmsi)
+ {
+ *type = miType;
+ *tmsi = p_tmsi;
+ }
+
+ void ClearMobileIdentity() { isValid = FALSE; }
+
+private:
+ MOBILE_IDENTITY_TYPE miType;
+ unsigned long p_tmsi;
+ int numMiDigits;
+ unsigned char miDigits[MAX_MOBILE_ID_LEN];
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieNLN.h b/data/mnet/GP10/Host/Rlc_mac/include/ieNLN.h
new file mode 100644
index 0000000..cc724ec
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieNLN.h
@@ -0,0 +1,59 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieNLN.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IENLN_H__
+#define __IENLN_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+// *******************************************************************
+// class IeNLN
+//
+// Description:
+// NLN IE -- GSM04.60 11.2.10
+// GSM04.08 10.5.2.23
+// *******************************************************************
+
+
+class IeNLN : public IeBase {
+public:
+
+ IeNLN() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetNLN(unsigned char val)
+ {
+ nln = val;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ unsigned char GetNLN()
+ {
+ return (nln);
+ }
+
+ void ClearNLN() { isValid = FALSE; }
+
+private:
+ unsigned char nln;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/iePO.h b/data/mnet/GP10/Host/Rlc_mac/include/iePO.h
new file mode 100644
index 0000000..92b5bdd
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/iePO.h
@@ -0,0 +1,58 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : iePO.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEPO_H__
+#define __IEPO_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+// *******************************************************************
+// class IePO
+//
+// Description:
+// PO IE -- GSM04.60 11.2.29
+// *******************************************************************
+
+
+class IePO : public IeBase {
+public:
+
+ IePO() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetPO(unsigned char val)
+ {
+ po = val;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ unsigned char GetPO()
+ {
+ return (po);
+ }
+
+ void ClearPO() { isValid = FALSE; }
+
+private:
+ unsigned char po;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/iePRMode.h b/data/mnet/GP10/Host/Rlc_mac/include/iePRMode.h
new file mode 100644
index 0000000..6e0e518
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/iePRMode.h
@@ -0,0 +1,64 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : iePRMode.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEPRMODE_H__
+#define __IEPRMODE_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+// *******************************************************************
+// class IePRMode
+//
+// Description:
+// PR Mode IE -- GSM04.60 11.2.29
+// *******************************************************************
+
+
+class IePRMode : public IeBase {
+public:
+
+ typedef enum
+ {
+ PR_MODE_A_ONE_MS,
+ PR_MODE_B_ALL_MS
+ } PR_MODE;
+
+ IePRMode() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetPRMode(PR_MODE mode)
+ {
+ prMode = mode;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ PR_MODE GetPRMode()
+ {
+ return (prMode);
+ }
+
+ void ClearPRMode() { isValid = FALSE; }
+
+private:
+ PR_MODE prMode;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/iePTMSI.h b/data/mnet/GP10/Host/Rlc_mac/include/iePTMSI.h
new file mode 100644
index 0000000..e4cb9c2
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/iePTMSI.h
@@ -0,0 +1,68 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : iePTMSI.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEPTMSI_H__
+#define __IEPTMSI_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+
+#define MAX_PTMSI 4294967295
+
+
+// *******************************************************************
+// class IePTMSI
+//
+// Description:
+// PTMSI IE -- GSM03.03
+// *******************************************************************
+
+class IePTMSI : public IeBase {
+public:
+
+ IePTMSI() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetPTMSI(unsigned int ptmsiIn)
+ {
+ if (ptmsiIn <= MAX_PTMSI)
+ {
+ ptmsi = ptmsiIn;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned int GetPTMSI()
+ {
+ return (ptmsi);
+ }
+
+ void ClearPTMSI() { isValid = FALSE; }
+
+private:
+ unsigned int ptmsi;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/iePacketReqRef.h b/data/mnet/GP10/Host/Rlc_mac/include/iePacketReqRef.h
new file mode 100644
index 0000000..1303502
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/iePacketReqRef.h
@@ -0,0 +1,74 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : iePacketReqRef.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEPACKETREQREF_H__
+#define __IEPACKETREQREF_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+// *******************************************************************
+// class IePacketReqRef
+//
+// Description:
+// Packet Request Ref IE -- GSM04.60 12.11
+// GSM04.08 10.5.2.38
+//
+// < Packet Request Reference IE > ::=
+// < RANDOM_ACCESS_INFORMATION value : bit (11) >
+// < FRAME_NUMBER : bit (16) > ;
+//
+// *******************************************************************
+
+class IePacketReqRef : public IeBase {
+public:
+
+ IePacketReqRef() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetPacketReqRef(unsigned short randAcc, unsigned char t1,
+ unsigned char t2, unsigned char t3)
+ {
+ randAccInfo = randAcc;
+ T1 = t1;
+ T2 = t2;
+ T3 = t3;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ void GetPacketReqRef(unsigned short *randAcc, unsigned char *t1,
+ unsigned char *t2, unsigned char *t3)
+ {
+ *randAcc = randAccInfo;
+ *t1 = T1;
+ *t2 = T2;
+ *t3 = T3;
+ }
+
+ void ClearPacketReqRef() { isValid = FALSE; }
+
+private:
+ unsigned short randAccInfo;
+ unsigned char T1;
+ unsigned char T2;
+ unsigned char T3;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/iePacketTimingAdvance.h b/data/mnet/GP10/Host/Rlc_mac/include/iePacketTimingAdvance.h
new file mode 100644
index 0000000..fd24fc2
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/iePacketTimingAdvance.h
@@ -0,0 +1,106 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : iePacketTimingAdvance.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEPACKETTIMINGADVANCE_H__
+#define __IEPACKETTIMINGADVANCE_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+#define MAX_TA_VALUE 63
+#define MAX_TA_INDEX 15
+#define MAX_TA_TIMESLOT 7
+
+// *******************************************************************
+// class IePacketTimingAdvance
+//
+// Description:
+// Packet Timing Advance IE -- GSM04.60 12.12
+//
+// < Packet Timing Advance IE > ::=
+// { 0 | 1 < TIMING_ADVANCE_VALUE : bit (6) > }
+// { 0 | 1 < TIMING_ADVANCE_INDEX : bit (4) >
+// < TIMING_ADVANCE_TIMESLOT_NUMBER : bit (3) > } ;
+//
+// *******************************************************************
+
+class IePacketTimingAdvance : public IeBase {
+public:
+
+ IePacketTimingAdvance() : IeBase(), isTaValueValid(FALSE), isTaIndexValid(FALSE) {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetPacketTimingAdvance(unsigned char val)
+ {
+ if (val <= MAX_TA_VALUE)
+ {
+ taValue = val;
+ isTaValueValid = TRUE;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ RlcMacResult SetPacketTimingAdvance(unsigned char index, unsigned char timeSlot)
+ {
+ if ((index <= MAX_TA_INDEX) && (timeSlot <= MAX_TA_TIMESLOT))
+ {
+ taIndex = index;
+ tsNumber = timeSlot;
+ isTaIndexValid = TRUE;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned char GetPacketTimingAdvance()
+ {
+ return (taValue);
+ }
+
+ void GetPacketTimingAdvance(unsigned char *index, unsigned char *timeSlot)
+ {
+ *index = taIndex;
+ *timeSlot = tsNumber;
+ }
+
+ void ClearPacketTimingAdvance()
+ {
+ isValid = FALSE;
+ isTaValueValid=FALSE;
+ isTaIndexValid=FALSE;
+ }
+
+private:
+ unsigned char taValue;
+ bool isTaValueValid;
+ unsigned char taIndex;
+ unsigned char tsNumber;
+ bool isTaIndexValid;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/iePageMode.h b/data/mnet/GP10/Host/Rlc_mac/include/iePageMode.h
new file mode 100644
index 0000000..5802f8a
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/iePageMode.h
@@ -0,0 +1,66 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : iePageMode.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEPAGEMODE_H__
+#define __IEPAGEMODE_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+// *******************************************************************
+// class IePageMode
+//
+// Description:
+// Page Mode IE -- GSM04.60 12.20
+// *******************************************************************
+
+
+class IePageMode : public IeBase {
+public:
+
+ typedef enum
+ {
+ NORMAL_PAGING = 0,
+ EXTENDED_PAGING = 1,
+ PAGING_REORGANIZATION = 2,
+ PAGING_SAME_AS_BEFORE = 3
+ } RLC_MAC_PAGE_MODE;
+
+ IePageMode() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetPageMode(RLC_MAC_PAGE_MODE mode)
+ {
+ pageMode = mode;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ RLC_MAC_PAGE_MODE GetPageMode()
+ {
+ return (pageMode);
+ }
+
+ void ClearPageMode() { isValid = FALSE; }
+
+private:
+ RLC_MAC_PAGE_MODE pageMode;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/iePersistenceLevel.h b/data/mnet/GP10/Host/Rlc_mac/include/iePersistenceLevel.h
new file mode 100644
index 0000000..a1b3527
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/iePersistenceLevel.h
@@ -0,0 +1,65 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : iePersistenceLevel.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEPERSISTENCELEVEL_H__
+#define __IEPERSISTENCELEVEL_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+#include "RlcMacCommon.h"
+
+// *******************************************************************
+// class IePersistenceLevel
+//
+// Description:
+// Page Mode IE -- GSM04.60 12.14
+// *******************************************************************
+
+
+class IePersistenceLevel : public IeBase {
+public:
+
+ IePersistenceLevel() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetPersistenceLevel(unsigned char levels[MAX_NUM_RADIO_PRIORITY])
+ {
+ for (int i = 0; i < MAX_NUM_RADIO_PRIORITY; i++)
+ {
+ persistenceLevel[i] = levels[i];
+ }
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ void GetPersistenceLevel(unsigned char levels[MAX_NUM_RADIO_PRIORITY])
+ {
+ for (int i = 0; i < MAX_NUM_RADIO_PRIORITY; i++)
+ {
+ levels[i] = persistenceLevel[i];
+ }
+ }
+
+ void ClearPersistenceLevel() { isValid = FALSE; }
+
+private:
+ unsigned char persistenceLevel[MAX_NUM_RADIO_PRIORITY];
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/iePowerControlParameters.h b/data/mnet/GP10/Host/Rlc_mac/include/iePowerControlParameters.h
new file mode 100644
index 0000000..5618cc2
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/iePowerControlParameters.h
@@ -0,0 +1,78 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : iePowerControlParameters.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEPOWERCONTROLPARAMETERS_H__
+#define __IEPOWERCONTROLPARAMETERS_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+#include "RlcMacCommon.h"
+
+// *******************************************************************
+// class IePowerControlParameters
+//
+// Description:
+// Power Control Parameters IE -- GSM04.60 12.13
+//
+// < Power Control Parameters IE > ::=
+// < ALPHA : bit (4) >
+// { 0 | 1 < GAMMA_TN0 : bit (5) > }
+// { 0 | 1 < GAMMA_TN1 : bit (5) > }
+// { 0 | 1 < GAMMA_TN2 : bit (5) > }
+// { 0 | 1 < GAMMA_TN3 : bit (5) > }
+// { 0 | 1 < GAMMA_TN4 : bit (5) > }
+// { 0 | 1 < GAMMA_TN5 : bit (5) > }
+// { 0 | 1 < GAMMA_TN6 : bit (5) > }
+// { 0 | 1 < GAMMA_TN7 : bit (5) > } ;
+//
+// *******************************************************************
+
+#define MAX_NUM_GAMMAS 8
+
+typedef struct
+{
+ bool isValid;
+ unsigned char gamma;
+} GammaStruct;
+
+class IePowerControlParameters : public IeBase {
+public:
+
+ IePowerControlParameters() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetPowerControlParameters(unsigned char alp, GammaStruct *gammas);
+
+ void GetPowerControlParameters(unsigned char *alp, GammaStruct *gammas)
+ {
+ *alp = alpha;
+ for (int i = 0; i < MAX_NUM_GAMMAS; i++)
+ {
+ gammas[i] = gammaTn[i];
+ }
+ }
+
+ void ClearPowerControlParameters() { isValid = FALSE; }
+
+private:
+ unsigned char alpha;
+ GammaStruct gammaTn[MAX_NUM_GAMMAS];
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieRFLNumberList.h b/data/mnet/GP10/Host/Rlc_mac/include/ieRFLNumberList.h
new file mode 100644
index 0000000..34593ac
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieRFLNumberList.h
@@ -0,0 +1,64 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieRFLNumberList.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IERFLNUMBERLIST_H__
+#define __IERFLNUMBERLIST_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+#include "RlcMacCommon.h"
+
+// *******************************************************************
+// class IeRFLNumberList
+//
+// Description:
+// RFL Number List IE -- GSM04.60 12.10a
+//
+// < RFL number list struct > ::=
+// < RFL_NUMBER : bit (4) >
+// { 0 | 1 < RFL number list struct > } ;
+//
+// *******************************************************************
+
+
+class IeRFLNumberList : public IeBase {
+public:
+
+ IeRFLNumberList() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetRFLNumberList(unsigned char count, unsigned char *list);
+
+ void GetRFLNumberList(unsigned char *count, unsigned char *list)
+ {
+ *count = numNums;
+ for (int i = 0; i < numNums; i++)
+ {
+ list[i] = numberList[i];
+ }
+ }
+
+ void ClearRFLNumberList() { isValid = FALSE; }
+
+private:
+ unsigned char numNums;
+ unsigned char numberList[RLC_MAC_MAX_RF_FREQS];
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieRLCBlocksGranted.h b/data/mnet/GP10/Host/Rlc_mac/include/ieRLCBlocksGranted.h
new file mode 100644
index 0000000..8902928
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieRLCBlocksGranted.h
@@ -0,0 +1,59 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieRLCBlocksGranted.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IERLCBLOCKSGRANTED_H__
+#define __IERLCBLOCKSGRANTED_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+// *******************************************************************
+// class IeRLCBlocksGranted
+//
+// Description:
+// RLC Blocks Granted IE -- GSM04.60 11.2.29
+//
+// *******************************************************************
+
+class IeRLCBlocksGranted : public IeBase {
+public:
+
+
+ IeRLCBlocksGranted() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetRLCBlocksGranted(unsigned char val)
+ {
+ rlcBlocksGranted = val;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ unsigned char GetRLCBlocksGranted()
+ {
+ return (rlcBlocksGranted);
+ }
+
+ void ClearRLCBlocksGranted() { isValid = FALSE; }
+
+private:
+ unsigned char rlcBlocksGranted;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieRLCMode.h b/data/mnet/GP10/Host/Rlc_mac/include/ieRLCMode.h
new file mode 100644
index 0000000..3ea4cf8
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieRLCMode.h
@@ -0,0 +1,65 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieRLCMode.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IERLCMODE_H__
+#define __IERLCMODE_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+// *******************************************************************
+// class IeRlcMode
+//
+// Description:
+// RLC Mode IE -- GSM04.60 11.2.7
+// *******************************************************************
+
+
+class IeRlcMode : public IeBase {
+public:
+
+ typedef enum
+ {
+ RLC_ACKNOWLEDGED,
+ RLC_UNACKNOWLEDGED
+ } RLC_MODE;
+
+ IeRlcMode() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ RlcMacResult DecodeIe(BitStreamIn &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetRlcMode(RLC_MODE mode)
+ {
+ rlcMode = mode;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ RLC_MODE GetRlcMode()
+ {
+ return (rlcMode);
+ }
+
+ void ClearRlcMode() { isValid = FALSE; }
+
+private:
+ RLC_MODE rlcMode;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieStartFrameNum.h b/data/mnet/GP10/Host/Rlc_mac/include/ieStartFrameNum.h
new file mode 100644
index 0000000..6516a2f
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieStartFrameNum.h
@@ -0,0 +1,109 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieStartFrameNum.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IESTARTFRAMENUM_H__
+#define __IESTARTFRAMENUM_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+
+// *******************************************************************
+// class IeStartFrameNum
+//
+// Description:
+// Start Frame Number IE -- GSM04.60 12.21
+//
+// *******************************************************************
+
+#define MAX_K_NUM 8192
+#define MAX_T1_VAL 32
+#define MAX_T2_VAL 32
+#define MAX_T3_VAL 64
+
+
+class IeStartFrameNum : public IeBase {
+public:
+
+ typedef enum
+ {
+ ABSOLUTE_FRAME_NUM,
+ RELATIVE_FRAME_NUM
+ } START_FRAME_TYPE;
+
+ IeStartFrameNum() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetStartFrameNum(unsigned short kVal)
+ {
+ if (kVal <= MAX_K_NUM)
+ {
+ k = kVal;
+ isValid = TRUE;
+ startFrameType = RELATIVE_FRAME_NUM;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ RlcMacResult SetStartFrameNum(unsigned char t1, unsigned char t2,
+ unsigned char t3)
+ {
+ if ((t1 <= MAX_T1_VAL) && (t2 <= MAX_T2_VAL) && (t2 <= MAX_T2_VAL))
+ {
+ T1 = t1;
+ T2 = t2;
+ T3 = t3;
+ isValid = TRUE;
+ startFrameType = ABSOLUTE_FRAME_NUM;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned short GetStartFrameNumRelative()
+ {
+ return (k);
+ }
+
+ void GetStartFrameNumAbsolute (unsigned char *t1, unsigned char *t2,
+ unsigned char *t3)
+ {
+ *t1 = T1;
+ *t2 = T2;
+ *t3 = T3;
+ }
+
+ void ClearStartFrameNum() { isValid = FALSE; }
+
+private:
+ START_FRAME_TYPE startFrameType;
+ unsigned short k;
+ unsigned char T1;
+ unsigned char T2;
+ unsigned char T3;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieTFI.h b/data/mnet/GP10/Host/Rlc_mac/include/ieTFI.h
new file mode 100644
index 0000000..6061211
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieTFI.h
@@ -0,0 +1,69 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieTFI.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IETFI_H__
+#define __IETFI_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+#include "RlcMacCommon.h"
+
+
+// *******************************************************************
+// class IeTFI
+//
+// Description:
+// Global TFI IE -- GSM04.60 12.15
+//
+// *******************************************************************
+
+class IeTFI : public IeBase {
+public:
+
+
+ IeTFI() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ RlcMacResult DecodeIe(BitStreamIn &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetTFI(unsigned char tfiIn)
+ {
+ if (tfiIn <= MAX_TFI)
+ {
+ tfi = tfiIn;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned char GetTFI()
+ {
+ return (tfi);
+ }
+
+ void ClearTFI() { isValid = FALSE; }
+
+private:
+ unsigned char tfi;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieTLLI.h b/data/mnet/GP10/Host/Rlc_mac/include/ieTLLI.h
new file mode 100644
index 0000000..4d3f6b2
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieTLLI.h
@@ -0,0 +1,69 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieTLLI.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IETLLI_H__
+#define __IETLLI_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+
+#define MAX_TLLI 4294967295
+
+
+// *******************************************************************
+// class IeTLLI
+//
+// Description:
+// TLLI IE -- GSM04.60 12.16
+// *******************************************************************
+
+class IeTLLI : public IeBase {
+public:
+
+ IeTLLI() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ RlcMacResult DecodeIe(BitStreamIn &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetTLLI(unsigned int tlliIn)
+ {
+ if (tlliIn <= MAX_TLLI)
+ {
+ tlli = tlliIn;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned int GetTLLI()
+ {
+ return (tlli);
+ }
+
+ void ClearTLLI() { isValid = FALSE; }
+
+private:
+ unsigned int tlli;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieTMSI.h b/data/mnet/GP10/Host/Rlc_mac/include/ieTMSI.h
new file mode 100644
index 0000000..c76165e
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieTMSI.h
@@ -0,0 +1,68 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieTMSI.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IETMSI_H__
+#define __IETMSI_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+
+#define MAX_TMSI 4294967295
+
+
+// *******************************************************************
+// class IeTMSI
+//
+// Description:
+// TMSI IE -- GSM03.03
+// *******************************************************************
+
+class IeTMSI : public IeBase {
+public:
+
+ IeTMSI() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetTMSI(unsigned int tmsiIn)
+ {
+ if (tmsiIn <= MAX_TMSI)
+ {
+ tmsi = tmsiIn;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned int GetTMSI()
+ {
+ return (tmsi);
+ }
+
+ void ClearTMSI() { isValid = FALSE; }
+
+private:
+ unsigned int tmsi;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieTQI.h b/data/mnet/GP10/Host/Rlc_mac/include/ieTQI.h
new file mode 100644
index 0000000..d616791
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieTQI.h
@@ -0,0 +1,60 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieTQI.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IETQI_H__
+#define __IETQI_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+
+// *******************************************************************
+// class IeTQI
+//
+// Description:
+// Global TQI IE -- GSM04.60 12.17
+//
+// *******************************************************************
+
+class IeTQI : public IeBase {
+public:
+
+
+ IeTQI() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetTQI(unsigned short tqiIn)
+ {
+ tqi = tqiIn;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ unsigned short GetTQI()
+ {
+ return (tqi);
+ }
+
+ void ClearTQI() { isValid = FALSE; }
+
+private:
+ unsigned short tqi;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieTSC.h b/data/mnet/GP10/Host/Rlc_mac/include/ieTSC.h
new file mode 100644
index 0000000..c1d29ca
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieTSC.h
@@ -0,0 +1,67 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieTSC.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IETSC_H__
+#define __IETSC_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+
+// *******************************************************************
+// class IeTSC
+//
+// Description:
+// TSC IE -- GSM04.60 12.8
+// *******************************************************************
+
+#define MAX_TSC 7
+
+class IeTSC : public IeBase {
+public:
+
+ IeTSC() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetTSC(unsigned char val)
+ {
+ if (val <= MAX_TSC)
+ {
+ tsc = val;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+ else
+ {
+ return (RLC_MAC_PARAMETER_RANGE_ERROR);
+ }
+ }
+
+ unsigned char GetTSC()
+ {
+ return(tsc);
+ }
+
+ void ClearTSC() { isValid = FALSE; }
+
+private:
+ unsigned char tsc;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieTimeslotAllocation.h b/data/mnet/GP10/Host/Rlc_mac/include/ieTimeslotAllocation.h
new file mode 100644
index 0000000..581a9c6
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieTimeslotAllocation.h
@@ -0,0 +1,58 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieTimeslotAllocation.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IETIMESLOTALLOCATION_H__
+#define __IETIMESLOTALLOCATION_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+// *******************************************************************
+// class IeTimeslotAllocation
+//
+// Description:
+// RLC Mode IE -- GSM04.60 12.18
+// *******************************************************************
+
+
+class IeTimeslotAllocation : public IeBase {
+public:
+
+ IeTimeslotAllocation() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SetTimeslotAllocation(unsigned char alloc)
+ {
+ tsAllocation = alloc;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ unsigned char GetTimeslotAllocation()
+ {
+ return (tsAllocation);
+ }
+
+ void ClearTimeslotAllocation() { isValid = FALSE; }
+
+private:
+ unsigned char tsAllocation;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/ieeMLPPPriority.h b/data/mnet/GP10/Host/Rlc_mac/include/ieeMLPPPriority.h
new file mode 100644
index 0000000..d9e97b4
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/ieeMLPPPriority.h
@@ -0,0 +1,71 @@
+// *******************************************************************
+//
+// (c) Copyright Cisco 2000
+// All Rights Reserved
+//
+// *******************************************************************
+
+// *******************************************************************
+//
+// File : ieeMLPPPriority.h
+// Author(s) : Tim Olson
+// Create Date : 6/5/2000
+// Description :
+//
+// *******************************************************************
+
+
+#ifndef __IEEMLPPPRIORITY_H__
+#define __IEEMLPPPRIORITY_H__
+
+#include "IeBase.h"
+#include "bitstream.h"
+
+// *******************************************************************
+// class IeeMLPPPriority
+//
+// Description:
+// eMLPP Priority IE -- GSM04.60 11.2.10
+// GSM04.08 10.5.2.24
+// *******************************************************************
+
+
+class IeeMLPPPriority : public IeBase {
+public:
+
+ typedef enum
+ {
+ NO_PRIORITY_APPLIED,
+ CALL_PRIORITY_LEVEL_4,
+ CALL_PRIORITY_LEVEL_3,
+ CALL_PRIORITY_LEVEL_2,
+ CALL_PRIORITY_LEVEL_1,
+ CALL_PRIORITY_LEVEL_0,
+ CALL_PRIORITY_LEVEL_A,
+ CALL_PRIORITY_LEVEL_B
+ } EMLPP_PRIORITY;
+
+ IeeMLPPPriority() : IeBase() {}
+
+ RlcMacResult EncodeIe(BitStreamOut &dataStream);
+ void DisplayDetails(DbgOutput *outObj);
+
+ RlcMacResult SeteMLPPPriority(EMLPP_PRIORITY priority)
+ {
+ emlppPriority = priority;
+ isValid = TRUE;
+ return (RLC_MAC_SUCCESS);
+ }
+
+ EMLPP_PRIORITY GeteMLPPPriority()
+ {
+ return (emlppPriority);
+ }
+
+ void CleareMLPPPriority() { isValid = FALSE; }
+
+private:
+ EMLPP_PRIORITY emlppPriority;
+};
+
+#endif \ No newline at end of file
diff --git a/data/mnet/GP10/Host/Rlc_mac/include/msgL1.h b/data/mnet/GP10/Host/Rlc_mac/include/msgL1.h
new file mode 100644
index 0000000..1585cd2
--- /dev/null
+++ b/data/mnet/GP10/Host/Rlc_mac/include/msgL1.h
@@ -0,0 +1,505 @@
+/*******************************************************************************
+ (c) Copyright Cisco 2000
+ All Rights Reserved
+*******************************************************************************/
+
+
+/*******************************************************************************
+msgL1
+
+Structure and function interface definitions for encoding and decoding of
+messages between RLC/MAC and layer 1.
+*/
+
+#ifndef __MSGL1_H__
+#define __MSGL1_H__
+
+#include "RlcMacCommon.h"
+
+#define MAX_RLC_CONTROL_MSG 23
+#define MAX_RLC_DATA_MSG 53
+#define DSP_MSG_HDR_SIZE 4
+#define DSP_CHAN_IE_SIZE 2
+#define DSP_CODE_RATE_SIZE 1
+#define DSP_TAG_SIZE 1
+#define DSP_BURST_TYPE_SIZE 1
+
+/*----- Structure definitions for layer 1 messages -----*/
+
+/*----- Sub-structures -----*/
+typedef struct
+{
+ char function;
+ short int type;
+ char trx;
+} MsgHeader;
+
+typedef struct
+{
+ char typeTs;
+ char ccch;
+} Channel;
+
+typedef struct
+{
+ char ts;
+ char tai;
+} Tai;
+
+typedef struct
+{
+ char t1;
+ char t2;
+ char t3;
+} FrameNum;
+
+typedef struct
+{
+ char imm;
+ FrameNum frameNum;
+} Time;
+
+
+/*
+Structures for encoding messages from RLC/MAC to Layer 1
+*/
+
+typedef struct
+{
+ MsgHeader header;
+ Channel channel;
+ char tbf;
+ char burstType;
+ char data[MAX_RLC_CONTROL_MSG];
+} MsgPacchReq;
+
+typedef struct
+{
+ MsgHeader header;
+ Channel channel;
+ char tbf;
+ char burstType;
+ char codeRate;
+ char data[MAX_RLC_DATA_MSG];
+} MsgPdtchReq;
+
+typedef struct
+{
+ MsgHeader header;
+ Channel channel;
+ char data[MAX_RLC_CONTROL_MSG];
+} MsgPtcch;
+
+typedef struct
+{
+ MsgHeader header;
+ int tlli;
+ char tbfMode;
+ char groupTfi;
+ int channel;
+ int tsAllocation;
+ int usfTsMap;
+ Tai tai;
+ Time startTime;
+ /* USF granularity */
+} MsgUlTbfActivation;
+
+typedef struct
+{
+ MsgHeader header;
+ int tlli;
+} MsgUlTbfDeactivation, MsgDlTbfDeactivation;;
+
+typedef struct
+{
+ MsgHeader header;
+ int tlli;
+ char groupTfi;
+ int channel;
+ int tsAllocation;
+ int msPower;
+ int ta;
+ Time startTime;
+} MsgDlTbfActivation;
+
+typedef struct
+{
+ MsgHeader header;
+ int tlli;
+ char groupTfi;
+ int channel;
+ char tbfMode;
+ int tsAllocation;
+ int usfTsMap;
+ Tai tai;
+ Time startTime;
+} MsgUlTbfReconfig;
+
+typedef struct
+{
+ MsgHeader header;
+ int tlli;
+ char groupTfi;
+ int channel;
+ int tsAllocation;
+ int msPower;
+ Time startTime;
+} MsgDlTbfReconfig;
+
+typedef struct
+{
+ MsgHeader header;
+ Channel channel;
+ unsigned int frameNum;
+} MsgSingleBlockAssignAlertAck;
+
+typedef struct
+{
+ MsgHeader header;
+ Channel channel;
+ unsigned int frameNum;
+ char tag;
+} MsgDLAssignAlertAck;
+
+typedef struct
+{
+ MsgHeader header;
+ int tlli;
+ char groupTfi;
+ char cValue;
+ char rxqual;
+ char iLevelMask;
+ char iLevelByTs[MAX_TIMESLOTS];
+} MsgDLAckNackInfo;
+
+
+/*
+Structures for decoding messages from Layer 1 to RLC/MAC
+*/
+
+typedef struct
+{
+ MsgHeader header;
+ Channel channel;
+ char tbf;
+ char data[MAX_RLC_CONTROL_MSG];
+} MsgPacchInd;
+
+typedef struct
+{
+ MsgHeader header;
+ Channel channel;
+ char codeRate;
+ char data[MAX_RLC_DATA_MSG];
+} MsgPdtchInd;
+
+typedef struct
+{
+ MsgHeader header;
+ Channel channel;
+ FrameNum frameNum;
+ short int packetAccessRef;
+ char ta;
+ char power;
+} MsgPrach;
+
+typedef struct
+{
+ MsgHeader header;
+ Channel channel;
+ char groupTfi;
+ /* Global Power Control IE */
+ /* Power Control IE */
+ /* Global Packet Timing Adv. */
+} MsgUlPowerTiming;
+
+typedef struct
+{
+ MsgHeader header;
+ int tlli;
+} MsgUlTbfActivationAck, MsgUlTbfDeactivationAck,
+ MsgDlTbfActivationAck, MsgDlTbfDeactivationAck,
+ MsgUlTbfReconfigAck, MsgDlTbfReconfigAck,
+ MsgCommon;
+
+typedef struct
+{
+ MsgHeader header;
+ Channel channel;
+ char link; /* link identifier */
+ char numBuffs; /* number of buffers ready */
+} MsgReadyToSend;
+
+typedef struct
+{
+ MsgHeader header;
+ Channel channel;
+ char tbf;
+} MsgPacchNack;
+
+typedef struct
+{
+ MsgHeader header;
+ char ts;
+ unsigned int frameNum;
+ short ARFCN;
+} MsgSingleBlockAssignAlert;
+
+typedef struct
+{
+ MsgHeader header;
+ char ts;
+ unsigned int frameNum;
+ short ARFCN;
+ char tag;
+} MsgDLAssignAlert;
+
+typedef struct
+{
+ MsgHeader header;
+ Channel channel;
+ char tag;
+ char data[2];
+ char ta;
+} MsgPacchAbInd;
+
+typedef struct
+{
+ MsgHeader header;
+ char tbfType;
+ char groupTfi;
+ char codeRate;
+} MsgCodeRateReq;
+
+/*----- Functions to encode messages to Layer 1 -----*/
+
+/*******************************************************************************
+*/
+int msgEncodePtcch
+(
+ MsgPtcch* msgIn,
+ char* msg
+);
+
+/*******************************************************************************
+*/
+int msgEncodePacch
+(
+ MsgPacchReq* msgIn,
+ char* msg
+);
+
+/*******************************************************************************
+*/
+int msgEncodePdtch
+(
+ MsgPdtchReq* msgIn,
+ char* msg,
+ int dataBlkSize
+);
+
+/*******************************************************************************
+*/
+int msgEncodeUlTbfActivation
+(
+ MsgUlTbfActivation* msgIn,
+ char* msg
+);
+
+/*******************************************************************************
+*/
+int msgEncodeUlTbfDeactivation
+(
+ MsgUlTbfDeactivation* msgIn,
+ char* msg
+);
+
+/*******************************************************************************
+*/
+int msgEncodeDlTbfActivation
+(
+ MsgDlTbfActivation* msgIn,
+ char* msg
+);
+
+/*******************************************************************************
+*/
+int msgEncodeDlTbfDeactivation
+(
+ MsgDlTbfDeactivation* msgIn,
+ char* msg
+);
+
+/*******************************************************************************
+*/
+int msgEncodeUlTbfReconfig
+(
+ MsgUlTbfReconfig* msgIn,
+ char* msg
+);
+
+/*******************************************************************************
+*/
+int msgEncodeDlTbfReconfig
+(
+ MsgDlTbfReconfig* msgIn,
+ char* msg
+);
+
+/*******************************************************************************
+*/
+int msgEncodeSingleBlockAssignAlertAck
+(
+ MsgSingleBlockAssignAlertAck* msgIn,
+ char* msg
+);
+
+/*******************************************************************************
+*/
+int msgEncodeDLAssignAlertAck
+(
+ MsgDLAssignAlertAck* msgIn,
+ char* msg
+);
+
+/*******************************************************************************
+*/
+int msgEncodeDLAckNackInfo
+(
+ MsgDLAckNackInfo* msgIn,
+ char* msg
+);
+
+
+/*----- Functions to decode messages from Layer 1 -----*/
+
+/*******************************************************************************
+*/
+void msgDecodePrach
+(
+ char* msgIn,
+ MsgPrach* msgOut
+);
+
+/*******************************************************************************
+*/
+void msgDecodePacch
+(
+ char* msgIn,
+ MsgPacchInd* msgOut
+);
+
+/*******************************************************************************
+*/
+void msgDecodePdtch
+(
+ char* msgIn,
+ MsgPdtchInd* msgOut,
+ int msgSize /* size of the messege received from layer 1 */
+);
+
+/*******************************************************************************
+*/
+void msgDecodeUlPowerTiming
+(
+ char* msgIn,
+ MsgUlPowerTiming* msgOut
+);
+
+/*******************************************************************************
+*/
+void msgDecodeUlTbfActivationAck
+(
+ char* msgIn,
+ MsgUlTbfActivationAck* msgOut
+);
+
+/*******************************************************************************
+*/
+void msgDecodeUlTbfDeactivationAck
+(
+ char* msgIn,
+ MsgUlTbfDeactivationAck* msgOut
+);
+
+/*******************************************************************************
+*/
+void msgDecodeDlTbfActivationAck
+(
+ char* msgIn,
+ MsgDlTbfActivationAck* msgOut
+);
+
+/*******************************************************************************
+*/
+void msgDecodeDlTbfDeactivationAck
+(
+ char* msgIn,
+ MsgDlTbfDeactivationAck* msgOut
+);
+
+/*******************************************************************************
+*/
+void msgDecodeUlTbfReconfigAck
+(
+ char* msgIn,
+ MsgUlTbfReconfigAck* msgOut
+);
+
+/*******************************************************************************
+*/
+void msgDecodeDlTbfReconfigAck
+(
+ char* msgIn,
+ MsgDlTbfReconfigAck* msgOut
+);
+
+/*******************************************************************************
+*/
+void msgDecodeReadyToSend
+(
+ char* msgIn,
+ MsgReadyToSend* msgOut
+);
+
+/*******************************************************************************
+*/
+void msgDecodePacchNack
+(
+ char* msgIn,
+ MsgPacchNack* msgOut
+);
+
+/*******************************************************************************
+*/
+void msgDecodeSingleBlockAssignAlert
+(
+ char* msgIn,
+ MsgSingleBlockAssignAlert* msgOut
+);
+
+/*******************************************************************************
+*/
+void msgDecodeDLAssignAlert
+(
+ char* msgIn,
+ MsgDLAssignAlert* msgOut
+);
+
+/*******************************************************************************
+*/
+void msgDecodePacchAbInd
+(
+ char* msgIn,
+ MsgPacchAbInd* msgOut
+);
+
+/*******************************************************************************
+*/
+void msgDecodeCodeRateReq
+(
+ char* msgIn,
+ MsgCodeRateReq* msgOut
+);
+
+#endif