mirror of
https://github.com/holub/mame
synced 2025-06-05 20:33:45 +03:00
xbox.cpp: more usb (nw)
This commit is contained in:
parent
b34b408d8c
commit
c30f7e5852
@ -245,7 +245,7 @@ struct usb_device_interface
|
||||
{
|
||||
UINT8 *position;
|
||||
int size;
|
||||
std::forward_list<usb_device_interface_alternate> alternate_settings;
|
||||
std::forward_list<usb_device_interface_alternate *> alternate_settings;
|
||||
int selected_alternate;
|
||||
};
|
||||
|
||||
@ -254,27 +254,27 @@ struct usb_device_configuration
|
||||
USBStandardConfigurationDescriptor configuration_descriptor;
|
||||
UINT8 *position;
|
||||
int size;
|
||||
std::forward_list<usb_device_interface> interfaces;
|
||||
std::forward_list<usb_device_interface *> interfaces;
|
||||
};
|
||||
|
||||
class ohci_function_device {
|
||||
public:
|
||||
ohci_function_device(running_machine &machine);
|
||||
void execute_reset();
|
||||
int execute_transfer(int address, int endpoint, int pid, UINT8 *buffer, int size);
|
||||
int execute_transfer(int address, int endpoint, int pid, UINT8 *buffer, int size) ;
|
||||
protected:
|
||||
int handle_nonstandard_request(int endpoint, USBSetupPacket *setup);
|
||||
virtual int handle_get_status_request(int endpoint, USBSetupPacket *setup) = 0;
|
||||
virtual int handle_clear_feature_request(int endpoint, USBSetupPacket *setup) = 0;
|
||||
virtual int handle_set_feature_request(int endpoint, USBSetupPacket *setup) = 0;
|
||||
virtual int handle_set_descriptor_request(int endpoint, USBSetupPacket *setup) = 0;
|
||||
virtual int handle_synch_frame_request(int endpoint, USBSetupPacket *setup) = 0;
|
||||
private:
|
||||
void add_device_descriptor(USBStandardDeviceDescriptor &descriptor);
|
||||
void add_configuration_descriptor(USBStandardConfigurationDescriptor &descriptor);
|
||||
void add_interface_descriptor(USBStandardInterfaceDescriptor &descriptor);
|
||||
void add_endpoint_descriptor(USBStandardEndpointDescriptor &descriptor);
|
||||
void add_string_descriptor(UINT8 *descriptor);
|
||||
virtual int handle_nonstandard_request(int endpoint, USBSetupPacket *setup) { return -1; };
|
||||
virtual int handle_get_status_request(int endpoint, USBSetupPacket *setup) { return 0; };
|
||||
virtual int handle_clear_feature_request(int endpoint, USBSetupPacket *setup) { return 0; };
|
||||
virtual int handle_set_feature_request(int endpoint, USBSetupPacket *setup) { return 0; };
|
||||
virtual int handle_set_descriptor_request(int endpoint, USBSetupPacket *setup) { return 0; };
|
||||
virtual int handle_synch_frame_request(int endpoint, USBSetupPacket *setup) { return 0; };
|
||||
|
||||
void add_device_descriptor(const USBStandardDeviceDescriptor &descriptor);
|
||||
void add_configuration_descriptor(const USBStandardConfigurationDescriptor &descriptor);
|
||||
void add_interface_descriptor(const USBStandardInterfaceDescriptor &descriptor);
|
||||
void add_endpoint_descriptor(const USBStandardEndpointDescriptor &descriptor);
|
||||
void add_string_descriptor(const UINT8 *descriptor);
|
||||
void select_configuration(int index);
|
||||
void select_alternate(int interfacei, int index);
|
||||
int find_alternate(int interfacei);
|
||||
@ -298,13 +298,27 @@ private:
|
||||
UINT8 *descriptors;
|
||||
int descriptors_pos;
|
||||
USBStandardDeviceDescriptor device_descriptor;
|
||||
std::forward_list<usb_device_configuration> configurations;
|
||||
std::forward_list<usb_device_string> device_strings;
|
||||
std::forward_list<usb_device_configuration *> configurations;
|
||||
std::forward_list<usb_device_string *> device_strings;
|
||||
usb_device_configuration *latest_configuration;
|
||||
usb_device_interface_alternate *latest_alternate;
|
||||
usb_device_configuration *selected_configuration;
|
||||
};
|
||||
|
||||
class ohci_game_controller_device : public ohci_function_device
|
||||
{
|
||||
public:
|
||||
ohci_game_controller_device(running_machine &machine);// :
|
||||
//ohci_function_device(machine) {}
|
||||
int handle_nonstandard_request(int endpoint, USBSetupPacket *setup) override;
|
||||
private:
|
||||
static const USBStandardDeviceDescriptor devdesc;
|
||||
static const USBStandardConfigurationDescriptor condesc;
|
||||
static const USBStandardInterfaceDescriptor intdesc;
|
||||
static const USBStandardEndpointDescriptor enddesc82;
|
||||
static const USBStandardEndpointDescriptor enddesc02;
|
||||
};
|
||||
|
||||
class xbox_base_state : public driver_device
|
||||
{
|
||||
public:
|
||||
|
@ -833,46 +833,6 @@ void xbox_base_state::usb_ohci_plug(int port, ohci_function_device *function)
|
||||
}
|
||||
}
|
||||
|
||||
static USBStandardDeviceDescriptor devdesc = {18,1,0x110,0x00,0x00,0x00,64,0x45e,0x202,0x100,0,0,0,1};
|
||||
static USBStandardConfigurationDescriptor condesc = {9,2,0x20,1,1,0,0x80,50};
|
||||
static USBStandardInterfaceDescriptor intdesc = {9,4,0,0,2,0x58,0x42,0,0};
|
||||
static USBStandardEndpointDescriptor enddesc82 = {7,5,0x82,3,0x20,4};
|
||||
static USBStandardEndpointDescriptor enddesc02 = {7,5,0x02,3,0x20,4};
|
||||
|
||||
#if 0
|
||||
//ic10
|
||||
static USBStandardDeviceDescriptor devdesc = { 0x12,0x01,0x0100,0x60,0x00,0x00,0x40,0x0CA3,0x0002,0x0108,0x01,0x02,0x00,0x01 };
|
||||
static USBStandardConfigurationDescriptor condesc = { 0x09,0x02,0x0058,0x01,0x01,0x00,0x80,0x96 };
|
||||
static USBStandardInterfaceDescriptor intdesc = { 0x09,0x04,0x00,0x00,0x0A,0xFF,0x00,0x00,0x00 };
|
||||
static USBStandardEndpointDescriptor enddesc01 = { 0x07,0x05,0x01,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor enddesc02 = { 0x07,0x05,0x02,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor enddesc03 = { 0x07,0x05,0x03,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor enddesc04 = { 0x07,0x05,0x04,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor enddesc05 = { 0x07,0x05,0x05,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor enddesc81 = { 0x07,0x05,0x81,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor enddesc82 = { 0x07,0x05,0x82,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor enddesc83 = { 0x07,0x05,0x83,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor enddesc84 = { 0x07,0x05,0x84,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor enddesc85 = { 0x07,0x05,0x85,0x02,0x0040,0x00 };
|
||||
static UINT8 strdesc0[] = { 0x04,0x03,0x00,0x00 };
|
||||
static UINT8 strdesc1[] = { 0x0A,0x03,0x53,0x00,0x45,0x00,0x47,0x00,0x41,0x00 };
|
||||
static UINT8 strdesc2[] = { 0x0E,0x03,0x42,0x00,0x41,0x00,0x53,0x00,0x45,0x00,0x42,0x03,0xFF,0x0B };
|
||||
|
||||
//pc20
|
||||
static USBStandardDeviceDescriptor devdesc = { 0x12,0x01,0x0100,0x60,0x01,0x00,0x40,0x0CA3,0x0003,0x0110,0x01,0x02,0x00,0x01 };
|
||||
static USBStandardConfigurationDescriptor condesc = { 0x09,0x02,0x003C,0x01,0x01,0x00,0x80,0x96 };
|
||||
static USBStandardInterfaceDescriptor intdesc = { 0x09,0x04,0x00,0x00,0x06,0xFF,0x00,0x00,0x00 };
|
||||
static USBStandardEndpointDescriptor enddesc01 = { 0x07,0x05,0x01,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor enddesc02 = { 0x07,0x05,0x02,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor enddesc03 = { 0x07,0x05,0x03,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor enddesc81 = { 0x07,0x05,0x81,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor enddesc82 = { 0x07,0x05,0x82,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor enddesc83 = { 0x07,0x05,0x83,0x02,0x0040,0x00 };
|
||||
static UINT8 strdesc0[] = { 0x04,0x03,0x00,0x00 };
|
||||
static UINT8 strdesc1[] = { 0x0A,0x03,0x53,0x00,0x45,0x00,0x47,0x00,0x41,0x00 };
|
||||
static UINT8 strdesc2[] = { 0x0E,0x03,0x42,0x00,0x41,0x00,0x53,0x00,0x45,0x00,0x42,0x00,0x44,0x00 };
|
||||
#endif
|
||||
|
||||
ohci_function_device::ohci_function_device(running_machine &machine)
|
||||
{
|
||||
state = DefaultState;
|
||||
@ -891,16 +851,12 @@ ohci_function_device::ohci_function_device(running_machine &machine)
|
||||
endpoints[0].type = ControlEndpoint;
|
||||
settingaddress = false;
|
||||
configurationvalue = 0;
|
||||
selected_configuration = nullptr;
|
||||
latest_configuration = nullptr;
|
||||
latest_alternate = nullptr;
|
||||
add_device_descriptor(devdesc);
|
||||
add_configuration_descriptor(condesc);
|
||||
add_interface_descriptor(intdesc);
|
||||
add_endpoint_descriptor(enddesc82);
|
||||
add_endpoint_descriptor(enddesc02);
|
||||
}
|
||||
|
||||
void ohci_function_device::add_device_descriptor(USBStandardDeviceDescriptor &descriptor)
|
||||
void ohci_function_device::add_device_descriptor(const USBStandardDeviceDescriptor &descriptor)
|
||||
{
|
||||
UINT8 *p = descriptors + descriptors_pos;
|
||||
|
||||
@ -926,7 +882,7 @@ void ohci_function_device::add_device_descriptor(USBStandardDeviceDescriptor &de
|
||||
memcpy(&device_descriptor, &descriptor, sizeof(USBStandardDeviceDescriptor));
|
||||
}
|
||||
|
||||
void ohci_function_device::add_configuration_descriptor(USBStandardConfigurationDescriptor &descriptor)
|
||||
void ohci_function_device::add_configuration_descriptor(const USBStandardConfigurationDescriptor &descriptor)
|
||||
{
|
||||
usb_device_configuration *c = new usb_device_configuration;
|
||||
UINT8 *p = descriptors + descriptors_pos;
|
||||
@ -944,12 +900,12 @@ void ohci_function_device::add_configuration_descriptor(USBStandardConfiguration
|
||||
c->size = descriptor.bLength;
|
||||
descriptors_pos += descriptor.bLength;
|
||||
memcpy(&c->configuration_descriptor, &descriptor, sizeof(USBStandardConfigurationDescriptor));
|
||||
configurations.push_front(*c);
|
||||
configurations.push_front(c);
|
||||
latest_configuration = c;
|
||||
latest_alternate = nullptr;
|
||||
}
|
||||
|
||||
void ohci_function_device::add_interface_descriptor(USBStandardInterfaceDescriptor &descriptor)
|
||||
void ohci_function_device::add_interface_descriptor(const USBStandardInterfaceDescriptor &descriptor)
|
||||
{
|
||||
usb_device_interface *ii;
|
||||
usb_device_interface_alternate *aa;
|
||||
@ -970,15 +926,15 @@ void ohci_function_device::add_interface_descriptor(USBStandardInterfaceDescript
|
||||
latest_configuration->size += descriptor.bLength;
|
||||
for (auto i = latest_configuration->interfaces.begin(); i != latest_configuration->interfaces.end(); ++i)
|
||||
{
|
||||
if (i->alternate_settings.front().interface_descriptor.bInterfaceNumber == descriptor.bInterfaceNumber)
|
||||
if ((*i)->alternate_settings.front()->interface_descriptor.bInterfaceNumber == descriptor.bInterfaceNumber)
|
||||
{
|
||||
i->size += descriptor.bLength;
|
||||
latest_configuration->interfaces.front().size += descriptor.bLength;
|
||||
(*i)->size += descriptor.bLength;
|
||||
latest_configuration->interfaces.front()->size += descriptor.bLength;
|
||||
aa = new usb_device_interface_alternate;
|
||||
memcpy(&aa->interface_descriptor, &descriptor, sizeof(USBStandardInterfaceDescriptor));
|
||||
aa->position = p;
|
||||
aa->size = descriptor.bLength;
|
||||
i->alternate_settings.push_front(*aa);
|
||||
(*i)->alternate_settings.push_front(aa);
|
||||
latest_alternate = aa;
|
||||
return;
|
||||
}
|
||||
@ -991,12 +947,12 @@ void ohci_function_device::add_interface_descriptor(USBStandardInterfaceDescript
|
||||
ii->position = p;
|
||||
ii->size = descriptor.bLength;
|
||||
ii->selected_alternate = -1;
|
||||
ii->alternate_settings.push_front(*aa);
|
||||
ii->alternate_settings.push_front(aa);
|
||||
latest_alternate = aa;
|
||||
latest_configuration->interfaces.push_front(*ii);
|
||||
latest_configuration->interfaces.push_front(ii);
|
||||
}
|
||||
|
||||
void ohci_function_device::add_endpoint_descriptor(USBStandardEndpointDescriptor &descriptor)
|
||||
void ohci_function_device::add_endpoint_descriptor(const USBStandardEndpointDescriptor &descriptor)
|
||||
{
|
||||
UINT8 *p = descriptors + descriptors_pos;
|
||||
|
||||
@ -1012,11 +968,11 @@ void ohci_function_device::add_endpoint_descriptor(USBStandardEndpointDescriptor
|
||||
descriptors_pos += descriptor.bLength;
|
||||
latest_alternate->endpoint_descriptors.push_front(descriptor);
|
||||
latest_alternate->size += descriptor.bLength;
|
||||
latest_configuration->interfaces.front().size += descriptor.bLength;
|
||||
latest_configuration->interfaces.front()->size += descriptor.bLength;
|
||||
latest_configuration->size += descriptor.bLength;
|
||||
}
|
||||
|
||||
void ohci_function_device::add_string_descriptor(UINT8 *descriptor)
|
||||
void ohci_function_device::add_string_descriptor(const UINT8 *descriptor)
|
||||
{
|
||||
usb_device_string *ss;
|
||||
int len = descriptor[0];
|
||||
@ -1028,7 +984,7 @@ void ohci_function_device::add_string_descriptor(UINT8 *descriptor)
|
||||
descriptors_pos += len;
|
||||
ss->size = len;
|
||||
ss->position = p;
|
||||
device_strings.push_front(*ss);
|
||||
device_strings.push_front(ss);
|
||||
//latest_configuration->size += len;
|
||||
}
|
||||
|
||||
@ -1037,52 +993,61 @@ void ohci_function_device::select_configuration(int index)
|
||||
configurationvalue = index;
|
||||
for (auto c = configurations.begin(); c != configurations.end(); ++c)
|
||||
{
|
||||
if (c->configuration_descriptor.bConfigurationValue == index)
|
||||
if ((*c)->configuration_descriptor.bConfigurationValue == index)
|
||||
{
|
||||
selected_configuration = &(*c);
|
||||
for (auto i = c->interfaces.begin(); i != c->interfaces.end(); ++i)
|
||||
selected_configuration = *c;
|
||||
// by default, activate alternate setting 0 in each interface
|
||||
for (auto i = (*c)->interfaces.begin(); i != (*c)->interfaces.end(); ++i)
|
||||
{
|
||||
i->selected_alternate = 0;
|
||||
for (auto a = i->alternate_settings.begin(); a != i->alternate_settings.end(); ++a)
|
||||
(*i)->selected_alternate = 0;
|
||||
for (auto a = (*i)->alternate_settings.begin(); a != (*i)->alternate_settings.end(); ++a)
|
||||
{
|
||||
if (a->interface_descriptor.bAlternateSetting == 0)
|
||||
if ((*a)->interface_descriptor.bAlternateSetting == 0)
|
||||
{
|
||||
for (auto e = a->endpoint_descriptors.begin(); e != a->endpoint_descriptors.end(); ++e)
|
||||
// activate the endpoints in interface i alternate setting 0
|
||||
for (auto e = (*a)->endpoint_descriptors.begin(); e != (*a)->endpoint_descriptors.end(); ++e)
|
||||
{
|
||||
endpoints[e->bEndpointAddress].type = e->bmAttributes & 3;
|
||||
endpoints[e->bEndpointAddress].remain = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ohci_function_device::select_alternate(int interfacei, int index)
|
||||
{
|
||||
// among all the interfaces in the currently selected configuration, consider interface interfacei
|
||||
for (auto i = selected_configuration->interfaces.begin(); i != selected_configuration->interfaces.end(); ++i)
|
||||
{
|
||||
for (auto a = i->alternate_settings.begin(); a != i->alternate_settings.end(); ++a)
|
||||
// deactivate the endpoints in the currently selected alternate setting for interface interfacei
|
||||
for (auto a = (*i)->alternate_settings.begin(); a != (*i)->alternate_settings.end(); ++a)
|
||||
{
|
||||
if ((a->interface_descriptor.bInterfaceNumber == interfacei) && (a->interface_descriptor.bAlternateSetting == i->selected_alternate))
|
||||
if (((*a)->interface_descriptor.bInterfaceNumber == interfacei) && ((*a)->interface_descriptor.bAlternateSetting == (*i)->selected_alternate))
|
||||
{
|
||||
for (auto e = a->endpoint_descriptors.begin(); e != a->endpoint_descriptors.end(); ++e)
|
||||
for (auto e = (*a)->endpoint_descriptors.begin(); e != (*a)->endpoint_descriptors.end(); ++e)
|
||||
{
|
||||
endpoints[e->bEndpointAddress].type = -1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (auto a = i->alternate_settings.begin(); a != i->alternate_settings.end(); ++a)
|
||||
// activate the endpoints in the newly selected alternate setting
|
||||
for (auto a = (*i)->alternate_settings.begin(); a != (*i)->alternate_settings.end(); ++a)
|
||||
{
|
||||
if ((a->interface_descriptor.bInterfaceNumber == interfacei) && (a->interface_descriptor.bAlternateSetting == index))
|
||||
if (((*a)->interface_descriptor.bInterfaceNumber == interfacei) && ((*a)->interface_descriptor.bAlternateSetting == index))
|
||||
{
|
||||
i->selected_alternate = index;
|
||||
for (auto e = a->endpoint_descriptors.begin(); e != a->endpoint_descriptors.end(); ++e)
|
||||
(*i)->selected_alternate = index;
|
||||
for (auto e = (*a)->endpoint_descriptors.begin(); e != (*a)->endpoint_descriptors.end(); ++e)
|
||||
{
|
||||
endpoints[e->bEndpointAddress].type = e->bmAttributes & 3;
|
||||
endpoints[e->bEndpointAddress].remain = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1090,13 +1055,14 @@ void ohci_function_device::select_alternate(int interfacei, int index)
|
||||
|
||||
int ohci_function_device::find_alternate(int interfacei)
|
||||
{
|
||||
// find the active alternate setting for interface inteerfacei
|
||||
for (auto i = selected_configuration->interfaces.begin(); i != selected_configuration->interfaces.end(); ++i)
|
||||
{
|
||||
for (auto a = i->alternate_settings.begin(); a != i->alternate_settings.end(); ++a)
|
||||
for (auto a = (*i)->alternate_settings.begin(); a != (*i)->alternate_settings.end(); ++a)
|
||||
{
|
||||
if (a->interface_descriptor.bInterfaceNumber == interfacei)
|
||||
if ((*a)->interface_descriptor.bInterfaceNumber == interfacei)
|
||||
{
|
||||
return i->selected_alternate;
|
||||
return (*i)->selected_alternate;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1113,10 +1079,10 @@ UINT8 *ohci_function_device::position_configuration_descriptor(int index, int &s
|
||||
{
|
||||
for (auto c = configurations.begin(); c != configurations.end(); ++c)
|
||||
{
|
||||
if (c->configuration_descriptor.bConfigurationValue == index)
|
||||
if ((*c)->configuration_descriptor.bConfigurationValue == (index + 1))
|
||||
{
|
||||
size = c->size;
|
||||
return c->position;
|
||||
size = (*c)->size;
|
||||
return (*c)->position;
|
||||
}
|
||||
}
|
||||
size = 0;
|
||||
@ -1131,8 +1097,8 @@ UINT8 *ohci_function_device::position_string_descriptor(int index, int &size)
|
||||
{
|
||||
if (index == i)
|
||||
{
|
||||
size = s->size;
|
||||
return s->position;
|
||||
size = (*s)->size;
|
||||
return (*s)->position;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
@ -1291,11 +1257,63 @@ int ohci_function_device::execute_transfer(int address, int endpoint, int pid, U
|
||||
return size;
|
||||
}
|
||||
|
||||
int ohci_function_device::handle_nonstandard_request(int endpoint, USBSetupPacket *setup)
|
||||
const USBStandardDeviceDescriptor ohci_game_controller_device::devdesc = { 18,1,0x110,0x00,0x00,0x00,64,0x45e,0x202,0x100,0,0,0,1 };
|
||||
const USBStandardConfigurationDescriptor ohci_game_controller_device::condesc = { 9,2,0x20,1,1,0,0x80,50 };
|
||||
const USBStandardInterfaceDescriptor ohci_game_controller_device::intdesc = { 9,4,0,0,2,0x58,0x42,0,0 };
|
||||
const USBStandardEndpointDescriptor ohci_game_controller_device::enddesc82 = { 7,5,0x82,3,0x20,4 };
|
||||
const USBStandardEndpointDescriptor ohci_game_controller_device::enddesc02 = { 7,5,0x02,3,0x20,4 };
|
||||
|
||||
#if 0
|
||||
//ic10
|
||||
static USBStandardDeviceDescriptor ohci_hlean2131qc_device::devdesc = { 0x12,0x01,0x0100,0x60,0x00,0x00,0x40,0x0CA3,0x0002,0x0108,0x01,0x02,0x00,0x01 };
|
||||
static USBStandardConfigurationDescriptor ohci_hlean2131qc_device::condesc = { 0x09,0x02,0x0058,0x01,0x01,0x00,0x80,0x96 };
|
||||
static USBStandardInterfaceDescriptor ohci_hlean2131qc_device::intdesc = { 0x09,0x04,0x00,0x00,0x0A,0xFF,0x00,0x00,0x00 };
|
||||
static USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc01 = { 0x07,0x05,0x01,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc02 = { 0x07,0x05,0x02,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc03 = { 0x07,0x05,0x03,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc04 = { 0x07,0x05,0x04,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc05 = { 0x07,0x05,0x05,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc81 = { 0x07,0x05,0x81,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc82 = { 0x07,0x05,0x82,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc83 = { 0x07,0x05,0x83,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc84 = { 0x07,0x05,0x84,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor ohci_hlean2131qc_device::enddesc85 = { 0x07,0x05,0x85,0x02,0x0040,0x00 };
|
||||
static UINT8 ohci_hlean2131qc_device::strdesc0[] = { 0x04,0x03,0x00,0x00 };
|
||||
static UINT8 ohci_hlean2131qc_device::strdesc1[] = { 0x0A,0x03,0x53,0x00,0x45,0x00,0x47,0x00,0x41,0x00 };
|
||||
static UINT8 ohci_hlean2131qc_device::strdesc2[] = { 0x0E,0x03,0x42,0x00,0x41,0x00,0x53,0x00,0x45,0x00,0x42,0x03,0xFF,0x0B };
|
||||
|
||||
//pc20
|
||||
static USBStandardDeviceDescriptor ohci_hlean2131sc_device::devdesc = { 0x12,0x01,0x0100,0x60,0x01,0x00,0x40,0x0CA3,0x0003,0x0110,0x01,0x02,0x00,0x01 };
|
||||
static USBStandardConfigurationDescriptor ohci_hlean2131sc_device::condesc = { 0x09,0x02,0x003C,0x01,0x01,0x00,0x80,0x96 };
|
||||
static USBStandardInterfaceDescriptor ohci_hlean2131sc_device::intdesc = { 0x09,0x04,0x00,0x00,0x06,0xFF,0x00,0x00,0x00 };
|
||||
static USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc01 = { 0x07,0x05,0x01,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc02 = { 0x07,0x05,0x02,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc03 = { 0x07,0x05,0x03,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc81 = { 0x07,0x05,0x81,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc82 = { 0x07,0x05,0x82,0x02,0x0040,0x00 };
|
||||
static USBStandardEndpointDescriptor ohci_hlean2131sc_device::enddesc83 = { 0x07,0x05,0x83,0x02,0x0040,0x00 };
|
||||
static UINT8 ohci_hlean2131sc_device::strdesc0[] = { 0x04,0x03,0x00,0x00 };
|
||||
static UINT8 ohci_hlean2131sc_device::strdesc1[] = { 0x0A,0x03,0x53,0x00,0x45,0x00,0x47,0x00,0x41,0x00 };
|
||||
static UINT8 ohci_hlean2131sc_device::strdesc2[] = { 0x0E,0x03,0x42,0x00,0x41,0x00,0x53,0x00,0x45,0x00,0x42,0x00,0x44,0x00 };
|
||||
#endif
|
||||
|
||||
ohci_game_controller_device::ohci_game_controller_device(running_machine &machine) :
|
||||
ohci_function_device(machine)
|
||||
{
|
||||
add_device_descriptor(devdesc);
|
||||
add_configuration_descriptor(condesc);
|
||||
add_interface_descriptor(intdesc);
|
||||
add_endpoint_descriptor(enddesc82);
|
||||
add_endpoint_descriptor(enddesc02);
|
||||
}
|
||||
|
||||
int ohci_game_controller_device::handle_nonstandard_request(int endpoint, USBSetupPacket *setup)
|
||||
{
|
||||
// >=8 ==42 !=0 !=0 1,3 2<20 <=20
|
||||
static UINT8 mytestdata[16] = { 0x10,0x42 ,0x32,0x43,1 ,0x65,0x18,0x20,0x98,0xa9,0xba,0xcb,0xdc,0xed,0xfe };
|
||||
|
||||
if (endpoint != 0)
|
||||
return -1;
|
||||
if ((endpoints[endpoint].controltype == VendorType) && (endpoints[endpoint].controlrecipient == InterfaceRecipient))
|
||||
{
|
||||
if (setup->bRequest == GET_DESCRIPTOR)
|
||||
@ -1964,7 +1982,7 @@ ADDRESS_MAP_END
|
||||
void xbox_base_state::machine_start()
|
||||
{
|
||||
#ifdef USB_ENABLED
|
||||
ohci_function_device *usb_device;
|
||||
ohci_game_controller_device *usb_device;
|
||||
#endif
|
||||
|
||||
nvidia_nv2a = std::make_unique<nv2a_renderer>(machine());
|
||||
@ -2005,7 +2023,7 @@ void xbox_base_state::machine_start()
|
||||
ohcist.space = &m_maincpu->space();
|
||||
ohcist.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(xbox_base_state::usb_ohci_timer), this), (void *)"USB OHCI Timer");
|
||||
ohcist.timer->enable(false);
|
||||
usb_device = new ohci_function_device(machine());
|
||||
usb_device = new ohci_game_controller_device(machine());
|
||||
usb_ohci_plug(1, usb_device); // test connect
|
||||
#endif
|
||||
memset(&superiost, 0, sizeof(superiost));
|
||||
|
Loading…
Reference in New Issue
Block a user