summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorSebastian Leonhardt <sebastian.leonhardt@web.de>2015-07-20 01:50:26 +0200
committerGerrit Rockbox <gerrit@rockbox.org>2015-11-15 23:46:39 +0100
commita507bb283782ee3adb1fc9ba0c6f094108ef558c (patch)
treeacae6cf04f8e34172375061b6fbdc11b6ffb84cb /firmware
parenta8758c953d50fb020b245d5739c41de113638b49 (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.h13
-rw-r--r--firmware/target/arm/samsung/button-yh82x_yh92x.c23
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)