summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2012-06-01 21:58:06 +0200
committerHarald Welte <laforge@gnumonks.org>2012-06-01 21:58:06 +0200
commitb0c5b8a26946bd3222bdd227acad64a5c21ebb73 (patch)
tree984c3ef2acf47c45b0ebba0d41e0f4f242760898
parenteaea30c77486fedc1141c249ae2bee0770516051 (diff)
introduce new "Cell Info" Event
-rw-r--r--include/gsmd/event.h1
-rw-r--r--include/gsmd/usock.h9
-rw-r--r--src/util/event.c9
3 files changed, 19 insertions, 0 deletions
diff --git a/include/gsmd/event.h b/include/gsmd/event.h
index 90e4dc7..8da0832 100644
--- a/include/gsmd/event.h
+++ b/include/gsmd/event.h
@@ -19,6 +19,7 @@ enum gsmd_events {
GSMD_EVT_IN_CBM = 14, /* Incoming Cell Broadcast message */
GSMD_EVT_IN_DS = 15, /* SMS Status Report */
GSMD_EVT_IN_ERROR = 16, /* CME/CMS error */
+ GSMD_EVT_CELLINFO = 17, /* Cell Information (MCC/MNC/LAC/CI) */
__NUM_GSMD_EVT
};
diff --git a/include/gsmd/usock.h b/include/gsmd/usock.h
index 0c1d6e2..d77869a 100644
--- a/include/gsmd/usock.h
+++ b/include/gsmd/usock.h
@@ -519,6 +519,15 @@ struct gsmd_evt_auxdata {
char alpha[GSMD_ALPHA_MAXLEN+1];
u_int8_t cli;
} ccwa;
+ struct {
+ u_int16_t mcc;
+ u_int16_t mnc;
+ u_int16_t lac;
+ u_int16_t ci;
+ u_int8_t bsic;
+ u_int16_t arfcn;
+ u_int8_t rxlev;
+ } cell_info;
} u;
u_int8_t data[0];
} __attribute__ ((packed));
diff --git a/src/util/event.c b/src/util/event.c
index de1da99..f086d84 100644
--- a/src/util/event.c
+++ b/src/util/event.c
@@ -253,6 +253,14 @@ static int error_handler(struct lgsm_handle *lh, int evt, struct gsmd_evt_auxdat
return 0;
}
+static int cinfo_handler(struct lgsm_handle *lh, int evt, struct gsmd_evt_auxdata *aux)
+{
+ printf("EVENT: Cell Info: %03u-%03u-%04x-%04x @ %04u (%02u)\n",
+ aux->u.cell_info.mcc, aux->u.cell_info.mnc, aux->u.cell_info.lac,
+ aux->u.cell_info.ci, aux->u.cell_info.arfcn, aux->u.cell_info.rxlev);
+ return 0;
+}
+
int event_init(struct lgsm_handle *lh)
{
int rc;
@@ -268,6 +276,7 @@ int event_init(struct lgsm_handle *lh)
rc |= lgsm_evt_handler_register(lh, GSMD_EVT_OUT_STATUS, &cprog_handler);
rc |= lgsm_evt_handler_register(lh, GSMD_EVT_IN_ERROR, &error_handler);
rc |= lgsm_evt_handler_register(lh, GSMD_EVT_CALL_WAIT, &ccwa_handler);
+ rc |= lgsm_evt_handler_register(lh, GSMD_EVT_CELLINFO, &cinfo_handler);
return rc;
}
personal git repositories of Harald Welte. Your mileage may vary