aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2020-11-03 14:07:59 +0200
committerKimplul <kimi.h.kuparinen@gmail.com>2020-11-03 14:07:59 +0200
commit43569215b2fd19a0d83fee9cf19c259bd038cac9 (patch)
tree2e6855286b820c16f5080de9890d53d1b483a08b
parent6a7ab83543e4f4e10740015ecdcc2c44d51fdca8 (diff)
downloadhid-tmff2-43569215b2fd19a0d83fee9cf19c259bd038cac9.tar.gz
hid-tmff2-43569215b2fd19a0d83fee9cf19c259bd038cac9.zip
Small changes to closer imitate the Windows driver
-rw-r--r--hid-tminit.c9
-rw-r--r--hid-tmt300rs.c169
2 files changed, 146 insertions, 32 deletions
diff --git a/hid-tminit.c b/hid-tminit.c
index 73c1283..25caf51 100644
--- a/hid-tminit.c
+++ b/hid-tminit.c
@@ -39,6 +39,7 @@ static void tminit_interrupts(struct hid_device *hdev){
kzfree(send_buf);
}
+/*
void tminit_controls(struct hid_device *hdev){
int i = 0, ret;
struct usb_host_endpoint *ep;
@@ -63,12 +64,11 @@ void tminit_controls(struct hid_device *hdev){
hid_err(hdev, "failed with the ctrl: %i", ret);
}
- // Hello?
ret = usb_control_msg(usbdev,
usb_rcvctrlpipe(usbdev, 0),
73,
- 0x41,
- 0x40,
+ 0xc1,
+ 0,
0,
transfer,
16,
@@ -118,6 +118,7 @@ void tminit_controls(struct hid_device *hdev){
hid_err(hdev, "failed with the ctrl: %i", ret);
}
}
+*/
int tminit(struct hid_device *hdev){
struct urb *urb;
@@ -127,7 +128,7 @@ int tminit(struct hid_device *hdev){
struct usb_device *usbdev = interface_to_usbdev(usbif);
int ret;
- tminit_controls(hdev);
+ //tminit_controls(hdev);
tminit_interrupts(hdev);
diff --git a/hid-tmt300rs.c b/hid-tmt300rs.c
index d316af9..e73520e 100644
--- a/hid-tmt300rs.c
+++ b/hid-tmt300rs.c
@@ -1223,7 +1223,6 @@ static int t300rs_open(struct input_dev *dev){
t300rs = t300rs_get_device(hdev);
-
send_buffer[0] = 0x60;
send_buffer[1] = 0x01;
send_buffer[2] = 0x04;
@@ -1237,9 +1236,10 @@ static int t300rs_open(struct input_dev *dev){
memset(send_buffer, 0, T300RS_BUFFER_LENGTH);
send_buffer[0] = 0x60;
- send_buffer[1] = 0x12;
- send_buffer[2] = 0xbf;
- send_buffer[3] = 0x04;
+ send_buffer[1] = 0x12; // 0x12;
+ send_buffer[2] = 0xbf; // 0xbf;
+ send_buffer[3] = 0x04; // 0x04;
+
send_buffer[6] = 0x03;
send_buffer[7] = 0xc3; //0xb7;
send_buffer[8] = 0x20; //0x1e;
@@ -1251,7 +1251,7 @@ static int t300rs_open(struct input_dev *dev){
}
memset(send_buffer, 0, T300RS_BUFFER_LENGTH);
- t300rs_open_interrupts(t300rs);
+ //t300rs_open_interrupts(t300rs);
send_buffer[0] = 0x60;
send_buffer[1] = 0x01;
@@ -1266,7 +1266,7 @@ static int t300rs_open(struct input_dev *dev){
err:
kfree(send_buffer);
- return 0; //t300rs->open(dev);
+ return t300rs->open(dev);
}
static void t300rs_close(struct input_dev *dev){
@@ -1354,6 +1354,23 @@ void t300rs_init_interrupts(struct t300rs_device_entry *t300rs){
hid_err(t300rs->hdev, "failed sending interrupts\n");
goto err;
}
+
+ // Hello?
+ ret = usb_control_msg(t300rs->usbdev,
+ usb_rcvctrlpipe(t300rs->usbdev, 0),
+ 72,
+ 0x41,
+ 0x40,
+ 0,
+ send_buffer,
+ 0,
+ USB_CTRL_SET_TIMEOUT
+ );
+
+ if(ret < 0){
+ hid_err(t300rs->hdev, "failed ctrl 72: %i", ret);
+ }
+
memset(send_buffer, 0, T300RS_BUFFER_LENGTH);
send_buffer[0] = 0x0a;
@@ -1394,6 +1411,115 @@ err:
return;
}
+void tmt300rs_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);
+ }
+ hid_info(hdev, "tr: %i\n", transfer[6]);
+
+ ret = usb_control_msg(usbdev,
+ usb_rcvctrlpipe(usbdev, 0),
+ 72,
+ 0xc1,
+ 0,
+ 0,
+ transfer,
+ 64,
+ 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),
+ 85,
+ 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 t300rs_init(struct hid_device *hdev, const signed short *ff_bits){
struct t300rs_device_entry *t300rs;
struct t300rs_data *drv_data;
@@ -1406,6 +1532,7 @@ int t300rs_init(struct hid_device *hdev, const signed short *ff_bits){
struct usb_device *usbdev = interface_to_usbdev(usbif);
struct hid_report *report;
struct ff_device *ff;
+ u8 *transfer = kzalloc(64, GFP_ATOMIC);
char range[10] = "900"; /* max */
int i, ret;
@@ -1512,8 +1639,8 @@ int t300rs_init(struct hid_device *hdev, const signed short *ff_bits){
t300rs->open = input_dev->open;
t300rs->close = input_dev->close;
- // input_dev->open = t300rs_open;
- // input_dev->close = t300rs_close;
+ input_dev->open = t300rs_open;
+ input_dev->close = t300rs_close;
ret = device_create_file(&hdev->dev, &dev_attr_range);
if(ret){
@@ -1521,34 +1648,20 @@ int t300rs_init(struct hid_device *hdev, const signed short *ff_bits){
goto out;
}
+ tmt300rs_controls(t300rs->hdev);
+
t300rs_init_interrupts(t300rs);
hrtimer_init(&t300rs->hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
t300rs->hrtimer.function = t300rs_timer;
//spin_unlock_irqrestore(&lock, lock_flags);
+ //t300rs_open(input_dev);
- t300rs_range_store(dev, &dev_attr_range, range, 10);
- t300rs_set_gain(input_dev, 0xeeee);
-
- t300rs_open(input_dev);
-
- u8 *transfer = kzalloc(64, GFP_ATOMIC);
- // Hello?
- ret = usb_control_msg(usbdev,
- usb_rcvctrlpipe(usbdev, 0),
- 72,
- 0x41,
- 0x40,
- 0,
- transfer,
- 0,
- USB_CTRL_SET_TIMEOUT);
-
- if(ret < 0){
- hid_err(hdev, "failed with the ctrl: %i", ret);
- }
+ // this is starting to become a bit silly
+ //t300rs_range_store(dev, &dev_attr_range, range, 10);
+ //t300rs_set_gain(input_dev, 0xffff);
kfree(transfer);