Button driver for Logik DAX, plus some changes to the debug info displayed in the bootloader build.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15396 a1c6a512-1295-4272-9138-f99709370657
diff --git a/bootloader/telechips.c b/bootloader/telechips.c
index c1dcda0..83dad70 100644
--- a/bootloader/telechips.c
+++ b/bootloader/telechips.c
@@ -32,6 +32,7 @@
#include "fat.h"
#include "disk.h"
#include "font.h"
+#include "button.h"
#include "adc.h"
#include "adc-target.h"
#include "backlight-target.h"
@@ -46,8 +47,10 @@
void* main(void)
{
- unsigned short button;
- int gpioa;
+ int button;
+ int power_count = 0;
+ int count = 0;
+ bool do_power_off = false;
system_init();
adc_init();
@@ -56,17 +59,36 @@
__backlight_on();
- while(1) {
+ while(!do_power_off) {
line = 0;
printf("Hello World!");
- gpioa = GPIOA;
- printf("GPIOA: 0x%08x",gpioa);
+ button = button_read_device();
- button = adc_read(ADC_BUTTONS);
- printf("ADC[0]: 0x%04x",button);
+ /* Power-off if POWER button has been held for a long time
+ This loop is currently running at about 100 iterations/second
+ */
+ if (button & BUTTON_POWERPLAY) {
+ power_count++;
+ if (power_count > 200)
+ do_power_off = true;
+ } else {
+ power_count = 0;
+ }
+
+ printf("Btn: 0x%08x",button);
+
+ count++;
+ printf("Count: %d",count);
}
+ lcd_clear_display();
+ line = 0;
+ printf("POWER-OFF");
+
+ /* TODO: Power-off */
+ while(1);
+
return 0;
}
diff --git a/firmware/SOURCES b/firmware/SOURCES
index 5061ac7..94b9897 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -821,6 +821,7 @@
target/arm/tcc77x/adc-tcc77x.c
target/arm/tcc77x/ata-nand-tcc77x.c
target/arm/tcc77x/system-tcc77x.c
+target/arm/tcc77x/logikdax/button-logikdax.c
target/arm/tcc77x/logikdax/lcd-logikdax.c
target/arm/tcc77x/logikdax/power-logikdax.c
#endif /* SIMULATOR */
diff --git a/firmware/export/config-logikdax.h b/firmware/export/config-logikdax.h
index 384dac4..8c6509c 100644
--- a/firmware/export/config-logikdax.h
+++ b/firmware/export/config-logikdax.h
@@ -49,6 +49,9 @@
/* define this if you have RTC RAM available for settings */
//#define HAVE_RTC_RAM
+/* Define this if you have a software controlled poweroff */
+#define HAVE_SW_POWEROFF
+
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x8000
diff --git a/firmware/target/arm/tcc77x/logikdax/button-logikdax.c b/firmware/target/arm/tcc77x/logikdax/button-logikdax.c
new file mode 100644
index 0000000..8e4279b
--- /dev/null
+++ b/firmware/target/arm/tcc77x/logikdax/button-logikdax.c
@@ -0,0 +1,98 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2007 by Dave Chapman
+ *
+ * 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.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include "config.h"
+#include "cpu.h"
+#include "button.h"
+#include "adc.h"
+
+/*
+
+Results of button testing:
+
+HOLD: GPIOA & 0x0002 (0=pressed, 0x0002 = released)
+POWER: GPIOA & 0x8000 (0=pressed, 0x8000 = released)
+
+ADC[0]: (approx values)
+
+RIGHT - 0x37
+LEFT - 0x7f
+JOYSTICK PRESS - 0xc7
+UP - 0x11e
+DOWN - 0x184
+MODE - 0x1f0/0x1ff
+PRESET - 0x268/0x269
+REC - 0x2dd
+
+Values of ADC[0] tested in OF disassembly: 0x50, 0x96, 0xdc, 0x208, 0x384
+
+*/
+
+void button_init_device(void)
+{
+ /* Nothing to do */
+}
+
+int button_read_device(void)
+{
+ int btn = BUTTON_NONE;
+ int adc;
+
+ adc = adc_read(ADC_BUTTONS);
+
+ if (adc < 0x384) {
+ if (adc < 0x140) {
+ if (adc < 0x96) {
+ if (adc < 0x50) {
+ btn |= BUTTON_RIGHT; /* 0x00..0x4f */
+ } else {
+ btn |= BUTTON_LEFT; /* 0x50..0x95 */
+ }
+ } else {
+ if (adc < 0xe0) {
+ btn |= BUTTON_SELECT; /* 0x96..0xdf */
+ } else {
+ btn |= BUTTON_UP; /* 0xe0..0x13f */
+ }
+ }
+ } else {
+ if (adc < 0x208) {
+ if (adc < 0x1b0) {
+ btn |= BUTTON_DOWN; /* 0x140..0x1af */
+ } else {
+ btn |= BUTTON_MODE; /* 0x1b0..0x207 */
+ }
+ } else {
+ if (adc < 0x290) {
+ btn |= BUTTON_PRESET; /* 0x208..0x28f */
+ } else {
+ btn |= BUTTON_REC; /* 0x290..0x383 */
+ }
+ }
+ }
+ }
+
+ if (!(GPIOA & 0x2))
+ btn |= BUTTON_HOLD;
+
+ if (!(GPIOA & 0x8000))
+ btn |= BUTTON_POWERPLAY;
+
+ return btn;
+}
diff --git a/firmware/target/arm/tcc77x/logikdax/button-target.h b/firmware/target/arm/tcc77x/logikdax/button-target.h
index 2925a42..46997fc 100644
--- a/firmware/target/arm/tcc77x/logikdax/button-target.h
+++ b/firmware/target/arm/tcc77x/logikdax/button-target.h
@@ -23,29 +23,6 @@
#include <stdbool.h>
#include "config.h"
-/*
-
-Results of button testing:
-
-HOLD: GPIOA & 0x0002 (0=pressed, 0x0002 = released)
-POWER: GPIOA & 0x8000 (0=pressed, 0x8000 = released)
-
-ADC[0]: (approx values)
-
-RIGHT - 0x37
-LEFT - 0x7f
-JOYSTICK PRESS - 0xc7
-UP - 0x11e
-DOWN - 0x184
-MODE - 0x1f0/0x1ff
-PRESET - 0x268/0x269
-TIMESHIFT - 0x2dd
-
-Values of ADC[0] tested in OF disassembly: 0x50, 0x96, 0xdc, 0x208, 0x384
-
-*/
-
-
void button_init_device(void);
int button_read_device(void);
@@ -66,5 +43,9 @@
|BUTTON_RIGHT|BUTTON_UP|BUTTON_DOWN|BUTTON_SELECT)
#define BUTTON_REMOTE 0
+
+/* Software power-off */
+#define POWEROFF_BUTTON BUTTON_POWERPLAY
+#define POWEROFF_COUNT 40
#endif /* _BUTTON_TARGET_H_ */