This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/baseband-devel@lists.osmocom.org/.
bob avwiseav at gmail.comHi, 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.