USB con libfat

Bueno, pues trasteando con libogc y libfat ha llegado el momento en el que me planteo añadir soporte USB al Revolution engine. Por si no fuera bastante con no saber casi nada de libfat (utilizo el LibFatInitDefault y poco mas), ahora me entero de que solo la version de libfat del cvs tiene soporte usb. "No pasa nada", me la bajo y punto. Me la bajo y sigo sin encontrar el soporte para USB. Por eso pregunto aqui, alguien ha usado lectuora o escritura al USB con libfat? ese alguien me podria ayudar a hacerlo? [+risas]
Mira en: devkitPro\libogc\include\ogc alli esta USB.h y usbstorage.h
hey que tal mirate esto yo lo tengo así para pasar de SD a USB y viceversa
void IniciarFat()
{
  WPAD_ScanPads ();
   
   if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_1)
   {

            fatUnmount(PI_INTERNAL_SD);
            fatEnableReadAhead(PI_USBSTORAGE, 64, 128);
            fatSetDefaultInterface(PI_USBSTORAGE);
           GetFiles();
         }
   if(WPAD_ButtonsHeld(0) & WPAD_BUTTON_2)
         {
            fatUnmount(PI_INTERNAL_SD);
            fatMountNormalInterface(PI_INTERNAL_SD,8);
            fatEnableReadAhead(PI_INTERNAL_SD, 32, 128);
            fatSetDefaultInterface(PI_INTERNAL_SD);
           GetFiles();
         }
   }


taluego
http://sourceforge.net/tracker/index.ph ... tid=668553

Se aplican esos parches sobre libfat, se compila e instala y listo.
No estabas de vacaciones Wanin? XD

PD: Estoy por la teoría que Waninkoko tiene un demonio que indexa ElOtroLado para después usar un mejorado algoritmo de Google que le avisa si hay preguntas que le correspondan :D ¡¡¡Que rapidez!!! ^^
Waninkoko, he aplicado los parches, compilado e instalado la librería. Al compilar me resulta llamativo el hecho de que me de un warning:Implicit declaration of function USB_GetDeviceList. No obstante he probado a usarlo. No me ha funcionado, pero es probable que el problema este en que simplemente lo uso mal. La única diferencia que hago entre el uso de ahora y el de antes es que donde antes hacia fopen("textura.png"... Ahora hago fopen("fat4:/textura.peng...
¿Se supone que tengo que hacer algún tipo de inicialización antes?¿ o simplemente el USB no es fat4?
Ese warning al compilar es normal.

Ademas, creo recordar que cuando ejecutas "make ogc-install" realmente no instala la libreria ya que al copiarla la ruta de origen especificada es incorrecta (vamos, que tienes que copiarlo manualmente).
hay varios fallos en el usbstorage.c.
Si quieres tener la maxima velocidad usb debes usar este usbstorage.c http://www.megaupload.com/?d=JHCX8IQJ y ponerlo en libogc\libogc
y este otro http://www.megaupload.com/es/?d=XAWDNA60 en libfat\source\ogc_io
o esperar a que sven arregle los fallos que le he comentado.
Estas correcciones son mias y pueden no ser del todo correctas pero parece que van bien.
Asegurate de usar la ultima version de libfat del cvs de sourceforge y aplicar todos los patch que hay en el tracker, una vez hecho esto sustituye los archivos que he mencionado anteriormente y tendrás soporte usb a pleno rendimiento.
Obviamente ahora debes compilar libogc y libfat.
en el directorio de libogc, make, make install
en el directorio de libfat make ogc-install
no hace falta que copies nada manualmente, te debe funcionar sin problemas.
Lo normal es que las fuentes de libogc y libfat no esten en el mismo directorio que la instalacion de libogc, ejemplo:
\devkitPro\libogc directorio de instalacion de libogc
\devkitPro\cvs\libogc directorio de las fuentes de libogc
al hacer make install en el directorio de las fuentes copia todo lo necesario al directorio de la instalacion
Lo mismo ocurre con libfat pero solo hay que hacer make ogc-install

Para usar usb en libfat es como la sd.

partition : PI_INTERNAL_SD (3) PI_USBSTORAGE (4)
La sd es fat3:/ y la usb fat4:/ es decir para pasar de una a otra pueder hacer:
chdir("fat3:/") para ir a la raiz de la sd ya que PI_INTERNAL_SD == 3
chdir("fat4:/") para ir a la raiz del usb storage ya que PI_USBSTORAGE== 4
tambien puedes usar fatSetDefaultInterface(interface) para usar fat0:/, es decir:
fatSetDefaultInterface(PI_USBSTORAGE);
chdir("fat0:/");
te llevaría a la raiz del usb y:
fatSetDefaultInterface(PI_INTERNAL_SD);
chdir("fat0:/");
te llevaría a la raiz de la sd.

Si quieres acelerar la lectura debes usar fatEnableReadAhead(partition, 64, 128) y se activará la read ahead cache que aumentará el rendimiento de lectura.
Es decir si quieres tener caché tanto en la sd como en el usb tendras que poner:
fatEnableReadAhead(PI_INTERNAL_SD, 64, 128);
fatEnableReadAhead(PI_USBSTORAGE, 64, 128);

La mejor forma de aprender a manejar la libfat es ver el codigo de ftpii http://code.google.com/p/ftpii/ así es como yo aprendí.
Si tienes mas dudas exponlas y así podremos ayudarte.
7 respuestas