laforge has submitted this change. (
https://gerrit.osmocom.org/c/libosmo-abis/+/41140?usp=email )
Change subject: Add CAS channel support
......................................................................
Add CAS channel support
CAS is currently supported by e1d driver only.
Change-Id: I81cc89e01bb4207dc899ab28f24a131f24b61c9c
---
M TODO-RELEASE
M include/osmocom/abis/e1_input.h
M src/e1_input.c
M src/input/e1d.c
4 files changed, 46 insertions(+), 0 deletions(-)
Approvals:
laforge: Looks good to me, approved
Jenkins Builder: Verified
diff --git a/TODO-RELEASE b/TODO-RELEASE
index d07457d..5664f80 100644
--- a/TODO-RELEASE
+++ b/TODO-RELEASE
@@ -8,3 +8,7 @@
# If any interfaces have been removed or changed since the last public
release: c:r:0.
#library what description / commit summary line
libosmotrau add osmo_amrt_fill_with_dhf()
+libosmoabis ABI break added field to struct e1inp_driver
(field added at the end)
+libosmoabis ABI break added field to struct input_signal_data
(field added at the end)
+libosmoabis added New API function: e1inp_ts_set_cas()
+libosmoabis added New API signal: S_L_INP_LINE_CAS
diff --git a/include/osmocom/abis/e1_input.h b/include/osmocom/abis/e1_input.h
index 66985ea..244d0a4 100644
--- a/include/osmocom/abis/e1_input.h
+++ b/include/osmocom/abis/e1_input.h
@@ -195,6 +195,10 @@
/* Optional callback to perform driver specific initialization when the
line is created. */
int (*line_create)(struct e1inp_line *line);
+
+ /* Set CAS bits to transmit in TS16, that are associated with given
time slot */
+ int (*set_cas)(struct e1inp_ts *ts, uint8_t bits, bool query_rx);
+
};
struct e1inp_line_ops {
@@ -274,6 +278,7 @@
S_L_INP_LINE_SA_BITS,
S_L_INP_LINE_LOF,
S_L_INP_LINE_NOLOF,
+ S_L_INP_LINE_CAS,
};
extern const struct value_string e1inp_signal_names[];
@@ -344,6 +349,12 @@
*/
int e1inp_ts_set_sa_bits(struct e1inp_line *line, uint8_t sa_bits);
+/*
+ * configure CAS bits on TS16 that are associated to given TS, if supported by
driver
+ * cas (MSB to LSB): 0000ABCD
+ */
+int e1inp_ts_set_cas(struct e1inp_ts *ts, uint8_t bits, bool query_rx);
+
/* obtain a string identifier/name for the given timeslot */
void e1inp_ts_name(char *out, size_t out_len, const struct e1inp_ts *ts);
@@ -403,6 +414,7 @@
uint8_t sa_bits;
struct gsm_bts_trx *trx;
struct e1inp_line *line;
+ uint8_t cas;
};
int abis_sendmsg(struct msgb *msg);
diff --git a/src/e1_input.c b/src/e1_input.c
index 066a572..c5ee38f 100644
--- a/src/e1_input.c
+++ b/src/e1_input.c
@@ -527,6 +527,16 @@
return driver->set_sa_bits(line, sa_bits);
}
+int e1inp_ts_set_cas(struct e1inp_ts *ts, uint8_t bits, bool query_rx)
+{
+ struct e1inp_driver *driver;
+
+ driver = ts->line->driver;
+ if (!driver->set_cas)
+ return -ENOTSUP;
+ return driver->set_cas(ts, bits, query_rx);
+}
+
static int e1inp_line_use_cb(struct osmo_use_count_entry *use_count_entry,
int32_t old_use_count,
const char *file, int file_line)
{
diff --git a/src/input/e1d.c b/src/input/e1d.c
index dd4e9fe..978b8cb 100644
--- a/src/input/e1d.c
+++ b/src/input/e1d.c
@@ -93,6 +93,7 @@
struct e1inp_line *e1_line;
struct input_signal_data isd;
int signal;
+ struct osmo_e1dp_cas_bits *cas;
memset(&isd, 0, sizeof(isd));
@@ -133,6 +134,13 @@
if (len < 1)
return;
isd.sa_bits = *data;
+ case E1DP_EVT_CAS:
+ signal = S_L_INP_LINE_CAS;
+ cas = (struct osmo_e1dp_cas_bits *)data;
+ if (len < sizeof(*cas))
+ return;
+ isd.cas = cas->bits;
+ isd.ts_nr = ts;
break;
default:
/* Ignore all other events. */
@@ -844,10 +852,22 @@
return osmo_e1dp_client_set_sa_bits(g_e1d, e1d_intf, e1d_line, sa_bits);
}
+static int set_cas(struct e1inp_ts *ts, uint8_t bits, bool query_rx)
+{
+ /* we use higher 4 bits for interface, lower 4 bits for line,
+ * resulting in max. 16 interfaces with 16 lines each */
+ uint8_t e1d_intf = (ts->line->port_nr >> 4) & 0xF;
+ uint8_t e1d_line = ts->line->port_nr & 0xF;
+ struct osmo_e1dp_cas_bits cas = { bits, query_rx };
+
+ return osmo_e1dp_client_set_cas(g_e1d, e1d_intf, e1d_line, ts->num,
&cas);
+}
+
struct e1inp_driver e1d_driver = {
.name = "e1d",
.want_write = e1d_want_write,
.set_sa_bits = set_sa_bits,
+ .set_cas = set_cas,
.line_update = e1d_line_update,
.line_create = e1d_line_create,
};
--
To view, visit https://gerrit.osmocom.org/c/libosmo-abis/+/41140?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: libosmo-abis
Gerrit-Branch: master
Gerrit-Change-Id: I81cc89e01bb4207dc899ab28f24a131f24b61c9c
Gerrit-Change-Number: 41140
Gerrit-PatchSet: 5
Gerrit-Owner: jolly <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-CC: osmith <[email protected]>