Ticket #1321: neod-headset.patch

File neod-headset.patch, 4.3 KB (added by sean_chiang@…, 11 years ago)

neod for detect of headset status

  • src/buttonactions.c

     
    8585#define BIT_TEST( bitmask, bit )    \ 
    8686    ( bitmask[ (bit) / sizeof(short) / 8 ] & (1u << ( (bit) % (sizeof(short) * 8))) ) 
    8787 
     88#ifdef NEOD_PLATFORM_FIC_NEO1973 
     89/* 
     90 * For neo, headset in   headset out 
     91 *          05 02 01     05 02 00 
     92 *          05 02 00     05 02 01 
     93 *          05 02 01     05 02 00 
     94 */ 
     95enum { 
     96        HEADSET_STATE_IDLE = 0, 
     97        HEADSET_STATE_START_IN, 
     98        HEADSET_STATE_START_OUT, 
     99        HEADSET_STATE_IN, 
     100        HEADSET_STATE_OUT, 
     101        HEADSET_STATE_END_IN, 
     102        HEADSET_STATE_END_OUT, 
     103}; 
     104 
     105static int headset_state = HEADSET_STATE_IDLE;   
     106#endif 
     107 
    88108static gboolean moko_debug = TRUE; 
    89109 
    90110GPollFD input_fd[10]; 
     
    405425                    neod_buttonactions_set_display( 100 ); 
    406426                    power_state = NORMAL; 
    407427                } 
    408             } 
    409             else 
    410             if ( event.type == 5 && event.code == HEADPHONE_INSERTION_SWITCHCODE ) 
    411             { 
    412                 if ( event.value == 0 ) /* inserted */ 
    413                 { 
    414                     if ( moko_debug ) g_debug( "headphones IN" ); 
    415                     g_spawn_command_line_async( "amixer sset \"Amp Mode\" \"Headphones\"", NULL ); 
    416                 } 
    417                 else if ( event.value == 1 ) /* released */ 
    418                 { 
    419                     if ( moko_debug ) g_debug( "headphones OUT" ); 
    420                     g_spawn_command_line_async( "amixer sset \"Amp Mode\" \"Stereo Speakers\"", NULL ); 
    421                 } 
    422                 neod_buttonactions_powersave_reset(); 
     428            }     
     429            else 
     430            if ( event.type == 5 && event.code == HEADPHONE_INSERTION_SWITCHCODE ) 
     431            { 
     432#ifdef NEOD_PLATFORM_FIC_NEO1973 
     433                if ( event.value == 1 ) /* inserted */ 
     434                { 
     435                    switch (headset_state) { 
     436                        case HEADSET_STATE_IDLE: 
     437                            headset_state = HEADSET_STATE_START_IN; 
     438                            if ( moko_debug ) g_debug( "HEADSET_STATE_START_IN" ); 
     439                            break; 
     440                        case HEADSET_STATE_IN: 
     441                            headset_state = HEADSET_STATE_END_IN; 
     442                            if ( moko_debug ) g_debug( "HEADSET_STATE_END_IN" ); 
     443                            if ( moko_debug ) g_debug( "headphones IN" );                    
     444                                g_spawn_command_line_async( "dbus-send --session --type=signal /org/openmoko/PhoneKit/Headset org.openmoko.PhoneKit.Headset.HeadsetIn", NULL ); 
     445                            break; 
     446                        case HEADSET_STATE_START_OUT: 
     447                            headset_state = HEADSET_STATE_OUT; 
     448                            if ( moko_debug ) g_debug( "HEADSET_STATE_OUT" ); 
     449                            break; 
     450                        default: 
     451                            headset_state = HEADSET_STATE_IDLE; 
     452                            if ( moko_debug ) g_debug( "HEADSET_STATE_IDLE 1" ); 
     453                            break; 
     454                    } 
     455                } 
     456                else if ( event.value == 0 ) /* released */ 
     457                { 
     458                    switch (headset_state) { 
     459                        case HEADSET_STATE_IDLE: 
     460                            headset_state = HEADSET_STATE_START_OUT; 
     461                            if ( moko_debug ) g_debug( "HEADSET_STATE_START_OUT" ); 
     462                            break; 
     463                        case HEADSET_STATE_OUT: 
     464                            headset_state = HEADSET_STATE_END_OUT; 
     465                            if ( moko_debug ) g_debug( "HEADSET_STATE_END_OUT" ); 
     466                            if ( moko_debug ) g_debug( "headphones OUT" ); 
     467                                g_spawn_command_line_async( "dbus-send --session --type=signal /org/openmoko/PhoneKit/Headset org.openmoko.PhoneKit.Headset.HeadsetOut", NULL ); 
     468                            break; 
     469                        case HEADSET_STATE_START_IN: 
     470                            headset_state = HEADSET_STATE_IN; 
     471                            if ( moko_debug ) g_debug( "HEADSET_STATE_IN" ); 
     472                            break; 
     473                        default: 
     474                            headset_state = HEADSET_STATE_IDLE; 
     475                            if ( moko_debug ) g_debug( "HEADSET_STATE_IDLE 0" ); 
     476                            break; 
     477                    } 
     478                } 
     479#else  
     480                if ( event.value == 1 ) /* inserted */ 
     481                { 
     482                    if ( moko_debug ) g_debug( "headphones IN" );                    
     483                        g_spawn_command_line_async( "amixer sset \"Amp Mode\" \"Headphones\"", NULL ); 
     484                } 
     485                else if ( event.value == 0 ) /* released */ 
     486                { 
     487                    if ( moko_debug ) g_debug( "headphones OUT" ); 
     488                        g_spawn_command_line_async( "amixer sset \"Amp Mode\" \"Stereo Speakers\"", NULL ); 
     489                } 
     490#endif 
     491                neod_buttonactions_powersave_reset(); 
    423492#if 0 
    424                 if ( power_state != NORMAL ) 
    425                 { 
    426                     neod_buttonactions_set_display( 100 ); 
    427                     power_state = NORMAL; 
    428                 } 
     493                if ( power_state != NORMAL ) 
     494                { 
     495                    neod_buttonactions_set_display( 100 ); 
     496                    power_state = NORMAL; 
     497                } 
    429498#endif 
    430             } 
    431         } 
     499            } 
     500        } 
    432501    } 
    433502    return TRUE; 
    434503}