static void wiiusb_hid_process_control_message(struct wiiusb_adapter* adapter) { int32_t r; switch (adapter->send_control_type) { case WIIUSB_SC_INTMSG: do { r = USB_WriteIntrMsg(adapter->handle, adapter->endpoint_out, adapter->send_control_size, adapter->send_control_buffer); } while (r < 0); break; case WIIUSB_SC_CTRLMSG: do { r = USB_WriteCtrlMsg(adapter->handle, USB_REQTYPE_INTERFACE_SET, USB_REQ_SETREPORT, (USB_REPTYPE_FEATURE<<8) | 0xf4, 0x0, adapter->send_control_size, adapter->send_control_buffer); } while (r < 0); break; case WIIUSB_SC_CTRLMSG2: do { r = USB_WriteCtrlMsg(adapter->handle, USB_REQTYPE_INTERFACE_SET, USB_REQ_SETREPORT, (USB_REPTYPE_OUTPUT<<8) | 0x01, 0x0, adapter->send_control_size, adapter->send_control_buffer); } while (r < 0); break; /*default: any other case we do nothing */ } /* Reset the control type */ adapter->send_control_type = WIIUSB_SC_NONE; }
void wii_mouse_init() { if (!mouse_initialized) { if (!mousequeue) { mousequeue = (lwp_queue*)malloc(sizeof(lwp_queue)); __lwp_queue_initialize(mousequeue,0,0,0); } if (wii_find_mouse()!=0) return; if (USB_OpenDevice("oh0",mouse_vid,mouse_pid,&mousefd)<0) { return; } if (!mousedata) { mousedata = (signed char*)memalign(32, 20); } //set boot protocol USB_WriteCtrlMsg(mousefd,USB_REQTYPE_SET,USB_REQ_SETPROTOCOL,0,0,0,0); USB_ReadIntrMsgAsync(mousefd, 0x81 ,4, mousedata, mousecallback, 0); mouse_initialized = 1; } }
static int _ss_send_attributes_payload(struct ss_device *dev) { _ss_attributes[1] = dev->attributes.rumble.duration_right; _ss_attributes[2] = dev->attributes.rumble.power_right; _ss_attributes[3] = dev->attributes.rumble.duration_left; _ss_attributes[4] = dev->attributes.rumble.power_left; _ss_attributes[9] = _ss_led_pattern[dev->attributes.led]; return USB_WriteCtrlMsg( dev->fd, USB_REQTYPE_INTERFACE_SET, USB_REQ_SETREPORT, (USB_REPTYPE_OUTPUT<<8) | 0x01, 0x0, sizeof(_ss_attributes), _ss_attributes ); }
static int _ss_set_operational(struct ss_device *dev) { int r; uint8_t ATTRIBUTE_ALIGN(32) buf[4] = {0x42, 0x0c, 0x00, 0x00}; /* Special command to enable Sixaxis */ /* Sometimes it fails so we should keep trying until success */ do { r = USB_WriteCtrlMsg( dev->fd, USB_REQTYPE_INTERFACE_SET, USB_REQ_SETREPORT, (USB_REPTYPE_FEATURE<<8) | 0xf4, 0x0, sizeof(buf), buf ); } while (r < 0); dev->enabled = 1; return 1; }
static s32 __USB_CtrlMsgTimeout(struct ehci_hcd * ehci, usbstorage_handle *dev, u8 bmRequestType, u8 bmRequest, u16 wValue, u16 wIndex, u16 wLength, void *rpData) { return USB_WriteCtrlMsg(ehci, dev->usb_fd, bmRequestType, bmRequest, wValue, wIndex, wLength, rpData); }