summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xapps/keymaps/keymap-mr500.c2
-rw-r--r--apps/settings.h10
-rwxr-xr-xbootloader/mrobe500.c3
-rw-r--r--firmware/SOURCES4
-rw-r--r--firmware/export/config-mrobe500.h24
-rw-r--r--firmware/target/arm/lcd-as-memframe.S35
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c37
-rwxr-xr-xtools/configure4
-rwxr-xr-xuisimulator/sdl/UI-mrobe500.bmpbin0 -> 1705718 bytes
-rw-r--r--uisimulator/sdl/button.c41
-rw-r--r--uisimulator/sdl/uisdl.h16
11 files changed, 148 insertions, 28 deletions
diff --git a/apps/keymaps/keymap-mr500.c b/apps/keymaps/keymap-mr500.c
index 8c8e0e470b..b2444c5fad 100755
--- a/apps/keymaps/keymap-mr500.c
+++ b/apps/keymaps/keymap-mr500.c
@@ -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
diff --git a/apps/settings.h b/apps/settings.h
index cce7272eec..db7d5dc5b2 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -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)
diff --git a/bootloader/mrobe500.c b/bootloader/mrobe500.c
index 75e1ae4316..fe48ac6a95 100755
--- a/bootloader/mrobe500.c
+++ b/bootloader/mrobe500.c
@@ -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);
diff --git a/firmware/SOURCES b/firmware/SOURCES
index a5fed39588..69ea153d3d 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -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
diff --git a/firmware/export/config-mrobe500.h b/firmware/export/config-mrobe500.h
index cd83c5aa4d..8bf2852d18 100644
--- a/firmware/export/config-mrobe500.h
+++ b/firmware/export/config-mrobe500.h
@@ -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
diff --git a/firmware/target/arm/lcd-as-memframe.S b/firmware/target/arm/lcd-as-memframe.S
index 7071bec7ac..20950c8a4b 100644
--- a/firmware/target/arm/lcd-as-memframe.S
+++ b/firmware/target/arm/lcd-as-memframe.S
@@ -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 @
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c
index 8660058b18..37286bffc4 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c
@@ -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. */
diff --git a/tools/configure b/tools/configure
index 1c7f03d06d..1cc7e6220e 100755
--- a/tools/configure
+++ b/tools/configure
@@ -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 "
diff --git a/uisimulator/sdl/UI-mrobe500.bmp b/uisimulator/sdl/UI-mrobe500.bmp
new file mode 100755
index 0000000000..b32250e2de
--- /dev/null
+++ b/uisimulator/sdl/UI-mrobe500.bmp
Binary files differ
diff --git a/uisimulator/sdl/button.c b/uisimulator/sdl/button.c
index e50bfea087..62c2c33150 100644
--- a/uisimulator/sdl/button.c
+++ b/uisimulator/sdl/button.c
@@ -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:
diff --git a/uisimulator/sdl/uisdl.h b/uisimulator/sdl/uisdl.h
index 0f0d29847b..9be517c997 100644
--- a/uisimulator/sdl/uisdl.h
+++ b/uisimulator/sdl/uisdl.h
@@ -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 */