is my patch for capturing TCH frame correctly?

bob avwiseav at gmail.com
Thu Jul 19 08:58:28 UTC 2012


Hi, everyone interesting the topic, this is my latest patch for TCH decode,
fix few bug;
but it not work well for TCH AMR decode, welcome everyone interesting it to
review it and
modify it!

the most problem now I think is the capture of the Correct TCH frame, at the
last ,there is
some output for analysis

--- app_ccch_scan.c	2012-03-14 16:08:11.305112000 +0800
+++ new_app_ccch_scan.c	2012-07-19 15:32:31.945314000 +0800
@@ -50,20 +50,80 @@
 #include <l1ctl_proto.h>
 
 #include <osmocom/bb/misc/xcch.h>
+#include <codec.h>
+#include "conv_tch_afs.h"
+//#include "../openbtsstuff/GSML1FEC.h"
+//extern bool TCHFACCHL1Decoder::processBurst( const RxBurst& inBurst);
+//const struct osmo_conv_code conv_tch_afs_12_2;
 
+extern FILE *log_tmsi;
 extern struct gsmtap_inst *gsmtap_inst;
+FILE *d_speech_file;
+const unsigned char amr_nb_magic[6] = { 0x23, 0x21, 0x41, 0x4d, 0x52, 0x0a
};
+
+enum gsm690_amr_mode {
+	gsm690_4_75 = 0x01,
+	gsm690_5_15 = 0x02,
+	gsm690_5_90 = 0x04,
+	gsm690_6_70 = 0x08,
+	gsm690_7_40 = 0x10,
+	gsm690_7_95 = 0x20,
+	gsm690_10_2 = 0x40,
+	gsm690_12_2 = 0x80,
+};
+
+enum gsm690_amr_speech {
+	gsm690_4_75_len = 95,
+	gsm690_5_15_len = 103,
+	gsm690_5_90_len = 118,
+	gsm690_6_70_len = 134,
+	gsm690_7_40_len = 148,
+	gsm690_7_95_len = 159,
+	gsm690_10_2_len = 204,
+	gsm690_12_2_len = 244,
+};
+
+enum gsm690_amr_mode_flag {
+	CODEC_MODE_1 = 0b00000000,
+	CODEC_MODE_2 = 0b10111010,
+	CODEC_MODE_3 = 0b01011101,
+	CODEC_MODE_4 = 0b11100111,
+};
+
+/*gsm4.08 10.5.2.6
+enum channel_speed_mode{
+	Signal = 0,
+	Speed_v1 = 0x01,
+	Speed_v2 = 0x21,	
+	Speed_v3 = 0x41,
+};*/
 
 enum dch_state_t {
 	DCH_NONE,
+	CCCH_ACTIVE,
 	DCH_WAIT_EST,
 	DCH_ACTIVE,
+	DCH_TCH,
 	DCH_WAIT_REL,
 };
 
+static struct amr{
+	uint8_t amr_acs;
+	uint8_t start_mode;
+};
+
+static struct amr_current{
+	uint8_t mode;
+	uint8_t i;
+};
+
 static struct {
 	int			has_si1;
+	int			has_si3;
 	int			ccch_mode;
-
+	int			neci; 
+	int			sys_count;
+		
 	enum dch_state_t	dch_state;
 	uint8_t			dch_nr;
 	int			dch_badcnt;
@@ -73,15 +133,76 @@
 
 	sbit_t			bursts_dl[116 * 4];
 	sbit_t			bursts_ul[116 * 4];
+	sbit_t			bursts_ccch[4][116*4];
+	sbit_t			mI[8][114];
 
 	struct gsm_sysinfo_freq	cell_arfcns[1024];
 
 	uint8_t			kc[8];
+	uint8_t			speed_mode;
+	struct amr 		amr_arg;
+	struct amr_current	amr_cur;
+
+	struct  gsm48_ass_cmd  ia;
 } app_state;
 
+static char *
+gen_filename(struct osmocom_ms *ms, struct l1ctl_burst_ind *bi)
+{
+	static char buffer[256];
+	time_t d;
+	struct tm lt;
+
+	time(&d);
+	localtime_r(&d, &lt);
+
+	snprintf(buffer, 256, "voice_%04d%02d%02d_%02d%02d_%d_%d_%02x.amr",
+		lt.tm_year + 1900, lt.tm_mon, lt.tm_mday,
+		lt.tm_hour, lt.tm_min,
+		ms->test_arfcn,
+		ntohl(bi->frame_nr),
+		bi->chan_nr
+	);
+
+	return buffer;
+}
 
 static void dump_bcch(struct osmocom_ms *ms, uint8_t tc, const uint8_t
*data)
 {
+	if(app_state.dch_state == DCH_TCH)
+	{
+		//BCCH- SDCCH - BCCH -TCH
+		struct  gsm48_ass_cmd *ia;
+		uint8_t ch_type, ch_subch, ch_ts;
+
+		ia = &app_state.ia;
+
+		rsl_dec_chan_nr(ia->chan_desc.chan_nr, &ch_type, &ch_subch, &ch_ts);			
+		
+		if (!ia->chan_desc.h0.h) {
+			/* Non-hopping */
+			uint16_t arfcn;
+		
+			arfcn = ia->chan_desc.h0.arfcn_low | (ia->chan_desc.h0.arfcn_high << 8);
+
+			LOGP(DRR, LOGL_NOTICE, "ASS CMD(chan_nr=0x%02x, "
+				"ARFCN=%u, TS=%u, SS=%u, TSC=%u) ",
+				ia->chan_desc.chan_nr, arfcn, ch_ts, ch_subch,
+				ia->chan_desc.h0.tsc);
+				
+			/* request L1 to go to dedicated mode on assigned channel */
+			l1ctl_tx_dm_est_req_h0(ms,
+				arfcn, ia->chan_desc.chan_nr, ia->chan_desc.h0.tsc,
+				GSM48_CMODE_SPEECH_EFR, 0);
+		}
+		else
+		{
+			printf("unsuport hopping!\n");
+		}
+		
+		return;
+	}
+
 	struct gsm48_system_information_type_header *si_hdr;
 	si_hdr = (struct gsm48_system_information_type_header *) data;
 
@@ -115,18 +236,40 @@
 #ifdef BCCH_TC_CHECK
 		if (tc != 2 && tc != 6)
 			LOGP(DRR, LOGL_ERROR, "SI3 on the wrong TC: %d\n", tc);
-#endif
-		if (app_state.ccch_mode == CCCH_MODE_NONE) {
-			struct gsm48_system_information_type_3 *si3 =
-				(struct gsm48_system_information_type_3 *)data;
-
-			if (si3->control_channel_desc.ccch_conf == RSL_BCCH_CCCH_CONF_1_C)
-				app_state.ccch_mode = CCCH_MODE_COMBINED;
-			else
-				app_state.ccch_mode = CCCH_MODE_NON_COMBINED;
+#endif		
+		if(!app_state.has_si3)
+		{
+			if (app_state.ccch_mode == CCCH_MODE_NONE) {
+				struct gsm48_system_information_type_3 *si3 =
+					(struct gsm48_system_information_type_3 *)data;
+				//printf("si3->control_channel_desc.ccch_conf =
%d\n",si3->control_channel_desc.ccch_conf);
+				switch (si3->control_channel_desc.ccch_conf) {
+					case RSL_BCCH_CCCH_CONF_1_C:
+						app_state.ccch_mode = CCCH_MODE_COMBINED;
+						break;	
+					case RSL_BCCH_CCCH_CONF_1_NC:
+						app_state.ccch_mode = CCCH_MODE_NON_COMBINED;
+						break;	
+					case RSL_BCCH_CCCH_CONF_2_NC:
+						app_state.ccch_mode = CCCH_MODE_NON_COMBINED2;
+						break;	
+					case RSL_BCCH_CCCH_CONF_3_NC:
+						app_state.ccch_mode = CCCH_MODE_NON_COMBINED4;
+						break;	
+					case RSL_BCCH_CCCH_CONF_4_NC:
+						app_state.ccch_mode = CCCH_MODE_NON_COMBINED6;
+						break;	
+					default:
+						fprintf(stderr, "\tUnknown CCCH_MODE\n");
+						return;						
+				}
+				app_state.neci = si3->cell_sel_par.neci;
+				app_state.has_si3 = 1;
 
-			l1ctl_tx_ccch_mode_req(ms, app_state.ccch_mode);
+				l1ctl_tx_ccch_mode_req(ms, app_state.ccch_mode);
+			}		
 		}
+
 		break;
 	case GSM48_MT_RR_SYSINFO_4:
 #ifdef BCCH_TC_CHECK
@@ -191,7 +334,10 @@
 	case GSM48_MT_RR_SYSINFO_5ter:
 		break;
 	default:
-		fprintf(stderr, "\tUnknown SI");
+		app_state.sys_count++;
+		if(app_state.sys_count == 2)
+			l1ctl_tx_reset_req(ms, L1CTL_RES_T_FULL);
+		fprintf(stderr, "\tUnknown SI\n");
 		break;
 	};
 }
@@ -207,16 +353,27 @@
 	struct gsm48_imm_ass *ia = msgb_l3(msg);
 	uint8_t ch_type, ch_subch, ch_ts;
 	int rv;
+	uint8_t chan_req_val, chan_req_mask, ra;
 
 	/* Discard packet TBF assignement */
-	//if (ia->page_mode & 0xf0)
-	if ((ia->page_mode & 0xf0) != 0x10)
+	if (ia->page_mode & 0xf0)
 		return 0;
 
 	/* If we're not ready yet, or just busy ... */
-	if ((!app_state.has_si1) || (app_state.dch_state != DCH_NONE))
+	if ((!app_state.has_si1) || (!app_state.has_si3) || (app_state.dch_state
!= DCH_NONE))
 		return 0;
+	printf("imm_ra %x,################!\n",ia->req_ref.ra);
+	//get the request cause
+/*	if(app_state.neci)
+	{
+		if(!((ia->req_ref.ra & 0xf0) == 0x10 ||(ia->req_ref.ra & 0xe0) == 0x80))
+			return 0;
 
+	} else {
+		if(!((ia->req_ref.ra & 0xe0) == 0xe0 ||(ia->req_ref.ra & 0xe0) == 0x80))
+			return 0;
+	}
+*/
 	rsl_dec_chan_nr(ia->chan_desc.chan_nr, &ch_type, &ch_subch, &ch_ts);
 
 	if (!ia->chan_desc.h0.h) {
@@ -359,6 +516,8 @@
 		     chan_need(pag->cneed1),
 		     mi_type_to_string(mi_type),
 		     mi_string);
+		fputs(mi_string,log_tmsi);
+		fputs("\n",log_tmsi);
 	}
 
 	/* check if we have a MI type in here */
@@ -380,10 +539,12 @@
 		     chan_need(pag->cneed2),
 		     mi_type_to_string(mi_type),
 		     mi_string);
+		fputs(mi_string,log_tmsi);
+		fputs("\n",log_tmsi);
 	}
 	return 0;
 }
-
+char temp[20];
 static int gsm48_rx_paging_p2(struct msgb *msg, struct osmocom_ms *ms)
 {
 	struct gsm48_paging2 *pag;
@@ -394,14 +555,23 @@
 		LOGP(DRR, LOGL_ERROR, "Paging2 message is too small.\n");
 		return -1;
 	}
-
+	memset(temp,0,sizeof(temp));
 	pag = msgb_l3(msg);
 	LOGP(DRR, LOGL_NOTICE, "Paging1: %s chan %s to TMSI M(0x%x) \n",
 		     pag_print_mode(pag->pag_mode),
 		     chan_need(pag->cneed1), pag->tmsi1);
+	memset(temp,0,sizeof(temp));
+	sprintf(temp, "%x", ntohl(pag->tmsi1)); 
+	fputs(temp,log_tmsi);
+	fputs("\n",log_tmsi);
+
 	LOGP(DRR, LOGL_NOTICE, "Paging2: %s chan %s to TMSI M(0x%x) \n",
 		     pag_print_mode(pag->pag_mode),
-		     chan_need(pag->cneed1), pag->tmsi2);
+		     chan_need(pag->cneed2), ntohl(pag->tmsi2));
+	memset(temp,0,sizeof(temp));
+	sprintf(temp, "%x", pag->tmsi2); 
+	fputs( temp,log_tmsi);
+	fputs("\n",log_tmsi);
 
 	/* no optional element */
 	if (msgb_l3len(msg) < sizeof(*pag) + 3)
@@ -425,15 +595,91 @@
 	     "n/a ",
 	     mi_type_to_string(mi_type),
 	     mi_string);
+	fputs(mi_string,log_tmsi);
+	fputs("\n",log_tmsi);
+	return 0;
+}
 
+static int gsm48_rx_paging_p3(struct msgb *msg, struct osmocom_ms *ms)
+{
+	struct gsm48_paging3 *pag;
+
+	if (msgb_l3len(msg) < sizeof(*pag)) {
+		LOGP(DRR, LOGL_ERROR, "Paging3 message is too small.\n");
+		return -1;
+	}
+
+	pag = msgb_l3(msg);
+	LOGP(DRR, LOGL_NOTICE, "Paging1: %s chan %s to TMSI M(0x%x) \n",
+		     pag_print_mode(pag->pag_mode),
+		     chan_need(pag->cneed1), pag->tmsi1);
+	memset(temp,0,sizeof(temp));
+	sprintf(temp, "%x", ntohl(pag->tmsi1));
+	fputs(temp,log_tmsi);
+	fputs("\n",log_tmsi);
+	LOGP(DRR, LOGL_NOTICE, "Paging2: %s chan %s to TMSI M(0x%x) \n",
+		     pag_print_mode(pag->pag_mode),
+		     chan_need(pag->cneed2), pag->tmsi2);
+	memset(temp,0,sizeof(temp));
+	sprintf(temp, "%x", ntohl(pag->tmsi2));
+	fputs(temp,log_tmsi);
+	fputs("\n",log_tmsi);
+	LOGP(DRR, LOGL_NOTICE, "Paging3: %s chan %s to TMSI M(0x%x) \n",
+		     pag_print_mode(pag->pag_mode),
+		     "n/a ", pag->tmsi3);
+	memset(temp,0,sizeof(temp));
+	sprintf(temp, "%x", ntohl(pag->tmsi3));
+	fputs(temp,log_tmsi);
+	fputs("\n",log_tmsi);
+	LOGP(DRR, LOGL_NOTICE, "Paging4: %s chan %s to TMSI M(0x%x) \n",
+		     pag_print_mode(pag->pag_mode),
+		     "n/a ", pag->tmsi4);
+	memset(temp,0,sizeof(temp));
+	sprintf(temp, "%x", ntohl(pag->tmsi4));
+	fputs(temp,log_tmsi);
+	fputs("\n",log_tmsi);
 	return 0;
 }
 
+
 int gsm48_rx_ccch(struct msgb *msg, struct osmocom_ms *ms)
 {
 	struct gsm48_system_information_type_header *sih = msgb_l3(msg);
 	int rc = 0;
 
+	if(app_state.dch_state == DCH_TCH)
+	{
+		//BCCH- SDCCH - BCCH -TCH
+		struct  gsm48_ass_cmd *ia;
+		uint8_t ch_type, ch_subch, ch_ts;
+
+		ia = &app_state.ia;
+
+		rsl_dec_chan_nr(ia->chan_desc.chan_nr, &ch_type, &ch_subch, &ch_ts);			
+		
+		if (!ia->chan_desc.h0.h) {
+			/* Non-hopping */
+			uint16_t arfcn;
+		
+			arfcn = ia->chan_desc.h0.arfcn_low | (ia->chan_desc.h0.arfcn_high << 8);
+
+			LOGP(DRR, LOGL_NOTICE, "ASS CMD(chan_nr=0x%02x, "
+				"ARFCN=%u, TS=%u, SS=%u, TSC=%u) ",
+				ia->chan_desc.chan_nr, arfcn, ch_ts, ch_subch,
+				ia->chan_desc.h0.tsc);
+				
+			/* request L1 to go to dedicated mode on assigned channel */
+			l1ctl_tx_dm_est_req_h0(ms,
+				arfcn, ia->chan_desc.chan_nr, ia->chan_desc.h0.tsc,
+				GSM48_CMODE_SPEECH_EFR, 0);
+		}
+		else
+		{
+			printf("unsuport hopping!\n");
+		}
+		
+		return 0;
+	}
 	/* CCCH marks the end of WAIT_REL */
 	if (app_state.dch_state == DCH_WAIT_REL)
 		app_state.dch_state = DCH_NONE;
@@ -449,7 +695,7 @@
 		gsm48_rx_paging_p2(msg, ms);
 		break;
 	case GSM48_MT_RR_PAG_REQ_3:
-		LOGP(DRR, LOGL_ERROR, "PAGING of type 3 is not implemented.\n");
+		gsm48_rx_paging_p3(msg, ms);
 		break;
 	case GSM48_MT_RR_IMM_ASS:
 		gsm48_rx_imm_ass(msg, ms);
@@ -483,9 +729,397 @@
 	return 0;
 }
 
+void tch_deinterleave(ubit_t *mC, int blockOffset)
+{
+	int k;
+	for (k = 0; k < 456; k++) {
+		int B = ( k + blockOffset ) % 8;
+		int j = 2 * ((49 * k) % 57) + ((k % 8) / 4);
+		mC[k] = app_state.mI[B][j];
+		app_state.mI[B][j] = 0;
+		//OBJDCOUT("deinterleave k="<<k<<"
B="<<B<<" j="<<j);
+	}
+} 
+
+void tch_unmap(const uint16_t *map, size_t mapSize, ubit_t * dest, ubit_t *
soure)
+{
+	unsigned int i;
+	for(i=0; i<mapSize; i++)
+	{
+		dest[map[i]] = soure[i];
+	}
+}
+
+void tch_map(const uint16_t *map, size_t mapSize, ubit_t * dest, ubit_t *
soure)
+{
+	unsigned int i;
+	for(i=0; i<mapSize; i++)
+	{
+		dest[i] = soure[map[i]];
+	}
+}
+
+void fillField(ubit_t *mStart, size_t writeIndex, uint64_t value, unsigned
length)
+{
+	char *dpBase = mStart + writeIndex;
+	char *dp = dpBase + length - 1;
+
+	while (dp>=dpBase) {
+		*dp-- = value & 0x01;
+		value >>= 1;
+	}
+}
+
+uint64_t count_tch = 0;
+uint32_t flag = 0;
+
+static void process_tch_efr(struct osmocom_ms *ms,struct l1ctl_burst_ind
*bi)
+{
+	int16_t rx_dbm;
+	uint16_t arfcn;
+	uint32_t fn,B;
+	uint8_t cbits, tn, lch_idx;
+	int ul, bid, i, k, length;
+	sbit_t *bursts, mC[456];
+	ubit_t steal_bit[2],
bt[114],convu[189],convd[189],tch_raw[260],TCHW[260],EFRBits[244],EFRAMR[8 +
244];
+
+	pbit_t voice[33];
+	/* Get params (Only for SDCCH and SACCH/{4,8,F,H}) */
+	arfcn  = ntohs(bi->band_arfcn);
+	rx_dbm = rxlev2dbm(bi->rx_level);
+
+	fn     = ntohl(bi->frame_nr);
+	ul     = !!(arfcn & ARFCN_UPLINK);
+
+	cbits  = bi->chan_nr >> 3;
+	tn     = bi->chan_nr & 7;
+
+	B  = -1;
+	
+	if((fn%13)%4 == 0) flag= 1;
+
+	if(!flag) return;
+
+	B = count_tch % 8;
+	//printf("fn%13 %4 = %d\n",(fn%13)%4);
+	if (B == -1)
+		return;
+
+	/* Clear if new set */
+	if (B == 0){
+		for(i=0; i<4; i++){
+			memset(app_state.mI[i], 0x00, 114);
+		}
+	}else if(B == 4){
+		for(i=4; i<8; i++){
+			memset(app_state.mI[i], 0x00, 114);
+		}		
+	}
+
+	/* Unpack (ignore hu/hl) */
+	osmo_pbit2ubit_ext(bt,  0, bi->bits,  0, 57, 0);
+	osmo_pbit2ubit_ext(bt, 57, bi->bits, 57, 57, 0);
+	osmo_pbit2ubit_ext(steal_bit, 0 , bi->bits, 114 , 2 , 0);
+	//printf("steal_bit %x , %x\n",steal_bit[0],steal_bit[1]);
+	/* Convert to softbits */
+	for (i=0; i<114; i++)
+		app_state.mI[B][i] = bt[i] ? - (bi->snr >> 1) : (bi->snr >> 1);
+	
+	count_tch++;
+	// Deinterleave according to the diagonal "phase" of B.
+	// See GSM 05.03 3.1.3.
+	// Deinterleaves i[] to c[]
+	if((B % 4 ==3)&&(count_tch >= 7)){
+		if(B == 3)
+		{
+			tch_deinterleave(mC, 4);
+		}else{
+			tch_deinterleave(mC, 0);
+		}
+
+		for (k = 0; k < 78; k++) {
+			tch_raw[182 + k] = mC[378 +k];
+		}
+	
+		osmo_conv_decode(&conv_tch_afs_12_2, mC, convu);
+
+		// 3.1.2.1
+		// copy class 1 bits u[] to d[]
+		for (k = 0; k <= 90; k++) {
+			convd[2*k] = convu[k];
+			convd[2*k+1] = convu[184-k];
+		}
+		
+		memcpy(tch_raw,convd,182);	// the last 78 bit has been stored!
+
+		//now only process EFR or AMR 12_2, fix me!
+		tch_unmap(gsm660_bitorder, 260, TCHW, tch_raw);
+
+		// Remove repeating bits and CRC to get raw EFR frame (244 bits)
+		for (k=0; k<71; k++)
+		EFRBits[k] = TCHW[k] & 1;
+	
+		for (k=73; k<123; k++)
+		EFRBits[k-2] = TCHW[k] & 1;
+	
+		for (k=125; k<178; k++)
+		EFRBits[k-4] = TCHW[k] & 1;
+	
+		for (k=180; k<230; k++)
+		EFRBits[k-6] = TCHW[k] & 1;
+	
+		for (k=232; k<252; k++)
+		EFRBits[k-8] = TCHW[k] & 1;
+		// Map bits as AMR 12.2k
+		tch_map(gsm690_12_2_bitorder, 244, EFRAMR + 8,EFRBits);
+	
+		// Put the whole frame (hdr + payload)
+		//mVFrameAMR.pack(mPrevGoodFrame);
+		//mPrevGoodFrameLength = 32;
+		fillField(EFRAMR, 0, 0x3c, 8);
+		voice[32] = 0;
+		length = osmo_ubit2pbit(voice, EFRAMR, 8 + 244);
+		fwrite(voice, 1, 32, d_speech_file);		
+	}
+	
+}
+
+int find_speech_mode(unsigned char codec,int j)
+{
+	int i,k;
+	k = 0;
+	for(i = 0;i<8;i++)
+	{
+		if(app_state.amr_arg.amr_acs & (1 << i)){
+			k++;
+			if(k == j)
+				return i;
+		}
+	}	
+}
+
+static void process_tch_amr(struct osmocom_ms *ms,struct l1ctl_burst_ind
*bi)
+{
+	int16_t rx_dbm;
+	uint16_t arfcn;
+	uint32_t fn,B;
+	uint8_t cbits, tn, lch_idx;
+	int ul, bid, i, k, length;
+	sbit_t *bursts, mC[456],hl,hu;
+	ubit_t steal_bit[2],
bt[116],convu[260],convd[260],tch_raw[260],TCHW[260],EFRBits[244],EFRAMR[8 +
244];
+
+	pbit_t voice[33];
+	/* Get params (Only for SDCCH and SACCH/{4,8,F,H}) */
+	arfcn  = ntohs(bi->band_arfcn);
+	rx_dbm = rxlev2dbm(bi->rx_level);
+
+	fn     = ntohl(bi->frame_nr);
+	ul     = !!(arfcn & ARFCN_UPLINK);
+
+	cbits  = bi->chan_nr >> 3;
+	tn     = bi->chan_nr & 7;
+
+	B  = -1;
+	
+	if(( fn % 13 ) % 4 == 0) flag = 1;
+
+	if(!flag) return;
+
+	//B = count_tch % 8;
+	B = ( fn % 13 ) % 8; 
+	printf("fn % 26 = %d, fn % 13 = %d, B = %d\n",fn%26 , fn%13 , B);
+
+	if (B == -1)
+		return;
+
+	/* Unpack (ignore hu/hl) */
+	osmo_pbit2ubit_ext(bt,  0, bi->bits,  0, 57, 0);
+	osmo_pbit2ubit_ext(bt, 57, bi->bits, 57, 57, 0);
+	//osmo_pbit2ubit_ext(steal_bit, 0 , bi->bits, 114 , 2 , 0);
+	//hl = bi->bits[14] & 0x10;
+	//hu = bi->bits[14] & 0x20; 
+
+	/* save stealing flags */
+        bt[114] = !!(bi->bits[14] & 0x10); // hl
+        bt[115] = !!(bi->bits[14] & 0x20); // hu
+	printf("steal_bit %x , %x\n", bt[114],bt[115]);
+
+/*        if (bt[114] || bt[115]) {
+		printf("might be FACCH %x , %x\n", bt[114], bt[115]);
+        	return;
+        } 
+*/
+	/* Convert to softbits */
+	for (i=0; i<114; i++)
+		app_state.mI[B][i] = bt[i] ? - (bi->snr >> 1) : (bi->snr >> 1);
+	
+	count_tch++;
+
+	// Decode AMR
+	if((B % 4 == 3) && (count_tch >= 7)){
+		if(B == 3)
+		{
+			tch_deinterleave(mC, 4);
+		}else{
+			tch_deinterleave(mC, 0);
+		}
+		
+		printf("****************** %d\n",( fn % 26) );
+		if( ( fn % 26) == 3 || ( fn % 26) == 11 || ( fn % 26) == 20 )
+		{
+			//abstract the	codec mode
+			for(i = 0;i < 8 ; i++)
+			{
+				//printf("%x ",mC[i]);
+				if(mC[i] < 0)
+					app_state.amr_cur.mode = ( app_state.amr_cur.mode | (1 <<  i ));
+				else
+					app_state.amr_cur.mode = ( app_state.amr_cur.mode & (~(1 <<  i )));	
+			}
+
+			switch(app_state.amr_cur.mode){
+				case CODEC_MODE_1:
+					printf("codec 1\n");
+					app_state.amr_cur.i = find_speech_mode(app_state.amr_arg.amr_acs, 1);
+				break; 
+				case CODEC_MODE_2:
+					printf("codec 2\n");
+					app_state.amr_cur.i = find_speech_mode(app_state.amr_arg.amr_acs, 2);	
+				break;
+				case CODEC_MODE_3:
+					printf("codec 3\n");
+					app_state.amr_cur.i = find_speech_mode(app_state.amr_arg.amr_acs, 3);	
+				break;
+				case CODEC_MODE_4:
+					printf("codec 4\n");
+					app_state.amr_cur.i = find_speech_mode(app_state.amr_arg.amr_acs, 4);	
+				break;
+				default:
+				{
+					printf("unkown codec\n");
+					return;
+				}
+			}
+		}
+
+		memset(voice,0,32);
+		switch( 1 << app_state.amr_cur.i ){
+			case gsm690_4_75:
+				printf("codec gsm690_4_75\n");
+				osmo_conv_decode(&conv_tch_afs_4_75, &mC[8], convu);
+				memcpy(convd,convu,39);
+				memcpy(convd,&convu[45],56);
+				tch_map(gsm690_4_75_bitorder, gsm690_4_75_len, EFRAMR + 8,convd);
+				fillField(EFRAMR, 0, 0x04, 8);
+				length = osmo_ubit2pbit_ext(voice, 0, EFRAMR, 0, 8 + gsm690_4_75_len,
1);	
+
+			break; 
+			case gsm690_5_15:
+				printf("codec gsm690_5_15\n");
+				osmo_conv_decode(&conv_tch_afs_5_15, &mC[8], convu);
+				memcpy(convd,convu,49);
+				memcpy(convd,&convu[55],54);
+				tch_map(gsm690_5_15_bitorder, gsm690_5_15_len, EFRAMR + 8,convd);
+				fillField(EFRAMR, 0, 0x0c, 8);
+				length = osmo_ubit2pbit_ext(voice, 0, EFRAMR, 0, 8 + gsm690_5_15_len,
1);	
+
+			break;
+			case gsm690_5_90:
+				printf("codec gsm690_5_90\n");
+				osmo_conv_decode(&conv_tch_afs_5_9, &mC[8], convu);
+				memcpy(convd,convu,55);
+				memcpy(convd,&convu[61],63);
+				tch_map(gsm690_5_9_bitorder, gsm690_5_90_len, EFRAMR + 8,convd);
+				fillField(EFRAMR, 0, 0x14, 8);
+				length = osmo_ubit2pbit_ext(voice, 0, EFRAMR, 0, 8 + gsm690_5_90_len,
1);	
+	
+			break;
+			case gsm690_6_70:
+				printf("codec gsm690_6_70\n");
+				osmo_conv_decode(&conv_tch_afs_6_7, &mC[8], convu);
+				memcpy(convd,convu,55);
+				memcpy(convd,&convu[61],79);
+				tch_map(gsm690_6_7_bitorder, gsm690_6_70_len, EFRAMR + 8,convd);
+				fillField(EFRAMR, 0, 0x1c, 8);
+				length = osmo_ubit2pbit_ext(voice, 0, EFRAMR, 0, 8 + gsm690_6_70_len,
1);	
+	
+			break;
+			case gsm690_7_40:
+				printf("codec gsm690_7_40\n");
+				osmo_conv_decode(&conv_tch_afs_7_4, &mC[8], convu);
+				memcpy(convd,convu,61);
+				memcpy(convd,&convu[67],87);
+				tch_map(gsm690_7_4_bitorder, gsm690_7_40_len, EFRAMR + 8,convd);
+				fillField(EFRAMR, 0, 0x24, 8);
+				length = osmo_ubit2pbit_ext(voice, 0, EFRAMR, 0, 8 + gsm690_7_40_len,
1);	
+	
+			break;
+			case gsm690_7_95:
+				printf("codec gsm690_7_95\n");
+				osmo_conv_decode(&conv_tch_afs_7_95, &mC[8], convu);
+				memcpy(convd,convu,75);
+				memcpy(convd,&convu[81],84);
+				tch_map(gsm690_7_95_bitorder, gsm690_7_95_len, EFRAMR + 8,convd);
+				fillField(EFRAMR, 0, 0x2c, 8);
+				length = osmo_ubit2pbit_ext(voice, 0, EFRAMR, 0, 8 + gsm690_7_95_len,
1);	
+			break;
+			case gsm690_10_2:
+				printf("codec gsm690_10_2\n");
+				osmo_conv_decode(&conv_tch_afs_10_2, &mC[8], convu);
+				memcpy(convd,convu,65);
+				memcpy(convd,&convu[71],139);
+				tch_map(gsm690_10_2_bitorder, gsm690_10_2_len, EFRAMR + 8,convd);
+				fillField(EFRAMR, 0, 0x34, 8);
+				length = osmo_ubit2pbit_ext(voice, 0, EFRAMR, 0, 8 + gsm690_10_2_len,
1);
+			break;
+			case gsm690_12_2:
+				printf("codec gsm690_12_2\n");
+				osmo_conv_decode(&conv_tch_afs_12_2, &mC[8], convu);
+				memcpy(convd,convu,81);
+				memcpy(convd,&convu[87],163);
+				tch_map(gsm690_12_2_bitorder, gsm690_12_2_len, EFRAMR + 8,convd);
+				fillField(EFRAMR, 0, 0x3c, 8);
+				length = osmo_ubit2pbit_ext(voice, 0, EFRAMR, 0, 8 + gsm690_12_2_len,
1);
+			break;
+			default:
+			{
+				printf("unkown gsm690 codec\n");
+				return;
+			}
+		}	
+
+		//printf("length is %d\n",length);
+		//printf("voice[0] is %x\n",voice[0]);
+		fwrite(voice, 1, length, d_speech_file);
+ 	}
+	
+}
+
 
 static void
-local_burst_decode(struct l1ctl_burst_ind *bi)
+local_burst_decode(struct osmocom_ms *ms,struct l1ctl_burst_ind *bi)
 {
 	int16_t rx_dbm;
 	uint16_t arfcn;
@@ -514,6 +1148,24 @@
 			uint32_t fn_report;
 			fn_report = (fn - (tn * 13) + 104) % 104;
 			bid = (fn_report - 12) / 26;
+			printf(" SACCH fn = %d fn_report = %d\n",fn,fn_report);
+		}else{
+			switch (app_state.speed_mode ) {
+			
+				case GSM48_CMODE_SPEECH_EFR:
+					process_tch_efr(ms,bi);	
+					break;
+	
+				case GSM48_CMODE_SPEECH_AMR:
+					process_tch_amr(ms,bi);
+					break;
+							
+				default:
+				{
+					printf("unknown speed mode! %x\n",app_state.speed_mode);
+					return;
+				}
+			}						
 		}
 	} else if ((cbits & 0x1e) == 0x02) {	/* TCH/H */
 		lch_idx = cbits & 1;
@@ -526,9 +1178,11 @@
 	} else if ((cbits & 0x1c) == 0x04) {	/* SDCCH/4 */
 		lch_idx = cbits & 3;
 		bid = bi->flags & 3;
+		printf(" SDCCH/4\n");
 	} else if ((cbits & 0x18) == 0x08) {	/* SDCCH/8 */
 		lch_idx = cbits & 7;
 		bid = bi->flags & 3;
+		//printf(" SDCCH/8\n");
 	}
 
 	if (bid == -1)
@@ -559,9 +1213,161 @@
 	if (bid == 3)
 	{
 		uint8_t l2[23];
-		int rv;
+		int rv,i;
+		struct  gsm48_ass_cmd *ia;
+		uint8_t ch_type, ch_subch, ch_ts;
+		uint8_t chan_req_val, chan_req_mask, ra;
+
 		rv = xcch_decode(l2, bursts);
 
+		if((l2[0] == 0x03) && (l2[4] == 0x2e))
+		{
+			ia =(struct  gsm48_ass_cmd *)&l2[5];
+
+			memcpy(&app_state.ia , ia, sizeof(struct  gsm48_ass_cmd));
+
+
+			//l1ctl_tx_reset_req(ms, L1CTL_RES_T_SCHED);
+			printf("the speed version is %x.\n",ia->chan_mode.voice_mode);
+			printf("the start mode is %x.\n",ia->mc.start_mode);
+			printf("the codec rate is %x.\n",ia->mc.codec_rate);
+			app_state.amr_arg.amr_acs = ia->mc.codec_rate;
+			app_state.amr_arg.start_mode = ia->mc.start_mode;
+			printf("Jump to TCH Channel\n");
+			
+			app_state.speed_mode = ia->chan_mode.voice_mode;
+
+			/* Clear if new set */
+			for(i=0; i<8; i++){
+				memset(app_state.mI[i], 0x00, 114);
+			}		 
+
+			/* open speech file and configure d_tch_decoders */
+			switch (app_state.speed_mode ) {
+	
+				case GSM48_CMODE_SPEECH_V1:
+					d_speech_file = fopen( "speech.au.gsm", "wb" );
+					break;
+				
+				case GSM48_CMODE_SPEECH_EFR:
+					d_speech_file = fopen( gen_filename(ms,bi), "wb" );
+					fwrite(amr_nb_magic, 1, 6, d_speech_file); /* Write header */
+					break;
+	
+				case GSM48_CMODE_SPEECH_AMR:
+					d_speech_file = fopen( gen_filename(ms,bi), "wb" );
+					fwrite(amr_nb_magic, 1, 6, d_speech_file); /* Write header */
+					break;
+							
+				default:
+				{
+					printf("unknown speed mode! %x\n",app_state.speed_mode);
+					d_speech_file = NULL;
+					return;
+				}
+  			}			
+			app_state.dch_state = DCH_TCH;
+
+			l1ctl_tx_reset_req(ms, L1CTL_RES_T_FULL);	//BCCH- SDCCH - BCCH -TCH
+			
+			return;
+
+			if (!ia->chan_desc.h0.h) {
+				/* Non-hopping */
+				uint16_t arfcn;
+		
+				arfcn = ia->chan_desc.h0.arfcn_low | (ia->chan_desc.h0.arfcn_high <<
8);
+		
+				LOGP(DRR, LOGL_NOTICE, "ASS CMD(chan_nr=0x%02x, "
+					"ARFCN=%u, TS=%u, SS=%u, TSC=%u) ",
+					ia->chan_desc.chan_nr, arfcn, ch_ts, ch_subch,
+					ia->chan_desc.h0.tsc);
+		
+				/* request L1 to go to dedicated mode on assigned channel */
+				rv = l1ctl_tx_dm_est_req_h0(ms,
+					arfcn, ia->chan_desc.chan_nr, ia->chan_desc.h0.tsc,
+					GSM48_CMODE_SPEECH_EFR, 0);
+			}
+		#ifdef TCH_HOPPING	
+		 	else { 
+				/* Hopping is not support now! */
+				uint8_t maio, hsn, ma_len;
+				uint16_t ma[64], arfcn;
+				int i, j, k;
+
+				//initialize tch count and flag 
+				count_tch = 0;
+				flag = 0;
+
+				hsn = ia->chan_desc.h1.hsn;
+				maio = ia->chan_desc.h1.maio_low | (ia->chan_desc.h1.maio_high << 2);
+		
+				LOGP(DRR, LOGL_NOTICE, "ASS CMD( chan_nr=0x%02x, "
+					"HSN=%u, MAIO=%u, TS=%u, SS=%u, TSC=%u) ",
+					ia->chan_desc.chan_nr, hsn, maio, ch_ts, ch_subch,
+					ia->chan_desc.h1.tsc);
+
+				/* decode mobile allocation */
+				ma_len = 0;
+				for (i=1, j=0; i<=1024; i++) {
+					arfcn = i & 1023;
+					if (app_state.cell_arfcns[arfcn].mask & 0x01) {
+						k = ia->mob_alloc_len - (j>>3) - 1;
+						if (ia->mob_alloc[k] & (1 << (j&7))) {
+							ma[ma_len++] = arfcn;
+						}
+						j++;
+					}
+				}
+				
+				/* request L1 to go to dedicated mode on assigned channel */
+				rv = l1ctl_tx_dm_est_req_h1(ms,
+					maio, hsn, ma, ma_len,
+					ia->chan_desc.chan_nr, ia->chan_desc.h1.tsc,
+					GSM48_CMODE_SPEECH_EFR, 0);
+			}
+		#endif
+		}/*else{
+			return;
+		}
+target sms sniffer
+		if( (l2[0] == 0x01)&&(l2[1] == 0x73)&&(l2[10] == 0x05) )
+		{
+			unsigned int tmsi,object_tmsi;
+			tmsi = *(int *)&l2[12];
+			for(i =12;i<12+4;i++)
+			{
+				printf("%x ",l2[i]);
+			}
+			printf("\n");
+			object_tmsi = ntohl(0x97034024);
+			printf("object_tmsi is %x, tmsi is %x\n",object_tmsi,tmsi);
+			if(tmsi != object_tmsi)
+			{
+				printf("not match!\n");
+			
+				l1ctl_tx_dm_rel_req(ms);
+				l1ctl_tx_fbsb_req(ms, ms->test_arfcn,
+						L1CTL_FBSB_F_FB01SB, 100, 0,
+						app_state.ccch_mode);
+		
+				
+				app_state.dch_state = DCH_WAIT_REL;
+				app_state.dch_badcnt = 0;
+				app_state.dch_ciph = 0;
+		
+			
+				if (app_state.fh) {
+					fclose(app_state.fh);
+					app_state.fh = NULL;
+				}
+			}else{
+
+				printf("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
+			}
+
+		}
+*/	
 		if (rv == 0)
 		{
 			uint8_t chan_type, chan_ts, chan_ss;
@@ -586,25 +1392,106 @@
 	}
 }
 
-static char *
-gen_filename(struct osmocom_ms *ms, struct l1ctl_burst_ind *bi)
+static void
+ccch_tn_decode(struct l1ctl_burst_ind *bi,uint8_t tn,struct osmocom_ms *ms)
 {
-	static char buffer[256];
-	time_t d;
-	struct tm lt;
+	int16_t rx_dbm;
+	uint16_t arfcn;
+	uint32_t fn;
+	uint8_t cbits, lch_idx;
+	int ul, bid, i;
+	sbit_t *bursts;
+	ubit_t bt[116];
 
-	time(&d);
-	localtime_r(&d, &lt);
+	/* Get params (Only for SDCCH and SACCH/{4,8,F,H}) */
+	arfcn  = ntohs(bi->band_arfcn);
+	rx_dbm = rxlev2dbm(bi->rx_level);
+	//printf("tn is %d\n",tn);
+	bursts = app_state.bursts_ccch[tn/2];
+	
+	fn     = ntohl(bi->frame_nr);
 
-	snprintf(buffer, 256, "bursts_%04d%02d%02d_%02d%02d_%d_%d_%02x.dat",
-		lt.tm_year + 1900, lt.tm_mon, lt.tm_mday,
-		lt.tm_hour, lt.tm_min,
-		ms->test_arfcn,
-		ntohl(bi->frame_nr),
-		bi->chan_nr
-	);
+	cbits  = bi->chan_nr >> 3;
+
+	bid    = -1;
+
+	bid = bi->flags & 3;
+	//printf("cbits is %x\n",cbits);
+	if ( cbits  == 0x12) {			/* TCH/F */
+		bid = bi->flags & 3;
+	}
+
+	if (bid == -1)
+		return;
+
+	/* Clear if new set */
+	if (bid == 0)
+		memset(bursts, 0x00, 116 * 4);
+
+	/* Unpack (ignore hu/hl) */
+	osmo_pbit2ubit_ext(bt,  0, bi->bits,  0, 57, 0);
+	osmo_pbit2ubit_ext(bt, 59, bi->bits, 57, 57, 0);
+	bt[57] = bt[58] = 1;
+
+	/* A5/x */
+	if (app_state.dch_ciph) {
+		ubit_t ks_dl[114], ks_ul[114], *ks = ul ? ks_ul : ks_dl;
+		osmo_a5(app_state.dch_ciph, app_state.kc, fn, ks_dl, ks_ul);
+		for (i= 0; i< 57; i++)  bt[i] ^= ks[i];
+		for (i=59; i<116; i++)  bt[i] ^= ks[i-2];
+	}
+
+	/* Convert to softbits */
+	for (i=0; i<116; i++)
+		bursts[(116*bid)+i] = bt[i] ? - (bi->snr >> 1) : (bi->snr >> 1);
+
+	/* If last, decode */
+	if (bid == 3)
+	{
+		uint8_t l2[23];
+		int rv;
+		rv = xcch_decode(l2, bursts);
+
+		if (rv == 0)
+		{
+			struct msgb *msg;
+			msg = msgb_alloc_headroom(30 ,0,"layer3");
+			msg->tail =30;
+			msg->l3h =l2;
+			msg->data_len = msg->len =23;
+			gsm48_rx_ccch(msg,ms);		
+			//struct abis_rsl_rll_hdr *rllh = l2;//l3
+			//printf("chan_nr = %x,bi->chan_nr = %x\n",rllh->chan_nr,bi->chan_nr);
+			uint8_t chan_type, chan_ts, chan_ss;
+			uint8_t gsmtap_chan_type;
+
+			/* Send to GSMTAP */
+			rsl_dec_chan_nr(bi->chan_nr, &chan_type, &chan_ss, &chan_ts);
+			gsmtap_chan_type = chantype_rsl2gsmtap(
+				chan_type,
+				bi->flags & BI_FLG_SACCH ? 0x40 : 0x00
+			);
+			gsmtap_send(gsmtap_inst,
+				arfcn, chan_ts, gsmtap_chan_type, chan_ss,
+				ntohl(bi->frame_nr), bi->rx_level, bi->snr,
+				l2, sizeof(l2)
+			);
+
+			/* Crude CIPH.MOD.COMMAND detect */
+			if ((l2[3] == 0x06) && (l2[4] == 0x35) && (l2[5] & 1))
+				app_state.dch_ciph = 1 + ((l2[5] >> 1) & 7);
+		}
+	}
 
-	return buffer;
+}
+
+static void
+local_ccch_burst_decode(struct l1ctl_burst_ind *bi,struct osmocom_ms *ms)
+{
+	uint8_t  tn;
+
+ 	tn = bi->chan_nr & 7;
+	ccch_tn_decode(bi,tn,ms);
 }
 
 void layer3_rx_burst(struct osmocom_ms *ms, struct msgb *msg)
@@ -612,7 +1499,7 @@
 	struct l1ctl_burst_ind *bi;
 	int16_t rx_dbm;
 	uint16_t arfcn;
-	int ul, do_rel=0;
+	int ul,do_rel=0;
 
 	/* Header handling */
 	bi = (struct l1ctl_burst_ind *) msg->l1h;
@@ -621,6 +1508,8 @@
 	rx_dbm = rxlev2dbm(bi->rx_level);
 	ul = !!(arfcn & ARFCN_UPLINK);
 
+	if (app_state.dch_state == DCH_NONE)
+		local_ccch_burst_decode(bi,ms);
 	/* Check for channel start */
 	if (app_state.dch_state == DCH_WAIT_EST) {
 		if (bi->chan_nr == app_state.dch_nr) {
@@ -630,7 +1519,7 @@
 				app_state.dch_badcnt = 0;
 
 				/* Open output */
-				app_state.fh = fopen(gen_filename(ms, bi), "wb");
+				//app_state.fh = fopen(gen_filename(ms, bi), "wb");
 			} else {
 				/* Abandon ? */
 				do_rel = (app_state.dch_badcnt++) >= 4;
@@ -643,19 +1532,44 @@
 		if (!ul) {
 			/* Bad burst counting */
 			if (bi->snr < 64)
-				app_state.dch_badcnt++;
+				{
+					app_state.dch_badcnt++;
+					printf("sdcch app_state.dch_badcnt++\n");
+				}
+			else if (app_state.dch_badcnt >= 2)
+				app_state.dch_badcnt -= 2;
+			else
+				app_state.dch_badcnt = 0;
+
+			/* Release condition */
+			do_rel = app_state.dch_badcnt >= 6;
+		}
+	}
+
+	// when in TCH mode, we only measure the SACCH to kown the link quanlity
+	if (app_state.dch_state == DCH_TCH) {
+		//printf("app_state.dch_state == DCH_TCH\n");
+		if (!ul && (bi->flags & BI_FLG_SACCH)) {
+			//printf("TCH SACCH\n");
+			/* Bad burst counting */
+			if (bi->snr < 40)
+				{
+					app_state.dch_badcnt++;
+					printf("sacch app_state.dch_badcnt++\n");
+				}
 			else if (app_state.dch_badcnt >= 2)
 				app_state.dch_badcnt -= 2;
 			else
 				app_state.dch_badcnt = 0;
 
 			/* Release condition */
-			do_rel = app_state.dch_badcnt >= 600;
+			do_rel = app_state.dch_badcnt >= 6;
 		}
 	}
 
 	/* Release ? */
 	if (do_rel) {
+		printf("The Delicate Channel is released because of bad SNR!\n");
 		/* L1 release */
 		l1ctl_tx_dm_rel_req(ms);
 		l1ctl_tx_fbsb_req(ms, ms->test_arfcn,
@@ -675,22 +1589,25 @@
 	}
 
 	/* Save the burst */
-	if (app_state.dch_state == DCH_ACTIVE)
-		fwrite(bi, sizeof(*bi), 1, app_state.fh);
+	if (app_state.dch_state == DCH_ACTIVE || app_state.dch_state == DCH_TCH)
+		//fwrite(bi, sizeof(*bi), 1, app_state.fh);
 
 	/* Try local decoding */
-	if (app_state.dch_state == DCH_ACTIVE)
-		local_burst_decode(bi);
+	if (!ul && (app_state.dch_state == DCH_ACTIVE || app_state.dch_state ==
DCH_TCH))
+		local_burst_decode(ms,bi);
 }
 
 void layer3_app_reset(void)
 {
 	/* Reset state */
 	app_state.has_si1 = 0;
+	app_state.has_si3 = 0;
+	app_state.neci = 0;
 	app_state.ccch_mode = CCCH_MODE_NONE;
 	app_state.dch_state = DCH_NONE;
 	app_state.dch_badcnt = 0;
 	app_state.dch_ciph = 0;
+	app_state.sys_count= 0;
 
 	if (app_state.fh)
 		fclose(app_state.fh);
@@ -704,7 +1621,8 @@
 {
 	struct osmocom_ms *ms;
 	struct osmobb_msg_ind *mi;
-
+	struct osmobb_fbsb_res *fr;
+	
 	if (subsys != SS_L1CTL)
 		return 0;
 
@@ -713,13 +1631,27 @@
 		mi = signal_data;
 		layer3_rx_burst(mi->ms, mi->msg);
 		break;
+	case S_L1CTL_FBSB_ERR:
+		fr=signal_data;
 
+		l1ctl_tx_reset_req(fr->ms, L1CTL_RES_T_FULL);
+		/* FIXME: L1CTL_RES_T_FULL doesn't reset dedicated mode
+		* (if previously set), so we release it here. */
+		l1ctl_tx_dm_rel_req(fr->ms);
+		//printf("fr->band_arfcn is %d\n",ntohs(fr->band_arfcn));
+		//return l1ctl_tx_fbsb_req(fr->ms, ntohs(fr->band_arfcn),
+		                        // L1CTL_FBSB_F_FB01SB, 100, 0,
+		                        // CCCH_MODE_NONE);
+		break;
 	case S_L1CTL_RESET:
+		if(app_state.dch_state == DCH_ACTIVE) //if we are going TCH,we need
rest_sched?
+			break;	
 		ms = signal_data;
-		layer3_app_reset();
+		if(app_state.dch_state != DCH_TCH)
+			layer3_app_reset();
 		return l1ctl_tx_fbsb_req(ms, ms->test_arfcn,
 		                         L1CTL_FBSB_F_FB01SB, 100, 0,
-		                         CCCH_MODE_NONE);
+		                         app_state.ccch_mode);
 		break;
 	}
 	return 0;


the output:

<0001> app_ccch_scan.c:191 ASS CMD(chan_nr=0x09, ARFCN=622, TS=1, SS=0,
TSC=2) fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 1
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 1 , 1
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 1
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 0 , 1
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 1 , 1
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 1 , 0
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 1 , 1
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_4_75
 SACCH fn = 489319 fn_report = 90
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 1
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 0 , 1
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 1 , 0
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 1 , 0
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 1 , 1
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 1
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 1 , 0
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 0 , 1
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 1 , 1
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 1 , 0
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 1 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 1 , 1
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_4_75
 SACCH fn = 489345 fn_report = 12
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 1
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 1 , 1
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 1
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 1 , 1
****************** 3
codec 1
codec gsm690_4_75
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 1 , 0
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 1 , 1
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 1 , 0
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 1 , 1
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 0 , 1
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 1
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 1 , 1
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 0 , 1
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 1 , 0
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 1 , 0
****************** 24
codec gsm690_4_75
 SACCH fn = 489371 fn_report = 38
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 1
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 1 , 0
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 0
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 1 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 1
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 1 , 1
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 0
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 1 , 1
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 0 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 0 , 0
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 1 , 0
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 1 , 0
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 1 , 0
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 1 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 1 , 1
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 1 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_4_75
 SACCH fn = 489397 fn_report = 64
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 0 , 0
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 1 , 1
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 0 , 0
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 1 , 1
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 1 , 1
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 1 , 0
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 1 , 0
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 0
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 1
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 0 , 1
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 1
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 0 , 1
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 0 , 1
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 1 , 1
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_4_75
 SACCH fn = 489423 fn_report = 90
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 1 , 0
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 0
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 1 , 0
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 1 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 1
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 0 , 1
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 1 , 1
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 0 , 1
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 1 , 1
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 1 , 1
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 1 , 1
****************** 20
codec 4
codec gsm690_12_2
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 1
****************** 24
codec gsm690_12_2
 SACCH fn = 489449 fn_report = 12
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 1
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 0
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 7
codec gsm690_12_2
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 1 , 0
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 1
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 1
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 1 , 1
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 1 , 0
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 16
codec gsm690_12_2
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 1 , 1
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 0 , 1
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 1 , 1
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 1 , 1
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 1
****************** 24
codec gsm690_12_2
 SACCH fn = 489475 fn_report = 38
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 0 , 1
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 0
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 1 , 1
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 1 , 1
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 1
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 1 , 1
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 7
codec gsm690_12_2
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 1 , 1
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 0 , 1
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 1
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 0 , 1
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 0 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 0 , 0
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 16
codec gsm690_12_2
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 1 , 1
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 0 , 1
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 1
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 1 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_12_2
 SACCH fn = 489501 fn_report = 64
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 1
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 0 , 1
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 0 , 0
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 0 , 1
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 1 , 1
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 1 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 1 , 1
****************** 7
codec gsm690_12_2
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 0 , 1
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 1
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 1 , 1
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 1 , 1
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 0 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 1 , 1
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 1 , 0
****************** 16
codec gsm690_12_2
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 1 , 0
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 0 , 1
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 0 , 1
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_12_2
 SACCH fn = 489527 fn_report = 90
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 0 , 0
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 0 , 1
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 0 , 1
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 0 , 1
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 0 , 1
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 1 , 1
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 7
codec gsm690_12_2
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 1 , 1
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 0
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 1 , 0
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 1 , 1
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 0 , 0
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 1 , 1
****************** 16
codec gsm690_12_2
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 1 , 1
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 1 , 1
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 1 , 0
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 1 , 1
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 1
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 1 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 1
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 1 , 1
****************** 24
codec gsm690_12_2
 SACCH fn = 489553 fn_report = 12
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 0 , 1
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 0 , 1
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 1 , 0
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 7
codec gsm690_12_2
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 1 , 1
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 0 , 1
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 1 , 1
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 1 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 1 , 1
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 1 , 1
****************** 16
codec gsm690_12_2
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 0 , 1
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 1 , 1
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 1 , 1
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 1 , 1
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_12_2
 SACCH fn = 489579 fn_report = 38
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 0 , 1
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 1 , 1
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 0
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 1 , 1
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 0 , 1
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 1 , 1
****************** 7
codec gsm690_12_2
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 1 , 0
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 0
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 1
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 1 , 0
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 0 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 0 , 0
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 16
codec gsm690_12_2
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 0 , 1
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_12_2
 SACCH fn = 489605 fn_report = 64
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 0 , 1
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 0
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 1 , 0
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 1 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 1 , 1
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 7
codec gsm690_12_2
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 1 , 1
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 1
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 0 , 1
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 0 , 1
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 1 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 1 , 1
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 1 , 1
****************** 16
codec gsm690_12_2
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 0 , 1
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 1 , 1
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 1 , 0
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_12_2
 SACCH fn = 489631 fn_report = 90
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 0 , 1
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 0
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 1 , 1
****************** 3
codec 1
codec gsm690_4_75
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 1
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 1 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 1
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 0 , 1
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 1
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 1 , 0
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 1 , 0
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 0 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 1 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 1 , 1
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 1
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 0 , 1
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 0 , 1
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 1 , 1
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 1
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 1
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 1 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_4_75
 SACCH fn = 489657 fn_report = 12
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 0 , 0
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 1 , 1
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 0 , 1
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 3
codec 1
codec gsm690_4_75
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 0 , 1
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 0
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 1 , 0
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 1 , 1
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 1 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 0 , 0
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 1 , 0
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 1 , 1
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 1 , 0
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 0 , 1
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 0 , 1
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 1 , 1
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 1
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 1 , 1
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 1 , 1
****************** 24
codec gsm690_4_75
 SACCH fn = 489683 fn_report = 38
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 0 , 1
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 0
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 1 , 0
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 0 , 1
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 0 , 1
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 1
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 1 , 0
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 0
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 1 , 1
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 1 , 0
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 0 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 0 , 0
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 1 , 1
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 0 , 1
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 1 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 1
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 1 , 1
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_4_75
 SACCH fn = 489709 fn_report = 64
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 0 , 1
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 0 , 1
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 1 , 0
****************** 3
codec 1
codec gsm690_4_75
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 0 , 1
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 1 , 1
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 1 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 1
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 1 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 0 , 1
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 1
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 1 , 1
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 1 , 0
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_4_75
 SACCH fn = 489735 fn_report = 90
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 1 , 0
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 0 , 0
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 0 , 1
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 1 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 1 , 1
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 1 , 0
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 1
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 1 , 0
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 1
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 1 , 1
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 1 , 0
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 1 , 1
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 1 , 1
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 1 , 1
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 1
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 1
****************** 24
codec gsm690_4_75
 SACCH fn = 489761 fn_report = 12
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 0 , 1
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 1
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 3
codec 1
codec gsm690_4_75
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 1
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 1
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 1 , 1
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 0 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 1
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 1 , 0
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 1 , 0
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 0 , 1
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 1 , 1
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 1
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 1 , 1
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_4_75
 SACCH fn = 489787 fn_report = 38
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 1 , 1
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 0
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 1 , 0
****************** 3
codec 1
codec gsm690_4_75
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 1 , 1
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 1 , 1
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 1 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 1 , 0
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 0
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 1 , 0
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 0 , 1
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 0 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 0 , 0
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 1 , 0
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 1 , 0
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 1 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 1 , 1
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_4_75
 SACCH fn = 489813 fn_report = 64
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 1
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 0 , 1
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 1
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 1 , 1
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 1 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 1
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 1 , 0
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 1
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 1
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 1 , 1
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 1 , 1
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 1 , 0
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 1 , 0
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_4_75
 SACCH fn = 489839 fn_report = 90
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 1
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 1 , 1
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 1
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 1 , 1
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 1 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 1 , 1
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 1 , 0
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 1 , 1
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 1 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 1 , 1
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 1 , 0
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 1
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 1 , 0
****************** 24
codec gsm690_4_75
 SACCH fn = 489865 fn_report = 12
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 1 , 0
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 0 , 1
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 1
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 1
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 0 , 1
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 0 , 1
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 1 , 0
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 1 , 1
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 1 , 1
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 1 , 1
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 1 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 1
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_4_75
 SACCH fn = 489891 fn_report = 38
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 0 , 1
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 0 , 1
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 0
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 1 , 1
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 1
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 0 , 1
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 1 , 1
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 0 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 0 , 0
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 1 , 1
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 1 , 0
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 0 , 1
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 1
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 1 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 1
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_4_75
 SACCH fn = 489917 fn_report = 64
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 0
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 1 , 1
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 1 , 1
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 1 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 1 , 1
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 0 , 1
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 1
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 0 , 1
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 1 , 0
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 1 , 1
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 0 , 0
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 0 , 1
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 0 , 1
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 1 , 0
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 0 , 1
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 0 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 0
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_4_75
 SACCH fn = 489943 fn_report = 90
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 1 , 1
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 0 , 0
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 1 , 0
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 0 , 0
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 1 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 0 , 1
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 1
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 1 , 1
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 0
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 0 , 1
fn % 26 = 11, fn % 13 = 11, B = 3
steal_bit 1 , 1
****************** 11
unkown codec
fn % 26 = 13, fn % 13 = 0, B = 0
steal_bit 1 , 1
fn % 26 = 14, fn % 13 = 1, B = 1
steal_bit 1 , 1
fn % 26 = 15, fn % 13 = 2, B = 2
steal_bit 0 , 1
fn % 26 = 16, fn % 13 = 3, B = 3
steal_bit 1 , 1
****************** 16
codec gsm690_4_75
fn % 26 = 17, fn % 13 = 4, B = 4
steal_bit 0 , 1
fn % 26 = 18, fn % 13 = 5, B = 5
steal_bit 0 , 1
fn % 26 = 19, fn % 13 = 6, B = 6
steal_bit 0 , 1
fn % 26 = 20, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 20
unkown codec
fn % 26 = 21, fn % 13 = 8, B = 0
steal_bit 0 , 0
fn % 26 = 22, fn % 13 = 9, B = 1
steal_bit 1 , 0
fn % 26 = 23, fn % 13 = 10, B = 2
steal_bit 0 , 1
fn % 26 = 24, fn % 13 = 11, B = 3
steal_bit 0 , 0
****************** 24
codec gsm690_4_75
 SACCH fn = 489969 fn_report = 12
fn % 26 = 0, fn % 13 = 0, B = 0
steal_bit 0 , 1
fn % 26 = 1, fn % 13 = 1, B = 1
steal_bit 1 , 0
fn % 26 = 2, fn % 13 = 2, B = 2
steal_bit 0 , 0
fn % 26 = 3, fn % 13 = 3, B = 3
steal_bit 1 , 0
****************** 3
unkown codec
fn % 26 = 4, fn % 13 = 4, B = 4
steal_bit 0 , 0
fn % 26 = 5, fn % 13 = 5, B = 5
steal_bit 0 , 0
fn % 26 = 6, fn % 13 = 6, B = 6
steal_bit 0 , 0
fn % 26 = 7, fn % 13 = 7, B = 7
steal_bit 0 , 0
****************** 7
codec gsm690_4_75
fn % 26 = 8, fn % 13 = 8, B = 0
steal_bit 1 , 1
fn % 26 = 9, fn % 13 = 9, B = 1
steal_bit 1 , 1
fn % 26 = 10, fn % 13 = 10, B = 2
steal_bit 1 , 0





--
View this message in context: http://baseband-devel.722152.n3.nabble.com/is-my-patch-for-capturing-TCH-frame-correctly-tp4025199.html
Sent from the baseband-devel mailing list archive at Nabble.com.




More information about the baseband-devel mailing list