diff options
Diffstat (limited to 'src/lib/decoder/openbtsstuff/GSMTDMA.cpp')
-rw-r--r-- | src/lib/decoder/openbtsstuff/GSMTDMA.cpp | 337 |
1 files changed, 0 insertions, 337 deletions
diff --git a/src/lib/decoder/openbtsstuff/GSMTDMA.cpp b/src/lib/decoder/openbtsstuff/GSMTDMA.cpp deleted file mode 100644 index 27ebe0e..0000000 --- a/src/lib/decoder/openbtsstuff/GSMTDMA.cpp +++ /dev/null @@ -1,337 +0,0 @@ -/* -* Copyright 2008 Free Software Foundation, Inc. -* -* This software is distributed under the terms of the GNU Public License. -* See the COPYING file in the main directory for details. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - -*/ - - -#include "GSMTDMA.h" - - -using namespace GSM; - - - - -TDMAMapping::TDMAMapping(TypeAndOffset - wTypeAndOffset, bool wDownlink, bool wUplink, char wAllowedSlots, bool wC0Only, - unsigned wRepeatLength, unsigned wNumFrames, const unsigned *wFrameMapping) - :mTypeAndOffset(wTypeAndOffset), - mDownlink(wDownlink),mUplink(wUplink),mAllowedSlots(wAllowedSlots),mC0Only(wC0Only), - mRepeatLength(wRepeatLength),mNumFrames(wNumFrames),mFrameMapping(wFrameMapping) -{ - // Sanity check. - assert(mRepeatLength<=mMaxRepeatLength); - - // Default, -1, means a non-occupied position. - for (unsigned i=0; i<mMaxRepeatLength; i++) mReverseMapping[i]=-1; - - // Fill in the reverse map, precomputed for speed. - for (unsigned i=0; i<mNumFrames; i++) { - unsigned mapping = mFrameMapping[i]; - assert(mapping<mRepeatLength); - mReverseMapping[mapping] = i; - } -} - - - - - -/** A macro to save some typing when we set up TDMA maps. */ -#define MAKE_TDMA_MAPPING(NAME,TYPEANDOFFSET,DOWNLINK,UPLINK,ALLOWEDSLOTS,C0ONLY,REPEAT) \ - const TDMAMapping GSM::g##NAME##Mapping(TYPEANDOFFSET,DOWNLINK,UPLINK,ALLOWEDSLOTS,C0ONLY, \ - REPEAT,sizeof(NAME##Frames)/sizeof(unsigned),NAME##Frames) - -const unsigned LoopbackTestFullFrames[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47}; -MAKE_TDMA_MAPPING(LoopbackTestFull,TDMA_MISC,true,true,0xff,false,51); - -const unsigned FCCHFrames[] = {0,10,20,30,40}; -MAKE_TDMA_MAPPING(FCCH,TDMA_BEACON,true,false,0x01,true,51); - -const unsigned SCHFrames[] = {1,11,21,31,41}; -MAKE_TDMA_MAPPING(SCH,TDMA_BEACON,true,false,0x01,true,51); - -const unsigned BCCHFrames[] = {2,3,4,5}; -MAKE_TDMA_MAPPING(BCCH,TDMA_BEACON,true,false,0x55,true,51); - -// Note that we removed frames for the SDCCH components of the Combination-V C0T0. -const unsigned RACHC5Frames[] = {4,5,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,45,46}; -MAKE_TDMA_MAPPING(RACHC5,TDMA_BEACON,false,true,0x55,true,51); - -// CCCH 0-2 are used in C-IV and C-V. The others are used in C-IV only. - -const unsigned CCCH_0Frames[] = {6,7,8,9}; -MAKE_TDMA_MAPPING(CCCH_0,TDMA_BEACON,true,false,0x55,true,51); - -const unsigned CCCH_1Frames[] = {12,13,14,15}; -MAKE_TDMA_MAPPING(CCCH_1,TDMA_BEACON,true,false,0x55,true,51); - -const unsigned CCCH_2Frames[] = {16,17,18,19}; -MAKE_TDMA_MAPPING(CCCH_2,TDMA_BEACON,true,false,0x55,true,51); - -const unsigned CCCH_3Frames[] = {22,23,24,25}; -MAKE_TDMA_MAPPING(CCCH_3,TDMA_BEACON,true,false,0x55,true,51); - -// TODO -- Other CCCH subchannels 4-8 for support of C-IV. - -const unsigned SDCCH_4_0DFrames[] = {22,23,24,25}; -MAKE_TDMA_MAPPING(SDCCH_4_0D,SDCCH_4_0,true,false,0x01,true,51); - -const unsigned SDCCH_4_0UFrames[] = {37,38,39,40}; -MAKE_TDMA_MAPPING(SDCCH_4_0U,SDCCH_4_0,false,true,0x01,true,51); - -const unsigned SDCCH_4_1DFrames[] = {26,27,28,29}; -MAKE_TDMA_MAPPING(SDCCH_4_1D,SDCCH_4_1,true,false,0x01,true,51); - -const unsigned SDCCH_4_1UFrames[] = {41,42,43,44}; -MAKE_TDMA_MAPPING(SDCCH_4_1U,SDCCH_4_1,false,true,0x01,true,51); - -const unsigned SDCCH_4_2DFrames[] = {32,33,34,35}; -MAKE_TDMA_MAPPING(SDCCH_4_2D,SDCCH_4_2,true,false,0x01,true,51); - -const unsigned SDCCH_4_2UFrames[] = {47,48,49,50}; -MAKE_TDMA_MAPPING(SDCCH_4_2U,SDCCH_4_2,false,true,0x01,true,51); - -const unsigned SDCCH_4_3DFrames[] = {36,37,38,39}; -MAKE_TDMA_MAPPING(SDCCH_4_3D,SDCCH_4_3,true,false,0x01,true,51); - -const unsigned SDCCH_4_3UFrames[] = {0,1,2,3}; -MAKE_TDMA_MAPPING(SDCCH_4_3U,SDCCH_4_3,false,true,0x01,true,51); - - -const unsigned SACCH_C4_0DFrames[] = {42,43,44,45}; -MAKE_TDMA_MAPPING(SACCH_C4_0D,SDCCH_4_0,true,false,0x01,true,102); - -const unsigned SACCH_C4_0UFrames[] = {57,58,59,60}; -MAKE_TDMA_MAPPING(SACCH_C4_0U,SDCCH_4_0,false,true,0x01,true,102); - -const unsigned SACCH_C4_1DFrames[] = {46,47,48,49}; -MAKE_TDMA_MAPPING(SACCH_C4_1D,SDCCH_4_1,true,false,0x01,true,102); - -const unsigned SACCH_C4_1UFrames[] = {61,62,63,64}; -MAKE_TDMA_MAPPING(SACCH_C4_1U,SDCCH_4_1,false,true,0x01,true,102); - -const unsigned SACCH_C4_2DFrames[] = {93,94,95,96}; -MAKE_TDMA_MAPPING(SACCH_C4_2D,SDCCH_4_2,true,false,0x01,true,102); - -const unsigned SACCH_C4_2UFrames[] = {6,7,8,9}; -MAKE_TDMA_MAPPING(SACCH_C4_2U,SDCCH_4_2,false,true,0x01,true,102); - -const unsigned SACCH_C4_3DFrames[] = {97,98,99,100}; -MAKE_TDMA_MAPPING(SACCH_C4_3D,SDCCH_4_3,true,false,0x01,true,102); - -const unsigned SACCH_C4_3UFrames[] = {10,11,12,13}; -MAKE_TDMA_MAPPING(SACCH_C4_3U,SDCCH_4_3,false,true,0x01,true,102); - - -const unsigned SDCCH_8_0DFrames[] = {0,1,2,3}; -MAKE_TDMA_MAPPING(SDCCH_8_0D,SDCCH_8_0,true,false,0xFF,true,51); - -const unsigned SDCCH_8_0UFrames[] = {15,16,17,18}; -MAKE_TDMA_MAPPING(SDCCH_8_0U,SDCCH_8_0,false,true,0xFF,true,51); - -const unsigned SDCCH_8_1DFrames[] = {4,5,6,7}; -MAKE_TDMA_MAPPING(SDCCH_8_1D,SDCCH_8_1,true,false,0xFF,true,51); - -const unsigned SDCCH_8_1UFrames[] = {19,20,21,22}; -MAKE_TDMA_MAPPING(SDCCH_8_1U,SDCCH_8_1,false,true,0xFF,true,51); - -const unsigned SDCCH_8_2DFrames[] = {8,9,10,11}; -MAKE_TDMA_MAPPING(SDCCH_8_2D,SDCCH_8_2,true,false,0xFF,true,51); - -const unsigned SDCCH_8_2UFrames[] = {23,24,25,26}; -MAKE_TDMA_MAPPING(SDCCH_8_2U,SDCCH_8_2,false,true,0xFF,true,51); - -const unsigned SDCCH_8_3DFrames[] = {12,13,14,15}; -MAKE_TDMA_MAPPING(SDCCH_8_3D,SDCCH_8_3,true,false,0xFF,true,51); - -const unsigned SDCCH_8_3UFrames[] = {27,28,29,30}; -MAKE_TDMA_MAPPING(SDCCH_8_3U,SDCCH_8_3,false,true,0xFF,true,51); - -const unsigned SDCCH_8_4DFrames[] = {16,17,18,19}; -MAKE_TDMA_MAPPING(SDCCH_8_4D,SDCCH_8_4,true,false,0xFF,true,51); - -const unsigned SDCCH_8_4UFrames[] = {31,32,33,34}; -MAKE_TDMA_MAPPING(SDCCH_8_4U,SDCCH_8_4,false,true,0xFF,true,51); - -const unsigned SDCCH_8_5DFrames[] = {20,21,22,23}; -MAKE_TDMA_MAPPING(SDCCH_8_5D,SDCCH_8_5,true,false,0xFF,true,51); - -const unsigned SDCCH_8_5UFrames[] = {35,36,37,38}; -MAKE_TDMA_MAPPING(SDCCH_8_5U,SDCCH_8_5,false,true,0xFF,true,51); - -const unsigned SDCCH_8_6DFrames[] = {24,25,26,27}; -MAKE_TDMA_MAPPING(SDCCH_8_6D,SDCCH_8_6,true,false,0xFF,true,51); - -const unsigned SDCCH_8_6UFrames[] = {39,40,41,42}; -MAKE_TDMA_MAPPING(SDCCH_8_6U,SDCCH_8_6,false,true,0xFF,true,51); - -const unsigned SDCCH_8_7DFrames[] = {28,29,30,31}; -MAKE_TDMA_MAPPING(SDCCH_8_7D,SDCCH_8_7,true,false,0xFF,true,51); - -const unsigned SDCCH_8_7UFrames[] = {43,44,45,46}; -MAKE_TDMA_MAPPING(SDCCH_8_7U,SDCCH_8_7,false,true,0xFF,true,51); - - -const unsigned SACCH_C8_0DFrames[] = {32,33,34,35}; -MAKE_TDMA_MAPPING(SACCH_C8_0D,SDCCH_8_0,true,false,0xFF,true,102); - -const unsigned SACCH_C8_0UFrames[] = {47,48,49,50}; -MAKE_TDMA_MAPPING(SACCH_C8_0U,SDCCH_8_0,false,true,0xFF,true,102); - -const unsigned SACCH_C8_1DFrames[] = {36,37,38,39}; -MAKE_TDMA_MAPPING(SACCH_C8_1D,SDCCH_8_1,true,false,0xFF,true,102); - -const unsigned SACCH_C8_1UFrames[] = {51,52,53,54}; -MAKE_TDMA_MAPPING(SACCH_C8_1U,SDCCH_8_1,false,true,0xFF,true,102); - -const unsigned SACCH_C8_2DFrames[] = {40,41,42,43}; -MAKE_TDMA_MAPPING(SACCH_C8_2D,SDCCH_8_2,true,false,0xFF,true,102); - -const unsigned SACCH_C8_2UFrames[] = {55,56,57,58}; -MAKE_TDMA_MAPPING(SACCH_C8_2U,SDCCH_8_2,false,true,0xFF,true,102); - -const unsigned SACCH_C8_3DFrames[] = {44,45,46,47}; -MAKE_TDMA_MAPPING(SACCH_C8_3D,SDCCH_8_3,true,false,0xFF,true,102); - -const unsigned SACCH_C8_3UFrames[] = {59,60,61,62}; -MAKE_TDMA_MAPPING(SACCH_C8_3U,SDCCH_8_3,false,true,0xFF,true,102); - -const unsigned SACCH_C8_4DFrames[] = {82,84,85,86}; -MAKE_TDMA_MAPPING(SACCH_C8_4D,SDCCH_8_4,true,false,0xFF,true,102); - -const unsigned SACCH_C8_4UFrames[] = {98,99,100,101}; -MAKE_TDMA_MAPPING(SACCH_C8_4U,SDCCH_8_4,false,true,0xFF,true,102); - -const unsigned SACCH_C8_5DFrames[] = {87,88,89,90}; -MAKE_TDMA_MAPPING(SACCH_C8_5D,SDCCH_8_5,true,false,0xFF,true,102); - -const unsigned SACCH_C8_5UFrames[] = {0,1,2,3}; -MAKE_TDMA_MAPPING(SACCH_C8_5U,SDCCH_8_5,false,true,0xFF,true,102); - -const unsigned SACCH_C8_6DFrames[] = {91,92,93,94}; -MAKE_TDMA_MAPPING(SACCH_C8_6D,SDCCH_8_6,true,false,0xFF,true,102); - -const unsigned SACCH_C8_6UFrames[] = {4,5,6,7}; -MAKE_TDMA_MAPPING(SACCH_C8_6U,SDCCH_8_6,false,true,0xFF,true,102); - -const unsigned SACCH_C8_7DFrames[] = {95,96,97,98}; -MAKE_TDMA_MAPPING(SACCH_C8_7D,SDCCH_8_7,true,false,0xFF,true,102); - -const unsigned SACCH_C8_7UFrames[] = {8,9,10,11}; -MAKE_TDMA_MAPPING(SACCH_C8_7U,SDCCH_8_7,false,true,0xFF,true,102); - - - -const unsigned SACCH_TF_T0Frames[] = {12,38,64,90}; -MAKE_TDMA_MAPPING(SACCH_TF_T0,TCHF_0,true,true,0x01,true,104); - -const unsigned SACCH_TF_T1Frames[] = {25,51,77,103}; -MAKE_TDMA_MAPPING(SACCH_TF_T1,TCHF_0,true,true,0x02,true,104); - -const unsigned SACCH_TF_T2Frames[] = {38,64,90,12}; -MAKE_TDMA_MAPPING(SACCH_TF_T2,TCHF_0,true,true,0x04,true,104); - -const unsigned SACCH_TF_T3Frames[] = {51,77,103,25}; -MAKE_TDMA_MAPPING(SACCH_TF_T3,TCHF_0,true,true,0x08,true,104); - -const unsigned SACCH_TF_T4Frames[] = {64,90,12,38}; -MAKE_TDMA_MAPPING(SACCH_TF_T4,TCHF_0,true,true,0x10,true,104); - -const unsigned SACCH_TF_T5Frames[] = {77,103,25,51}; -MAKE_TDMA_MAPPING(SACCH_TF_T5,TCHF_0,true,true,0x20,true,104); - -const unsigned SACCH_TF_T6Frames[] = {90,12,38,64}; -MAKE_TDMA_MAPPING(SACCH_TF_T6,TCHF_0,true,true,0x40,true,104); - -const unsigned SACCH_TF_T7Frames[] = {103,25,51,77}; -MAKE_TDMA_MAPPING(SACCH_TF_T7,TCHF_0,true,true,0x80,true,104); - -const unsigned FACCH_TCHFFrames[] = {0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,18,19,20,21,22,23,24}; -MAKE_TDMA_MAPPING(FACCH_TCHF,TCHF_0,true,true,0xff,true,26); - - - - - - - -const MappingPair GSM::gSDCCH_4_0Pair(gSDCCH_4_0DMapping,gSDCCH_4_0UMapping); -const MappingPair GSM::gSDCCH_4_1Pair(gSDCCH_4_1DMapping,gSDCCH_4_1UMapping); -const MappingPair GSM::gSDCCH_4_2Pair(gSDCCH_4_2DMapping,gSDCCH_4_2UMapping); -const MappingPair GSM::gSDCCH_4_3Pair(gSDCCH_4_3DMapping,gSDCCH_4_3UMapping); -const MappingPair GSM::gSDCCH_8_0Pair(gSDCCH_8_0DMapping,gSDCCH_8_0UMapping); -const MappingPair GSM::gSDCCH_8_1Pair(gSDCCH_8_1DMapping,gSDCCH_8_1UMapping); -const MappingPair GSM::gSDCCH_8_2Pair(gSDCCH_8_2DMapping,gSDCCH_8_2UMapping); -const MappingPair GSM::gSDCCH_8_3Pair(gSDCCH_8_3DMapping,gSDCCH_8_3UMapping); -const MappingPair GSM::gSDCCH_8_4Pair(gSDCCH_8_4DMapping,gSDCCH_8_4UMapping); -const MappingPair GSM::gSDCCH_8_5Pair(gSDCCH_8_5DMapping,gSDCCH_8_5UMapping); -const MappingPair GSM::gSDCCH_8_6Pair(gSDCCH_8_6DMapping,gSDCCH_8_6UMapping); -const MappingPair GSM::gSDCCH_8_7Pair(gSDCCH_8_7DMapping,gSDCCH_8_7UMapping); - -const MappingPair GSM::gSACCH_C4_0Pair(gSACCH_C4_0DMapping,gSACCH_C4_0UMapping); -const MappingPair GSM::gSACCH_C4_1Pair(gSACCH_C4_1DMapping,gSACCH_C4_1UMapping); -const MappingPair GSM::gSACCH_C4_2Pair(gSACCH_C4_2DMapping,gSACCH_C4_2UMapping); -const MappingPair GSM::gSACCH_C4_3Pair(gSACCH_C4_3DMapping,gSACCH_C4_3UMapping); -const MappingPair GSM::gSACCH_C8_0Pair(gSACCH_C8_0DMapping,gSACCH_C8_0UMapping); -const MappingPair GSM::gSACCH_C8_1Pair(gSACCH_C8_1DMapping,gSACCH_C8_1UMapping); -const MappingPair GSM::gSACCH_C8_2Pair(gSACCH_C8_2DMapping,gSACCH_C8_2UMapping); -const MappingPair GSM::gSACCH_C8_3Pair(gSACCH_C8_3DMapping,gSACCH_C8_3UMapping); -const MappingPair GSM::gSACCH_C8_4Pair(gSACCH_C8_4DMapping,gSACCH_C8_4UMapping); -const MappingPair GSM::gSACCH_C8_5Pair(gSACCH_C8_5DMapping,gSACCH_C8_5UMapping); -const MappingPair GSM::gSACCH_C8_6Pair(gSACCH_C8_6DMapping,gSACCH_C8_6UMapping); -const MappingPair GSM::gSACCH_C8_7Pair(gSACCH_C8_7DMapping,gSACCH_C8_7UMapping); - -const MappingPair GSM::gFACCH_TCHFPair(gFACCH_TCHFMapping,gFACCH_TCHFMapping); - -const MappingPair GSM::gSACCH_FT_T0Pair(gSACCH_TF_T0Mapping, gSACCH_TF_T0Mapping); -const MappingPair GSM::gSACCH_FT_T1Pair(gSACCH_TF_T1Mapping, gSACCH_TF_T1Mapping); -const MappingPair GSM::gSACCH_FT_T2Pair(gSACCH_TF_T2Mapping, gSACCH_TF_T2Mapping); -const MappingPair GSM::gSACCH_FT_T3Pair(gSACCH_TF_T3Mapping, gSACCH_TF_T3Mapping); -const MappingPair GSM::gSACCH_FT_T4Pair(gSACCH_TF_T4Mapping, gSACCH_TF_T4Mapping); -const MappingPair GSM::gSACCH_FT_T5Pair(gSACCH_TF_T5Mapping, gSACCH_TF_T5Mapping); -const MappingPair GSM::gSACCH_FT_T6Pair(gSACCH_TF_T6Mapping, gSACCH_TF_T6Mapping); -const MappingPair GSM::gSACCH_FT_T7Pair(gSACCH_TF_T7Mapping, gSACCH_TF_T7Mapping); - - - -const CompleteMapping GSM::gSDCCH_4_0(gSDCCH_4_0Pair,gSACCH_C4_0Pair); -const CompleteMapping GSM::gSDCCH_4_1(gSDCCH_4_1Pair,gSACCH_C4_1Pair); -const CompleteMapping GSM::gSDCCH_4_2(gSDCCH_4_2Pair,gSACCH_C4_2Pair); -const CompleteMapping GSM::gSDCCH_4_3(gSDCCH_4_3Pair,gSACCH_C4_3Pair); -const CompleteMapping GSM::gSDCCH_8_0(gSDCCH_8_0Pair,gSACCH_C8_0Pair); -const CompleteMapping GSM::gSDCCH_8_1(gSDCCH_8_1Pair,gSACCH_C8_1Pair); -const CompleteMapping GSM::gSDCCH_8_2(gSDCCH_8_2Pair,gSACCH_C8_2Pair); -const CompleteMapping GSM::gSDCCH_8_3(gSDCCH_8_3Pair,gSACCH_C8_3Pair); -const CompleteMapping GSM::gSDCCH_8_4(gSDCCH_8_4Pair,gSACCH_C8_4Pair); -const CompleteMapping GSM::gSDCCH_8_5(gSDCCH_8_5Pair,gSACCH_C8_5Pair); -const CompleteMapping GSM::gSDCCH_8_6(gSDCCH_8_6Pair,gSACCH_C8_6Pair); -const CompleteMapping GSM::gSDCCH_8_7(gSDCCH_8_7Pair,gSACCH_C8_7Pair); - -const CompleteMapping GSM::gTCHF_T0(gFACCH_TCHFPair,gSACCH_FT_T0Pair); -const CompleteMapping GSM::gTCHF_T1(gFACCH_TCHFPair,gSACCH_FT_T1Pair); -const CompleteMapping GSM::gTCHF_T2(gFACCH_TCHFPair,gSACCH_FT_T2Pair); -const CompleteMapping GSM::gTCHF_T3(gFACCH_TCHFPair,gSACCH_FT_T3Pair); -const CompleteMapping GSM::gTCHF_T4(gFACCH_TCHFPair,gSACCH_FT_T4Pair); -const CompleteMapping GSM::gTCHF_T5(gFACCH_TCHFPair,gSACCH_FT_T5Pair); -const CompleteMapping GSM::gTCHF_T6(gFACCH_TCHFPair,gSACCH_FT_T6Pair); -const CompleteMapping GSM::gTCHF_T7(gFACCH_TCHFPair,gSACCH_FT_T7Pair); - - - |