forked from len0rd/rockbox
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
This commit is contained in:
parent
b96ec65ac0
commit
e8f8d9e7e9
6 changed files with 71 additions and 21 deletions
|
|
@ -41,8 +41,8 @@ DIRS = .
|
||||||
#for all targets
|
#for all targets
|
||||||
SUBDIRS += searchengine databox
|
SUBDIRS += searchengine databox
|
||||||
|
|
||||||
#for any recorder and iRiver model
|
#for any recorder, iRiver or iPod model
|
||||||
ifneq (,$(strip $(foreach tgt,RECORDER IRIVER,$(findstring $(tgt),$(TARGET)))))
|
ifneq (,$(strip $(foreach tgt,RECORDER IRIVER IPOD_COLOR IPOD_VIDEO,$(findstring $(tgt),$(TARGET)))))
|
||||||
ifneq (-DIRIVER_IFP7XX,$(TARGET))
|
ifneq (-DIRIVER_IFP7XX,$(TARGET))
|
||||||
SUBDIRS += rockboy
|
SUBDIRS += rockboy
|
||||||
endif
|
endif
|
||||||
|
|
@ -148,6 +148,7 @@ clean:
|
||||||
$(BUILDDIR)/credits.raw $(OBJS) $(DEFS)
|
$(BUILDDIR)/credits.raw $(OBJS) $(DEFS)
|
||||||
@$(MAKE) -C lib clean OBJDIR=$(OBJDIR)/lib
|
@$(MAKE) -C lib clean OBJDIR=$(OBJDIR)/lib
|
||||||
@$(MAKE) -C rockboy clean OBJDIR=$(OBJDIR)/rockboy
|
@$(MAKE) -C rockboy clean OBJDIR=$(OBJDIR)/rockboy
|
||||||
|
@$(MAKE) -C mpeg2 clean OBJDIR=$(OBJDIR)/mpeg2
|
||||||
@$(MAKE) -C searchengine clean OBJDIR=$(OBJDIR)/searchengine
|
@$(MAKE) -C searchengine clean OBJDIR=$(OBJDIR)/searchengine
|
||||||
|
|
||||||
-include $(DEPFILE)
|
-include $(DEPFILE)
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,20 @@
|
||||||
#include "rockmacros.h"
|
#include "rockmacros.h"
|
||||||
#include "mem.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 */
|
/* load/save state function declarations */
|
||||||
static void do_slot_menu(bool is_load);
|
static void do_slot_menu(bool is_load);
|
||||||
static void do_opt_menu(void);
|
static void do_opt_menu(void);
|
||||||
|
|
@ -115,10 +129,10 @@ int getbutton(char *text)
|
||||||
button = rb->button_get(true);
|
button = rb->button_get(true);
|
||||||
button=button&0x00000FFF;
|
button=button&0x00000FFF;
|
||||||
switch(button) {
|
switch(button) {
|
||||||
case BUTTON_LEFT:
|
case MENU_BUTTON_LEFT:
|
||||||
case BUTTON_RIGHT:
|
case MENU_BUTTON_RIGHT:
|
||||||
case BUTTON_UP:
|
case MENU_BUTTON_UP:
|
||||||
case BUTTON_DOWN:
|
case MENU_BUTTON_DOWN:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return button;
|
return button;
|
||||||
|
|
@ -581,7 +595,7 @@ static int do_menu(char *title, char **items, size_t num_items, int sel) {
|
||||||
|
|
||||||
/* handle the button */
|
/* handle the button */
|
||||||
switch (btn) {
|
switch (btn) {
|
||||||
case BUTTON_DOWN:
|
case MENU_BUTTON_DOWN:
|
||||||
/* select next item in list */
|
/* select next item in list */
|
||||||
sel_item = curr_item + 1;
|
sel_item = curr_item + 1;
|
||||||
if (sel_item >= (int) num_items)
|
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);
|
select_item(title, curr_item, sel_item);
|
||||||
curr_item = sel_item;
|
curr_item = sel_item;
|
||||||
break;
|
break;
|
||||||
case BUTTON_UP:
|
case MENU_BUTTON_UP:
|
||||||
/* select prev item in list */
|
/* select prev item in list */
|
||||||
sel_item = curr_item - 1;
|
sel_item = curr_item - 1;
|
||||||
if (sel_item < 0)
|
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);
|
select_item(title, curr_item, sel_item);
|
||||||
curr_item = sel_item;
|
curr_item = sel_item;
|
||||||
break;
|
break;
|
||||||
case BUTTON_RIGHT:
|
case MENU_BUTTON_RIGHT:
|
||||||
/* select current item */
|
/* select current item */
|
||||||
ret = curr_item;
|
ret = curr_item;
|
||||||
done = true;
|
done = true;
|
||||||
break;
|
break;
|
||||||
case BUTTON_LEFT:
|
case MENU_BUTTON_LEFT:
|
||||||
case BUTTON_OFF:
|
case MENU_BUTTON_CANCEL:
|
||||||
/* cancel out of menu */
|
/* cancel out of menu */
|
||||||
ret = MENU_CANCEL;
|
ret = MENU_CANCEL;
|
||||||
done = true;
|
done = true;
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,13 @@ void setoptions (void) {
|
||||||
options.SELECT=BUTTON_PLAY;
|
options.SELECT=BUTTON_PLAY;
|
||||||
options.MENU=BUTTON_OFF;
|
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
|
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
||||||
options.A=BUTTON_PLAY;
|
options.A=BUTTON_PLAY;
|
||||||
options.B=BUTTON_EQ;
|
options.B=BUTTON_EQ;
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,11 @@ void loadstate(int fd);
|
||||||
void savestate(int fd);
|
void savestate(int fd);
|
||||||
#define USER_MENU_QUIT -2
|
#define USER_MENU_QUIT -2
|
||||||
|
|
||||||
|
/* Disable ICODE for the ARMs */
|
||||||
|
#ifdef CPU_ARM
|
||||||
|
#undef ICODE_ATTR
|
||||||
|
#define ICODE_ATTR
|
||||||
|
#endif
|
||||||
|
|
||||||
/* libc functions */
|
/* libc functions */
|
||||||
#define isdigit(c) ((c) >= '0' && (c) <= '9')
|
#define isdigit(c) ((c) >= '0' && (c) <= '9')
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,11 @@ struct snd
|
||||||
|
|
||||||
extern struct snd 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;
|
byte sound_read(byte r) ICODE_ATTR;
|
||||||
void sound_write(byte r, byte b)ICODE_ATTR;
|
void sound_write(byte r, byte b)ICODE_ATTR;
|
||||||
void sound_dirty(void)ICODE_ATTR;
|
void sound_dirty(void)ICODE_ATTR;
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,22 @@
|
||||||
#include "hw.h"
|
#include "hw.h"
|
||||||
#include "config.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[] =
|
rcvar_t joy_exports[] =
|
||||||
{
|
{
|
||||||
RCV_END
|
RCV_END
|
||||||
|
|
@ -73,10 +89,10 @@ void ev_poll(void)
|
||||||
#endif
|
#endif
|
||||||
if(released) {
|
if(released) {
|
||||||
ev.type = EV_RELEASE;
|
ev.type = EV_RELEASE;
|
||||||
if(released & BUTTON_LEFT) { ev.code=PAD_LEFT; ev_postevent(&ev); }
|
if(released & ROCKBOY_PAD_LEFT) { ev.code=PAD_LEFT; ev_postevent(&ev); }
|
||||||
if(released & BUTTON_RIGHT) {ev.code=PAD_RIGHT; ev_postevent(&ev);}
|
if(released & ROCKBOY_PAD_RIGHT) {ev.code=PAD_RIGHT; ev_postevent(&ev);}
|
||||||
if(released & BUTTON_DOWN) { ev.code=PAD_DOWN; ev_postevent(&ev); }
|
if(released & ROCKBOY_PAD_DOWN) { ev.code=PAD_DOWN; ev_postevent(&ev); }
|
||||||
if(released & BUTTON_UP) { ev.code=PAD_UP; 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.A) { ev.code=PAD_A; ev_postevent(&ev); }
|
||||||
if(released & options.B) { ev.code=PAD_B; ev_postevent(&ev); }
|
if(released & options.B) { ev.code=PAD_B; ev_postevent(&ev); }
|
||||||
if(released & options.START) {
|
if(released & options.START) {
|
||||||
|
|
@ -90,10 +106,10 @@ void ev_poll(void)
|
||||||
}
|
}
|
||||||
if(pressed) { /* button press */
|
if(pressed) { /* button press */
|
||||||
ev.type = EV_PRESS;
|
ev.type = EV_PRESS;
|
||||||
if(pressed & BUTTON_LEFT) { ev.code=PAD_LEFT; ev_postevent(&ev); }
|
if(pressed & ROCKBOY_PAD_LEFT) { ev.code=PAD_LEFT; ev_postevent(&ev); }
|
||||||
if(pressed & BUTTON_RIGHT) { ev.code=PAD_RIGHT; ev_postevent(&ev);}
|
if(pressed & ROCKBOY_PAD_RIGHT) { ev.code=PAD_RIGHT; ev_postevent(&ev);}
|
||||||
if(pressed & BUTTON_DOWN) { ev.code=PAD_DOWN; ev_postevent(&ev); }
|
if(pressed & ROCKBOY_PAD_DOWN) { ev.code=PAD_DOWN; ev_postevent(&ev); }
|
||||||
if(pressed & BUTTON_UP) { ev.code=PAD_UP; 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.A) { ev.code=PAD_A; ev_postevent(&ev); }
|
||||||
if(pressed & options.B) { ev.code=PAD_B; ev_postevent(&ev); }
|
if(pressed & options.B) { ev.code=PAD_B; ev_postevent(&ev); }
|
||||||
if(pressed & options.START) {
|
if(pressed & options.START) {
|
||||||
|
|
@ -105,7 +121,9 @@ void ev_poll(void)
|
||||||
ev_postevent(&ev);
|
ev_postevent(&ev);
|
||||||
}
|
}
|
||||||
if(pressed & options.MENU) {
|
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)
|
if (do_user_menu() == USER_MENU_QUIT)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
|
@ -264,7 +282,7 @@ void vid_update(int scanline)
|
||||||
cnt++;
|
cnt++;
|
||||||
}
|
}
|
||||||
rb->lcd_update_rect(0, scanline & ~3, LCD_WIDTH, 4);
|
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
|
// handled in lcd.c now
|
||||||
#endif /* LCD_HEIGHT */
|
#endif /* LCD_HEIGHT */
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue