Exemple #1
0
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;
}
Exemple #2
0
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;
	} 
}
Exemple #3
0
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
			);
}
Exemple #4
0
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;
}
Exemple #5
0
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);
}