#include <gccore.h>
#include <wiiuse/wpad.h>
#include <fat.h>
#include <iso9660.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <dirent.h>
static void *xfb = NULL;
static GXRModeObj *rmode = NULL;
const DISC_INTERFACE* usb = &__io_usbstorage;
int wait_button()
{
u32 pressed = 0;
while(1)
{
WPAD_ScanPads();
pressed = WPAD_ButtonsDown(0);
if (pressed) break;
VIDEO_WaitVSync();
}
return pressed;
}
static void initialise_video()
{
VIDEO_Init();
rmode = VIDEO_GetPreferredMode(NULL);
xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
console_init(xfb, 20, 20, rmode->fbWidth, rmode->xfbHeight, rmode->fbWidth * VI_DISPLAY_PIX_SZ);
VIDEO_Configure(rmode);
VIDEO_SetNextFramebuffer(xfb);
VIDEO_SetBlack(FALSE);
VIDEO_Flush();
VIDEO_WaitVSync();
if (rmode->viTVMode & VI_NON_INTERLACE) VIDEO_WaitVSync();
printf("\x1b[2;0H");
VIDEO_WaitVSync();
}
#define BUFFER_SIZE 0x8000
static u8 read_buffer[BUFFER_SIZE] __attribute__((aligned(32)));
//---------------------------------------------------------------------------------
int main(int argc, char **argv) {
//---------------------------------------------------------------------------------
int i;
u8 sector;
initialise_video();
WPAD_Init();
printf("Press A when ready...\n");
wait_button();
while (1) {
void USBStorage_Deinitialize();
printf("USBStorage_Deinitialize...\n");
USBStorage_Deinitialize();
printf("Done\n");
printf("startup...\n");
usb->startup();
printf("Done\n");
usleep(1000000);
printf("isInserted...\n");
if(usb->isInserted())
{
printf("TRUE\n");
} else {
printf("FALSE... exiting\n");
goto error;
}
sector = 16;
if (!usb->readSectors(sector, 1, read_buffer)) {
printf("readSectors failure reading sector %d\n", sector);
}
for(i=0; i<5; i++) {
if (!ISO9660_Mount()) {
printf("ISO9660_Mount failure... retry %d\n",i);
} else break;
usleep(1000000);
}
if (i==10) {
printf("ISO9660_Mount failure... exiting\n");
goto error;
}
DIR_ITER *pdir = NULL;
struct stat statbuf;
char filename[MAXPATHLEN];
pdir = diropen("dvd:/VIDEO_TS");
if (!pdir){
printf ("ERROR: diropen() failure; terminating\n");
goto error;
}
while (dirnext(pdir, filename, &statbuf)==0) {
if(statbuf.st_mode & _IFDIR) {
printf("%-8s %s\n", "<dir>", filename);
} else {
printf("%8lld %s\n", statbuf.st_size, filename);
}
}
dirclose(pdir);
error:
printf("Press A to retry, B to exit\n");
if (wait_button()==WPAD_BUTTON_B)
break;
}
return 0;
}