summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2011-01-20 17:11:23 +0000
committerMichael Sevakis <jethead71@rockbox.org>2011-01-20 17:11:23 +0000
commit2da0f9bcfdf056255b298c0e61f0f4f0f950f869 (patch)
tree4bb8e4de0f500f73b6e81ce347c0b36ab763e4bf
parent5f52f6ee01fdd060fab9b72736daf06b3dbda212 (diff)
downloadrockbox-2da0f9bcfdf056255b298c0e61f0f4f0f950f869.tar.gz
rockbox-2da0f9bcfdf056255b298c0e61f0f4f0f950f869.zip
Fuze v2: Do button reading more efficiently by mapping button codes directly to the GPIO pin states where possible (all but 'home' and hold). This makes plugins incompatible; up the min version and sort things.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29097 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugin.c8
-rw-r--r--apps/plugin.h20
-rw-r--r--firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c24
-rw-r--r--firmware/target/arm/as3525/sansa-fuzev2/button-target.h9
4 files changed, 27 insertions, 34 deletions
diff --git a/apps/plugin.c b/apps/plugin.c
index 20ff190e37..690aee9bf3 100644
--- a/apps/plugin.c
+++ b/apps/plugin.c
@@ -382,6 +382,7 @@ static const struct plugin_api rockbox_api = {
file_exists,
strip_extension,
crc_32,
+ filetype_get_attr,
/* dir */
(opendir_func)PREFIX(opendir),
@@ -392,6 +393,10 @@ static const struct plugin_api rockbox_api = {
dir_exists,
dir_get_info,
+ /* browsing */
+ browse_context_init,
+ rockbox_browse,
+
/* kernel/ system */
#if defined(CPU_ARM) && CONFIG_PLATFORM & PLATFORM_NATIVE
__div0,
@@ -772,9 +777,6 @@ static const struct plugin_api rockbox_api = {
/* new stuff at the end, sort into place next time
the API gets incompatible */
- filetype_get_attr,
- browse_context_init,
- rockbox_browse,
};
int plugin_load(const char* plugin, const void* parameter)
diff --git a/apps/plugin.h b/apps/plugin.h
index cd53ac6574..4b11ac31e9 100644
--- a/apps/plugin.h
+++ b/apps/plugin.h
@@ -149,12 +149,12 @@ void* plugin_get_buffer(size_t *buffer_size);
#define PLUGIN_MAGIC 0x526F634B /* RocK */
/* increase this every time the api struct changes */
-#define PLUGIN_API_VERSION 197
+#define PLUGIN_API_VERSION 198
/* update this to latest version if a change to the api struct breaks
backwards compatibility (and please take the opportunity to sort in any
new function which are "waiting" at the end of the function table) */
-#define PLUGIN_MIN_API_VERSION 196
+#define PLUGIN_MIN_API_VERSION 198
/* plugin return codes */
/* internal returns start at 0x100 to make exit(1..255) work */
@@ -448,6 +448,9 @@ struct plugin_api {
char* (*strip_extension)(char* buffer, int buffer_size, const char *filename);
unsigned (*crc_32)(const void *src, unsigned len, unsigned crc32);
+ int (*filetype_get_attr)(const char* file);
+
+
/* dir */
DIR* (*opendir)(const char* name);
@@ -458,6 +461,13 @@ struct plugin_api {
bool (*dir_exists)(const char *path);
struct dirinfo (*dir_get_info)(DIR* parent, struct dirent *entry);
+ /* browsing */
+ void (*browse_context_init)(struct browse_context *browse,
+ int dirfilter, unsigned flags,
+ char *title, enum themable_icons icon,
+ const char *root, const char *selected);
+ int (*rockbox_browse)(struct browse_context *browse);
+
/* kernel/ system */
#if defined(CPU_ARM) && CONFIG_PLATFORM & PLATFORM_NATIVE
void (*__div0)(void);
@@ -901,12 +911,6 @@ struct plugin_api {
/* new stuff at the end, sort into place next time
the API gets incompatible */
- int (*filetype_get_attr)(const char* file);
- void (*browse_context_init)(struct browse_context *browse,
- int dirfilter, unsigned flags,
- char *title, enum themable_icons icon,
- const char *root, const char *selected);
- int (*rockbox_browse)(struct browse_context *browse);
};
/* plugin header */
diff --git a/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c b/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c
index 4907de11f3..30f2c0df16 100644
--- a/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c
+++ b/firmware/target/arm/as3525/sansa-fuzev2/button-fuzev2.c
@@ -213,9 +213,9 @@ void button_gpioa_isr(void)
*/
int button_read_device(void)
{
- int btn = 0;
static long power_counter = 0;
bool hold = false;
+ int btn;
unsigned gpiod6;
/* if we don't wait for the fifo to empty, we'll see screen corruption
@@ -240,28 +240,16 @@ int button_read_device(void)
GPIOB_PIN(0) = 0;
udelay(2);
- if (GPIOC_PIN(1) & 1<<1)
- btn |= BUTTON_DOWN;
- if (GPIOC_PIN(2) & 1<<2)
- btn |= BUTTON_UP;
- if (GPIOC_PIN(3) & 1<<3)
- btn |= BUTTON_LEFT;
- if (GPIOC_PIN(4) & 1<<4)
- btn |= BUTTON_SELECT;
- if (GPIOC_PIN(5) & 1<<5)
- btn |= BUTTON_RIGHT;
- if (GPIOB_PIN(1) & 1<<1)
- btn |= BUTTON_HOME;
+ btn = GPIOC_PIN_MASK(0x3e) | (GPIOB_PIN(1) >> 1);
+
if (amsv2_variant == 1)
btn ^= BUTTON_HOME;
- if (gpiod6 & 1<<6)
+ if (gpiod6)
{ /* power/hold is on the same pin. we know it's hold if the bit isn't
* set now anymore */
- if (GPIOD_PIN(6) & 1<<6)
- btn |= BUTTON_POWER;
- else
- hold = true;
+ btn |= GPIOD_PIN(6);
+ hold = !(btn & BUTTON_POWER);
}
if(gpiob_pin0_dir)
diff --git a/firmware/target/arm/as3525/sansa-fuzev2/button-target.h b/firmware/target/arm/as3525/sansa-fuzev2/button-target.h
index c64c68f951..596ac01262 100644
--- a/firmware/target/arm/as3525/sansa-fuzev2/button-target.h
+++ b/firmware/target/arm/as3525/sansa-fuzev2/button-target.h
@@ -32,15 +32,14 @@ bool button_hold(void);
int button_read_device(void);
/* Sandisk Sansa Fuze button codes */
-/* Main unit's buttons */
+/* Main unit's buttons - mapped for optimal reading */
#define BUTTON_HOME 0x00000001
-
#define BUTTON_DOWN 0x00000002
-#define BUTTON_RIGHT 0x00000004
-
+#define BUTTON_UP 0x00000004
#define BUTTON_LEFT 0x00000008
#define BUTTON_SELECT 0x00000010
-#define BUTTON_UP 0x00000020
+#define BUTTON_RIGHT 0x00000020
+
#define BUTTON_POWER 0x00000040
#define BUTTON_SCROLL_BACK 0x00000080