More M:Robe work including a fix to lcd-as-memframe for larger screens thanks to Michael Sevakis. Also fixes simulator builds.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15254 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
2d91cf3ea3
commit
fdbc01c6e2
11 changed files with 148 additions and 28 deletions
|
@ -35,7 +35,7 @@
|
|||
*/
|
||||
|
||||
|
||||
#define BUTTON_UP BUTTON_RC_PLAY
|
||||
#define BUTTON_UP BUTTON_RC_PLAY
|
||||
#define BUTTON_DOWN BUTTON_RC_DOWN
|
||||
//#define BUTTON_LEFT BUTTON_RC_REW
|
||||
//#define BUTTON_RIGHT BUTTON_RC_FF
|
||||
|
|
|
@ -134,16 +134,6 @@ extern const struct opt_items trig_durations[TRIG_DURATION_COUNT];
|
|||
#define MAX_CONTRAST_SETTING 63
|
||||
#endif
|
||||
|
||||
/* As it was */
|
||||
#ifdef HAVE_REMOTE_LCD
|
||||
#ifndef DEFAULT_REMOTE_CONTRAST_SETTING
|
||||
/* May be defined in config file if driver code needs the value */
|
||||
#define DEFAULT_REMOTE_CONTRAST_SETTING 42
|
||||
#endif
|
||||
#define MIN_REMOTE_CONTRAST_SETTING MIN_CONTRAST_SETTING
|
||||
#define MAX_REMOTE_CONTRAST_SETTING MAX_CONTRAST_SETTING
|
||||
#endif
|
||||
|
||||
#endif /* !TARGET_TREE */
|
||||
|
||||
#if !defined(HAVE_LCD_COLOR)
|
||||
|
|
|
@ -127,10 +127,9 @@ void mrdebug(void)
|
|||
else if (button==BUTTON_RC_REW)
|
||||
address-=0x1000;
|
||||
{
|
||||
extern int irq_count;
|
||||
short x,y,z1,z2;
|
||||
tsc2100_read_values(&x, &y, &z1, &z2);
|
||||
printf("%d, x: %04x y: %04x z1: %04x z2: %04x", irq_count,x, y, z1, z2);
|
||||
printf("x: %04x y: %04x z1: %04x z2: %04x", x, y, z1, z2);
|
||||
printf("tsadc: %4x", tsc2100_readreg(TSADC_PAGE, TSADC_ADDRESS)&0xffff);
|
||||
printf("current tick: %04x", current_tick);
|
||||
printf("Address: 0x%08x Data: 0x%08x", address, *address);
|
||||
|
|
|
@ -625,12 +625,16 @@ target/arm/imx31/gigabeat-s/pcm-imx31.c
|
|||
|
||||
#ifdef MROBE_500
|
||||
#ifndef SIMULATOR
|
||||
target/arm/lcd-as-memframe.S
|
||||
target/arm/tms320dm320/mrobe-500/adc-mr500.c
|
||||
target/arm/tms320dm320/mrobe-500/ata-mr500.c
|
||||
target/arm/tms320dm320/mrobe-500/backlight-mr500.c
|
||||
target/arm/tms320dm320/mrobe-500/button-mr500.c
|
||||
target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c
|
||||
target/arm/tms320dm320/mrobe-500/lcd-mr500.c
|
||||
#if defined(HAVE_REMOTE_LCD)
|
||||
target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c
|
||||
#endif
|
||||
target/arm/tms320dm320/mrobe-500/pcm-mr500.c
|
||||
target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c
|
||||
target/arm/tms320dm320/mrobe-500/power-mr500.c
|
||||
|
|
|
@ -22,7 +22,9 @@
|
|||
*/
|
||||
#define TARGET_TREE /* this target is using the target tree system */
|
||||
|
||||
#if CONFIG_CPU == DM320
|
||||
#define CPU_ARM
|
||||
#endif
|
||||
|
||||
#define CONFIG_SDRAM_START 0x00900000
|
||||
|
||||
|
@ -50,14 +52,34 @@
|
|||
#define HAVE_VOLUME_IN_LIST
|
||||
|
||||
/* LCD dimensions */
|
||||
#define CONFIG_LCD LCD_MROBE500
|
||||
#define SCREEN_ROTATE
|
||||
#if defined(SCREEN_ROTATE)
|
||||
#define LCD_WIDTH 480
|
||||
#define LCD_HEIGHT 640
|
||||
#else
|
||||
#define LCD_WIDTH 640
|
||||
#define LCD_HEIGHT 480
|
||||
#endif
|
||||
|
||||
#define LCD_DEPTH 16 /* 65k colours */
|
||||
#define LCD_PIXELFORMAT RGB565 /* rgb565 */
|
||||
|
||||
/* Define this if your LCD can be enabled/disabled */
|
||||
//#define HAVE_LCD_ENABLE
|
||||
|
||||
/* remote LCD */
|
||||
//#define HAVE_REMOTE_LCD
|
||||
#define LCD_REMOTE_WIDTH 79
|
||||
#define LCD_REMOTE_HEIGHT 16
|
||||
#define LCD_REMOTE_DEPTH 1
|
||||
|
||||
#define LCD_REMOTE_PIXELFORMAT VERTICAL_PACKING
|
||||
|
||||
#define MIN_REMOTE_CONTRAST_SETTING 0
|
||||
#define MAX_REMOTE_CONTRAST_SETTING 15
|
||||
#define DEFAULT_REMOTE_CONTRAST_SETTING 7
|
||||
|
||||
#define CONFIG_KEYPAD MROBE500_PAD
|
||||
|
||||
/* Define this if you do software codec */
|
||||
|
@ -131,8 +153,6 @@
|
|||
/* Virtual LED (icon) */
|
||||
#define CONFIG_LED LED_VIRTUAL
|
||||
|
||||
#define CONFIG_LCD LCD_MROBE500
|
||||
|
||||
/* define this if the backlight can be set to a brightness */
|
||||
#define __BACKLIGHT_INIT
|
||||
|
||||
|
|
|
@ -103,7 +103,6 @@ lcd_copy_buffer_rect: @
|
|||
.ltorg @ dump constant pool
|
||||
.size lcd_copy_buffer_rect, .-lcd_copy_buffer_rect
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* void lcd_write_yuv_420_lines(fb_data *dst,
|
||||
* unsigned char const * const src[3],
|
||||
|
@ -188,7 +187,11 @@ lcd_write_yuv420_lines:
|
|||
@
|
||||
orr r1, r1, r7, lsl #5 @ r4 |= (g << 5)
|
||||
orr r1, r1, r11, lsl #11 @ r4 = b | (r << 11)
|
||||
#if LCD_WIDTH < 256
|
||||
strh r1, [r0], #LCD_WIDTH @ store pixel
|
||||
#else
|
||||
strh r1, [r0] @
|
||||
#endif
|
||||
@
|
||||
sub r7, r12, #16 @ r7 = Y = (Y' - 16)*74
|
||||
add r12, r7, r7, asl #2 @
|
||||
|
@ -217,7 +220,12 @@ lcd_write_yuv420_lines:
|
|||
@
|
||||
orr r1, r1, r11, lsl #11 @ r1 = b | (r << 11)
|
||||
orr r1, r1, r7, lsl #5 @ r1 |= (g << 5)
|
||||
#if LCD_WIDTH < 256
|
||||
strh r1, [r0, #-LCD_WIDTH-2] @ store pixel
|
||||
#else
|
||||
strh r1, [r0, #-2] @
|
||||
add r0, r0, #LCD_WIDTH @
|
||||
#endif
|
||||
@
|
||||
sub r7, r12, #16 @ r7 = Y = (Y' - 16)*74
|
||||
add r12, r7, r7, asl #2 @
|
||||
|
@ -246,7 +254,11 @@ lcd_write_yuv420_lines:
|
|||
@
|
||||
orr r1, r1, r7, lsl #5 @ r1 = b | (g << 5)
|
||||
orr r1, r1, r11, lsl #11 @ r1 |= (r << 11)
|
||||
#if LCD_WIDTH < 256
|
||||
strh r1, [r0, #LCD_WIDTH]! @ store pixel
|
||||
#else
|
||||
strh r1, [r0] @
|
||||
#endif
|
||||
@
|
||||
sub r7, r12, #16 @ r7 = Y = (Y' - 16)*74
|
||||
add r12, r7, r7, asl #2 @
|
||||
|
@ -274,7 +286,11 @@ lcd_write_yuv420_lines:
|
|||
orr r12, r1, r11, lsl #11 @ r12 = b | (r << 11)
|
||||
orr r12, r12, r7, lsl #5 @ r12 |= (g << 5)
|
||||
strh r12, [r0, #-2] @ store pixel
|
||||
#if LCD_WIDTH < 256
|
||||
add r0, r0, #2*LCD_WIDTH @
|
||||
#else
|
||||
add r0, r0, #LCD_WIDTH @
|
||||
#endif
|
||||
@
|
||||
subs r2, r2, #2 @ subtract block from width
|
||||
bgt 10b @ loop line @
|
||||
|
@ -405,7 +421,11 @@ lcd_write_yuv420_lines_odither:
|
|||
orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) |
|
||||
orr r1, r11, r1, lsr #10 @ (b >> 10)
|
||||
@
|
||||
#if LCD_WIDTH < 256
|
||||
strh r1, [r0], #LCD_WIDTH @ store pixel
|
||||
#else
|
||||
strh r1, [r0] @
|
||||
#endif
|
||||
@
|
||||
sub r7, r12, #16 @ r7 = Y = (Y' - 16)*149
|
||||
add r12, r7, r7, asl #2 @
|
||||
|
@ -451,7 +471,12 @@ lcd_write_yuv420_lines_odither:
|
|||
orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) |
|
||||
orr r1, r11, r1, lsr #10 @ (b >> 10)
|
||||
@
|
||||
#if LCD_WIDTH < 256
|
||||
strh r1, [r0, #-LCD_WIDTH-2] @ store pixel
|
||||
#else
|
||||
strh r1, [r0, #-2] @ store pixel
|
||||
add r0, r0, #LCD_WIDTH @
|
||||
#endif
|
||||
@
|
||||
sub r7, r12, #16 @ r7 = Y = (Y' - 16)*149
|
||||
add r12, r7, r7, asl #2 @
|
||||
|
@ -499,7 +524,11 @@ lcd_write_yuv420_lines_odither:
|
|||
orr r11, r11, r7, lsr #4 @ ((g & 0x7e00) >> 4) |
|
||||
orr r1, r11, r1, lsr #10 @ (b >> 10)
|
||||
@
|
||||
#if LCD_WIDTH < 256
|
||||
strh r1, [r0, #LCD_WIDTH]! @ store pixel
|
||||
#else
|
||||
strh r1, [r0] @
|
||||
#endif
|
||||
@
|
||||
sub r7, r12, #16 @ r7 = Y = (Y' - 16)*149
|
||||
add r12, r7, r7, asl #2 @
|
||||
|
@ -544,7 +573,11 @@ lcd_write_yuv420_lines_odither:
|
|||
orr r1, r11, r1, lsr #10 @ (b >> 10)
|
||||
@
|
||||
strh r1, [r0, #-2] @ store pixel
|
||||
#if LCD_WIDTH < 256
|
||||
add r0, r0, #2*LCD_WIDTH @
|
||||
#else
|
||||
add r0, r0, #LCD_WIDTH @
|
||||
#endif
|
||||
@
|
||||
subs r2, r2, #2 @ subtract block from width
|
||||
bgt 10b @ loop line @
|
||||
|
|
|
@ -28,6 +28,12 @@
|
|||
#include "memory.h"
|
||||
#include "system-target.h"
|
||||
|
||||
/* Copies a rectangle from one framebuffer to another. Can be used in
|
||||
single transfer mode with width = num pixels, and height = 1 which
|
||||
allows a full-width rectangle to be copied more efficiently. */
|
||||
extern void lcd_copy_buffer_rect(fb_data *dst, const fb_data *src,
|
||||
int width, int height);
|
||||
|
||||
static volatile bool lcd_on = true;
|
||||
volatile bool lcd_poweroff = false;
|
||||
/*
|
||||
|
@ -76,6 +82,7 @@ void lcd_init_device(void)
|
|||
void lcd_update_rect(int x, int y, int width, int height)
|
||||
{
|
||||
fb_data *dst, *src;
|
||||
int yc;
|
||||
|
||||
if (!lcd_on)
|
||||
return;
|
||||
|
@ -100,19 +107,13 @@ void lcd_update_rect(int x, int y, int width, int height)
|
|||
/* Copy part of the Rockbox framebuffer to the second framebuffer */
|
||||
if (width < LCD_WIDTH)
|
||||
{
|
||||
int y;
|
||||
/* Not full width - do line-by-line */
|
||||
for(y=0;y<height;y++)
|
||||
{
|
||||
memcpy(dst, src, width*sizeof(fb_data));
|
||||
dst+=LCD_WIDTH;
|
||||
src+=LCD_WIDTH;
|
||||
}
|
||||
lcd_copy_buffer_rect(dst, src, width, height);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Full width - copy as one line */
|
||||
memcpy(dst, src, LCD_WIDTH*height*sizeof(fb_data));
|
||||
lcd_copy_buffer_rect(dst, src, LCD_WIDTH*height, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -127,9 +128,25 @@ void lcd_update(void)
|
|||
{
|
||||
if (!lcd_on)
|
||||
return;
|
||||
#if defined(SCREEN_ROTATE)
|
||||
lcd_copy_buffer_rect((fb_data *)FRAME, &lcd_framebuffer[0][0],
|
||||
LCD_WIDTH*LCD_HEIGHT, 1);
|
||||
#else
|
||||
register fb_data *dst, *src=&lcd_framebuffer[0][0];
|
||||
register unsigned int x, y;
|
||||
|
||||
register short *start=FRAME + LCD_HEIGHT*(LCD_WIDTH-1)+1;
|
||||
|
||||
memcpy((fb_data *)FRAME, &lcd_framebuffer[0][0],
|
||||
LCD_WIDTH*LCD_HEIGHT*sizeof(fb_data));
|
||||
for(y=0; y<LCD_HEIGHT;y++)
|
||||
{
|
||||
dst=start+y;
|
||||
for(x=0; x<LCD_WIDTH; x++)
|
||||
{
|
||||
*dst=*src++;
|
||||
dst-=LCD_HEIGHT;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Line write helper function for lcd_yuv_blit. Write two lines of yuv420. */
|
||||
|
|
4
tools/configure
vendored
4
tools/configure
vendored
|
@ -1293,11 +1293,13 @@ EOF
|
|||
tool="$rootdir/tools/scramble -add=m500"
|
||||
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
|
||||
bmp2rb_native="$rootdir/tools/bmp2rb -f 4"
|
||||
bmp2rb_remotemono="$rootdir/tools/bmp2rb -f 0"
|
||||
bmp2rb_remotenative="$rootdir/tools/bmp2rb -f 0"
|
||||
output="rockbox.mrobe500"
|
||||
appextra="recorder:gui"
|
||||
archosrom=""
|
||||
flash=""
|
||||
plugins="no"
|
||||
plugins="yes"
|
||||
swcodec="yes"
|
||||
toolset=$gigabeatbitmaptools
|
||||
boottool="cp "
|
||||
|
|
BIN
uisimulator/sdl/UI-mrobe500.bmp
Executable file
BIN
uisimulator/sdl/UI-mrobe500.bmp
Executable file
Binary file not shown.
After Width: | Height: | Size: 1.6 MiB |
|
@ -589,7 +589,46 @@ void button_event(int key, bool pressed)
|
|||
case SDLK_KP9:
|
||||
new_btn = BUTTON_VOL_UP;
|
||||
break;
|
||||
|
||||
|
||||
#elif CONFIG_KEYPAD == MROBE500_PAD
|
||||
case SDLK_KP4:
|
||||
case SDLK_LEFT:
|
||||
new_btn = BUTTON_LEFT;
|
||||
break;
|
||||
case SDLK_KP6:
|
||||
case SDLK_RIGHT:
|
||||
new_btn = BUTTON_RIGHT;
|
||||
break;
|
||||
case SDLK_KP8:
|
||||
case SDLK_UP:
|
||||
new_btn = BUTTON_RC_PLAY;
|
||||
break;
|
||||
case SDLK_KP2:
|
||||
case SDLK_DOWN:
|
||||
new_btn = BUTTON_RC_DOWN;
|
||||
break;
|
||||
case SDLK_KP_PLUS:
|
||||
case SDLK_F8:
|
||||
new_btn = BUTTON_POWER;
|
||||
break;
|
||||
case SDLK_ESCAPE:
|
||||
new_btn = BUTTON_POWER;
|
||||
break;
|
||||
case SDLK_KP_ENTER:
|
||||
case SDLK_RETURN:
|
||||
case SDLK_a:
|
||||
new_btn = BUTTON_RC_VOL_UP;
|
||||
break;
|
||||
case SDLK_KP5:
|
||||
case SDLK_SPACE:
|
||||
new_btn = BUTTON_RC_HEART;
|
||||
break;
|
||||
case SDLK_KP_PERIOD:
|
||||
case SDLK_INSERT:
|
||||
new_btn = BUTTON_RC_MODE;
|
||||
break;
|
||||
#else
|
||||
#error No keymap defined!
|
||||
#endif /* CONFIG_KEYPAD */
|
||||
case SDLK_KP0:
|
||||
case SDLK_F5:
|
||||
|
|
|
@ -229,6 +229,22 @@
|
|||
#define UI_LCD_WIDTH 240
|
||||
#define UI_LCD_HEIGHT 320
|
||||
|
||||
#elif defined(MROBE_500)
|
||||
#define UI_TITLE "Olympus M:Robe 500"
|
||||
#define UI_WIDTH 401 /* width of GUI window */
|
||||
#define UI_HEIGHT 655 /* height of GUI window */
|
||||
/* high-colour */
|
||||
#define UI_LCD_POSX 48 /* x position of lcd */
|
||||
#define UI_LCD_POSY 60 /* y position of lcd */
|
||||
#define UI_LCD_WIDTH LCD_WIDTH
|
||||
#define UI_LCD_HEIGHT LCD_HEIGHT
|
||||
#define UI_REMOTE_BGCOLOR 90, 145, 90 /* bkgnd of remote lcd (no bklight) */
|
||||
#define UI_REMOTE_BGCOLORLIGHT 130, 180, 250 /* bkgnd of remote lcd (bklight) */
|
||||
#define UI_REMOTE_POSX 50 /* x position of remote lcd */
|
||||
#define UI_REMOTE_POSY 403 /* y position of remote lcd */
|
||||
#define UI_REMOTE_WIDTH 79
|
||||
#define UI_REMOTE_HEIGHT 16
|
||||
|
||||
#elif defined(IRIVER_H10)
|
||||
#define UI_TITLE "iriver H10 20Gb"
|
||||
#define UI_WIDTH 392 /* width of GUI window */
|
||||
|
|
Loading…
Reference in a new issue