summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/main.c6
-rw-r--r--apps/wps.c8
-rw-r--r--firmware/drivers/button.h4
-rw-r--r--firmware/drivers/serial.c111
-rw-r--r--firmware/drivers/serial.h8
5 files changed, 97 insertions, 40 deletions
diff --git a/apps/main.c b/apps/main.c
index 887c85b64e..307dd71e3d 100644
--- a/apps/main.c
+++ b/apps/main.c
@@ -36,6 +36,9 @@
36#ifndef SIMULATOR 36#ifndef SIMULATOR
37#include "dmalloc.h" 37#include "dmalloc.h"
38#include "bmalloc.h" 38#include "bmalloc.h"
39#ifndef DEBUG
40#include "serial.h"
41#endif
39#endif 42#endif
40#include "mpeg.h" 43#include "mpeg.h"
41#include "main_menu.h" 44#include "main_menu.h"
@@ -50,6 +53,7 @@
50#include "unicode.h" 53#include "unicode.h"
51#endif 54#endif
52 55
56
53char appsversion[]=APPSVERSION; 57char appsversion[]=APPSVERSION;
54 58
55void init(void); 59void init(void);
@@ -98,6 +102,8 @@ void init(void)
98 102
99#ifdef DEBUG 103#ifdef DEBUG
100 debug_init(); 104 debug_init();
105#else
106 serial_setup();
101#endif 107#endif
102 set_irq_level(0); 108 set_irq_level(0);
103 109
diff --git a/apps/wps.c b/apps/wps.c
index 4de87383d3..3137a265a9 100644
--- a/apps/wps.c
+++ b/apps/wps.c
@@ -296,6 +296,9 @@ int wps_show(void)
296#ifdef HAVE_RECORDER_KEYPAD 296#ifdef HAVE_RECORDER_KEYPAD
297 case BUTTON_UP: 297 case BUTTON_UP:
298 case BUTTON_UP | BUTTON_REPEAT: 298 case BUTTON_UP | BUTTON_REPEAT:
299#else
300 case BUTTON_VOL_UP:
301#endif
299 if (keys_locked) 302 if (keys_locked)
300 { 303 {
301 display_keylock_text(keys_locked); 304 display_keylock_text(keys_locked);
@@ -310,8 +313,12 @@ int wps_show(void)
310 status_draw(); 313 status_draw();
311 break; 314 break;
312 315
316#ifdef HAVE_RECORDER_KEYPAD
313 case BUTTON_DOWN: 317 case BUTTON_DOWN:
314 case BUTTON_DOWN | BUTTON_REPEAT: 318 case BUTTON_DOWN | BUTTON_REPEAT:
319#else
320 case BUTTON_VOL_DOWN:
321#endif
315 if (keys_locked) 322 if (keys_locked)
316 { 323 {
317 display_keylock_text(keys_locked); 324 display_keylock_text(keys_locked);
@@ -325,7 +332,6 @@ int wps_show(void)
325 mpeg_sound_set(SOUND_VOLUME, global_settings.volume); 332 mpeg_sound_set(SOUND_VOLUME, global_settings.volume);
326 status_draw(); 333 status_draw();
327 break; 334 break;
328#endif
329 335
330 case BUTTON_LEFT: 336 case BUTTON_LEFT:
331 if (keys_locked) 337 if (keys_locked)
diff --git a/firmware/drivers/button.h b/firmware/drivers/button.h
index 035fedd739..6563f1bc41 100644
--- a/firmware/drivers/button.h
+++ b/firmware/drivers/button.h
@@ -38,6 +38,10 @@ int button_set_release(int newmask);
38#define BUTTON_LEFT 0x0040 38#define BUTTON_LEFT 0x0040
39#define BUTTON_RIGHT 0x0080 39#define BUTTON_RIGHT 0x0080
40 40
41/* remote control buttons */
42#define BUTTON_VOL_UP 0x1000
43#define BUTTON_VOL_DOWN 0x1001
44
41/* Button modifiers */ 45/* Button modifiers */
42#define BUTTON_REPEAT 0x4000 46#define BUTTON_REPEAT 0x4000
43#define BUTTON_REL 0x8000 47#define BUTTON_REL 0x8000
diff --git a/firmware/drivers/serial.c b/firmware/drivers/serial.c
index ca69147cd3..ee83e2a474 100644
--- a/firmware/drivers/serial.c
+++ b/firmware/drivers/serial.c
@@ -7,7 +7,7 @@
7 * \/ \/ \/ \/ \/ 7 * \/ \/ \/ \/ \/
8 * $Id$ 8 * $Id$
9 * 9 *
10 * Copyright (C) 2002 by Alan Korr 10 * Copyright (C) 2002 by Alan Korr & Nick Robinson
11 * 11 *
12 * All files in this archive are subject to the GNU General Public License. 12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement. 13 * See the file COPYING in the source tree root for full license agreement.
@@ -16,54 +16,101 @@
16 * KIND, either express or implied. 16 * KIND, either express or implied.
17 * 17 *
18 ****************************************************************************/ 18 ****************************************************************************/
19 19#include <stdlib.h>
20#include "button.h"
21#include "config.h"
22#include "sh7034.h"
23#include "system.h"
24#include "kernel.h"
25#include "backlight.h"
26#include "adc.h"
27#include "lcd.h"
20#include "serial.h" 28#include "serial.h"
21 29
22static int serial_byte,serial_flag; 30/* Recieved byte identifiers */
31#define PLAY 0xC1
32#define STOP 0xC2
33#define PREV 0xC4
34#define NEXT 0xC8
35#define VOLUP 0xD0
36#define VOLDN 0xE0
23 37
24void serial_putc (char byte) 38void serial_setup (void)
25{ 39{
26 while (!(SSR1 & 0x80)); /* Wait for TDRE */ 40 char dummy;
27 TDR1 = byte; 41 int i;
28 SSR1 &= 0x80; /* Clear TDRE */ 42 int j;
29} 43 dummy = SSR1;
44 SSR1=0;
45 SMR1 = 0x00;
46 SCR1=0;
47 BRR1 = (FREQ/(32*9600))-1;
48
49 /* let the hardware settle */
50 for (i = 0; i < 1000; i++)
51 j++;
52
53 SCR1 = 0x50;
54
55 /* This enables the serial Rx interrupt*/
56 IPRE = (IPRE & 0x0FFF) | 0x8000; /* Set to medium priority */
30 57
31void serial_puts (char const *string)
32{
33 int byte;
34 while ((byte = *string++))
35 serial_putc (byte);
36} 58}
37 59
38int serial_getc( void ) 60static void process_byte(char byte)
39{ 61{
40 int byte; 62 int btn = 0;
41 while (!serial_flag); 63
42 byte = serial_byte; 64 switch (byte)
43 serial_flag = 0; 65 {
44 serial_putc (byte); 66 case STOP:
45 return byte; 67#ifdef HAVE_RECORDER_KEYPAD
46} 68 btn = BUTTON_OFF;
69#else
70 btn = BUTTON_STOP;
71#endif
72 break;
73
74 case PLAY:
75 btn = BUTTON_PLAY;
76 break;
77
78 case VOLUP:
79 btn = BUTTON_VOL_UP;
80 break;
81
82 case VOLDN:
83 btn = BUTTON_VOL_DOWN;
84 break;
85
86 case PREV:
87 btn = BUTTON_LEFT;
88 break;
89
90 case NEXT:
91 btn = BUTTON_RIGHT;
92 break;
93 }
47 94
48void serial_setup (int baudrate) 95 if ( btn ) {
49{ 96 queue_post(&button_queue, btn, NULL);
50 SCR1 = 0; 97 backlight_on();
51 SSR1 = 0; 98 queue_post(&button_queue, btn | BUTTON_REL, NULL);
52 SMR1 = 0; 99 }
53 BRR1 = (FREQ/(32*baudrate))-1;
54 SCR1 = 0x70;
55} 100}
56 101
57#pragma interrupt 102#pragma interrupt
58void REI1 (void) 103void REI1 (void)
59{ 104{
60 SSR1 &= 0x10; /* Clear FER */ 105 SSR1 = SSR1 & ~0x10; /* Clear FER */
106 SSR1 = SSR1 & ~0x40; /* Clear RDRF */
61} 107}
62 108
63#pragma interrupt 109#pragma interrupt
64void RXI1 (void) 110void RXI1 (void)
65{ 111{
112 char serial_byte;
66 serial_byte = RDR1; 113 serial_byte = RDR1;
67 serial_flag = 1; 114 SSR1 = SSR1 & ~0x40; /* Clear RDRF */
68 SSR1 &= 0x40; /* Clear RDRF */ 115 process_byte(serial_byte);
69} 116}
diff --git a/firmware/drivers/serial.h b/firmware/drivers/serial.h
index eac02e42e4..d13b785b9d 100644
--- a/firmware/drivers/serial.h
+++ b/firmware/drivers/serial.h
@@ -20,12 +20,6 @@
20#ifndef __SERIAL_H__ 20#ifndef __SERIAL_H__
21#define __SERIAL_H__ 21#define __SERIAL_H__
22 22
23#include <sh7034.h> 23extern void serial_setup (void);
24#include <system.h>
25
26extern void serial_putc (char);
27extern void serial_puts (char const *);
28extern int serial_getc (void);
29extern void serial_setup (int);
30 24
31#endif 25#endif