diff options
-rw-r--r-- | flash/bootloader/bootloader.c | 21 | ||||
-rw-r--r-- | flash/bootloader/bootloader.h | 24 |
2 files changed, 32 insertions, 13 deletions
diff --git a/flash/bootloader/bootloader.c b/flash/bootloader/bootloader.c index a6fe91d283..e5bab34abd 100644 --- a/flash/bootloader/bootloader.c +++ b/flash/bootloader/bootloader.c @@ -122,9 +122,10 @@ void PlatformInit(void) #if defined PLATFORM_PLAYER BRR1 = 0x0019; // 14400 Baud for monitor - if (FW_VERSION > 451) // "new" Player? - { - PBDR &= ~0x10; // set PB4 to 0 to power-up the harddisk early + PACR2 &= 0xFFFC; // GPIO for PA0 (charger detection, input by default) + if (FW_VERSION > 451 && (PADRL & 0x01)) + { // "new" Player and charger not plugged? + PBDR |= 0x10; // set PB4 to 1 to power-up the harddisk early PBIOR |= 0x10; // make PB4 an output } #elif defined PLATFORM_RECORDER @@ -255,7 +256,7 @@ void DecompressStart(tImage* pImage) pImage->pExecute(); } - +#ifdef USE_ADC int ReadADC(int channel) { // after channel 3, the ports wrap and get re-used @@ -267,12 +268,14 @@ int ReadADC(int channel) return (timeout == 0) ? -1 : *pResult>>6; } +#endif // This function is platform-dependent, // until I figure out how to distinguish at runtime. int ButtonPressed(void) // return 1,2,3 for F1,F2,F3, 0 if none pressed { +#ifdef USE_ADC int value = ReadADC(CHANNEL); if (value >= F1_LOWER && value <= F1_UPPER) // in range @@ -281,6 +284,16 @@ int ButtonPressed(void) // return 1,2,3 for F1,F2,F3, 0 if none pressed return 2; else if (value >= F3_LOWER && value <= F3_UPPER) // in range return 3; +#else + int value = PCDR; + + if (!(value & F1_MASK)) + return 1; + else if (!(value & F2_MASK)) + return 2; + else if (!(value & F3_MASK)) + return 3; +#endif return 0; } diff --git a/flash/bootloader/bootloader.h b/flash/bootloader/bootloader.h index 342ebb4991..fc6bcb1eed 100644 --- a/flash/bootloader/bootloader.h +++ b/flash/bootloader/bootloader.h @@ -34,14 +34,12 @@ typedef struct // resolve platform dependency of F1 button check #if defined PLATFORM_PLAYER -#define CHANNEL 1 -#define F1_LOWER 0 // this is the "Menu" key -#define F1_UPPER 384 -#define F2_LOWER 1024 // not present -#define F2_UPPER 1024 -#define F3_LOWER 1024 -#define F3_UPPER 1024 +#define F1_MASK 0x0001 // Player has no F1 button, so we use "-" +#define F2_MASK 0x0008 // Player has no F2 button, so we use "Play" +#define F3_MASK 0x0004 // Player has no F3 button, so we use "+" + #elif defined PLATFORM_RECORDER +#define USE_ADC #define CHANNEL 4 #define F1_LOWER 250 #define F1_UPPER 499 @@ -49,7 +47,9 @@ typedef struct #define F2_UPPER 699 #define F3_LOWER 900 #define F3_UPPER 1023 + #elif defined PLATFORM_FM +#define USE_ADC #define CHANNEL 4 #define F1_LOWER 150 #define F1_UPPER 384 @@ -57,18 +57,22 @@ typedef struct #define F2_UPPER 544 #define F3_LOWER 700 #define F3_UPPER 1023 + #elif defined PLATFORM_ONDIO +#define USE_ADC #define CHANNEL 4 #define F1_LOWER 0x2EF // Ondio has no F1 button, -#define F1_UPPER 0x3FF // so we use "Right". +#define F1_UPPER 0x3FF // so we use "Left". #define F2_LOWER 0x19D // Ondio has no F2 button, #define F2_UPPER 0x245 // so we use "Up". #define F3_LOWER 0x246 // Ondio has no F3 button, -#define F3_UPPER 0x2EE // so we use "Left". +#define F3_UPPER 0x2EE // so we use "Right". + #else #error ("No platform given!") #endif + #define FLASH_BASE 0x02000000 // start of the flash memory #define FW_VERSION *(unsigned short*)(FLASH_BASE + 0xFE) // firmware version @@ -80,7 +84,9 @@ void PlatformInit(void); void DramInit(void); int ucl_nrv2e_decompress_8(const UINT8 *src, UINT8 *dst, UINT32* dst_len); void DecompressStart(tImage* pImage); +#ifdef USE_ADC int ReadADC(int channel); +#endif int ButtonPressed(void); tImage* GetStartImage(int nPreferred); // test functions |