Hi Mickey,
I modified the openmoko-panel-gps applet and let user can power on/off the gps module for with GUI on GTA02v5.
With the follow patch, would you like to use them?

patches/series
Patches/01_tick_gta02v05.patch
data/GPS_Off.png
data/GPS_On.png

Cheers,
Tick
Index: data/Makefile.am
===================================================================
--- data/Makefile.am.orig	2007-09-03 05:36:18.000000000 +0800
+++ data/Makefile.am	2008-03-18 11:59:27.000000000 +0800
@@ -5,4 +5,5 @@
 #
 resourcedir = $(pkgdatadir)
 resource_DATA = \
-		GPS.png
+		GPS_On.png \
+		GPS_Off.png
Index: src/openmoko-panel-gps.c
===================================================================
--- src/openmoko-panel-gps.c.orig	2007-09-04 18:33:32.000000000 +0800
+++ src/openmoko-panel-gps.c	2008-03-18 12:55:18.000000000 +0800
@@ -15,12 +15,17 @@
  *  Current Version: $Rev$ ($Date$) [$Author: mickey $]
  */
 #include <libmokopanelui2/moko-panel-applet.h>
-
+#include <gtk/gtkbox.h>
+#include <gtk/gtk.h>
 #include <gtk/gtkimage.h>
 #include <time.h>
+#include <stdlib.h>
+#include <stdio.h>
 
+#define GPS_PWOERON_FILENAME "/sys/bus/platform/drivers/neo1973-pm-gps/neo1973-pm-gps.0/pwron"
 typedef struct {
-    int dummy;
+    MokoPanelApplet* mokoapplet;
+    int state;
 } GpsApplet;
 
 static void
@@ -29,6 +34,62 @@
     g_slice_free (GpsApplet, applet);
 }
 
+static int 
+gps_applet_power_get() 
+{
+    char buf[64];
+    FILE * f = fopen(GPS_PWOERON_FILENAME, "r");
+    int ret;
+    if (!f) {
+	    printf("Open file %s failed!!\n",GPS_PWOERON_FILENAME);
+	    return 0;
+    }
+    ret = fread(buf,sizeof(char),sizeof(buf)/sizeof(char),f);
+    fclose(f);
+    if (ret > 0 && buf[0]=='1') {
+	    return 1;
+    }
+    return 0;
+}
+
+static int 
+gps_applet_power_set(int on) 
+{
+    char buf[64];
+    FILE * f = fopen(GPS_PWOERON_FILENAME, "w");
+    int ret;
+    if (!f) {
+	    printf("Open file %s failed!!\n",GPS_PWOERON_FILENAME);
+	    return 0;
+    }
+    sprintf(buf,"%d",on ==0 ? 0 : 1);
+    ret = fwrite(buf,sizeof(char),sizeof(buf)/sizeof(char),f);
+    fclose(f);
+    if (ret <= 0) {
+	    printf("Write date into device failed!!\n");
+	    return 0;
+    }
+    return on ==0 ? 0 : 1;
+}
+
+static void
+mb_panel_update (GpsApplet *applet, int state) 
+{
+	moko_panel_applet_set_icon( applet->mokoapplet, state == 1 ? PKGDATADIR "/GPS_On.png" : PKGDATADIR "/GPS_Off.png");
+	 applet->state = state;
+	printf("GPS State is %d\n", applet->state);
+}
+
+static void
+gps_applet_power_on (GtkWidget* menu, GpsApplet* applet) {
+    mb_panel_update(applet,gps_applet_power_set(1));
+}
+static void
+gps_applet_power_off (GtkWidget* menu, GpsApplet* applet) {
+    mb_panel_update(applet,gps_applet_power_set(0));
+}
+
+
 G_MODULE_EXPORT GtkWidget*
 mb_panel_applet_create(const char* id, GtkOrientation orientation)
 {
@@ -39,8 +100,22 @@
     struct tm *local_time;
 
     applet = g_slice_new (GpsApplet);
+    applet->mokoapplet = mokoapplet;
+    applet->state=-100;
 
-    moko_panel_applet_set_icon( mokoapplet, PKGDATADIR "/GPS.png" );
+    moko_panel_applet_set_icon(applet->mokoapplet,PKGDATADIR "/GPS_Off.png");
+    mb_panel_update(applet, gps_applet_power_get());
     gtk_widget_show_all( GTK_WIDGET(mokoapplet) );
+    
+    GtkMenu* menu = GTK_MENU(gtk_menu_new());
+    GtkWidget* item1 = gtk_menu_item_new_with_label("Power-Up GPS");
+    GtkWidget* item2 = gtk_menu_item_new_with_label("Power-Off GPS");
+    g_signal_connect(G_OBJECT(item1), "activate", G_CALLBACK(gps_applet_power_on), applet);
+    g_signal_connect(G_OBJECT(item2), "activate", G_CALLBACK(gps_applet_power_off), applet);
+    gtk_menu_shell_append(GTK_MENU_SHELL(menu), item1);
+    gtk_menu_shell_append(GTK_MENU_SHELL(menu), item2);
+    gtk_widget_show_all(GTK_WIDGET(menu));
+    moko_panel_applet_set_popup( mokoapplet, GTK_WIDGET(menu), MOKO_PANEL_APPLET_CLICK_POPUP);
+
     return GTK_WIDGET(mokoapplet);
 };
01_tick_gta02v05.patch -p0

<<inline: GPS_Off.png>>

<<inline: GPS_On.png>>

Reply via email to