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(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); } - return false; + 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); + } + + 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);