diff options
-rw-r--r-- | include/osmo-bts/bts.h | 8 | ||||
-rw-r--r-- | src/osmo-bts-sysmo/l1_if.c | 6 | ||||
-rw-r--r-- | src/osmo-bts-sysmo/main.c | 25 |
3 files changed, 36 insertions, 3 deletions
diff --git a/include/osmo-bts/bts.h b/include/osmo-bts/bts.h index 583c1eb1..e2020350 100644 --- a/include/osmo-bts/bts.h +++ b/include/osmo-bts/bts.h @@ -3,6 +3,12 @@ #include <osmo-bts/gsm_data.h> +enum bts_global_status { + BTS_STATUS_RF_ACTIVE, + BTS_STATUS_RF_MUTE, + BTS_STATUS_LAST, +}; + extern void *tall_bts_ctx; int bts_init(struct gsm_bts *bts); @@ -27,5 +33,7 @@ int lchan_init_lapdm(struct gsm_lchan *lchan); void load_timer_start(struct gsm_bts *bts); +void bts_update_status(enum bts_global_status which, int on); + #endif /* _BTS_H */ diff --git a/src/osmo-bts-sysmo/l1_if.c b/src/osmo-bts-sysmo/l1_if.c index 48d71b0d..c6f99885 100644 --- a/src/osmo-bts-sysmo/l1_if.c +++ b/src/osmo-bts-sysmo/l1_if.c @@ -1021,7 +1021,7 @@ static int activate_rf_compl_cb(struct gsm_bts_trx *trx, struct msgb *resp) get_value_string(femtobts_l1status_names, status)); bts_shutdown(trx->bts, "RF-ACT failure"); } else - sysmobts_led_set(LED_RF_ACTIVE, 1); + bts_update_status(BTS_STATUS_RF_ACTIVE, 1); /* signal availability */ oml_mo_state_chg(&trx->mo, NM_OPSTATE_DISABLED, NM_AVSTATE_OK); @@ -1032,7 +1032,7 @@ static int activate_rf_compl_cb(struct gsm_bts_trx *trx, struct msgb *resp) for (i = 0; i < ARRAY_SIZE(trx->ts); i++) oml_mo_state_chg(&trx->ts[i].mo, NM_OPSTATE_DISABLED, NM_AVSTATE_DEPENDENCY); } else { - sysmobts_led_set(LED_RF_ACTIVE, 0); + bts_update_status(BTS_STATUS_RF_ACTIVE, 0); oml_mo_state_chg(&trx->mo, NM_OPSTATE_DISABLED, NM_AVSTATE_OFF_LINE); oml_mo_state_chg(&trx->bb_transc.mo, NM_OPSTATE_DISABLED, NM_AVSTATE_OFF_LINE); } @@ -1119,7 +1119,7 @@ static int mute_rf_compl_cb(struct gsm_bts_trx *trx, struct msgb *resp) } else { LOGP(DL1C, LOGL_INFO, "Rx RF-MUTE.conf with status=%s\n", get_value_string(femtobts_l1status_names, status)); - sysmobts_led_set(LED_RF_ACTIVE, !fl1h->last_rf_mute[0]); + bts_update_status(BTS_STATUS_RF_MUTE, fl1h->last_rf_mute[0]); oml_mo_rf_lock_chg(&trx->mo, fl1h->last_rf_mute, 1); } diff --git a/src/osmo-bts-sysmo/main.c b/src/osmo-bts-sysmo/main.c index 5a7c8122..046326be 100644 --- a/src/osmo-bts-sysmo/main.c +++ b/src/osmo-bts-sysmo/main.c @@ -51,6 +51,7 @@ #include "utils.h" #include "eeprom.h" #include "l1_if.h" +#include "hw_misc.h" /* FIXME: read from real hardware */ const uint8_t abis_mac[6] = { 0,1,2,3,4,5 }; @@ -122,6 +123,30 @@ void clk_cal_use_eeprom(struct gsm_bts *bts) "Read clock calibration(%d) from EEPROM.\n", hdl->clk_cal); } +void bts_update_status(enum bts_global_status which, int on) +{ + static uint64_t states = 0; + uint64_t old_states = states; + int led_rf_active_on; + + if (on) + states |= (1ULL << which); + else + states &= ~(1ULL << which); + + led_rf_active_on = + (states & (1ULL << BTS_STATUS_RF_ACTIVE)) && + !(states & (1ULL << BTS_STATUS_RF_MUTE)); + + LOGP(DL1C, LOGL_INFO, + "Set global status #%d to %d (%04llx -> %04llx), LEDs: ACT %d\n", + which, on, + (long long)old_states, (long long)states, + led_rf_active_on); + + sysmobts_led_set(LED_RF_ACTIVE, led_rf_active_on); +} + static void print_help() { printf( "Some useful options:\n" |