summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorDave Chapman <dave@dchapman.com>2006-01-20 20:59:07 +0000
committerDave Chapman <dave@dchapman.com>2006-01-20 20:59:07 +0000
commite8f8d9e7e93bd211a754b0722977f5ac72a4ba30 (patch)
treeb11cf1c83a487e98d7413f10265c745a5aa463f4 /apps
parentb96ec65ac016f3f308049a7287b1beefd0d1b67e (diff)
downloadrockbox-e8f8d9e7e93bd211a754b0722977f5ac72a4ba30.zip
rockbox-e8f8d9e7e93bd211a754b0722977f5ac72a4ba30.tar.gz
rockbox-e8f8d9e7e93bd211a754b0722977f5ac72a4ba30.tar.bz2
rockbox-e8f8d9e7e93bd211a754b0722977f5ac72a4ba30.tar.xz
Initial support for iPod color and video. The Nano has a 176x132 LCD, which is the first colour LCD smaller than the gameboy's 160x144 display - so it needs work to skip scanlines. Button handling still needs more work - only up/down/left/right/start are currently mapped. Code is removed from IRAM due to 'relocation truncated to fit: R_ARM_PC24' errors.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8400 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/plugins/Makefile5
-rw-r--r--apps/plugins/rockboy/menu.c32
-rw-r--r--apps/plugins/rockboy/rockboy.c7
-rw-r--r--apps/plugins/rockboy/rockmacros.h5
-rw-r--r--apps/plugins/rockboy/sound.h5
-rw-r--r--apps/plugins/rockboy/sys_rockbox.c38
6 files changed, 71 insertions, 21 deletions
diff --git a/apps/plugins/Makefile b/apps/plugins/Makefile
index 8464e93..bb2f7bd 100644
--- a/apps/plugins/Makefile
+++ b/apps/plugins/Makefile
@@ -41,8 +41,8 @@ DIRS = .
#for all targets
SUBDIRS += searchengine databox
-#for any recorder and iRiver model
-ifneq (,$(strip $(foreach tgt,RECORDER IRIVER,$(findstring $(tgt),$(TARGET)))))
+#for any recorder, iRiver or iPod model
+ifneq (,$(strip $(foreach tgt,RECORDER IRIVER IPOD_COLOR IPOD_VIDEO,$(findstring $(tgt),$(TARGET)))))
ifneq (-DIRIVER_IFP7XX,$(TARGET))
SUBDIRS += rockboy
endif
@@ -148,6 +148,7 @@ clean:
$(BUILDDIR)/credits.raw $(OBJS) $(DEFS)
@$(MAKE) -C lib clean OBJDIR=$(OBJDIR)/lib
@$(MAKE) -C rockboy clean OBJDIR=$(OBJDIR)/rockboy
+ @$(MAKE) -C mpeg2 clean OBJDIR=$(OBJDIR)/mpeg2
@$(MAKE) -C searchengine clean OBJDIR=$(OBJDIR)/searchengine
-include $(DEPFILE)
diff --git a/apps/plugins/rockboy/menu.c b/apps/plugins/rockboy/menu.c
index a22aef4..84bfeaa 100644
--- a/apps/plugins/rockboy/menu.c
+++ b/apps/plugins/rockboy/menu.c
@@ -10,6 +10,20 @@
#include "rockmacros.h"
#include "mem.h"
+#if (CONFIG_KEYPAD == IPOD_4G_PAD)
+#define MENU_BUTTON_UP BUTTON_SCROLL_BACK
+#define MENU_BUTTON_DOWN BUTTON_SCROLL_FWD
+#define MENU_BUTTON_LEFT BUTTON_LEFT
+#define MENU_BUTTON_RIGHT BUTTON_RIGHT
+#define MENU_BUTTON_CANCEL BUTTON_MENU
+#else
+#define MENU_BUTTON_UP BUTTON_UP
+#define MENU_BUTTON_DOWN BUTTON_DOWN
+#define MENU_BUTTON_LEFT BUTTON_LEFT
+#define MENU_BUTTON_RIGHT BUTTON_RIGHT
+#define MENU_BUTTON_CANCEL BUTTON_OFF
+#endif
+
/* load/save state function declarations */
static void do_slot_menu(bool is_load);
static void do_opt_menu(void);
@@ -115,10 +129,10 @@ int getbutton(char *text)
button = rb->button_get(true);
button=button&0x00000FFF;
switch(button) {
- case BUTTON_LEFT:
- case BUTTON_RIGHT:
- case BUTTON_UP:
- case BUTTON_DOWN:
+ case MENU_BUTTON_LEFT:
+ case MENU_BUTTON_RIGHT:
+ case MENU_BUTTON_UP:
+ case MENU_BUTTON_DOWN:
break;
default:
return button;
@@ -581,7 +595,7 @@ static int do_menu(char *title, char **items, size_t num_items, int sel) {
/* handle the button */
switch (btn) {
- case BUTTON_DOWN:
+ case MENU_BUTTON_DOWN:
/* select next item in list */
sel_item = curr_item + 1;
if (sel_item >= (int) num_items)
@@ -589,7 +603,7 @@ static int do_menu(char *title, char **items, size_t num_items, int sel) {
select_item(title, curr_item, sel_item);
curr_item = sel_item;
break;
- case BUTTON_UP:
+ case MENU_BUTTON_UP:
/* select prev item in list */
sel_item = curr_item - 1;
if (sel_item < 0)
@@ -597,13 +611,13 @@ static int do_menu(char *title, char **items, size_t num_items, int sel) {
select_item(title, curr_item, sel_item);
curr_item = sel_item;
break;
- case BUTTON_RIGHT:
+ case MENU_BUTTON_RIGHT:
/* select current item */
ret = curr_item;
done = true;
break;
- case BUTTON_LEFT:
- case BUTTON_OFF:
+ case MENU_BUTTON_LEFT:
+ case MENU_BUTTON_CANCEL:
/* cancel out of menu */
ret = MENU_CANCEL;
done = true;
diff --git a/apps/plugins/rockboy/rockboy.c b/apps/plugins/rockboy/rockboy.c
index f6dea0e..da10177 100644
--- a/apps/plugins/rockboy/rockboy.c
+++ b/apps/plugins/rockboy/rockboy.c
@@ -113,6 +113,13 @@ void setoptions (void) {
options.SELECT=BUTTON_PLAY;
options.MENU=BUTTON_OFF;
+#elif CONFIG_KEYPAD == IPOD_4G_PAD
+ options.A=BUTTON_NONE;
+ options.B=BUTTON_NONE;
+ options.START=BUTTON_SELECT;
+ options.SELECT=BUTTON_NONE;
+ options.MENU=(BUTTON_SELECT | BUTTON_REPEAT);
+
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
options.A=BUTTON_PLAY;
options.B=BUTTON_EQ;
diff --git a/apps/plugins/rockboy/rockmacros.h b/apps/plugins/rockboy/rockmacros.h
index 2d33b96..cefa0ad 100644
--- a/apps/plugins/rockboy/rockmacros.h
+++ b/apps/plugins/rockboy/rockmacros.h
@@ -47,6 +47,11 @@ void loadstate(int fd);
void savestate(int fd);
#define USER_MENU_QUIT -2
+/* Disable ICODE for the ARMs */
+#ifdef CPU_ARM
+#undef ICODE_ATTR
+#define ICODE_ATTR
+#endif
/* libc functions */
#define isdigit(c) ((c) >= '0' && (c) <= '9')
diff --git a/apps/plugins/rockboy/sound.h b/apps/plugins/rockboy/sound.h
index 18fb371..682e6c1 100644
--- a/apps/plugins/rockboy/sound.h
+++ b/apps/plugins/rockboy/sound.h
@@ -27,6 +27,11 @@ struct snd
extern struct snd snd;
+#if defined(ICODE_ATTR) && defined(CPU_ARM)
+#undef ICODE_ATTR
+#define ICODE_ATTR
+#endif
+
byte sound_read(byte r) ICODE_ATTR;
void sound_write(byte r, byte b)ICODE_ATTR;
void sound_dirty(void)ICODE_ATTR;
diff --git a/apps/plugins/rockboy/sys_rockbox.c b/apps/plugins/rockboy/sys_rockbox.c
index 578a864..0777273 100644
--- a/apps/plugins/rockboy/sys_rockbox.c
+++ b/apps/plugins/rockboy/sys_rockbox.c
@@ -25,6 +25,22 @@
#include "hw.h"
#include "config.h"
+#if (CONFIG_KEYPAD == IPOD_4G_PAD)
+
+#define ROCKBOY_PAD_LEFT BUTTON_LEFT
+#define ROCKBOY_PAD_RIGHT BUTTON_RIGHT
+#define ROCKBOY_PAD_UP BUTTON_MENU
+#define ROCKBOY_PAD_DOWN BUTTON_PLAY
+
+#else
+
+#define ROCKBOY_PAD_LEFT BUTTON_LEFT
+#define ROCKBOY_PAD_RIGHT BUTTON_RIGHT
+#define ROCKBOY_PAD_UP BUTTON_UP
+#define ROCKBOY_PAD_DOWN BUTTON_DOWN
+
+#endif
+
rcvar_t joy_exports[] =
{
RCV_END
@@ -73,10 +89,10 @@ void ev_poll(void)
#endif
if(released) {
ev.type = EV_RELEASE;
- if(released & BUTTON_LEFT) { ev.code=PAD_LEFT; ev_postevent(&ev); }
- if(released & BUTTON_RIGHT) {ev.code=PAD_RIGHT; ev_postevent(&ev);}
- if(released & BUTTON_DOWN) { ev.code=PAD_DOWN; ev_postevent(&ev); }
- if(released & BUTTON_UP) { ev.code=PAD_UP; ev_postevent(&ev); }
+ if(released & ROCKBOY_PAD_LEFT) { ev.code=PAD_LEFT; ev_postevent(&ev); }
+ if(released & ROCKBOY_PAD_RIGHT) {ev.code=PAD_RIGHT; ev_postevent(&ev);}
+ if(released & ROCKBOY_PAD_DOWN) { ev.code=PAD_DOWN; ev_postevent(&ev); }
+ if(released & ROCKBOY_PAD_UP) { ev.code=PAD_UP; ev_postevent(&ev); }
if(released & options.A) { ev.code=PAD_A; ev_postevent(&ev); }
if(released & options.B) { ev.code=PAD_B; ev_postevent(&ev); }
if(released & options.START) {
@@ -90,10 +106,10 @@ void ev_poll(void)
}
if(pressed) { /* button press */
ev.type = EV_PRESS;
- if(pressed & BUTTON_LEFT) { ev.code=PAD_LEFT; ev_postevent(&ev); }
- if(pressed & BUTTON_RIGHT) { ev.code=PAD_RIGHT; ev_postevent(&ev);}
- if(pressed & BUTTON_DOWN) { ev.code=PAD_DOWN; ev_postevent(&ev); }
- if(pressed & BUTTON_UP) { ev.code=PAD_UP; ev_postevent(&ev); }
+ if(pressed & ROCKBOY_PAD_LEFT) { ev.code=PAD_LEFT; ev_postevent(&ev); }
+ if(pressed & ROCKBOY_PAD_RIGHT) { ev.code=PAD_RIGHT; ev_postevent(&ev);}
+ if(pressed & ROCKBOY_PAD_DOWN) { ev.code=PAD_DOWN; ev_postevent(&ev); }
+ if(pressed & ROCKBOY_PAD_UP) { ev.code=PAD_UP; ev_postevent(&ev); }
if(pressed & options.A) { ev.code=PAD_A; ev_postevent(&ev); }
if(pressed & options.B) { ev.code=PAD_B; ev_postevent(&ev); }
if(pressed & options.START) {
@@ -105,7 +121,9 @@ void ev_poll(void)
ev_postevent(&ev);
}
if(pressed & options.MENU) {
-#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
+#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
+ (CONFIG_KEYPAD == IRIVER_H300_PAD) || \
+ (CONFIG_KEYPAD == IPOD_4G_PAD)
if (do_user_menu() == USER_MENU_QUIT)
#endif
{
@@ -264,7 +282,7 @@ void vid_update(int scanline)
cnt++;
}
rb->lcd_update_rect(0, scanline & ~3, LCD_WIDTH, 4);
-#elif (LCD_HEIGHT >= 144) && defined(HAVE_LCD_COLOR) /* iriver H3x0, colour iPod */
+#elif defined(HAVE_LCD_COLOR) /* iriver H3x0, colour iPod */
// handled in lcd.c now
#endif /* LCD_HEIGHT */
}