r2665 - trunk/src/target/OM-2007.2/daemons/neod/src

mickey at sita.openmoko.org mickey at sita.openmoko.org
Wed Aug 8 14:50:35 CEST 2007


Author: mickey
Date: 2007-08-08 14:50:35 +0200 (Wed, 08 Aug 2007)
New Revision: 2665

Modified:
   trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c
   trunk/src/target/OM-2007.2/daemons/neod/src/neod-main.c
Log:
neod: read from all input devices, remove reading environment variable


Modified: trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c	2007-08-08 12:38:29 UTC (rev 2664)
+++ trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c	2007-08-08 12:50:35 UTC (rev 2665)
@@ -42,23 +42,19 @@
 //FIXME load this from sysfs
 static const int MAX_BRIGHTNESS = 5000;
 
-//FIXME find out through sysfs
 #ifndef DEBUG_THIS_FILE
-    #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"
     #define TOUCHSCREEN_BUTTON_KEYCODE 0x14a
 #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"
     #define TOUCHSCREEN_BUTTON_KEYCODE 0x14a
 #endif
 
+GPollFD input_fd[10];
+int max_input_fd = 0;
+
 GPollFD aux_fd;
 GPollFD power_fd;
 GIOChannel* touchscreen_io;
@@ -161,16 +157,23 @@
 
 gboolean neod_buttonactions_install_watcher()
 {
-    int auxfd = open( AUX_BUTTON_EVENT_PATH, O_RDONLY );
-    if ( auxfd < 0 )
+
+    int i = 0;
+    for ( ; i < 10; ++i )
     {
-        g_debug( "can't open " AUX_BUTTON_EVENT_PATH " (%s)", strerror( errno ) );
-        return FALSE;
+        char* filename = g_strdup_printf( "/dev/input/event%d", i );
+        input_fd[i].fd = open( filename, O_RDONLY );
+        if ( input_fd[i].fd < 0 )
+            break;
+        else
+            g_debug( "'%s' open OK, fd = '%d'", filename, input_fd[i].fd );
     }
-    int powerfd = open( POWER_BUTTON_EVENT_PATH, O_RDONLY );
-    if ( powerfd < 0 )
+
+    max_input_fd = i - 1;
+    g_debug( "opened %d input nodes.", max_input_fd + 1 );
+    if ( max_input_fd <= 0 )
     {
-        g_debug( "can't open " POWER_BUTTON_EVENT_PATH " (%s)", strerror( errno ) );
+        g_debug( "can't open ANY input node. no watcher installed." );
         return FALSE;
     }
     static GSourceFuncs funcs = {
@@ -180,34 +183,15 @@
     NULL,
     };
     GSource* button_watcher = g_source_new( &funcs, sizeof (GSource) );
-    aux_fd.fd = auxfd;
-    aux_fd.events = G_IO_IN | G_IO_HUP | G_IO_ERR;
-    aux_fd.revents = 0;
-    g_source_add_poll( button_watcher, &aux_fd );
-    power_fd.fd = powerfd;
-    power_fd.events = G_IO_IN | G_IO_HUP | G_IO_ERR;
-    power_fd.revents = 0;
-    g_source_add_poll( button_watcher, &power_fd );
-    g_source_attach( button_watcher, NULL );
 
-    if ( getenv( "MOKO_POWERSAVE" ) != NULL )
+    for ( i = 0; i <= max_input_fd; ++i )
     {
-
-        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, neod_buttonactions_touchscreen_cb, NULL );
-
-        neod_buttonactions_powersave_reset();
-        neod_buttonactions_set_display( 100 );
-        neod_buttonactions_sound_init();
+        input_fd[i].events = G_IO_IN | G_IO_HUP | G_IO_ERR;
+        input_fd[i].revents = 0;
+        g_source_add_poll( button_watcher, &input_fd[i] );
+        g_debug( "added fd %d to list of watchers", input_fd[i].fd );
     }
-    else
-        g_debug( "MOKO_POWERSAVE=yes not set. Not enabling power management." );
+    g_source_attach( button_watcher, NULL );
 
     return TRUE;
 }
@@ -221,59 +205,78 @@
 
 gboolean neod_buttonactions_input_check( GSource* source )
 {
-    return ( ( aux_fd.revents & G_IO_IN ) || ( power_fd.revents & G_IO_IN ) );
+    for ( int i = 0; i < max_input_fd; ++i )
+        if ( input_fd[i].revents & G_IO_IN )
+            return TRUE;
+    return FALSE;
 }
 
 
 gboolean neod_buttonactions_input_dispatch( GSource* source, GSourceFunc callback, gpointer data )
 {
-    if ( aux_fd.revents & G_IO_IN )
+    for ( int i = 0; i < max_input_fd; ++i )
     {
-        struct input_event event;
-        int size = read( aux_fd.fd, &event, sizeof( struct input_event ) );
-        //g_debug( "read %d bytes from aux_fd %d", size, aux_fd.fd );
-        //g_debug( "input event = ( %0x, %0x, %0x )", event.type, event.code, event.value );
-        if ( event.type == 1 && event.code == AUX_BUTTON_KEYCODE )
+        if ( input_fd[i].revents & G_IO_IN )
         {
-            if ( event.value == 1 ) /* pressed */
+            struct input_event event;
+            int size = read( input_fd[i].fd, &event, sizeof( struct input_event ) );
+            //g_debug( "read %d bytes from aux_fd %d", size, aux_fd.fd );
+            //g_debug( "input event = ( %0x, %0x, %0x )", event.type, event.code, event.value );
+            if ( event.type == 1 && event.code == AUX_BUTTON_KEYCODE )
             {
-                g_debug( "triggering aux timer" );
-                aux_timer = g_timeout_add( 1 * 1000, (GSourceFunc) neod_buttonactions_aux_timeout, (gpointer)1 );
+                if ( event.value == 1 ) /* pressed */
+                {
+                    g_debug( "triggering aux timer" );
+                    aux_timer = g_timeout_add( 1 * 1000, (GSourceFunc) neod_buttonactions_aux_timeout, (gpointer)1 );
+                }
+                else if ( event.value == 0 ) /* released */
+                {
+                    g_debug( "resetting aux timer" );
+                    if ( aux_timer != -1 )
+                    {
+                        g_source_remove( aux_timer );
+                        neod_buttonactions_aux_timeout( 0 );
+                    }
+                    aux_timer = -1;
+                }
             }
-            else if ( event.value == 0 ) /* released */
+            else
+            if ( event.type == 1 && event.code == POWER_BUTTON_KEYCODE )
             {
-                g_debug( "resetting aux timer" );
-                if ( aux_timer != -1 )
+                if ( event.value == 1 ) /* pressed */
                 {
-                    g_source_remove( aux_timer );
-                    neod_buttonactions_aux_timeout( 0 );
+                    g_debug( "triggering power timer" );
+                    power_timer = g_timeout_add( 1 * 1000, (GSourceFunc) neod_buttonactions_power_timeout, (gpointer)1 );
                 }
-                aux_timer = -1;
+                else if ( event.value == 0 ) /* released */
+                {
+                    g_debug( "resetting power timer" );
+                    if ( power_timer != -1 )
+                    {
+                        g_source_remove( power_timer );
+                        neod_buttonactions_power_timeout( 0 );
+                    }
+                    power_timer = -1;
+                }
             }
-        }
-    }
-    if ( power_fd.revents & G_IO_IN )
-    {
-        struct input_event event;
-        int size = read( power_fd.fd, &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 );
-        if ( event.type == 1 && event.code == POWER_BUTTON_KEYCODE )
-        {
-            if ( event.value == 1 ) /* pressed */
+            else
+            if ( event.type == 1 && event.code == TOUCHSCREEN_BUTTON_KEYCODE )
             {
-                g_debug( "triggering power timer" );
-                power_timer = g_timeout_add( 1 * 1000, (GSourceFunc) neod_buttonactions_power_timeout, (gpointer)1 );
-            }
-            else if ( event.value == 0 ) /* released */
-            {
-                g_debug( "resetting power timer" );
-                if ( power_timer != -1 )
+                if ( event.value == 1 ) /* pressed */
                 {
-                    g_source_remove( power_timer );
-                    neod_buttonactions_power_timeout( 0 );
+                    g_debug( "stylus pressed" );
+                    neod_buttonactions_sound_play( "touchscreen" );
                 }
-                power_timer = -1;
+                else if ( event.value == 0 ) /* released */
+                {
+                    g_debug( "stylus released" );
+                }
+                neod_buttonactions_powersave_reset();
+                if ( power_state != NORMAL )
+                {
+                    neod_buttonactions_set_display( 100 );
+                    power_state = NORMAL;
+                }
             }
         }
     }
@@ -446,35 +449,6 @@
     return FALSE;
 }
 
-gboolean neod_buttonactions_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 ) );
-
-    if ( event.type == 1 && event.code == TOUCHSCREEN_BUTTON_KEYCODE )
-    {
-        if ( event.value == 1 ) /* pressed */
-        {
-            g_debug( "stylus pressed" );
-            neod_buttonactions_sound_play( "touchscreen" );
-        }
-        else if ( event.value == 0 ) /* released */
-        {
-            g_debug( "stylus released" );
-        }
-
-        neod_buttonactions_powersave_reset();
-        if ( power_state != NORMAL )
-        {
-            neod_buttonactions_set_display( 100 );
-            power_state = NORMAL;
-        }
-    }
-    return TRUE;
-}
-
 void neod_buttonactions_powersave_reset()
 {
     g_debug( "mainmenu powersave reset" );

Modified: trunk/src/target/OM-2007.2/daemons/neod/src/neod-main.c
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/src/neod-main.c	2007-08-08 12:38:29 UTC (rev 2664)
+++ trunk/src/target/OM-2007.2/daemons/neod/src/neod-main.c	2007-08-08 12:50:35 UTC (rev 2665)
@@ -23,6 +23,9 @@
     gtk_init( &argc, &argv );
     if ( neod_buttonactions_install_watcher() )
     {
+        neod_buttonactions_powersave_reset();
+        neod_buttonactions_set_display( 100 );
+        neod_buttonactions_sound_init();
         gtk_main();
         return 0;
     }





More information about the commitlog mailing list