[Investigación] PsGroove en PSP

Found some interesting information there about usb controller and how they work. http://research.microsoft.com/en-us/um/ ... 0stack.doc

Example of info :
The case of a HUB is also a single peripheral case, at least as far as the point of attachment to the host side (slave) is concerned.

The UDC exports the IDevice interface for the benefits of the auto configuration code. It also does implement the ReadAt/WriteAt methods of the IFile interface, for the benefit of the peripheral (serial) driver. The main interface is the IUsbSlaveController, which will enforce a single-client rule.

The peripheral driver exports the IUsbSlaveDriver interface to the UDC and the regular IFile interface to its clients. The interfaces are as follows:

IUsbSlaveController {
TakeOwnership(IUsbSlaveDriver Owner);
ReleaseOwnership(IUsbSlaveDriver Owner);
QueryEndpoints(out {int NumCtl, NumIn, NumOut} );
QueryEndpointProperties(Type,Index, out {int MaxPacket, IsSynch…});
}

IUsbSlaveDriver {
GetDescriptor( in Type {STRING,DEVICE,REPORT,ENDPOINT},
int Index,
out BYTE **Desc, out Size);
SetDescriptor( in Type {…}, int Index, in BYTE *Desc, in Size);
HandleRequest( in USB_REQUEST *Req,
in out BYTE **Data,
in out UINT *Size,
out Enum {COMPLETED, REFUSED, NEEDS_INPUT} );
}

The UDC starts first and waits for a peripheral to shows up.
etc...

hope this will help understand how it works
Guzmanus escribió:Estoy casi seguro al 99% de que al conectar un psj al PC lo detecta como dispositivo desconocido de haberlo leído múltiples veces los primeros días después de que las primeras muestras llegaran a los reviewers


Por si aun te quedaban mas dudas, aqui tienes un Jail conectado al PC:

Imagen

Salu2
wuepe escribió:Es una pena que no tengamos alguien, un dispositivo que ya funcione (ps jailbreak/placa programa con groove), para ver, si al conectarlo al PC, este lo detecta como un hub, o como un dispositivo desconocido, si fuera desconocido, pues habría que probar ya con la propia ps3, y no comprobar en el pc, que si reconoce o no el hub.
También seria bueno, mirar si el original(psj/gv), al conectarlo a la ps3 cuando esta ya esta encendida, si lo recono como hub, o como dispositivo usb no compatible.

Tenemos también para investiga la fuente del N900
http://github.com/kakaroto/PSFreedom/archives/master

Comentar, que ya lo e estado viendo, y este utiliza en las funciones
0x0200, /* bcdUSB */
Puesto que es trabajar con USB 2.0
Cabe mencionar, que solo utiliza el HIGH, no utiliza la interface FULL, esta esta implementa, a 0, para que cuando se le pregunte al hub, le responda que solo trabaja en modo HIGH y no FULL
Se ve en la fuente: psfreedom_machine.c
/**
* psfreedom_is_high_speed:
*
* Determine whether this controller supports high speed or not
* Returns: 1 if supports high speed, 0 otherwise
*/
static int psfreedom_is_high_speed (void)
{
  return 1;
}

/**
* psfreedom_is_low_speed:
*
* Determine whether this controller supports low speed or not
* Returns: 1 if supports low speed, 0 otherwise
*/
static int psfreedom_is_low_speed (void)
{
  return 0;
}


Edito:
Otro apunte a destacar, es mirar que ID Vendor y ID Product tiene los PSJ, puesto que en la PSP, como ya comente el vendor pongas lo que pongas, no lo cambia, al Product si le hace caso, pero el vendor, tendría que poner: 0xAAAA pero, pongas lo que pongas, siempre aparece como VID_054 en id de hardware desde administrador de dispositivos.


Teneis un hilo para preguntarle cosas al flamante poseedor de un PSJailbreak de EOL. No lo olvideis. También podeis preguntarle a alguien que tenga hecho el PSGroove ya sea en P900 o en un AT90*.

Genial!! GRACIAS FIDILLO no podía ser otro!! xDD
fidillo escribió:
Guzmanus escribió:Estoy casi seguro al 99% de que al conectar un psj al PC lo detecta como dispositivo desconocido de haberlo leído múltiples veces los primeros días después de que las primeras muestras llegaran a los reviewers


Por si aun te quedaban mas dudas, aqui tienes un Jail conectado al PC:

http://img31.imageshack.us/img31/7195/5image.jpg

Salu2


Gracias por la informacion, esto de seguro ayudara a aclarar varios puntos que mencione anteriormente sobre los USB Descriptors que no concuerdan.

Sauldos!
Bueno, he probado con la libreria que trae el hostcore, que tambien trae el usbhostfs.prx
Este le he cambiado los parametros, y me reconoce el pc como dispositivo desconocido.

Pero, en la ps3 si me lo detecta, y me conecta en modo Hight, pero me funciona tanto con la ps3 encendida normal, como arrancando para usar el metodo psj, la psp detecta la conexion entrante, pero eso hay que cambiar el speed, de 2 a 1, que es Full/low speed que es la que usa psj.

Subo la Fuente, podeis compilar y meter los ficheros dentro, testeado con el eboot del 1.5
Es para testeos, no funciona en PC, solo con ps3, pero para testear, hay que conseguir iniciar en modo speed 1, que aun no lo he mirado.

El pspgroove he tocado el codigo, para lanzar el prx del usbhostfs, pero esta capado, es un loader del usbhostfs, por ahora no hace nada, solo cargarlo, lo importante es tocar el fichero main.c del usbhostfs que es el que realiza la conexión.

Fuentes de usbhostfs y groove modificados: http://www.megaupload.com/?d=LHCILGTR

Fuente del HostCore sin modificar: http://www.megaupload.com/?d=O1S0CWSV
PDNKED está baneado por "usar clon para saltarse baneo"
lo empaqueto y lo pruebo y ahora digo algo.
comentando las lineas de codigo del Hight, ya me carga en la ps3, en modo speed 1.

main.c del usbhostfs
...
/* USB start function */
int start_func(int size, void *p)
{
   int ret;

   DEBUG_PRINTF("Start Function %p\n", p);

   /* Fill in the descriptor tables */
   memset(usbdata, 0, sizeof(usbdata));
/*
   memcpy(usbdata[0].devdesc, &devdesc_hi, sizeof(devdesc_hi));
   usbdata[0].config.pconfdesc = &usbdata[0].confdesc;
   usbdata[0].config.pinterfaces = &usbdata[0].interfaces;
   usbdata[0].config.pinterdesc = &usbdata[0].interdesc;
   usbdata[0].config.pendp = usbdata[0].endp;
   memcpy(usbdata[0].confdesc.desc, &confdesc_hi,  sizeof(confdesc_hi));
   usbdata[0].confdesc.pinterfaces = &usbdata[0].interfaces;
   usbdata[0].interfaces.pinterdesc[0] = &usbdata[0].interdesc;
   usbdata[0].interfaces.intcount = 1;
   memcpy(usbdata[0].interdesc.desc, &interdesc_hi, sizeof(interdesc_hi));
   usbdata[0].interdesc.pendp = usbdata[0].endp;
   memcpy(usbdata[0].endp[0].desc, &endpdesc_hi[0], sizeof(endpdesc_hi[0]));
   memcpy(usbdata[0].endp[1].desc, &endpdesc_hi[1], sizeof(endpdesc_hi[1]));
   memcpy(usbdata[0].endp[2].desc, &endpdesc_hi[2], sizeof(endpdesc_hi[2]));
*/
   memcpy(usbdata[1].devdesc, &devdesc_full, sizeof(devdesc_full));
   usbdata[1].config.pconfdesc = &usbdata[1].confdesc;
   usbdata[1].config.pinterfaces = &usbdata[1].interfaces;
   usbdata[1].config.pinterdesc = &usbdata[1].interdesc;
   usbdata[1].config.pendp = usbdata[1].endp;
   memcpy(usbdata[1].confdesc.desc, &confdesc_full,  sizeof(confdesc_full));
   usbdata[1].confdesc.pinterfaces = &usbdata[1].interfaces;
   usbdata[1].interfaces.pinterdesc[0] = &usbdata[1].interdesc;
   usbdata[1].interfaces.intcount = 1;
   memcpy(usbdata[1].interdesc.desc, &interdesc_full, sizeof(interdesc_full));
   usbdata[1].interdesc.pendp = usbdata[1].endp;
   memcpy(usbdata[1].endp[0].desc, &endpdesc_full[0], sizeof(endpdesc_full[0]));
   memcpy(usbdata[1].endp[1].desc, &endpdesc_full[1], sizeof(endpdesc_full[1]));
   memcpy(usbdata[1].endp[2].desc, &endpdesc_full[2], sizeof(endpdesc_full[2]));

//   g_driver.devp_hi = usbdata[0].devdesc;
//   g_driver.confp_hi = &usbdata[0].config;
   g_driver.devp = usbdata[1].devdesc;
   g_driver.confp = &usbdata[1].config;
...
wuepe escribió:comentando las lineas de codigo del Hight, ya me carga en la ps3, en modo speed 1.

main.c del usbhostfs
...
/* USB start function */
int start_func(int size, void *p)
{
   int ret;

   DEBUG_PRINTF("Start Function %p\n", p);

   /* Fill in the descriptor tables */
   memset(usbdata, 0, sizeof(usbdata));
/*
   memcpy(usbdata[0].devdesc, &devdesc_hi, sizeof(devdesc_hi));
   usbdata[0].config.pconfdesc = &usbdata[0].confdesc;
   usbdata[0].config.pinterfaces = &usbdata[0].interfaces;
   usbdata[0].config.pinterdesc = &usbdata[0].interdesc;
   usbdata[0].config.pendp = usbdata[0].endp;
   memcpy(usbdata[0].confdesc.desc, &confdesc_hi,  sizeof(confdesc_hi));
   usbdata[0].confdesc.pinterfaces = &usbdata[0].interfaces;
   usbdata[0].interfaces.pinterdesc[0] = &usbdata[0].interdesc;
   usbdata[0].interfaces.intcount = 1;
   memcpy(usbdata[0].interdesc.desc, &interdesc_hi, sizeof(interdesc_hi));
   usbdata[0].interdesc.pendp = usbdata[0].endp;
   memcpy(usbdata[0].endp[0].desc, &endpdesc_hi[0], sizeof(endpdesc_hi[0]));
   memcpy(usbdata[0].endp[1].desc, &endpdesc_hi[1], sizeof(endpdesc_hi[1]));
   memcpy(usbdata[0].endp[2].desc, &endpdesc_hi[2], sizeof(endpdesc_hi[2]));
*/
   memcpy(usbdata[1].devdesc, &devdesc_full, sizeof(devdesc_full));
   usbdata[1].config.pconfdesc = &usbdata[1].confdesc;
   usbdata[1].config.pinterfaces = &usbdata[1].interfaces;
   usbdata[1].config.pinterdesc = &usbdata[1].interdesc;
   usbdata[1].config.pendp = usbdata[1].endp;
   memcpy(usbdata[1].confdesc.desc, &confdesc_full,  sizeof(confdesc_full));
   usbdata[1].confdesc.pinterfaces = &usbdata[1].interfaces;
   usbdata[1].interfaces.pinterdesc[0] = &usbdata[1].interdesc;
   usbdata[1].interfaces.intcount = 1;
   memcpy(usbdata[1].interdesc.desc, &interdesc_full, sizeof(interdesc_full));
   usbdata[1].interdesc.pendp = usbdata[1].endp;
   memcpy(usbdata[1].endp[0].desc, &endpdesc_full[0], sizeof(endpdesc_full[0]));
   memcpy(usbdata[1].endp[1].desc, &endpdesc_full[1], sizeof(endpdesc_full[1]));
   memcpy(usbdata[1].endp[2].desc, &endpdesc_full[2], sizeof(endpdesc_full[2]));

//   g_driver.devp_hi = usbdata[0].devdesc;
//   g_driver.confp_hi = &usbdata[0].config;
   g_driver.devp = usbdata[1].devdesc;
   g_driver.confp = &usbdata[1].config;
...


espero eso sea bueno... XD.
PDNKED está baneado por "usar clon para saltarse baneo"
wuepe escribió:comentando las lineas de codigo del Hight, ya me carga en la ps3, en modo speed 1.

main.c del usbhostfs
...
/* USB start function */
int start_func(int size, void *p)
{
   int ret;

   DEBUG_PRINTF("Start Function %p\n", p);

   /* Fill in the descriptor tables */
   memset(usbdata, 0, sizeof(usbdata));
/*
   memcpy(usbdata[0].devdesc, &devdesc_hi, sizeof(devdesc_hi));
   usbdata[0].config.pconfdesc = &usbdata[0].confdesc;
   usbdata[0].config.pinterfaces = &usbdata[0].interfaces;
   usbdata[0].config.pinterdesc = &usbdata[0].interdesc;
   usbdata[0].config.pendp = usbdata[0].endp;
   memcpy(usbdata[0].confdesc.desc, &confdesc_hi,  sizeof(confdesc_hi));
   usbdata[0].confdesc.pinterfaces = &usbdata[0].interfaces;
   usbdata[0].interfaces.pinterdesc[0] = &usbdata[0].interdesc;
   usbdata[0].interfaces.intcount = 1;
   memcpy(usbdata[0].interdesc.desc, &interdesc_hi, sizeof(interdesc_hi));
   usbdata[0].interdesc.pendp = usbdata[0].endp;
   memcpy(usbdata[0].endp[0].desc, &endpdesc_hi[0], sizeof(endpdesc_hi[0]));
   memcpy(usbdata[0].endp[1].desc, &endpdesc_hi[1], sizeof(endpdesc_hi[1]));
   memcpy(usbdata[0].endp[2].desc, &endpdesc_hi[2], sizeof(endpdesc_hi[2]));
*/
   memcpy(usbdata[1].devdesc, &devdesc_full, sizeof(devdesc_full));
   usbdata[1].config.pconfdesc = &usbdata[1].confdesc;
   usbdata[1].config.pinterfaces = &usbdata[1].interfaces;
   usbdata[1].config.pinterdesc = &usbdata[1].interdesc;
   usbdata[1].config.pendp = usbdata[1].endp;
   memcpy(usbdata[1].confdesc.desc, &confdesc_full,  sizeof(confdesc_full));
   usbdata[1].confdesc.pinterfaces = &usbdata[1].interfaces;
   usbdata[1].interfaces.pinterdesc[0] = &usbdata[1].interdesc;
   usbdata[1].interfaces.intcount = 1;
   memcpy(usbdata[1].interdesc.desc, &interdesc_full, sizeof(interdesc_full));
   usbdata[1].interdesc.pendp = usbdata[1].endp;
   memcpy(usbdata[1].endp[0].desc, &endpdesc_full[0], sizeof(endpdesc_full[0]));
   memcpy(usbdata[1].endp[1].desc, &endpdesc_full[1], sizeof(endpdesc_full[1]));
   memcpy(usbdata[1].endp[2].desc, &endpdesc_full[2], sizeof(endpdesc_full[2]));

//   g_driver.devp_hi = usbdata[0].devdesc;
//   g_driver.confp_hi = &usbdata[0].config;
   g_driver.devp = usbdata[1].devdesc;
   g_driver.confp = &usbdata[1].config;
...



Cabría la posibilidad de que lo subas compilado? acabo de ponerme el Win7 y he caido ahora que no tengo el visual studio para hacer nada.
Aun no esta terminado, son código de testeo y desarrollo, aun no hay nada funcional.

Bueno, en este, he podido mandar la primera cabecera al conectarse.
Hace como hacia en el pc, aunque en la ps3 se conecta en modo speed low, que es como tiene que ser.
Se le manda la primera orden y se queda a la espera de seguir trabajando...

Pongo la fuente modificada del usbhostfs
He añadido unas definiciones para poder mandar el paquete en el usbasync.h
Añadido algunos printf, y el código para confirmar el HUB descriptor.

Source: http://www.megaupload.com/?d=XXBLVJDM
Compilado: http://www.megaupload.com/?d=O08FT7RS

Vuelvo a informa, no damos soporte en este hilo de su instalacción, ni de problemas, ir al otro tema para dudas y problemas.
hilo_debate-y-testers-psgroove-en-psp_1480315
PDNKED está baneado por "usar clon para saltarse baneo"
wuepe escribió:Aun no esta terminado, son código de testeo y desarrollo, aun no hay nada funcional.

Bueno, en este, he podido mandar la primera cabecera al conectarse.
Hace como hacia en el pc, aunque en la ps3 se conecta en modo speed low, que es como tiene que ser.
Se le manda la primera orden y se queda a la espera de seguir trabajando...

Pongo la fuente modificada del usbhostfs
He añadido unas definiciones para poder mandar el paquete en el usbasync.h
Añadido algunos printf, y el código para confirmar el HUB descriptor.

Source: http://www.megaupload.com/?d=XXBLVJDM
Compilado: http://www.megaupload.com/?d=O08FT7RS

Vuelvo a informa, no damos soporte en este hilo de su instalacción, ni de problemas, ir al otro tema para dudas y problemas.
hilo_debate-y-testers-psgroove-en-psp_1480315


Gracias, voy a probar que tal ^^
Por favor no borreis mi msj,
Solo quiero deciros que sois los mejores y unos hachas, animo que por esto como minimo sereis conocidos muldialmente.EOL.
Un detalle en la linea 230 del main.c hay un bug q creo es importante.

/* String descriptor */
unsigned char strp[] =
{
//   0x8, 0x3, '<', 0, '>', 0, 0, 0
  0x09, 0x29, {0x06, 0xA9, 0x00, 0x32, 0x64, 0x00, 0xff}
};


Al poner 0x09, 0x29, { } en el array de caracteres sin signo, todo lo que esta dentro del {} se ha de convertir a un uchar.

Saludos
Edito.- Si es lo que yo pienso que es, tendría que ser:

/* String descriptor */
unsigned char strp[] =
{ //   0x8, 0x3, '<', 0, '>', 0, 0, 0
  0x09, 0x29, 0x06, 0xA9, 0x00, 0x32, 0x64, 0x00, 0xff
};
Según nullEX en la pagina 78...
nullEX escribió:
Ahora puedes probar a ponerle tanto en las descripciones de "hi" como "full" los mismos descriptores que manda el PSGroove ;)

/*------------------------------------------------------------------------------*/
/* USB HUB device descriptor                                       */
/*------------------------------------------------------------------------------*/
struct DeviceDescriptor devdesc_hub = {
   .bLength            = 0x12,
   .bDescriptorType    = 0x01,
   .bcdUSB             = 0x0002, //? 0x0200
   .bDeviceClass       = 0x09,
   .bDeviceSubClass    = 0x00,
   .bDeviceProtocol    = 0x01,
   .bMaxPacketSize     = 0x08,
   .idVendor           = 0xAAAA,
   .idProduct          = 0xCCCC,
   .bcdDevice          = 0x0001, //? 0x0100
   .iManufacturer      = 0x00,
   .iProduct           = 0x00,
   .iSerialNumber      = 0x00,
   .bNumConfigurations = 0x01
};

/*------------------------------------------------------------------------------*/
/* USB HUB configuration descriptor                                    */
/*------------------------------------------------------------------------------*/
struct ConfigDescriptor confdesc_hub = {
   .bLength             = 0x09,
   .bDescriptorType     = 0x02,
   .wTotalLength        = 0x1900, //? 0x0019
   .bNumInterfaces      = 0x01,
   .bConfigurationValue = 0x01,
   .iConfiguration      = 0x00,
   .bmAttributes        = 0xE0,
   .bMaxPower           = 0x32
};

/*------------------------------------------------------------------------------*/
/* USB HUB interface descriptor                                    */
/*------------------------------------------------------------------------------*/
struct InterfaceDescriptor interdesc_hub[2] = {
   {
      .bLength            = 0x09,
      .bDescriptorType    = 0x04,
      .bInterfaceNumber   = 0x00,
      .bAlternateSetting  = 0x00,
      .bNumEndpoints      = 0x01,
      .bInterfaceClass    = 0x09,
      .bInterfaceSubClass = 0x00,
      .bInterfaceProtocol = 0x00,
      .iInterface         = 0x00
   },
   { 0 }
};

/*------------------------------------------------------------------------------*/
/* USB HUB endpoint descriptor                                       */
/*------------------------------------------------------------------------------*/
struct EndpointDescriptor endpdesc_hub = {
   .bLength          = 0x07,
   .bDescriptorType  = 0x05,
   .bEndpointAddress = 0x81,
   .bmAttributes     = 0x03,
   .wMaxPacketSize   = 0x100,
   .bInterval        = 0x0C
};

/*------------------------------------------------------------------------------*/
/* USB HUB string description                                       */
/*------------------------------------------------------------------------------*/
static struct StringDescriptor HUBStringDescriptor = { 0x09, 0x29, {0x06, 0xA9, 0x00, 0x32, 0x64, 0x00, 0xff} };


y también añadir un EndPoint más (son 3 los que lleva el PsGroove: control, entrada y salida):
/* Endpoint blocks */
static
struct UsbEndpoint endpoints[3] = {
  { 0, 0, 0 },
  { 1, 0, 0 },
  { 2, 0, 0 }
};


/*------------------------------------------------------------------------------*/
/* USB HUB string description */
/*------------------------------------------------------------------------------*/
static struct StringDescriptor HUBStringDescriptor = { 0x09, 0x29, {0x06, 0xA9, 0x00, 0x32, 0x64, 0x00, 0xff} };

Es el código que usan los de psgroove... pero no te puedo confirmar que este bien.
Lo de arriba // es un comentario, esa linea se borra, que era el código antiguo.
...........................
darkone escribió:...


Borra el post y postealo en un hilo nuevo. Eso que has escrito no tiene nada que ver con el tema que estamos tratando aquí. Esto es un hilo de investigación PSP no Palm.
Se20 escribió:
darkone escribió:...


Borra el post y postealo en un hilo nuevo. Eso que has escrito no tiene nada que ver con el tema que estamos tratando aquí. Esto es un hilo de investigación PSP no Palm.


se k el tema es del psp, no se si las instrucciones o el codigo ayude en algo, esa fue la razon del post
darkone escribió:se k el tema es del psp, no se si las instrucciones o el codigo ayude en algo, esa fue la razon del post


No, no ayudan, está basado en el metodo que se usó para P900 y es en LINUX (o Maemo que está basado en linux). Y si querias aportar hazlo en el otro hilo que para eso está.

hilo_debate-y-testers-psgroove-en-psp_1480315_s300

Repito, borra el mensaje anterior que entorpece la lectura a los investigadores.

Gracias!
wuepe de puta madre lo que has aportado con el descriptor del hub ! :D

Llevaba horas intentandolo esta tarde, mañana lo implemento en mi prx, y si todo ok lo subo al repositorio de google code :P (el source)

PD: He tardado en leer 3 paginas @ 50 post/pagina... xD(equivale a 15 paginas normales)
(mensaje borrado)
Rukario escribió:ya se puede hackiar la ps3 por medio del psp? =D ponganme al tanto por favor!!


veo k no has leido

ve al 1er post y tendras tu respuesta
Simplemente reportar, no citéis ;)
wuepe escribió:Según nullEX en la pagina 78...
nullEX escribió:
Ahora puedes probar a ponerle tanto en las descripciones de "hi" como "full" los mismos descriptores que manda el PSGroove ;)

/*------------------------------------------------------------------------------*/
/* USB HUB device descriptor                                       */
/*------------------------------------------------------------------------------*/
struct DeviceDescriptor devdesc_hub = {
   .bLength            = 0x12,
   .bDescriptorType    = 0x01,
   .bcdUSB             = 0x0002, //? 0x0200
   .bDeviceClass       = 0x09,
   .bDeviceSubClass    = 0x00,
   .bDeviceProtocol    = 0x01,
   .bMaxPacketSize     = 0x08,
   .idVendor           = 0xAAAA,
   .idProduct          = 0xCCCC,
   .bcdDevice          = 0x0001, //? 0x0100
   .iManufacturer      = 0x00,
   .iProduct           = 0x00,
   .iSerialNumber      = 0x00,
   .bNumConfigurations = 0x01
};

/*------------------------------------------------------------------------------*/
/* USB HUB configuration descriptor                                    */
/*------------------------------------------------------------------------------*/
struct ConfigDescriptor confdesc_hub = {
   .bLength             = 0x09,
   .bDescriptorType     = 0x02,
   .wTotalLength        = 0x1900, //? 0x0019
   .bNumInterfaces      = 0x01,
   .bConfigurationValue = 0x01,
   .iConfiguration      = 0x00,
   .bmAttributes        = 0xE0,
   .bMaxPower           = 0x32
};

/*------------------------------------------------------------------------------*/
/* USB HUB interface descriptor                                    */
/*------------------------------------------------------------------------------*/
struct InterfaceDescriptor interdesc_hub[2] = {
   {
      .bLength            = 0x09,
      .bDescriptorType    = 0x04,
      .bInterfaceNumber   = 0x00,
      .bAlternateSetting  = 0x00,
      .bNumEndpoints      = 0x01,
      .bInterfaceClass    = 0x09,
      .bInterfaceSubClass = 0x00,
      .bInterfaceProtocol = 0x00,
      .iInterface         = 0x00
   },
   { 0 }
};

/*------------------------------------------------------------------------------*/
/* USB HUB endpoint descriptor                                       */
/*------------------------------------------------------------------------------*/
struct EndpointDescriptor endpdesc_hub = {
   .bLength          = 0x07,
   .bDescriptorType  = 0x05,
   .bEndpointAddress = 0x81,
   .bmAttributes     = 0x03,
   .wMaxPacketSize   = 0x100,
   .bInterval        = 0x0C
};

/*------------------------------------------------------------------------------*/
/* USB HUB string description                                       */
/*------------------------------------------------------------------------------*/
static struct StringDescriptor HUBStringDescriptor = { 0x09, 0x29, {0x06, 0xA9, 0x00, 0x32, 0x64, 0x00, 0xff} };


y también añadir un EndPoint más (son 3 los que lleva el PsGroove: control, entrada y salida):
/* Endpoint blocks */
static
struct UsbEndpoint endpoints[3] = {
  { 0, 0, 0 },
  { 1, 0, 0 },
  { 2, 0, 0 }
};

/*------------------------------------------------------------------------------*/
/* USB HUB string description */
/*------------------------------------------------------------------------------*/
static struct StringDescriptor HUBStringDescriptor = { 0x09, 0x29, {0x06, 0xA9, 0x00, 0x32, 0x64, 0x00, 0xff} };

Es el código que usan los de psgroove... pero no te puedo confirmar que este bien.
Lo de arriba // es un comentario, esa linea se borra, que era el código antiguo.


Le he metido un spoiler para no ser pesadito.
A) Esto no es tan facil como cortar y pegar
B) El código de psgroove es una ESTRUCTURA y el de aquí es un CARACTER SIN SIGNO.
C) Te puedo asegurar poniendo la mano en el fuego que es como digo yo.
D) Para q te lo termines de crear te cuento. Esa estructura esta formada por 3 capos,
+ El primero de todos es la longitud total de la estructura, en este caso 9 bytes.
+ El segundo campo contiene el tipo de estructura, y hay un 0x29 (que me tiene desconcertado pues suele ser un 0x03.
+ El ultimo campo es un string a enviar.
Eso es lo que tienen en psgroove, si lo pasas a unsigned char... pos todo en bytes y listo.

Saludos
PD.- Por cierto, si compilasen con el ultimo compilador y el wall activo y de paso mirasen lo que dicen las lineas de advertencia se darián cuenta de ello rápidamente.
enhorabuena a todos por el gran trabajo que estas haciendo. ÁNIMO!!!
Chicos, teneis a todo el mundo pendiente vuestra.
En ps3hax y en ps3news ya os tienen colgados.
Asi que animo!
cierto, en youtube ya hay varios videos que hablan sobre EOL, y muchas webs pendiente de buestro progreso, rezo para que esto vaya bien, me alegraria mucho por vosotros!
cjsosa escribió:
wuepe escribió:Según nullEX en la pagina 78...
nullEX escribió:
Ahora puedes probar a ponerle tanto en las descripciones de "hi" como "full" los mismos descriptores que manda el PSGroove ;)

/*------------------------------------------------------------------------------*/
/* USB HUB device descriptor                                       */
/*------------------------------------------------------------------------------*/
struct DeviceDescriptor devdesc_hub = {
   .bLength            = 0x12,
   .bDescriptorType    = 0x01,
   .bcdUSB             = 0x0002, //? 0x0200
   .bDeviceClass       = 0x09,
   .bDeviceSubClass    = 0x00,
   .bDeviceProtocol    = 0x01,
   .bMaxPacketSize     = 0x08,
   .idVendor           = 0xAAAA,
   .idProduct          = 0xCCCC,
   .bcdDevice          = 0x0001, //? 0x0100
   .iManufacturer      = 0x00,
   .iProduct           = 0x00,
   .iSerialNumber      = 0x00,
   .bNumConfigurations = 0x01
};

/*------------------------------------------------------------------------------*/
/* USB HUB configuration descriptor                                    */
/*------------------------------------------------------------------------------*/
struct ConfigDescriptor confdesc_hub = {
   .bLength             = 0x09,
   .bDescriptorType     = 0x02,
   .wTotalLength        = 0x1900, //? 0x0019
   .bNumInterfaces      = 0x01,
   .bConfigurationValue = 0x01,
   .iConfiguration      = 0x00,
   .bmAttributes        = 0xE0,
   .bMaxPower           = 0x32
};

/*------------------------------------------------------------------------------*/
/* USB HUB interface descriptor                                    */
/*------------------------------------------------------------------------------*/
struct InterfaceDescriptor interdesc_hub[2] = {
   {
      .bLength            = 0x09,
      .bDescriptorType    = 0x04,
      .bInterfaceNumber   = 0x00,
      .bAlternateSetting  = 0x00,
      .bNumEndpoints      = 0x01,
      .bInterfaceClass    = 0x09,
      .bInterfaceSubClass = 0x00,
      .bInterfaceProtocol = 0x00,
      .iInterface         = 0x00
   },
   { 0 }
};

/*------------------------------------------------------------------------------*/
/* USB HUB endpoint descriptor                                       */
/*------------------------------------------------------------------------------*/
struct EndpointDescriptor endpdesc_hub = {
   .bLength          = 0x07,
   .bDescriptorType  = 0x05,
   .bEndpointAddress = 0x81,
   .bmAttributes     = 0x03,
   .wMaxPacketSize   = 0x100,
   .bInterval        = 0x0C
};

/*------------------------------------------------------------------------------*/
/* USB HUB string description                                       */
/*------------------------------------------------------------------------------*/
static struct StringDescriptor HUBStringDescriptor = { 0x09, 0x29, {0x06, 0xA9, 0x00, 0x32, 0x64, 0x00, 0xff} };


y también añadir un EndPoint más (son 3 los que lleva el PsGroove: control, entrada y salida):
/* Endpoint blocks */
static
struct UsbEndpoint endpoints[3] = {
  { 0, 0, 0 },
  { 1, 0, 0 },
  { 2, 0, 0 }
};

/*------------------------------------------------------------------------------*/
/* USB HUB string description */
/*------------------------------------------------------------------------------*/
static struct StringDescriptor HUBStringDescriptor = { 0x09, 0x29, {0x06, 0xA9, 0x00, 0x32, 0x64, 0x00, 0xff} };

Es el código que usan los de psgroove... pero no te puedo confirmar que este bien.
Lo de arriba // es un comentario, esa linea se borra, que era el código antiguo.


Le he metido un spoiler para no ser pesadito.
A) Esto no es tan facil como cortar y pegar
B) El código de psgroove es una ESTRUCTURA y el de aquí es un CARACTER SIN SIGNO.
C) Te puedo asegurar poniendo la mano en el fuego que es como digo yo.
D) Para q te lo termines de crear te cuento. Esa estructura esta formada por 3 capos,
+ El primero de todos es la longitud total de la estructura, en este caso 9 bytes.
+ El segundo campo contiene el tipo de estructura, y hay un 0x29 (que me tiene desconcertado pues suele ser un 0x03.
+ El ultimo campo es un string a enviar.
Eso es lo que tienen en psgroove, si lo pasas a unsigned char... pos todo en bytes y listo.

Saludos
PD.- Por cierto, si compilasen con el ultimo compilador y el wall activo y de paso mirasen lo que dicen las lineas de advertencia se darián cuenta de ello rápidamente.


El 29 es un descriptor no estandar que indica que es un HUB.
entonces, por lo que decis, ya habeis conseguido emular todos los puertos usb pero ahora os queda implementarle el psgroove a la aplicacion???
(perdon si es una pregunta redundante pero es que son muchas paginas y en DEBATE han dejado de actualizar el 1º post, gracias y animo)


PD: ¿Soy el unico que no ve bien este mensaje porque se solapa con el banner de publi de la izquierda?? :-?
(mensaje borrado)
chevitas escribió:
Shock_resist escribió:entonces, por lo que decis, ya habeis conseguido emular todos los puertos usb pero ahora os queda implementarle el psgroove a la aplicacion???
(perdon si es una pregunta redundante pero es que son muchas paginas y en DEBATE han dejado de actualizar el 1º post, gracias y animo)


PD: ¿Soy el unico que no ve bien este mensaje porque se solapa con el banner de publi de la izquierda?? :-?


jajaj no eres el unico a mi tambien aparece asi. pero solo en tu post

perdon por el offtopic...

yo tambien lo veo igual.

EDITO: perdon por el offtopic
Quereis dejar de decir tonterias??? Y dejar este HILO para los expertos??

perdon por el offtopic, pero esk ya son 3 comentarios joder...
Bueno, he modificado las estructuras para que ahora cree correctamente el device hub, con las especificaciones de ps groove.

Modificar estas lineas del main.c

...
/* HI-Speed device descriptor */ //OK
struct DeviceDescriptor devdesc_hi =
{
   .bLength = 0x12,
   .bDescriptorType = 0x01,
   .bcdUSB = 0x0200,
   .bDeviceClass = 0x09,
   .bDeviceSubClass = 0x00,
   .bDeviceProtocol = 0x01,
   .bMaxPacketSize = 0x08, // Este parametro
...
/* Hi-Speed endpoint descriptors */
struct EndpointDescriptor endpdesc_hi[3] =
{
   {
      .bLength = 0x07,
      .bDescriptorType = 0x05,
      .bEndpointAddress = 0x81,
      .bmAttributes = 0x03,
      .wMaxPacketSize = 0x01,  // Este parametro
      .bInterval = 0x0C
   },
   {
      .bLength = 0x07,
      .bDescriptorType = 0x05,
      .bEndpointAddress = 0x81,
      .bmAttributes = 0x03,
      .wMaxPacketSize = 0x01,  // Este parametro
      .bInterval = 0x0C
   },
   {
      .bLength = 0x07,
      .bDescriptorType = 0x05,
      .bEndpointAddress = 0x81,
      .bmAttributes = 0x03,
      .wMaxPacketSize = 0x01,  // Este parametro
...
/* USB start function */
int start_func(int size, void *p)
{
   int ret;

   DEBUG_PRINTF("Start Function %p\n", p);

   /* Fill in the descriptor tables */
   memset(usbdata, 0, sizeof(usbdata));

// Descomentado y borrado el usbdata[1]

   memcpy(usbdata[0].devdesc, &devdesc_hi, sizeof(devdesc_hi));
   usbdata[0].config.pconfdesc = &usbdata[0].confdesc;
   usbdata[0].config.pinterfaces = &usbdata[0].interfaces;
   usbdata[0].config.pinterdesc = &usbdata[0].interdesc;
   usbdata[0].config.pendp = usbdata[0].endp;
   memcpy(usbdata[0].confdesc.desc, &confdesc_hi,  sizeof(confdesc_hi));
   usbdata[0].confdesc.pinterfaces = &usbdata[0].interfaces;
   usbdata[0].interfaces.pinterdesc[0] = &usbdata[0].interdesc;
   usbdata[0].interfaces.intcount = 1;
   memcpy(usbdata[0].interdesc.desc, &interdesc_hi, sizeof(interdesc_hi));
   usbdata[0].interdesc.pendp = usbdata[0].endp;
   memcpy(usbdata[0].endp[0].desc, &endpdesc_hi[0], sizeof(endpdesc_hi[0]));
   memcpy(usbdata[0].endp[1].desc, &endpdesc_hi[1], sizeof(endpdesc_hi[1]));
   memcpy(usbdata[0].endp[2].desc, &endpdesc_hi[2], sizeof(endpdesc_hi[2]));

   g_driver.devp = usbdata[0].devdesc;  // Este parametro
   g_driver.confp = &usbdata[0].config;   // Este parametro
...


Con esto ya se conecta con los parametros correctos el hub en modo Full/Low sleep
genial wuepe, veo que esto avanza. si puedes deja subido a megaupload o donde quieras el codigo completo (el anterior que posteaste esta temporalmente desactivado en megaupload :-? ) y lo subo al svn.

p.d.: tambien pasadme los enlaces que esteis usando como documentacion, y los enlazo al wiki del proyecto.
wuepe escribió:Bueno, he modificado las estructuras para que ahora cree correctamente el device hub, con las especificaciones de ps groove.

Modificar estas lineas del main.c

...
/* HI-Speed device descriptor */ //OK
struct DeviceDescriptor devdesc_hi =
{
   .bLength = 0x12,
   .bDescriptorType = 0x01,
   .bcdUSB = 0x0200,
   .bDeviceClass = 0x09,
   .bDeviceSubClass = 0x00,
   .bDeviceProtocol = 0x01,
   .bMaxPacketSize = 0x08, // Este parametro
...
/* Hi-Speed endpoint descriptors */
struct EndpointDescriptor endpdesc_hi[3] =
{
   {
      .bLength = 0x07,
      .bDescriptorType = 0x05,
      .bEndpointAddress = 0x81,
      .bmAttributes = 0x03,
      .wMaxPacketSize = 0x01,  // Este parametro
      .bInterval = 0x0C
   },
   {
      .bLength = 0x07,
      .bDescriptorType = 0x05,
      .bEndpointAddress = 0x81,
      .bmAttributes = 0x03,
      .wMaxPacketSize = 0x01,  // Este parametro
      .bInterval = 0x0C
   },
   {
      .bLength = 0x07,
      .bDescriptorType = 0x05,
      .bEndpointAddress = 0x81,
      .bmAttributes = 0x03,
      .wMaxPacketSize = 0x01,  // Este parametro
...
/* USB start function */
int start_func(int size, void *p)
{
   int ret;

   DEBUG_PRINTF("Start Function %p\n", p);

   /* Fill in the descriptor tables */
   memset(usbdata, 0, sizeof(usbdata));

// Descomentado y borrado el usbdata[1]

   memcpy(usbdata[0].devdesc, &devdesc_hi, sizeof(devdesc_hi));
   usbdata[0].config.pconfdesc = &usbdata[0].confdesc;
   usbdata[0].config.pinterfaces = &usbdata[0].interfaces;
   usbdata[0].config.pinterdesc = &usbdata[0].interdesc;
   usbdata[0].config.pendp = usbdata[0].endp;
   memcpy(usbdata[0].confdesc.desc, &confdesc_hi,  sizeof(confdesc_hi));
   usbdata[0].confdesc.pinterfaces = &usbdata[0].interfaces;
   usbdata[0].interfaces.pinterdesc[0] = &usbdata[0].interdesc;
   usbdata[0].interfaces.intcount = 1;
   memcpy(usbdata[0].interdesc.desc, &interdesc_hi, sizeof(interdesc_hi));
   usbdata[0].interdesc.pendp = usbdata[0].endp;
   memcpy(usbdata[0].endp[0].desc, &endpdesc_hi[0], sizeof(endpdesc_hi[0]));
   memcpy(usbdata[0].endp[1].desc, &endpdesc_hi[1], sizeof(endpdesc_hi[1]));
   memcpy(usbdata[0].endp[2].desc, &endpdesc_hi[2], sizeof(endpdesc_hi[2]));

   g_driver.devp = usbdata[0].devdesc;  // Este parametro
   g_driver.confp = &usbdata[0].config;   // Este parametro
...


Con esto ya se conecta con los parametros correctos el hub en modo Full/Low sleep




mmmm... en tonces cual seria el sigiente paso? ya la parte en la que se desconectan y conectan los usb?

saludos y gracias por lo que hacen a la comunidad todos andamos muy anciosos.
(mensaje borrado)
avivi82 escribió:A lo mejor no va esto aqui, pero al parecer se ha liberado el backup Manager para PSP, pero no se hasta que punto va la cosa hacia adelante o como. Mientras tanto quiero agradecer el esfuerzo a todos los sceners. Sois increibles.

http://www.ps3sos.com/showthread.php?52 ... P-Liberado!


en lo que acabas de poner, el primer video pertenece al POC subido por krosk (fijaos bien en el video) y el segundo es el fake que colgaron por otra pagina
mil perdones.
No habia visto los videos, solo queria compartir lo leido
Buenas tardes,

Me gustaría poder seguir el proyecto de cerca, se programar en c/c++ aunque nunca he programado nada para psp (Acabo de hacer un "Hello World" para probar el compilador.).

He bajado el proyecto del svn de google code, pero veo que no son las versiones más recientes de los fuentes.

wuepe, ¿Podrías subir las últimas versiones de los fuentes que tengas?.

Si no es mucha molestia ¿podrías explicar un poco que se hace en cada archivo, y en que estas trabajando actualmente?.

No quiero entretenerte mucho, pero si lo hicieses podría seguir el proyecto de cerca e intentar aportar algo.

Un saludo y muchas gracias por adelantado.
He modificado el procedimiento usb_request para que tenga los casos de comunicacion con los dispositivos.
He comentado el codigo que hay que implemente o añadir... sacado de la unidad hub.c de la fuente de kakaroto PSFreedom para N900, el preocedimiento mirado es: static int hub_setup(struct usb_gadget *gadget,
const struct usb_ctrlrequest *ctrl, u16 request,
u16 w_index, u16 w_value, u16 w_length)

Ahora, hay que ir depurando los casos, mediante la ps3 y ir añadiendo el codigo necesario.
Esta la estructura, y indicando por que case esta en cada momento.

/* Device request */
int usb_request(int arg1, int arg2, struct DeviceRequest *req)
{
    const uint8_t  DescriptorType   = (req->wValue >> 8);
   //int value = -EOPNOTSUPP;
   
   DEBUG_PRINTF("func24 a1 %08X, a2 %08X, a3 %p\n", arg1, arg2, req);
   DEBUG_PRINTF("ReqType %d, Request %d, Value %x, Index %x, Length %x\n",
         req->bmRequestType, req->bRequest, req->wValue, req->wIndex,
         req->wLength);

   //printf("req->bRequest: %d",req->bRequest);
   
   switch (req->bRequest)
   {   
     case USB_REQ_GET_DESCRIPTOR:       
       printf("DescriptorType: %d",DescriptorType);
        switch (DescriptorType) //w_value >> 8
        {
            case USB_DT_DEVICE:
           printf("USB_REQ_GET_DESCRIPTOR - USB_DT_DEVICE\n");
         break;
         case USB_DT_CONFIG:
           printf("USB_REQ_GET_DESCRIPTOR - USB_DT_CONFIG\n");
         break;
         case USB_DT_STRING:
           printf("USB_REQ_GET_DESCRIPTOR - USB_DT_STRING\n");
         break;
         case USB_DT_HUB_DESCRIPTOR:  //0x29, HUB descriptor
           SendMsgHUB_Hub_Descriptor(req);
         break;
        }   

     break;
      case USB_REQ_SET_CONFIGURATION:
      if (req->bmRequestType != 0) {
         printf("USB_REQ_SET_CONFIGURATION - bRequestType != 0\n");
            //goto unknown;
      }else
         printf("USB_REQ_SET_CONFIGURATION - bRequestType == 0\n");
        //value = hub_set_config(dev, w_value);
     break;
     case USB_REQ_GET_CONFIGURATION:      
      
          if (req->bmRequestType != USB_DIR_IN) {
         printf("USB_REQ_SET_CONFIGURATION - Not USB_DIR_IN");
        }else
          printf("USB_REQ_SET_CONFIGURATION - USB_DIR_IN");
        //*(u8 *)req->buf = 0;
        //value = min(w_length, (u16)1);
      
     break;

     case USB_REQ_SET_INTERFACE:
      

         if (req->bmRequestType != USB_RECIP_INTERFACE) {
         printf("USB_REQ_SET_INTERFACE not USB_RECIP_INTERFACE\n");
        } else
        printf("USB_REQ_SET_INTERFACE USB_RECIP_INTERFACE\n");
//        value = 0;
       
     break;
     case USB_REQ_GET_INTERFACE:
       printf("USB_REQ_GET_INTERFACE\n");
/*
     if (ctrl->bRequestType != (USB_DIR_IN|USB_RECIP_INTERFACE)) {
         goto unknown;
        }
        if (w_index >= 1) {
         value = -EDOM;
         break;
        }
        *(u8 *)req->buf = 0;
        value = min(w_length, (u16)1);
*/       
     break;
    case USB_REQ_SET_FEATURE:
      if ((req->bmRequestType & USB_TYPE_CLASS) == USB_TYPE_CLASS) {
        switch (req->bmRequestType & USB_RECIP_MASK) {
          /* SET_HUB_FEATURE */
          case USB_RECIP_DEVICE:
          printf("USB_REQ_SET_FEATURE USB_RECIP_DEVICE value: %d\n",req->wValue);
        /*
            switch (req->w_value) {
              case 0: //* C_HUB_LOCAL_POWER /
              case 1: //* C_HUB_OVER_CURRENT /
                VDBG (dev, "SetHubFeature called\n");
                value = 0;
                break;
              default:
                value = -EINVAL;
                break;
            }
         */
            break;
          case USB_RECIP_OTHER:
          /* SET_PORT_FEATURE */
            if (req->wIndex == 0 || req->wIndex > 6) {
           printf("USB_REQ_SET_FEATURE USB_RECIP_OTHER value: %d\n",req->wIndex);
              //DBG (dev, "SetPortFeature: invalid port index %d\n", w_index);
              //value = -EINVAL;
              break;
            }
         printf("USB_REQ_SET_FEATURE USB_RECIP_OTHER value: %d\n",req->wValue);
            switch (req->wValue) {           
            case 4: //* PORT_RESET *
         /*
                DBG (dev, "SetPortFeature PORT_RESET called\n");
                dev->hub_ports[w_index-1].change |= PORT_STAT_C_RESET;
                hub_port_changed (dev);
                value = 0;
            */            
                break;
              case 8: //* PORT_POWER *
         /*
                DBG (dev, "SetPortFeature PORT_POWER called\n");
                dev->hub_ports[w_index-1].status |= PORT_STAT_POWER;
                if (dev->status == INIT && w_index == 6) {
                  dev->status = HUB_READY;
                  SET_TIMER (150);
                }
                value = 0;
            */            
                break;

              case 0: /* PORT_CONNECTION */
              case 1: /* PORT_ENABLE */
              case 2: /* PORT_SUSPEND */
              case 3: /* PORT_OVER_CURRENT */
              case 9: /* PORT_LOW_SPEED */
              case 16: /* C_PORT_CONNECTION */
              case 17: /* C_PORT_ENABLE */
              case 18: /* C_PORT_SUSPEND */
              case 19: /* C_PORT_OVER_CURRENT */
              case 20: /* C_PORT_RESET */
              case 21: /* PORT_TEST */
              case 22: /* PORT_INDICATOR */
/*
               DBG (dev, "SetPortFeature called\n");
                value = 0;
*/            
                break;
              default:
//                value = -EINVAL;
                break;
            }
            break;
        }
      }
      break;
      case USB_REQ_CLEAR_FEATURE:
        if ((req->bmRequestType & USB_TYPE_CLASS) == USB_TYPE_CLASS) {
        switch (req->bmRequestType & USB_RECIP_MASK) {
          /* CLEAR_HUB_FEATURE */
          case USB_RECIP_DEVICE:
          printf("USB_REQ_CLEAR_FEATURE USB_RECIP_DEVICE value: %d\n",req->wValue);
            switch (req->wValue) {
              case 0: /* C_HUB_LOCAL_POWER */
              case 1: /* C_HUB_OVER_CURRENT */
                //VDBG (dev, "ClearHubFeature called\n");
                //value = 0;
                break;
              default:
               // value = -EINVAL;
                break;
            }
            break;
          case USB_RECIP_OTHER:
            /* CLEAR_PORT_FEATURE */
            if (req->wIndex == 0 || req->wIndex > 6) {
           printf("USB_REQ_CLEAR_FEATURE USB_RECIP_OTHER wIndex: %d\n",req->wIndex);
              //DBG (dev, "ClearPortFeature: invalid port index %d\n", w_index);
              //value = -EINVAL;
              break;
            }
         printf("USB_REQ_CLEAR_FEATURE USB_RECIP_OTHER value: %d\n",req->wIndex);
            switch (req->wValue) {
              case 0: /* PORT_CONNECTION */
              case 1: /* PORT_ENABLE */
              case 2: /* PORT_SUSPEND */
              case 3: /* PORT_OVER_CURRENT */
              case 4: /* PORT_RESET */
              case 8: /* PORT_POWER */
              case 9: /* PORT_LOW_SPEED */
                //value = 0;
                break;
              case 16: /* C_PORT_CONNECTION */
                //DBG (dev, "ClearPortFeature C_PORT_CONNECTION called\n");
                //dev->hub_ports[req->wIndex-1].change &= ~PORT_STAT_C_CONNECTION;
/*
                switch (dev->status) {
                  case DEVICE1_WAIT_DISCONNECT:
                    dev->status = DEVICE1_DISCONNECTED;
                    SET_TIMER (200);
                    break;
                  case DEVICE2_WAIT_DISCONNECT:
                    dev->status = DEVICE2_DISCONNECTED;
                    SET_TIMER (170);
                    break;
                  case DEVICE3_WAIT_DISCONNECT:
                    dev->status = DEVICE3_DISCONNECTED;
                    SET_TIMER (450);
                    break;
                  case DEVICE4_WAIT_DISCONNECT:
                    dev->status = DEVICE4_DISCONNECTED;
                    SET_TIMER (200);
                    break;
                  case DEVICE5_WAIT_DISCONNECT:
                    dev->status = DEVICE5_DISCONNECTED;
                    SET_TIMER (200);
                    break;
                  default:
                    break;
                }
                value = 0;
*/                        
                break;
              case 20: /* C_PORT_RESET */
                /*
            DBG (dev, "ClearPortFeature C_PORT_RESET called\n");
                dev->hub_ports[req->wIndex-1].change &= ~PORT_STAT_C_RESET;

                switch (dev->status) {
                  case DEVICE1_WAIT_READY:
                    if (w_index == 1)
                      dev->switch_to_port_delayed = w_index;
                    break;
                  case DEVICE2_WAIT_READY:
                    if (w_index == 2)
                      dev->switch_to_port_delayed = w_index;
                    break;
                  case DEVICE3_WAIT_READY:
                    if (w_index == 3)
                      dev->switch_to_port_delayed = w_index;
                    break;
                  case DEVICE4_WAIT_READY:
                    if (w_index == 4)
                      dev->switch_to_port_delayed = w_index;
                    break;
                  case DEVICE5_WAIT_READY:
                    if (w_index == 5)
                      dev->switch_to_port_delayed = w_index;
                    break;
                  case DEVICE6_WAIT_READY:
                    if (w_index == 6)
                      dev->switch_to_port_delayed = w_index;
                    break;
                  default:
                    break;
                }
            */
                /* Delay switching the port because we first need to response
                   to this request with the proper address */
                //if (dev->switch_to_port_delayed >= 0)
                //  SET_TIMER (0);
                //value = 0;
                break;
              case 17: /* C_PORT_ENABLE */
              case 18: /* C_PORT_SUSPEND */
              case 19: /* C_PORT_OVER_CURRENT */
              case 21: /* PORT_TEST */
              case 22: /* PORT_INDICATOR */
                //DBG (dev, "ClearPortFeature called\n");
                //value = 0;
                //break;
              default:
                //value = -EINVAL;
                break;
            }
            break;
        }
      }
      break;
    
    case USB_REQ_GET_STATUS:
      if ((req->bmRequestType & USB_TYPE_CLASS) == USB_TYPE_CLASS) {
        u16 status = 0;
        u16 change = 0;

        //value = 2 * sizeof (u16);
      printf("USB_REQ_GET_STATUS USB_RECIP_OTHER value: %d\n",req->bmRequestType & USB_RECIP_MASK);
        switch (req->bmRequestType & USB_RECIP_MASK)
      {
          case USB_RECIP_DEVICE:
            //* GET_HUB_STATUS /
            status = 0;
            change = 0;
            break;
          case USB_RECIP_OTHER:
            //* GET_PORT_STATUS /
            if (req->wIndex == 0 || req->wIndex > 6) {
              //DBG (dev, "GetPortstatus : invalid port index %d\n", w_index);
              //value = -EINVAL;
              break;
            }
            //status = dev->hub_ports[w_index -1].status;
            //change = dev->hub_ports[w_index -1].change;
            break;
          default:
        break;
            //goto unknown;
        }
      
      /*
        if (value > 0) {
          //DBG (dev, "GetHub/PortStatus: transmtiting status %d change %d\n",
          //    status, change);
          status = cpu_to_le16 (status);
          change = cpu_to_le16 (change);
          //memcpy(req->buf, &status, sizeof(u16));
          //memcpy(req->buf + sizeof(u16), &change, sizeof(u16));
        }
      */
      }
      break;
    default:
   break;
    //unknown:
    //  VDBG(dev, "unknown control req%02x.%02x v%04x i%04x l%d\n",
    //      ctrl->bRequestType, ctrl->bRequest,
    //      w_value, w_index, w_length);
    
    
    
   }
  return 0;
}


Edito, mas lineas tocadas, que no puse...
añadir a la cabecera del main.h
usbmod.h

Fichero adjunto de dicha unidad
http://www.megaupload.com/?d=S0KX2EO8

modificadas linea que no usamos, para continuar el hilo de espera de conexión.
      if(result & USB_EVENT_ATTACH)
      {
         uint32_t magic;
         g_connected = 0;
         sceKernelClearEventFlag(g_mainevent, ~USB_EVENT_CONNECT);
         DEBUG_PRINTF("USB Attach occurred\n");
         printf("USB Attach occurred\n"); //añadido
         g_connected = 1;                 //añadido
         sceKernelSetEventFlag(g_mainevent, USB_EVENT_CONNECT);//añadido
/* Comentamos estas lineas
         if(read_data(&magic, sizeof(magic)) == sizeof(magic))
         {
            if(magic == HOSTFS_MAGIC)
            {
               if(send_hello_cmd())
               {
                  set_ayncreq(async_data, sizeof(async_data));
                  g_connected = 1;
                  sceKernelSetEventFlag(g_mainevent, USB_EVENT_CONNECT);
               }
            }
         }
*/   
...

añadido procedimiento configure
...
int usb_configure(int usb_version, int desc_count, struct InterfaceSettings *settings)
{
  printf("usb_configure usb_version %08X, desc_count %08X\n", usb_version, desc_count);
  return 0;
}
/* Device request */
int usb_request(int arg1, int arg2, struct DeviceRequest *req)
{
    const uint8_t  DescriptorType   = (req->wValue >> 8);

...
   
/* USB host driver */
struct UsbDriver g_driver =
{
   HOSTFSDRIVER_NAME,
   4,
   endp,
   &intp,
   NULL, NULL, NULL, NULL,
   (struct StringDescriptor *) strp,
   usb_request, func28, usb_attach, usb_detach,
   usb_configure, //añadido
   start_func,
   stop_func,
   NULL
};


Edito 2:
Pongo aqui la fuente con los últimos cambios mencionados.
http://www.megaupload.com/?d=40XVCQRG
estara este magnifico equipo apunto de preparar esto?
lo tendran para esta semana ke entra?
estamos todos deseosos pero con cautela porke esta claro ke su tiempo lleva. de todas formas Muxo Animo y al atakeeee
Me imagino que lo que voy a decir ya lo habreis pensado, pero cuando lo tengais funcional no publiqueis el source hasta pasado un tiempo para que todo el mundo se entere de que habeis sido vosotros. No vaya a ser que algun espabilao edite el source y lo publique como suyo.

Un saludo.
ifcaro escribió:Me imagino que lo que voy a decir ya lo habreis pensado, pero cuando lo tengais funcional no publiqueis el source hasta pasado un tiempo para que todo el mundo se entere de que habeis sido vosotros. No vaya a ser que algun espabilao edite el source y lo publique como suyo.

Un saludo.


a esperar mas ? [mad] [mad]
ifcaro escribió:Me imagino que lo que voy a decir ya lo habreis pensado, pero cuando lo tengais funcional no publiqueis el source hasta pasado un tiempo para que todo el mundo se entere de que habeis sido vosotros. No vaya a ser que algun espabilao edite el source y lo publique como suyo.

Un saludo.



Que tonteria mas grande acabas de decir
harmony555 escribió:
ifcaro escribió:Me imagino que lo que voy a decir ya lo habreis pensado, pero cuando lo tengais funcional no publiqueis el source hasta pasado un tiempo para que todo el mundo se entere de que habeis sido vosotros. No vaya a ser que algun espabilao edite el source y lo publique como suyo.

Un saludo.



Que tonteria mas grande acabas de decir

El que ha dicho esa tontería nos permitió cargar juegos de ps2 en ps3 gracias al swap magic :)
Guzmanus escribió:
harmony555 escribió:
ifcaro escribió:Me imagino que lo que voy a decir ya lo habreis pensado, pero cuando lo tengais funcional no publiqueis el source hasta pasado un tiempo para que todo el mundo se entere de que habeis sido vosotros. No vaya a ser que algun espabilao edite el source y lo publique como suyo.

Un saludo.



Que tonteria mas grande acabas de decir

El que ha dicho esa tontería nos permitió cargar juegos de ps2 en ps3 gracias al swap magic :)


Sip asi k mas cuidadito y mas respeto, k si ifcaro dice eso tiene toda la razon
PDNKED está baneado por "usar clon para saltarse baneo"
Guzmanus escribió:
harmony555 escribió:
ifcaro escribió:Me imagino que lo que voy a decir ya lo habreis pensado, pero cuando lo tengais funcional no publiqueis el source hasta pasado un tiempo para que todo el mundo se entere de que habeis sido vosotros. No vaya a ser que algun espabilao edite el source y lo publique como suyo.

Un saludo.



Que tonteria mas grande acabas de decir

El que ha dicho esa tontería nos permitió cargar juegos de ps2 en ps3 gracias al swap magic :)


A esas cosas me refiero con el respeto... si todo el mundo se tratara con respeto a este caballero no se le pondría cara de conejo cuando le haces las largas en la carretera.
Guzmanus escribió:
harmony555 escribió:
ifcaro escribió:Me imagino que lo que voy a decir ya lo habreis pensado, pero cuando lo tengais funcional no publiqueis el source hasta pasado un tiempo para que todo el mundo se entere de que habeis sido vosotros. No vaya a ser que algun espabilao edite el source y lo publique como suyo.

Un saludo.



Que tonteria mas grande acabas de decir

El que ha dicho esa tontería nos permitió cargar juegos de ps2 en ps3 gracias al swap magic :)



Asi es, hay que respetar sus comentarios el es muy bueno en la scene [rtfm] y decirle lo que se cree pero en otro modo, pero no insultando.
VENGA VA DEJAROS DE OFFTOPIC Y DEJAR ESTE HILO PARA LOS QUE SABEN!
El psGroove no funciona ni en una fat v5.55 ni en slim 6.31.
Salu2
danyh_rrt escribió:
ifcaro escribió:Me imagino que lo que voy a decir ya lo habreis pensado, pero cuando lo tengais funcional no publiqueis el source hasta pasado un tiempo para que todo el mundo se entere de que habeis sido vosotros. No vaya a ser que algun espabilao edite el source y lo publique como suyo.

Un saludo.


a esperar mas ? [mad] [mad]

harmony555 escribió:
ifcaro escribió:Me imagino que lo que voy a decir ya lo habreis pensado, pero cuando lo tengais funcional no publiqueis el source hasta pasado un tiempo para que todo el mundo se entere de que habeis sido vosotros. No vaya a ser que algun espabilao edite el source y lo publique como suyo.

Un saludo.



Que tonteria mas grande acabas de decir


Ha dicho el source no el compilado. Cuando lo tengan sacarán lógicamente la release para que todos la probeis y testeis. Pero el código fuente deben tardar en sacarlo por los motivos que ha dado ifcaro.

Además harmony555 te recuerdo que ifcaro es scener y sabe muy bien de lo que habla.

Tratemonos con respeto por favor!

POSTEAD POR FAVOR EN EL HILO DE DEBATE Y TESTERS!
hilo_debate-y-testers-psgroove-en-psp_1480315
1482 respuestas
Cerrado
Volver a Modchips y Softmods