Fix Xduoo X3 bootloader build, and silence all warnings.
Also enable USB bootloader mode Change-Id: I73224c2e694b9941993c89a114b48d2a907e0dfb
This commit is contained in:
parent
35930ddb8d
commit
7e7ca0c858
4 changed files with 136 additions and 6 deletions
|
@ -44,6 +44,7 @@
|
||||||
extern void show_logo(void);
|
extern void show_logo(void);
|
||||||
extern void power_off(void);
|
extern void power_off(void);
|
||||||
|
|
||||||
|
#ifdef HAVE_BOOTLOADER_USB_MODE
|
||||||
static void show_splash(int timeout, const char *msg)
|
static void show_splash(int timeout, const char *msg)
|
||||||
{
|
{
|
||||||
reset_screen();
|
reset_screen();
|
||||||
|
@ -88,6 +89,7 @@ static void usb_mode(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int boot_rockbox(void)
|
static int boot_rockbox(void)
|
||||||
{
|
{
|
||||||
|
@ -95,11 +97,17 @@ static int boot_rockbox(void)
|
||||||
void (*kernel_entry)(void);
|
void (*kernel_entry)(void);
|
||||||
|
|
||||||
printf("Mounting disk...\n");
|
printf("Mounting disk...\n");
|
||||||
rc = disk_mount_all();
|
|
||||||
if (rc <= 0)
|
while((rc = disk_mount_all()) <= 0)
|
||||||
{
|
{
|
||||||
verbose = true;
|
verbose = true;
|
||||||
error(EDISK,rc, true);
|
#ifdef HAVE_BOOTLOADER_USB_MODE
|
||||||
|
error(EDISK, rc, false);
|
||||||
|
usb_start_monitoring();
|
||||||
|
usb_mode();
|
||||||
|
#else
|
||||||
|
error(EDISK, rc, true);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Loading firmware...\n");
|
printf("Loading firmware...\n");
|
||||||
|
@ -119,6 +127,7 @@ static int boot_rockbox(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
static void reset_configuration(void)
|
static void reset_configuration(void)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
@ -135,6 +144,7 @@ static void reset_configuration(void)
|
||||||
else
|
else
|
||||||
show_splash(HZ/2, "Couldn't reset configuration!");
|
show_splash(HZ/2, "Couldn't reset configuration!");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
@ -151,8 +161,6 @@ int main(void)
|
||||||
|
|
||||||
show_logo();
|
show_logo();
|
||||||
|
|
||||||
filesystem_init();
|
|
||||||
|
|
||||||
rc = storage_init();
|
rc = storage_init();
|
||||||
if(rc)
|
if(rc)
|
||||||
{
|
{
|
||||||
|
@ -160,6 +168,22 @@ int main(void)
|
||||||
error(EATA, rc, true);
|
error(EATA, rc, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filesystem_init();
|
||||||
|
|
||||||
|
#ifdef HAVE_BOOTLOADER_USB_MODE
|
||||||
|
button_init_device();
|
||||||
|
int btn = button_read_device();
|
||||||
|
|
||||||
|
usb_init();
|
||||||
|
|
||||||
|
/* Enter USB mode if USB is plugged and PLAY button is pressed */
|
||||||
|
if(btn & BUTTON_PLAY) {
|
||||||
|
usb_start_monitoring();
|
||||||
|
if(usb_detect() == USB_INSERTED)
|
||||||
|
usb_mode();
|
||||||
|
}
|
||||||
|
#endif /* HAVE_BOOTLOADER_USB_MODE */
|
||||||
|
|
||||||
/* Don't mount the disks yet, there could be file system/partition errors
|
/* Don't mount the disks yet, there could be file system/partition errors
|
||||||
which are fixable in USB mode */
|
which are fixable in USB mode */
|
||||||
|
|
||||||
|
|
|
@ -163,6 +163,7 @@
|
||||||
|
|
||||||
/* enable these for the experimental usb stack */
|
/* enable these for the experimental usb stack */
|
||||||
#define HAVE_USBSTACK
|
#define HAVE_USBSTACK
|
||||||
|
#define HAVE_BOOTLOADER_USB_MODE
|
||||||
|
|
||||||
/* Connect by events, not by tick polling */
|
/* Connect by events, not by tick polling */
|
||||||
#define USB_STATUS_BY_EVENT
|
#define USB_STATUS_BY_EVENT
|
||||||
|
|
|
@ -169,3 +169,106 @@ bool dbg_hw_info(void)
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define CFG_UART_BASE UART1_BASE /* Base of the UART channel */
|
||||||
|
|
||||||
|
void serial_putc (const char c)
|
||||||
|
{
|
||||||
|
volatile u8 *uart_lsr = (volatile u8 *)(CFG_UART_BASE + OFF_LSR);
|
||||||
|
volatile u8 *uart_tdr = (volatile u8 *)(CFG_UART_BASE + OFF_TDR);
|
||||||
|
|
||||||
|
if (c == '\n') serial_putc ('\r');
|
||||||
|
|
||||||
|
/* Wait for fifo to shift out some bytes */
|
||||||
|
while ( !((*uart_lsr & (UARTLSR_TDRQ | UARTLSR_TEMT)) == 0x60) );
|
||||||
|
|
||||||
|
*uart_tdr = (u8)c;
|
||||||
|
}
|
||||||
|
|
||||||
|
void serial_puts (const char *s)
|
||||||
|
{
|
||||||
|
while (*s) {
|
||||||
|
serial_putc (*s++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void serial_putsf(const char *format, ...)
|
||||||
|
{
|
||||||
|
static char printfbuf[256];
|
||||||
|
int len;
|
||||||
|
unsigned char *ptr;
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, format);
|
||||||
|
|
||||||
|
ptr = printfbuf;
|
||||||
|
len = vsnprintf(ptr, sizeof(printfbuf), format, ap);
|
||||||
|
va_end(ap);
|
||||||
|
(void)len;
|
||||||
|
|
||||||
|
serial_puts(ptr);
|
||||||
|
serial_putc('\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
void serial_put_hex(unsigned int d)
|
||||||
|
{
|
||||||
|
char c[12];
|
||||||
|
int i;
|
||||||
|
for(i = 0; i < 8;i++)
|
||||||
|
{
|
||||||
|
c[i] = (d >> ((7 - i) * 4)) & 0xf;
|
||||||
|
if(c[i] < 10)
|
||||||
|
c[i] += 0x30;
|
||||||
|
else
|
||||||
|
c[i] += (0x41 - 10);
|
||||||
|
}
|
||||||
|
c[8] = '\n';
|
||||||
|
c[9] = 0;
|
||||||
|
serial_puts(c);
|
||||||
|
|
||||||
|
}
|
||||||
|
void serial_put_dec(unsigned int d)
|
||||||
|
{
|
||||||
|
char c[16];
|
||||||
|
int i;
|
||||||
|
int j = 0;
|
||||||
|
int x = d;
|
||||||
|
|
||||||
|
while (x /= 10)
|
||||||
|
j++;
|
||||||
|
|
||||||
|
for (i = j; i >= 0; i--) {
|
||||||
|
c[i] = d % 10;
|
||||||
|
c[i] += 0x30;
|
||||||
|
d /= 10;
|
||||||
|
}
|
||||||
|
c[j + 1] = '\n';
|
||||||
|
c[j + 2] = 0;
|
||||||
|
serial_puts(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
void serial_dump_data(unsigned char* data, int len)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i=0; i<len; i++)
|
||||||
|
{
|
||||||
|
unsigned char a = ((*data)>>4) & 0xf;
|
||||||
|
if(a < 10)
|
||||||
|
a += 0x30;
|
||||||
|
else
|
||||||
|
a += (0x41 - 10);
|
||||||
|
serial_putc( a );
|
||||||
|
|
||||||
|
a = (*data) & 0xf;
|
||||||
|
if(a < 10)
|
||||||
|
a += 0x30;
|
||||||
|
else
|
||||||
|
a += (0x41 - 10);
|
||||||
|
serial_putc( a );
|
||||||
|
|
||||||
|
serial_putc( ' ' );
|
||||||
|
|
||||||
|
data++;
|
||||||
|
}
|
||||||
|
|
||||||
|
serial_putc( '\n' );
|
||||||
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
|
@ -86,11 +86,13 @@ bool button_hold(void)
|
||||||
|
|
||||||
int button_read_device(void)
|
int button_read_device(void)
|
||||||
{
|
{
|
||||||
|
#ifndef BOOTLOADER
|
||||||
static bool hold_button = false;
|
static bool hold_button = false;
|
||||||
bool hold_button_old;
|
bool hold_button_old;
|
||||||
|
|
||||||
hold_button_old = hold_button;
|
hold_button_old = hold_button;
|
||||||
hold_button = (__gpio_get_pin(PIN_BTN_HOLD) ? true : false);
|
hold_button = (__gpio_get_pin(PIN_BTN_HOLD) ? true : false);
|
||||||
|
#endif
|
||||||
|
|
||||||
int btn = BUTTON_NONE;
|
int btn = BUTTON_NONE;
|
||||||
bool gpio_btn = (__gpio_get_pin(PIN_BTN_POWER) ? false : true);
|
bool gpio_btn = (__gpio_get_pin(PIN_BTN_POWER) ? false : true);
|
||||||
|
|
Loading…
Reference in a new issue