summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--firmware/export/config-mrobe500.h2
-rw-r--r--firmware/rolo.c2
-rwxr-xr-xfirmware/target/arm/tms320dm320/debug-dm320.c12
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c66
-rw-r--r--firmware/target/arm/tms320dm320/uart-dm320.c55
-rw-r--r--firmware/target/arm/tms320dm320/uart-target.h7
6 files changed, 84 insertions, 60 deletions
diff --git a/firmware/export/config-mrobe500.h b/firmware/export/config-mrobe500.h
index 3156b87060..53fc942856 100644
--- a/firmware/export/config-mrobe500.h
+++ b/firmware/export/config-mrobe500.h
@@ -52,7 +52,7 @@
/* choose the lcd orientation. both work */
/* #define CONFIG_ORIENTATION SCREEN_PORTAIT */
-#define CONFIG_ORIENTATION SCREEN_LANDSCAPE
+#define CONFIG_ORIENTATION SCREEN_LANDSCAPE
#if CONFIG_ORIENTATION == SCREEN_PORTAIT
#define LCD_WIDTH 480
diff --git a/firmware/rolo.c b/firmware/rolo.c
index aac99cc555..2a4b753948 100644
--- a/firmware/rolo.c
+++ b/firmware/rolo.c
@@ -161,7 +161,7 @@ void rolo_restart(const unsigned char* source, unsigned char* dest,
/* Wait for the COP to tell us it is rebooting */
while(cpu_reply != 2);
#endif
-
+
asm volatile(
"mov r0, #0x10000000 \n"
"mov pc, r0 \n"
diff --git a/firmware/target/arm/tms320dm320/debug-dm320.c b/firmware/target/arm/tms320dm320/debug-dm320.c
index e12d86a03d..1a987b4dda 100755
--- a/firmware/target/arm/tms320dm320/debug-dm320.c
+++ b/firmware/target/arm/tms320dm320/debug-dm320.c
@@ -33,20 +33,22 @@ bool __dbg_ports(void)
return false;
}
+extern char r_buffer[5];
+extern int r_button;
bool __dbg_hw_info(void)
{
int line = 0, button, oldline;
int *address=0x0;
bool done=false;
char buf[100];
-
+
lcd_setmargins(0, 0);
lcd_setfont(FONT_SYSFIXED);
lcd_clear_display();
-
+
/* Put all the static text befor the while loop */
lcd_puts(0, line++, "[Hardware info]");
-
+
lcd_puts(0, line++, "Clock info:");
snprintf(buf, sizeof(buf), "IO_CLK_PLLA: 0x%04x IO_CLK_PLLB: 0x%04x IO_CLK_SEL0: 0x%04x IO_CLK_SEL1: 0x%04x",
IO_CLK_PLLA, IO_CLK_PLLB, IO_CLK_SEL0, IO_CLK_SEL1); lcd_puts(0, line++, buf);
@@ -75,6 +77,10 @@ bool __dbg_hw_info(void)
else if (button==BUTTON_RC_REW)
address-=0x800;
+ snprintf(buf, sizeof(buf), "Buffer: 0x%02x%02x%02x%02x%02x",
+ r_buffer[0], r_buffer[1], r_buffer[2], r_buffer[3],r_buffer[4] ); lcd_puts(0, line++, buf);
+ snprintf(buf, sizeof(buf), "Button: 0x%08x, HWread: 0x%08x",
+ (unsigned int)button, r_button); lcd_puts(0, line++, buf);
snprintf(buf, sizeof(buf), "current tick: %08x Seconds running: %08d",
(unsigned int)current_tick, (unsigned int)current_tick/100); lcd_puts(0, line++, buf);
snprintf(buf, sizeof(buf), "Address: 0x%08x Data: 0x%08x",
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c
index 8d719eca81..0eb1c07e74 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c
@@ -41,11 +41,7 @@ static short last_x, last_y, last_z1, last_z2; /* for the touch screen */
static bool touch_available = false;
static struct touch_calibration_point topleft, bottomright;
-static bool using_calibration = false;
-void use_calibration(bool enable)
-{
- using_calibration = enable;
-}
+
/* Jd's tests.. These will hopefully work for everyone so we dont have to
* create a calibration screen.
* Portait:
@@ -55,12 +51,6 @@ void use_calibration(bool enable)
* (0,0) = 200, 270
* (640,480) = 3880, 3900
*/
-void set_calibration_points(struct touch_calibration_point *tl,
- struct touch_calibration_point *br)
-{
- memcpy(&topleft, tl, sizeof(struct touch_calibration_point));
- memcpy(&bottomright, br, sizeof(struct touch_calibration_point));
-}
static int touch_to_pixels(short val_x, short val_y)
{
@@ -74,16 +64,20 @@ static int touch_to_pixels(short val_x, short val_y)
y=val_x;
#endif
- if (!using_calibration)
- return (val_x<<16)|val_y;
-
x = (x-topleft.val_x)*(bottomright.px_x - topleft.px_x) / (bottomright.val_x - topleft.val_x) + topleft.px_x;
y = (y-topleft.val_y)*(bottomright.px_y - topleft.px_y) / (bottomright.val_y - topleft.val_y) + topleft.px_y;
if (x < 0)
x = 0;
+ else if (x>=LCD_WIDTH)
+ x=LCD_WIDTH-1;
+
if (y < 0)
y = 0;
+ else if (y>=LCD_HEIGHT)
+ y=LCD_HEIGHT-1;
+
+
return (x<<16)|y;
}
@@ -107,14 +101,12 @@ void button_init_device(void)
bottomright.val_y = 3880;
#endif
- topleft.px_x = 0;
+ topleft.px_x = 0;
topleft.px_y = 0;
-
- bottomright.px_x = LCD_WIDTH;
+
+ bottomright.px_x = LCD_WIDTH;
bottomright.px_y = LCD_HEIGHT;
- using_calibration = true;
-
/* Enable the touchscreen interrupt */
IO_INTC_EINT2 |= (1<<3); /* IRQ_GIO14 */
#if 0
@@ -136,15 +128,18 @@ inline bool button_hold(void)
static void remote_heartbeat(void)
{
char data[5] = {0x11, 0x30, 0x11^0x30, 0x11+0x30, '\0'};
- uart1_puts(data);
+ uart1_puts(data, 5);
}
#define TOUCH_MARGIN 8
+char r_buffer[5];
+int r_button = BUTTON_NONE;
int button_read_device(int *data)
{
- char buffer[5];
- int button = BUTTON_NONE, retval;
+ int retval, calbuf;
static int oldbutton = BUTTON_NONE;
+
+ r_button=BUTTON_NONE;
*data = 0;
if (touch_available)
@@ -170,7 +165,7 @@ int button_read_device(int *data)
last_x = x;
last_y = y;
*data = touch_to_pixels(x, y);
- button |= BUTTON_TOUCHPAD;
+ r_button |= BUTTON_TOUCHPAD;
}
last_touch = current_tick;
touch_available = false;
@@ -178,23 +173,34 @@ int button_read_device(int *data)
remote_heartbeat();
if ((IO_GIO_BITSET0&0x01) == 0)
- button |= BUTTON_POWER;
+ {
+ r_button |= BUTTON_POWER;
+ oldbutton=r_button;
+ }
- retval=uart1_gets_queue(buffer, 5);
+ retval=uart1_gets_queue(r_buffer, 5);
do
{
+ for(calbuf=0;calbuf<4;calbuf++)
+ {
+ if((r_buffer[calbuf]&0xF0)==0xF0 && (r_buffer[calbuf+1]&0xF0)!=0xF0)
+ break;
+ }
+ calbuf++;
+ if(calbuf==5)
+ calbuf=0;
if(retval>=0)
{
- button |= buffer[1];
- oldbutton=button;
+ r_button |= r_buffer[calbuf];
+ oldbutton=r_button;
}
else
{
- button=oldbutton;
+ r_button=oldbutton;
}
- } while((retval=uart1_gets_queue(buffer, 5))>=5);
+ } while((retval=uart1_gets_queue(r_buffer, 5))>=5);
- return button;
+ return r_button;
}
/* Touchpad data available interupt */
diff --git a/firmware/target/arm/tms320dm320/uart-dm320.c b/firmware/target/arm/tms320dm320/uart-dm320.c
index 5671e47a9f..151ad2921c 100644
--- a/firmware/target/arm/tms320dm320/uart-dm320.c
+++ b/firmware/target/arm/tms320dm320/uart-dm320.c
@@ -62,39 +62,53 @@ void uart1_putc(char ch)
IO_UART1_DTRR=ch;
}
-void uart1_puts(const char *str)
+void uart1_puts(const char *str, int size)
{
- char ch;
- while ((ch = *str++) != '\0') {
- uart1_putc(ch);
+ int count=0;
+ while (count<size)
+ {
+ uart1_putc(str[count]);
+ count++;
}
}
/* 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)
{
+ IO_INTC_EINT0 &= ~(1<<IRQ_UART1);
+ int retval;
+
if(uart1_recieve_count<size)
- return -uart1_recieve_count;
-
- if(uart1_recieve_read+size<RECIEVE_RING_SIZE)
{
- memcpy(str,uart1_recieve_buffer_ring+uart1_recieve_read,size);
- }
+ retval= -1;
+ }
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);
+ if(uart1_recieve_read+size<RECIEVE_RING_SIZE)
+ {
+ 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);
+ }
+
+ uart1_recieve_count-=size;
+
+ if(uart1_recieve_read+size<RECIEVE_RING_SIZE)
+ uart1_recieve_read+=size;
+ else
+ uart1_recieve_read=size-(RECIEVE_RING_SIZE-uart1_recieve_read);
+
+ retval=uart1_recieve_count;
}
- uart1_recieve_count-=size;
-
- if(uart1_recieve_read+size<RECIEVE_RING_SIZE)
- uart1_recieve_read+=size;
- else
- uart1_recieve_read=size-(RECIEVE_RING_SIZE-uart1_recieve_read);
+ /* Enable the interrupt */
+ IO_INTC_EINT0 |= (1<<IRQ_UART1);
- return uart1_recieve_count;
+ return retval;
}
/* UART1 receive interupt handler */
@@ -109,7 +123,8 @@ void UART1(void)
if(uart1_recieve_write==RECIEVE_RING_SIZE)
uart1_recieve_write=0;
- uart1_recieve_buffer_ring[uart1_recieve_write++] = IO_UART1_DTRR & 0xff;
+ uart1_recieve_buffer_ring[uart1_recieve_write] = IO_UART1_DTRR & 0xff;
+ uart1_recieve_write++;
uart1_recieve_count++;
}
}
diff --git a/firmware/target/arm/tms320dm320/uart-target.h b/firmware/target/arm/tms320dm320/uart-target.h
index e94dd9d31c..68145b8358 100644
--- a/firmware/target/arm/tms320dm320/uart-target.h
+++ b/firmware/target/arm/tms320dm320/uart-target.h
@@ -21,15 +21,12 @@
#define UART_H
void uart_init(void);
-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_puts(const char *str, int size);
void uart1_gets(char *str, unsigned int size);
-int uart1_pollch(unsigned int ticks);
void uart1_putc(char ch);
-void uart1_putHex(unsigned int n);
+
#endif