diff options
author | Harald Welte <laforge@osmocom.org> | 2020-03-07 20:32:08 +0100 |
---|---|---|
committer | Harald Welte <laforge@osmocom.org> | 2020-03-08 17:56:52 +0100 |
commit | 58d79e88ad58887c92ecc98024f537e3efbb9469 (patch) | |
tree | dddadd0c08cb3ddc84f9056a38c2d9748c9a2866 /src/osmo-bts-virtual/l1_if.c | |
parent | 6a5039674f3d3253133ada666368b9342cc18a93 (diff) |
osmo-bts-virtual: implement GSMTAP_CHANNEL_VOICE
GSMTAP_CHANNEL_VOICE is the mechanism by which GSMTAP can [finally!]
be used to transport circuit-switched voice codec payload, and not
just signalling.
Original patch by Neels Hofmeyr, heavily extended by Harald Welte.
Depends: libosmocore.git I952044a17334f35712e087dc41781805000aebc1
Change-Id: I1cd9a251ce0b87181a0822d7940bbfc9f1428543
Diffstat (limited to 'src/osmo-bts-virtual/l1_if.c')
-rw-r--r-- | src/osmo-bts-virtual/l1_if.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/osmo-bts-virtual/l1_if.c b/src/osmo-bts-virtual/l1_if.c index ab2cb762..b6a3507d 100644 --- a/src/osmo-bts-virtual/l1_if.c +++ b/src/osmo-bts-virtual/l1_if.c @@ -128,12 +128,7 @@ static void virt_um_rcv_cb(struct virt_um_inst *vui, struct msgb *msg) break; case GSMTAP_CHANNEL_TCH_F: case GSMTAP_CHANNEL_TCH_H: -#if 0 - /* TODO: handle voice messages */ - if (!facch && ! tch_acch) { - osmo_prim_init(&l1sap.oph, SAP_GSM_PH, PRIM_TCH, PRIM_OP_INDICATION, msg); - } -#endif + /* This is TCH signalling, for voice frames see GSMTAP_CHANNEL_VOICE */ case GSMTAP_CHANNEL_SDCCH4: case GSMTAP_CHANNEL_SDCCH8: case GSMTAP_CHANNEL_PACCH: @@ -151,6 +146,19 @@ static void virt_um_rcv_cb(struct virt_um_inst *vui, struct msgb *msg) l1sap.u.data.pdch_presence_info = PRES_INFO_BOTH; l1if_process_meas_res(pinst->trx, timeslot, fn, chan_nr, 0, 0, 0, 0); break; + case GSMTAP_CHANNEL_VOICE_F: + case GSMTAP_CHANNEL_VOICE_H: + /* the first byte indicates the type of voice codec (gsmtap_um_voice_type) */ + msg->l2h = msgb_pull(msg, 1); + osmo_prim_init(&l1sap.oph, SAP_GSM_PH, PRIM_TCH, PRIM_OP_INDICATION, msg); + l1sap.u.tch.chan_nr = chan_nr; + l1sap.u.tch.fn = fn; + l1sap.u.tch.rssi = 0; /* Radio Signal Strength Indicator. Best -> 0 */ + l1sap.u.tch.ber10k = 0; /* Bit Error Rate in 0.01%. Best -> 0 */ + l1sap.u.tch.ta_offs_256bits = 0; /* Burst time of arrival in quarter bits. Probably used for Timing Advance calc. Best -> 0 */ + l1sap.u.tch.lqual_cb = 10 * signal_dbm; /* Link quality in centiBel = 10 * dB. */ + l1if_process_meas_res(pinst->trx, timeslot, fn, chan_nr, 0, 0, 0, 0); + break; case GSMTAP_CHANNEL_AGCH: case GSMTAP_CHANNEL_PCH: case GSMTAP_CHANNEL_BCCH: |