From 8045fdfb09c2e3b466f371b2ab64ff01f9f7aec1 Mon Sep 17 00:00:00 2001 From: laforge Date: Fri, 20 Oct 2006 20:41:12 +0000 Subject: - some more gsmd / libgsmd code - use autotools for build process git-svn-id: http://svn.openmoko.org/trunk/src/target/gsm@94 99fdad57-331a-0410-800a-d7fa5415bdb3 --- src/gsmd/unsolicited.c | 119 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) (limited to 'src/gsmd/unsolicited.c') diff --git a/src/gsmd/unsolicited.c b/src/gsmd/unsolicited.c index fdcdac7..2c7fddf 100644 --- a/src/gsmd/unsolicited.c +++ b/src/gsmd/unsolicited.c @@ -7,6 +7,7 @@ #include #include +#include #include "gsmd.h" #include "usock.h" @@ -270,3 +271,121 @@ int unsolicited_parse(struct gsmd *g, const char *buf, int len, const char *para return -EINVAL; } +static unsigned int errors_creating_events[] = { + GSM0707_CME_PHONE_FAILURE, + GSM0707_CME_PHONE_NOCONNECT, + GSM0707_CME_PHONE_ADAPT_RESERVED, + GSM0707_CME_PH_SIM_PIN_REQUIRED, + GSM0707_CME_PH_FSIM_PIN_REQUIRED, + GSM0707_CME_PH_FSIM_PUK_REQUIRED, + GSM0707_CME_SIM_NOT_INSERTED, + GSM0707_CME_SIM_PIN_REQUIRED, + GSM0707_CME_SIM_PUK_REQUIRED, + GSM0707_CME_SIM_FAILURE, + GSM0707_CME_SIM_BUSY, + GSM0707_CME_SIM_WRONG, + GSM0707_CME_SIM_PIN2_REQUIRED, + GSM0707_CME_SIM_PUK2_REQUIRED, + GSM0707_CME_MEMORY_FULL, + GSM0707_CME_MEMORY_FAILURE, + GSM0707_CME_NETPERS_PIN_REQUIRED, + GSM0707_CME_NETPERS_PUK_REQUIRED, + GSM0707_CME_NETSUBSET_PIN_REQUIRED, + GSM0707_CME_NETSUBSET_PUK_REQUIRED, + GSM0707_CME_PROVIDER_PIN_REQUIRED, + GSM0707_CME_PROVIDER_PUK_REQUIRED, + GSM0707_CME_CORPORATE_PIN_REQUIRED, + GSM0707_CME_CORPORATE_PUK_REQUIRED, +}; + +static int is_in_array(unsigned int val, unsigned int *arr, unsigned int arr_len) +{ + unsigned int i; + + for (i = 0; i < arr_len; i++) { + if (arr[i] == val) + return 1; + } + + return 0; +} + + +int generate_event_from_cme(struct gsmd *g, unsigned int cme_error) +{ + struct gsmd_ucmd *gu; + struct gsmd_evt_auxdata *eaux; + if (!is_in_array(cme_error, errors_creating_events, + ARRAY_SIZE(errors_creating_events))) + return 0; + + gu = build_event(GSMD_MSG_EVENT, GSMD_EVT_PIN, sizeof(*eaux)); + if (!gu) + return -1; + eaux = ((void *)gu) + sizeof(*gu); + + switch (cme_error) { + case GSM0707_CME_PH_SIM_PIN_REQUIRED: + eaux->u.pin.type = GSMD_PIN_PH_SIM_PIN; + break; + case GSM0707_CME_PH_FSIM_PIN_REQUIRED: + eaux->u.pin.type = GSMD_PIN_PH_FSIM_PIN; + break; + case GSM0707_CME_PH_FSIM_PUK_REQUIRED: + eaux->u.pin.type = GSMD_PIN_PH_FSIM_PUK; + break; + case GSM0707_CME_SIM_PIN_REQUIRED: + eaux->u.pin.type = GSMD_PIN_SIM_PIN; + break; + case GSM0707_CME_SIM_PUK_REQUIRED: + eaux->u.pin.type = GSMD_PIN_SIM_PUK; + break; + case GSM0707_CME_SIM_PIN2_REQUIRED: + eaux->u.pin.type = GSMD_PIN_SIM_PIN2; + break; + case GSM0707_CME_SIM_PUK2_REQUIRED: + eaux->u.pin.type = GSMD_PIN_SIM_PUK2; + break; + case GSM0707_CME_NETPERS_PIN_REQUIRED: + eaux->u.pin.type = GSMD_PIN_PH_NET_PIN; + break; + case GSM0707_CME_NETPERS_PUK_REQUIRED: + eaux->u.pin.type = GSMD_PIN_PH_NET_PUK; + break; + case GSM0707_CME_NETSUBSET_PIN_REQUIRED: + eaux->u.pin.type = GSMD_PIN_PH_NETSUB_PIN; + break; + case GSM0707_CME_NETSUBSET_PUK_REQUIRED: + eaux->u.pin.type = GSMD_PIN_PH_NETSUB_PUK; + break; + case GSM0707_CME_PROVIDER_PIN_REQUIRED: + eaux->u.pin.type = GSMD_PIN_PH_SP_PIN; + break; + case GSM0707_CME_PROVIDER_PUK_REQUIRED: + eaux->u.pin.type = GSMD_PIN_PH_SP_PUK; + break; + case GSM0707_CME_CORPORATE_PIN_REQUIRED: + eaux->u.pin.type = GSMD_PIN_PH_CORP_PIN; + break; + case GSM0707_CME_CORPORATE_PUK_REQUIRED: + eaux->u.pin.type = GSMD_PIN_PH_CORP_PUK; + break; + + case GSM0707_CME_SIM_FAILURE: + case GSM0707_CME_SIM_BUSY: + case GSM0707_CME_SIM_WRONG: + case GSM0707_CME_MEMORY_FULL: + case GSM0707_CME_MEMORY_FAILURE: + case GSM0707_CME_PHONE_FAILURE: + case GSM0707_CME_PHONE_NOCONNECT: + case GSM0707_CME_PHONE_ADAPT_RESERVED: + case GSM0707_CME_SIM_NOT_INSERTED: + /* FIXME */ + return 0; + break; + default: + return 0; + break; + } + return usock_evt_send(g, gu, GSMD_EVT_PIN); +} -- cgit v1.2.3