summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Kurbjun <kkurbjun@gmail.com>2009-04-11 07:23:56 +0000
committerKarl Kurbjun <kkurbjun@gmail.com>2009-04-11 07:23:56 +0000
commit5449b1ed1d241ad4bdbe5dd2cd8c65ecbfa5b6b1 (patch)
tree39c7a041edb844c30aea93333818e80d7b46af9b
parent9f19f33c418aa2703c3c83f0f7ba72a76d21d0c0 (diff)
downloadrockbox-5449b1ed1d241ad4bdbe5dd2cd8c65ecbfa5b6b1.tar.gz
rockbox-5449b1ed1d241ad4bdbe5dd2cd8c65ecbfa5b6b1.zip
M:Robe 500: Start of proper remote support, touchscreen works without remote now.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20684 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/menus/display_menu.c10
-rw-r--r--apps/plugins/lib/pluginlib_actions.c9
-rw-r--r--apps/plugins/logo.c12
-rw-r--r--apps/plugins/stats.c1
-rw-r--r--apps/settings.c4
-rw-r--r--firmware/export/config-mrobe500.h12
-rw-r--r--firmware/export/config.h1
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c18
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c287
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-target.h45
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/power-mr500.c1
-rw-r--r--firmware/target/arm/tms320dm320/uart-dm320.c2
-rwxr-xr-xtools/configure2
13 files changed, 387 insertions, 17 deletions
diff --git a/apps/menus/display_menu.c b/apps/menus/display_menu.c
index 60ed71cbd0..e5baf8ac1e 100644
--- a/apps/menus/display_menu.c
+++ b/apps/menus/display_menu.c
@@ -182,9 +182,11 @@ MENUITEM_SETTING(remote_contrast,
182 &global_settings.remote_contrast, NULL); 182 &global_settings.remote_contrast, NULL);
183MENUITEM_SETTING(remote_invert, 183MENUITEM_SETTING(remote_invert,
184 &global_settings.remote_invert, NULL); 184 &global_settings.remote_invert, NULL);
185 185
186#ifdef HAVE_LCD_FLIP
186MENUITEM_SETTING(remote_flip_display, 187MENUITEM_SETTING(remote_flip_display,
187 &global_settings.remote_flip_display, flipdisplay_callback); 188 &global_settings.remote_flip_display, flipdisplay_callback);
189#endif
188 190
189#ifdef HAVE_REMOTE_LCD_TICKING 191#ifdef HAVE_REMOTE_LCD_TICKING
190static int ticking_callback(int action,const struct menu_item_ex *this_item) 192static int ticking_callback(int action,const struct menu_item_ex *this_item)
@@ -212,7 +214,11 @@ MAKE_MENU(lcd_remote_settings, ID2P(LANG_LCD_REMOTE_MENU),
212 &remote_backlight_on_button_hold, 214 &remote_backlight_on_button_hold,
213#endif 215#endif
214 &remote_caption_backlight, &remote_bl_filter_first_keypress, 216 &remote_caption_backlight, &remote_bl_filter_first_keypress,
215 &remote_contrast, &remote_invert, &remote_flip_display 217 &remote_contrast, &remote_invert
218
219#ifdef HAVE_LCD_FLIP
220 ,&remote_flip_display
221#endif
216#ifdef HAVE_REMOTE_LCD_TICKING 222#ifdef HAVE_REMOTE_LCD_TICKING
217 ,&remote_reduce_ticking 223 ,&remote_reduce_ticking
218#endif 224#endif
diff --git a/apps/plugins/lib/pluginlib_actions.c b/apps/plugins/lib/pluginlib_actions.c
index 773b1032bd..18c6851827 100644
--- a/apps/plugins/lib/pluginlib_actions.c
+++ b/apps/plugins/lib/pluginlib_actions.c
@@ -59,6 +59,15 @@ const struct button_mapping remote_directions[] =
59 { PLA_DOWN_REPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE}, 59 { PLA_DOWN_REPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE},
60 { PLA_LEFT_REPEAT, BUTTON_RC_LEFT|BUTTON_REPEAT, BUTTON_NONE}, 60 { PLA_LEFT_REPEAT, BUTTON_RC_LEFT|BUTTON_REPEAT, BUTTON_NONE},
61 { PLA_RIGHT_REPEAT, BUTTON_RC_RIGHT|BUTTON_REPEAT, BUTTON_NONE}, 61 { PLA_RIGHT_REPEAT, BUTTON_RC_RIGHT|BUTTON_REPEAT, BUTTON_NONE},
62#elif (CONFIG_REMOTE_KEYPAD == MROBE_REMOTE)
63 { PLA_UP, BUTTON_RC_PLAY, BUTTON_NONE},
64 { PLA_DOWN, BUTTON_RC_DOWN, BUTTON_NONE},
65 { PLA_LEFT, BUTTON_RC_REW, BUTTON_NONE},
66 { PLA_RIGHT, BUTTON_RC_FF, BUTTON_NONE},
67 { PLA_UP_REPEAT, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_NONE},
68 { PLA_DOWN_REPEAT, BUTTON_RC_DOWN|BUTTON_REPEAT, BUTTON_NONE},
69 { PLA_LEFT_REPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE},
70 { PLA_RIGHT_REPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE},
62#else 71#else
63 #error pluginlib_actions: Unsupported remote keypad 72 #error pluginlib_actions: Unsupported remote keypad
64#endif 73#endif
diff --git a/apps/plugins/logo.c b/apps/plugins/logo.c
index 2ec1b38271..e61de014cc 100644
--- a/apps/plugins/logo.c
+++ b/apps/plugins/logo.c
@@ -122,10 +122,6 @@ const unsigned char rockbox16x7[] = {
122 122
123#elif CONFIG_KEYPAD == MROBE500_PAD 123#elif CONFIG_KEYPAD == MROBE500_PAD
124#define LP_QUIT BUTTON_POWER 124#define LP_QUIT BUTTON_POWER
125#define LP_DEC_X BUTTON_LEFT
126#define LP_INC_X BUTTON_RIGHT
127#define LP_DEC_Y BUTTON_RC_DOWN
128#define LP_INC_Y BUTTON_RC_PLAY
129 125
130#elif CONFIG_KEYPAD == GIGABEAT_S_PAD 126#elif CONFIG_KEYPAD == GIGABEAT_S_PAD
131#define LP_QUIT BUTTON_BACK 127#define LP_QUIT BUTTON_BACK
@@ -191,7 +187,15 @@ const unsigned char rockbox16x7[] = {
191#define LP_R_INC_X BUTTON_RC_FF 187#define LP_R_INC_X BUTTON_RC_FF
192#define LP_R_DEC_Y BUTTON_RC_SOURCE 188#define LP_R_DEC_Y BUTTON_RC_SOURCE
193#define LP_R_INC_Y BUTTON_RC_BITRATE 189#define LP_R_INC_Y BUTTON_RC_BITRATE
190
191#elif (CONFIG_REMOTE_KEYPAD==MROBE_REMOTE)
192#define LP_R_QUIT BUTTON_RC_HEART
193#define LP_R_DEC_X BUTTON_RC_REW
194#define LP_R_INC_X BUTTON_RC_FF
195#define LP_R_DEC_Y BUTTON_RC_DOWN
196#define LP_R_INC_Y BUTTON_RC_PLAY
194#endif 197#endif
198
195#endif /* CONFIG_REMOTE_KEYPAD */ 199#endif /* CONFIG_REMOTE_KEYPAD */
196 200
197#ifdef HAVE_TOUCHSCREEN 201#ifdef HAVE_TOUCHSCREEN
diff --git a/apps/plugins/stats.c b/apps/plugins/stats.c
index 659f3e6763..976fd262f8 100644
--- a/apps/plugins/stats.c
+++ b/apps/plugins/stats.c
@@ -68,6 +68,7 @@ static bool abort;
68 68
69#elif CONFIG_KEYPAD == MROBE500_PAD 69#elif CONFIG_KEYPAD == MROBE500_PAD
70#define STATS_STOP BUTTON_POWER 70#define STATS_STOP BUTTON_POWER
71#define STATS_STOP_REMOTE BUTTON_RC_DOWN
71 72
72#elif CONFIG_KEYPAD == GIGABEAT_S_PAD 73#elif CONFIG_KEYPAD == GIGABEAT_S_PAD
73#define STATS_STOP BUTTON_BACK 74#define STATS_STOP BUTTON_BACK
diff --git a/apps/settings.c b/apps/settings.c
index 4db4f4405c..598e39e7ab 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -742,7 +742,11 @@ void settings_apply(bool read_disk)
742#ifdef HAVE_REMOTE_LCD 742#ifdef HAVE_REMOTE_LCD
743 lcd_remote_set_contrast(global_settings.remote_contrast); 743 lcd_remote_set_contrast(global_settings.remote_contrast);
744 lcd_remote_set_invert_display(global_settings.remote_invert); 744 lcd_remote_set_invert_display(global_settings.remote_invert);
745
746#ifdef HAVE_LCD_FLIP
745 lcd_remote_set_flip(global_settings.remote_flip_display); 747 lcd_remote_set_flip(global_settings.remote_flip_display);
748#endif
749
746 lcd_remote_scroll_speed(global_settings.remote_scroll_speed); 750 lcd_remote_scroll_speed(global_settings.remote_scroll_speed);
747 lcd_remote_scroll_step(global_settings.remote_scroll_step); 751 lcd_remote_scroll_step(global_settings.remote_scroll_step);
748 lcd_remote_scroll_delay(global_settings.remote_scroll_delay); 752 lcd_remote_scroll_delay(global_settings.remote_scroll_delay);
diff --git a/firmware/export/config-mrobe500.h b/firmware/export/config-mrobe500.h
index 939f09cb89..4010b036d1 100644
--- a/firmware/export/config-mrobe500.h
+++ b/firmware/export/config-mrobe500.h
@@ -89,13 +89,21 @@
89#define HAVE_LCD_SLEEP 89#define HAVE_LCD_SLEEP
90 90
91/* remote LCD */ 91/* remote LCD */
92//#define HAVE_REMOTE_LCD 92#define HAVE_REMOTE_LCD
93#define LCD_REMOTE_WIDTH 79 93#define LCD_REMOTE_WIDTH 79
94#define LCD_REMOTE_HEIGHT 16 94#define LCD_REMOTE_HEIGHT 64
95#define LCD_REMOTE_DEPTH 1 95#define LCD_REMOTE_DEPTH 1
96 96
97/* Remote display colours, for screenshots and sim (0xRRGGBB) */
98#define LCD_REMOTE_DARKCOLOR 0x000000
99#define LCD_REMOTE_BRIGHTCOLOR 0x5a915a
100#define LCD_REMOTE_BL_DARKCOLOR 0x000000
101#define LCD_REMOTE_BL_BRIGHTCOLOR 0x82b4fa
102
97#define LCD_REMOTE_PIXELFORMAT VERTICAL_PACKING 103#define LCD_REMOTE_PIXELFORMAT VERTICAL_PACKING
98 104
105#define CONFIG_REMOTE_KEYPAD MROBE_REMOTE
106
99#define MIN_REMOTE_CONTRAST_SETTING 0 107#define MIN_REMOTE_CONTRAST_SETTING 0
100#define MAX_REMOTE_CONTRAST_SETTING 15 108#define MAX_REMOTE_CONTRAST_SETTING 15
101#define DEFAULT_REMOTE_CONTRAST_SETTING 7 109#define DEFAULT_REMOTE_CONTRAST_SETTING 7
diff --git a/firmware/export/config.h b/firmware/export/config.h
index ac60e9660e..17b3c1cdea 100644
--- a/firmware/export/config.h
+++ b/firmware/export/config.h
@@ -114,6 +114,7 @@
114#define H100_REMOTE 1 114#define H100_REMOTE 1
115#define H300_REMOTE 2 115#define H300_REMOTE 2
116#define X5_REMOTE 3 116#define X5_REMOTE 3
117#define MROBE_REMOTE 4
117 118
118/* CONFIG_BACKLIGHT_FADING */ 119/* CONFIG_BACKLIGHT_FADING */
119/* No fading capabilities at all (yet) */ 120/* No fading capabilities at all (yet) */
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c
index 3e5be7c22f..bc163b1070 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c
@@ -128,12 +128,6 @@ inline bool button_hold(void)
128 return false; 128 return false;
129} 129}
130 130
131static void remote_heartbeat(void)
132{
133 char data[5] = {0x11, 0x30, 0x11^0x30, 0x11+0x30, '\0'};
134 uart1_puts(data, 5);
135}
136
137#define TOUCH_MARGIN 8 131#define TOUCH_MARGIN 8
138char r_buffer[5]; 132char r_buffer[5];
139int r_button = BUTTON_NONE; 133int r_button = BUTTON_NONE;
@@ -142,13 +136,14 @@ int button_read_device(int *data)
142 int retval, calbuf; 136 int retval, calbuf;
143 static int oldbutton = BUTTON_NONE; 137 static int oldbutton = BUTTON_NONE;
144 138
139 static long last_touch = 0;
140
145 r_button=BUTTON_NONE; 141 r_button=BUTTON_NONE;
146 *data = 0; 142 *data = 0;
147 143
148 if (touch_available) 144 if (touch_available)
149 { 145 {
150 short x,y; 146 short x,y;
151 static long last_touch = 0;
152 bool send_touch = false; 147 bool send_touch = false;
153 tsc2100_read_values(&x, &y, &last_z1, &last_z2); 148 tsc2100_read_values(&x, &y, &last_z1, &last_z2);
154 if (TIME_BEFORE(last_touch + HZ/5, current_tick)) 149 if (TIME_BEFORE(last_touch + HZ/5, current_tick))
@@ -175,7 +170,14 @@ int button_read_device(int *data)
175 last_touch = current_tick; 170 last_touch = current_tick;
176 touch_available = false; 171 touch_available = false;
177 } 172 }
178 remote_heartbeat(); 173 else
174 {
175 /* Touch hasn't happened in a while, clear the bits */
176 if(last_touch+3>current_tick)
177 {
178 oldbutton&=(0xFF);
179 }
180 }
179 181
180 if ((IO_GIO_BITSET0&0x01) == 0) 182 if ((IO_GIO_BITSET0&0x01) == 0)
181 { 183 {
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c
new file mode 100644
index 0000000000..5cdc00ce6a
--- /dev/null
+++ b/firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c
@@ -0,0 +1,287 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id: $
9 *
10 * Copyright (C) 2009 Karl Kurbjun
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21
22#include "config.h"
23#include "system.h"
24#include "file.h"
25#include "lcd-remote.h"
26#include "adc.h"
27#include "scroll_engine.h"
28#include "uart-target.h"
29
30static enum remote_control_states
31{
32 REMOTE_CONTROL_IDLE,
33 REMOTE_CONTROL_NOP,
34 REMOTE_CONTROL_POWER,
35 REMOTE_CONTROL_MASK,
36 REMOTE_CONTROL_DRAW1,
37 REMOTE_CONTROL_DRAW_PAUSE1,
38 REMOTE_CONTROL_DRAW2,
39 REMOTE_CONTROL_DRAW_PAUSE2,
40 REMOTE_CONTROL_SLEEP
41} remote_state_control = REMOTE_CONTROL_NOP;
42
43bool remote_initialized=true;
44
45unsigned char remote_contrast=DEFAULT_REMOTE_CONTRAST_SETTING;
46unsigned char remote_power=0x00;
47
48/*** hardware configuration ***/
49
50int lcd_remote_default_contrast(void)
51{
52 return DEFAULT_REMOTE_CONTRAST_SETTING;
53}
54
55void lcd_remote_sleep(void)
56{
57 remote_state_control=REMOTE_CONTROL_SLEEP;
58}
59
60void lcd_remote_powersave(bool on)
61{
62 if(on)
63 {
64 remote_power|=0xC0;
65 remote_state_control=REMOTE_CONTROL_POWER;
66 }
67 else
68 {
69 remote_power&=~(0xC0);
70 remote_state_control=REMOTE_CONTROL_POWER;
71 }
72}
73
74void lcd_remote_set_contrast(int val)
75{
76 remote_contrast=(char)val;
77 remote_state_control=REMOTE_CONTROL_POWER;
78}
79
80void lcd_remote_set_invert_display(bool yesno)
81{
82 (void)yesno;
83}
84
85/* turn the display upside down (call lcd_remote_update() afterwards) */
86void lcd_remote_set_flip(bool yesno)
87{
88 (void)yesno;
89}
90
91bool remote_detect(void)
92{
93 return true;
94}
95
96void lcd_remote_on(void)
97{
98 remote_power|=0x80;
99 remote_state_control=REMOTE_CONTROL_POWER;
100}
101
102void lcd_remote_off(void)
103{
104 remote_power&=~(0x80);
105 remote_state_control=REMOTE_CONTROL_POWER;
106}
107
108unsigned char lcd_remote_test[16]=
109 {0x80,0xFF,0x80,0x00,0xFF,0x89,0x89,0x00,0xC1,0x89,0x8F,0x80,0xFF,0x80,0,0};
110
111/* Monitor remote hotswap */
112static void remote_tick(void)
113{
114 unsigned char i;
115 unsigned char remote_payload[10], remote_payload_size;
116 unsigned char remote_check_xor, remote_check_sum;
117
118 switch (remote_state_control)
119 {
120 case REMOTE_CONTROL_IDLE:
121
122 remote_payload_size=0;
123 remote_state_control=REMOTE_CONTROL_IDLE;
124 break;
125 case REMOTE_CONTROL_NOP:
126 remote_payload[0]=0x11;
127 remote_payload[1]=0x30;
128
129 remote_payload_size=2;
130 remote_state_control=REMOTE_CONTROL_NOP;
131 break;
132 case REMOTE_CONTROL_POWER:
133 remote_payload[0]=0x31;
134 remote_payload[1]=remote_power;
135 remote_payload[2]=remote_contrast;
136
137 remote_payload_size=3;
138 remote_state_control=REMOTE_CONTROL_NOP;
139 break;
140 case REMOTE_CONTROL_MASK:
141 remote_payload[0]=0x41;
142 remote_payload[1]=0x94;
143
144 remote_payload_size=2;
145 remote_state_control=REMOTE_CONTROL_NOP;
146 break;
147 case REMOTE_CONTROL_DRAW1:
148 remote_payload[0]=0x51;
149 remote_payload[1]=0x80;
150 remote_payload[2]=14;
151 remote_payload[3]=0;
152 remote_payload[4]=0;
153 remote_payload[5]=14;
154 remote_payload[6]=8;
155
156 remote_payload_size=7;
157 remote_state_control=REMOTE_CONTROL_DRAW_PAUSE1;
158 break;
159 case REMOTE_CONTROL_DRAW_PAUSE1:
160 remote_payload[0]=0x11;
161 remote_payload[1]=0x30;
162
163 remote_payload_size=2;
164 remote_state_control=REMOTE_CONTROL_DRAW2;
165 break;
166 case REMOTE_CONTROL_DRAW2:
167 remote_payload[0]=0x51;
168 remote_payload[1]=0x80;
169 remote_payload[2]=14;
170 remote_payload[3]=0;
171 remote_payload[4]=8;
172 remote_payload[5]=14;
173 remote_payload[6]=16;
174
175 remote_payload_size=7;
176 remote_state_control=REMOTE_CONTROL_DRAW_PAUSE2;
177 break;
178 case REMOTE_CONTROL_DRAW_PAUSE2:
179 remote_payload[0]=0x11;
180 remote_payload[1]=0x30;
181
182 remote_payload_size=2;
183 remote_state_control=REMOTE_CONTROL_NOP;
184 break;
185 case REMOTE_CONTROL_SLEEP:
186 remote_payload[0]=0x71;
187 remote_payload[1]=0x30;
188
189 remote_payload_size=2;
190 remote_state_control=REMOTE_CONTROL_IDLE;
191 break;
192 default:
193 remote_payload_size=0;
194 break;
195 }
196
197 if(remote_payload_size==0)
198 {
199 return;
200 }
201
202 remote_check_xor=remote_payload[0];
203 remote_check_sum=remote_payload[0];
204 for(i=1; i<remote_payload_size; i++)
205 {
206 remote_check_xor^=remote_payload[i];
207 remote_check_sum+=remote_payload[i];
208 }
209
210 if(remote_payload[0]==0x51)
211 {
212 unsigned char offset;
213 unsigned char x;
214
215 if(remote_payload[4]==8)
216 {
217 offset=79;
218 }
219 else
220 {
221 offset=0;
222 }
223
224 for (x = 0; x < 14; x++)
225 {
226 remote_check_xor^=lcd_remote_test[x];
227 remote_check_sum+=lcd_remote_test[x];
228 }
229
230 uart1_puts(remote_payload, remote_payload_size);
231 lcd_remote_test[14]=remote_check_xor;
232 lcd_remote_test[15]=remote_check_sum;
233 uart1_puts(lcd_remote_test, 16);
234 }
235 else
236 {
237 remote_payload[remote_payload_size]=remote_check_xor;
238 remote_payload[remote_payload_size+1]=remote_check_sum;
239
240 uart1_puts(remote_payload, remote_payload_size+2);
241 }
242}
243
244void lcd_remote_init_device(void)
245{
246 lcd_remote_clear_display();
247 if (remote_detect())
248 lcd_remote_on();
249
250 /* put the remote control in the tick task */
251 tick_add_task(remote_tick);
252}
253
254/* Update the display.
255 This must be called after all other LCD functions that change the display. */
256void lcd_remote_update(void)
257{
258 if(remote_state_control!=REMOTE_CONTROL_DRAW1
259 && remote_state_control!=REMOTE_CONTROL_DRAW_PAUSE1
260 && remote_state_control!=REMOTE_CONTROL_DRAW2
261 && remote_state_control!=REMOTE_CONTROL_DRAW_PAUSE2)
262 {
263 remote_state_control=REMOTE_CONTROL_DRAW1;
264 }
265}
266
267/* Update a fraction of the display. */
268void lcd_remote_update_rect(int x, int y, int width, int height)
269{
270 (void)x;
271 (void)y;
272 (void)width;
273 (void)height;
274 lcd_remote_update();
275}
276
277void _remote_backlight_on(void)
278{
279 remote_power|=0x40;
280 remote_state_control=REMOTE_CONTROL_POWER;
281}
282
283void _remote_backlight_off(void)
284{
285 remote_power&=~(0x40);
286 remote_state_control=REMOTE_CONTROL_POWER;
287}
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-target.h b/firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-target.h
new file mode 100644
index 0000000000..bf52e80238
--- /dev/null
+++ b/firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-target.h
@@ -0,0 +1,45 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id: $
9 *
10 * Copyright (C) 2009 by Karl Kurbjun
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21#ifndef LCD_REMOTE_TARGET_H
22#define LCD_REMOTE_TARGET_H
23
24#define REMOTE_INIT_LCD 1
25#define REMOTE_DEINIT_LCD 2
26
27void lcd_remote_powersave(bool on);
28void lcd_remote_set_invert_display(bool yesno);
29//void lcd_remote_set_flip(bool yesno);
30
31bool remote_detect(void);
32void lcd_remote_init_device(void);
33void lcd_remote_on(void);
34void lcd_remote_off(void);
35void lcd_remote_update(void);
36void lcd_remote_update_rect(int, int, int, int);
37
38void _remote_backlight_on(void);
39void _remote_backlight_off(void);
40
41extern bool remote_initialized;
42
43void lcd_remote_sleep(void);
44
45#endif
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/power-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/power-mr500.c
index 9fd976ec10..777856dcfc 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/power-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/power-mr500.c
@@ -72,6 +72,7 @@ void power_off(void)
72{ 72{
73 /* turn off backlight and wait for 1 second */ 73 /* turn off backlight and wait for 1 second */
74 _backlight_off(); 74 _backlight_off();
75 lcd_remote_sleep();
75 lcd_sleep(); 76 lcd_sleep();
76 sleep(HZ); 77 sleep(HZ);
77 /* Hard shutdown */ 78 /* Hard shutdown */
diff --git a/firmware/target/arm/tms320dm320/uart-dm320.c b/firmware/target/arm/tms320dm320/uart-dm320.c
index 81076e81f2..5e2ad5e2be 100644
--- a/firmware/target/arm/tms320dm320/uart-dm320.c
+++ b/firmware/target/arm/tms320dm320/uart-dm320.c
@@ -123,7 +123,7 @@ void UART1(void)
123 panicf("UART1 buffer overflow"); 123 panicf("UART1 buffer overflow");
124 else 124 else
125 { 125 {
126 if(uart1_recieve_write==RECIEVE_RING_SIZE) 126 if(uart1_recieve_write>=RECIEVE_RING_SIZE)
127 uart1_recieve_write=0; 127 uart1_recieve_write=0;
128 128
129 uart1_recieve_buffer_ring[uart1_recieve_write] = IO_UART1_DTRR & 0xff; 129 uart1_recieve_buffer_ring[uart1_recieve_write] = IO_UART1_DTRR & 0xff;
diff --git a/tools/configure b/tools/configure
index 905a777b58..44ae3e524f 100755
--- a/tools/configure
+++ b/tools/configure
@@ -1459,6 +1459,8 @@ fi
1459 tool="$rootdir/tools/scramble -add=m500" 1459 tool="$rootdir/tools/scramble -add=m500"
1460 bmp2rb_mono="$rootdir/tools/bmp2rb -f 0" 1460 bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
1461 bmp2rb_native="$rootdir/tools/bmp2rb -f 4" 1461 bmp2rb_native="$rootdir/tools/bmp2rb -f 4"
1462 bmp2rb_remotemono="$rootdir/tools/bmp2rb -f 0"
1463 bmp2rb_remotenative="$rootdir/tools/bmp2rb -f 0"
1462 output="rockbox.mrobe500" 1464 output="rockbox.mrobe500"
1463 appextra="recorder:gui" 1465 appextra="recorder:gui"
1464 plugins="yes" 1466 plugins="yes"