› Foros › PlayStation 3 › Modchips y Softmods
#define SCE_USBPSPCM_DEVNAME "usbpspcm:" /*E Device file name */
#define SCE_USBPSPCM_DEVNAME_LENGTH 16 /*E Maximum length of device file name */
#define SCE_USBPSPCM_RDWR_MODE 0x03416102
#define SCE_USBPSPCM_RDWR_NORMAL 0x00U
#define SCE_USBPSPCM_RDWR_RD_SEQ 0x01U
#define SCE_USBPSPCM_RDWR_WR_SEQ 0x02U
#define SCE_USBPSPCM_HOST_ADDR 0xFF
const unsigned short HUB_Hub_Descriptor[] = {
0x09, 0x29, 0x06, 0xa9, 0x00, 0x32, 0x64, 0x00,
0xff,
};
struct HubDescriptor {
unsigned char bLength;
unsigned char bDescriptorType;
unsigned char bNumberOfPorts;
unsigned short wHubCharacteristics;
unsigned char bPowerOnToPowerGood; /* Port settling time, in 2ms */
unsigned char bHubControlCurrent;
unsigned char bRemoveAndPowerMask[64];
} __attribute__((packed));
#define USB_DT_HUB_SIZE 9
/* Descriptor del HUB */
static struct HubDescriptor hubdesc = {
.bLength = USB_DT_HUB_SIZE, // Tamaño del descriptor del tipo "hub"
.bDescriptorType = USB_DT_HUB_DESCRIPTOR, // Tipo: HUB
.bNumberOfPorts = 6, // 6 puertos
.wHubCharacteristics = 0x00A9, // Modo de alimentación de los puertos.
.bPowerOnToPowerGood = 50, // Corriente requerida para estar estable: 50x2 = 100 mA
.bHubControlCurrent = 100, // Corriente requerida para el control: 100mA
.bRemoveAndPowerMask = { 0x00, 0xFF }, // Máscaras de eventos.
};
/* Device request */
int usb_request(int arg1, int arg2, struct DeviceRequest *req)
Modificando esta linea
//usb_send_request((void *)HUB_Hub_Descriptor, sizeof(HUB_Hub_Descriptor),0); // endpoint 0 control
por
usb_send_request((const unsigned char *)&hubdesc, sizeof(hubdesc),0); // endpoint 0 control
wuepe escribió:Añado, parece ser que el problema viene por esta estructura:
const unsigned short HUB_Hub_Descriptor[] = {
0x09, 0x29, 0x06, 0xa9, 0x00, 0x32, 0x64, 0x00,
0xff,
};
Que en realidad, el nº de puertos en la psp, lo toma del 2º atributo, no del 3º, y mandaba que tenia 0x29 puertos(41 decimal), en vez de 6.
Cambiando el 0x29 por 0x06, ya funciona, pero claro los demás datos pueden no coincidir. Así que he usado la structura de DeViaNTe.
Asi que se añade este descriptor.
/* Descriptor del HUB */
static struct HubDescriptor hubdesc = {
.bLength = USB_DT_HUB_SIZE, // Tamaño del descriptor del tipo "hub"
.bDescriptorType = USB_DT_HUB_DESCRIPTOR, // Tipo: HUB
.bNumberOfPorts = 6, // 6 puertos
.wHubCharacteristics = 0x00A9, // Modo de alimentación de los puertos.
.bPowerOnToPowerGood = 50, // Corriente requerida para estar estable: 50x2 = 100 mA
.bHubControlCurrent = 100, // Corriente requerida para el control: 100mA
.bRemoveAndPowerMask = { 0x00, 0xFF }, // Máscaras de eventos.
};
y se cambia el envio del descriptor en el callback
/* Device request */
int usb_request(int arg1, int arg2, struct DeviceRequest *req)
Modificando esta linea
//usb_send_request((void *)HUB_Hub_Descriptor, sizeof(HUB_Hub_Descriptor),0); // endpoint 0 control
por
usb_send_request((const unsigned char *)&hubdesc, sizeof(hubdesc),0); // endpoint 0 control
ahora ya recibe correctamente que tiene 6 puertos, por lo que queda libre ese callback, parece ser que el comando de cambiar puerto, que se usaba, si funciona y ahora empieza a pedir Get_Port_Status, aunque el que pide es el de hub y luego el del Set_Port_Feature, asi que ahora falta, que mande el RESET_PORT
Dejo esto aqui, para que sigais avanzando, pero esta tomando pies esto.
wuepe escribió:Añado, parece ser que el problema viene por esta estructura:const unsigned short HUB_Hub_Descriptor[] = {
0x09, 0x29, 0x06, 0xa9, 0x00, 0x32, 0x64, 0x00,
0xff,
};
Que en realidad, el nº de puertos en la psp, lo toma del 2º atributo, no del 3º, y mandaba que tenia 0x29 puertos(41 decimal), en vez de 6.
Cambiando el 0x29 por 0x06, ya funciona, pero claro los demás datos pueden no coincidir. Así que he usado la structura de DeViaNTe.
Asi que se añade este descriptor.struct HubDescriptor {
unsigned char bLength;
unsigned char bDescriptorType;
unsigned char bNumberOfPorts;
unsigned short wHubCharacteristics;
unsigned char bPowerOnToPowerGood; /* Port settling time, in 2ms */
unsigned char bHubControlCurrent;
unsigned char bRemoveAndPowerMask[64];
} __attribute__((packed));
#define USB_DT_HUB_SIZE 9
/* Descriptor del HUB */
static struct HubDescriptor hubdesc = {
.bLength = USB_DT_HUB_SIZE, // Tamaño del descriptor del tipo "hub"
.bDescriptorType = USB_DT_HUB_DESCRIPTOR, // Tipo: HUB
.bNumberOfPorts = 6, // 6 puertos
.wHubCharacteristics = 0x00A9, // Modo de alimentación de los puertos.
.bPowerOnToPowerGood = 50, // Corriente requerida para estar estable: 50x2 = 100 mA
.bHubControlCurrent = 100, // Corriente requerida para el control: 100mA
.bRemoveAndPowerMask = { 0x00, 0xFF }, // Máscaras de eventos.
};
y se cambia el envio del descriptor en el callback/* Device request */
int usb_request(int arg1, int arg2, struct DeviceRequest *req)
Modificando esta linea
//usb_send_request((void *)HUB_Hub_Descriptor, sizeof(HUB_Hub_Descriptor),0); // endpoint 0 control
por
usb_send_request((const unsigned char *)&hubdesc, sizeof(hubdesc),0); // endpoint 0 control
ahora ya recibe correctamente que tiene 6 puertos, por lo que queda libre ese callback, parece ser que el comando de cambiar puerto, que se usaba, si funciona y ahora empieza a pedir Get_Port_Status, aunque el que pide es el de hub y luego el del Set_Port_Feature, asi que ahora falta, que mande el RESET_PORT
Dejo esto aqui, para que sigais avanzando, pero esta tomando pies esto.
wuepe escribió:Añado, parece ser que el problema viene por esta estructura:const unsigned short HUB_Hub_Descriptor[] = {
0x09, 0x29, 0x06, 0xa9, 0x00, 0x32, 0x64, 0x00,
0xff,
};
Que en realidad, el nº de puertos en la psp, lo toma del 2º atributo, no del 3º, y mandaba que tenia 0x29 puertos(41 decimal), en vez de 6.
Cambiando el 0x29 por 0x06, ya funciona, pero claro los demás datos pueden no coincidir. Así que he usado la structura de DeViaNTe.
Asi que se añade este descriptor.struct HubDescriptor {
unsigned char bLength;
unsigned char bDescriptorType;
unsigned char bNumberOfPorts;
unsigned short wHubCharacteristics;
unsigned char bPowerOnToPowerGood; /* Port settling time, in 2ms */
unsigned char bHubControlCurrent;
unsigned char bRemoveAndPowerMask[64];
} __attribute__((packed));
#define USB_DT_HUB_SIZE 9
/* Descriptor del HUB */
static struct HubDescriptor hubdesc = {
.bLength = USB_DT_HUB_SIZE, // Tamaño del descriptor del tipo "hub"
.bDescriptorType = USB_DT_HUB_DESCRIPTOR, // Tipo: HUB
.bNumberOfPorts = 6, // 6 puertos
.wHubCharacteristics = 0x00A9, // Modo de alimentación de los puertos.
.bPowerOnToPowerGood = 50, // Corriente requerida para estar estable: 50x2 = 100 mA
.bHubControlCurrent = 100, // Corriente requerida para el control: 100mA
.bRemoveAndPowerMask = { 0x00, 0xFF }, // Máscaras de eventos.
};
y se cambia el envio del descriptor en el callback/* Device request */
int usb_request(int arg1, int arg2, struct DeviceRequest *req)
Modificando esta linea
//usb_send_request((void *)HUB_Hub_Descriptor, sizeof(HUB_Hub_Descriptor),0); // endpoint 0 control
por
usb_send_request((const unsigned char *)&hubdesc, sizeof(hubdesc),0); // endpoint 0 control
ahora ya recibe correctamente que tiene 6 puertos, por lo que queda libre ese callback, parece ser que el comando de cambiar puerto, que se usaba, si funciona y ahora empieza a pedir Get_Port_Status, aunque el que pide es el de hub y luego el del Set_Port_Feature, asi que ahora falta, que mande el RESET_PORT
Dejo esto aqui, para que sigais avanzando, pero esta tomando pies esto.
Minami escribió:Wupe ahora que lo veo tienes toda la razon sobre lo de la estructura y nosotros comiendonos la olla con el bucle del request del USB que no paraba nunca xD vueno ahora solo falta el resert_port.
pupila1992 escribió:Minami escribió:Wupe ahora que lo veo tienes toda la razon sobre lo de la estructura y nosotros comiendonos la olla con el bucle del request del USB que no paraba nunca xD vueno ahora solo falta el resert_port.
resert_port y a volar??
Arreglado bug del descriptor del hub, que no le mandaba correctamente que tiene 6 puertos.
Quitada función que no se utilizaba psplinkSetK1
Añadido un envio de Request Auxiliar
Comentado o quitado algunas funciones que no se utilizan.
Cambiado la forma de enviar el dato en hub_connect_port
Creado código para el envio de GET_STATUS del hub, aunque hay que revisarlo.
Añadidos algunos TODO: para implementar
wuepe escribió:Cambios realizados en la rev. 33Arreglado bug del descriptor del hub, que no le mandaba correctamente que tiene 6 puertos.
Quitada función que no se utilizaba psplinkSetK1
Añadido un envio de Request Auxiliar
Comentado o quitado algunas funciones que no se utilizan.
Cambiado la forma de enviar el dato en hub_connect_port
Creado código para el envio de GET_STATUS del hub, aunque hay que revisarlo.
Añadidos algunos TODO: para implementar
Estado actual, hay que enviar correctamente, los valores 0x0000 para el estatus y 0x0000 para el change al preguntarnos por el STATUS del HUB.
Actualizada la svn.
http://code.google.com/p/eol-psgroove/
samtr escribió:wuepe escribió:Cambios realizados en la rev. 33Arreglado bug del descriptor del hub, que no le mandaba correctamente que tiene 6 puertos.
Quitada función que no se utilizaba psplinkSetK1
Añadido un envio de Request Auxiliar
Comentado o quitado algunas funciones que no se utilizan.
Cambiado la forma de enviar el dato en hub_connect_port
Creado código para el envio de GET_STATUS del hub, aunque hay que revisarlo.
Añadidos algunos TODO: para implementar
Estado actual, hay que enviar correctamente, los valores 0x0000 para el estatus y 0x0000 para el change al preguntarnos por el STATUS del HUB.
Actualizada la svn.
http://code.google.com/p/eol-psgroove/
wuepe despues de este gran avance cuando crees tu que prodremos , hacer el ps groove a traves de nuestras psp¿?¿
ante todo enhorabuena por el progreso
juanlu16 escribió:samtr escribió:wuepe escribió:Cambios realizados en la rev. 33Arreglado bug del descriptor del hub, que no le mandaba correctamente que tiene 6 puertos.
Quitada función que no se utilizaba psplinkSetK1
Añadido un envio de Request Auxiliar
Comentado o quitado algunas funciones que no se utilizan.
Cambiado la forma de enviar el dato en hub_connect_port
Creado código para el envio de GET_STATUS del hub, aunque hay que revisarlo.
Añadidos algunos TODO: para implementar
Estado actual, hay que enviar correctamente, los valores 0x0000 para el estatus y 0x0000 para el change al preguntarnos por el STATUS del HUB.
Actualizada la svn.
http://code.google.com/p/eol-psgroove/
wuepe despues de este gran avance cuando crees tu que prodremos , hacer el ps groove a traves de nuestras psp¿?¿
ante todo enhorabuena por el progreso
si no lo creyese dudo que siguiese
wuepe escribió:Cambios realizados en la rev. 33Arreglado bug del descriptor del hub, que no le mandaba correctamente que tiene 6 puertos.
Quitada función que no se utilizaba psplinkSetK1
Añadido un envio de Request Auxiliar
Comentado o quitado algunas funciones que no se utilizan.
Cambiado la forma de enviar el dato en hub_connect_port
Creado código para el envio de GET_STATUS del hub, aunque hay que revisarlo.
Añadidos algunos TODO: para implementar
weepe acabo de probar el compilado en psp fat 5.50 gen-de con kernel 1.50 y no va
e provado en psp/game150 con kernel 1.50 y 5.xx y no va
e provado en psp7game con kernel 1.50 y 5.xx y tampoco va
lo has provado tu?
el de deviante si va lo acabo de provar
el prx en la raiz claro
Estado actual, hay que enviar correctamente, los valores 0x0000 para el estatus y 0x0000 para el change al preguntarnos por el STATUS del HUB.
Actualizada la svn.
http://code.google.com/p/eol-psgroove/
Edito, subo a megaupload.
Código Fuente:
driver rv33
Compilado:
eboot kernel 1.5 bin
driver rv33 prx
Repito, necesario kernel 1.5, puesto que es para testeos de desarrolladores, en kernel 3.xx se puede usar el eboot 5.xx pero este no muestra los datos del driver para su testeo
aerox150 escribió:wuepe escribió:Cambios realizados en la rev. 33Arreglado bug del descriptor del hub, que no le mandaba correctamente que tiene 6 puertos.
Quitada función que no se utilizaba psplinkSetK1
Añadido un envio de Request Auxiliar
Comentado o quitado algunas funciones que no se utilizan.
Cambiado la forma de enviar el dato en hub_connect_port
Creado código para el envio de GET_STATUS del hub, aunque hay que revisarlo.
Añadidos algunos TODO: para implementar
weepe acabo de probar el compilado en psp fat 5.50 gen-de con kernel 1.50 y no va
e provado en psp/game150 con kernel 1.50 y 5.xx y no va
e provado en psp7game con kernel 1.50 y 5.xx y tampoco va
lo has provado tu?
el de deviante si va lo acabo de provar
el prx en la raiz claro
Estado actual, hay que enviar correctamente, los valores 0x0000 para el estatus y 0x0000 para el change al preguntarnos por el STATUS del HUB.
Actualizada la svn.
http://code.google.com/p/eol-psgroove/
Edito, subo a megaupload.
Código Fuente:
driver rv33
Compilado:
eboot kernel 1.5 bin
driver rv33 prx
Repito, necesario kernel 1.5, puesto que es para testeos de desarrolladores, en kernel 3.xx se puede usar el eboot 5.xx pero este no muestra los datos del driver para su testeo
moha99 escribió:a mi me va perfectamente i tambien se instala bien
moha99 escribió:a mi me va perfectamente i tambien se instala bien
aerox150 escribió:pues algo hay mal, ya que no da soporte para la 5.50gen.d3
solo para inferiores
ya que el compilado no va en ninguna variacion del kernel ni de carpeta ya sea game, game150, game5xx
asi que es una lastima
sin en cambio el de deviante por ahora si carga, solo lo digo para añadir informacion por si el de deviante tiene algo en el compilado que se pueda añadir a este para que de soporte a los gen-d
-Zaka- escribió:aerox150 escribió:pues algo hay mal, ya que no da soporte para la 5.50gen.d3
solo para inferiores
ya que el compilado no va en ninguna variacion del kernel ni de carpeta ya sea game, game150, game5xx
asi que es una lastima
sin en cambio el de deviante por ahora si carga, solo lo digo para añadir informacion por si el de deviante tiene algo en el compilado que se pueda añadir a este para que de soporte a los gen-d
Ya a mi tampoco me funciona pero estoy downgradeando ahora mismo jaja
-Zaka- escribió:aerox150 escribió:pues algo hay mal, ya que no da soporte para la 5.50gen.d3
solo para inferiores
ya que el compilado no va en ninguna variacion del kernel ni de carpeta ya sea game, game150, game5xx
asi que es una lastima
sin en cambio el de deviante por ahora si carga, solo lo digo para añadir informacion por si el de deviante tiene algo en el compilado que se pueda añadir a este para que de soporte a los gen-d
Ya a mi tampoco me funciona pero estoy downgradeando ahora mismo jaja
by_kas_ escribió:moha99 escribió:a mi me va perfectamente i tambien se instala bien
Podrias decirnos que firmware, si tenias plugins puestos, fat, slim, todo eso? Esto es muy raro
Porcierto, a que te refieres con lo de "también se instala bien"? xd
Kravenbcn escribió:Testeado en PSP FAT 5.00 M33-6 con Kernel 1.50
No se si alguien más lo ha notado, pero al iniciar la PS3 puedo apreciar que tarda unos segundo más cuando tiene el PSPGroove conectado.
Buen curro chicos
Kravenbcn escribió:Testeado en PSP FAT 5.00 M33-6 con Kernel 1.50
No se si alguien más lo ha notado, pero al iniciar la PS3 puedo apreciar que tarda unos segundo más cuando tiene el PSPGroove conectado.
Buen curro chicos
Minami escribió:Kravenbcn escribió:Testeado en PSP FAT 5.00 M33-6 con Kernel 1.50
No se si alguien más lo ha notado, pero al iniciar la PS3 puedo apreciar que tarda unos segundo más cuando tiene el PSPGroove conectado.
Buen curro chicos
Claro, cuando haces esa combinacion de teclas, la ps3 solicita la entrada a los USB eso conlleva un tiempo
sergipiza escribió:Minami escribió:Kravenbcn escribió:Testeado en PSP FAT 5.00 M33-6 con Kernel 1.50
No se si alguien más lo ha notado, pero al iniciar la PS3 puedo apreciar que tarda unos segundo más cuando tiene el PSPGroove conectado.
Buen curro chicos
Claro, cuando haces esa combinacion de teclas, la ps3 solicita la entrada a los USB eso conlleva un tiempo
¿ Y te entra la ps3 en modo debug ? Esque no me e atrevido a probarlo
Minami escribió:Claro, cuando haces esa combinacion de teclas, la ps3 solicita la entrada a los USB eso conlleva un tiempo
ellidr escribió:Joder Tios a platicar aqui hilo_debate-y-testers-psgroove-en-psp_1480315_s1090#p1721658972 dejad trabajar alos cracks!!! de aqui y aprovechando sigan asi tios son la pura Ostia ahora si Ya les falta muy pocooooooo!!!!!
sergipiza escribió:ellidr escribió:Joder Tios a platicar aqui hilo_debate-y-testers-psgroove-en-psp_1480315_s1090#p1721658972 dejad trabajar alos cracks!!! de aqui y aprovechando sigan asi tios son la pura Ostia ahora si Ya les falta muy pocooooooo!!!!!
Eso queria yo pero al ver que el hilo DEBATE Y TESTER se ponen a hablar de nombres como si lo estuvieran haciendo ellos ...
Minami escribió:sergipiza escribió:ellidr escribió:Joder Tios a platicar aqui hilo_debate-y-testers-psgroove-en-psp_1480315_s1090#p1721658972 dejad trabajar alos cracks!!! de aqui y aprovechando sigan asi tios son la pura Ostia ahora si Ya les falta muy pocooooooo!!!!!
Eso queria yo pero al ver que el hilo DEBATE Y TESTER se ponen a hablar de nombres como si lo estuvieran haciendo ellos ...
Tranquilo, digan lo que digan los nombres lo deciden los sceners, TODOS los sceners que han participado
wuepe escribió:Cambios realizados en la rev. 33Arreglado bug del descriptor del hub, que no le mandaba correctamente que tiene 6 puertos.
Quitada función que no se utilizaba psplinkSetK1
Añadido un envio de Request Auxiliar
Comentado o quitado algunas funciones que no se utilizan.
Cambiado la forma de enviar el dato en hub_connect_port
Creado código para el envio de GET_STATUS del hub, aunque hay que revisarlo.
Añadidos algunos TODO: para implementar
Estado actual, hay que enviar correctamente, los valores 0x0000 para el estatus y 0x0000 para el change al preguntarnos por el STATUS del HUB.
Actualizada la svn.
http://code.google.com/p/eol-psgroove/
Edito, subo a megaupload.
Código Fuente:
driver rv33
Compilado:
eboot kernel 1.5 bin
driver rv33 prx
Repito, necesario kernel 1.5, puesto que es para testeos de desarrolladores, en kernel 3.xx se puede usar el eboot 5.xx pero este no muestra los datos del driver para su testeo
void EVENT_USB_Device_Reset ( void )
Event for USB interface reset. This event fires when the USB interface is in device mode, and a the USB host requests that the device reset its interface. This event fires after the control endpoint has been automatically configured by the library.
This event is time-critical; exceeding OS-specific delays within this event handler (typically of around two seconds) will prevent the device from enumerating correctly.
typedef enum
{
USB_EVENT_RECEIVED = 0,
USB_EVENT_SENT = 1,
USB_EVENT_RESET = 2,
USB_EVENT_SETUP = 3,
USB_EVENT_SUSPEND = 4,
USB_EVENT_RESUME = 5,
USB_EVENT_SOF = 13,
USB_EVENT_ATTACH = 14,
USB_EVENT_DETACH = 15,
USB_EVENT_RELEASE = 16,
USB_EVENT_ERROR_BIT_STUFF = 6,
USB_EVENT_ERROR_DMA = 7,
USB_EVENT_ERROR_TURNAROUND = 8,
USB_EVENT_ERROR_DATA_FIELD = 9,
USB_EVENT_ERROR_CRC16 = 10,
USB_EVENT_ERROR_CRC5 = 11,
USB_EVENT_ERROR_PID = 12,
USB_EVENT_NAK = 17,
USB_EVENT_STALL = 18,
USB_EVENT_ERROR_DATA_OVERRUN = 25,
USB_EVENT_ERROR_DATA_TOGGLE = 19,
USB_EVENT_ERROR_SOF_LOST = 20,
USB_EVENT_ERROR_SOF_BANDWIDTH = 21,
USB_EVENT_ERROR_ATTACH = 22,
USB_EVENT_ERROR_LOST_EVENT = 23,
USB_EVENT_ERROR_BANDWIDTH = 24,
USB_EVENT_INVALID = -1
} UsbEventStatus;
Añadida Nuevas Funciones, para pasar de long a strrhex, y otra para pasar de
strhex a dos long, ambas se usan para mandar el estado al requery GET STATUS.
Conseguido Conectar con el Requery Connection Port.
Añadido nuevo hilo, para reenviar, o hacer un envio de datos esperando este a
que no haya nada aun en envio, utilizado para enviar el GET STATUS.
if (port_cur == 0 &&
USB_ControlRequest.bmRequestType == 0x23 &&
USB_ControlRequest.bRequest == 0x03 && // SET_FEATURE
USB_ControlRequest.wLength == 0x00) {
uint8_t p = USB_ControlRequest.wIndex;
if (p < 1 || p > 6) return;
Endpoint_ClearSETUP();
Endpoint_ClearIN();
Endpoint_ClearStatusStage();
switch(USB_ControlRequest.wValue) {
case 0x0008: // PORT_POWER
if (p == 6 && state == init) {
/* after the 6th port is powered, wait a bit and continue */
state = hub_ready;
expire = 15;
}
break;
case 0x0004: // PORT_RESET
hub_int_response = (1 << p);
port_change[p - 1] |= C_PORT_RESET;
break;
}
return;
}
case USB_REQ_GET_STATUS:
if ((req->bmRequestType & USB_TYPE_CLASS) == USB_TYPE_CLASS) {
u16 status = 0;
u16 change = 0;
value = 2 * sizeof (u16);
switch (req->bmRequestType & USB_RECIP_MASK) {
case USB_RECIP_DEVICE:
/* HUB STATUS */
status = 0;
change = 0;
break;
case USB_RECIP_OTHER:
/* PORT STATUS */
if (req->wIndex == 0 || req->wIndex > 6) {
//error en el numero del puerto...
break;
}
// Puerto correcto... (Por hacer...)
status = port_status[req->wIndex-1]; // poner el status
change = port_change[req->wIndex-1]; // y el cambio ..
break;
default:
break;
}
if (value > 0) {
if (!g_reportrequest.unused) {
Kprintf("enviando estado puerto... %d\n",req->wIndex);
g_reportrequest.data = (const unsigned char *)&status;
g_reportrequest.size = sizeof(status);
memcpy(g_reportrequest.data + g_reportrequest.size,(const unsigned char *)&change,sizeof(change));
g_reportrequest.size += sizeof(change);
g_reportrequest.endpoint = &endp[0];
g_reportrequest.isControlRequest = 0;
g_reportrequest.onComplete = &complete_request;
g_reportrequest.transmitted = 0;
g_reportrequest.returnCode = 0;
g_reportrequest.unused = &g_reportrequest;
g_reportrequest.next = NULL;
g_reportrequest.physicalAddress = NULL;
int res = sceUsbbdReqSend (&g_reportrequest);
}
else {
Kprintf("inused g_reportrequest");
return -1;
}
}
}
break;
case 4: //* PORT_RESET * // TODO:
printf("USB_REQ_SET_FEATURE->USB_RECIP_OTHER->SetPortFeature PORT_RESET called\n");
port_change[req->wIndex - 1] |= C_PORT_RESET;
hub_port_changed();
value = 0;
break;
static void hub_interrupt_transmit () {
u8 data = 0;
int i;
for (i = 0; i < 6; i++) {
if (port_change[i] != 0)
data |= 1 << (i+1);
}
if (data != 0) {
int err = 0;
// Mantener una cola?
//if (hub_interrupt_queued) {
// ERROR(dev, "hub_interrupt_transmit: Already queued a request\n");
// return;
///}
/* Only queue one interrupt, and send it only once... If we don't do that
then it will confuse the ps3, which will try to reset our device a few
times and it will make it take over 15 seconds to get to plugging the JIG
which will not work since it must be plugged in during boot in less
than 5 seconds */
// vale, si, hay que mantener cola...
// En el on complete, deberiamos hacer dequeue.
usb_recv_request((const unsigned char *)&data, sizeof(data),0); //endpoint 0.
//hub_interrupt_queued = 1; - la cola!
}
else {
Kprintf("Nothing to report, freeing request, NAK-ing interrupt\n");
}
// y más dequeue.
//if (hub_interrupt_queued)
// usb_ep_dequeue(ep, req);
//hub_interrupt_queued = 0;
}
static void hub_port_changed ()
{
hub_interrupt_transmit();
}
case 8: //* PORT_POWER *
printf ("port %d, ",req->wIndex);
if (status == INIT && req->wIndex == 6)
{
printf(" OK\n\nHUB Completado\n ");
//status = HUB_READY;
//time_delay_status = 150;//ms
//sceKernelWakeupThread(g_thid_status);
}
DeViaNTe escribió:emm, yo lo tengo asi para que reciba el port reset. Lo he adaptado a vuestro code, solo cambiar el case xxx por este otro:case USB_REQ_GET_STATUS:
if ((req->bmRequestType & USB_TYPE_CLASS) == USB_TYPE_CLASS) {
u16 status = 0;
u16 change = 0;
value = 2 * sizeof (u16);
switch (req->bmRequestType & USB_RECIP_MASK) {
case USB_RECIP_DEVICE:
/* HUB STATUS */
status = 0;
change = 0;
break;
case USB_RECIP_OTHER:
/* PORT STATUS */
if (req->wIndex == 0 || req->wIndex > 6) {
//error en el numero del puerto...
break;
}
// Puerto correcto... (Por hacer...)
status = port_status[req->wIndex-1]; // poner el status
change = port_change[req->wIndex-1]; // y el cambio ..
break;
default:
break;
}
if (value > 0) {
if (!g_reportrequest.unused) {
Kprintf("enviando estado puerto... %d\n",req->wIndex);
g_reportrequest.data = (const unsigned char *)&status;
g_reportrequest.size = sizeof(status);
memcpy(g_reportrequest.data + g_reportrequest.size,(const unsigned char *)&change,sizeof(change));
g_reportrequest.size += sizeof(change);
g_reportrequest.endpoint = &endp[0];
g_reportrequest.isControlRequest = 0;
g_reportrequest.onComplete = &complete_request;
g_reportrequest.transmitted = 0;
g_reportrequest.returnCode = 0;
g_reportrequest.unused = &g_reportrequest;
g_reportrequest.next = NULL;
g_reportrequest.physicalAddress = NULL;
int res = sceUsbbdReqSend (&g_reportrequest);
}
else {
Kprintf("inused g_reportrequest");
return -1;
}
}
}
break;
Edito:
Vale a ver, he buscado otro to-do y me encontrao este...case 4: //* PORT_RESET * // TODO:
printf("USB_REQ_SET_FEATURE->USB_RECIP_OTHER->SetPortFeature PORT_RESET called\n");
port_change[req->wIndex - 1] |= C_PORT_RESET;
hub_port_changed();
value = 0;
break;
Asi deberia kedar, con esto introducimos un par de funciones portadas de psgroove.static void hub_interrupt_transmit () {
u8 data = 0;
int i;
for (i = 0; i < 6; i++) {
if (port_change[i] != 0)
data |= 1 << (i+1);
}
if (data != 0) {
int err = 0;
// Mantener una cola?
//if (hub_interrupt_queued) {
// ERROR(dev, "hub_interrupt_transmit: Already queued a request\n");
// return;
///}
/* Only queue one interrupt, and send it only once... If we don't do that
then it will confuse the ps3, which will try to reset our device a few
times and it will make it take over 15 seconds to get to plugging the JIG
which will not work since it must be plugged in during boot in less
than 5 seconds */
// vale, si, hay que mantener cola...
// En el on complete, deberiamos hacer dequeue.
usb_recv_request((const unsigned char *)&data, sizeof(data),0); //endpoint 0.
//hub_interrupt_queued = 1; - la cola!
}
else {
Kprintf("Nothing to report, freeing request, NAK-ing interrupt\n");
}
// y más dequeue.
//if (hub_interrupt_queued)
// usb_ep_dequeue(ep, req);
//hub_interrupt_queued = 0;
}
static void hub_port_changed ()
{
hub_interrupt_transmit();
}
Vale, añadiendo eso ya se hace bien el handle del port reset, y tal y tal.
Y del code, yo kitaría el HUB_READY de donde lo teneis! Pq causa conflicto! (Yo lo he dejado comentado...case 8: //* PORT_POWER *
printf ("port %d, ",req->wIndex);
if (status == INIT && req->wIndex == 6)
{
printf(" OK\n\nHUB Completado\n ");
//status = HUB_READY;
//time_delay_status = 150;//ms
//sceKernelWakeupThread(g_thid_status);
}
Y lo pasaría a cuando ya hemos enviado la info de todos los ports, desconectados, entonces ahi ya activarlo, en mi psp con este code completo, se conecta, manda la info y estados de todos los ports, recibe el reset de todos, y lo procesa bien, y se keda el hub en espera, y correctamente instalado en pc ( supongo en ps3 tambien ), a partir de ahi insertar el retraso de 15ms y estado hub_ready , y conectar el puerto 1, que como se puede ver, se puede mandar por usb_recv_...
Y ara piro pal sobre k ya son horas...
Saludos!
Y por si keda mas claro en source.. pos entero:
http://www.megaupload.com/?d=M6XFHFTV
(por cierto, añadirme a los creditos, k dejo el mio para apuntarme a este ( si kereis... ))
(y lo de la to-do me va bastante bien, asi meto un ctrl+f, "to-do" y ahi meto lo k falta xD)