is my patch for capturing TCH frame correctly?
bob
avwiseav at gmail.com
Thu Jul 19 10:58:28 CEST 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, <);
+
+ 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, <);
+ /* 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