[Source] Copiar archivos a la flash0.

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, dark_sasuke, m0skit0, LnD, ka69, zacky06

Responder
Avatar de Usuario
Dark_Kite
Novato
Novato
Mensajes: 12
Registrado: 20 Ago 2010, 14:32

[Source] Copiar archivos a la flash0.

Mensaje por Dark_Kite »

Bueno he visto que algunos desarrolladores tienen problemas para copiar a la "flash0",buscando he encontrado este source:

Main.c:
Spoiler:

Código: Seleccionar todo

#include <pspkernel.h>
#include <pspdebug.h>

//ponemos nuestro programa en modo VSH
PSP_MODULE_INFO("FlashWriter", 0x800, 1, 0);
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_VSH);

//para poner la ruta de origen y destino
#define ORIGEN "ms0:/hola.txt" //"ms0:/poner/aqui/la/ruta/al/archivo.ext" //ejemplo ms0:/hola.txt
#define DESTINO "flash0:/hola.txt" //"flash0:/poner/aqui/la/ruta/al/archivo.ext" //ejemplo flash0:/hola.txt

//variable para utilizarla como buffer de escritura
char write_buffer[128*1024];

//funcion que realiza la copia del archivo
int write_file(const char *read_loc, const char *write_loc)
   {
      int fdin; //para manejar el descriptor del archivo origen
      int fdout; //para manejar el descriptor del archivo destino
      
      //abrimos el archivo origen
      fdin = sceIoOpen(read_loc, PSP_O_RDONLY, 0777);
      if(fdin >= 0)
         {
            //si se abrio el archivo origen, intentamos abrir el archivo destino, creandolo si no existe
            int bytesRead = 1; /*para controlar cuantos bytes se han leido del archivo origen
                            y saber cuantos se van a escribir en el archivo destino,
                            escribiremos la misma cantidad que hemos leido*/
            
            //abrimos el archivo destino
            fdout = sceIoOpen(write_loc, PSP_O_WRONLY | PSP_O_CREAT, 0777);
            if(fdout < 0)
               {
                  //si no se pudo abrir el archivo destino
                  pspDebugScreenPrintf(" No se pudo abrir %s\n", write_loc);
                  return -2;
               }
            
            /*leemos del archivo origen, guardamos lo leido en el buffer de escritura y la cantidad
              de bytes leidas en bytesRead*/
            bytesRead = sceIoRead(fdin, write_buffer, sizeof(write_buffer));
            
            //este ciclo se repetira mientras queden bytes por leer del archivo origen y se pueda escribir en destino
            while((bytesRead > 0) && (fdout >= 0))
               {
                  sceIoWrite(fdout, write_buffer, bytesRead);
                  bytesRead = sceIoRead(fdin, write_buffer, sizeof(write_buffer));
               }

            if(fdout >= 0)
               {
                  //si todo ha ido bien, entonces cerramos el archivo destino
                  sceIoClose(fdout);
               }

            if(fdin >= 0)
               {
                  //cerramos el archivo origen
                  sceIoClose(fdin);
               }
         }
      else
         {
            //si no se pudo abrir el archivo origen
            pspDebugScreenPrintf(" No se pudo abrir %s\n", read_loc);
            return -1;
         }
      
      //si todo ha ido bien llegaremos hasta aqui y devolvemos cero, indicando que todo ha sido correcto
      return 0;
         
   }

//funcion principal   
int main(int argc, char* argv[])
   {
      pspDebugScreenInit();
      
      int result;
      
      /*desasignamos la flash0
        esto lo hacemos para luego reasignarla
        con los permisos de escritura */
      result = sceIoUnassign("flash0:");
      if(result < 0)
         {
            //si hubo error al tratar de desasignar la flash0
            pspDebugScreenPrintf("Error desasignando la flash0");
         }
      else
         {
            //reasignamos la flash con permisos de escritura
            result = sceIoAssign("flash0:", "lflash0:0,0", "flashfat0:", IOASSIGN_RDWR, NULL, 0);
            if(result < 0)
               {
                  //si no se pudo asignar los permisos de escritura
                  pspDebugScreenPrintf("Error asignando la flash0 para escritura");
               }
            else
               {
                  /*si todo ha ido bien llegamos a esta parte
                    aqui es donde llamamos a la funcion que copia
                    el archivo desde una ubicacion a otra */
                  pspDebugScreenPrintf("escribiendo...\n");
                  result = write_file(ORIGEN, DESTINO);
                  if(result>=0)
                     {
                        //si no hubo errores en el proceso de escritura
                        pspDebugScreenPrintf("hecho\n");
                     }
               }
         }
      //hemos terminado, pausamos unos segundos para poder leer los letreros
      sceKernelDelayThread(6000000);

      //salimos al XMB
      sceKernelExitGame();
      return 0;
   }


Makefile:
Spoiler:

Código: Seleccionar todo

TARGET = FlashWriter
OBJS = main.o

INCDIR =
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS) -c

LIBDIR =
LDFLAGS =
LIBS =
#-lpspsystemctrl_kernel

BUILD_PRX =1
PSP_FW_VERSION = 500

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Flash Writer

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak


Basicamente copia el archivo indicado,a la raiz de la flash0:/.

Aviso: Copiar a la flash0 puede traer de consecuensia un brick,ademas la vida de la flash0 se acorta con tanta reescritura,asi que no la useis,si no la nesesitais.

Fuente.

Destroyer21
Novato
Novato
Mensajes: 11
Registrado: 19 Oct 2009, 22:06

Re: [Source] Copiar archivos a la flash0.

Mensaje por Destroyer21 »

Practicamente, es el mismo que tengo yo hecho en mi programa (en el cual tengo un problema, y hay un post pidiendo ayuda).
La verdad, creo que hay algo que se escapa por ahí...

Avatar de Usuario
Dark_Kite
Novato
Novato
Mensajes: 12
Registrado: 20 Ago 2010, 14:32

Re: [Source] Copiar archivos a la flash0.

Mensaje por Dark_Kite »

Pues,este funciona perfectamente.

Destroyer21
Novato
Novato
Mensajes: 11
Registrado: 19 Oct 2009, 22:06

Re: [Source] Copiar archivos a la flash0.

Mensaje por Destroyer21 »

Creo que ya encontré el error en mi función para copiar a la flash... Cuando le arregle el brick que le he hecho con otro programa, la pruebo.

Gracias de todos modos Dark_Kite :)

chaar91
Novato
Novato
Mensajes: 4
Registrado: 10 Dic 2009, 05:05

Re: [Source] Copiar archivos a la flash0.

Mensaje por chaar91 »

como se copia en vez de un archivo copiar dos archivos a la flash0??

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Source] Copiar archivos a la flash0.

Mensaje por m0skit0 »

chaar91 escribió:como se copia en vez de un archivo copiar dos archivos a la flash0??

Si no sabes cómo copiar dos en vez de uno teniendo el código, mejor no toques la f0, dormiré más tranquilo.
Imagen

Responder