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 "adc.h"
|
||||
#include "adc-target.h"
|
||||
#include "backlight.h"
|
||||
#include "backlight-target.h"
|
||||
#include "panic.h"
|
||||
#include "power.h"
|
||||
|
@ -52,13 +53,92 @@ extern int line;
|
|||
|
||||
#define MAX_LOAD_SIZE (8*1024*1024) /* Arbitrary, but plenty. */
|
||||
|
||||
void* main(void)
|
||||
void show_debug_screen(void)
|
||||
{
|
||||
int button;
|
||||
int power_count = 0;
|
||||
int count = 0;
|
||||
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)
|
||||
int rc;
|
||||
unsigned char* loadbuffer = (unsigned char*)LOAD_ADDRESS;
|
||||
|
@ -108,85 +188,16 @@ void* main(void)
|
|||
{
|
||||
int(*kernel_entry)(void);
|
||||
|
||||
/* wait for button release to allow debug statememts to be read */
|
||||
while (button_read_device()) {};
|
||||
|
||||
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++)
|
||||
{
|
||||
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);
|
||||
/* allow entry to the debug screen if hold is on */
|
||||
if (!button_hold()) rc = kernel_entry();
|
||||
}
|
||||
|
||||
lcd_clear_display();
|
||||
line = 0;
|
||||
printf("POWER-OFF");
|
||||
|
||||
/* Power-off */
|
||||
power_off();
|
||||
|
||||
printf("(NOT) POWERED OFF");
|
||||
#endif
|
||||
show_debug_screen();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue