summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuval Adam <yuv.adm@gmail.com>2013-01-27 23:33:58 +0200
committerYuval Adam <yuv.adm@gmail.com>2013-01-27 23:33:58 +0200
commit18d67880cbc09256f37c8257a9635c3d3f98ad73 (patch)
tree085b52ff2162514f49c4e0d1c6a0e148301bd6fc
parent9b7da31e44dcfa01ee65ce13de993c7c46828b45 (diff)
Rename, add data processing thread and internal state
-rw-r--r--.gitignore2
-rw-r--r--Makefile10
-rw-r--r--gascop.c (renamed from dumpocsag.c)49
3 files changed, 54 insertions, 7 deletions
diff --git a/.gitignore b/.gitignore
index be8af0e..ad61826 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,2 @@
*.o
-dumpocsag
+gascop
diff --git a/Makefile b/Makefile
index c60abc3..1b7a28a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,15 +1,15 @@
CFLAGS=-O2 -g -Wall -W `pkg-config --cflags librtlsdr`
LIBS=`pkg-config --libs librtlsdr` -lpthread -lm
CC=gcc
-PROGNAME=dumposcag
+PROGNAME=gascop
-all: dumpocsag
+all: gascop
%.o: %.c
$(CC) $(CFLAGS) -c $<
-dump1090: dumpocsag.o
- $(CC) -g -o dumpocsag dumpocsag.o $(LIBS)
+gascop: gascop.o
+ $(CC) -g -o gascop gascop.o $(LIBS)
clean:
- rm -f *.o dumpocsag
+ rm -f *.o gascop
diff --git a/dumpocsag.c b/gascop.c
index f3527b2..b50929a 100644
--- a/dumpocsag.c
+++ b/gascop.c
@@ -23,6 +23,11 @@
#define POCSAG_SOFTTHRESHOLD 2
#define POCSAG_MAXWORD 16
+#define POCSAG_ASYNC_BUF_NUMBER 12
+#define POCSAG_DATA_LEN (16*16384) /* 256K */
+#define POCSAG_AUTO_GAIN -100 /* Use automatic gain. */
+#define POCSAG_MAX_GAIN 999999 /* Use max available gain. */
+
/* BCH parameters */
#define POCSAG_BCH_POLY 0x769
#define POCSAG_BCH_N 31
@@ -35,8 +40,28 @@
#define POCSAG_SEARCH_SYNC 3
#define POCSAG_SYNCHED 4
+#define IGNORE(V) ((void) V)
+
+struct {
+ pthread_t reader_thread;
+ pthread_mutex_t data_mutex; /* Mutex to synchronize buffer access. */
+ pthread_cond_t data_cond; /* Conditional variable associated. */
+ unsigned char *data; /* Raw IQ samples buffer */
+ uint16_t *magnitude; /* Magnitude vector */
+ uint32_t data_len; /* Buffer length. */
+ int data_ready; /* Data ready to be processed. */
+ uint16_t *maglut; /* I/Q -> Magnitude lookup table. */
+ int exit;
+
+ /* rtlsdr */
+ int dev_index;
+ int gain;
+ int enable_agc;
+ rtlsdr_dev_t *dev;
+ int freq;
+} Gascop;
-int hammingWeight(int n) {
+int hammingWeight(uint32_t n) {
unsigned int c;
for (c = 0; n; c++)
n &= n - 1;
@@ -84,7 +109,29 @@ int bchFix(int data, int poly, int n, int k) {
return data;
}
+void rtlsdrCallback(unsigned char *buf, uint32_t len, void *ctx) {
+ IGNORE(ctx);
+
+ pthread_mutex_lock(&Gascop.data_mutex);
+ if (len > Gascop.data_len) len = Gascop.data_len;
+ memcpy(Gascop.data, buf, len);
+ Gascop.data_ready = 1;
+ pthread_cond_signal(&Gascop.data_cond);
+ pthread_mutex_unlock(&Gascop.data_mutex);
+}
+
+void *readerThreadEntryPoint(void *arg) {
+ IGNORE(arg);
+
+ rtlsdr_read_async(Gascop.dev, rtlsdrCallback, NULL,
+ POCSAG_ASYNC_BUF_NUMBER, Gascop.data_len);
+ return NULL;
+}
+
int main(int argc, char **argv) {
+ IGNORE(argc);
+ IGNORE(argv);
+
printf("Dumpocsag v0.1\n");
exit(0);
}