diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2019-07-01 20:42:53 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2019-07-19 14:58:29 +0200 |
commit | cf6113b2fe5f6f4ce683ec3037e88bb33e36cdf1 (patch) | |
tree | 0c94a487b1feccf243c9fb54c06349b259b02df0 /Transceiver52M/proto_trxd.h | |
parent | 13c81098f8b9119abae34bffd698708dd161a008 (diff) |
Transceiver: Support TRXD v1
Related: OS#4006
Change-Id: I53db2678458a7377c87875b58b58b76a1b900517
Diffstat (limited to 'Transceiver52M/proto_trxd.h')
-rw-r--r-- | Transceiver52M/proto_trxd.h | 44 |
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)); |