r4336 - trunk/src/target/OM-2007.2/daemons/neod/src
sean_chiang at sita.openmoko.org
sean_chiang at sita.openmoko.org
Thu Apr 10 12:37:24 CEST 2008
Author: sean_chiang
Date: 2008-04-10 12:37:21 +0200 (Thu, 10 Apr 2008)
New Revision: 4336
Modified:
trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c
Log:
when headset in or out, send signal to dbus
Modified: trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c
===================================================================
--- trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c 2008-04-10 06:30:54 UTC (rev 4335)
+++ trunk/src/target/OM-2007.2/daemons/neod/src/buttonactions.c 2008-04-10 10:37:21 UTC (rev 4336)
@@ -85,6 +85,26 @@
#define BIT_TEST( bitmask, bit ) \
( bitmask[ (bit) / sizeof(short) / 8 ] & (1u << ( (bit) % (sizeof(short) * 8))) )
+#ifdef NEOD_PLATFORM_FIC_NEO1973
+/*
+ * For neo, headset in headset out
+ * 05 02 01 05 02 00
+ * 05 02 00 05 02 01
+ * 05 02 01 05 02 00
+ */
+enum {
+ HEADSET_STATE_IDLE = 0,
+ HEADSET_STATE_START_IN,
+ HEADSET_STATE_START_OUT,
+ HEADSET_STATE_IN,
+ HEADSET_STATE_OUT,
+ HEADSET_STATE_END_IN,
+ HEADSET_STATE_END_OUT,
+};
+
+static int headset_state = HEADSET_STATE_IDLE;
+#endif
+
static gboolean moko_debug = TRUE;
GPollFD input_fd[10];
@@ -405,30 +425,79 @@
neod_buttonactions_set_display( 100 );
power_state = NORMAL;
}
- }
- else
- if ( event.type == 5 && event.code == HEADPHONE_INSERTION_SWITCHCODE )
- {
- if ( event.value == 0 ) /* inserted */
- {
- if ( moko_debug ) g_debug( "headphones IN" );
- g_spawn_command_line_async( "amixer sset \"Amp Mode\" \"Headphones\"", NULL );
- }
- else if ( event.value == 1 ) /* released */
- {
- if ( moko_debug ) g_debug( "headphones OUT" );
- g_spawn_command_line_async( "amixer sset \"Amp Mode\" \"Stereo Speakers\"", NULL );
- }
- neod_buttonactions_powersave_reset();
+ }
+ else
+ if ( event.type == 5 && event.code == HEADPHONE_INSERTION_SWITCHCODE )
+ {
+#ifdef NEOD_PLATFORM_FIC_NEO1973
+ if ( event.value == 1 ) /* inserted */
+ {
+ switch (headset_state) {
+ case HEADSET_STATE_IDLE:
+ headset_state = HEADSET_STATE_START_IN;
+ if ( moko_debug ) g_debug( "HEADSET_STATE_START_IN" );
+ break;
+ case HEADSET_STATE_IN:
+ headset_state = HEADSET_STATE_END_IN;
+ if ( moko_debug ) g_debug( "HEADSET_STATE_END_IN" );
+ if ( moko_debug ) g_debug( "headphones IN" );
+ g_spawn_command_line_async( "dbus-send --session --type=signal /org/openmoko/PhoneKit/Headset org.openmoko.PhoneKit.Headset.HeadsetIn", NULL );
+ break;
+ case HEADSET_STATE_START_OUT:
+ headset_state = HEADSET_STATE_OUT;
+ if ( moko_debug ) g_debug( "HEADSET_STATE_OUT" );
+ break;
+ default:
+ headset_state = HEADSET_STATE_IDLE;
+ if ( moko_debug ) g_debug( "HEADSET_STATE_IDLE 1" );
+ break;
+ }
+ }
+ else if ( event.value == 0 ) /* released */
+ {
+ switch (headset_state) {
+ case HEADSET_STATE_IDLE:
+ headset_state = HEADSET_STATE_START_OUT;
+ if ( moko_debug ) g_debug( "HEADSET_STATE_START_OUT" );
+ break;
+ case HEADSET_STATE_OUT:
+ headset_state = HEADSET_STATE_END_OUT;
+ if ( moko_debug ) g_debug( "HEADSET_STATE_END_OUT" );
+ if ( moko_debug ) g_debug( "headphones OUT" );
+ g_spawn_command_line_async( "dbus-send --session --type=signal /org/openmoko/PhoneKit/Headset org.openmoko.PhoneKit.Headset.HeadsetOut", NULL );
+ break;
+ case HEADSET_STATE_START_IN:
+ headset_state = HEADSET_STATE_IN;
+ if ( moko_debug ) g_debug( "HEADSET_STATE_IN" );
+ break;
+ default:
+ headset_state = HEADSET_STATE_IDLE;
+ if ( moko_debug ) g_debug( "HEADSET_STATE_IDLE 0" );
+ break;
+ }
+ }
+#else
+ if ( event.value == 1 ) /* inserted */
+ {
+ if ( moko_debug ) g_debug( "headphones IN" );
+ g_spawn_command_line_async( "amixer sset \"Amp Mode\" \"Headphones\"", NULL );
+ }
+ else if ( event.value == 0 ) /* released */
+ {
+ if ( moko_debug ) g_debug( "headphones OUT" );
+ g_spawn_command_line_async( "amixer sset \"Amp Mode\" \"Stereo Speakers\"", NULL );
+ }
+#endif
+ neod_buttonactions_powersave_reset();
#if 0
- if ( power_state != NORMAL )
- {
- neod_buttonactions_set_display( 100 );
- power_state = NORMAL;
- }
+ if ( power_state != NORMAL )
+ {
+ neod_buttonactions_set_display( 100 );
+ power_state = NORMAL;
+ }
#endif
- }
- }
+ }
+ }
}
return TRUE;
}
More information about the commitlog
mailing list