//TODO: this file shouldn't be part of the GSM Receiver #ifndef __GSMSTACK_CCH_H__ #define __GSMSTACK_CCH_H__ 1 #ifdef __cplusplus extern "C" { #endif #include "gsmstack.h" /* * decode_cch * * Decode a "common" control channel. Most control channels use * the same burst, interleave, Viterbi and parity configuration. * The documentation for the control channels defines SACCH first * and then just keeps referring to that. * * The current (investigated) list is as follows: * * BCCH Norm * BCCH Ext * PCH * AGCH * CBCH (SDCCH/4) * CBCH (SDCCH/8) * SDCCH/4 * SACCH/C4 * SDCCH/8 * SACCH/C8 * * We provide two functions, one for where all four bursts are * contiguous, and one where they aren't. */ #define DATA_BLOCK_SIZE 184 #define PARITY_SIZE 40 #define FLUSH_BITS_SIZE 4 #define PARITY_OUTPUT_SIZE (DATA_BLOCK_SIZE + PARITY_SIZE + FLUSH_BITS_SIZE) #define CONV_INPUT_SIZE PARITY_OUTPUT_SIZE #define CONV_SIZE (2 * CONV_INPUT_SIZE) #define BLOCKS 4 #define iBLOCK_SIZE (CONV_SIZE / BLOCKS) #define eBLOCK_SIZE (iBLOCK_SIZE + 2) unsigned char *decode_cch(GS_CTX *ctx, unsigned char *burst, unsigned int *len); unsigned char *decode_facch(GS_CTX *ctx, unsigned char *burst, unsigned int *len, int offset); //unsigned char *decode_cch(GS_CTX *ctx, unsigned char *, unsigned char *, unsigned char *, unsigned char *, unsigned int *len); //unsigned char *decode_cch(GS_CTX *ctx, unsigned char *, unsigned int *); #ifdef __cplusplus } #endif #endif