aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2020-11-01 16:09:35 +0200
committerKimplul <kimi.h.kuparinen@gmail.com>2020-11-01 16:09:35 +0200
commitf4faf301ef8ce9e86a092569f5656293fb4de666 (patch)
treee2308e384817afa69c36e7de04cb7146a513bd41
parente2b24eaa25c83955b9b1ec873aa24f910c0b1eb8 (diff)
downloadhid-tmff2-f4faf301ef8ce9e86a092569f5656293fb4de666.tar.gz
hid-tmff2-f4faf301ef8ce9e86a092569f5656293fb4de666.zip
Messing around with possible init issue(?)
-rw-r--r--hid-tminit.c121
-rw-r--r--hid-tmt300rs.c15
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;
}