diff options
Diffstat (limited to 'src/e1_recorder.c')
-rw-r--r-- | src/e1_recorder.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/e1_recorder.c b/src/e1_recorder.c index 9110ccb..4887c3d 100644 --- a/src/e1_recorder.c +++ b/src/e1_recorder.c @@ -28,6 +28,29 @@ static enum osmo_e1cap_capture_mode ts2cap_mode(struct e1inp_ts *ts) } } +static int sig_inp_cbfn(unsigned int subsys, unsigned int signal, void *handler_data, void *signal_data) +{ + struct input_signal_data *isd = signal_data; + struct e1_recorder_line *rline; + + OSMO_ASSERT(subsys == SS_L_INPUT); + OSMO_ASSERT(isd->line && isd->line->num < ARRAY_SIZE(g_recorder.line)); + + switch (signal) { + case S_L_INP_LINE_ALARM: + LOGP(DMAIN, LOGL_NOTICE, "Line %u: ALARM\n", isd->line->num); + rline = &g_recorder.line[isd->line->num]; + rline->has_alarm = true; + break; + case S_L_INP_LINE_NOALARM: + LOGP(DMAIN, LOGL_NOTICE, "Line %u: NOALARM\n", isd->line->num); + rline = &g_recorder.line[isd->line->num]; + rline->has_alarm = false; + break; + } + return 0; +} + /* receive a raw message frome the E1 timeslot */ void e1ts_raw_recv(struct e1inp_ts *ts, struct msgb *msg) { @@ -35,6 +58,11 @@ void e1ts_raw_recv(struct e1inp_ts *ts, struct msgb *msg) enum osmo_e1cap_capture_mode cap_mode = ts2cap_mode(ts); int rc; + if (rline->has_alarm) { + DEBUGP(DMAIN, "Skipping storage as line %u is in ALARM\n", ts->line->num); + return; + } + /* FIXME: special processing of TFP and PGSL */ rc = e1frame_store(ts, msg, cap_mode); @@ -144,6 +172,8 @@ int main(int argc, char **argv) handle_options(argc, argv); + osmo_signal_register_handler(SS_L_INPUT, sig_inp_cbfn, NULL); + rc = vty_read_config_file(g_config_file, NULL); if (rc < 0) exit(1); |