diff options
author | Sebastian Leonhardt <sebastian.leonhardt@web.de> | 2015-07-20 01:50:26 +0200 |
---|---|---|
committer | Gerrit Rockbox <gerrit@rockbox.org> | 2015-11-15 23:46:39 +0100 |
commit | a507bb283782ee3adb1fc9ba0c6f094108ef558c (patch) | |
tree | acae6cf04f8e34172375061b6fbdc11b6ffb84cb /firmware | |
parent | a8758c953d50fb020b245d5739c41de113638b49 (diff) |
YH8xx,YH9xx: Keymap improvement
The main "innovation" in this patch are two "virtual buttons"
for the record switch on YH92x targets. When the switch state
changes, a single BUTTON_REC_SW_ON or .._OFF button event will
be generated. Thus keymap code can react on switching, but
not on the actual state of the switch.
Wherever sensible, the following user scheme is applied:
- use PLAY as confirm button
- use REW button or Long REW to exit
- use REC (YH820) or FFWD (YH92X) as modifier key for button combos
Change-Id: Ic8d1db9cc6869daed8dda98990dfdf7f6fd5d5a1
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/target/arm/samsung/button-target.h | 13 | ||||
-rw-r--r-- | firmware/target/arm/samsung/button-yh82x_yh92x.c | 23 |
2 files changed, 36 insertions, 0 deletions
diff --git a/firmware/target/arm/samsung/button-target.h b/firmware/target/arm/samsung/button-target.h index 400c4ed768..5ccf2adace 100644 --- a/firmware/target/arm/samsung/button-target.h +++ b/firmware/target/arm/samsung/button-target.h @@ -39,9 +39,22 @@ void remote_int(void); #define BUTTON_PLAY 0x00000010 #define BUTTON_REW 0x00000020 #define BUTTON_FFWD 0x00000040 +#if defined(SAMSUNG_YH820) /* YH820 has record button */ #define BUTTON_REC 0x00000080 +#else /* virtual buttons for record switch state change on YH92x */ +#define BUTTON_REC_SW_ON 0x00000080 +#define BUTTON_REC_SW_OFF 0x00000100 +/* TODO: most of the plugin keymaps rely on the REC button, + so I kept the following line to prevent compile errors. + This line has to be removed as soon as all plugin keymaps are fixed! */ +#define BUTTON_REC 0x00000200 +#endif +#if defined(SAMSUNG_YH820) #define BUTTON_MAIN 0x000000ff +#else +#define BUTTON_MAIN 0x000001ff +#endif #define BUTTON_RC_PLUS BUTTON_UP #define BUTTON_RC_MINUS BUTTON_DOWN diff --git a/firmware/target/arm/samsung/button-yh82x_yh92x.c b/firmware/target/arm/samsung/button-yh82x_yh92x.c index 2874a4a48a..ff8a580d2a 100644 --- a/firmware/target/arm/samsung/button-yh82x_yh92x.c +++ b/firmware/target/arm/samsung/button-yh82x_yh92x.c @@ -20,12 +20,15 @@ ****************************************************************************/ #include "system.h" +#include "kernel.h" #include "button.h" #include "backlight.h" #if defined(SAMSUNG_YH920) || defined(SAMSUNG_YH925) +#include "powermgmt.h" #include "adc.h" static int int_btn = BUTTON_NONE; +static unsigned int rec_switch; void button_init_device(void) { @@ -44,6 +47,9 @@ void button_init_device(void) /* remote PLAY */ GPIOD_ENABLE |= 0x02; GPIOD_OUTPUT_EN &= ~0x02; + + /* current record switch state */ + rec_switch = ~GPIOA_INPUT_VAL & 0x40; } /* Remote buttons */ @@ -117,7 +123,24 @@ int button_read_device(void) 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 defined(SAMSUNG_YH820) if (~GPIOA_INPUT_VAL & 0x40) btn |= BUTTON_REC; +#else + if ((~GPIOA_INPUT_VAL & 0x40) != rec_switch) + { + if (rec_switch) { + queue_post(&button_queue,BUTTON_REC_SW_OFF,0); + queue_post(&button_queue,BUTTON_REC_SW_OFF|BUTTON_REL,0); + } + else { + queue_post(&button_queue,BUTTON_REC_SW_ON,0); + queue_post(&button_queue,BUTTON_REC_SW_ON|BUTTON_REL,0); + } + rec_switch = ~GPIOA_INPUT_VAL & 0x40; + backlight_on(); + reset_poweroff_timer(); + } +#endif #if defined(SAMSUNG_YH820) if ( GPIOB_INPUT_VAL & 0x80) btn |= BUTTON_PLAY; #elif defined(SAMSUNG_YH920) || defined(SAMSUNG_YH925) |