diff options
-rwxr-xr-x | apps/keymaps/keymap-mr500.c | 2 | ||||
-rw-r--r-- | apps/settings.h | 10 | ||||
-rwxr-xr-x | bootloader/mrobe500.c | 3 | ||||
-rw-r--r-- | firmware/SOURCES | 4 | ||||
-rw-r--r-- | firmware/export/config-mrobe500.h | 24 | ||||
-rw-r--r-- | firmware/target/arm/lcd-as-memframe.S | 35 | ||||
-rw-r--r-- | firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c | 37 | ||||
-rwxr-xr-x | tools/configure | 4 | ||||
-rwxr-xr-x | uisimulator/sdl/UI-mrobe500.bmp | bin | 0 -> 1705718 bytes | |||
-rw-r--r-- | uisimulator/sdl/button.c | 41 | ||||
-rw-r--r-- | uisimulator/sdl/uisdl.h | 16 |
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 Binary files differnew file mode 100755 index 0000000000..b32250e2de --- /dev/null +++ b/uisimulator/sdl/UI-mrobe500.bmp 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 */ |