blob: a67e1bda44124b1296d1115f3ba6a577b0b80ae2 [file] [log] [blame]
Holger Hans Peter Freyther2f4dbeb2010-06-30 14:29:53 +08001#ifndef OSMO_BSC_RF
2#define OSMO_BSC_RF
3
Daniel Willmann65924a52011-08-19 19:38:31 +02004#include <openbsc/gsm_data.h>
Pablo Neira Ayuso136f4532011-03-22 16:47:59 +01005#include <osmocom/core/write_queue.h>
6#include <osmocom/core/timer.h>
Holger Hans Peter Freyther2f4dbeb2010-06-30 14:29:53 +08007
Daniel Willmann65924a52011-08-19 19:38:31 +02008enum osmo_bsc_rf_opstate {
9 OSMO_BSC_RF_OPSTATE_INOPERATIONAL,
10 OSMO_BSC_RF_OPSTATE_OPERATIONAL,
11};
12
13enum osmo_bsc_rf_adminstate {
14 OSMO_BSC_RF_ADMINSTATE_UNLOCKED,
15 OSMO_BSC_RF_ADMINSTATE_LOCKED,
16};
17
18enum osmo_bsc_rf_policy {
19 OSMO_BSC_RF_POLICY_OFF,
20 OSMO_BSC_RF_POLICY_ON,
21 OSMO_BSC_RF_POLICY_GRACE,
22 OSMO_BSC_RF_POLICY_UNKNOWN,
23};
24
25
Holger Hans Peter Freyther2f4dbeb2010-06-30 14:29:53 +080026struct gsm_network;
27
28struct osmo_bsc_rf {
Holger Hans Peter Freyther7a1591b2010-09-16 00:10:18 +080029 /* the value of signal.h */
30 int policy;
Pablo Neira Ayuso4db92992011-05-06 12:11:23 +020031 struct osmo_fd listen;
Holger Hans Peter Freyther2f4dbeb2010-06-30 14:29:53 +080032 struct gsm_network *gsm_network;
Holger Hans Peter Freyther70c232f2010-11-22 19:09:38 +010033
Holger Hans Peter Freyther37ac4202011-02-24 14:19:14 +010034 const char *last_state_command;
35
Holger Hans Peter Freyther11762452011-02-14 23:41:42 +010036 /* delay the command */
37 char last_request;
Pablo Neira Ayusobf540cb2011-05-06 12:11:06 +020038 struct osmo_timer_list delay_cmd;
Holger Hans Peter Freyther11762452011-02-14 23:41:42 +010039
Holger Hans Peter Freyther00c805f2011-02-24 14:40:11 +010040 /* verify that RF is up as it should be */
Pablo Neira Ayusobf540cb2011-05-06 12:11:06 +020041 struct osmo_timer_list rf_check;
Holger Hans Peter Freyther00c805f2011-02-24 14:40:11 +010042
Holger Hans Peter Freyther70c232f2010-11-22 19:09:38 +010043 /* some handling for the automatic grace switch */
Pablo Neira Ayusobf540cb2011-05-06 12:11:06 +020044 struct osmo_timer_list grace_timeout;
Holger Hans Peter Freyther2a896072011-08-16 19:47:39 +020045
46 /* auto RF switch-off due lack of MSC connection */
47 struct osmo_timer_list auto_off_timer;
Holger Hans Peter Freyther2f4dbeb2010-06-30 14:29:53 +080048};
49
50struct osmo_bsc_rf_conn {
Pablo Neira Ayusoe1273b12011-05-06 12:09:47 +020051 struct osmo_wqueue queue;
Holger Hans Peter Freyther7a1591b2010-09-16 00:10:18 +080052 struct osmo_bsc_rf *rf;
Holger Hans Peter Freyther2f4dbeb2010-06-30 14:29:53 +080053};
54
Daniel Willmann65924a52011-08-19 19:38:31 +020055const char *osmo_bsc_rf_get_opstate_name(enum osmo_bsc_rf_opstate opstate);
56const char *osmo_bsc_rf_get_adminstate_name(enum osmo_bsc_rf_adminstate adminstate);
57const char *osmo_bsc_rf_get_policy_name(enum osmo_bsc_rf_policy policy);
58enum osmo_bsc_rf_opstate osmo_bsc_rf_get_opstate_by_bts(struct gsm_bts *bts);
59enum osmo_bsc_rf_adminstate osmo_bsc_rf_get_adminstate_by_bts(struct gsm_bts *bts);
60enum osmo_bsc_rf_policy osmo_bsc_rf_get_policy_by_bts(struct gsm_bts *bts);
Holger Hans Peter Freyther2f4dbeb2010-06-30 14:29:53 +080061struct osmo_bsc_rf *osmo_bsc_rf_create(const char *path, struct gsm_network *net);
Holger Hans Peter Freyther7b6ea562011-08-16 14:29:53 +020062void osmo_bsc_rf_schedule_lock(struct osmo_bsc_rf *rf, char cmd);
Holger Hans Peter Freyther2f4dbeb2010-06-30 14:29:53 +080063
64#endif