view intercom/gsm/gsm_deco.c @ 2:13be24d74cd2

import intercom-0.4.1
author Peter Meerwald <pmeerw@cosy.sbg.ac.at>
date Fri, 25 Jun 2010 09:57:52 +0200
parents
children
line wrap: on
line source

/*
 * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
 * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
 * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
 */

/* $Header: /home/kbs/jutta/src/gsm/gsm-1.0/src/RCS/gsm_decode.c,v 1.1 1992/10/28 00:15:50 jutta Exp $ */

#include "private.h"

#include "gsm.h"
#include "proto.h"

int gsm_decode P3((s, c, target), gsm s, gsm_byte * c,
  gsm_signal * target)
{
  word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13 * 4];

  /* GSM_MAGIC  = (*c >> 4) & 0xF; */

  if (((*c >> 4) & 0x0F) != GSM_MAGIC)
    return -1;

  LARc[0] = (*c++ & 0xF) << 2;  /* 1 */
  LARc[0] |= (*c >> 6) & 0x3;
  LARc[1] = *c++ & 0x3F;
  LARc[2] = (*c >> 3) & 0x1F;
  LARc[3] = (*c++ & 0x7) << 2;
  LARc[3] |= (*c >> 6) & 0x3;
  LARc[4] = (*c >> 2) & 0xF;
  LARc[5] = (*c++ & 0x3) << 2;
  LARc[5] |= (*c >> 6) & 0x3;
  LARc[6] = (*c >> 3) & 0x7;
  LARc[7] = *c++ & 0x7;
  Nc[0] = (*c >> 1) & 0x7F;
  bc[0] = (*c++ & 0x1) << 1;
  bc[0] |= (*c >> 7) & 0x1;
  Mc[0] = (*c >> 5) & 0x3;
  xmaxc[0] = (*c++ & 0x1F) << 1;
  xmaxc[0] |= (*c >> 7) & 0x1;
  xmc[0] = (*c >> 4) & 0x7;
  xmc[1] = (*c >> 1) & 0x7;
  xmc[2] = (*c++ & 0x1) << 2;
  xmc[2] |= (*c >> 6) & 0x3;
  xmc[3] = (*c >> 3) & 0x7;
  xmc[4] = *c++ & 0x7;
  xmc[5] = (*c >> 5) & 0x7;
  xmc[6] = (*c >> 2) & 0x7;
  xmc[7] = (*c++ & 0x3) << 1;   /* 10 */
  xmc[7] |= (*c >> 7) & 0x1;
  xmc[8] = (*c >> 4) & 0x7;
  xmc[9] = (*c >> 1) & 0x7;
  xmc[10] = (*c++ & 0x1) << 2;
  xmc[10] |= (*c >> 6) & 0x3;
  xmc[11] = (*c >> 3) & 0x7;
  xmc[12] = *c++ & 0x7;
  Nc[1] = (*c >> 1) & 0x7F;
  bc[1] = (*c++ & 0x1) << 1;
  bc[1] |= (*c >> 7) & 0x1;
  Mc[1] = (*c >> 5) & 0x3;
  xmaxc[1] = (*c++ & 0x1F) << 1;
  xmaxc[1] |= (*c >> 7) & 0x1;
  xmc[13] = (*c >> 4) & 0x7;
  xmc[14] = (*c >> 1) & 0x7;
  xmc[15] = (*c++ & 0x1) << 2;
  xmc[15] |= (*c >> 6) & 0x3;
  xmc[16] = (*c >> 3) & 0x7;
  xmc[17] = *c++ & 0x7;
  xmc[18] = (*c >> 5) & 0x7;
  xmc[19] = (*c >> 2) & 0x7;
  xmc[20] = (*c++ & 0x3) << 1;
  xmc[20] |= (*c >> 7) & 0x1;
  xmc[21] = (*c >> 4) & 0x7;
  xmc[22] = (*c >> 1) & 0x7;
  xmc[23] = (*c++ & 0x1) << 2;
  xmc[23] |= (*c >> 6) & 0x3;
  xmc[24] = (*c >> 3) & 0x7;
  xmc[25] = *c++ & 0x7;
  Nc[2] = (*c >> 1) & 0x7F;
  bc[2] = (*c++ & 0x1) << 1;    /* 20 */
  bc[2] |= (*c >> 7) & 0x1;
  Mc[2] = (*c >> 5) & 0x3;
  xmaxc[2] = (*c++ & 0x1F) << 1;
  xmaxc[2] |= (*c >> 7) & 0x1;
  xmc[26] = (*c >> 4) & 0x7;
  xmc[27] = (*c >> 1) & 0x7;
  xmc[28] = (*c++ & 0x1) << 2;
  xmc[28] |= (*c >> 6) & 0x3;
  xmc[29] = (*c >> 3) & 0x7;
  xmc[30] = *c++ & 0x7;
  xmc[31] = (*c >> 5) & 0x7;
  xmc[32] = (*c >> 2) & 0x7;
  xmc[33] = (*c++ & 0x3) << 1;
  xmc[33] |= (*c >> 7) & 0x1;
  xmc[34] = (*c >> 4) & 0x7;
  xmc[35] = (*c >> 1) & 0x7;
  xmc[36] = (*c++ & 0x1) << 2;
  xmc[36] |= (*c >> 6) & 0x3;
  xmc[37] = (*c >> 3) & 0x7;
  xmc[38] = *c++ & 0x7;
  Nc[3] = (*c >> 1) & 0x7F;
  bc[3] = (*c++ & 0x1) << 1;
  bc[3] |= (*c >> 7) & 0x1;
  Mc[3] = (*c >> 5) & 0x3;
  xmaxc[3] = (*c++ & 0x1F) << 1;
  xmaxc[3] |= (*c >> 7) & 0x1;
  xmc[39] = (*c >> 4) & 0x7;
  xmc[40] = (*c >> 1) & 0x7;
  xmc[41] = (*c++ & 0x1) << 2;
  xmc[41] |= (*c >> 6) & 0x3;
  xmc[42] = (*c >> 3) & 0x7;
  xmc[43] = *c++ & 0x7;         /* 30  */
  xmc[44] = (*c >> 5) & 0x7;
  xmc[45] = (*c >> 2) & 0x7;
  xmc[46] = (*c++ & 0x3) << 1;
  xmc[46] |= (*c >> 7) & 0x1;
  xmc[47] = (*c >> 4) & 0x7;
  xmc[48] = (*c >> 1) & 0x7;
  xmc[49] = (*c++ & 0x1) << 2;
  xmc[49] |= (*c >> 6) & 0x3;
  xmc[50] = (*c >> 3) & 0x7;
  xmc[51] = *c & 0x7;           /* 33 */

  Gsm_Decoder(s, LARc, Nc, bc, Mc, xmaxc, xmc, target);

  return 0;
}

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.