From 29ac2ebb26b0ca1fc7b377729c476a6c95f9b4eb Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Mon, 31 Oct 2011 02:11:52 +0000 Subject: [PATCH] Additional fixes (for the Openmoko Freerunner notably) --- po/fr.po | 124 ++++++++++++++++++++--------------------- src/modems/hayes.c | 37 ++++++++++-- src/phone.c | 10 ++-- src/plugins/profiles.c | 3 +- 4 files changed, 103 insertions(+), 71 deletions(-) diff --git a/po/fr.po b/po/fr.po index 9c92a1f..46b519a 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-10-31 01:13+0100\n" +"POT-Creation-Date: 2011-10-31 03:11+0100\n" "PO-Revision-Date: 2010-04-24 02:07+0200\n" "Last-Translator: Pierre Pronchery \n" "Language-Team: DeforaOS development (French) \n" @@ -47,11 +47,11 @@ msgstr "Brouillons" msgid "Trash" msgstr "Corbeille" -#: ../src/phone.c:510 ../src/phone.c:2589 +#: ../src/phone.c:510 ../src/phone.c:2591 msgid "System preferences" msgstr "Préférences système" -#: ../src/phone.c:521 ../src/phone.c:2015 +#: ../src/phone.c:521 ../src/phone.c:2017 msgid "Plug-ins" msgstr "Greffons" @@ -100,240 +100,240 @@ msgstr "Appel sortant" msgid "Call finished" msgstr "Appel terminé" -#: ../src/phone.c:1475 +#: ../src/phone.c:1476 msgid "_Answer" msgstr "_Répondre" -#: ../src/phone.c:1480 +#: ../src/phone.c:1481 msgid "_Hangup" msgstr "Ra_ccrocher" -#: ../src/phone.c:1485 +#: ../src/phone.c:1486 msgid "_Reject" msgstr "Re_jeter" -#: ../src/phone.c:1505 +#: ../src/phone.c:1507 msgid "Loudspeaker" msgstr "Haut-parleur" -#: ../src/phone.c:1513 +#: ../src/phone.c:1515 msgid "Mute microphone" msgstr "Couper le microphone" -#: ../src/phone.c:1521 +#: ../src/phone.c:1523 msgid "Show dialer" msgstr "Afficher le cadran" -#: ../src/phone.c:1562 +#: ../src/phone.c:1564 #, c-format msgid "Enter %s" msgstr "Entrer %s" -#: ../src/phone.c:1605 +#: ../src/phone.c:1607 msgid "Enter" msgstr "Entrer" -#: ../src/phone.c:1607 +#: ../src/phone.c:1609 msgid "Skip" msgstr "Ignorer" -#: ../src/phone.c:1635 +#: ../src/phone.c:1637 msgid "Contacts" msgstr "Contacts" -#: ../src/phone.c:1641 ../src/phone.c:1760 ../src/phone.c:1796 -#: ../src/phone.c:1911 ../src/phone.c:2267 +#: ../src/phone.c:1643 ../src/phone.c:1762 ../src/phone.c:1798 +#: ../src/phone.c:1913 ../src/phone.c:2269 msgid "Call" msgstr "Appeler" -#: ../src/phone.c:1647 +#: ../src/phone.c:1649 msgid "Write" msgstr "Écrire" -#: ../src/phone.c:1689 ../src/phone.c:2046 ../src/phone.c:2378 +#: ../src/phone.c:1691 ../src/phone.c:2048 ../src/phone.c:2380 msgid "Name" msgstr "Nom" -#: ../src/phone.c:1735 +#: ../src/phone.c:1737 msgid "Dialer" msgstr "Composer" -#: ../src/phone.c:1762 +#: ../src/phone.c:1764 msgid "Hang up" msgstr "Raccrocher" -#: ../src/phone.c:1790 +#: ../src/phone.c:1792 msgid "Phone logs" msgstr "Journal d'appels" -#: ../src/phone.c:1802 +#: ../src/phone.c:1804 msgid "Message" msgstr "Message" -#: ../src/phone.c:1833 +#: ../src/phone.c:1835 msgid "Direction" msgstr "Direction" -#: ../src/phone.c:1838 ../src/phone.c:1957 +#: ../src/phone.c:1840 ../src/phone.c:1959 msgid "To/From" msgstr "Vers/De" -#: ../src/phone.c:1844 ../src/phone.c:1965 +#: ../src/phone.c:1846 ../src/phone.c:1967 msgid "Date" msgstr "Date" -#: ../src/phone.c:1905 +#: ../src/phone.c:1907 msgid "Messages" msgstr "Messages" -#: ../src/phone.c:1916 +#: ../src/phone.c:1918 msgid "New message" msgstr "Nouveau message" -#: ../src/phone.c:1922 ../src/phone.c:2273 +#: ../src/phone.c:1924 ../src/phone.c:2275 msgid "Reply" msgstr "Répondre" -#: ../src/phone.c:2034 +#: ../src/phone.c:2036 msgid "Enabled" msgstr "Activé" -#: ../src/phone.c:2261 +#: ../src/phone.c:2263 msgid "Read message" msgstr "Lire le message" -#: ../src/phone.c:2279 +#: ../src/phone.c:2281 msgid "Forward" msgstr "Transmettre" -#: ../src/phone.c:2353 +#: ../src/phone.c:2355 msgid "Phone settings" msgstr "Paramètres du téléphone" -#: ../src/phone.c:2430 +#: ../src/phone.c:2432 msgid "missed calls" msgstr "appels manqués" -#: ../src/phone.c:2430 +#: ../src/phone.c:2432 msgid "missed call" msgstr "appel manqué" -#: ../src/phone.c:2439 +#: ../src/phone.c:2441 msgid "new messages" msgstr "nouveaux messages" -#: ../src/phone.c:2440 +#: ../src/phone.c:2442 msgid "new message" msgstr "nouveau message" -#: ../src/phone.c:2458 ../src/phone.c:3394 ../src/phone.c:3398 +#: ../src/phone.c:2460 ../src/phone.c:3396 ../src/phone.c:3400 msgid "Information" msgstr "Information" -#: ../src/phone.c:2468 +#: ../src/phone.c:2470 msgid "Status" msgstr "État" -#: ../src/phone.c:2492 +#: ../src/phone.c:2494 msgid "_View" msgstr "_Vue" -#: ../src/phone.c:2511 +#: ../src/phone.c:2513 msgid "_Read" msgstr "_Lire" -#: ../src/phone.c:2643 +#: ../src/phone.c:2645 msgid "Open file..." msgstr "Ouvrir fichier..." -#: ../src/phone.c:2814 +#: ../src/phone.c:2816 msgid "Write message" msgstr "Écrire un message" -#: ../src/phone.c:2820 +#: ../src/phone.c:2822 msgid "Send" msgstr "Envoyer" -#: ../src/phone.c:2826 +#: ../src/phone.c:2828 msgid "Attach" msgstr "Joindre" -#: ../src/phone.c:2942 +#: ../src/phone.c:2944 msgid "Attach file..." msgstr "Joindre un fichier..." -#: ../src/phone.c:3013 +#: ../src/phone.c:3015 #, c-format msgid "%d message%s, %d/%d characters" msgstr "%d message%s, %d/%d caractères" -#: ../src/phone.c:3014 +#: ../src/phone.c:3016 msgid "s" msgstr "s" -#: ../src/phone.c:3078 +#: ../src/phone.c:3080 msgid "Sending message..." msgstr "Envoi du message..." -#: ../src/phone.c:3113 +#: ../src/phone.c:3115 msgid "Outgoing" msgstr "Sortant" -#: ../src/phone.c:3299 +#: ../src/phone.c:3301 msgid "Operation in progress..." msgstr "Opération en cours..." -#: ../src/phone.c:3339 ../src/phone.c:3343 +#: ../src/phone.c:3341 ../src/phone.c:3345 msgid "Question" msgstr "Question" -#: ../src/phone.c:3363 ../src/phone.c:3367 +#: ../src/phone.c:3365 ../src/phone.c:3369 msgid "Error" msgstr "Erreur" -#: ../src/phone.c:3599 +#: ../src/phone.c:3601 msgid "Name: " msgstr "Nom: " -#: ../src/phone.c:3608 +#: ../src/phone.c:3610 msgid "Number: " msgstr "Numéro: " -#: ../src/phone.c:3624 +#: ../src/phone.c:3626 msgid "New contact" msgstr "Nouveau contact" -#: ../src/phone.c:3626 +#: ../src/phone.c:3628 msgid "Edit contact: " msgstr "Modifier contact: " -#: ../src/phone.c:3653 +#: ../src/phone.c:3655 msgid "The name cannot be empty" msgstr "Le nom ne peut être vide" -#: ../src/phone.c:3658 +#: ../src/phone.c:3660 msgid "The number cannot be empty" msgstr "Le numéro ne peut être vide" -#: ../src/phone.c:3794 +#: ../src/phone.c:3796 msgid "Message sent" msgstr "Message envoyé" -#: ../src/phone.c:3822 +#: ../src/phone.c:3824 #, c-format msgid "Wrong %s" msgstr "Mauvais %s" -#: ../src/phone.c:3831 +#: ../src/phone.c:3833 #, c-format msgid "%s is valid" msgstr "%s valide" -#: ../src/phone.c:3898 +#: ../src/phone.c:3900 msgid "Raw data (not shown)" msgstr "Données brutes (non affichées)" -#: ../src/phone.c:3936 +#: ../src/phone.c:3938 msgid "Message deleted" msgstr "Message effacé" diff --git a/src/modems/hayes.c b/src/modems/hayes.c index e4ed335..9dba807 100644 --- a/src/modems/hayes.c +++ b/src/modems/hayes.c @@ -880,6 +880,12 @@ static char * _request_attention_call_hangup(ModemPlugin * modem) _hayes_set_mode(modem, HAYES_MODE_INIT); return NULL; } + /* return "ATH" if currently ringing */ + event = &hayes->events[MODEM_EVENT_TYPE_CALL]; + if(event->call.direction == MODEM_CALL_DIRECTION_INCOMING + && event->call.status == MODEM_CALL_STATUS_RINGING) + return strdup("ATH"); + /* force all calls to terminate */ return strdup("AT+CHUP"); } @@ -2988,12 +2994,15 @@ static void _on_trigger_clip(ModemPlugin * modem, char const * answer) /* on_trigger_cme_error */ static void _on_trigger_cme_error(ModemPlugin * modem, char const * answer) { + ModemPluginHelper * helper = modem->helper; Hayes * hayes = modem->priv; /* XXX ugly */ HayesCommand * command = (hayes->queue != NULL) ? hayes->queue->data : NULL; unsigned int u; HayesCommand * p; + ModemEvent * event; + ModemRequest request; if(command != NULL) _hayes_command_set_status(command, HCS_ERROR); @@ -3018,6 +3027,20 @@ static void _on_trigger_cme_error(ModemPlugin * modem, char const * answer) hayes->source = g_timeout_add(1000, _on_queue_timeout, modem); break; + case 32: /* emergency calls only */ + event = &hayes->events[MODEM_EVENT_TYPE_REGISTRATION]; + free(hayes->registration_operator); + hayes->registration_operator = strdup("SOS"); + event->registration._operator + = hayes->registration_operator; + event->registration.status + = MODEM_REGISTRATION_STATUS_REGISTERED; + helper->event(helper->modem, event); + /* verify the SIM card */ + memset(&request, 0, sizeof(request)); + request.type = HAYES_REQUEST_SIM_PIN_VALID; + _hayes_request(modem, &request); + break; default: /* FIXME implement the rest */ case 4: /* operation not supported */ case 16: /* Incorrect SIM PUK */ @@ -3561,6 +3584,7 @@ static void _on_trigger_cops(ModemPlugin * modem, char const * answer) /* on_trigger_cpas */ static void _on_trigger_cpas(ModemPlugin * modem, char const * answer) { + ModemPluginHelper * helper = modem->helper; Hayes * hayes = modem->priv; ModemEvent * event = &hayes->events[MODEM_EVENT_TYPE_CALL]; unsigned int u; @@ -3577,12 +3601,12 @@ static void _on_trigger_cpas(ModemPlugin * modem, char const * answer) event->connection.connected = 0; event->connection.in = 0; event->connection.out = 0; - modem->helper->event(modem->helper->modem, event); + helper->event(helper->modem, event); break; case 3: event->call.status = MODEM_CALL_STATUS_RINGING; /* report event */ - modem->helper->event(modem->helper->modem, event); + helper->event(helper->modem, event); break; case 4: event->call.status = MODEM_CALL_STATUS_ACTIVE; @@ -3678,10 +3702,15 @@ static void _on_trigger_creg(ModemPlugin * modem, char const * answer) ModemRequest request; res = sscanf(answer, "%u,%u,%X,%X", &u[0], &u[1], &u[2], &u[3]); + if(res == 1) + res = sscanf(answer, "%u,\"%X\",\"%X\"", &u[1], &u[2], &u[3]); + else if(res == 2) + res = sscanf(answer, "%u,%u,\"%X\",\"%X\"", &u[0], &u[1], &u[2], + &u[3]); + else if(res == 3) + res = sscanf(answer, "%u,%X,%X", &u[1], &u[2], &u[3]); if(res == 0) return; - if(res == 1 || res == 3) - memmove(&u[1], u, sizeof(*u) * 3); u[0] = event->registration.mode; event->registration.roaming = 0; switch(u[1]) diff --git a/src/phone.c b/src/phone.c index 24a2049..42bfae1 100644 --- a/src/phone.c +++ b/src/phone.c @@ -1471,26 +1471,28 @@ static void _show_call_window(Phone * phone) phone->ca_number = gtk_label_new(NULL); gtk_box_pack_start(GTK_BOX(vbox), phone->ca_number, FALSE, TRUE, 0); /* buttons */ + hbox = gtk_hbox_new(FALSE, 4); /* answer */ phone->ca_answer = _phone_create_button("call-start", _("_Answer")); g_signal_connect_swapped(G_OBJECT(phone->ca_answer), "clicked", G_CALLBACK(on_phone_call_answer), phone); - gtk_box_pack_start(GTK_BOX(vbox), phone->ca_answer, FALSE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(hbox), phone->ca_answer, TRUE, TRUE, 0); /* hangup */ phone->ca_hangup = _phone_create_button("call-stop", _("_Hangup")); g_signal_connect_swapped(G_OBJECT(phone->ca_hangup), "clicked", G_CALLBACK(on_phone_call_hangup), phone); - gtk_box_pack_start(GTK_BOX(vbox), phone->ca_hangup, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(hbox), phone->ca_hangup, TRUE, TRUE, 0); /* reject */ phone->ca_reject = _phone_create_button("call-stop", _("_Reject")); g_signal_connect_swapped(G_OBJECT(phone->ca_reject), "clicked", G_CALLBACK(on_phone_call_reject), phone); - gtk_box_pack_start(GTK_BOX(vbox), phone->ca_reject, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(hbox), phone->ca_reject, TRUE, TRUE, 0); /* close */ phone->ca_close = gtk_button_new_from_stock(GTK_STOCK_CLOSE); g_signal_connect_swapped(G_OBJECT(phone->ca_close), "clicked", G_CALLBACK(on_phone_call_close), phone); - gtk_box_pack_start(GTK_BOX(vbox), phone->ca_close, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(hbox), phone->ca_close, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); /* volume bar */ hbox = gtk_hbox_new(FALSE, 4); phone->ca_image = gtk_image_new_from_icon_name( diff --git a/src/plugins/profiles.c b/src/plugins/profiles.c index cbb90e8..0f4cc99 100644 --- a/src/plugins/profiles.c +++ b/src/plugins/profiles.c @@ -258,7 +258,8 @@ static int _event_modem_event(PhonePlugin * plugin, ModemEvent * event) if(direction == MODEM_CALL_DIRECTION_INCOMING && status == MODEM_CALL_STATUS_RINGING) _profiles_play(plugin, "ringtone", 10); - else if(status == MODEM_CALL_STATUS_NONE) + else if(status == MODEM_CALL_STATUS_NONE + || status == MODEM_CALL_STATUS_ACTIVE) _profiles_play(plugin, NULL, 0); break; default: