diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2020-11-01 16:09:35 +0200 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2020-11-01 16:09:35 +0200 |
| commit | f4faf301ef8ce9e86a092569f5656293fb4de666 (patch) | |
| tree | e2308e384817afa69c36e7de04cb7146a513bd41 | |
| parent | e2b24eaa25c83955b9b1ec873aa24f910c0b1eb8 (diff) | |
| download | hid-tmff2-f4faf301ef8ce9e86a092569f5656293fb4de666.tar.gz hid-tmff2-f4faf301ef8ce9e86a092569f5656293fb4de666.zip | |
Messing around with possible init issue(?)
| -rw-r--r-- | hid-tminit.c | 121 | ||||
| -rw-r--r-- | hid-tmt300rs.c | 15 |
2 files changed, 122 insertions, 14 deletions
diff --git a/hid-tminit.c b/hid-tminit.c index f9b14d8..8cd5dbb 100644 --- a/hid-tminit.c +++ b/hid-tminit.c @@ -8,17 +8,24 @@ static void tminit_callback(struct urb *urb){ * the whole kernel crashes. I have no idea why. * */ static void tminit_interrupts(struct hid_device *hdev){ - int ret, trans, i, b_ep; + int ret, trans, i, b_ep, b_ip; u8 *send_buf = kmalloc(256, GFP_KERNEL); + u8 *feck = kmalloc(64, GFP_KERNEL); struct usb_host_endpoint *ep; + struct usb_host_endpoint *ip; struct device *dev = &hdev->dev; struct usb_interface *usbif = to_usb_interface(dev->parent); struct usb_device *usbdev = interface_to_usbdev(usbif); - + ep = &usbif->cur_altsetting->endpoint[1]; b_ep = ep->desc.bEndpointAddress; + ip = &usbif->cur_altsetting->endpoint[2]; + b_ip = ep->desc.bEndpointAddress; + + hid_info(hdev, "bEndPointAddress: %hhx %hhx", b_ep, b_ip); + for(i = 0; i < ARRAY_SIZE(setup_arr); ++i){ memcpy(send_buf, setup_arr[i], setup_arr_sizes[i]); @@ -33,11 +40,101 @@ static void tminit_interrupts(struct hid_device *hdev){ hid_err(hdev, "setup data couldn't be sent\n"); return; } + + + ret = usb_interrupt_msg(usbdev, + usb_rcvintpipe(usbdev, 0x02), + (char*)feck, + 28, + &trans, + USB_CTRL_SET_TIMEOUT); + + if(ret){ + hid_err(hdev, "fuck: %i\n", ret); + } } kzfree(send_buf); } +void tminit_controls(struct hid_device *hdev){ + int i = 0, ret; + struct usb_host_endpoint *ep; + struct usb_host_endpoint *ip; + struct device *dev = &hdev->dev; + struct usb_interface *usbif = to_usb_interface(dev->parent); + struct usb_device *usbdev = interface_to_usbdev(usbif); + + u8 *transfer = kzalloc(64, GFP_ATOMIC); + + ret = usb_control_msg(usbdev, + usb_rcvctrlpipe(usbdev, 0), + 86, + 0xc1, + 0, + 0, + transfer, + 8, + USB_CTRL_SET_TIMEOUT); + + if(ret < 0){ + hid_err(hdev, "failed with the ctrl: %i", ret); + } + + ret = usb_control_msg(usbdev, + usb_rcvctrlpipe(usbdev, 0), + 73, + 0xc1, + 0, + 0, + transfer, + 16, + USB_CTRL_SET_TIMEOUT); + + if(ret < 0){ + hid_err(hdev, "failed with the ctrl: %i", ret); + } + ret = usb_control_msg(usbdev, + usb_rcvctrlpipe(usbdev, 0), + 66, + 0xc1, + 0, + 0, + transfer, + 8, + USB_CTRL_SET_TIMEOUT); + + if(ret < 0){ + hid_err(hdev, "failed with the ctrl: %i", ret); + } + ret = usb_control_msg(usbdev, + usb_rcvctrlpipe(usbdev, 0), + 78, + 0xc1, + 0, + 0, + transfer, + 8, + USB_CTRL_SET_TIMEOUT); + + if(ret < 0){ + hid_err(hdev, "failed with the ctrl: %i", ret); + } + ret = usb_control_msg(usbdev, + usb_rcvctrlpipe(usbdev, 0), + 86, + 0xc1, + 0, + 0, + transfer, + 8, + USB_CTRL_SET_TIMEOUT); + + if(ret < 0){ + hid_err(hdev, "failed with the ctrl: %i", ret); + } +} + int tminit(struct hid_device *hdev){ struct urb *urb; u8 *setup_packet, *transfer_buffer; @@ -45,7 +142,9 @@ int tminit(struct hid_device *hdev){ struct usb_interface *usbif = to_usb_interface(dev->parent); struct usb_device *usbdev = interface_to_usbdev(usbif); int ret; - + + tminit_controls(hdev); + tminit_interrupts(hdev); setup_packet = kmalloc(8, GFP_ATOMIC); @@ -57,13 +156,13 @@ int tminit(struct hid_device *hdev){ urb = usb_alloc_urb(0, GFP_ATOMIC); usb_fill_control_urb(urb, - usbdev, - usb_sndctrlpipe(usbdev, 0), - setup_packet, - transfer_buffer, - 8, - tminit_callback, - hdev); + usbdev, + usb_sndctrlpipe(usbdev, 0), + setup_packet, + transfer_buffer, + 8, + tminit_callback, + hdev); /* we sort of have to go on faith that the message is sent, because the * wheel usually completely dies as soon as it receives the message. @@ -94,7 +193,7 @@ static int tminit_probe(struct hid_device *hdev, const struct hid_device_id *id) hid_err(hdev, "hw start failed\n"); goto err; } - + ret = tminit(hdev); if(ret){ hid_err(hdev, "tminit exited, error might be intended behaviour\n"); diff --git a/hid-tmt300rs.c b/hid-tmt300rs.c index c401180..e92dc94 100644 --- a/hid-tmt300rs.c +++ b/hid-tmt300rs.c @@ -1259,11 +1259,13 @@ void t300rs_ctrl_handler(struct urb *urb){ response[3]); usb_free_urb(urb); + kzfree(response); } void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ - int ret, trans; - u8 *send_buffer = kzalloc(T300RS_BUFFER_LENGTH, GFP_ATOMIC); + int ret; + //int trans; + //u8 *send_buffer = kzalloc(T300RS_BUFFER_LENGTH, GFP_ATOMIC); struct urb *urb = usb_alloc_urb(0, GFP_ATOMIC); struct usb_ctrlrequest* rq = kzalloc(sizeof(struct usb_ctrlrequest), GFP_ATOMIC); response = kzalloc(4, GFP_ATOMIC); @@ -1289,6 +1291,7 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ usb_submit_urb(urb, GFP_ATOMIC); + /* send_buffer[0] = 0x42; send_buffer[1] = 0x01; @@ -1380,7 +1383,13 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){ } memset(send_buffer, 0, T300RS_BUFFER_LENGTH); err: - kfree(send_buffer); + */ + //kfree(send_buffer); + return; + +err: + usb_free_urb(urb); + kzfree(response); return; } |
