Skip to content

Commit 8254bad

Browse files
committed
implement some stuff on MMCEManager for tests
1 parent 43a7721 commit 8254bad

File tree

1 file changed

+69
-26
lines changed

1 file changed

+69
-26
lines changed

src/main.c

Lines changed: 69 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -376,48 +376,79 @@ static void Show_About_uLE(void)
376376
}
377377

378378
#ifdef MMCE
379+
#define VMC_NORMAL 0
380+
#define VMC_BOOTCARD 1
381+
382+
#define SET_SPECIFIC 0
383+
#define SET_NEXT_CARD 1
384+
#define SET_PREV_CARD 2
385+
#define BUILD_SETCARD(param, type, mode, num) param = type << 24; param |= mode << 16; param |= num;
386+
387+
enum mmceman_cmds {
388+
MMCE_CMD_PING = 0x1,
389+
MMCE_CMD_GET_STATUS,
390+
MMCE_CMD_GET_CARD,
391+
MMCE_CMD_SET_CARD,
392+
MMCE_CMD_GET_CHANNEL,
393+
MMCE_CMD_SET_CHANNEL,
394+
MMCE_CMD_GET_GAMEID,
395+
MMCE_CMD_SET_GAMEID,
396+
MMCE_CMD_RESET,
397+
MMCE_SETTINGS_ACK_WAIT_CYCLES,
398+
MMCE_SETTINGS_SET_ALARMS,
399+
};
400+
401+
#define MAX_GAMEID_LEN 256
379402
struct cardinfo_t {
380403
char* product;
381404
int revision;
382405
int protocol;
383406
int validcard;
407+
char gid[MAX_GAMEID_LEN];
384408
};
385-
static void Show_MMCEManager(void)
386-
{
387-
int event = 1, post_event = 0, curcard = 0, res, i;
388-
int hpos[2] = {2, 38};
389-
char TextRow[256];
390-
char* sd2psx = "SD2PSX";
391-
char* mcpro = "MemCardPro2";
392-
char* unk = LNG(Unknown);
393-
struct cardinfo_t CardInfo[2] = {
394-
{unk, 0, 0, FALSE},
395-
{unk, 0, 0, FALSE},
396-
};
397-
409+
410+
const char *mmce_product_ids[] = {"Unknown", "SD2PSX", "MemCard PRO2", "PicoMemcard+", "PicoMemcardZero"};
411+
static void refresh_mmceman_data(struct cardinfo_t* CardInfo) {
398412
char* mmce = "mmce0:";
413+
int i, res;
399414
for (i = 0; i < 2; i++) {
400415
mmce[4] = '0'+i;
401-
res = fileXioDevctl(mmce, 0x1 /*MMCE_CMD_PING*/, NULL, 0, NULL, 0);
416+
res = fileXioDevctl(mmce, MMCE_CMD_PING, NULL, 0, NULL, 0);
402417
if (res != -1) {
403-
if (((res & 0xFF00) >> 8) == 1) {
404-
CardInfo[i].product = sd2psx;
405-
} else if (((res & 0xFF00) >> 8) == 2) {
406-
CardInfo[i].product = mcpro;
407-
} else {
408-
CardInfo[i].product = unk;
409-
}
418+
if (((res & 0xFF00) >> 8) > 0 && ((res & 0xFF00) >> 8) < 5) {
419+
CardInfo[i].product = mmce_product_ids[((res & 0xFF00) >> 8)];
420+
} else {
421+
CardInfo[i].product = LNG(Unknown);
422+
}
410423
CardInfo[i].revision = (res & 0xFF);
411424
CardInfo[i].protocol = ((res & 0xFF0000) >> 16);
412425
CardInfo[i].validcard = TRUE;
413-
} else CardInfo[i].validcard = FALSE;
426+
if (fileXioDevctl(mmce, MMCE_CMD_GET_GAMEID, NULL, 0, &CardInfo[i].gid, MAX_GAMEID_LEN) == -1) {
427+
strncpy(CardInfo[i].gid, LNG(Unknown), MAX_GAMEID_LEN);
428+
}
429+
} else CardInfo[i].validcard = FALSE;
414430
}
431+
}
432+
433+
static void Show_MMCEManager(void)
434+
{
435+
int event = 1, post_event = 0, curcard = 0, res, i;
436+
int hpos[2] = {2, 40};
437+
char TextRow[256];
438+
char* unk = LNG(Unknown);
439+
struct cardinfo_t CardInfo[2] = {
440+
{LNG(Unknown), -1, -1, FALSE, ""},
441+
{LNG(Unknown), -1, -1, FALSE, ""},
442+
};
443+
char* mmce = "mmce0:";
444+
refresh_mmceman_data(CardInfo);
415445

416446
//----- Start of event loop -----
417447
while (1) {
418448
//Pad response section
419449
waitAnyPadReady();
420450
if (readpad() && new_pad) {
451+
mmce[4] = '0'+curcard;//update the devctl target on every new pad to avoid surprises
421452
if (new_pad & PAD_CIRCLE) {
422453
event |= 2;
423454
if (setting->GUI_skin[0]) {
@@ -428,8 +459,19 @@ static void Show_MMCEManager(void)
428459
} else if (new_pad & PAD_CROSS) {
429460
curcard ^= 1;
430461
event |= 2;
462+
} else if (new_pad & PAD_R1 || new_pad & PAD_R2) {
463+
u32 param;
464+
BUILD_SETCARD(param, VMC_NORMAL, (new_pad & PAD_R1) ? SET_PREV_CARD : SET_NEXT_CARD, 0)
465+
res = fileXioDevctl(mmce, MMCE_CMD_SET_CARD, &param, sizeof(param), NULL, 0);
466+
event |= 2;
467+
} else if (new_pad & PAD_SELECT) {
468+
refresh_mmceman_data(CardInfo);
469+
event |= 2;
431470
} else if (new_pad & PAD_START) {
432-
//SET GAMEID
471+
if (keyboard(TextRow, 36) > 0) {
472+
fileXioDevctl(mmce, MMCE_CMD_SET_GAMEID, TextRow, 255, NULL, 0);
473+
event |= 2;
474+
}
433475
}
434476

435477
}
@@ -441,22 +483,23 @@ static void Show_MMCEManager(void)
441483
((SCREEN_WIDTH-LINE_THICKNESS) / 2) , Frame_start_y,
442484
((SCREEN_WIDTH-LINE_THICKNESS) / 2) +LINE_THICKNESS, Frame_end_y);
443485
//PrintPos(03, 10, "Device Info:", COLOR_TEXT);
444-
for (i = 0; i < 2; i++)
445-
{
486+
for (i = 0; i < 2; i++) {
446487
sprintf(TextRow, "mmce%d: ", i);
447488
PrintPos(01, hpos[i], TextRow, curcard==i? COLOR_SELECT : COLOR_TEXT);
448489
if (CardInfo[i].validcard) {
449490
sprintf(TextRow, " Device: %s", CardInfo[i].product);
450491
PrintPos(02, hpos[i], TextRow, COLOR_TEXT);
451492
sprintf(TextRow, " Revision: %d, Protocol: %d", CardInfo[i].revision, CardInfo[i].protocol);
452493
PrintPos(03, hpos[i], TextRow, COLOR_TEXT);
494+
snprintf(TextRow, 36, " GameId '%s'", CardInfo[i].gid);
495+
PrintPos(04, hpos[i], TextRow, COLOR_TEXT);
453496
} else {
454497
sprintf(TextRow, "%s", "No device Found");
455498
PrintPos(02, hpos[i], TextRow, COLOR_GRAPH3);
456499
}
457500
}
458501

459-
setScrTmp("MMCE Manager", "R1/R2:card L1/L2:chan START:SetGameID "FNCH_CROSS":card slot "FNCH_CIRCLE":Back");
502+
setScrTmp("MMCE Manager", "R1/R2:card L1/L2:chan START:SetGameID "FNCH_CROSS":card slot "FNCH_CIRCLE":Back SELECT:Refresh");
460503
}
461504
drawScr();
462505
post_event = event;

0 commit comments

Comments
 (0)