OSDN Git Service

DO NOT MERGE Use CREATE instead of CREATE2 for 3.10 kernel
authorSiarhei Vishniakou <svv@google.com>
Sat, 26 Aug 2017 04:44:01 +0000 (21:44 -0700)
committerSiarhei Vishniakou <svv@google.com>
Sat, 26 Aug 2017 05:05:19 +0000 (05:05 +0000)
CREATE2 structs were introduced after kernel 3.18,
so cannot compile user code with uapi headers from
newer 3.18+ kernels. If using CREATE structs then
compatibility is preserved.

Bug: 64981084
Test: bit
Change-Id: I97c7725918b09a817a51c13384ac2d55a6cfab25
CtsHardwareTestCases:android.hardware.input.cts.tests.GamepadTestCase

cmds/hid/jni/com_android_commands_hid_Device.cpp

index 107dc86..bf2e45c 100644 (file)
@@ -101,16 +101,15 @@ Device* Device::open(int32_t id, const char* name, int32_t vid, int32_t pid,
 
     struct uhid_event ev;
     memset(&ev, 0, sizeof(ev));
-    ev.type = UHID_CREATE2;
-    strncpy((char*)ev.u.create2.name, name, UHID_MAX_NAME_LENGTH);
-    memcpy(&ev.u.create2.rd_data, descriptor.get(),
-            descriptorSize * sizeof(ev.u.create2.rd_data[0]));
-    ev.u.create2.rd_size = descriptorSize;
-    ev.u.create2.bus = BUS_BLUETOOTH;
-    ev.u.create2.vendor = vid;
-    ev.u.create2.product = pid;
-    ev.u.create2.version = 0;
-    ev.u.create2.country = 0;
+    ev.type = UHID_CREATE;
+    strncpy((char*)ev.u.create.name, name, UHID_MAX_NAME_LENGTH);
+    ev.u.create.rd_data = descriptor.get();
+    ev.u.create.rd_size = descriptorSize;
+    ev.u.create.bus = BUS_BLUETOOTH;
+    ev.u.create.vendor = vid;
+    ev.u.create.product = pid;
+    ev.u.create.version = 0;
+    ev.u.create.country = 0;
 
     errno = 0;
     ssize_t ret = TEMP_FAILURE_RETRY(::write(fd, &ev, sizeof(ev)));
@@ -159,9 +158,9 @@ Device::~Device() {
 void Device::sendReport(uint8_t* report, size_t reportSize) {
     struct uhid_event ev;
     memset(&ev, 0, sizeof(ev));
-    ev.type = UHID_INPUT2;
-    ev.u.input2.size = reportSize;
-    memcpy(&ev.u.input2.data, report, reportSize);
+    ev.type = UHID_INPUT;
+    ev.u.input.size = reportSize;
+    memcpy(&ev.u.input.data, report, reportSize);
     ssize_t ret = TEMP_FAILURE_RETRY(::write(mFd, &ev, sizeof(ev)));
     if (ret < 0 || ret != sizeof(ev)) {
         LOGE("Failed to send hid event: %s", strerror(errno));