From 8d22cd691b045295fd2de22e37868346ab0b0c45 Mon Sep 17 00:00:00 2001 From: Piotr Krysik Date: Sat, 13 Jun 2009 12:39:25 +0200 Subject: cch decoding works now - should be removed in the future, it shouldn't be done in receiver which works in physical layer --- src/lib/decoder/burst_types.h | 1 + src/lib/decoder/cch.c | 1 + src/lib/decoder/gsmstack.c | 54 +++++++++++++++++++++++++------------------ src/lib/decoder/gsmstack.h | 4 ++-- src/lib/decoder/sch.c | 2 +- 5 files changed, 37 insertions(+), 25 deletions(-) diff --git a/src/lib/decoder/burst_types.h b/src/lib/decoder/burst_types.h index 990e8f1..ee51f9a 100644 --- a/src/lib/decoder/burst_types.h +++ b/src/lib/decoder/burst_types.h @@ -17,6 +17,7 @@ static const unsigned char tail_bits[] = {0, 0, 0}; * The normal burst is used to carry information on traffic and control * channels. */ + static const int N_TSC_NUM = 8; // number of training sequence codes static const int N_TSC_CODE_LEN = 26; // length of tsc static const int N_TSC_OS = 61; // tsc offset diff --git a/src/lib/decoder/cch.c b/src/lib/decoder/cch.c index 468c1f3..f1da56d 100644 --- a/src/lib/decoder/cch.c +++ b/src/lib/decoder/cch.c @@ -13,6 +13,7 @@ #include "cch.h" #include "fire_crc.h" + /* * GSM SACCH -- Slow Associated Control Channel * diff --git a/src/lib/decoder/gsmstack.c b/src/lib/decoder/gsmstack.c index 0f2aca6..cf94939 100644 --- a/src/lib/decoder/gsmstack.c +++ b/src/lib/decoder/gsmstack.c @@ -1,4 +1,3 @@ -//TODO: this file shouldn't be part of the GSM Receiver /* * Invoke gsmstack() with any kind of burst. Automaticly decode and retrieve * information. @@ -9,14 +8,25 @@ #include #include #include "gsmstack.h" -#include "gsm_constants.h" -#include "gsm_receiver_config.h" +//#include "gsm_constants.h" #include "interleave.h" -#include "sch.h" +//#include "sch.h" #include "cch.h" -//#include "out_pcap.h" +static const int USEFUL_BITS = 142; +//#include "out_pcap.h" +enum BURST_TYPE { + UNKNOWN, + FCCH, + PARTIAL_SCH, //successful correlation, but missing data ^ + SCH, + CTS_SCH, + COMPACT_SCH, + NORMAL, + DUMMY, + ACCESS +}; static void out_gsmdecode(char type, int arfcn, int ts, int fn, char *data, int len); /* encode a decoded burst (1 bit per byte) into 8-bit-per-byte */ @@ -74,17 +84,17 @@ GS_new(GS_CTX *ctx) ctx->fn = -1; ctx->bsic = -1; - ctx->tun_fd = mktun("gsm", ctx->ether_addr); - if (ctx->tun_fd < 0) - fprintf(stderr, "cannot open 'gsm' tun device, did you create it?\n"); +// ctx->tun_fd = mktun("gsm", ctx->ether_addr); +// if (ctx->tun_fd < 0) +// fprintf(stderr, "cannot open 'gsm' tun device, did you create it?\n"); - ctx->pcap_fd = open_pcap_file("tvoid.pcap"); - if (ctx->pcap_fd < 0) - fprintf(stderr, "cannot open PCAP file: %s\n", strerror(errno)); +// ctx->pcap_fd = open_pcap_file("tvoid.pcap"); +// if (ctx->pcap_fd < 0) +// fprintf(stderr, "cannot open PCAP file: %s\n", strerror(errno)); - ctx->burst_pcap_fd = open_pcap_file("tvoid-burst.pcap"); - if (ctx->burst_pcap_fd < 0) - fprintf(stderr, "cannot open burst PCAP file: %s\n", strerror(errno)); +// ctx->burst_pcap_fd = open_pcap_file("tvoid-burst.pcap"); +// if (ctx->burst_pcap_fd < 0) +// fprintf(stderr, "cannot open burst PCAP file: %s\n", strerror(errno)); return 0; } @@ -108,8 +118,8 @@ GS_process(GS_CTX *ctx, int ts, int type, const unsigned char *src) /* write burst to burst PCAP file */ burst_octify(octified, src, USEFUL_BITS); - write_pcap_packet(ctx->burst_pcap_fd, 0 /* arfcn */, ts, ctx->fn, - 1, type, octified, BURST_BYTES); +// write_pcap_packet(ctx->burst_pcap_fd, 0 /* arfcn */, ts, ctx->fn, +// 1, type, octified, BURST_BYTES); #if 0 if (ts != 0) { @@ -117,13 +127,13 @@ GS_process(GS_CTX *ctx, int ts, int type, const unsigned char *src) data = decode_cch(ctx, ctx->burst, &len); if (data == NULL) return -1; - write_pcap_packet(ctx->pcap_fd, 0 /* arfcn */, ts, ctx->fn, data, len); +// write_pcap_packet(ctx->pcap_fd, 0 /* arfcn */, ts, ctx->fn, data, len); return; } #endif if (ts == 0) { - if (type == sch_burst) { + if (type == SCH) { ret = decode_sch(src, &fn, &bsic); if (ret != 0) return 0; @@ -144,7 +154,7 @@ GS_process(GS_CTX *ctx, int ts, int type, const unsigned char *src) ctx->fn++; } - if (type == normal_burst) { + if (type == NORMAL) { /* Interested in these frame numbers (cch) * 2-5, 12-15, 22-25, 23-35, 42-45 * 6-9, 16-19, 26-29, 36-39, 46-49 @@ -167,9 +177,9 @@ GS_process(GS_CTX *ctx, int ts, int type, const unsigned char *src) //DEBUGF("OK TS %d, len %d\n", ts, len); out_gsmdecode(0, 0, ts, ctx->fn - 4, data, len); - write_interface(ctx->tun_fd, data+1, len-1, ctx->ether_addr); - write_pcap_packet(ctx->pcap_fd, 0 /* arfcn */, ts, ctx->fn, - 0, normal_burst, data, len); +// write_interface(ctx->tun_fd, data+1, len-1, ctx->ether_addr); +// write_pcap_packet(ctx->pcap_fd, 0 /* arfcn */, ts, ctx->fn, +// 0, NORMAL, data, len); #if 0 if (ctx->fn % 51 != 0) && ( (((ctx->fn % 51 + 5) % 10 == 0) || (((ctx->fn % 51) + 1) % 10 ==0) ) ) ready = 1; diff --git a/src/lib/decoder/gsmstack.h b/src/lib/decoder/gsmstack.h index 9c5730e..fb88334 100644 --- a/src/lib/decoder/gsmstack.h +++ b/src/lib/decoder/gsmstack.h @@ -29,8 +29,8 @@ typedef struct int tun_fd; unsigned char ether_addr[ETH_ALEN]; - int pcap_fd; - int burst_pcap_fd; +// int pcap_fd; +// int burst_pcap_fd; } GS_CTX; int GS_new(GS_CTX *ctx); diff --git a/src/lib/decoder/sch.c b/src/lib/decoder/sch.c index e16d14b..6f141dd 100644 --- a/src/lib/decoder/sch.c +++ b/src/lib/decoder/sch.c @@ -3,7 +3,7 @@ #include #include #include -#include +#include "gsm_constants.h" /* * Synchronization channel. -- cgit v1.2.3