Now able to set the GPRS access point

This commit is contained in:
Pierre Pronchery 2011-01-05 02:22:28 +00:00
parent 8dab5ea1ae
commit 67200d9281

View File

@ -16,6 +16,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <System.h> #include <System.h>
#include "Phone.h" #include "Phone.h"
@ -28,6 +29,7 @@ typedef struct _GPRS
{ {
GtkWidget * window; GtkWidget * window;
GtkWidget * attach; GtkWidget * attach;
GtkWidget * apn;
} GPRS; } GPRS;
@ -38,6 +40,7 @@ static int _gprs_destroy(PhonePlugin * plugin);
static int _gprs_event(PhonePlugin * plugin, PhoneEvent event, ...); static int _gprs_event(PhonePlugin * plugin, PhoneEvent event, ...);
static void _gprs_settings(PhonePlugin * plugin); static void _gprs_settings(PhonePlugin * plugin);
static int _gprs_access_point(PhonePlugin * plugin);
static int _gprs_attach(PhonePlugin * plugin); static int _gprs_attach(PhonePlugin * plugin);
@ -99,7 +102,7 @@ static int _gprs_event(PhonePlugin * plugin, PhoneEvent event, ...)
static int _gprs_event_functional(PhonePlugin * plugin) static int _gprs_event_functional(PhonePlugin * plugin)
{ {
return _gprs_attach(plugin); return _gprs_attach(plugin) | _gprs_access_point(plugin);
} }
@ -130,9 +133,14 @@ static void _gprs_settings(PhonePlugin * plugin)
g_signal_connect_swapped(G_OBJECT(gprs->window), "delete-event", g_signal_connect_swapped(G_OBJECT(gprs->window), "delete-event",
G_CALLBACK(_on_settings_closex), plugin); G_CALLBACK(_on_settings_closex), plugin);
vbox = gtk_vbox_new(FALSE, 0); vbox = gtk_vbox_new(FALSE, 0);
/* check button */ /* attachment */
gprs->attach = gtk_check_button_new_with_label("Always on"); gprs->attach = gtk_check_button_new_with_label("Always on");
gtk_box_pack_start(GTK_BOX(vbox), gprs->attach, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), gprs->attach, FALSE, TRUE, 0);
/* access point */
widget = gtk_label_new("Access point:");
gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, TRUE, 0);
gprs->apn = gtk_entry_new();
gtk_box_pack_start(GTK_BOX(vbox), gprs->apn, FALSE, TRUE, 0);
/* button box */ /* button box */
bbox = gtk_hbutton_box_new(); bbox = gtk_hbutton_box_new();
gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
@ -157,6 +165,10 @@ static void _on_settings_cancel(gpointer data)
GPRS * gprs = plugin->priv; GPRS * gprs = plugin->priv;
char const * p; char const * p;
if((p = plugin->helper->config_get(plugin->helper->phone, "gprs",
"apn")) == NULL)
p = "";
gtk_entry_set_text(GTK_ENTRY(gprs->apn), p);
if((p = plugin->helper->config_get(plugin->helper->phone, "gprs", if((p = plugin->helper->config_get(plugin->helper->phone, "gprs",
"attach")) != NULL "attach")) != NULL
&& strtoul(p, NULL, 10) != 0) && strtoul(p, NULL, 10) != 0)
@ -180,17 +192,42 @@ static void _on_settings_ok(gpointer data)
{ {
PhonePlugin * plugin = data; PhonePlugin * plugin = data;
GPRS * gprs = plugin->priv; GPRS * gprs = plugin->priv;
gboolean value; char const * p;
gboolean active;
value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( if((p = gtk_entry_get_text(GTK_ENTRY(gprs->apn))) != NULL
&& strlen(p) != 0
&& plugin->helper->config_set(plugin->helper->phone,
"gprs", "apn", p) == 0)
_gprs_access_point(plugin);
active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
gprs->attach)); gprs->attach));
plugin->helper->config_set(plugin->helper->phone, "gprs", if(plugin->helper->config_set(plugin->helper->phone, "gprs", "attach",
"attach", value ? "1" : "0"); active ? "1" : "0") == 0)
_gprs_attach(plugin); _gprs_attach(plugin);
gtk_widget_hide(gprs->window); gtk_widget_hide(gprs->window);
} }
/* gprs_access_point */
static int _gprs_access_point(PhonePlugin * plugin)
{
int ret;
char const cmd[] = "AT+CGDCONT=1,\"IP\",";
char const * p;
char * q;
if((p = plugin->helper->config_get(plugin->helper->phone, "gprs",
"apn")) == NULL)
return 0;
if((q = string_new_append(cmd, "\"", p, "\"", NULL)) == NULL)
return -1;
ret = plugin->helper->queue(plugin->helper->phone, q);
string_delete(q);
return ret;
}
/* gprs_attach */ /* gprs_attach */
static int _gprs_attach(PhonePlugin * plugin) static int _gprs_attach(PhonePlugin * plugin)
{ {