summaryrefslogtreecommitdiffstats
path: root/bindings/radio/radio-rtlsdr.h
diff options
context:
space:
mode:
Diffstat (limited to 'bindings/radio/radio-rtlsdr.h')
-rw-r--r--bindings/radio/radio-rtlsdr.h100
1 files changed, 100 insertions, 0 deletions
diff --git a/bindings/radio/radio-rtlsdr.h b/bindings/radio/radio-rtlsdr.h
new file mode 100644
index 00000000..2308f27e
--- /dev/null
+++ b/bindings/radio/radio-rtlsdr.h
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2015, 2016 "IoT.bzh"
+ * Author "Manuel Bachmann"
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef RADIO_RTLSDR_H
+#define RADIO_RTLSDR_H
+
+/* -------------- RADIO RTLSDR DEFINITIONS ------------------ */
+
+#include <math.h>
+#include <pthread.h>
+#include <rtl-sdr.h>
+
+#include "radio-api.h"
+
+#define pthread_signal(n, m) pthread_mutex_lock(m); pthread_cond_signal(n); pthread_mutex_unlock(m)
+#define pthread_wait(n, m) pthread_mutex_lock(m); pthread_cond_wait(n, m); pthread_mutex_unlock(m)
+#define BUF_LEN 16*16384
+#define AUDIO_BUFFER "/tmp/audio_buf"
+
+typedef struct dongle_ctx dongle_ctx;
+typedef struct demod_ctx demod_ctx;
+typedef struct output_ctx output_ctx;
+typedef struct dev_ctx dev_ctx_T;
+
+struct dongle_ctx {
+ pthread_t thr;
+ unsigned char thr_finished;
+ uint16_t buf[BUF_LEN];
+ uint32_t buf_len;
+};
+
+struct demod_ctx {
+ pthread_t thr;
+ unsigned char thr_finished;
+ pthread_rwlock_t lck;
+ pthread_cond_t ok;
+ pthread_mutex_t ok_m;
+ int pre_r, pre_j, now_r, now_j, index;
+ int pre_index, now_index;
+ int16_t buf[BUF_LEN];
+ int buf_len;
+ int16_t res[BUF_LEN];
+ int res_len;
+};
+
+struct output_ctx {
+ pthread_t thr;
+ unsigned char thr_finished;
+ pthread_rwlock_t lck;
+ pthread_cond_t ok;
+ pthread_mutex_t ok_m;
+ int16_t buf[BUF_LEN];
+ int buf_len;
+};
+
+struct dev_ctx {
+ int used; /* TODO: radio is free ??? */
+ rtlsdr_dev_t* dev;
+ Mode mode;
+ float freq;
+ unsigned char mute;
+ unsigned char should_run;
+ /* thread contexts */
+ dongle_ctx *dongle;
+ demod_ctx *demod;
+ output_ctx *output;
+};
+
+unsigned int _radio_dev_count (void);
+const char* _radio_dev_name (unsigned int);
+
+unsigned char _radio_on (unsigned int, radioCtxHandleT *);
+void _radio_off (unsigned int);
+void _radio_stop (unsigned int);
+void _radio_play (unsigned int);
+void _radio_set_mode (unsigned int, Mode);
+void _radio_set_freq (unsigned int, double);
+void _radio_set_mute (unsigned int, unsigned char);
+
+unsigned char _radio_dev_init (struct dev_ctx *, unsigned int);
+unsigned char _radio_dev_free (struct dev_ctx *);
+void _radio_apply_params (struct dev_ctx *);
+void _radio_start_threads (struct dev_ctx *);
+void _radio_stop_threads (struct dev_ctx *);
+
+#endif /* RADIO_RTLSDR_H */