From 18239b831d466e4e3822528462e1a6c00d702e93 Mon Sep 17 00:00:00 2001 From: Björn Stenberg Date: Mon, 12 Aug 2002 12:44:18 +0000 Subject: Remote control support added git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1685 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/button.h | 4 ++ firmware/drivers/serial.c | 111 +++++++++++++++++++++++++++++++++------------- firmware/drivers/serial.h | 8 +--- 3 files changed, 84 insertions(+), 39 deletions(-) (limited to 'firmware/drivers') 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); #define BUTTON_LEFT 0x0040 #define BUTTON_RIGHT 0x0080 +/* remote control buttons */ +#define BUTTON_VOL_UP 0x1000 +#define BUTTON_VOL_DOWN 0x1001 + /* Button modifiers */ #define BUTTON_REPEAT 0x4000 #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 @@ * \/ \/ \/ \/ \/ * $Id$ * - * Copyright (C) 2002 by Alan Korr + * Copyright (C) 2002 by Alan Korr & Nick Robinson * * All files in this archive are subject to the GNU General Public License. * See the file COPYING in the source tree root for full license agreement. @@ -16,54 +16,101 @@ * KIND, either express or implied. * ****************************************************************************/ - +#include +#include "button.h" +#include "config.h" +#include "sh7034.h" +#include "system.h" +#include "kernel.h" +#include "backlight.h" +#include "adc.h" +#include "lcd.h" #include "serial.h" -static int serial_byte,serial_flag; +/* Recieved byte identifiers */ +#define PLAY 0xC1 +#define STOP 0xC2 +#define PREV 0xC4 +#define NEXT 0xC8 +#define VOLUP 0xD0 +#define VOLDN 0xE0 -void serial_putc (char byte) -{ - while (!(SSR1 & 0x80)); /* Wait for TDRE */ - TDR1 = byte; - SSR1 &= 0x80; /* Clear TDRE */ -} +void serial_setup (void) +{ + char dummy; + int i; + int j; + dummy = SSR1; + SSR1=0; + SMR1 = 0x00; + SCR1=0; + BRR1 = (FREQ/(32*9600))-1; + + /* let the hardware settle */ + for (i = 0; i < 1000; i++) + j++; + + SCR1 = 0x50; + + /* This enables the serial Rx interrupt*/ + IPRE = (IPRE & 0x0FFF) | 0x8000; /* Set to medium priority */ -void serial_puts (char const *string) -{ - int byte; - while ((byte = *string++)) - serial_putc (byte); } -int serial_getc( void ) +static void process_byte(char byte) { - int byte; - while (!serial_flag); - byte = serial_byte; - serial_flag = 0; - serial_putc (byte); - return byte; -} + int btn = 0; + + switch (byte) + { + case STOP: +#ifdef HAVE_RECORDER_KEYPAD + btn = BUTTON_OFF; +#else + btn = BUTTON_STOP; +#endif + break; + + case PLAY: + btn = BUTTON_PLAY; + break; + + case VOLUP: + btn = BUTTON_VOL_UP; + break; + + case VOLDN: + btn = BUTTON_VOL_DOWN; + break; + + case PREV: + btn = BUTTON_LEFT; + break; + + case NEXT: + btn = BUTTON_RIGHT; + break; + } -void serial_setup (int baudrate) -{ - SCR1 = 0; - SSR1 = 0; - SMR1 = 0; - BRR1 = (FREQ/(32*baudrate))-1; - SCR1 = 0x70; + if ( btn ) { + queue_post(&button_queue, btn, NULL); + backlight_on(); + queue_post(&button_queue, btn | BUTTON_REL, NULL); + } } #pragma interrupt void REI1 (void) { - SSR1 &= 0x10; /* Clear FER */ + SSR1 = SSR1 & ~0x10; /* Clear FER */ + SSR1 = SSR1 & ~0x40; /* Clear RDRF */ } #pragma interrupt void RXI1 (void) { + char serial_byte; serial_byte = RDR1; - serial_flag = 1; - SSR1 &= 0x40; /* Clear RDRF */ + SSR1 = SSR1 & ~0x40; /* Clear RDRF */ + process_byte(serial_byte); } 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 @@ #ifndef __SERIAL_H__ #define __SERIAL_H__ -#include -#include - -extern void serial_putc (char); -extern void serial_puts (char const *); -extern int serial_getc (void); -extern void serial_setup (int); +extern void serial_setup (void); #endif -- cgit v1.2.3