forked from len0rd/rockbox
Make the Telechips bootloader slightly less messy, kill some warnings and allow entry to the bootloader debug screen via the D2's hold switch.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16879 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
edf6d90ca4
commit
3b46671a40
1 changed files with 88 additions and 77 deletions
|
@ -35,6 +35,7 @@
|
||||||
#include "button.h"
|
#include "button.h"
|
||||||
#include "adc.h"
|
#include "adc.h"
|
||||||
#include "adc-target.h"
|
#include "adc-target.h"
|
||||||
|
#include "backlight.h"
|
||||||
#include "backlight-target.h"
|
#include "backlight-target.h"
|
||||||
#include "panic.h"
|
#include "panic.h"
|
||||||
#include "power.h"
|
#include "power.h"
|
||||||
|
@ -52,13 +53,92 @@ extern int line;
|
||||||
|
|
||||||
#define MAX_LOAD_SIZE (8*1024*1024) /* Arbitrary, but plenty. */
|
#define MAX_LOAD_SIZE (8*1024*1024) /* Arbitrary, but plenty. */
|
||||||
|
|
||||||
void* main(void)
|
void show_debug_screen(void)
|
||||||
{
|
{
|
||||||
int button;
|
int button;
|
||||||
int power_count = 0;
|
int power_count = 0;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
bool do_power_off = false;
|
bool do_power_off = false;
|
||||||
|
|
||||||
|
while(!do_power_off) {
|
||||||
|
line = 0;
|
||||||
|
printf("Hello World!");
|
||||||
|
|
||||||
|
button = button_read_device();
|
||||||
|
|
||||||
|
/* Power-off if POWER button has been held for a long time
|
||||||
|
This loop is currently running at about 100 iterations/second
|
||||||
|
*/
|
||||||
|
if (button & POWEROFF_BUTTON) {
|
||||||
|
power_count++;
|
||||||
|
if (power_count > 200)
|
||||||
|
do_power_off = true;
|
||||||
|
} else {
|
||||||
|
power_count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Btn: 0x%08x",button);
|
||||||
|
|
||||||
|
#if defined(COWON_D2)
|
||||||
|
int i;
|
||||||
|
|
||||||
|
printf("GPIOA: 0x%08x",GPIOA);
|
||||||
|
printf("GPIOB: 0x%08x",GPIOB);
|
||||||
|
printf("GPIOC: 0x%08x",GPIOC);
|
||||||
|
printf("GPIOD: 0x%08x",GPIOD);
|
||||||
|
printf("GPIOE: 0x%08x",GPIOE);
|
||||||
|
|
||||||
|
for (i = 0; i<4; i++)
|
||||||
|
{
|
||||||
|
printf("ADC%d: 0x%04x",i,adc_read(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TODO: Move this stuff out to a touchscreen driver and establish
|
||||||
|
how such a beast is going to work. Since it needs I2C read/write,
|
||||||
|
it can't easily go on an interrupt-based tick task. */
|
||||||
|
{
|
||||||
|
unsigned char buf[] = { 0x2f, (0xE<<1) | 1, /* ADC start for X+Y */
|
||||||
|
0, 0, 0 };
|
||||||
|
int x,y;
|
||||||
|
i2c_write(0x10, buf, 2);
|
||||||
|
i2c_readmem(0x10, 0x2e, buf, 5);
|
||||||
|
x = (buf[2] << 2) | (buf[3] & 3);
|
||||||
|
y = (buf[4] << 2) | ((buf[3] & 0xC) >> 2);
|
||||||
|
printf("X: 0x%03x Y: 0x%03x",x,y);
|
||||||
|
|
||||||
|
x = (x*LCD_WIDTH) / 1024;
|
||||||
|
y = (y*LCD_HEIGHT) / 1024;
|
||||||
|
lcd_hline(x-5, x+5, y);
|
||||||
|
lcd_vline(x, y-5, y+5);
|
||||||
|
|
||||||
|
buf[0] = 0x2f;
|
||||||
|
buf[1] = (0xF<<1) | 1; /* ADC start for P1+P2 */
|
||||||
|
i2c_write(0x10, buf, 2);
|
||||||
|
i2c_readmem(0x10, 0x2e, buf, 5);
|
||||||
|
x = (buf[2] << 2) | (buf[3] & 3);
|
||||||
|
y = (buf[4] << 2) | ((buf[3] & 0xC) >> 2);
|
||||||
|
printf("P1: 0x%03x P2: 0x%03x",x,y);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
count++;
|
||||||
|
printf("Count: %d",count);
|
||||||
|
}
|
||||||
|
|
||||||
|
lcd_clear_display();
|
||||||
|
line = 0;
|
||||||
|
printf("POWER-OFF");
|
||||||
|
|
||||||
|
/* Power-off */
|
||||||
|
power_off();
|
||||||
|
|
||||||
|
printf("(NOT) POWERED OFF");
|
||||||
|
while (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void* main(void)
|
||||||
|
{
|
||||||
#if defined(COWON_D2) && defined(TCCBOOT)
|
#if defined(COWON_D2) && defined(TCCBOOT)
|
||||||
int rc;
|
int rc;
|
||||||
unsigned char* loadbuffer = (unsigned char*)LOAD_ADDRESS;
|
unsigned char* loadbuffer = (unsigned char*)LOAD_ADDRESS;
|
||||||
|
@ -108,85 +188,16 @@ void* main(void)
|
||||||
{
|
{
|
||||||
int(*kernel_entry)(void);
|
int(*kernel_entry)(void);
|
||||||
|
|
||||||
|
/* wait for button release to allow debug statememts to be read */
|
||||||
|
while (button_read_device()) {};
|
||||||
|
|
||||||
kernel_entry = (void*) loadbuffer;
|
kernel_entry = (void*) loadbuffer;
|
||||||
rc = kernel_entry();
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
|
|
||||||
while(!do_power_off) {
|
|
||||||
line = 0;
|
|
||||||
printf("Hello World!");
|
|
||||||
|
|
||||||
button = button_read_device();
|
|
||||||
|
|
||||||
/* Power-off if POWER button has been held for a long time
|
|
||||||
This loop is currently running at about 100 iterations/second
|
|
||||||
*/
|
|
||||||
if (button & POWEROFF_BUTTON) {
|
|
||||||
power_count++;
|
|
||||||
if (power_count > 200)
|
|
||||||
do_power_off = true;
|
|
||||||
} else {
|
|
||||||
power_count = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("Btn: 0x%08x",button);
|
|
||||||
|
|
||||||
#if defined(COWON_D2)
|
|
||||||
int i;
|
|
||||||
|
|
||||||
printf("GPIOA: 0x%08x",GPIOA);
|
|
||||||
printf("GPIOB: 0x%08x",GPIOB);
|
|
||||||
printf("GPIOC: 0x%08x",GPIOC);
|
|
||||||
printf("GPIOD: 0x%08x",GPIOD);
|
|
||||||
printf("GPIOE: 0x%08x",GPIOE);
|
|
||||||
|
|
||||||
for (i = 0; i<4; i++)
|
/* allow entry to the debug screen if hold is on */
|
||||||
{
|
if (!button_hold()) rc = kernel_entry();
|
||||||
printf("ADC%d: 0x%04x",i,adc_read(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TODO: Move this stuff out to a touchscreen driver and establish
|
|
||||||
how such a beast is going to work. Since it needs I2C read/write,
|
|
||||||
it can't easily go on an interrupt-based tick task. */
|
|
||||||
{
|
|
||||||
unsigned char buf[] = { 0x2f, (0xE<<1) | 1, /* ADC start for X+Y */
|
|
||||||
0, 0, 0 };
|
|
||||||
int x,y;
|
|
||||||
i2c_write(0x10, buf, 2);
|
|
||||||
i2c_readmem(0x10, 0x2e, buf, 5);
|
|
||||||
x = (buf[2] << 2) | (buf[3] & 3);
|
|
||||||
y = (buf[4] << 2) | ((buf[3] & 0xC) >> 2);
|
|
||||||
printf("X: 0x%03x Y: 0x%03x",x,y);
|
|
||||||
|
|
||||||
x = (x*LCD_WIDTH) / 1024;
|
|
||||||
y = (y*LCD_HEIGHT) / 1024;
|
|
||||||
lcd_hline(x-5, x+5, y);
|
|
||||||
lcd_vline(x, y-5, y+5);
|
|
||||||
|
|
||||||
buf[0] = 0x2f;
|
|
||||||
buf[1] = (0xF<<1) | 1; /* ADC start for P1+P2 */
|
|
||||||
i2c_write(0x10, buf, 2);
|
|
||||||
i2c_readmem(0x10, 0x2e, buf, 5);
|
|
||||||
x = (buf[2] << 2) | (buf[3] & 3);
|
|
||||||
y = (buf[4] << 2) | ((buf[3] & 0xC) >> 2);
|
|
||||||
printf("P1: 0x%03x P2: 0x%03x",x,y);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
count++;
|
|
||||||
printf("Count: %d",count);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lcd_clear_display();
|
|
||||||
line = 0;
|
|
||||||
printf("POWER-OFF");
|
|
||||||
|
|
||||||
/* Power-off */
|
|
||||||
power_off();
|
|
||||||
|
|
||||||
printf("(NOT) POWERED OFF");
|
|
||||||
#endif
|
#endif
|
||||||
|
show_debug_screen();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue