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

View file

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

View file

@ -356,70 +356,97 @@ static int button_read(void)
#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)
if (data < 0x30)
if (data < 0x18)
btn = BUTTON_SELECT;
else
btn = BUTTON_UP;
else
if (data < 0x50)
btn = BUTTON_LEFT;
else
btn = BUTTON_DOWN;
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;
/* light handling */
if (hold_button && !button_hold())
{
backlight_on();
}
if (remote_hold_button && !remote_button_hold())
{
remote_backlight_on();
}
hold_button = button_hold();
remote_hold_button = remote_button_hold();
data = adc_scan(ADC_REMOTE);
if (data < 0x74)
if (data < 0x40)
if (data < 0x20)
if(data < 0x10)
btn = BUTTON_RC_STOP;
/* normal buttons */
if (!button_hold())
{
data = adc_scan(ADC_BUTTONS);
if (data < 0x80)
if (data < 0x30)
if (data < 0x18)
btn = BUTTON_SELECT;
else
btn = BUTTON_RC_VOL_DOWN;
btn = BUTTON_UP;
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;
if (data < 0x50)
btn = BUTTON_LEFT;
else
btn = BUTTON_RC_MENU;
btn = BUTTON_DOWN;
else
if (data < 0xb0)
if (data < 0xa0)
btn = BUTTON_RIGHT;
else
btn = BUTTON_OFF;
else
if (data < 0xf0)
btn = BUTTON_RC_REW;
if (data < 0xd0)
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 & 0x20) == 0)
btn |= BUTTON_ON;
if (data < 0x74)
if (data < 0x40)
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)
btn |= BUTTON_RC_ON;
if ((data & 0x40) == 0)
btn |= BUTTON_RC_ON;
}
#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
bool button_hold(void);
bool remote_button_hold(void);
#endif
#define BUTTON_NONE 0x0000