From 1425058415b56cba62815d6c4d2232fa989f79bc Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Tue, 23 Aug 2011 22:48:59 +0000 Subject: [PATCH] Also reset battery information when the modem is not available anymore --- include/Phone/modem.h | 10 +++++++++- po/fr.po | 10 +++++----- src/modems/hayes.c | 30 +++++++++++++++++++++--------- src/phone.c | 7 ++++--- 4 files changed, 39 insertions(+), 18 deletions(-) diff --git a/include/Phone/modem.h b/include/Phone/modem.h index 920f42d..2ada38d 100644 --- a/include/Phone/modem.h +++ b/include/Phone/modem.h @@ -120,6 +120,13 @@ typedef enum _ModemRegistrationStatus MODEM_REGISTRATION_STATUS_DENIED } ModemRegistrationStatus; +typedef enum _ModemStatus +{ + MODEM_STATUS_UNAVAILABLE = 0, + MODEM_STATUS_OFFLINE, + MODEM_STATUS_ONLINE +} ModemStatus; + /* ModemConfig */ typedef enum _ModemConfigType { @@ -185,6 +192,7 @@ typedef union _ModemEvent ModemEventType type; ModemBatteryStatus status; double level; + int charging; } battery_level; /* MODEM_EVENT_TYPE_CALL */ @@ -268,7 +276,7 @@ typedef union _ModemEvent /* MODEM_EVENT_TYPE_STATUS */ struct { ModemEventType type; - int online; + ModemStatus status; } status; } ModemEvent; diff --git a/po/fr.po b/po/fr.po index bfd8ab1..3b1ab07 100644 --- a/po/fr.po +++ b/po/fr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Phone 0.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-08-22 03:22+0200\n" +"POT-Creation-Date: 2011-08-24 00:46+0200\n" "PO-Revision-Date: 2010-04-24 02:07+0200\n" "Last-Translator: Pierre Pronchery \n" "Language-Team: DeforaOS development (French) \n" @@ -311,21 +311,21 @@ msgstr "Le numéro ne peut être vide" msgid "Message sent" msgstr "Message envoyé" -#: ../src/phone.c:3728 +#: ../src/phone.c:3729 #, c-format msgid "Wrong %s" msgstr "Mauvais %s" -#: ../src/phone.c:3735 +#: ../src/phone.c:3736 #, c-format msgid "%s is valid" msgstr "%s valide" -#: ../src/phone.c:3800 +#: ../src/phone.c:3801 msgid "Raw data (not shown)" msgstr "Données brutes (non affichées)" -#: ../src/phone.c:3833 +#: ../src/phone.c:3834 msgid "Message deleted" msgstr "Message effacé" diff --git a/src/modems/hayes.c b/src/modems/hayes.c index 76d88f2..9432cda 100644 --- a/src/modems/hayes.c +++ b/src/modems/hayes.c @@ -1030,9 +1030,15 @@ static int _hayes_stop(ModemPlugin * modem) event->registration._operator = NULL; event->registration.signal = 0.0 / 0.0; event->registration.roaming = 0; - /* report as being offline */ + /* reset battery information */ + event = &hayes->events[MODEM_EVENT_TYPE_BATTERY_LEVEL]; + event->battery_level.status = MODEM_BATTERY_STATUS_UNKNOWN; + event->battery_level.level = 0.0 / 0.0; + event->battery_level.charging = 0; + modem->helper->event(modem->helper->modem, event); + /* report as being unavailable */ event = &hayes->events[MODEM_EVENT_TYPE_STATUS]; - event->status.online = 0; + event->status.status = MODEM_STATUS_UNAVAILABLE; modem->helper->event(modem->helper->modem, event); /* FIXME some more? */ return 0; @@ -1953,8 +1959,8 @@ static HayesCommandStatus _on_reset_callback(HayesCommand * command, _hayes_request(modem, &request); request.type = HAYES_REQUEST_FUNCTIONAL; _hayes_request(modem, &request); - /* report being online */ - event->status.online = 1; + /* report being offline */ + event->status.status = MODEM_STATUS_OFFLINE; modem->helper->event(modem->helper->modem, event); return HCS_SUCCESS; case HCS_TIMEOUT: @@ -2532,6 +2538,7 @@ static void _on_trigger_cbc(ModemPlugin * modem, char const * answer) if((res = sscanf(answer, "%u,%u", &u, &v)) != 2) return; event->battery_level.status = MODEM_BATTERY_STATUS_UNKNOWN; + event->battery_level.charging = 0; if(u == 0) u = MODEM_BATTERY_STATUS_CONNECTED; else if(u == 1) @@ -2544,8 +2551,9 @@ static void _on_trigger_cbc(ModemPlugin * modem, char const * answer) u = MODEM_BATTERY_STATUS_UNKNOWN; switch((event->battery_level.status = u)) { - case MODEM_BATTERY_STATUS_CONNECTED: case MODEM_BATTERY_STATUS_CHARGING: + event->battery_level.charging = 1; + case MODEM_BATTERY_STATUS_CONNECTED: f = v; if(hayes->quirks & HAYES_QUIRK_BATTERY_70) f /= 70.0; @@ -2564,18 +2572,22 @@ static void _on_trigger_cbc(ModemPlugin * modem, char const * answer) /* on_trigger_cfun */ static void _on_trigger_cfun(ModemPlugin * modem, char const * answer) { - unsigned int u; + Hayes * hayes = modem->priv; + ModemEvent * event = &hayes->events[MODEM_EVENT_TYPE_STATUS]; ModemRequest request; + unsigned int u; if(sscanf(answer, "%u", &u) != 1) return; - memset(&request, 0, sizeof(request)); if(u != 1) { - /* FIXME only enable if requested to */ - request.type = HAYES_REQUEST_FUNCTIONAL_ENABLE; + event->status.status = MODEM_STATUS_OFFLINE; + modem->helper->event(modem->helper->modem, event); return; } + event->status.status = MODEM_STATUS_ONLINE; + modem->helper->event(modem->helper->modem, event); + memset(&request, 0, sizeof(request)); request.type = HAYES_REQUEST_EXTENDED_RING_REPORTS; _hayes_request(modem, &request); request.type = MODEM_REQUEST_CALL_PRESENTATION; diff --git a/src/phone.c b/src/phone.c index 62c1829..66c7b20 100644 --- a/src/phone.c +++ b/src/phone.c @@ -3701,9 +3701,10 @@ static void _phone_modem_event(void * priv, ModemEvent * event) NULL); break; case MODEM_EVENT_TYPE_STATUS: - pevent.type = (event->status.online != 0) - ? PHONE_EVENT_TYPE_ONLINE - : PHONE_EVENT_TYPE_OFFLINE; + if(event->status.status == MODEM_STATUS_ONLINE) + pevent.type = PHONE_EVENT_TYPE_ONLINE; + else /* XXX may not always be right */ + pevent.type = PHONE_EVENT_TYPE_OFFLINE; phone_event(phone, &pevent); break; default: