diff options
author | Harald Welte <laforge@gnumonks.org> | 2012-06-01 21:58:06 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2012-06-01 21:58:06 +0200 |
commit | b0c5b8a26946bd3222bdd227acad64a5c21ebb73 (patch) | |
tree | 984c3ef2acf47c45b0ebba0d41e0f4f242760898 | |
parent | eaea30c77486fedc1141c249ae2bee0770516051 (diff) |
introduce new "Cell Info" Event
-rw-r--r-- | include/gsmd/event.h | 1 | ||||
-rw-r--r-- | include/gsmd/usock.h | 9 | ||||
-rw-r--r-- | src/util/event.c | 9 |
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; } |