1
0
Fork 0
forked from len0rd/rockbox

iRiver: added support for hold-button on main unit and remote control

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6320 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Christian Gmeiner 2005-04-19 11:34:22 +00:00
parent e5e08c7ee5
commit ed0c8764c4
4 changed files with 92 additions and 56 deletions

View file

@ -37,6 +37,9 @@
#include "powermgmt.h" #include "powermgmt.h"
#include "led.h" #include "led.h"
#include "sound.h" #include "sound.h"
#if CONFIG_KEYPAD == IRIVER_H100_PAD
#include "button.h"
#endif
static enum playmode ff_mode; static enum playmode ff_mode;
@ -157,7 +160,11 @@ void status_draw(bool force_redraw)
info.hour = tm->tm_hour; info.hour = tm->tm_hour;
info.minute = tm->tm_min; info.minute = tm->tm_min;
info.shuffle = global_settings.playlist_shuffle; info.shuffle = global_settings.playlist_shuffle;
#if CONFIG_KEYPAD == IRIVER_H100_PAD
info.keylock = button_hold();
#else
info.keylock = keys_locked; info.keylock = keys_locked;
#endif
info.repeat = global_settings.repeat_mode; info.repeat = global_settings.repeat_mode;
info.playmode = current_playmode(); info.playmode = current_playmode();
#ifndef HAVE_LED #ifndef HAVE_LED

View file

@ -105,3 +105,4 @@ Tony Motakis
Andy Young Andy Young
Alexandre Bourget Alexandre Bourget
Richard S. La Charité III Richard S. La Charité III
Christian Gmeiner

View file

@ -356,70 +356,97 @@ static int button_read(void)
#if CONFIG_KEYPAD == IRIVER_H100_PAD #if CONFIG_KEYPAD == IRIVER_H100_PAD
data = adc_scan(ADC_BUTTONS); static bool hold_button = false;
static bool remote_hold_button = false;
if (data < 0x80) /* light handling */
if (data < 0x30) if (hold_button && !button_hold())
if (data < 0x18) {
btn = BUTTON_SELECT; backlight_on();
else }
btn = BUTTON_UP; if (remote_hold_button && !remote_button_hold())
else {
if (data < 0x50) remote_backlight_on();
btn = BUTTON_LEFT; }
else hold_button = button_hold();
btn = BUTTON_DOWN; remote_hold_button = remote_button_hold();
else
if (data < 0xb0)
if (data < 0xa0)
btn = BUTTON_RIGHT;
else
btn = BUTTON_OFF;
else
if (data < 0xd0)
btn = BUTTON_MODE;
else
if (data < 0xf0)
btn = BUTTON_REC;
data = adc_scan(ADC_REMOTE); /* normal buttons */
if (!button_hold())
if (data < 0x74) {
if (data < 0x40) data = adc_scan(ADC_BUTTONS);
if (data < 0x20)
if(data < 0x10) if (data < 0x80)
btn = BUTTON_RC_STOP; if (data < 0x30)
if (data < 0x18)
btn = BUTTON_SELECT;
else else
btn = BUTTON_RC_VOL_DOWN; btn = BUTTON_UP;
else else
btn = BUTTON_RC_VOL; if (data < 0x50)
else btn = BUTTON_LEFT;
if (data < 0x58)
btn = BUTTON_RC_VOL_UP;
else
btn = BUTTON_RC_BITRATE;
else
if (data < 0xb0)
if (data < 0x88)
btn = BUTTON_RC_REC;
else
btn = BUTTON_RC_SOURCE;
else
if (data < 0xd8)
if(data < 0xc0)
btn = BUTTON_RC_FF;
else else
btn = BUTTON_RC_MENU; btn = BUTTON_DOWN;
else
if (data < 0xb0)
if (data < 0xa0)
btn = BUTTON_RIGHT;
else
btn = BUTTON_OFF;
else else
if (data < 0xf0) if (data < 0xd0)
btn = BUTTON_RC_REW; btn = BUTTON_MODE;
else
if (data < 0xf0)
btn = BUTTON_REC;
}
/* remote buttons */
if (!remote_button_hold())
{
data = adc_scan(ADC_REMOTE);
data = GPIO1_READ; if (data < 0x74)
if ((data & 0x20) == 0) if (data < 0x40)
btn |= BUTTON_ON; if (data < 0x20)
if(data < 0x10)
btn = BUTTON_RC_STOP;
else
btn = BUTTON_RC_VOL_DOWN;
else
btn = BUTTON_RC_VOL;
else
if (data < 0x58)
btn = BUTTON_RC_VOL_UP;
else
btn = BUTTON_RC_BITRATE;
else
if (data < 0xb0)
if (data < 0x88)
btn = BUTTON_RC_REC;
else
btn = BUTTON_RC_SOURCE;
else
if (data < 0xd8)
if(data < 0xc0)
btn = BUTTON_RC_FF;
else
btn = BUTTON_RC_MENU;
else
if (data < 0xf0)
btn = BUTTON_RC_REW;
}
/* special buttons */
if (!button_hold())
{
data = GPIO1_READ;
if ((data & 0x20) == 0)
btn |= BUTTON_ON;
if ((data & 0x40) == 0) if ((data & 0x40) == 0)
btn |= BUTTON_RC_ON; btn |= BUTTON_RC_ON;
}
#elif CONFIG_KEYPAD == RECORDER_PAD #elif CONFIG_KEYPAD == RECORDER_PAD

View file

@ -36,6 +36,7 @@ void button_set_flip(bool flip); /* turn 180 degrees */
#if CONFIG_KEYPAD == IRIVER_H100_PAD #if CONFIG_KEYPAD == IRIVER_H100_PAD
bool button_hold(void); bool button_hold(void);
bool remote_button_hold(void);
#endif #endif
#define BUTTON_NONE 0x0000 #define BUTTON_NONE 0x0000