summaryrefslogtreecommitdiff
path: root/gsm-receiver/src/lib/decoder/openbtsstuff/GSML1FEC.h
diff options
context:
space:
mode:
Diffstat (limited to 'gsm-receiver/src/lib/decoder/openbtsstuff/GSML1FEC.h')
-rw-r--r--gsm-receiver/src/lib/decoder/openbtsstuff/GSML1FEC.h146
1 files changed, 146 insertions, 0 deletions
diff --git a/gsm-receiver/src/lib/decoder/openbtsstuff/GSML1FEC.h b/gsm-receiver/src/lib/decoder/openbtsstuff/GSML1FEC.h
new file mode 100644
index 0000000..c367681
--- /dev/null
+++ b/gsm-receiver/src/lib/decoder/openbtsstuff/GSML1FEC.h
@@ -0,0 +1,146 @@
+/*
+* Copyright 2008 Free Software Foundation, Inc.
+*
+*
+* 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/>.
+*
+* This software is distributed under the terms of the GNU Public License.
+* See the COPYING file in the main directory for details.
+*/
+
+
+
+#ifndef GSML1FEC_H
+#define GSML1FEC_H
+
+//#include "Threads.h"
+#include "Assert.h"
+#include "BitVector.h"
+
+#include "GSMCommon.h"
+//#include "GSMTransfer.h"
+#include "GSMTDMA.h"
+#include "VocoderFrame.h"
+#include "RxBurst.h"
+//#include "GSM610Tables.h"
+#include <stdio.h>
+
+
+
+namespace GSM
+{
+
+
+//class SAPMux;
+ class L1FEC;
+ class L1Decoder;
+
+
+
+ /*
+ Naming convention for bit vectors follows GSM 05.03 Section 2.2.
+ d[k] data
+ u[k] data bits after first encoding step
+ c[k] data bits after second encoding step
+ i[B][k] interleaved data bits
+ e[B][k] bits in a burst
+ */
+
+
+
+
+ /** L1 decoder used for full rate TCH and FACCH -- mostly from GSM 05.03 3.1 and 4.2 */
+//: public XCCHL1Decoder
+ class TCHFACCHL1Decoder
+ {
+
+ protected:
+ SoftVector mI[8]; ///< deinterleaving history, 8 blocks instead of 4
+ SoftVector mC; ///< c[], as per GSM 05.03 2.2
+ BitVector mTCHU; ///< u[] (uncoded) in the spec
+ BitVector mTCHD; ///< d[] (data) in the spec
+ SoftVector mClass1_c; ///< the class 1 part of c[]
+ BitVector mClass1A_d; ///< the class 1A part of d[]
+ SoftVector mClass2_c; ///< the class 2 part of c[]
+ ViterbiR2O4 mVCoder;
+
+ VocoderFrame mVFrame; ///< unpacking buffer for vocoder frame
+ unsigned char mPrevGoodFrame[33]; ///< previous good frame.
+
+ Parity mTCHParity;
+ const TDMAMapping& mMapping; ///< multiplexing description
+
+// InterthreadQueue<unsigned char> mSpeechQ; ///< output queue for speech frames
+
+ static const unsigned mMaxQSize = 3;
+
+
+ public:
+
+ TCHFACCHL1Decoder( const TDMAMapping& wMapping );
+
+ ChannelType channelType() const {
+ return FACCHType;
+ }
+
+
+ /** TCH/FACCH has a special-case writeLowSide. */
+ void writeLowSide(const RxBurst& inBurst);
+
+ /**
+ Unlike other DCCHs, TCH/FACCH process burst calls
+ deinterleave, decode, handleGoodFrame.
+ */
+ bool processBurst( const RxBurst& );
+
+ /** Deinterleave i[] to c[]. */
+ void deinterleave(int blockOffset );
+
+ void replaceFACCH( int blockOffset );
+
+ /**
+ Decode a traffic frame from TCHI[] and enqueue it.
+ Return true if there's a good frame.
+ */
+ bool decodeTCH(bool stolen);
+
+ unsigned char * get_voice_frame(){
+ return mPrevGoodFrame;
+ }
+ /**
+ Receive a traffic frame.
+ Non-blocking. Returns NULL if queue is dry.
+ Caller is responsible for deleting the returned array.
+ */
+// unsigned char *recvTCH() { return mSpeechQ.read(0); }
+
+ /** Return count of internally-queued traffic frames. */
+// unsigned queueSize() const { return mSpeechQ.size(); }
+
+ };
+
+
+
+
+
+
+}; // namespace GSM
+
+
+
+
+
+#endif
+
+// vim: ts=4 sw=4
personal git repositories of Harald Welte. Your mileage may vary