1*8ec969ceSTreehugger Robot /* 2*8ec969ceSTreehugger Robot * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische 3*8ec969ceSTreehugger Robot * Universitaet Berlin. See the accompanying file "COPYRIGHT" for 4*8ec969ceSTreehugger Robot * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. 5*8ec969ceSTreehugger Robot */ 6*8ec969ceSTreehugger Robot 7*8ec969ceSTreehugger Robot /* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/gsm_decode.c,v 1.2 1996/07/02 09:59:05 jutta Exp $ */ 8*8ec969ceSTreehugger Robot 9*8ec969ceSTreehugger Robot #include "private.h" 10*8ec969ceSTreehugger Robot 11*8ec969ceSTreehugger Robot #include "gsm.h" 12*8ec969ceSTreehugger Robot #include "proto.h" 13*8ec969ceSTreehugger Robot 14*8ec969ceSTreehugger Robot int gsm_decode P3((s, c, target), gsm s, gsm_byte * c, gsm_signal * target) 15*8ec969ceSTreehugger Robot { 16*8ec969ceSTreehugger Robot word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4]; 17*8ec969ceSTreehugger Robot 18*8ec969ceSTreehugger Robot #ifdef WAV49 19*8ec969ceSTreehugger Robot if (s->wav_fmt) { 20*8ec969ceSTreehugger Robot 21*8ec969ceSTreehugger Robot uword sr = 0; 22*8ec969ceSTreehugger Robot 23*8ec969ceSTreehugger Robot s->frame_index = !s->frame_index; 24*8ec969ceSTreehugger Robot if (s->frame_index) { 25*8ec969ceSTreehugger Robot 26*8ec969ceSTreehugger Robot sr = *c++; 27*8ec969ceSTreehugger Robot LARc[0] = sr & 0x3f; sr >>= 6; 28*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 2; 29*8ec969ceSTreehugger Robot LARc[1] = sr & 0x3f; sr >>= 6; 30*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 4; 31*8ec969ceSTreehugger Robot LARc[2] = sr & 0x1f; sr >>= 5; 32*8ec969ceSTreehugger Robot LARc[3] = sr & 0x1f; sr >>= 5; 33*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 2; 34*8ec969ceSTreehugger Robot LARc[4] = sr & 0xf; sr >>= 4; 35*8ec969ceSTreehugger Robot LARc[5] = sr & 0xf; sr >>= 4; 36*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 2; /* 5 */ 37*8ec969ceSTreehugger Robot LARc[6] = sr & 0x7; sr >>= 3; 38*8ec969ceSTreehugger Robot LARc[7] = sr & 0x7; sr >>= 3; 39*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 4; 40*8ec969ceSTreehugger Robot Nc[0] = sr & 0x7f; sr >>= 7; 41*8ec969ceSTreehugger Robot bc[0] = sr & 0x3; sr >>= 2; 42*8ec969ceSTreehugger Robot Mc[0] = sr & 0x3; sr >>= 2; 43*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; 44*8ec969ceSTreehugger Robot xmaxc[0] = sr & 0x3f; sr >>= 6; 45*8ec969ceSTreehugger Robot xmc[0] = sr & 0x7; sr >>= 3; 46*8ec969ceSTreehugger Robot sr = *c++; 47*8ec969ceSTreehugger Robot xmc[1] = sr & 0x7; sr >>= 3; 48*8ec969ceSTreehugger Robot xmc[2] = sr & 0x7; sr >>= 3; 49*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 2; 50*8ec969ceSTreehugger Robot xmc[3] = sr & 0x7; sr >>= 3; 51*8ec969ceSTreehugger Robot xmc[4] = sr & 0x7; sr >>= 3; 52*8ec969ceSTreehugger Robot xmc[5] = sr & 0x7; sr >>= 3; 53*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; /* 10 */ 54*8ec969ceSTreehugger Robot xmc[6] = sr & 0x7; sr >>= 3; 55*8ec969ceSTreehugger Robot xmc[7] = sr & 0x7; sr >>= 3; 56*8ec969ceSTreehugger Robot xmc[8] = sr & 0x7; sr >>= 3; 57*8ec969ceSTreehugger Robot sr = *c++; 58*8ec969ceSTreehugger Robot xmc[9] = sr & 0x7; sr >>= 3; 59*8ec969ceSTreehugger Robot xmc[10] = sr & 0x7; sr >>= 3; 60*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 2; 61*8ec969ceSTreehugger Robot xmc[11] = sr & 0x7; sr >>= 3; 62*8ec969ceSTreehugger Robot xmc[12] = sr & 0x7; sr >>= 3; 63*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 4; 64*8ec969ceSTreehugger Robot Nc[1] = sr & 0x7f; sr >>= 7; 65*8ec969ceSTreehugger Robot bc[1] = sr & 0x3; sr >>= 2; 66*8ec969ceSTreehugger Robot Mc[1] = sr & 0x3; sr >>= 2; 67*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; 68*8ec969ceSTreehugger Robot xmaxc[1] = sr & 0x3f; sr >>= 6; 69*8ec969ceSTreehugger Robot xmc[13] = sr & 0x7; sr >>= 3; 70*8ec969ceSTreehugger Robot sr = *c++; /* 15 */ 71*8ec969ceSTreehugger Robot xmc[14] = sr & 0x7; sr >>= 3; 72*8ec969ceSTreehugger Robot xmc[15] = sr & 0x7; sr >>= 3; 73*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 2; 74*8ec969ceSTreehugger Robot xmc[16] = sr & 0x7; sr >>= 3; 75*8ec969ceSTreehugger Robot xmc[17] = sr & 0x7; sr >>= 3; 76*8ec969ceSTreehugger Robot xmc[18] = sr & 0x7; sr >>= 3; 77*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; 78*8ec969ceSTreehugger Robot xmc[19] = sr & 0x7; sr >>= 3; 79*8ec969ceSTreehugger Robot xmc[20] = sr & 0x7; sr >>= 3; 80*8ec969ceSTreehugger Robot xmc[21] = sr & 0x7; sr >>= 3; 81*8ec969ceSTreehugger Robot sr = *c++; 82*8ec969ceSTreehugger Robot xmc[22] = sr & 0x7; sr >>= 3; 83*8ec969ceSTreehugger Robot xmc[23] = sr & 0x7; sr >>= 3; 84*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 2; 85*8ec969ceSTreehugger Robot xmc[24] = sr & 0x7; sr >>= 3; 86*8ec969ceSTreehugger Robot xmc[25] = sr & 0x7; sr >>= 3; 87*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 4; /* 20 */ 88*8ec969ceSTreehugger Robot Nc[2] = sr & 0x7f; sr >>= 7; 89*8ec969ceSTreehugger Robot bc[2] = sr & 0x3; sr >>= 2; 90*8ec969ceSTreehugger Robot Mc[2] = sr & 0x3; sr >>= 2; 91*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; 92*8ec969ceSTreehugger Robot xmaxc[2] = sr & 0x3f; sr >>= 6; 93*8ec969ceSTreehugger Robot xmc[26] = sr & 0x7; sr >>= 3; 94*8ec969ceSTreehugger Robot sr = *c++; 95*8ec969ceSTreehugger Robot xmc[27] = sr & 0x7; sr >>= 3; 96*8ec969ceSTreehugger Robot xmc[28] = sr & 0x7; sr >>= 3; 97*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 2; 98*8ec969ceSTreehugger Robot xmc[29] = sr & 0x7; sr >>= 3; 99*8ec969ceSTreehugger Robot xmc[30] = sr & 0x7; sr >>= 3; 100*8ec969ceSTreehugger Robot xmc[31] = sr & 0x7; sr >>= 3; 101*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; 102*8ec969ceSTreehugger Robot xmc[32] = sr & 0x7; sr >>= 3; 103*8ec969ceSTreehugger Robot xmc[33] = sr & 0x7; sr >>= 3; 104*8ec969ceSTreehugger Robot xmc[34] = sr & 0x7; sr >>= 3; 105*8ec969ceSTreehugger Robot sr = *c++; /* 25 */ 106*8ec969ceSTreehugger Robot xmc[35] = sr & 0x7; sr >>= 3; 107*8ec969ceSTreehugger Robot xmc[36] = sr & 0x7; sr >>= 3; 108*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 2; 109*8ec969ceSTreehugger Robot xmc[37] = sr & 0x7; sr >>= 3; 110*8ec969ceSTreehugger Robot xmc[38] = sr & 0x7; sr >>= 3; 111*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 4; 112*8ec969ceSTreehugger Robot Nc[3] = sr & 0x7f; sr >>= 7; 113*8ec969ceSTreehugger Robot bc[3] = sr & 0x3; sr >>= 2; 114*8ec969ceSTreehugger Robot Mc[3] = sr & 0x3; sr >>= 2; 115*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; 116*8ec969ceSTreehugger Robot xmaxc[3] = sr & 0x3f; sr >>= 6; 117*8ec969ceSTreehugger Robot xmc[39] = sr & 0x7; sr >>= 3; 118*8ec969ceSTreehugger Robot sr = *c++; 119*8ec969ceSTreehugger Robot xmc[40] = sr & 0x7; sr >>= 3; 120*8ec969ceSTreehugger Robot xmc[41] = sr & 0x7; sr >>= 3; 121*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 2; /* 30 */ 122*8ec969ceSTreehugger Robot xmc[42] = sr & 0x7; sr >>= 3; 123*8ec969ceSTreehugger Robot xmc[43] = sr & 0x7; sr >>= 3; 124*8ec969ceSTreehugger Robot xmc[44] = sr & 0x7; sr >>= 3; 125*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; 126*8ec969ceSTreehugger Robot xmc[45] = sr & 0x7; sr >>= 3; 127*8ec969ceSTreehugger Robot xmc[46] = sr & 0x7; sr >>= 3; 128*8ec969ceSTreehugger Robot xmc[47] = sr & 0x7; sr >>= 3; 129*8ec969ceSTreehugger Robot sr = *c++; 130*8ec969ceSTreehugger Robot xmc[48] = sr & 0x7; sr >>= 3; 131*8ec969ceSTreehugger Robot xmc[49] = sr & 0x7; sr >>= 3; 132*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 2; 133*8ec969ceSTreehugger Robot xmc[50] = sr & 0x7; sr >>= 3; 134*8ec969ceSTreehugger Robot xmc[51] = sr & 0x7; sr >>= 3; 135*8ec969ceSTreehugger Robot 136*8ec969ceSTreehugger Robot s->frame_chain = sr & 0xf; 137*8ec969ceSTreehugger Robot } 138*8ec969ceSTreehugger Robot else { 139*8ec969ceSTreehugger Robot sr = s->frame_chain; 140*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 4; /* 1 */ 141*8ec969ceSTreehugger Robot LARc[0] = sr & 0x3f; sr >>= 6; 142*8ec969ceSTreehugger Robot LARc[1] = sr & 0x3f; sr >>= 6; 143*8ec969ceSTreehugger Robot sr = *c++; 144*8ec969ceSTreehugger Robot LARc[2] = sr & 0x1f; sr >>= 5; 145*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 3; 146*8ec969ceSTreehugger Robot LARc[3] = sr & 0x1f; sr >>= 5; 147*8ec969ceSTreehugger Robot LARc[4] = sr & 0xf; sr >>= 4; 148*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 2; 149*8ec969ceSTreehugger Robot LARc[5] = sr & 0xf; sr >>= 4; 150*8ec969ceSTreehugger Robot LARc[6] = sr & 0x7; sr >>= 3; 151*8ec969ceSTreehugger Robot LARc[7] = sr & 0x7; sr >>= 3; 152*8ec969ceSTreehugger Robot sr = *c++; /* 5 */ 153*8ec969ceSTreehugger Robot Nc[0] = sr & 0x7f; sr >>= 7; 154*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; 155*8ec969ceSTreehugger Robot bc[0] = sr & 0x3; sr >>= 2; 156*8ec969ceSTreehugger Robot Mc[0] = sr & 0x3; sr >>= 2; 157*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 5; 158*8ec969ceSTreehugger Robot xmaxc[0] = sr & 0x3f; sr >>= 6; 159*8ec969ceSTreehugger Robot xmc[0] = sr & 0x7; sr >>= 3; 160*8ec969ceSTreehugger Robot xmc[1] = sr & 0x7; sr >>= 3; 161*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; 162*8ec969ceSTreehugger Robot xmc[2] = sr & 0x7; sr >>= 3; 163*8ec969ceSTreehugger Robot xmc[3] = sr & 0x7; sr >>= 3; 164*8ec969ceSTreehugger Robot xmc[4] = sr & 0x7; sr >>= 3; 165*8ec969ceSTreehugger Robot sr = *c++; 166*8ec969ceSTreehugger Robot xmc[5] = sr & 0x7; sr >>= 3; 167*8ec969ceSTreehugger Robot xmc[6] = sr & 0x7; sr >>= 3; 168*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 2; /* 10 */ 169*8ec969ceSTreehugger Robot xmc[7] = sr & 0x7; sr >>= 3; 170*8ec969ceSTreehugger Robot xmc[8] = sr & 0x7; sr >>= 3; 171*8ec969ceSTreehugger Robot xmc[9] = sr & 0x7; sr >>= 3; 172*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; 173*8ec969ceSTreehugger Robot xmc[10] = sr & 0x7; sr >>= 3; 174*8ec969ceSTreehugger Robot xmc[11] = sr & 0x7; sr >>= 3; 175*8ec969ceSTreehugger Robot xmc[12] = sr & 0x7; sr >>= 3; 176*8ec969ceSTreehugger Robot sr = *c++; 177*8ec969ceSTreehugger Robot Nc[1] = sr & 0x7f; sr >>= 7; 178*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; 179*8ec969ceSTreehugger Robot bc[1] = sr & 0x3; sr >>= 2; 180*8ec969ceSTreehugger Robot Mc[1] = sr & 0x3; sr >>= 2; 181*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 5; 182*8ec969ceSTreehugger Robot xmaxc[1] = sr & 0x3f; sr >>= 6; 183*8ec969ceSTreehugger Robot xmc[13] = sr & 0x7; sr >>= 3; 184*8ec969ceSTreehugger Robot xmc[14] = sr & 0x7; sr >>= 3; 185*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; /* 15 */ 186*8ec969ceSTreehugger Robot xmc[15] = sr & 0x7; sr >>= 3; 187*8ec969ceSTreehugger Robot xmc[16] = sr & 0x7; sr >>= 3; 188*8ec969ceSTreehugger Robot xmc[17] = sr & 0x7; sr >>= 3; 189*8ec969ceSTreehugger Robot sr = *c++; 190*8ec969ceSTreehugger Robot xmc[18] = sr & 0x7; sr >>= 3; 191*8ec969ceSTreehugger Robot xmc[19] = sr & 0x7; sr >>= 3; 192*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 2; 193*8ec969ceSTreehugger Robot xmc[20] = sr & 0x7; sr >>= 3; 194*8ec969ceSTreehugger Robot xmc[21] = sr & 0x7; sr >>= 3; 195*8ec969ceSTreehugger Robot xmc[22] = sr & 0x7; sr >>= 3; 196*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; 197*8ec969ceSTreehugger Robot xmc[23] = sr & 0x7; sr >>= 3; 198*8ec969ceSTreehugger Robot xmc[24] = sr & 0x7; sr >>= 3; 199*8ec969ceSTreehugger Robot xmc[25] = sr & 0x7; sr >>= 3; 200*8ec969ceSTreehugger Robot sr = *c++; 201*8ec969ceSTreehugger Robot Nc[2] = sr & 0x7f; sr >>= 7; 202*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; /* 20 */ 203*8ec969ceSTreehugger Robot bc[2] = sr & 0x3; sr >>= 2; 204*8ec969ceSTreehugger Robot Mc[2] = sr & 0x3; sr >>= 2; 205*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 5; 206*8ec969ceSTreehugger Robot xmaxc[2] = sr & 0x3f; sr >>= 6; 207*8ec969ceSTreehugger Robot xmc[26] = sr & 0x7; sr >>= 3; 208*8ec969ceSTreehugger Robot xmc[27] = sr & 0x7; sr >>= 3; 209*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; 210*8ec969ceSTreehugger Robot xmc[28] = sr & 0x7; sr >>= 3; 211*8ec969ceSTreehugger Robot xmc[29] = sr & 0x7; sr >>= 3; 212*8ec969ceSTreehugger Robot xmc[30] = sr & 0x7; sr >>= 3; 213*8ec969ceSTreehugger Robot sr = *c++; 214*8ec969ceSTreehugger Robot xmc[31] = sr & 0x7; sr >>= 3; 215*8ec969ceSTreehugger Robot xmc[32] = sr & 0x7; sr >>= 3; 216*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 2; 217*8ec969ceSTreehugger Robot xmc[33] = sr & 0x7; sr >>= 3; 218*8ec969ceSTreehugger Robot xmc[34] = sr & 0x7; sr >>= 3; 219*8ec969ceSTreehugger Robot xmc[35] = sr & 0x7; sr >>= 3; 220*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; /* 25 */ 221*8ec969ceSTreehugger Robot xmc[36] = sr & 0x7; sr >>= 3; 222*8ec969ceSTreehugger Robot xmc[37] = sr & 0x7; sr >>= 3; 223*8ec969ceSTreehugger Robot xmc[38] = sr & 0x7; sr >>= 3; 224*8ec969ceSTreehugger Robot sr = *c++; 225*8ec969ceSTreehugger Robot Nc[3] = sr & 0x7f; sr >>= 7; 226*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; 227*8ec969ceSTreehugger Robot bc[3] = sr & 0x3; sr >>= 2; 228*8ec969ceSTreehugger Robot Mc[3] = sr & 0x3; sr >>= 2; 229*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 5; 230*8ec969ceSTreehugger Robot xmaxc[3] = sr & 0x3f; sr >>= 6; 231*8ec969ceSTreehugger Robot xmc[39] = sr & 0x7; sr >>= 3; 232*8ec969ceSTreehugger Robot xmc[40] = sr & 0x7; sr >>= 3; 233*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; 234*8ec969ceSTreehugger Robot xmc[41] = sr & 0x7; sr >>= 3; 235*8ec969ceSTreehugger Robot xmc[42] = sr & 0x7; sr >>= 3; 236*8ec969ceSTreehugger Robot xmc[43] = sr & 0x7; sr >>= 3; 237*8ec969ceSTreehugger Robot sr = *c++; /* 30 */ 238*8ec969ceSTreehugger Robot xmc[44] = sr & 0x7; sr >>= 3; 239*8ec969ceSTreehugger Robot xmc[45] = sr & 0x7; sr >>= 3; 240*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 2; 241*8ec969ceSTreehugger Robot xmc[46] = sr & 0x7; sr >>= 3; 242*8ec969ceSTreehugger Robot xmc[47] = sr & 0x7; sr >>= 3; 243*8ec969ceSTreehugger Robot xmc[48] = sr & 0x7; sr >>= 3; 244*8ec969ceSTreehugger Robot sr |= (uword)*c++ << 1; 245*8ec969ceSTreehugger Robot xmc[49] = sr & 0x7; sr >>= 3; 246*8ec969ceSTreehugger Robot xmc[50] = sr & 0x7; sr >>= 3; 247*8ec969ceSTreehugger Robot xmc[51] = sr & 0x7; sr >>= 3; 248*8ec969ceSTreehugger Robot } 249*8ec969ceSTreehugger Robot } 250*8ec969ceSTreehugger Robot else 251*8ec969ceSTreehugger Robot #endif 252*8ec969ceSTreehugger Robot { 253*8ec969ceSTreehugger Robot /* GSM_MAGIC = (*c >> 4) & 0xF; */ 254*8ec969ceSTreehugger Robot 255*8ec969ceSTreehugger Robot if (((*c >> 4) & 0x0F) != GSM_MAGIC) return -1; 256*8ec969ceSTreehugger Robot 257*8ec969ceSTreehugger Robot LARc[0] = (*c++ & 0xF) << 2; /* 1 */ 258*8ec969ceSTreehugger Robot LARc[0] |= (*c >> 6) & 0x3; 259*8ec969ceSTreehugger Robot LARc[1] = *c++ & 0x3F; 260*8ec969ceSTreehugger Robot LARc[2] = (*c >> 3) & 0x1F; 261*8ec969ceSTreehugger Robot LARc[3] = (*c++ & 0x7) << 2; 262*8ec969ceSTreehugger Robot LARc[3] |= (*c >> 6) & 0x3; 263*8ec969ceSTreehugger Robot LARc[4] = (*c >> 2) & 0xF; 264*8ec969ceSTreehugger Robot LARc[5] = (*c++ & 0x3) << 2; 265*8ec969ceSTreehugger Robot LARc[5] |= (*c >> 6) & 0x3; 266*8ec969ceSTreehugger Robot LARc[6] = (*c >> 3) & 0x7; 267*8ec969ceSTreehugger Robot LARc[7] = *c++ & 0x7; 268*8ec969ceSTreehugger Robot Nc[0] = (*c >> 1) & 0x7F; 269*8ec969ceSTreehugger Robot bc[0] = (*c++ & 0x1) << 1; 270*8ec969ceSTreehugger Robot bc[0] |= (*c >> 7) & 0x1; 271*8ec969ceSTreehugger Robot Mc[0] = (*c >> 5) & 0x3; 272*8ec969ceSTreehugger Robot xmaxc[0] = (*c++ & 0x1F) << 1; 273*8ec969ceSTreehugger Robot xmaxc[0] |= (*c >> 7) & 0x1; 274*8ec969ceSTreehugger Robot xmc[0] = (*c >> 4) & 0x7; 275*8ec969ceSTreehugger Robot xmc[1] = (*c >> 1) & 0x7; 276*8ec969ceSTreehugger Robot xmc[2] = (*c++ & 0x1) << 2; 277*8ec969ceSTreehugger Robot xmc[2] |= (*c >> 6) & 0x3; 278*8ec969ceSTreehugger Robot xmc[3] = (*c >> 3) & 0x7; 279*8ec969ceSTreehugger Robot xmc[4] = *c++ & 0x7; 280*8ec969ceSTreehugger Robot xmc[5] = (*c >> 5) & 0x7; 281*8ec969ceSTreehugger Robot xmc[6] = (*c >> 2) & 0x7; 282*8ec969ceSTreehugger Robot xmc[7] = (*c++ & 0x3) << 1; /* 10 */ 283*8ec969ceSTreehugger Robot xmc[7] |= (*c >> 7) & 0x1; 284*8ec969ceSTreehugger Robot xmc[8] = (*c >> 4) & 0x7; 285*8ec969ceSTreehugger Robot xmc[9] = (*c >> 1) & 0x7; 286*8ec969ceSTreehugger Robot xmc[10] = (*c++ & 0x1) << 2; 287*8ec969ceSTreehugger Robot xmc[10] |= (*c >> 6) & 0x3; 288*8ec969ceSTreehugger Robot xmc[11] = (*c >> 3) & 0x7; 289*8ec969ceSTreehugger Robot xmc[12] = *c++ & 0x7; 290*8ec969ceSTreehugger Robot Nc[1] = (*c >> 1) & 0x7F; 291*8ec969ceSTreehugger Robot bc[1] = (*c++ & 0x1) << 1; 292*8ec969ceSTreehugger Robot bc[1] |= (*c >> 7) & 0x1; 293*8ec969ceSTreehugger Robot Mc[1] = (*c >> 5) & 0x3; 294*8ec969ceSTreehugger Robot xmaxc[1] = (*c++ & 0x1F) << 1; 295*8ec969ceSTreehugger Robot xmaxc[1] |= (*c >> 7) & 0x1; 296*8ec969ceSTreehugger Robot xmc[13] = (*c >> 4) & 0x7; 297*8ec969ceSTreehugger Robot xmc[14] = (*c >> 1) & 0x7; 298*8ec969ceSTreehugger Robot xmc[15] = (*c++ & 0x1) << 2; 299*8ec969ceSTreehugger Robot xmc[15] |= (*c >> 6) & 0x3; 300*8ec969ceSTreehugger Robot xmc[16] = (*c >> 3) & 0x7; 301*8ec969ceSTreehugger Robot xmc[17] = *c++ & 0x7; 302*8ec969ceSTreehugger Robot xmc[18] = (*c >> 5) & 0x7; 303*8ec969ceSTreehugger Robot xmc[19] = (*c >> 2) & 0x7; 304*8ec969ceSTreehugger Robot xmc[20] = (*c++ & 0x3) << 1; 305*8ec969ceSTreehugger Robot xmc[20] |= (*c >> 7) & 0x1; 306*8ec969ceSTreehugger Robot xmc[21] = (*c >> 4) & 0x7; 307*8ec969ceSTreehugger Robot xmc[22] = (*c >> 1) & 0x7; 308*8ec969ceSTreehugger Robot xmc[23] = (*c++ & 0x1) << 2; 309*8ec969ceSTreehugger Robot xmc[23] |= (*c >> 6) & 0x3; 310*8ec969ceSTreehugger Robot xmc[24] = (*c >> 3) & 0x7; 311*8ec969ceSTreehugger Robot xmc[25] = *c++ & 0x7; 312*8ec969ceSTreehugger Robot Nc[2] = (*c >> 1) & 0x7F; 313*8ec969ceSTreehugger Robot bc[2] = (*c++ & 0x1) << 1; /* 20 */ 314*8ec969ceSTreehugger Robot bc[2] |= (*c >> 7) & 0x1; 315*8ec969ceSTreehugger Robot Mc[2] = (*c >> 5) & 0x3; 316*8ec969ceSTreehugger Robot xmaxc[2] = (*c++ & 0x1F) << 1; 317*8ec969ceSTreehugger Robot xmaxc[2] |= (*c >> 7) & 0x1; 318*8ec969ceSTreehugger Robot xmc[26] = (*c >> 4) & 0x7; 319*8ec969ceSTreehugger Robot xmc[27] = (*c >> 1) & 0x7; 320*8ec969ceSTreehugger Robot xmc[28] = (*c++ & 0x1) << 2; 321*8ec969ceSTreehugger Robot xmc[28] |= (*c >> 6) & 0x3; 322*8ec969ceSTreehugger Robot xmc[29] = (*c >> 3) & 0x7; 323*8ec969ceSTreehugger Robot xmc[30] = *c++ & 0x7; 324*8ec969ceSTreehugger Robot xmc[31] = (*c >> 5) & 0x7; 325*8ec969ceSTreehugger Robot xmc[32] = (*c >> 2) & 0x7; 326*8ec969ceSTreehugger Robot xmc[33] = (*c++ & 0x3) << 1; 327*8ec969ceSTreehugger Robot xmc[33] |= (*c >> 7) & 0x1; 328*8ec969ceSTreehugger Robot xmc[34] = (*c >> 4) & 0x7; 329*8ec969ceSTreehugger Robot xmc[35] = (*c >> 1) & 0x7; 330*8ec969ceSTreehugger Robot xmc[36] = (*c++ & 0x1) << 2; 331*8ec969ceSTreehugger Robot xmc[36] |= (*c >> 6) & 0x3; 332*8ec969ceSTreehugger Robot xmc[37] = (*c >> 3) & 0x7; 333*8ec969ceSTreehugger Robot xmc[38] = *c++ & 0x7; 334*8ec969ceSTreehugger Robot Nc[3] = (*c >> 1) & 0x7F; 335*8ec969ceSTreehugger Robot bc[3] = (*c++ & 0x1) << 1; 336*8ec969ceSTreehugger Robot bc[3] |= (*c >> 7) & 0x1; 337*8ec969ceSTreehugger Robot Mc[3] = (*c >> 5) & 0x3; 338*8ec969ceSTreehugger Robot xmaxc[3] = (*c++ & 0x1F) << 1; 339*8ec969ceSTreehugger Robot xmaxc[3] |= (*c >> 7) & 0x1; 340*8ec969ceSTreehugger Robot xmc[39] = (*c >> 4) & 0x7; 341*8ec969ceSTreehugger Robot xmc[40] = (*c >> 1) & 0x7; 342*8ec969ceSTreehugger Robot xmc[41] = (*c++ & 0x1) << 2; 343*8ec969ceSTreehugger Robot xmc[41] |= (*c >> 6) & 0x3; 344*8ec969ceSTreehugger Robot xmc[42] = (*c >> 3) & 0x7; 345*8ec969ceSTreehugger Robot xmc[43] = *c++ & 0x7; /* 30 */ 346*8ec969ceSTreehugger Robot xmc[44] = (*c >> 5) & 0x7; 347*8ec969ceSTreehugger Robot xmc[45] = (*c >> 2) & 0x7; 348*8ec969ceSTreehugger Robot xmc[46] = (*c++ & 0x3) << 1; 349*8ec969ceSTreehugger Robot xmc[46] |= (*c >> 7) & 0x1; 350*8ec969ceSTreehugger Robot xmc[47] = (*c >> 4) & 0x7; 351*8ec969ceSTreehugger Robot xmc[48] = (*c >> 1) & 0x7; 352*8ec969ceSTreehugger Robot xmc[49] = (*c++ & 0x1) << 2; 353*8ec969ceSTreehugger Robot xmc[49] |= (*c >> 6) & 0x3; 354*8ec969ceSTreehugger Robot xmc[50] = (*c >> 3) & 0x7; 355*8ec969ceSTreehugger Robot xmc[51] = *c & 0x7; /* 33 */ 356*8ec969ceSTreehugger Robot } 357*8ec969ceSTreehugger Robot 358*8ec969ceSTreehugger Robot Gsm_Decoder(s, LARc, Nc, bc, Mc, xmaxc, xmc, target); 359*8ec969ceSTreehugger Robot 360*8ec969ceSTreehugger Robot return 0; 361*8ec969ceSTreehugger Robot } 362