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