Page 1 of 1

Building mass_usb

Posted: Thu Jul 29, 2004 10:14 pm
by daveb
Hi
I'm having trouble building mass_usb.
I guess i dont know which version of PS2SDK or PS2LIB to use.

For example
the file usb_mass/iop/usb_mass.c uses
fileio_driver a struct that seems to be in the PS2LIB ioman.h but not the PS2SDK version

but usb_mass.c also uses iop_thread_t which seems to be in PS2SDK thbase.h but not the PS2LIB version.

So I dont know which to use to build mass_usb.

or have i just missed something very basic?

Posted: Fri Jul 30, 2004 5:09 am
by ole
Uff,
Sorry to all - It's my mess.
I use ps2lib, but for thread and semaphores I used examples from ps2sdk.
I will correct it asap.

Posted: Fri Jul 30, 2004 5:10 am
by fluke
I ran into the same sort of problem. I addressed the ioman.h issue by upgraded to ps2sdk to v2.2 which does provide the fileio_driver struct. But in ps2sdk v2.2, the thbase.h structures change. Here is my patch which I used to get the mass driver to compile. I even got the test example to compile and run. It is just that the example never did anything useful, except to display the others to hit one of two buttons (after pressing either button, it just seems to hang). Maybe someone with a better understanding of IOP threading can tell what I screwed up.

diff -ru usb_mass/iop/fat_driver.c usb_mass-22/iop/fat_driver.c
--- usb_mass/iop/fat_driver.c 2004-07-25 21:49:53.000000000 -0500
+++ usb_mass-22/iop/fat_driver.c 2004-07-25 21:50:32.000000000 -0500
@@ -18,7 +18,7 @@

#ifndef _PS2_
#include <stdlib.h>
-#include <memory.h>
+/* #include <memory.h> */
#endif

#include "scache.h"
diff -ru usb_mass/iop/Makefile usb_mass-22/iop/Makefile
--- usb_mass/iop/Makefile 2004-07-10 05:40:52.000000000 -0500
+++ usb_mass-22/iop/Makefile 2004-07-25 21:22:49.000000000 -0500
@@ -7,5 +7,5 @@
clean:
rm -f *.elf *.o *.a *.irx

-include ../../../Makefile.pref
-include ../../../Makefile.iopglobal
+include ../Makefile.pref
+include ../Makefile.iopglobal
diff -ru usb_mass/iop/mass_stor.c usb_mass-22/iop/mass_stor.c
--- usb_mass/iop/mass_stor.c 2004-07-25 21:49:53.000000000 -0500
+++ usb_mass-22/iop/mass_stor.c 2004-07-25 21:50:32.000000000 -0500
@@ -203,12 +203,12 @@
void set_configuration(mass_dev* dev, int configNumber) {
int ret;
int semh;
- iop_sema_t s;
+ struct t_sema s;

- s.initial = 0;
- s.max = 1;
+ s.init_count = 1;
+ s.max_count = 1;
s.option = 0;
- s.attr = 0;
+ s.attr = 1;
semh = CreateSema(&s);


@@ -229,12 +229,12 @@
void set_interface(mass_dev* dev, int interface, int altSetting) {
int ret;
int semh;
- iop_sema_t s;
+ struct t_sema s;

- s.initial = 0;
- s.max = 1;
+ s.init_count = 1;
+ s.max_count = 1;
s.option = 0;
- s.attr = 0;
+ s.attr = 1;
semh = CreateSema(&s);


@@ -255,12 +255,12 @@
void set_device_feature(mass_dev* dev, int feature) {
int ret;
int semh;
- iop_sema_t s;
+ struct t_sema s;

- s.initial = 0;
- s.max = 1;
+ s.init_count = 1;
+ s.max_count = 1;
s.option = 0;
- s.attr = 0;
+ s.attr = 1;
semh = CreateSema(&s);


@@ -281,13 +281,13 @@
void usb_bulk_clear_halt(mass_dev* dev, int direction) {
int ret;
int semh;
- iop_sema_t s;
+ struct t_sema s;
int endpoint;

- s.initial = 0;
- s.max = 1;
+ s.init_count = 1;
+ s.max_count = 1;
s.option = 0;
- s.attr = 0;
+ s.attr = 1;

if (direction = 0) {
endpoint = dev->bulkEpOAddr;
@@ -319,12 +319,12 @@
void usb_bulk_reset(mass_dev* dev, int mode) {
int ret;
int semh;
- iop_sema_t s;
+ struct t_sema s;

- s.initial = 0;
- s.max = 1;
+ s.init_count = 1;
+ s.max_count = 1;
s.option = 0;
- s.attr = 0;
+ s.attr = 1;
semh = CreateSema(&s);

//Call Bulk only mass storage reset
@@ -362,13 +362,13 @@

int usb_bulk_status(mass_dev* dev, csw_packet* csw, int tag) {
int ret;
- iop_sema_t s;
+ struct t_sema s;
int semh;

- s.initial = 0;
- s.max = 1;
+ s.init_count = 1;
+ s.max_count = 1;
s.option = 0;
- s.attr = 0;
+ s.attr = 1;
semh = CreateSema(&s);

initCSWPacket(csw);
@@ -420,13 +420,13 @@

void usb_bulk_command(mass_dev* dev, cbw_packet* packet ) {
int ret;
- iop_sema_t s;
+ struct t_sema s;
int semh;

- s.initial = 0;
- s.max = 1;
+ s.init_count = 1;
+ s.max_count = 1;
s.option = 0;
- s.attr = 0;
+ s.attr = 1;
semh = CreateSema(&s);

ret = UsbBulkTransfer(
@@ -453,13 +453,13 @@
int blockSize = transferSize;
int offset = 0;

- iop_sema_t s;
+ struct t_sema s;
int semh;

- s.initial = 0;
- s.max = 1;
+ s.init_count = 1;
+ s.max_count = 1;
s.option = 0;
- s.attr = 0;
+ s.attr = 1;
semh = CreateSema(&s);

while (transferSize > 0) {
diff -ru usb_mass/iop/scache.c usb_mass-22/iop/scache.c
--- usb_mass/iop/scache.c 2004-07-25 21:49:53.000000000 -0500
+++ usb_mass-22/iop/scache.c 2004-07-25 21:50:32.000000000 -0500
@@ -24,10 +24,10 @@
#else
#include <stdio.h>
#include <stdlib.h>
-#include <memory.h>
+/* #include <memory.h> */
#define MEMCPY(a,b,c) memcpy((a),(b),(c))

-#include "vdisk.h"
+/* #include "vdisk.h" */

#define DISK_INIT(a,b) vdisk_init((a), (b))
#define DISK_CLOSE vdisk_close
diff -ru usb_mass/iop/usb_mass.c usb_mass-22/iop/usb_mass.c
--- usb_mass/iop/usb_mass.c 2004-07-25 21:49:53.000000000 -0500
+++ usb_mass-22/iop/usb_mass.c 2004-07-25 21:50:32.000000000 -0500
@@ -15,6 +15,7 @@
#include <sifcmd.h>
#include <sifrpc.h>
#include <fileio.h>
+#include <thbase.h>
#include "mass_stor.h"
#include "fat_driver.h"

@@ -67,7 +68,7 @@

int _start( int argc, char **argv)
{
- iop_thread_t param;
+ struct t_thread param;
int th;


@@ -77,11 +78,11 @@
initFsDriver();

/*create thread*/
- param.attr = TH_C;
- param.thread = rpcMainThread;
- param.priority = 40;
- param.stacksize = 0x800;
- param.option = 0;
+ param.type = TH_C;
+ param.function = rpcMainThread;
+ param.priority = 40;
+ param.stackSize = 0x800;
+ param.unknown = 0;


th = CreateThread(&param);

Posted: Fri Jul 30, 2004 6:51 am
by daveb
Thanks.
Im glad to know the problem was with the code and not me!

Posted: Sat Jul 31, 2004 6:12 pm
by ole
The usb_mass is now fixed to be ps2sdk compatible. Copy the content into your ps2sdk/samples/usb_mass directory and run make in iop and ee subdirectories.

Though I had a problem during compilation of the ee sources. The common/include/sifcmd.h caused error and refused to compile. So I added some includes (according the ps2lib) to fix it:

Code: Select all

#define SYSTEM_CMD	0x80000000

#include <tamtypes.h> // <=== new 
#include <sifdma.h> //<=== new

typedef struct t_SifCmdHeader
In order to compile the iop sources (by supplied makefile) you need the Makefile.iopglobal that can be found in ps2lib and is currently missing in the ps2sdk/samples directory.

Posted: Wed Aug 04, 2004 7:37 pm
by daveb
Hi Ole,
Thanks for fixing this so quick.
I updated my usb_mass.

However when I try to compile the iop directory, it complains it doesnt find the kernal.h file. PS2SDK doesnt have have iop/kernal.h only an ee one. So perhaps I need to do more than copy the PS2LIB/Makefile.iopglobal (obviously changing the paths within)

Posted: Thu Aug 05, 2004 5:44 pm
by ole

Code: Select all

PS2SDK doesnt have have iop/kernal.h
You are right, my fault again. I have updated the sources, so hopefully it will be ok now.
In the Makefile.iopglobal change $(PS2LIB) to $(PS2SDK) and comment the IOP_LIBS+= -lkernel.