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:
Karl Kurbjun 2007-10-21 23:12:17 +00:00
parent 2d91cf3ea3
commit fdbc01c6e2
11 changed files with 148 additions and 28 deletions

View file

@ -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

View file

@ -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)

View file

@ -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);

View file

@ -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

View file

@ -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

View file

@ -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 @

View file

@ -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
View file

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

View file

@ -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:

View file

@ -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 */