Also reset battery information when the modem is not available anymore

This commit is contained in:
Pierre Pronchery 2011-08-23 22:48:59 +00:00
parent 86f50f936e
commit 1425058415
4 changed files with 39 additions and 18 deletions

View File

@ -120,6 +120,13 @@ typedef enum _ModemRegistrationStatus
MODEM_REGISTRATION_STATUS_DENIED MODEM_REGISTRATION_STATUS_DENIED
} ModemRegistrationStatus; } ModemRegistrationStatus;
typedef enum _ModemStatus
{
MODEM_STATUS_UNAVAILABLE = 0,
MODEM_STATUS_OFFLINE,
MODEM_STATUS_ONLINE
} ModemStatus;
/* ModemConfig */ /* ModemConfig */
typedef enum _ModemConfigType typedef enum _ModemConfigType
{ {
@ -185,6 +192,7 @@ typedef union _ModemEvent
ModemEventType type; ModemEventType type;
ModemBatteryStatus status; ModemBatteryStatus status;
double level; double level;
int charging;
} battery_level; } battery_level;
/* MODEM_EVENT_TYPE_CALL */ /* MODEM_EVENT_TYPE_CALL */
@ -268,7 +276,7 @@ typedef union _ModemEvent
/* MODEM_EVENT_TYPE_STATUS */ /* MODEM_EVENT_TYPE_STATUS */
struct { struct {
ModemEventType type; ModemEventType type;
int online; ModemStatus status;
} status; } status;
} ModemEvent; } ModemEvent;

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Phone 0.0.0\n" "Project-Id-Version: Phone 0.0.0\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2010-04-24 02:07+0200\n"
"Last-Translator: Pierre Pronchery <khorben@defora.org>\n" "Last-Translator: Pierre Pronchery <khorben@defora.org>\n"
"Language-Team: DeforaOS development (French) <devel-fr@lists.defora.org>\n" "Language-Team: DeforaOS development (French) <devel-fr@lists.defora.org>\n"
@ -311,21 +311,21 @@ msgstr "Le numéro ne peut être vide"
msgid "Message sent" msgid "Message sent"
msgstr "Message envoyé" msgstr "Message envoyé"
#: ../src/phone.c:3728 #: ../src/phone.c:3729
#, c-format #, c-format
msgid "Wrong %s" msgid "Wrong %s"
msgstr "Mauvais %s" msgstr "Mauvais %s"
#: ../src/phone.c:3735 #: ../src/phone.c:3736
#, c-format #, c-format
msgid "%s is valid" msgid "%s is valid"
msgstr "%s valide" msgstr "%s valide"
#: ../src/phone.c:3800 #: ../src/phone.c:3801
msgid "Raw data (not shown)" msgid "Raw data (not shown)"
msgstr "Données brutes (non affichées)" msgstr "Données brutes (non affichées)"
#: ../src/phone.c:3833 #: ../src/phone.c:3834
msgid "Message deleted" msgid "Message deleted"
msgstr "Message effacé" msgstr "Message effacé"

View File

@ -1030,9 +1030,15 @@ static int _hayes_stop(ModemPlugin * modem)
event->registration._operator = NULL; event->registration._operator = NULL;
event->registration.signal = 0.0 / 0.0; event->registration.signal = 0.0 / 0.0;
event->registration.roaming = 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 = &hayes->events[MODEM_EVENT_TYPE_STATUS];
event->status.online = 0; event->status.status = MODEM_STATUS_UNAVAILABLE;
modem->helper->event(modem->helper->modem, event); modem->helper->event(modem->helper->modem, event);
/* FIXME some more? */ /* FIXME some more? */
return 0; return 0;
@ -1953,8 +1959,8 @@ static HayesCommandStatus _on_reset_callback(HayesCommand * command,
_hayes_request(modem, &request); _hayes_request(modem, &request);
request.type = HAYES_REQUEST_FUNCTIONAL; request.type = HAYES_REQUEST_FUNCTIONAL;
_hayes_request(modem, &request); _hayes_request(modem, &request);
/* report being online */ /* report being offline */
event->status.online = 1; event->status.status = MODEM_STATUS_OFFLINE;
modem->helper->event(modem->helper->modem, event); modem->helper->event(modem->helper->modem, event);
return HCS_SUCCESS; return HCS_SUCCESS;
case HCS_TIMEOUT: 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) if((res = sscanf(answer, "%u,%u", &u, &v)) != 2)
return; return;
event->battery_level.status = MODEM_BATTERY_STATUS_UNKNOWN; event->battery_level.status = MODEM_BATTERY_STATUS_UNKNOWN;
event->battery_level.charging = 0;
if(u == 0) if(u == 0)
u = MODEM_BATTERY_STATUS_CONNECTED; u = MODEM_BATTERY_STATUS_CONNECTED;
else if(u == 1) else if(u == 1)
@ -2544,8 +2551,9 @@ static void _on_trigger_cbc(ModemPlugin * modem, char const * answer)
u = MODEM_BATTERY_STATUS_UNKNOWN; u = MODEM_BATTERY_STATUS_UNKNOWN;
switch((event->battery_level.status = u)) switch((event->battery_level.status = u))
{ {
case MODEM_BATTERY_STATUS_CONNECTED:
case MODEM_BATTERY_STATUS_CHARGING: case MODEM_BATTERY_STATUS_CHARGING:
event->battery_level.charging = 1;
case MODEM_BATTERY_STATUS_CONNECTED:
f = v; f = v;
if(hayes->quirks & HAYES_QUIRK_BATTERY_70) if(hayes->quirks & HAYES_QUIRK_BATTERY_70)
f /= 70.0; f /= 70.0;
@ -2564,18 +2572,22 @@ static void _on_trigger_cbc(ModemPlugin * modem, char const * answer)
/* on_trigger_cfun */ /* on_trigger_cfun */
static void _on_trigger_cfun(ModemPlugin * modem, char const * answer) 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; ModemRequest request;
unsigned int u;
if(sscanf(answer, "%u", &u) != 1) if(sscanf(answer, "%u", &u) != 1)
return; return;
memset(&request, 0, sizeof(request));
if(u != 1) if(u != 1)
{ {
/* FIXME only enable if requested to */ event->status.status = MODEM_STATUS_OFFLINE;
request.type = HAYES_REQUEST_FUNCTIONAL_ENABLE; modem->helper->event(modem->helper->modem, event);
return; 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; request.type = HAYES_REQUEST_EXTENDED_RING_REPORTS;
_hayes_request(modem, &request); _hayes_request(modem, &request);
request.type = MODEM_REQUEST_CALL_PRESENTATION; request.type = MODEM_REQUEST_CALL_PRESENTATION;

View File

@ -3701,9 +3701,10 @@ static void _phone_modem_event(void * priv, ModemEvent * event)
NULL); NULL);
break; break;
case MODEM_EVENT_TYPE_STATUS: case MODEM_EVENT_TYPE_STATUS:
pevent.type = (event->status.online != 0) if(event->status.status == MODEM_STATUS_ONLINE)
? PHONE_EVENT_TYPE_ONLINE pevent.type = PHONE_EVENT_TYPE_ONLINE;
: PHONE_EVENT_TYPE_OFFLINE; else /* XXX may not always be right */
pevent.type = PHONE_EVENT_TYPE_OFFLINE;
phone_event(phone, &pevent); phone_event(phone, &pevent);
break; break;
default: default: