Changed the chainloader to load payloads named "BUTTON_NAME.bin", to remember which payload is which. Original idea and code by @habbbe (many thanks!)
This commit is contained in:
@@ -3,23 +3,36 @@
|
||||
#include "fatfs/ff.h"
|
||||
|
||||
#define PAYLOAD_ADDRESS 0x23F00000
|
||||
#define PAYLOADS_FOLDER "/aurei/payloads/"
|
||||
#define PAYLOAD_PATH(a) PAYLOADS_FOLDER a ".bin"
|
||||
#define LOAD_PAYLOAD(a) loadPayload(a "_*.bin")
|
||||
|
||||
static u32 loadPayload(const char *path)
|
||||
static u32 loadPayload(const char *pattern)
|
||||
{
|
||||
char path[30] = "/aurei/payloads";
|
||||
|
||||
DIR dir;
|
||||
FILINFO info = { .lfname = NULL };
|
||||
|
||||
FRESULT result = f_findfirst(&dir, &info, path, pattern);
|
||||
|
||||
f_closedir(&dir);
|
||||
|
||||
if(result != FR_OK || !info.fname[0])
|
||||
return 0;
|
||||
|
||||
path[15] = '/';
|
||||
u32 i;
|
||||
for(i = 0; info.fname[i]; i++)
|
||||
path[16 + i] = info.fname[i];
|
||||
path[16 + i] = '\0';
|
||||
|
||||
FIL payload;
|
||||
unsigned int br;
|
||||
|
||||
if(f_open(&payload, path, FA_READ) == FR_OK)
|
||||
{
|
||||
f_read(&payload, (void *)PAYLOAD_ADDRESS, f_size(&payload), &br);
|
||||
f_close(&payload);
|
||||
f_open(&payload, path, FA_READ);
|
||||
f_read(&payload, (void *)PAYLOAD_ADDRESS, f_size(&payload), &br);
|
||||
f_close(&payload);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void main(void)
|
||||
@@ -31,14 +44,13 @@ void main(void)
|
||||
//Get pressed buttons
|
||||
u32 pressed = HID_PAD;
|
||||
|
||||
if(((pressed & BUTTON_RIGHT) && loadPayload(PAYLOAD_PATH("right"))) ||
|
||||
((pressed & BUTTON_LEFT) && loadPayload(PAYLOAD_PATH("left"))) ||
|
||||
((pressed & BUTTON_UP) && loadPayload(PAYLOAD_PATH("up"))) ||
|
||||
((pressed & BUTTON_DOWN) && loadPayload(PAYLOAD_PATH("down"))) ||
|
||||
((pressed & BUTTON_X) && loadPayload(PAYLOAD_PATH("x"))) ||
|
||||
((pressed & BUTTON_Y) && loadPayload(PAYLOAD_PATH("y"))) ||
|
||||
((pressed & BUTTON_SELECT) && loadPayload(PAYLOAD_PATH("select"))) ||
|
||||
((pressed & BUTTON_R1) && loadPayload(PAYLOAD_PATH("r"))) ||
|
||||
loadPayload(PAYLOAD_PATH("default")))
|
||||
if(((pressed & BUTTON_RIGHT) && LOAD_PAYLOAD("right")) ||
|
||||
((pressed & BUTTON_LEFT) && LOAD_PAYLOAD("left")) ||
|
||||
((pressed & BUTTON_UP) && LOAD_PAYLOAD("up")) ||
|
||||
((pressed & BUTTON_DOWN) && LOAD_PAYLOAD("down")) ||
|
||||
((pressed & BUTTON_X) && LOAD_PAYLOAD("x")) ||
|
||||
((pressed & BUTTON_Y) && LOAD_PAYLOAD("y")) ||
|
||||
((pressed & BUTTON_R1) && LOAD_PAYLOAD("r")) ||
|
||||
LOAD_PAYLOAD("def"))
|
||||
((void (*)())PAYLOAD_ADDRESS)();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user