Example #1
0
int button_read_device(int* data)
{
    *data = mouse_coords;
#else
int button_read_device(void)
{
#endif
#ifdef HAS_BUTTON_HOLD
    int hold_button = button_hold();

#ifdef HAVE_BACKLIGHT
    /* light handling */
    static int hold_button_old = false;
    if (hold_button != hold_button_old)
    {
        hold_button_old = hold_button;
        backlight_hold_changed(hold_button);
    }
#endif

    if (hold_button)
        return BUTTON_NONE;
    else
#endif

    return btn;
}
Example #2
0
int button_read_device(void)
{
    /* Simple poll of GPIO status */
    hold_button = _button_hold();

#ifndef BOOTLOADER
    /* Backlight hold handling */
    if (hold_button != hold_button_old)
    {
        hold_button_old = hold_button;
        backlight_hold_changed(hold_button);
    }
#endif

    int button = ext_btn;

    /* Check status for key down flag and scan port if so indicated. */
    if (KPP_KPSR & KPP_KPSR_KPKD)
        button |= kpp_scan();

#ifdef HAVE_HEADPHONE_DETECTION
    /* If hold, ignore any pressed button. Remote has its own hold
     * switch, so return state regardless. */
    return hold_button ? (button & BUTTON_REMOTE) : button;
#else
    /* If hold, ignore any pressed button.  */
    return hold_button ? BUTTON_NONE : button;
#endif
}
Example #3
0
/*
 * Get button pressed from hardware
 */
int button_read_device(void)
{
#ifdef SANSA_FUZE
    static unsigned power_counter = 0;
#endif
    unsigned short dbop_din;
    int btn = BUTTON_NONE;

    dbop_din = button_read_dbop();

    /* hold button handling */
    hold_button = ((dbop_din & (1<<12)) != 0);
#ifndef BOOTLOADER
    /* light handling */
    if (hold_button != hold_button_old)
    {
        hold_button_old = hold_button;
        backlight_hold_changed(hold_button);
    }
#endif /* BOOTLOADER */
    if (hold_button) {
#ifdef SANSA_FUZE
        power_counter = HZ;
#endif
        return 0;
    }

    /* push button handling */
    if ((dbop_din & (1 << 2)) == 0)
        btn |= BUTTON_UP;
    if ((dbop_din & (1 << 3)) == 0)
        btn |= BUTTON_LEFT;
    if ((dbop_din & (1 << 4)) == 0)
        btn |= BUTTON_SELECT;
    if ((dbop_din & (1 << 5)) == 0)
        btn |= BUTTON_RIGHT;
    if ((dbop_din & (1 << 6)) == 0)
        btn |= BUTTON_DOWN;
    if ((dbop_din & (1 << 8)) != 0)
        btn |= BUTTON_POWER;
    if ((dbop_din & (1 << 15)) == 0)
        btn |= DBOP_BIT15_BUTTON;

#ifdef SANSA_FUZE
    /* read power on bit 8, but not if hold button was just released, since
     * you basically always hit power due to the slider mechanism after releasing
     * (fuze only)
     */
    if (power_counter > 0) {
            power_counter--;
        btn &= ~BUTTON_POWER;
    }
#endif

    return btn;
}
Example #4
0
/*
 * Get button pressed from hardware
 */
int button_read_device(void)
{
#if defined(SAMSUNG_YH920) || defined(SAMSUNG_YH925)
    int btn = int_btn;
#else
    int btn = BUTTON_NONE;
#endif /* (SAMSUNG_YH920) || (SAMSUNG_YH925) */
    static bool hold_button = false;
    bool hold_button_old;

    /* Hold */
    hold_button_old = hold_button;
    hold_button = button_hold();

#ifndef BOOTLOADER
    if (hold_button != hold_button_old)
        backlight_hold_changed(hold_button);
#endif

    /* device buttons */
    if (!hold_button)
    {
        if (~GPIOA_INPUT_VAL & 0x04) btn |= BUTTON_LEFT;
        if (~GPIOA_INPUT_VAL & 0x20) btn |= BUTTON_RIGHT;
        if (~GPIOA_INPUT_VAL & 0x10) btn |= BUTTON_UP;
        if (~GPIOA_INPUT_VAL & 0x08) btn |= BUTTON_DOWN;
        if (~GPIOA_INPUT_VAL & 0x02) btn |= BUTTON_FFWD;
        if (~GPIOA_INPUT_VAL & 0x80) btn |= BUTTON_REW;
        if (~GPIOA_INPUT_VAL & 0x40) btn |= BUTTON_REC;
#if defined(SAMSUNG_YH820)
        if ( GPIOB_INPUT_VAL & 0x80) btn |= BUTTON_PLAY;
#elif defined(SAMSUNG_YH920) || defined(SAMSUNG_YH925)
        if ( GPIOD_INPUT_VAL & 0x04) btn |= BUTTON_PLAY;
        if ( GPIOD_INPUT_VAL & 0x02) btn |= BUTTON_RC_PLAY; /* Remote PLAY */
#endif
    }

    return btn;
}
Example #5
0
bool button_hold(void)
{
#ifndef BOOTLOADER
    static bool hold_button_old = false;
#endif
    bool hold_button = false;

    GPIOA_PIN(6) = (1<<6);
    if (GPIOA_PIN(2))
        hold_button = true;
    GPIOA_PIN(6) = 0x00;

#ifndef BOOTLOADER
    /* light handling */
    if (hold_button != hold_button_old)
    {
        hold_button_old = hold_button;
        backlight_hold_changed(hold_button);
    }
#endif /* BOOTLOADER */

    return hold_button;
}
int button_read_device(void)
{
    int  btn = BUTTON_NONE;
    bool hold_button_old;
    bool remote_hold_button_old;
    static int prev_data = 0xff;
    static int last_valid = 0xff;
    int  data;

    /* normal buttons */
    hold_button_old = hold_button;
    hold_button = button_hold();

#ifndef BOOTLOADER
    /* give BL notice if HB state chaged */
    if (hold_button != hold_button_old)
        backlight_hold_changed(hold_button);
#endif

    if (button_scan_on && !hold_button)
    {
        data = adc_scan(ADC_BUTTONS);

        /* ADC debouncing: Only accept new reading if it's
         * stable (+/-1). Use latest stable value otherwise. */
        if ((unsigned)(data - prev_data + 1) <= 2)
            last_valid = data;
        prev_data = data;
        data = last_valid;
        
        if (data < 0xf0)
        {
            if(data < 0x7c)
                if(data < 0x42)
                    btn = BUTTON_LEFT;
                else
                    if(data < 0x62)
                        btn = BUTTON_RIGHT;
                    else
                        btn = BUTTON_SELECT;
            else
                if(data < 0xb6)
                    if(data < 0x98)
                        btn = BUTTON_REC;
                    else
                        btn = BUTTON_PLAY;
                else
                    if(data < 0xd3)
                        btn = BUTTON_DOWN;
                    else
                        btn = BUTTON_UP;
        }
    }

    /* remote buttons */
    data = remote_detect() ? adc_scan(ADC_REMOTE) : 0xff;

    remote_hold_button_old = remote_hold_button;
    remote_hold_button = data < 0x17;

#ifndef BOOTLOADER
    if (remote_hold_button != remote_hold_button_old)
        remote_backlight_hold_changed(remote_hold_button);
#endif

    if (!remote_hold_button)
    {
        if (data < 0xee)
        {
            if(data < 0x7a)
                if(data < 0x41)
                    btn |= BUTTON_RC_FF;
                else
                    if(data < 0x61)
                        btn |= BUTTON_RC_REW;
                    else
                        btn |= BUTTON_RC_MODE;
            else
                if(data < 0xb4)
                    if(data < 0x96)
                        btn |= BUTTON_RC_REC;
                    else
                        btn |= BUTTON_RC_MENU;
                else
                    if(data < 0xd1)
                        btn |= BUTTON_RC_VOL_UP;
                    else
                        btn |= BUTTON_RC_VOL_DOWN;
        }
    }

    data = GPIO_READ;

    /* hold and power are mutually exclusive */
    if (!(data & 0x04000000))
        btn |= BUTTON_POWER;

    /* remote play button should be dead if hold */
    if (!remote_hold_button && !(data & 0x02000000))
        btn |= BUTTON_RC_PLAY;

    return btn;
}
/*
 * Get button pressed from hardware
 */
int button_read_device(void)
{
    int btn = BUTTON_NONE;
    int data = 0;
    static bool hold_button = false;
    bool remote_hold_button = false;

    bool hold_button_old;
    bool remote_present;

    /* check if we have remote connected */
    remote_present = remote_detect();

    /* read hold buttons status */
    hold_button_old = hold_button;
    hold_button = button_hold();
    remote_hold_button = remote_button_hold();
    
#ifndef BOOTLOADER
    /* Only main hold affects backlight */
    if (hold_button != hold_button_old)
        backlight_hold_changed(hold_button);
#endif

    /* Skip if main hold is active */
    if (!hold_button)
    {
        data = adc_scan(ADC_BUTTONS);

        if (data < 2300) /* valid button */
        {
            if (data < 900) /* middle */
            {
                if (data < 500)
                {
                    if (data > 200)
                        /* 200 - 500 */
                        btn = BUTTON_REC;
                }
                else /* 900 - 500 */
                    btn = BUTTON_VOL_DOWN;
            }
            else /* 2250 - 900 */
            {
                if (data < 1600)
                {
                    /* 1600 - 900 */
                    if (data < 1200)
                        /* 1200 - 900 */
                        btn = BUTTON_VOL_UP;
                    else /* 1600 - 1200 */
                        btn = BUTTON_FF;
                }
                else /* 1600 - 2250 */
                {
                    if (data < 1900)
                        /* 1900 - 1600 */
                        btn = BUTTON_REW;
                    else /* 1900 - 2300 */
                        btn = BUTTON_FUNC;
                }
            }
        }
    }

    /* Skip if remote is not present or remote_hold is active */
    if (remote_present && !remote_hold_button)
    {
        data = adc_scan(ADC_REMOTE);

        if (data < 2050) /* valid button */
        {
        if (data < 950) /* middle */
            {
                if (data < 650)
                {
                    if (data < 400)
                    {
                        if (data > 250)
                            /* 250 - 400 */
                            btn = BUTTON_RC_VOL_DOWN;
                    }
                    else /* 650 - 400 */
                        btn = BUTTON_RC_VOL_UP;
                }
                else /* 950 - 650 */
                    btn = BUTTON_RC_FF;
            }
            else /* 2050 - 950 */
            {
                if (data < 1900)
                {
                    if (data < 1350)
                        /* 1350 - 900 */
                        btn = BUTTON_RC_REW;
                }
                else /* 2050 - 1900 */
                    btn = BUTTON_RC_FUNC;
            }
        }
    }

    /* PLAY buttons (both remote and main) are
     * GPIOs not ADC
     */
    data = GPIO1_READ;

    /* GPIO56 active high main PLAY/PAUSE/ON */
    if (!hold_button && ((data & (1<<24))))
        btn |= BUTTON_PLAY;

    /* GPIO41 active high remote PLAY/PAUSE/ON */
    if (remote_present && !remote_hold_button && ((data & (1<<9))))
        btn |= BUTTON_RC_PLAY;
        
    return btn;
}