aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M/proto_trxd.h
diff options
context:
space:
mode:
Diffstat (limited to 'Transceiver52M/proto_trxd.h')
-rw-r--r--Transceiver52M/proto_trxd.h44
1 files changed, 43 insertions, 1 deletions
diff --git a/Transceiver52M/proto_trxd.h b/Transceiver52M/proto_trxd.h
index 2e5ad52..7eb5dac 100644
--- a/Transceiver52M/proto_trxd.h
+++ b/Transceiver52M/proto_trxd.h
@@ -11,6 +11,16 @@
#define MAX_RX_BURST_BUF_SIZE 444 /* 444 = EDGE_BURST_NBITS */
+enum Modulation {
+ MODULATION_GMSK,
+ MODULATION_8PSK,
+/* Not supported yet:
+ MODULATION_AQPSK,
+ MODULATION_16QAM,
+ MODULATION_32QAM
+*/
+};
+
struct trx_ul_burst_ind {
float rx_burst[MAX_RX_BURST_BUF_SIZE]; /* soft bits normalized 0..1 */
unsigned nbits; // number of symbols per slot in rxBurst, not counting guard periods
@@ -20,12 +30,17 @@ struct trx_ul_burst_ind {
double toa; // in symbols
double noise; // noise level in dBFS
bool idle; // true if no valid burst is included
+ enum Modulation modulation; // modulation type
+ uint8_t tss; // training sequence set
+ uint8_t tsc; // training sequence code
+ float ci; // Carrier-to-Interference ratio, in dB
};
bool trxd_send_burst_ind_v0(size_t chan, int fd, const struct trx_ul_burst_ind *bi);
+bool trxd_send_burst_ind_v1(size_t chan, int fd, const struct trx_ul_burst_ind *bi);
/* The latest supported TRXD header format version */
-#define TRX_DATA_FORMAT_VER 0
+#define TRX_DATA_FORMAT_VER 1
struct trxd_hdr_common {
#if OSMO_IS_LITTLE_ENDIAN
@@ -50,3 +65,30 @@ struct trxd_hdr_v0 {
struct trxd_hdr_v0_specific v0;
uint8_t soft_bits[0];
} __attribute__ ((packed));
+
+
+#define TRXD_MODULATION_GMSK(ts_set) (0b0000 | (ts_set & 0b0011))
+#define TRXD_MODULATION_8PSK(ts_set) (0b0100 | (ts_set & 0b0001))
+#define TRXD_MODULATION_AQPSK(ts_set) (0b0110 | (ts_set & 0b0001))
+#define TRXD_MODULATION_16QAM(ts_set) (0b1000 | (ts_set & 0b0001))
+#define TRXD_MODULATION_32QAM(ts_set) (0b1010 | (ts_set & 0b0001))
+
+struct trxd_hdr_v1_specific {
+#if OSMO_IS_LITTLE_ENDIAN
+ uint8_t tsc:3,
+ modulation:4,
+ idle:1;
+#elif OSMO_IS_BIG_ENDIAN
+ uint8_t idle:1,
+ modulation:4,
+ tsc:3;
+#endif
+ int16_t ci; /* big endian, in centiBels */
+} __attribute__ ((packed));
+
+struct trxd_hdr_v1 {
+ struct trxd_hdr_common common;
+ struct trxd_hdr_v0_specific v0;
+ struct trxd_hdr_v1_specific v1;
+ uint8_t soft_bits[0];
+} __attribute__ ((packed));