r2145 - trunk/src/target/OM-2007/panel-plugins/openmoko-panel-mainmenu/src
mickey at sita.openmoko.org
mickey at sita.openmoko.org
Mon Jun 4 00:15:19 CEST 2007
Author: mickey
Date: 2007-06-04 00:15:19 +0200 (Mon, 04 Jun 2007)
New Revision: 2145
Modified:
trunk/src/target/OM-2007/panel-plugins/openmoko-panel-mainmenu/src/buttonactions.c
trunk/src/target/OM-2007/panel-plugins/openmoko-panel-mainmenu/src/buttonactions.h
Log:
openmoko-panel-mainmenu: prepare for simple power saving logic
Modified: trunk/src/target/OM-2007/panel-plugins/openmoko-panel-mainmenu/src/buttonactions.c
===================================================================
--- trunk/src/target/OM-2007/panel-plugins/openmoko-panel-mainmenu/src/buttonactions.c 2007-06-03 15:35:31 UTC (rev 2144)
+++ trunk/src/target/OM-2007/panel-plugins/openmoko-panel-mainmenu/src/buttonactions.c 2007-06-03 22:15:19 UTC (rev 2145)
@@ -23,6 +23,9 @@
#include <gtk/gtkmenuitem.h>
#include <gdk/gdkx.h>
+
+#include <glib.h>
+
#include <X11/Xlib.h>
#include <X11/Xatom.h>
@@ -40,30 +43,43 @@
//FIXME find out through sysfs
#ifndef DEBUG_THIS_FILE
- #define AUX_BUTTON_EVENT_PATH "/dev/input/event0"
+ #define AUX_BUTTON_EVENT_PATH "/dev/input/event1"
#define AUX_BUTTON_KEYCODE 169
#define POWER_BUTTON_EVENT_PATH "/dev/input/event2"
#define POWER_BUTTON_KEYCODE 116
+ #define TOUCHSCREEN_EVENT_PATH "/dev/input/touchscreen0"
#else
#define AUX_BUTTON_EVENT_PATH "/dev/input/event1"
#define AUX_BUTTON_KEYCODE 0x25
#define POWER_BUTTON_EVENT_PATH "/dev/input/event0"
#define POWER_BUTTON_KEYCODE 0x25
+ #define TOUCHSCREEN_EVENT_PATH "/dev/input/event2"
#endif
GPollFD aux_fd;
GPollFD power_fd;
+GIOChannel* touchscreen_io;
int aux_timer = -1;
int power_timer = -1;
+int powersave_timer1 = -1;
+int powersave_timer2 = -1;
+int powersave_timer3 = -1;
GtkWidget* aux_menu = 0;
GtkWidget* power_menu = 0;
+typedef enum _PowerState
+{
+ NORMAL,
+ DISPLAY_DIM,
+ DISPLAY_OFF,
+ SUSPEND,
+} PowerState;
+PowerState power_state = NORMAL;
+
/* Borrowed from libwnck */
-static Window
- get_window_property (Window xwindow,
- Atom atom)
+static Window get_window_property( Window xwindow, Atom atom )
{
Atom type;
int format;
@@ -130,6 +146,19 @@
power_fd.revents = 0;
g_source_add_poll( button_watcher, &power_fd );
g_source_attach( button_watcher, NULL );
+
+ int tsfd = open( TOUCHSCREEN_EVENT_PATH, O_RDONLY );
+ if ( tsfd < 0 )
+ {
+ g_debug( "can't open " TOUCHSCREEN_EVENT_PATH " (%s)", strerror( errno ) );
+ return FALSE;
+ }
+ touchscreen_io = g_io_channel_unix_new( tsfd );
+ g_io_add_watch( touchscreen_io, G_IO_IN, panel_mainmenu_touchscreen_cb, NULL );
+
+ panel_mainmenu_powersave_reset();
+ panel_mainmenu_set_display( 100 );
+
return TRUE;
}
@@ -318,3 +347,73 @@
return FALSE;
}
+gboolean panel_mainmenu_touchscreen_cb( GIOChannel *source, GIOCondition condition, gpointer data )
+{
+ g_debug( "mainmenu touchscreen event" );
+
+ struct input_event event;
+ int size = read( g_io_channel_unix_get_fd( source ), &event, sizeof( struct input_event ) );
+ g_debug( "read %d bytes from power_fd %d", size, power_fd.fd );
+ g_debug( "input event = ( %0x, %0x, %0x )", event.type, event.code, event.value );
+
+ panel_mainmenu_powersave_reset();
+ if ( power_state != NORMAL )
+ {
+ panel_mainmenu_set_display( 100 );
+ power_state = NORMAL;
+ }
+ return TRUE;
+}
+
+void panel_mainmenu_powersave_reset()
+{
+ g_debug( "mainmenu powersave reset" );
+ if ( powersave_timer1 != -1 )
+ g_source_remove( powersave_timer1 );
+ if ( powersave_timer2 != -1 )
+ g_source_remove( powersave_timer2 );
+ if ( powersave_timer3 != -1 )
+ g_source_remove( powersave_timer3 );
+
+ //TODO load this from preferences
+ powersave_timer1 = g_timeout_add( 10 * 1000, (GSourceFunc) panel_mainmenu_powersave_timeout1, (gpointer)1 );
+ powersave_timer2 = g_timeout_add( 20 * 1000, (GSourceFunc) panel_mainmenu_powersave_timeout2, (gpointer)1 );
+ powersave_timer3 = g_timeout_add( 40 * 1000, (GSourceFunc) panel_mainmenu_powersave_timeout3, (gpointer)1 );
+}
+
+void panel_mainmenu_set_display( int brightness )
+{
+ g_debug( "mainmenu set display %d", brightness );
+}
+
+gboolean panel_mainmenu_powersave_timeout1( guint timeout )
+{
+ g_debug( "mainmenu powersave timeout 1" );
+ //FIXME talk to neod
+ //FIXME dim display
+ power_state = DISPLAY_DIM;
+ panel_mainmenu_set_display( 50 );
+ return FALSE;
+}
+
+gboolean panel_mainmenu_powersave_timeout2( guint timeout )
+{
+ g_debug( "mainmenu powersave timeout 2" );
+ //FIXME talk to neod
+ //FIXME turn off display
+ panel_mainmenu_set_display( 0 );
+ power_state = DISPLAY_OFF;
+ return FALSE;
+}
+
+gboolean panel_mainmenu_powersave_timeout3( guint timeout )
+{
+ g_debug( "mainmenu powersave timeout 3" );
+ //FIXME talk to neod
+ power_state = SUSPEND;
+ system( "/usr/bin/apm -s");
+ panel_mainmenu_powersave_reset();
+ panel_mainmenu_set_display( 100 );
+ power_state = NORMAL;
+ return FALSE;
+}
Modified: trunk/src/target/OM-2007/panel-plugins/openmoko-panel-mainmenu/src/buttonactions.h
===================================================================
--- trunk/src/target/OM-2007/panel-plugins/openmoko-panel-mainmenu/src/buttonactions.h 2007-06-03 15:35:31 UTC (rev 2144)
+++ trunk/src/target/OM-2007/panel-plugins/openmoko-panel-mainmenu/src/buttonactions.h 2007-06-03 22:15:19 UTC (rev 2145)
@@ -7,7 +7,17 @@
gboolean panel_mainmenu_input_check( GSource* source );
gboolean panel_mainmenu_input_dispatch( GSource* source, GSourceFunc callback, gpointer data );
+gboolean panel_mainmenu_touchscreen_cb( GIOChannel *source, GIOCondition condition, gpointer data );
+
gboolean panel_mainmenu_aux_timeout( guint timeout );
gboolean panel_mainmenu_power_timeout( guint timeout );
+void panel_mainmenu_powersave_reset();
+
+gboolean panel_mainmenu_powersave_timeout1( guint timeout );
+gboolean panel_mainmenu_powersave_timeout2( guint timeout );
+gboolean panel_mainmenu_powersave_timeout3( guint timeout );
+
+void panel_mainmenu_set_display( int brightness );
+
#endif
More information about the commitlog
mailing list