jolly has uploaded this change for review.
Add L1 signals to misdn driver
Change-Id: Id8b6fad9b073cf92eee92a6906bf5b57af37e2f0
---
M include/mISDNif.h
M src/input/misdn.c
2 files changed, 78 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-abis refs/changes/33/31033/1
diff --git a/include/mISDNif.h b/include/mISDNif.h
index 8e065d2..4a12eea 100644
--- a/include/mISDNif.h
+++ b/include/mISDNif.h
@@ -193,6 +193,8 @@
#define L1_SIGNAL_RDI_ON 0x0015
#define L1_SIGNAL_SLIP_RX 0x0020
#define L1_SIGNAL_SLIP_TX 0x0021
+#define L1_SIGNAL_SA_BITS 0x0100
+#define L1_SIGNAL_SA_MASK 0x00FF
/*
* protocol ids
diff --git a/src/input/misdn.c b/src/input/misdn.c
index 454c8e8..815eb53 100644
--- a/src/input/misdn.c
+++ b/src/input/misdn.c
@@ -63,6 +63,7 @@
#include <osmocom/abis/e1_input.h>
#include <osmocom/abis/lapd.h>
#include <osmocom/core/talloc.h>
+#include <osmocom/core/signal.h>
#define TS1_ALLOC_SIZE 300
@@ -71,6 +72,7 @@
int use_userspace_lapd;
int unconfirmed_ts[NUM_E1_TS];
int dummy_dchannel;
+ int los, ais, rai;
};
const struct value_string prim_names[] = {
@@ -90,6 +92,67 @@
{ 0, NULL }
};
+static int mph_information_ind(struct e1inp_line *line, int info)
+{
+ struct misdn_line *mline = line->driver_data;
+ struct input_signal_data isd;
+ int was_alarm, is_alarm;
+
+ memset(&isd, 0, sizeof(isd));
+ isd.line = line;
+
+ was_alarm = mline->los || mline->ais || mline->rai;
+
+ if ((info & ~L1_SIGNAL_SA_MASK) == L1_SIGNAL_SA_BITS) {
+ isd.sa_bits = info & L1_SIGNAL_SA_MASK;
+ LOGP(DLMI, LOGL_DEBUG, "L1_SIGNAL_SA_BITS = 0x%02x\n", isd.sa_bits);
+ osmo_signal_dispatch(SS_L_INPUT, S_L_INP_LINE_SA_BITS, &isd);
+ } else
+ switch(info) {
+ case L1_SIGNAL_LOS_OFF:
+ LOGP(DLMI, LOGL_DEBUG, "L1_SIGNAL_LOS_OFF\n");
+ osmo_signal_dispatch(SS_L_INPUT, S_L_INP_LINE_NOLOS, &isd);
+ mline->los = 0;
+ break;
+ case L1_SIGNAL_LOS_ON:
+ LOGP(DLMI, LOGL_DEBUG, "L1_SIGNAL_LOS_ON\n");
+ osmo_signal_dispatch(SS_L_INPUT, S_L_INP_LINE_LOS, &isd);
+ mline->los = 1;
+ break;
+ case L1_SIGNAL_AIS_OFF:
+ LOGP(DLMI, LOGL_DEBUG, "L1_SIGNAL_AIS_OFF\n");
+ osmo_signal_dispatch(SS_L_INPUT, S_L_INP_LINE_NOAIS, &isd);
+ mline->ais = 0;
+ break;
+ case L1_SIGNAL_AIS_ON:
+ LOGP(DLMI, LOGL_DEBUG, "L1_SIGNAL_AIS_ON\n");
+ osmo_signal_dispatch(SS_L_INPUT, S_L_INP_LINE_AIS, &isd);
+ mline->ais = 1;
+ break;
+ case L1_SIGNAL_RDI_OFF:
+ LOGP(DLMI, LOGL_DEBUG, "L1_SIGNAL_RDI_OFF\n");
+ osmo_signal_dispatch(SS_L_INPUT, S_L_INP_LINE_NORAI, &isd);
+ mline->rai = 0;
+ break;
+ case L1_SIGNAL_RDI_ON:
+ LOGP(DLMI, LOGL_DEBUG, "L1_SIGNAL_RDI_ON\n");
+ osmo_signal_dispatch(SS_L_INPUT, S_L_INP_LINE_RAI, &isd);
+ mline->rai = 1;
+ break;
+ default:
+ LOGP(DLMI, LOGL_DEBUG, "Unknown MPH_INFORMATION_IND: 0x%04x\n", info);
+ }
+
+ is_alarm = mline->los || mline->ais || mline->rai;
+
+ if (!was_alarm && is_alarm)
+ osmo_signal_dispatch(SS_L_INPUT, S_L_INP_LINE_ALARM, &isd);
+ if (was_alarm && !is_alarm)
+ osmo_signal_dispatch(SS_L_INPUT, S_L_INP_LINE_NOALARM, &isd);
+
+ return 0;
+}
+
static int handle_ts1_read(struct osmo_fd *bfd)
{
struct e1inp_line *line = bfd->data;
@@ -202,6 +265,13 @@
LOGPITS(e1i_ts, DLMI, LOGL_DEBUG, "RX: %s\n", osmo_hexdump(msg->data, msg->len));
ret = e1inp_rx_ts_lapd(e1i_ts, msg);
break;
+ case MPH_INFORMATION_IND:
+ LOGPITS(e1i_ts, DLMI, LOGL_DEBUG, "MPH_INFORMATION_IND\n");
+ /* remove the Misdn Header */
+ msgb_pull(msg, MISDN_HEADER_LEN);
+ mph_information_ind(line, *((int *)msg->data));
+ msgb_free(msg);
+ break;
default:
msgb_free(msg);
break;
@@ -557,6 +627,12 @@
mline->unconfirmed_ts[ts_nr-1] = 0;
osmo_fd_write_enable(bfd);
break;
+ case MPH_INFORMATION_IND:
+ LOGPITS(e1i_ts, DLMI, LOGL_DEBUG, "MPH_INFORMATION_IND\n");
+ /* remove the Misdn Header */
+ msgb_pull(msg, MISDN_HEADER_LEN);
+ mph_information_ind(line, *((int *)msg->data));
+ break;
default:
break;
}
To view, visit change 31033. To unsubscribe, or for help writing mail filters, visit settings.