From d3c0a7f1692fd0b367a915a8f3a7144aaebb44a7 Mon Sep 17 00:00:00 2001 From: Karl Kurbjun Date: Sat, 10 Nov 2007 22:12:54 +0000 Subject: Change the way the UART recieves data and how buttons pressed are processed. Also move some of the debug menu into the target tree and allow rockblox to build when the screen is rotated. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15560 a1c6a512-1295-4272-9138-f99709370657 --- apps/debug_menu.c | 46 ++------ apps/plugins/rockblox.c | 18 +++- firmware/SOURCES | 1 + .../arm/tms320dm320/mrobe-500/button-mr500.c | 56 ++++------ .../arm/tms320dm320/mrobe-500/button-target.h | 20 ++-- firmware/target/arm/tms320dm320/uart-dm320.c | 120 ++++++++------------- firmware/target/arm/tms320dm320/uart-target.h | 1 + 7 files changed, 96 insertions(+), 166 deletions(-) diff --git a/apps/debug_menu.c b/apps/debug_menu.c index 918a969a95..576d01d336 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c @@ -88,6 +88,10 @@ #endif #include "hwcompat.h" +#if CONFIG_CPU == DM320 +#include "debug-target.h" +#endif + /*---------------------------------------------------*/ /* SPECIAL DEBUG STUFF */ /*---------------------------------------------------*/ @@ -656,45 +660,9 @@ static bool dbg_hw_info(void) lcd_update(); while (!(action_userabort(TIMEOUT_BLOCK))); -#elif CONFIG_CPU == DM320 - int line = 0, button; - int *address=0x0; - bool done=false; - char buf[100]; - - lcd_setmargins(0, 0); - lcd_setfont(FONT_SYSFIXED); - lcd_clear_display(); - lcd_puts(0, line++, "[Hardware info]"); - - while(!done) - { - button = button_get(false); - button&=~BUTTON_REPEAT; - if (button == BUTTON_POWER) - done=true; - if(button==BUTTON_RC_PLAY) - address+=0x01; - else if (button==BUTTON_RC_DOWN) - address-=0x01; - else if (button==BUTTON_RC_FF) - address+=0x800; - else if (button==BUTTON_RC_REW) - address-=0x800; - { - snprintf(buf, sizeof(buf), "current tick: %04x", (unsigned int)current_tick); - lcd_puts(0, line++, buf); - snprintf(buf, sizeof(buf), "Address: 0x%08x Data: 0x%08x", (unsigned int)address, *address); - lcd_puts(0, line++, buf); - snprintf(buf, sizeof(buf), "Address: 0x%08x Data: 0x%08x", (unsigned int)(address+1), *(address+1)); - lcd_puts(0, line++, buf); - snprintf(buf, sizeof(buf), "Address: 0x%08x Data: 0x%08x", (unsigned int)(address+2), *(address+2)); - lcd_puts(0, line++, buf); - line -= 4; - } - lcd_update(); - } - +#else + /* Define this function in your target tree */ + return __dbg_hw_info(); #endif /* CONFIG_CPU */ return false; } diff --git a/apps/plugins/rockblox.c b/apps/plugins/rockblox.c index 45f3c4f14e..dc1b25e6ec 100644 --- a/apps/plugins/rockblox.c +++ b/apps/plugins/rockblox.c @@ -188,7 +188,23 @@ PLUGIN_HEADER #define BOARD_HEIGHT 20 -#if (LCD_WIDTH == 480) && (LCD_HEIGHT == 640) +#if (LCD_WIDTH == 640) && (LCD_HEIGHT == 480) + +#define BLOCK_WIDTH 30 +#define BLOCK_HEIGHT 30 +#define BOARD_X 14 +#define BOARD_Y 2 +#define PREVIEW_X 342 +#define PREVIEW_Y 482 +#define LABEL_X 344 +#define SCORE_Y 58 +#define LEVEL_Y 142 +#define LINES_Y 218 +#define HIGH_LABEL_X 344 +#define HIGH_SCORE_Y 326 +#define HIGH_LEVEL_Y 344 + +#elif (LCD_WIDTH == 480) && (LCD_HEIGHT == 640) #define BLOCK_WIDTH 30 #define BLOCK_HEIGHT 30 diff --git a/firmware/SOURCES b/firmware/SOURCES index 24a6db9fa6..29e30804b5 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES @@ -647,6 +647,7 @@ target/arm/tms320dm320/mrobe-500/pcm-mr500.c target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c target/arm/tms320dm320/mrobe-500/power-mr500.c target/arm/tms320dm320/mrobe-500/usb-mr500.c +target/arm/tms320dm320/debug-dm320.c target/arm/tms320dm320/i2c-dm320.c target/arm/tms320dm320/kernel-dm320.c target/arm/tms320dm320/spi-dm320.c diff --git a/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c index 10587a485f..837677250f 100644 --- a/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c +++ b/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c @@ -113,13 +113,11 @@ static void remote_heartbeat(void) #define TOUCH_MARGIN 8 int button_read_device(int *data) { - char c; - int i = 0; - int btn = BUTTON_NONE; + char buffer[5]; + int button = BUTTON_NONE, retval; + static int oldbutton = BUTTON_NONE; *data = 0; - - if ((IO_GIO_BITSET0&0x01) == 0) - btn |= BUTTON_POWER; + if (touch_available) { short x,y; @@ -143,47 +141,31 @@ int button_read_device(int *data) last_x = x; last_y = y; *data = touch_to_pixels(x, y); - btn |= BUTTON_TOUCHPAD; + button |= BUTTON_TOUCHPAD; } last_touch = current_tick; touch_available = false; } remote_heartbeat(); - while (uart1_getch(&c)) + + if ((IO_GIO_BITSET0&0x01) == 0) + button |= BUTTON_POWER; + + retval=uart1_gets_queue(buffer, 5); + do { - if (i==0 && (c == BUTTON_START_BYTE || c == BUTTON_START_BYTE2) ) + if(retval>=0) { - i++; + button |= buffer[1]; + oldbutton=button; } - else if (i) + else { - i++; - if(i==2) - { - if (c& (1<<7)) - btn |= BUTTON_RC_HEART; - if (c& (1<<6)) - btn |= BUTTON_RC_MODE; - if (c& (1<<5)) - btn |= BUTTON_RC_VOL_DOWN; - if (c& (1<<4)) - btn |= BUTTON_RC_VOL_UP; - if (c& (1<<3)) - btn |= BUTTON_RC_REW; - if (c& (1<<2)) - btn |= BUTTON_RC_FF; - if (c& (1<<1)) - btn |= BUTTON_RC_DOWN; - if (c& (1<<0)) - btn |= BUTTON_RC_PLAY; - } - else if(i==5) - { - i=0; - } + button=oldbutton; } - } - return btn; + } while((retval=uart1_gets_queue(buffer, 5))>=5); + + return button; } /* Touchpad data available interupt */ diff --git a/firmware/target/arm/tms320dm320/mrobe-500/button-target.h b/firmware/target/arm/tms320dm320/mrobe-500/button-target.h index aa4768c05b..1f17f3f3c8 100644 --- a/firmware/target/arm/tms320dm320/mrobe-500/button-target.h +++ b/firmware/target/arm/tms320dm320/mrobe-500/button-target.h @@ -20,7 +20,6 @@ #ifndef _BUTTON_TARGET_H_ #define _BUTTON_TARGET_H_ -#include #include "config.h" #define HAS_BUTTON_HOLD @@ -37,22 +36,21 @@ struct touch_calibration_point { }; void use_calibration(bool enable); -/* m:robe 500 specific button codes */ +/* M:Robe 500 specific button codes */ -#define BUTTON_POWER 0x00000001 +#define BUTTON_POWER 0x00000100 /* Remote control buttons */ -#define BUTTON_RC_HEART 0x00000002 -#define BUTTON_RC_MODE 0x00000004 -#define BUTTON_RC_VOL_DOWN 0x00000008 +#define BUTTON_RC_PLAY 0x00000001 +#define BUTTON_RC_DOWN 0x00000002 +#define BUTTON_RC_FF 0x00000004 +#define BUTTON_RC_REW 0x00000008 #define BUTTON_RC_VOL_UP 0x00000010 +#define BUTTON_RC_VOL_DOWN 0x00000020 +#define BUTTON_RC_MODE 0x00000040 +#define BUTTON_RC_HEART 0x00000080 - -#define BUTTON_RC_PLAY 0x00000020 -#define BUTTON_RC_REW 0x00000040 -#define BUTTON_RC_FF 0x00000080 -#define BUTTON_RC_DOWN 0x00000100 #define BUTTON_TOUCH 0x00000200 /* compatibility hacks */ diff --git a/firmware/target/arm/tms320dm320/uart-dm320.c b/firmware/target/arm/tms320dm320/uart-dm320.c index 38600e3c90..5671e47a9f 100644 --- a/firmware/target/arm/tms320dm320/uart-dm320.c +++ b/firmware/target/arm/tms320dm320/uart-dm320.c @@ -19,34 +19,25 @@ #include "config.h" #include "cpu.h" #include "system.h" +#include "string.h" +#include "panic.h" -/* UART 0/1 */ - -#define CONFIG_UART_BRSR 87 #define MAX_UART_BUFFER 31 -static unsigned char uart1buffer[MAX_UART_BUFFER], uart1_send_buffer_ring[512]; -int uart1_send_count=0,uart1_send_point=0; -int uart1read = 0, uart1write = 0, uart1count = 0; +#define SEND_RING_SIZE 256 +#define RECIEVE_RING_SIZE 20 -/* -static void do_checksums(char *data, int len, char *xor, char *add) -{ - int i; - *xor = data[0]; - *add = data[0]; - for(i=1;i> 28; - uart1_putc(digit >= 10 ? digit - 10 + 'A' : digit + '0'); - n <<= 4; - } -} - void uart1_puts(const char *str) { char ch; @@ -91,62 +70,47 @@ void uart1_puts(const char *str) } } -void uart1_gets(char *str, unsigned int size) +/* This function returns the number of bytes left in the queue after a read is done (negative if fail)*/ +int uart1_gets_queue(char *str, unsigned int size) { - for (;;) { - char ch; - - /* Wait for FIFO to contain something */ - while ((IO_UART1_RFCR & 0x3f) == 0); - - /* Read character */ - ch = (char)IO_UART1_DTRR; - - /* If CR, also echo LF, null-terminate, and return */ - if (ch == '\r') { - IO_UART1_DTRR='\n'; - if (size) { - *str++ = '\0'; - } - return; - } - - /* Append to buffer */ - if (size) { - *str++ = ch; - --size; - } - } -} + if(uart1_recieve_count 0) + if(uart1_recieve_read+sizeMAX_UART_BUFFER) - uart1read=0; - - *c = uart1buffer[uart1read++]; - uart1count--; - return true; + memcpy(str,uart1_recieve_buffer_ring+uart1_recieve_read,size); + } + else + { + int tempcount=(RECIEVE_RING_SIZE-uart1_recieve_read); + memcpy(str,uart1_recieve_buffer_ring+uart1_recieve_read,tempcount); + memcpy(str+tempcount,uart1_recieve_buffer_ring,size-tempcount); } - return false; + + uart1_recieve_count-=size; + + if(uart1_recieve_read+size MAX_UART_BUFFER) + if (uart1_recieve_count > RECIEVE_RING_SIZE) panicf("UART1 buffer overflow"); else { - if(uart1write>MAX_UART_BUFFER) - uart1write=0; + if(uart1_recieve_write==RECIEVE_RING_SIZE) + uart1_recieve_write=0; - uart1buffer[uart1write++] = IO_UART1_DTRR & 0xff; - uart1count++; + uart1_recieve_buffer_ring[uart1_recieve_write++] = IO_UART1_DTRR & 0xff; + uart1_recieve_count++; } } diff --git a/firmware/target/arm/tms320dm320/uart-target.h b/firmware/target/arm/tms320dm320/uart-target.h index 70210c9f52..e94dd9d31c 100644 --- a/firmware/target/arm/tms320dm320/uart-target.h +++ b/firmware/target/arm/tms320dm320/uart-target.h @@ -25,6 +25,7 @@ bool uart1_getch(char *c); void uart1_heartbeat(void); bool uart1_available(void); +int uart1_gets_queue(char *, unsigned int); void uart1_puts(const char *str); void uart1_gets(char *str, unsigned int size); int uart1_pollch(unsigned int ticks); -- cgit v1.2.3