baseband-devel
Threads by month
- ----- 2026 -----
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- 1 participants
- 2024 discussions
...a never ending story:
i have a working ftdi-ttl, but the cp2102-adapters
(http://www.ebay.de/itm/USB-2-0-to-UART-TTL-6PIN-Module-Serial-Converter-CP2…)
with the same cable dont work under ubuntu or windows.
if i rub the top of the 2.55mm with my finger random data appears. but the
loader doesnt upload the firmware.
i used the txd, rxd and gnd pins and checked the connections with a
multimeter.
i tested -m c123xor, -m c123 and the default firmware. flashing custom
baudrates was no problem.
rivers are installed correctly (stady ttyusb0 under ubuntu/ com1 under win).
is there any hint?
--
View this message in context: http://baseband-devel.722152.n3.nabble.com/cp2102-betemcu-B75937-tp3489336p…
Sent from the baseband-devel mailing list archive at Nabble.com.
3
4
OSMOCOM RECEIVING BUT NOT SENDING DATA THROUGHT TXD - HARDWARE&SOFTWARE TESTED - GNUARM&OSMOCOM BUILT FROM OSMOCOM PAGE INSTRUCTIONS
by Filipe RC - 27 Jul '12
by Filipe RC - 27 Jul '12
27 Jul '12
Hi, im having some problems in software only, that i describe bellow in my log:
-FTDI based interface sold by tronix (vendor link on your site), usb2 to serial adaptor ( model TRX1227, CHIPSET FT232R )
-gnuarm&osmocom compiled from source on debian stable as per osmocom without a single problem.
-ran osmocom from su (tried user as well), as instructed and as follows:
$ ./osmocon -p /dev/ttyUSB0 -m c123xor ../../target/firmware/board/compal_e88/loader.compalram.bin
output:
whenever power button was pressed, all i got was some aparently random hex…(no expert on phone flashing here) with no getting to PROMPT1:
"root@box:/home/box/osmocomm/osmocom-bb/src/host/osmocon# sudo ./osmocon -p /dev/ttyUSB0 -m c123 ../../target/firmware/board/compal_e88/loader.compalram.bin
got 1 bytes from modem, data looks like: 00 .
got 2 bytes from modem, data looks like: 00 00 ..
got 3 bytes from modem, data looks like: 72 82 bf r..
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: a6 .
got 1 bytes from modem, data looks like: 51 Q
got 1 bytes from modem, data looks like: d2 .
got 1 bytes from modem, data looks like: 51 Q
got 1 bytes from modem, data looks like: b2 .
got 1 bytes from modem, data looks like: a4 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 4d M
got 1 bytes from modem, data looks like: a3 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
2nd press:
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
third press:
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 72 r
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
fourth press:
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 72 r
got 1 bytes from modem, data looks like: 82 .
got 1 bytes from modem, data looks like: bf .
got 1 bytes from modem, data looks like: 7d }
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: a6 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
got 1 bytes from modem, data looks like: 00 .
"
Same output, (maybe with a few more presses) in hex, using gtkterm@115200baud,8bit,nopar,1stop:
"
00 F1 00 72 82 BF 7D FD 7F 00 A6 51 D2 51 B2 A4 12 00 4D A3 A3 68 23 00 00 00 F1 00 72 82 BF 7D FD 7F 00 A6 51 D2 51 A4 A4 12 00 4D A3 A3 68 23 00 00 00 F1 00 72 82 BF 7D FD 7F 00 A6 51 D2 51 B2 A4 12 00 4D A3 A3 64 23 00 00 00 F1 00 72 82 BF 7D FD 7F 00 A6 51 D2 51 A4 A4 12 00 4D A3 A3 64 23 00 00 00 F1 00 72 82 BF 7D FD 7F 00 A6 51 D2 51 B2 A4 12 00 4D A3 A3 48 23 00 00 00 F1 00 72 82 BF 7D FD 7F 00 A6 51 D2 51 B2 A4 12 00 4D A3 A3 64 23 00 00 00 F1 00 72 82 BF 7D FD 7F 00 A6 51 D2 51 B4 A4 12 00 4D A3 A3 48 23 00 00 00 F1 00 72 82 BF 7D FD 7F 00 A6 51 D2 51 A4 A4 12 00 4D A3 A3 48 23 00 00
"
-/dev/USB0 permission check - good, even chmoded 777&chown on rc.local.
-cable check: thought txd was broken, but wasnt. checked from linux
with a led stuck to the txd end of the jack, echo "whatever" > /dev/ttyUSB0, led did flash.
-chances i put are:
osmocom dependent on some specific C123 firmware?
some kind of hidden compilation complication?
some kind of ftdi eeprom config/bitrate/parity config missing for osmocom?
I hope i have managed to be concise enough.
Great work guys.
Greatings from portugal,
Filipe RC
1
1
Hello. I have some motorola phones that they are no longer required by my
friends. These phones are with the filter rework done. The phones are
complete with serial and antenna cables but can be sent without them. If
anyone is interested, please send me a msg at irc (OsmoCarpenteR), do not
reply to this msg. Thanks.
1
0
Hi,List
I use a TCH/AFS decoder written by Sylvain Munaut and mad to decode the TCH
AMR, but it seems there are some bug, but I am not familiar with the
convolution codes, the code is following, who are familiar can help me?
very thanks!
/*
* conv_amr.c
*
* Convolutional code tables for TCH/AFS channels
*
* Copyright (C) 2011 Sylvain Munaut <tnt(a)246tNt.com>
*/
#include <stdint.h>
#include <osmocom/core/conv.h>
/* TCH/AFS12.2 */
/* ----------- */
//# AFS12.2 1/2, K=5, RSC
static const uint8_t conv_afs12_2_next_output[][2] =
{{0, 3}, {1, 2}, {0, 3}, {1, 2}, {0, 3}, {1, 2}, {0, 3}, {1, 2}, {0, 3}, {1,
2}, {0, 3}, {1, 2}, {0, 3}, {1, 2}, {0, 3}, {1, 2},};
static const uint8_t conv_afs12_2_next_state[][2] =
{{0, 1}, {2, 3}, {4, 5}, {6, 7}, {9, 8}, {11, 10}, {13, 12}, {15, 14}, {1,
0}, {3, 2}, {5, 4}, {7, 6}, {8, 9}, {10, 11}, {12, 13}, {14, 15},};
static const uint8_t conv_afs12_2_next_term_output[] =
{0, 1, 0, 1, 3, 2, 3, 2, 3, 2, 3, 2, 0, 1, 0, 1,};
static const uint8_t conv_afs12_2_next_term_state[] =
{0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30,};
static const uint16_t conv_afs12_2_punct[] =
{321, 325, 329, 333, 337, 341, 345, 349, 353, 357, 361, 363, 365,
369, 373, 377, 379, 381, 385, 389, 393, 395, 397, 401, 405, 409,
411, 413, 417, 421, 425, 427, 429, 433, 437, 441, 443, 445, 449,
453, 457, 459, 461, 465, 469, 473, 475, 477, 481, 485, 489, 491,
493, 495, 497, 499, 501, 503, 505, 507, -1,};
const struct osmo_conv_code conv_tch_afs_12_2 = {
.N = 2,
.K = 5,
.len = 250,
.next_output = conv_afs12_2_next_output,
.next_state = conv_afs12_2_next_state,
.next_term_output = conv_afs12_2_next_term_output,
.next_term_state = conv_afs12_2_next_term_state,
.puncture = conv_afs12_2_punct,
};
//# AFS10.2 1/3, K=5, RSC
static const uint8_t conv_afs10_2_next_output[][2] =
{{0, 7}, {2, 5}, {4, 3}, {6, 1}, {2, 5}, {0, 7}, {6, 1}, {4, 3}, {0, 7}, {2,
5}, {4, 3}, {6, 1}, {2, 5}, {0, 7}, {6, 1}, {4, 3},};
static const uint8_t conv_afs10_2_next_state[][2] =
{{0, 1}, {3, 2}, {5, 4}, {6, 7}, {9, 8}, {10, 11}, {12, 13}, {15, 14}, {1,
0}, {2, 3}, {4, 5}, {7, 6}, {8, 9}, {11, 10}, {13, 12}, {14, 15},};
static const uint8_t conv_afs10_2_next_term_output[] =
{0, 5, 3, 6, 5, 0, 6, 3, 7, 2, 4, 1, 2, 7, 1, 4,};
static const uint8_t conv_afs10_2_next_term_state[] =
{0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14,};
const uint16_t conv_afs10_2_punct[] =
{1, 4, 7, 10, 16, 19, 22, 28, 31, 34, 40, 43, 46, 52, 55, 58,
64, 67, 70, 76, 79, 82, 88, 91, 94, 100, 103, 106, 112, 115,
118, 124, 127, 130, 136, 139, 142, 148, 151, 154, 160, 163, 166,
172, 175, 178, 184, 187, 190, 196, 199, 202, 208, 211, 214, 220,
223, 226, 232, 235, 238, 244, 247, 250, 256, 259, 262, 268, 271,
274, 280, 283, 286, 292, 295, 298, 304, 307, 310, 316, 319, 322,
325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361,
364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400,
403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439,
442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478,
481, 484, 487, 490, 493, 496, 499, 502, 505, 508, 511, 514, 517,
520, 523, 526, 529, 532, 535, 538, 541, 544, 547, 550, 553, 556,
559, 562, 565, 568, 571, 574, 577, 580, 583, 586, 589, 592, 595,
598, 601, 604, 607, 609, 610, 613, 616, 619, 621, 622, 625, 627,
628, 631, 633, 634, 636, 637, 639, 640, -1,};
const struct osmo_conv_code conv_tch_afs_10_2 = {
.N = 3,
.K = 5,
.len = 210,
.next_output = conv_afs10_2_next_output,
.next_state = conv_afs10_2_next_state,
.next_term_output = conv_afs10_2_next_term_output,
.next_term_state = conv_afs10_2_next_term_state,
.puncture = conv_afs10_2_punct,
};
//# AFS7.95 1/3, K=7, RSC
static const uint8_t conv_afs7_95_next_output[][2] =
{{0, 7}, {3, 4}, {2, 5}, {1, 6}, {2, 5}, {1, 6}, {0, 7}, {3, 4}, {3, 4}, {0,
7}, {1, 6}, {2, 5}, {1, 6}, {2, 5}, {3, 4}, {0, 7}, {3, 4}, {0, 7}, {1, 6},
{2, 5}, {1, 6}, {2, 5}, {3, 4}, {0, 7}, {0, 7}, {3, 4}, {2, 5}, {1, 6}, {2,
5}, {1, 6}, {0, 7}, {3, 4}, {0, 7}, {3, 4}, {2, 5}, {1, 6}, {2, 5}, {1, 6},
{0, 7}, {3, 4}, {3, 4}, {0, 7}, {1, 6}, {2, 5}, {1, 6}, {2, 5}, {3, 4}, {0,
7}, {3, 4}, {0, 7}, {1, 6}, {2, 5}, {1, 6}, {2, 5}, {3, 4}, {0, 7}, {0, 7},
{3, 4}, {2, 5}, {1, 6}, {2, 5}, {1, 6}, {0, 7}, {3, 4},};
static const uint8_t conv_afs7_95_next_state[][2] =
{{0, 1}, {2, 3}, {5, 4}, {7, 6}, {9, 8}, {11, 10}, {12, 13}, {14, 15}, {16,
17}, {18, 19}, {21, 20}, {23, 22}, {25, 24}, {27, 26}, {28, 29}, {30, 31},
{33, 32}, {35, 34}, {36, 37}, {38, 39}, {40, 41}, {42, 43}, {45, 44}, {47,
46}, {49, 48}, {51, 50}, {52, 53}, {54, 55}, {56, 57}, {58, 59}, {61, 60},
{63, 62}, {1, 0}, {3, 2}, {4, 5}, {6, 7}, {8, 9}, {10, 11}, {13, 12}, {15,
14}, {17, 16}, {19, 18}, {20, 21}, {22, 23}, {24, 25}, {26, 27}, {29, 28},
{31, 30}, {32, 33}, {34, 35}, {37, 36}, {39, 38}, {41, 40}, {43, 42}, {44,
45}, {46, 47}, {48, 49}, {50, 51}, {53, 52}, {55, 54}, {57, 56}, {59, 58},
{60, 61}, {62, 63},};
static const uint8_t conv_afs7_95_next_term_output[] =
{0, 3, 5, 6, 5, 6, 0, 3, 3, 0, 6, 5, 6, 5, 3, 0, 4, 7, 1, 2, 1, 2, 4, 7, 7,
4, 2, 1, 2, 1, 7, 4, 7, 4, 2, 1, 2, 1, 7, 4, 4, 7, 1, 2, 1, 2, 4, 7, 3, 0,
6, 5, 6, 5, 3, 0, 0, 3, 5, 6, 5, 6, 0, 3,};
static const uint8_t conv_afs7_95_next_term_state[] =
{0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,
40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 0, 2, 4, 6, 8, 10, 12, 14,
16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52,
54, 56, 58, 60, 62,};
const uint16_t conv_afs7_95_punct[] =
{1, 2, 4, 5, 8, 22, 70, 118, 166, 214, 262, 310, 317, 319, 325,
332, 334, 341, 343, 349, 356, 358, 365, 367, 373, 380, 382, 385,
389, 391, 397, 404, 406, 409, 413, 415, 421, 428, 430, 433, 437,
439, 445, 452, 454, 457, 461, 463, 469, 476, 478, 481, 485, 487,
490, 493, 500, 502, 503, 505, 506, 508, 509, 511, 512, -1,};
const struct osmo_conv_code conv_tch_afs_7_95 = {
.N = 3,
.K = 7,
.len = 165,
.next_output = conv_afs7_95_next_output,
.next_state = conv_afs7_95_next_state,
.next_term_output = conv_afs7_95_next_term_output,
.next_term_state = conv_afs7_95_next_term_state,
.puncture = conv_afs7_95_punct,
};
//# AFS 7.4 1/3, K=5, RSC (2)
static const uint8_t conv_afs7_4_next_output[][2] =
{{0, 7}, {2, 5}, {4, 3}, {6, 1}, {2, 5}, {0, 7}, {6, 1}, {4, 3}, {0, 7}, {2,
5}, {4, 3}, {6, 1}, {2, 5}, {0, 7}, {6, 1}, {4, 3},};
static const uint8_t conv_afs7_4_next_state[][2] =
{{0, 1}, {3, 2}, {5, 4}, {6, 7}, {9, 8}, {10, 11}, {12, 13}, {15, 14}, {1,
0}, {2, 3}, {4, 5}, {7, 6}, {8, 9}, {11, 10}, {13, 12}, {14, 15},};
static const uint8_t conv_afs7_4_next_term_output[] =
{0, 5, 3, 6, 5, 0, 6, 3, 7, 2, 4, 1, 2, 7, 1, 4,};
static const uint8_t conv_afs7_4_next_term_state[] =
{0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14,};
const uint16_t conv_afs7_4_punct[] =
{0, 355, 361, 367, 373, 379, 385, 391, 397, 403, 409, 415, 421,
427, 433, 439, 445, 451, 457, 460, 463, 466, 468, 469, 471,
472, -1,};
const struct osmo_conv_code conv_tch_afs_7_4 = {
.N = 3,
.K = 5,
.len = 154,
.next_output = conv_afs7_4_next_output,
.next_state = conv_afs7_4_next_state,
.next_term_output = conv_afs7_4_next_term_output,
.next_term_state = conv_afs7_4_next_term_state,
.puncture = conv_afs7_4_punct,
};
//# AFS6.7 1/4, K=5, RSC
static const uint8_t conv_afs6_7_next_output[][2] =
{{0, 15}, {4, 11}, {8, 7}, {12, 3}, {4, 11}, {0, 15}, {12, 3}, {8, 7}, {0,
15}, {4, 11}, {8, 7}, {12, 3}, {4, 11}, {0, 15}, {12, 3}, {8, 7},};
static const uint8_t conv_afs6_7_next_state[][2] =
{{0, 1}, {3, 2}, {5, 4}, {6, 7}, {9, 8}, {10, 11}, {12, 13}, {15, 14}, {1,
0}, {2, 3}, {4, 5}, {7, 6}, {8, 9}, {11, 10}, {13, 12}, {14, 15},};
static const uint8_t conv_afs6_7_next_term_output[] =
{0, 11, 7, 12, 11, 0, 12, 7, 15, 4, 8, 3, 4, 15, 3, 8,};
static const uint8_t conv_afs6_7_next_term_state[] =
{0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14,};
const uint16_t conv_afs6_7_punct[] =
{1, 3, 7, 11, 15, 27, 39, 55, 67, 79, 95, 107, 119, 135, 147,
159, 175, 187, 199, 215, 227, 239, 255, 267, 279, 287, 291, 295,
299, 303, 307, 311, 315, 319, 323, 327, 331, 335, 339, 343, 347,
351, 355, 359, 363, 367, 369, 371, 375, 377, 379, 383, 385, 387,
391, 393, 395, 399, 401, 403, 407, 409, 411, 415, 417, 419, 423,
425, 427, 431, 433, 435, 439, 441, 443, 447, 449, 451, 455, 457,
459, 463, 465, 467, 471, 473, 475, 479, 481, 483, 487, 489, 491,
495, 497, 499, 503, 505, 507, 511, 513, 515, 519, 521, 523, 527,
529, 531, 535, 537, 539, 543, 545, 547, 549, 551, 553, 555, 557,
559, 561, 563, 565, 567, 569, 571, 573, 575, -1,};
const struct osmo_conv_code conv_tch_afs_6_7 = {
.N = 4,
.K = 5,
.len = 140,
.next_output = conv_afs6_7_next_output,
.next_state = conv_afs6_7_next_state,
.next_term_output = conv_afs6_7_next_term_output,
.next_term_state = conv_afs6_7_next_term_state,
.puncture = conv_afs6_7_punct,
};
//# AFS5.9 1/4, K=7, RSC
static const uint8_t conv_afs5_9_next_output[][2] =
{{0, 15}, {8, 7}, {4, 11}, {12, 3}, {4, 11}, {12, 3}, {0, 15}, {8, 7}, {8,
7}, {0, 15}, {12, 3}, {4, 11}, {12, 3}, {4, 11}, {8, 7}, {0, 15}, {8, 7},
{0, 15}, {12, 3}, {4, 11}, {12, 3}, {4, 11}, {8, 7}, {0, 15}, {0, 15}, {8,
7}, {4, 11}, {12, 3}, {4, 11}, {12, 3}, {0, 15}, {8, 7}, {0, 15}, {8, 7},
{4, 11}, {12, 3}, {4, 11}, {12, 3}, {0, 15}, {8, 7}, {8, 7}, {0, 15}, {12,
3}, {4, 11}, {12, 3}, {4, 11}, {8, 7}, {0, 15}, {8, 7}, {0, 15}, {12, 3},
{4, 11}, {12, 3}, {4, 11}, {8, 7}, {0, 15}, {0, 15}, {8, 7}, {4, 11}, {12,
3}, {4, 11}, {12, 3}, {0, 15}, {8, 7},};
static const uint8_t conv_afs5_9_next_state[][2] =
{{0, 1}, {3, 2}, {5, 4}, {6, 7}, {9, 8}, {10, 11}, {12, 13}, {15, 14}, {17,
16}, {18, 19}, {20, 21}, {23, 22}, {24, 25}, {27, 26}, {29, 28}, {30, 31},
{32, 33}, {35, 34}, {37, 36}, {38, 39}, {41, 40}, {42, 43}, {44, 45}, {47,
46}, {49, 48}, {50, 51}, {52, 53}, {55, 54}, {56, 57}, {59, 58}, {61, 60},
{62, 63}, {1, 0}, {2, 3}, {4, 5}, {7, 6}, {8, 9}, {11, 10}, {13, 12}, {14,
15}, {16, 17}, {19, 18}, {21, 20}, {22, 23}, {25, 24}, {26, 27}, {28, 29},
{31, 30}, {33, 32}, {34, 35}, {36, 37}, {39, 38}, {40, 41}, {43, 42}, {45,
44}, {46, 47}, {48, 49}, {51, 50}, {53, 52}, {54, 55}, {57, 56}, {58, 59},
{60, 61}, {63, 62},};
static const uint8_t conv_afs5_9_next_term_output[] =
{0, 7, 11, 12, 11, 12, 0, 7, 7, 0, 12, 11, 12, 11, 7, 0, 8, 15, 3, 4, 3, 4,
8, 15, 15, 8, 4, 3, 4, 3, 15, 8, 15, 8, 4, 3, 4, 3, 15, 8, 8, 15, 3, 4, 3,
4, 8, 15, 7, 0, 12, 11, 12, 11, 7, 0, 0, 7, 11, 12, 11, 12, 0, 7,};
static const uint8_t conv_afs5_9_next_term_state[] =
{0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,
40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 0, 2, 4, 6, 8, 10, 12, 14,
16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52,
54, 56, 58, 60, 62,};
const uint16_t conv_afs5_9_punct[] =
{0, 1, 3, 5, 7, 11, 15, 31, 47, 63, 79, 95, 111, 127, 143,
159, 175, 191, 207, 223, 239, 255, 271, 287, 303, 319, 327, 331,
335, 343, 347, 351, 359, 363, 367, 375, 379, 383, 391, 395, 399,
407, 411, 415, 423, 427, 431, 439, 443, 447, 455, 459, 463, 467,
471, 475, 479, 483, 487, 491, 495, 499, 503, 507, 509, 511, 512,
513, 515, 516, 517, 519, -1,};
const struct osmo_conv_code conv_tch_afs_5_9 = {
.N = 4,
.K = 7,
.len = 124,
.next_output = conv_afs5_9_next_output,
.next_state = conv_afs5_9_next_state,
.next_term_output = conv_afs5_9_next_term_output,
.next_term_state = conv_afs5_9_next_term_state,
.puncture = conv_afs5_9_punct,
};
//# AFS5.15 1/5, K=5, RSC
static const uint8_t conv_afs5_15_next_output[][2] =
{{0, 31}, {4, 27}, {24, 7}, {28, 3}, {4, 27}, {0, 31}, {28, 3}, {24, 7}, {0,
31}, {4, 27}, {24, 7}, {28, 3}, {4, 27}, {0, 31}, {28, 3}, {24, 7},};
static const uint8_t conv_afs5_15_next_state[][2] =
{{0, 1}, {3, 2}, {5, 4}, {6, 7}, {9, 8}, {10, 11}, {12, 13}, {15, 14}, {1,
0}, {2, 3}, {4, 5}, {7, 6}, {8, 9}, {11, 10}, {13, 12}, {14, 15},};
static const uint8_t conv_afs5_15_next_term_output[] =
{0, 27, 7, 28, 27, 0, 28, 7, 31, 4, 24, 3, 4, 31, 3, 24,};
static const uint8_t conv_afs5_15_next_term_state[] =
{0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14,};
const uint16_t conv_afs5_15_punct[] =
{0, 4, 5, 9, 10, 14, 15, 20, 25, 30, 35, 40, 50, 60, 70,
80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180,190, 200,
210, 220, 230, 240, 250, 260, 270, 280,290, 300, 310, 315, 320,
325, 330, 334, 335, 340, 344, 345, 350, 354, 355, 360, 364, 365,
370, 374, 375, 380, 384, 385, 390, 394, 395, 400, 404, 405, 410,
414, 415, 420, 424, 425, 430, 434, 435, 440, 444, 445, 450, 454,
455, 460, 464, 465, 470, 474, 475, 480, 484, 485, 490, 494, 495,
500, 504, 505, 510, 514, 515, 520, 524, 525, 529, 530, 534, 535,
539, 540, 544, 545, 549, 550, 554, 555, 559, 560, 564, -1,};
const struct osmo_conv_code conv_tch_afs_5_15 = {
.N = 5,
.K = 5,
.len = 109,
.next_output = conv_afs5_15_next_output,
.next_state = conv_afs5_15_next_state,
.next_term_output = conv_afs5_15_next_term_output,
.next_term_state = conv_afs5_15_next_term_state,
.puncture = conv_afs5_15_punct,
};
//# AFS4.75 1/5, K=7, RSC
static const uint8_t conv_afs4_75_next_output[][2] =
{{0, 31}, {24, 7}, {4, 27}, {28, 3}, {4, 27}, {28, 3}, {0, 31}, {24, 7},
{24, 7}, {0, 31}, {28, 3}, {4, 27}, {28, 3}, {4, 27}, {24, 7}, {0, 31}, {24,
7}, {0, 31}, {28, 3}, {4, 27}, {28, 3}, {4, 27}, {24, 7}, {0, 31}, {0, 31},
{24, 7}, {4, 27}, {28, 3}, {4, 27}, {28, 3}, {0, 31}, {24, 7}, {0, 31}, {24,
7}, {4, 27}, {28, 3}, {4, 27}, {28, 3}, {0, 31}, {24, 7}, {24, 7}, {0, 31},
{28, 3}, {4, 27}, {28, 3}, {4, 27}, {24, 7}, {0, 31}, {24, 7}, {0, 31}, {28,
3}, {4, 27}, {28, 3}, {4, 27}, {24, 7}, {0, 31}, {0, 31}, {24, 7}, {4, 27},
{28, 3}, {4, 27}, {28, 3}, {0, 31}, {24, 7},};
static const uint8_t conv_afs4_75_next_state[][2] =
{{0, 1}, {3, 2}, {5, 4}, {6, 7}, {9, 8}, {10, 11}, {12, 13}, {15, 14}, {17,
16}, {18, 19}, {20, 21}, {23, 22}, {24, 25}, {27, 26}, {29, 28}, {30, 31},
{32, 33}, {35, 34}, {37, 36}, {38, 39}, {41, 40}, {42, 43}, {44, 45}, {47,
46}, {49, 48}, {50, 51}, {52, 53}, {55, 54}, {56, 57}, {59, 58}, {61, 60},
{62, 63}, {1, 0}, {2, 3}, {4, 5}, {7, 6}, {8, 9}, {11, 10}, {13, 12}, {14,
15}, {16, 17}, {19, 18}, {21, 20}, {22, 23}, {25, 24}, {26, 27}, {28, 29},
{31, 30}, {33, 32}, {34, 35}, {36, 37}, {39, 38}, {40, 41}, {43, 42}, {45,
44}, {46, 47}, {48, 49}, {51, 50}, {53, 52}, {54, 55}, {57, 56}, {58, 59},
{60, 61}, {63, 62},};
static const uint8_t conv_afs4_75_next_term_output[] =
{0, 7, 27, 28, 27, 28, 0, 7, 7, 0, 28, 27, 28, 27, 7, 0, 24, 31, 3, 4, 3, 4,
24, 31, 31, 24, 4, 3, 4, 3, 31, 24, 31, 24, 4, 3, 4, 3, 31, 24, 24, 31, 3,
4, 3, 4, 24, 31, 7, 0, 28, 27, 28, 27, 7, 0, 0, 7, 27, 28, 27, 28, 0, 7,};
static const uint8_t conv_afs4_75_next_term_state[] =
{0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,
40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 0, 2, 4, 6, 8, 10, 12, 14,
16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52,
54, 56, 58, 60, 62,};
const uint16_t conv_afs4_75_punct[] =
{0, 1, 2, 4, 5, 7, 9, 15, 25, 35, 45, 55, 65, 75, 85, 95,
105, 115, 125, 135, 145, 155, 165, 175, 185, 195, 205, 215, 225,
235, 245, 255, 265, 275, 285, 295, 305, 315, 325, 335, 345, 355,
365, 375, 385, 395, 400, 405, 410, 415, 420, 425, 430, 435, 440,
445, 450, 455, 459, 460, 465, 470, 475, 479, 480, 485, 490, 495,
499, 500, 505, 509, 510, 515, 517, 519, 520, 522, 524, 525, 526,
527, 529, 530, 531, 532, 534, -1,};
const struct osmo_conv_code conv_tch_afs_4_75 = {
.N = 5,
.K = 7,
.len = 101,
.next_output = conv_afs4_75_next_output,
.next_state = conv_afs4_75_next_state,
.next_term_output = conv_afs4_75_next_term_output,
.next_term_state = conv_afs4_75_next_term_state,
.puncture = conv_afs4_75_punct,
};
--
View this message in context: http://baseband-devel.722152.n3.nabble.com/The-AMR-decode-segmentation-faul…
Sent from the baseband-devel mailing list archive at Nabble.com.
1
0
Hi all!
On Wednesday, 25th of July we would have the next Osmocom meeting
berlin. However, neither Holger nor I will be in Berlin on that day to
host the event. I also know that Tobias will not be in Berlin.
Nonetheless, if there are other people that want to meet up, there is no
reason to not hold it! So I would like to get some feedback on who
would want to attend next wednesday. If there are a couple of people,
I'll try to find somebody who can open the CCCB for you.
Regards,
Harald
--
- Harald Welte <laforge(a)gnumonks.org> http://laforge.gnumonks.org/
============================================================================
"Privacy in residential applications is a desirable marketing option."
(ETSI EN 300 175-7 Ch. A6)
7
9
On 22 July 2012 14:26, Tyson Key <tyson.key(a)gmail.com> wrote:
> Hi Thomas,
>
> Although myself and a few others (Denis?) have tentatively volunteered to
> work on it, no-one has actually requested (or received) the hardware itself
> yet, as far as I know. If I remember correctly, two phones were available -
> so it might be possible to share the workload, if arrangements can be made
> regarding logistics.
>
Hi, well I can start to work on it immediately, however I'm not sure
whether one or two phones were actually available, so if it's only
one, it won't be possible to share the workload.
> If you're interested, then I'd suggest asking Harald for a copy of the
> protocol specification to read through, to determine its feasibility in
> order to figure out how long you think it would take.
I've already received it, it doesn't seem an excessively long work but
at the moment it would be difficult to do a precise estimation.
> I hope that helps,
>
> Tyson.
Thank you for the update,
Thomas
1
0
I am a mac and NetBSD user and have not run any linux systems for many years.
I have never used Debian/Ubuntu/etc.
Now I would like to begin doing work with osmocom, GNU radio, SDRs and some
android development.
I knw it's a religious question, but since I am starting with a completely
blank slate, what would be the simplest, most painless distro to set up a
development and build environment (cross compiling for arm, building osmocom,
gnu radio, and running android development tools and SDKs) ?
I assume the answer must be either Debian or Ubuntu, but really have no idea
... comments ?
I think the nicest thing would be a distro that *already* had a full complement
of the GNU devel/conf/build tools that all the examples in the wiki rely on ...
so I wouldn;t have to worry about getting that environment up from scratch ...
Thanks.
5
6
Hi,
I've hacked something together to quickly test non-combined CCCH.
However, I've hit a problem when trying to receive anything on another
timeslot than 0.
The TX side seems to work fine as the BTS can see my location update
request and answers with a reject, but on the MS side, I never see the
reject and wireshark only shows invalid incohrent data on the RX.
The frames for SDCCH/8 show really nothing valid (looks like random
bytes), things like
09 80 7f 47 49 06 1d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
09 00 47 d5 2d 06 1e 00 00 69 7c a0 91 3d 22 ff ab fe 6c 4f 56 4f 36
...
while the frames for the associated SAACH show at least something gsm-like :
03 03 01 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b 2b
but that's not quite a SI5/6 ...
To RX/TX on TS=1, I just delayed the RX/TX window by 625 bits (4 *
156.25) when I'm in dedicated channel mode by chaning the 'start' in
l1s_tx_win_ctrl / l1s_rx_win_ctrl
Is there something else that should be done ?
Cheers,
Sylvain
2
5
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-fr…
Sent from the baseband-devel mailing list archive at Nabble.com.
2
1
Hello,
I am using a mobile phone with OsmocomBB on it, but with transmission
disabled, because I dont have a private GSM-Network.
Do you think it is save to turn tramission on or is Osmocom not reliable
enough?
greetz
Martin Haug
_________________________________________________________________
Free-Mail Postfach (bis zu 10 GB E-Mail-Speicher)
SMS, MMS, Fax und vieles mehr - http://www.smart-mail.de
1
0