/* Transmit L1CTL_DM_EST_REQ */
int tx_ph_dm_est_req(struct osmocom_ms *ms, uint16_t band_arfcn, uint8_t chan_nr);
+/* Transmit NEW_CCCH_REQ */
+int l1ctl_tx_ccch_req(struct osmocom_ms *ms);
int l1ctl_tx_echo_req(struct osmocom_ms *ms, unsigned int len);
struct osmol2_entity l2_entity;
};
+enum osmobb_sig_subsys {
+ SS_L1CTL,
+};
+
+enum osmobb_meas_sig {
+ S_L1CTL_RESET,
+ S_L1CTL_PM_RES,
+};
+
+struct osmobb_meas_res {
+ struct osmocom_ms *ms;
+ uint16_t band_arfcn;
+ uint8_t rx_lev;
+};
+
#endif
#include <osmocore/msgb.h>
#include <osmocore/talloc.h>
#include <osmocore/select.h>
+#include <osmocore/signal.h>
+
+static int signal_cb(unsigned int subsys, unsigned int signal,
+ void *handler_data, void *signal_data)
+{
+ struct osmocom_ms *ms;
+
+ if (subsys != SS_L1CTL)
+ return 0;
+
+ switch (signal) {
+ case S_L1CTL_RESET:
+ ms = signal_data;
+ return l1ctl_tx_pm_req_range(ms, 0, 124);
+ break;
+ }
+ return 0;
+}
int l23_app_init(struct osmocom_ms *ms)
{
/* don't do layer3_init() as we don't want an actualy L3 */
- return 0;
+ return register_signal_handler(SS_L1CTL, &signal_cb, NULL);
}
#include <osmocore/msgb.h>
#include <osmocore/talloc.h>
#include <osmocore/select.h>
+#include <osmocore/signal.h>
+
+static int signal_cb(unsigned int subsys, unsigned int signal,
+ void *handler_data, void *signal_data)
+{
+ struct osmocom_ms *ms;
+
+ if (subsys != SS_L1CTL)
+ return 0;
+
+ switch (signal) {
+ case S_L1CTL_RESET:
+ ms = signal_data;
+ return l1ctl_tx_ccch_req(ms);
+ break;
+ }
+ return 0;
+}
+
int l23_app_init(struct osmocom_ms *ms)
{
+ register_signal_handler(SS_L1CTL, &signal_cb, NULL);
return layer3_init(ms);
}
#include <l1a_l23_interface.h>
+#include <osmocore/signal.h>
#include <osmocore/logging.h>
#include <osmocore/timer.h>
#include <osmocore/msgb.h>
static int rx_l1_reset(struct osmocom_ms *ms)
{
printf("Layer1 Reset.\n");
- return l1ctl_tx_pm_req_range(ms, 0, 124);
- //return l1ctl_tx_ccch_req(ms);
+ dispatch_signal(SS_L1CTL, S_L1CTL_RESET, ms);
}
/* Receive L1CTL_PM_RESP */
for (pmr = (struct l1ctl_pm_resp *) msg->l1h;
(uint8_t *) pmr < msg->tail; pmr++) {
+ struct osmobb_meas_res mr;
DEBUGP(DL1C, "PM MEAS: ARFCN: %4u RxLev: %3d %3d\n",
ntohs(pmr->band_arfcn), pmr->pm[0], pmr->pm[1]);
+ mr.band_arfcn = ntohs(pmr->band_arfcn);
+ mr.rx_lev = (pmr->pm[0] + pmr->pm[1]) / 2;
+ mr.ms = ms;
+ dispatch_signal(SS_L1CTL, S_L1CTL_PM_RES, &mr);
}
return 0;
}