› Foros › PlayStation 3 › Modchips y Softmods
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
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
...
/* 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;
...
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;
...
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
/* String descriptor */
unsigned char strp[] =
{
// 0x8, 0x3, '<', 0, '>', 0, 0, 0
0x09, 0x29, {0x06, 0xA9, 0x00, 0x32, 0x64, 0x00, 0xff}
};
/* String descriptor */
unsigned char strp[] =
{ // 0x8, 0x3, '<', 0, '>', 0, 0, 0
0x09, 0x29, 0x06, 0xA9, 0x00, 0x32, 0x64, 0x00, 0xff
};
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 }
};
darkone escribió:...
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.
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
Rukario escribió:ya se puede hackiar la ps3 por medio del psp? =D ponganme al tanto por favor!!
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.
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.
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...
...
/* 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
...
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
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!
/* 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;
}
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);
}
}
}
*/
...
...
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
};
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.
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.
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
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
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
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
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 ?
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