summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gascop.c49
1 files changed, 46 insertions, 3 deletions
diff --git a/gascop.c b/gascop.c
index b80b5f3..18c9a5e 100644
--- a/gascop.c
+++ b/gascop.c
@@ -34,6 +34,7 @@
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
+#include <errno.h>
#include "rtl-sdr.h"
/* POCSAG parameters */
@@ -48,6 +49,9 @@
#define POCSAG_MAXWORD 16
#define POCSAG_MSG_LEN 256
+#define POCSAG_DEFAULT_RATE 2000000
+#define POCSAG_DEFAULT_WIDTH 1000
+#define POCSAG_DEFAULT_HEIGHT 700
#define POCSAG_ASYNC_BUF_NUMBER 12
#define POCSAG_DATA_LEN (16*16384) /* 256K */
#define POCSAG_AUTO_GAIN -100 /* Use automatic gain. */
@@ -149,6 +153,37 @@ uint32_t bchFix(uint32_t data, int poly, int n, int k) {
return data;
}
+void rtlsdrInit(void) {
+ int device_count = rtlsdr_get_device_count();
+ if (!device_count) {
+ fprintf(stderr, "No rtlsdr devices found.\n");
+ exit(1);
+ }
+
+ printf("Found %d device(s):\n", device_count);
+ char vendor[256], product[256], serial[256];
+ int j;
+ for (j = 0; j < device_count; j++) {
+ rtlsdr_get_device_usb_strings(j, vendor, product, serial);
+ fprintf(stderr, "%d: %s, %s, SN: %s %s\n", j, vendor, product, serial,
+ (j == Gascop.dev_index) ? "(currently selected)" : "");
+ }
+
+ if (rtlsdr_open(&Gascop.dev, Gascop.dev_index) < 0) {
+ fprintf(stderr, "Error opening rtlsdr device: %s\n", strerror(errno));
+ exit(1);
+ }
+
+ rtlsdr_set_tuner_gain_mode(Gascop.dev, 0); /* auto gain */
+ rtlsdr_set_freq_correction(Gascop.dev, 0);
+ rtlsdr_set_agc_mode(Gascop.dev, 1);
+ rtlsdr_set_center_freq(Gascop.dev, Gascop.freq);
+ rtlsdr_set_sample_rate(Gascop.dev, POCSAG_DEFAULT_RATE);
+ rtlsdr_reset_buffer(Gascop.dev);
+ fprintf(stderr, "Gain reported by device: %.2f\n",
+ rtlsdr_get_tuner_gain(Gascop.dev) / 10.0);
+}
+
void rtlsdrCallback(unsigned char *buf, uint32_t len, void *ctx) {
IGNORE(ctx);
@@ -168,10 +203,18 @@ void *readerThreadEntryPoint(void *arg) {
return NULL;
}
+void printUsage() {
+ printf("Usage: ./gascop [options] <frequency Hz>\n\n");
+}
+
int main(int argc, char **argv) {
- IGNORE(argc);
- IGNORE(argv);
+ if (argc < 2 || !strcmp(argv[1], "--help")) {
+ printUsage();
+ exit(-1);
+ }
+
+ Gascop.freq = strtoll(argv[1], NULL, 10);
- printf("Gascop...\n");
+ rtlsdrInit();
exit(0);
}