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; }
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 }
/* * 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; }
/* * 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; }
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; }