From 27799ec00f89a2bb10b52a4204e72871a4e14094 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Tue, 11 May 2010 13:44:09 +0000 Subject: [PATCH] Now able to fetch the battery status --- po/fr.po | 175 ++++++++++++++++++++++++++-------------------------- src/gsm.c | 28 +++++++++ src/gsm.h | 19 ++++++ src/modem.c | 10 +++ src/modem.h | 1 + src/phone.c | 6 +- 6 files changed, 151 insertions(+), 88 deletions(-) diff --git a/po/fr.po b/po/fr.po index 591ab49..16aefd6 100644 --- a/po/fr.po +++ b/po/fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Phone 0.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-05-11 15:15+0200\n" +"POT-Creation-Date: 2010-05-10 09:21+0200\n" "PO-Revision-Date: 2010-04-24 02:07+0200\n" "Last-Translator: Pierre Pronchery \n" "Language-Team: French\n" @@ -16,123 +16,123 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: ../src/gsm.c:90 +#: ../src/gsm.c:89 msgid "Phone failure" msgstr "Défaillance du téléphone" -#: ../src/gsm.c:91 +#: ../src/gsm.c:90 msgid "No connection to phone" msgstr "Pas de connexion au téléphone" -#: ../src/gsm.c:92 ../src/gsm.c:127 +#: ../src/gsm.c:91 ../src/gsm.c:126 msgid "Operation not allowed" msgstr "Opération non autorisée" -#: ../src/gsm.c:93 ../src/gsm.c:128 +#: ../src/gsm.c:92 ../src/gsm.c:127 msgid "Operation not supported" msgstr "Opération non supportée" -#: ../src/gsm.c:94 ../src/gsm.c:130 +#: ../src/gsm.c:93 ../src/gsm.c:129 msgid "SIM not inserted" msgstr "SIM non insérée" -#: ../src/gsm.c:95 ../src/gsm.c:131 +#: ../src/gsm.c:94 ../src/gsm.c:130 msgid "SIM PIN required" msgstr "Code SIM PIN requis" -#: ../src/gsm.c:96 +#: ../src/gsm.c:95 msgid "SIM PUK required" msgstr "Code PUK requis" -#: ../src/gsm.c:97 +#: ../src/gsm.c:96 msgid "SIM failure" msgstr "Défaillance SIM" -#: ../src/gsm.c:98 +#: ../src/gsm.c:97 msgid "SIM busy" msgstr "SIM occupée" -#: ../src/gsm.c:99 +#: ../src/gsm.c:98 msgid "SIM wrong" msgstr "SIM erronée" -#: ../src/gsm.c:100 +#: ../src/gsm.c:99 msgid "Incorrect password" msgstr "Mot de passe incorrect" -#: ../src/gsm.c:101 +#: ../src/gsm.c:100 msgid "SIM PIN2 required" msgstr "Code SIM PIN2 requis" -#: ../src/gsm.c:102 +#: ../src/gsm.c:101 msgid "SIM PUK2 required" msgstr "Code SIM PUK2 requis" -#: ../src/gsm.c:103 +#: ../src/gsm.c:102 msgid "Memory full" msgstr "Mémoire pleine" -#: ../src/gsm.c:104 +#: ../src/gsm.c:103 msgid "Invalid index" msgstr "Index invalide" -#: ../src/gsm.c:105 +#: ../src/gsm.c:104 msgid "Not found" msgstr "Non trouvé" -#: ../src/gsm.c:106 +#: ../src/gsm.c:105 msgid "Memory failure" msgstr "Défaillance mémoire" -#: ../src/gsm.c:107 +#: ../src/gsm.c:106 msgid "Text string too long" msgstr "Texte trop long" -#: ../src/gsm.c:108 +#: ../src/gsm.c:107 msgid "Invalid characters in text string" msgstr "Caractère invalide dans le texte" -#: ../src/gsm.c:109 +#: ../src/gsm.c:108 msgid "Dial string too long" msgstr "Le numéro composé est trop long" -#: ../src/gsm.c:110 +#: ../src/gsm.c:109 msgid "Invalid characters in dial string" msgstr "Caractères invalides dans le numéro" -#: ../src/gsm.c:111 +#: ../src/gsm.c:110 msgid "No network service" msgstr "Pas de couverture réseau" -#: ../src/gsm.c:112 +#: ../src/gsm.c:111 msgid "Network timeout" msgstr "Délai d'attente du réseau dépassé" -#: ../src/gsm.c:113 +#: ../src/gsm.c:112 msgid "Network not allowed - emergency calls only" msgstr "Réseau non autorisé - appels d'urgence uniquement" -#: ../src/gsm.c:114 ../src/gsm.c:966 ../src/gsm.c:1148 ../src/gsm.c:1208 +#: ../src/gsm.c:113 ../src/gsm.c:930 ../src/gsm.c:1113 msgid "Unknown error" msgstr "Erreur inconnue" -#: ../src/gsm.c:125 +#: ../src/gsm.c:124 msgid "ME failure" msgstr "Défaillance ME" -#: ../src/gsm.c:126 +#: ../src/gsm.c:125 msgid "SMS service of ME reserved" msgstr "Service SMS du ME réservé" -#: ../src/gsm.c:129 +#: ../src/gsm.c:128 msgid "Invalid PDU mode parameter" msgstr "Paramètre de mode PDU invalide" -#: ../src/gsm.c:320 +#: ../src/gsm.c:313 msgid ": Unknown baudrate" msgstr ": Débit inconnu" -#: ../src/gsm.c:800 +#: ../src/gsm.c:769 msgid "Event not handled" msgstr "Événement non géré" @@ -145,192 +145,193 @@ msgid "" " -F\tEnable hardware flow control (RTS/CTS)\n" msgstr "" -#: ../src/phone.c:269 +#: ../src/phone.c:247 msgid "Initializing..." msgstr "Initialisation..." -#: ../src/phone.c:394 +#: ../src/phone.c:371 msgid "Checking SIM PIN code..." msgstr "Vérification du code SIM PIN..." -#: ../src/phone.c:628 +#: ../src/phone.c:556 msgid "Answer" msgstr "Répondre" -#: ../src/phone.c:635 +#: ../src/phone.c:563 msgid "Hangup" msgstr "Raccrocher" -#: ../src/phone.c:642 +#: ../src/phone.c:570 msgid "Reject" msgstr "Rejeter" -#: ../src/phone.c:665 +#: ../src/phone.c:593 msgid "Loudspeaker" msgstr "Haut-parleur" -#: ../src/phone.c:673 +#: ../src/phone.c:601 msgid "Mute microphone" msgstr "Couper le microphone" -#: ../src/phone.c:687 +#: ../src/phone.c:615 msgid "Unknown contact" msgstr "Contact inconnu" -#: ../src/phone.c:694 +#: ../src/phone.c:622 msgid "Unknown number" msgstr "Numéro inconnu" -#: ../src/phone.c:702 +#: ../src/phone.c:630 msgid "In conversation" msgstr "En conversation" -#: ../src/phone.c:709 +#: ../src/phone.c:637 msgid "Incoming call" msgstr "Appel entrant" -#: ../src/phone.c:715 +#: ../src/phone.c:643 msgid "Outgoing call" msgstr "Appel sortant" -#: ../src/phone.c:722 +#: ../src/phone.c:650 msgid "Call finished" msgstr "Appel terminé" -#: ../src/phone.c:775 +#: ../src/phone.c:703 msgid "Enter" msgstr "Entrer" -#: ../src/phone.c:777 +#: ../src/phone.c:705 msgid "Skip" msgstr "Ignorer" -#: ../src/phone.c:788 +#: ../src/phone.c:716 msgid "Enter SIM PIN code" msgstr "Entrer le code SIM PIN" -#: ../src/phone.c:817 +#: ../src/phone.c:745 msgid "Contacts" msgstr "Contacts" -#: ../src/phone.c:824 ../src/phone.c:1093 ../src/phone.c:1136 -#: ../src/phone.c:1256 +#: ../src/phone.c:752 ../src/phone.c:958 ../src/phone.c:1001 msgid "Call" msgstr "Appeler" -#: ../src/phone.c:834 +#: ../src/phone.c:762 msgid "Write" msgstr "Écrire" -#: ../src/phone.c:856 +#: ../src/phone.c:784 msgid "Contact" msgstr "Contact" -#: ../src/phone.c:1065 +#: ../src/phone.c:930 msgid "Dialer" msgstr "Composer" -#: ../src/phone.c:1095 +#: ../src/phone.c:960 msgid "Hang up" msgstr "Raccrocher" -#: ../src/phone.c:1129 +#: ../src/phone.c:994 msgid "Messages" msgstr "Messages" -#: ../src/phone.c:1142 +#: ../src/phone.c:1007 msgid "New message" msgstr "Nouveau message" -#: ../src/phone.c:1148 +#: ../src/phone.c:1013 msgid "Reply" msgstr "Répondre" -#: ../src/phone.c:1166 +#: ../src/phone.c:1031 msgid "Inbox" msgstr "Reçus" -#: ../src/phone.c:1170 +#: ../src/phone.c:1035 msgid "Sent" msgstr "Envoyés" -#: ../src/phone.c:1189 -msgid "From" -msgstr "De" +#: ../src/phone.c:1051 +#, fuzzy +msgid "Message" +msgstr "Messages" -#: ../src/phone.c:1250 -msgid "Read message" -msgstr "Lire le message" - -#: ../src/phone.c:1327 +#: ../src/phone.c:1082 msgid "Write message" msgstr "Écrire un message" -#: ../src/phone.c:1333 +#: ../src/phone.c:1088 ../src/phone.c:1094 msgid "Send" msgstr "Envoyer" -#: ../src/phone.c:1339 -msgid "Attach" -msgstr "Attacher" - -#: ../src/phone.c:1425 +#: ../src/phone.c:1180 #, c-format msgid "%d message%s, %d/%d characters" msgstr "%d message%s, %d/%d caractères" -#: ../src/phone.c:1426 +#: ../src/phone.c:1181 msgid "s" msgstr "s" -#: ../src/phone.c:1452 +#: ../src/phone.c:1207 msgid "Sending message..." msgstr "Envoi du message..." -#: ../src/phone.c:1555 +#: ../src/phone.c:1310 msgid "Operation in progress..." msgstr "Opération en cours..." -#: ../src/phone.c:1583 ../src/phone.c:1588 +#: ../src/phone.c:1338 ../src/phone.c:1343 msgid "Error" msgstr "Erreur" -#: ../src/phone.c:1634 ../src/phone.c:1639 +#: ../src/phone.c:1394 ../src/phone.c:1399 msgid "Information" msgstr "Information" -#: ../src/phone.c:1722 +#: ../src/phone.c:1482 msgid "Unknown" msgstr "Inconnu" -#: ../src/phone.c:1725 +#: ../src/phone.c:1485 msgid "Registering..." msgstr "Enregistrement..." -#: ../src/phone.c:1728 +#: ../src/phone.c:1488 msgid "Denied" msgstr "Refusé" -#: ../src/phone.c:1731 +#: ../src/phone.c:1491 msgid "SIM check..." msgstr "Vérification SIM..." -#: ../src/phone.c:1737 +#: ../src/phone.c:1497 msgid "SIM ready..." msgstr "SIM prête..." -#: ../src/phone.c:1854 +#: ../src/phone.c:1609 msgid "Message sent" msgstr "Message envoyé" -#: ../src/phone.c:1872 +#: ../src/phone.c:1627 msgid "SIM PIN is valid" msgstr "Code SIM PIN valide" -#: ../src/phone.c:1911 +#: ../src/phone.c:1666 msgid "Could not send message" msgstr "Le message n'a pas pu être envoyé" -#: ../src/phone.c:1919 +#: ../src/phone.c:1674 msgid "Wrong SIM PIN code" msgstr "Code SIM PIN erroné" + +#~ msgid "From" +#~ msgstr "De" + +#~ msgid "Read message" +#~ msgstr "Lire le message" + +#~ msgid "Attach" +#~ msgstr "Attacher" diff --git a/src/gsm.c b/src/gsm.c index df3140e..18b2ac2 100644 --- a/src/gsm.c +++ b/src/gsm.c @@ -162,6 +162,7 @@ static int _gsm_queue_push(GSM * gsm); /* triggers */ static int _gsm_trigger_busy(GSM * gsm, char const * result, gboolean * answered); +static int _gsm_trigger_cbc(GSM * gsm, char const * result); static int _gsm_trigger_cfun(GSM * gsm, char const * result); static int _gsm_trigger_cgmm(GSM * gsm, char const * result); static int _gsm_trigger_clip(GSM * gsm, char const * result); @@ -197,6 +198,7 @@ static GSMTrigger _gsm_triggers[] = { trigger, sizeof(trigger) - 1, \ (GSMTriggerCallback)_gsm_trigger_ ## callback } GSM_TRIGGER("BUSY", busy), + GSM_TRIGGER("+CBC: ", cbc), GSM_TRIGGER("+CFUN: ", cfun), GSM_TRIGGER("+CGMM: ", cgmm), GSM_TRIGGER("+CLIP: ", clip), @@ -509,6 +511,11 @@ int gsm_event(GSM * gsm, GSMEventType type, ...) event->error.error = va_arg(ap, GSMError); event->error.message = va_arg(ap, char const *); break; + case GSM_EVENT_TYPE_BATTERY_CHARGE: + event->battery_charge.status = va_arg(ap, + GSMBatteryStatus); + event->battery_charge.level = va_arg(ap, unsigned int); + break; case GSM_EVENT_TYPE_CALL_PRESENTATION: event->call_presentation.number = va_arg(ap, char const *); @@ -582,6 +589,13 @@ int gsm_event(GSM * gsm, GSMEventType type, ...) } +/* gsm_fetch_battery_charge */ +int gsm_fetch_battery_charge(GSM * gsm) +{ + return gsm_modem_get_battery_charge(gsm->modem); +} + + /* gsm_fetch_contact_list */ int gsm_fetch_contact_list(GSM * gsm) { @@ -1082,6 +1096,20 @@ static int _gsm_trigger_busy(GSM * gsm, char const * result, } +/* gsm_trigger_cbc */ +static int _gsm_trigger_cbc(GSM * gsm, char const * result) +{ +#ifdef DEBUG + fprintf(stderr, "DEBUG: %s(\"%s\")\n", __func__, result); +#endif + if(sscanf(result, "%u,%u", &gsm->event.battery_charge.status, + &gsm->event.battery_charge.level) != 2) + return gsm_event(gsm, GSM_EVENT_TYPE_ERROR, + GSM_ERROR_BATTERY_CHARGE_FAILED, result); + return _gsm_event_send(gsm, GSM_EVENT_TYPE_BATTERY_CHARGE); +} + + /* gsm_trigger_cfun */ static int _gsm_trigger_cfun(GSM * gsm, char const * result) { diff --git a/src/gsm.h b/src/gsm.h index 7e83e84..8b0adc3 100644 --- a/src/gsm.h +++ b/src/gsm.h @@ -25,6 +25,14 @@ /* types */ typedef struct _GSM GSM; +typedef enum _GSMBatteryStatus +{ + GSM_BATTERY_STATUS_POWERED = 0, + GSM_BATTERY_STATUS_NOT_POWERED = 1, + GSM_BATTERY_STATUS_NO_BATTERY = 2, + GSM_BATTERY_STATUS_POWER_FAULT = 3 +} GSMBatteryStatus; + typedef enum _GSMCallType { GSM_CALL_TYPE_UNKNOWN = 0, @@ -38,6 +46,7 @@ typedef void (*GSMCommandCallback)(GSM * gsm); typedef enum _GSMEventType { GSM_EVENT_TYPE_ERROR = 0, + GSM_EVENT_TYPE_BATTERY_CHARGE, GSM_EVENT_TYPE_CALL_PRESENTATION, GSM_EVENT_TYPE_CONTACT, GSM_EVENT_TYPE_CONTACT_LIST, @@ -59,6 +68,7 @@ typedef enum _GSMError { GSM_ERROR_UNKNOWN = 0, GSM_ERROR_ANSWER_FAILED, + GSM_ERROR_BATTERY_CHARGE_FAILED, GSM_ERROR_BUSY, GSM_ERROR_CALL_FAILED, GSM_ERROR_CONTACT_FETCH_FAILED, @@ -169,6 +179,14 @@ typedef union _GSMEvent char const * message; } error; + /* GSM_EVENT_TYPE_BATTERY_CHARGE */ + struct + { + GSMEventType type; + GSMBatteryStatus status; + unsigned int level; + } battery_charge; + /* GSM_EVENT_TYPE_CALL_PRESENTATION */ struct { @@ -313,6 +331,7 @@ int gsm_enter_sim_pin(GSM * gsm, char const * code); int gsm_event(GSM * gsm, GSMEventType type, ...); /* fetching data */ +int gsm_fetch_battery_charge(GSM * gsm); int gsm_fetch_contact_list(GSM * gsm); int gsm_fetch_contacts(GSM * gsm, unsigned int start, unsigned int end); int gsm_fetch_message_list(GSM * gsm, GSMMessageList list); diff --git a/src/modem.c b/src/modem.c index 71a216e..752c227 100644 --- a/src/modem.c +++ b/src/modem.c @@ -235,6 +235,16 @@ static void _modem_enter_sim_pin_callback(GSM * gsm) } +/* gsm_modem_get_battery_charge */ +int gsm_modem_get_battery_charge(GSMModem * gsmm) +{ + char const cmd[] = "AT+CBC"; + + return gsm_queue_with_error(gsmm->gsm, cmd, + GSM_ERROR_BATTERY_CHARGE_FAILED); +} + + /* gsm_modem_get_contact_list */ int gsm_modem_get_contact_list(GSMModem * gsmm) { diff --git a/src/modem.h b/src/modem.h index f37f5b5..aa9ed38 100644 --- a/src/modem.h +++ b/src/modem.h @@ -51,6 +51,7 @@ int gsm_modem_call_reject(GSMModem * gsmm); int gsm_modem_enter_sim_pin(GSMModem * gsmm, char const * code); +int gsm_modem_get_battery_charge(GSMModem * gsmm); int gsm_modem_get_contact_list(GSMModem * gsmm); int gsm_modem_get_contacts(GSMModem * gsmm, unsigned int start, unsigned int end); diff --git a/src/phone.c b/src/phone.c index 2b90e19..fb1ac3f 100644 --- a/src/phone.c +++ b/src/phone.c @@ -885,6 +885,7 @@ static struct } _debug_gsm_commands[] = { { "Answer call", gsm_call_answer }, + { "Battery charge", gsm_fetch_battery_charge }, { "Contact list", gsm_fetch_contact_list }, { "Hangup call", gsm_call_hangup }, { "Messages", _gsm_fetch_message_list_all }, @@ -965,7 +966,7 @@ void phone_show_debug(Phone * phone, gboolean show) g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK( gtk_main_quit), NULL); gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 4); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); + gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, TRUE, 4); gtk_container_add(GTK_CONTAINER(phone->de_window), vbox); gtk_widget_show_all(vbox); } @@ -1785,6 +1786,9 @@ static int _phone_gsm_event(GSMEvent * event, gpointer data) { case GSM_EVENT_TYPE_ERROR: return _gsm_event_error(phone, event); + case GSM_EVENT_TYPE_BATTERY_CHARGE: + /* FIXME implement */ + return 0; case GSM_EVENT_TYPE_CALL_PRESENTATION: /* FIXME convert number, the contact is automatic */ phone_show_call(phone, TRUE, PHONE_CALL_INCOMING, "",