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
} 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;

View File

@ -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 <khorben@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"
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é"

View File

@ -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;

View File

@ -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: