diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2017-09-10 21:55:35 +0200 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2017-09-17 00:03:02 +0200 |
commit | ac57f96838b53e574477d13bf41bc54711a70c21 (patch) | |
tree | dcd4c1d96593458c59375c2160c3ffaeb27329e5 /firmware | |
parent | f22ccabac339925dbb004bd035307480fca9d2f7 (diff) | |
download | rockbox-ac57f96838b53e574477d13bf41bc54711a70c21.tar.gz rockbox-ac57f96838b53e574477d13bf41bc54711a70c21.zip |
Add support for the NWZ-A860
Change-Id: Ibf0c5168ac31d4ba2aeaa86cbeca37a1011b75fa
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/export/config.h | 3 | ||||
-rw-r--r-- | firmware/export/config/sonynwza860.h | 24 | ||||
-rw-r--r-- | firmware/target/hosted/sonynwz/button-nwz.c | 25 | ||||
-rw-r--r-- | firmware/target/hosted/sonynwz/button-target.h | 39 |
4 files changed, 87 insertions, 4 deletions
diff --git a/firmware/export/config.h b/firmware/export/config.h index f98ccbd853..abe815d70d 100644 --- a/firmware/export/config.h +++ b/firmware/export/config.h @@ -165,6 +165,7 @@ #define SAMSUNG_YPR1_PAD 61 #define SAMSUNG_YH92X_PAD 62 #define DX50_PAD 63 +#define SONY_NWZA860_PAD 64 /* The NWZ-A860 is too different (touchscreen) */ /* CONFIG_REMOTE_KEYPAD */ #define H100_REMOTE 1 @@ -594,6 +595,8 @@ Lyre prototype 1 */ #include "config/sonynwa20.h" #elif defined(SONY_NWZE470) #include "config/sonynwze470.h" +#elif defined(SONY_NWZA860) +#include "config/sonynwza860.h" #else /* no known platform */ #endif diff --git a/firmware/export/config/sonynwza860.h b/firmware/export/config/sonynwza860.h new file mode 100644 index 0000000000..f61dd7a4dd --- /dev/null +++ b/firmware/export/config/sonynwza860.h @@ -0,0 +1,24 @@ +/* + * This config file is for the Sony NWZ-A860 series + */ + +/* For Rolo and boot loader */ +#define MODEL_NUMBER 107 + +#define MODEL_NAME "Sony NWZ-A860 Series" + +/* LCD dimensions */ +#define LCD_WIDTH 240 +#define LCD_HEIGHT 400 +/* sqrt(240^2 + 400^2) / 2.8 = 166 */ +#define LCD_DPI 166 + +/* this device has a touchscreen */ +#define HAVE_TOUCHSCREEN +#define HAVE_BUTTON_DATA + +#include "sonynwzlinux.h" + +/* override keypad */ +#undef CONFIG_KEYPAD +#define CONFIG_KEYPAD SONY_NWZA860_PAD diff --git a/firmware/target/hosted/sonynwz/button-nwz.c b/firmware/target/hosted/sonynwz/button-nwz.c index 3be74fc924..2fb23e1471 100644 --- a/firmware/target/hosted/sonynwz/button-nwz.c +++ b/firmware/target/hosted/sonynwz/button-nwz.c @@ -18,7 +18,7 @@ * ****************************************************************************/ #include "button.h" -#define LOGF_ENABLE +//#define LOGF_ENABLE #include "logf.h" #include "panic.h" #include "backlight.h" @@ -192,6 +192,19 @@ static void open_input_device(const char *path) poll_nfds++; } +#if defined(SONY_NWZA860) +/* keycode -> rockbox button mapping */ +static int button_map[NWZ_KEY_MASK + 1] = +{ + [0 ... NWZ_KEY_MASK] = 0, + [NWZ_KEY_PLAY] = BUTTON_PLAY, + [NWZ_KEY_RIGHT] = BUTTON_FF, + [NWZ_KEY_LEFT] = BUTTON_REW, + [NWZ_KEY_VOL_DOWN] = BUTTON_VOL_DOWN, + [NWZ_KEY_VOL_UP] = BUTTON_VOL_UP, + [NWZ_KEY_BACK] = BUTTON_BACK, +}; +#else /* SONY_NWZA860 */ /* keycode -> rockbox button mapping */ static int button_map[NWZ_KEY_MASK + 1] = { @@ -214,6 +227,7 @@ static int button_map[NWZ_KEY_MASK + 1] = [NWZ_KEY_AD1_6] = 0, [NWZ_KEY_AD1_7] = 0, }; +#endif /* SONY_NWZA860 */ static void handle_key(struct input_event evt) { @@ -296,11 +310,16 @@ int button_read_device( #endif } } + int btns = button_bitmap; #ifdef HAVE_TOUCHSCREEN + /* WARNING we must call touchscreen_to_pixels even if there is no touch, + * otherwsise *data is not filled with the last position and it breaks + * everything */ + int touch_bitmap = touchscreen_to_pixels(touch_x, touch_y, data); if(touch_detect) - button_bitmap |= touchscreen_to_pixels(touch_x, touch_y, data); + btns |= touch_bitmap; #endif - return hold_status ? 0 : button_bitmap; + return hold_status ? 0 : btns; } void nwz_button_reload_after_suspend(void) diff --git a/firmware/target/hosted/sonynwz/button-target.h b/firmware/target/hosted/sonynwz/button-target.h index 6cf915b4ad..5070728236 100644 --- a/firmware/target/hosted/sonynwz/button-target.h +++ b/firmware/target/hosted/sonynwz/button-target.h @@ -24,6 +24,40 @@ #include <stdbool.h> #include "config.h" +/* The NWZ-A860 is completely different, it has a touchscreen and some but not + * all keys of the other others */ +#if defined(SONY_NWZA860) + +/* Main unit's buttons */ +#define BUTTON_BACK 0x00000001 /* HOME */ +#define BUTTON_PLAY 0x00000002 +#define BUTTON_REW 0x00000004 +#define BUTTON_FF 0x00000008 +#define BUTTON_VOL_DOWN 0x00000010 +#define BUTTON_VOL_UP 0x00000020 +/* For compatibility */ +#define BUTTON_LEFT BUTTON_MIDLEFT +#define BUTTON_RIGHT BUTTON_MIDRIGHT +#define BUTTON_UP BUTTON_TOPMIDDLE +#define BUTTON_DOWN BUTTON_BOTTOMMIDDLE + +/* Touch Screen Area Buttons */ +#define BUTTON_TOPLEFT 0x00000040 +#define BUTTON_TOPMIDDLE 0x00000080 +#define BUTTON_TOPRIGHT 0x00000100 +#define BUTTON_MIDLEFT 0x00000200 +#define BUTTON_CENTER 0x00000400 +#define BUTTON_MIDRIGHT 0x00000800 +#define BUTTON_BOTTOMLEFT 0x00001000 +#define BUTTON_BOTTOMMIDDLE 0x00002000 +#define BUTTON_BOTTOMRIGHT 0x00004000 + +#define BUTTON_MAIN 0x7fff + +#define POWEROFF_BUTTON BUTTON_BACK + +#else /* SONY_NWZA860 */ + /* Main unit's buttons */ #define BUTTON_POWER 0x00000001 #define BUTTON_BACK 0x00000002 @@ -37,8 +71,11 @@ #define BUTTON_MAIN 0x000001ff +#define POWEROFF_BUTTON BUTTON_POWER + +#endif /* SONY_NWZA860 */ + /* Software power-off */ -#define POWEROFF_BUTTON BUTTON_POWER #define POWEROFF_COUNT 10 /* force driver to reload button state (useful after suspend) */ |