Improve SDL main adding usb drivers
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
diff --git a/src/main/ps2/SDL_ps2_main.c b/src/main/ps2/SDL_ps2_main.c
index 1bc8154..0d97ed3 100644
--- a/src/main/ps2/SDL_ps2_main.c
+++ b/src/main/ps2/SDL_ps2_main.c
@@ -9,6 +9,11 @@
#include "SDL_main.h"
#include "SDL_error.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <kernel.h>
#include <sifrpc.h>
#include <iopcontrol.h>
#include <sbv_patches.h>
@@ -21,6 +26,13 @@
static void prepare_IOP()
{
+ SifInitRpc(0);
+ // #if !defined(DEBUG) || defined(BUILD_FOR_PCSX2)
+ /* Comment this line if you don't wanna debug the output */
+ while(!SifIopReset(NULL, 0)){};
+ // #endif
+
+ while(!SifIopSync()){};
SifInitRpc(0);
sbv_patch_enable_lmb();
sbv_patch_disable_prefix_check();
@@ -29,18 +41,41 @@ static void prepare_IOP()
static void init_drivers() {
init_fileXio_driver();
init_memcard_driver(true);
+ init_usb_driver(true);
}
static void deinit_drivers() {
+ deinit_usb_driver(true);
deinit_memcard_driver(true);
deinit_fileXio_driver();
}
+static void waitUntilDeviceIsReady(char *path)
+{
+ struct stat buffer;
+ int ret = -1;
+ int retries = 50;
+
+ while(ret != 0 && retries > 0)
+ {
+ ret = stat(path, &buffer);
+ /* Wait untill the device is ready */
+ nopdelay();
+
+ retries--;
+ }
+}
+
int main(int argc, char *argv[])
{
int res;
+ char cwd[FILENAME_MAX];
+
prepare_IOP();
init_drivers();
+
+ getcwd(cwd, sizeof(cwd));
+ waitUntilDeviceIsReady(cwd);
res = SDL_main(argc, argv);