Making a standalone USB trackpad from Macbook Pro (mid-2012) trackpad. - Page 1
Forum section: electronics / projects

author: bob808
author_rank: Frequent Contributor
timestamp: July 22, 2021, 06:23:52 pm
content: Ever since I first used a Macbook with the Apple trackpad I always wanted to have that trackpad as a separate unit. After they released the standalone unit I couldn't really justify the price. So I decided to try and hack one when the opportunity comes.Few days back a friend had a beer with his macbook pro (13" mid-2012). That turned out to be a bad idea, so I ended up with the broken laptop.Looking at the trackpad itself, it doesn't contain any electronics, everything is on the motherboard. There's a CY8C24794 chip that deals with both the trackpad and keyboard. I think this chip has some firmware in it so I'm not sure you can use a new one.If Apple would release official schematics then I might be able to do a better job at explaining what you need to do. But I'll try without it.There's two series resistors between the chip's D+/D- lines and the USB mux. Easy to remove them and tap the signal for the chip. The chip needs 3.3V.The trackpad connector has a 3.3V line and one 18V line. There's also a 5V rail that doesn't seem connected to the rest of the circuit, maybe used on some other trackpad models. I rushed through it and ended up using a 3.3V linear reg. After a closer look at the PCB I figured out there's a 5Vin regulator that outputs 3.3V directly to the rail the trackpad chip is on, and also passes 5V to the onboard 18V boost reg. So theoretically you could get away with just the connector wires, no other IC. I'll test this next time I get the chance, since I already removed a transistor so I can insert 3.3V into that rail, and I can't be bothered to put it back, the sucker is too small and has a weird footprint.In the following photo you can see the transistor:And in this photo a closeup of the pad behind the transistor (pink rectangle). Green is a GND pad that you can see unpopulated in the previous photo. Yellow is the 3.3V pad, where you inject the 3.3V from the external reg.Apart from power I had to pull up one enable pin for the chip, and I also pulled down another SMC wake line, not sure if the last one is needed or not.After I connected the USB cable I saw the system recognized it:Bus 001 Device 006: ID 05ac:0252 Apple, Inc. Internal Keyboard/Trackpad (ANSI)And seems to be working just fine. I didn't need anything else in Linux, two finger scroll works great!In Windows 10 I first installed the Bootcamp trackpad drivers, so I don't know if it's working without them, or not. I suppose it should work without them as well.After some careful consideration I decided I don't need the whole PCB so I performed an old medieval parting ritual:All needed parts are on that part of the PCB, including the 5Vin reg that should give all the needed power rails. The only issue with it is that that IC is very close to the edge of the PCB where the parting ritual was applied. So you might clip some internal lines. I filed the PCB edge where it was cut, revealing I think around 12 layers. take care to not short anything, I just YOLO'd it.I injected the 5V from USB into the input of the 18V boost reg. The input line has a small value resistor in series, I removed it and added a wire instead. Pink is the resistor I removed, green shows the possible pads you can tap into. That cap has one side on the input of reg.And a photo of the chip itself that controls the trackpad/keyboard. Pink rectangles are where the USB data lines series resistors were located. I cut the traces going down so I wouldn't connect to the rest of the circuit, not needed if you can finely solder the wires on the upper pads of both resistors. Green is the enable pad for the chip, and yellow is where a low value resistor was. It connects the chip to the 3.3V rail. I initially removed that resistor, now I made a bridge across both pads and connected the enable wire on it.All that's needed now is to design and 3D print a case for it. I also need to make a small PCB with the USB connector and the 3.3V reg. But theoretically I should have been able to only use the USB 5Vin, just that it's too late to go that route now for my board. The only downside of going that route is that more chips might be powered on the PCB, and that would enable more rails making for extra unneeded power consumption. Or you can remove the extra chips that are not needed, tho that's extra work.The resulting board is much smaller than the trackpad itself, that should allow for a slim case design.Forgot to mention that the keyboard works as well, but I'm not using it.If anyone else wants to try this I will try and help and maybe post better pictures for all connections.

author: yuri624
author_rank: Newbie
timestamp: December 22, 2021, 04:04:59 pm
content: Hey mate, great job. I wish I had seen your post earlier. I did the same with the trackpad of a Macbook Pro 2010 (I think).Does your trackpad work when you plug it into an Android device? You could really help me out if you tried, if possible.Mine works everywhere... Windows, Linux, MacOS... native and in virtual machines. On my Samsung Galaxy S8 (Android 10), Lenovo P11 Pro Tablet (Android 11), desktop pc (Android-x86) the trackpad is just dead. When I use Android-x86 inside a virtual machine..... the trackpad works just fine including all gestures.Thanks in advance for your time if you could test it. Cheers.

author: amyk
author_rank: Super Contributor
timestamp: December 23, 2021, 02:38:48 am
content: You can definitely find the schematics if you know where to look. Apple didn't release them, but that doesn't matter for what you want to do.As for not working in Android, that could just be because whatever drivers are available don't match closely enough.

author: yuri624
author_rank: Newbie
timestamp: December 23, 2021, 01:23:10 pm
content: Quote from: amyk on December 23, 2021, 02:38:48 amI do have the schematics (which helped in doing this in the first place).The problem is that:I take an Android-x86 image and boot off of it directly -> Trackpad dead (same on Android 10 + 11 devices natively)I take the same Android-x86 image and run it in a VM -> Trackpad works with all gestures flawlesslySo the drivers are there. It's "Apple USB BCM5974 (Macbook Air and Penryn Macbook Pro) multitouch driver" in the file "bcm5974.c".The sourcecode for the driver is here (and seems to be implemented since 2013):https://android.googlesource.com/kernel/goldfish/+/android-goldfish-3.4/drivers/input/mouse/bcm5974.c

author: bob808
author_rank: Frequent Contributor
timestamp: December 31, 2021, 12:52:34 pm
content: If I find the OTG dongle I'll try it out on my phone. Didn't yet get to design&print a case for it.

author: amyk
author_rank: Super Contributor
timestamp: December 31, 2021, 11:54:42 pm
content: Quote from: yuri624 on December 23, 2021, 01:23:10 pmUnless you're passing through the USB device (and HID devices are usually not easy to pass through, because you'd easily lose control of the host) this is almost certainly a driver problem. If you're running an OS in a VM, the devices it sees are virtual ones, which can be completely different from the actual hardware.

author: yuri624
author_rank: Newbie
timestamp: May 31, 2022, 08:09:23 pm
content: Quote from: bob808 on December 31, 2021, 12:52:34 pmCheers mate, tried it yet by any luck?Quote from: amyk on December 31, 2021, 11:54:42 pmSo after some pause and a lot more headache I randomly found out that.... using Android_x86:- Booting Android, then plugging the device in: Keyboard works, Trackpad doesn't- Plug the device in, then boot Android: Keyboard works, Trackpad works!(when unplugging and replugging it, the Trackpad stops working again)So it's not really a driver problem? And it's also "natively" supporting the drivers, but only if I connect it before booting.This is for Android_x86 only, my phone sadly does not care (otherwise my issue would kind of be solved) and it won't work even when connecting it before the boot, probably because the usb-c to hdmi/usb/charging adapter gets activated only after Android already completed the boot process.Any help would be appreciated.

author: Someone
author_rank: Super Contributor
timestamp: June 01, 2022, 12:06:02 am
content: Quote from: yuri624 on May 31, 2022, 08:09:23 pmIts a problem of Android lacking suitable drivers as already mentioned. When you boot a "PC" it might be doing USB legacy emulation so the OS never sees the complexity or needs drivers.

author: amyk
author_rank: Super Contributor
timestamp: June 01, 2022, 12:31:31 am
content: There are tools, mainly Linux-based that will let you dump out the USB descriptors for the device (even if there are no drivers available). Getting that information would be a good first step to figuring out why it doesn't work and how to make it work.

author: yuri624
author_rank: Newbie
timestamp: June 04, 2022, 02:02:22 pm
content: Quote from: Someone on June 01, 2022, 12:06:02 amThe driver is "Apple USB BCM5974 (Macbook Air and Penryn Macbook Pro) multitouch driver" in the file "bcm5974.c".The sourcecode for the driver is here (and seems to be implemented since 2013):https://android.googlesource.com/kernel/goldfish/+/android-goldfish-3.4/drivers/input/mouse/bcm5974.cIf the module is really present or not on the native Android devices, I don't know. When using lsmod on my rooted Galaxy S10+ it shows... zero.. modules loaded. On Android_x86 there are easily 30-40 modules loaded.Quote from: amyk on June 01, 2022, 12:31:31 amI got myself "Free Device Monitoring Studio" for Windows, this does what's needed I guess.The first Touchpad shows:Code:Touchpad (Internal Keyboard/Trackpad (ISO))Device Descriptor:----------------------------------------------This device is part of a composite device.Connection InformationPort: 2Speed: Full SpeedDevice address: 6Open pipes: 3Connection status: Device connectedDevice DescriptorUSB version: 2.0Device class: 0x0 - (Defined at Interface level)Device subclass: 0x0 - UnknownDevice protocol: 0x0 - UnknownControl pipe max size: 8 bytesVendor ID: 0x5ac (Apple, Inc.)Product ID: 0x246 (Internal Keyboard/Trackpad (ISO))Product version: 1.8Manufacturer: Apple Inc.Product: TouchpadSerial Number: Not specifiedConfigurations: 1Configuration Descriptor:----------------------------------------------descriptors = "Configuration Descriptor"bLength = 9bDescriptorType = USB_CONFIGURATION_DESCRIPTOR_TYPE (2)wTotalLength = 34bNumInterfaces = 1bConfigurationValue = 1iConfiguration = 0Reserved = 0SupportsRemoteWakeup = 1SelfPowered = 0PoweredByBus = 1MaxPower = 0x14 -> 40 mAdescriptors = "Interface Descriptor"bLength = 9bDescriptorType = USB_INTERFACE_DESCRIPTOR_TYPE (4)bInterfaceNumber = 1bAlternateSetting = 0bNumEndpoints = 1bInterfaceClass = UsbHID (3)bInterfaceSubClass = 0bInterfaceProtocol = 0iInterface = 4descriptors = "HID Descriptor"bLength = 9bDescriptorType = HID_HID_DESCRIPTOR_TYPE (33)bcdHID = 1.11bCountry = NotDefined (0)bNumDescriptors = 1reports =reports =bReportType = 34wReportLength = 27raw = 7, 5, 129, 3, 64…HID Descriptor:----------------------------------------------This device is part of a composite device.HID DescriptorUsage Page: 65280 (Vendor Specific)Usage: 1 (Unknown)CollectionUsage Page: 65280 (Vendor Specific)Usage: 1 (Unknown)Logical Minimum: 0Logical Maximum: 255Report ID: 68Report Size: 8Report Count: 511Input: 0 (Data,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position)End CollectionThe second Touchpad:Code:Device Descriptor:----------------------------------------------This device is part of a composite device.Connection InformationPort: 2Speed: Full SpeedDevice address: 6Open pipes: 3Connection status: Device connectedDevice DescriptorUSB version: 2.0Device class: 0x0 - (Defined at Interface level)Device subclass: 0x0 - UnknownDevice protocol: 0x0 - UnknownControl pipe max size: 8 bytesVendor ID: 0x5ac (Apple, Inc.)Product ID: 0x246 (Internal Keyboard/Trackpad (ISO))Product version: 1.8Manufacturer: Apple Inc.Product: TouchpadSerial Number: Not specifiedConfigurations: 1Configuration Descriptor:----------------------------------------------descriptors = "Configuration Descriptor"bLength = 9bDescriptorType = USB_CONFIGURATION_DESCRIPTOR_TYPE (2)wTotalLength = 34bNumInterfaces = 1bConfigurationValue = 1iConfiguration = 0Reserved = 0SupportsRemoteWakeup = 1SelfPowered = 0PoweredByBus = 1MaxPower = 0x14 -> 40 mAdescriptors = "Interface Descriptor"bLength = 9bDescriptorType = USB_INTERFACE_DESCRIPTOR_TYPE (4)bInterfaceNumber = 2bAlternateSetting = 0bNumEndpoints = 1bInterfaceClass = UsbHID (3)bInterfaceSubClass = 1bInterfaceProtocol = 2iInterface = 4descriptors = "HID Descriptor"bLength = 9bDescriptorType = HID_HID_DESCRIPTOR_TYPE (33)bcdHID = 1.11bCountry = NotDefined (0)bNumDescriptors = 1reports =reports =bReportType = 34wReportLength = 52raw = 7, 5, 132, 3, 8…HID Descriptor:----------------------------------------------This device is part of a composite device.HID DescriptorUsage Page: 1 (Generic Desktop Controls)Usage: 2 (Mouse)CollectionUsage: 1 (Pointer)CollectionUsage Page: 9 (Buttons)Usages (1-3): Button 1 (Primary), Button 2 (Secondary), Button 3 (Tertiary)Logical Minimum: 0Logical Maximum: 1Report ID: 2Report Count: 3Report Size: 1Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Report Count: 1Report Size: 5Input: 1 (Constant,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position)Usage Page: 1 (Generic Desktop Controls)Usage: 48 (Direction-X)Usage: 49 (Direction-Y)Logical Minimum: -127Logical Maximum: 127Report Size: 8Report Count: 2Input: 6 (Data,Variable,Relative,No Wrap,Linear,Preferred State,No Null Position)End CollectionEnd CollectionAnd the keyboard (although irrelevant I think as it works normal)Code:Apple Internal Keyboard (Internal Keyboard/Trackpad (ISO))Device Descriptor:----------------------------------------------This device is part of a composite device.Connection InformationPort: 2Speed: Full SpeedDevice address: 6Open pipes: 3Connection status: Device connectedDevice DescriptorUSB version: 2.0Device class: 0x0 - (Defined at Interface level)Device subclass: 0x0 - UnknownDevice protocol: 0x0 - UnknownControl pipe max size: 8 bytesVendor ID: 0x5ac (Apple, Inc.)Product ID: 0x246 (Internal Keyboard/Trackpad (ISO))Product version: 1.8Manufacturer: Apple Inc.Product: Apple Internal KeyboardSerial Number: Not specifiedConfigurations: 1Configuration Descriptor:----------------------------------------------descriptors = "Configuration Descriptor"bLength = 9bDescriptorType = USB_CONFIGURATION_DESCRIPTOR_TYPE (2)wTotalLength = 34bNumInterfaces = 1bConfigurationValue = 1iConfiguration = 0Reserved = 0SupportsRemoteWakeup = 1SelfPowered = 0PoweredByBus = 1MaxPower = 0x14 -> 40 mAdescriptors = "Interface Descriptor"bLength = 9bDescriptorType = USB_INTERFACE_DESCRIPTOR_TYPE (4)bInterfaceNumber = 0bAlternateSetting = 0bNumEndpoints = 1bInterfaceClass = UsbHID (3)bInterfaceSubClass = 1bInterfaceProtocol = 1iInterface = 3descriptors = "HID Descriptor"bLength = 9bDescriptorType = HID_HID_DESCRIPTOR_TYPE (33)bcdHID = 1.11bCountry = International (13)bNumDescriptors = 1reports =reports =bReportType = 34wReportLength = 156raw = 7, 5, 131, 3, 10…HID Descriptor:----------------------------------------------This device is part of a composite device.HID DescriptorUsage Page: 1 (Generic Desktop Controls)Usage: 6 (Keyboard)CollectionReport ID: 1Usage Page: 7 (Keyboard)Usages (224-231): Control Left, Shift Left, Alt Left, GUI Left, Control Right, Shift Right, Alt Right,GUI RightLogical Minimum: 0Logical Maximum: 1Report Size: 1Report Count: 8Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Report Count: 1Report Size: 8Input: 1 (Constant,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position)Report Count: 5Report Size: 1Usage Page: 8 (LEDs)Usages (1-5): NumLock, CapsLock, Scroll Lock, Compose, KanaOutput: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position,Non Volatile)Report Count: 1Report Size: 3Output: 1 (Constant,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position,Non Volatile)Report Count: 6Report Size: 8Logical Minimum: 0Logical Maximum: 255Usage Page: 7 (Keyboard)Usages (0-255): No Event, Keyboard ErrorRollOver, Keyboard POSTfail, Keyboard Error Undefined, A,B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z,1 and ! (One and Exclamation), 2 and @ (2 and at), 3 and # (3 and Hash), 4 and $ (4 and Dollar Sign),5 and % (5 and Percent Sign), 6 and ^ (6 and circumflex), 7 and & (Seven and Ampersand),8 and * (Eight and asterisk), 9 and ( (Nine and Parenthesis Left), 0 and ) (Zero and Parenthesis Right),Return (Enter), Escape, Delete (Backspace), Tab, Space Bar, - and _ (Minus and underscore),= and + (Equal and Plus), [ and { (Bracket and Braces Left), ] and } (Bracket and Braces Right),\ and | (Backslash and Bar), # and ~ (Hash and Tilde, Non-US Keyboard near right shift),; and : (Semicolon and Colon), ï¿½ and " (Accent Acute and Double Quotes),` and ~ (Accent Grace and Tilde), , and < (Comma and Less), . and > (Period and Greater),/ and ? (Slash and Question Mark), Caps Lock, F1, F2, F3, F4, F5, F6, F7, F8,F9, F10, F11, F12, Print Screen, Scroll Lock, Pause, Insert, Home, Page Up,Delete Forward (without Changing Position), End, Page Down, Right Arrow, Left Arrow,Down Arrow, Up Arrow, Num Lock and Clear, Keypad / (Division Sign), Keypad * (Multiplication Sign),Keypad - (Subtraction Sign), Keypad + (Addition Sign), Keypad Enter, Keypad 1 and END,Keypad 2 and Down Arrow, Keypad 3 and Page Down, Keypad 4 and Left Arrow, Keypad 5 (Tactilei Raised),Unknown, Keypad 6 and Right Arrow, Keypad 7 and Home, Keypad 8 and Up Arrow,Keypad 8 and Page Up, Keypad . (decimal delimiter) and Delete, \ and | (Backslash and Bar, UK and Non-US Keyboard near left shift),Keyboard Application (Windows Key for Win95 or Compose), Power (not a key),Keypad = (Equal Sign), F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23,F24, Execute, Help, Menu, Select, Stop, Again, Undo, Cut, Copy, Paste, Find,Mute, Volume Up, Volume Down, Locking Caps Lock, Locking Num Lock, Locking Scroll Lock,Keypad Comma, Keypad Equal Sign (AS/400), International 1 (PC98), International 2 (PC98),International 3 (PC98), International 4 (PC98), International 5 (PC98), International 6 (PC98),International 7 (Toggle Single/Double Byte Mode), International 8, International 9,LANG 1 (Hangul/English Toggle, Korea), LANG 2 (Hanja Conversion, Korea), LANG 3 (Katakana, Japan),LANG 4 (Hiragana, Japan), LANG 5 (Zenkaku/Hankaku, Japan), LANG 6, LANG 7,LANG 8, LANG 9, Alternate Erase, SysReq/Attention, Cancel, Clear, Prior, Return,Separator, Out, Open, Clear/Again, CrSel/Props, ExSel, Unknown, Unknown, Unknown,Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,Unknown, Unknown, Control Left, Shift Left, Alt Left, GUI Left, Control Right,Shift Right, Alt Right, GUI Right, Unknown, Unknown, Unknown, Unknown, Unknown,Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,UnknownInput: 0 (Data,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position)Usage Page: 12 (Consumer)Report Size: 1Report Count: 1Usage: 184 (Eject)Logical Minimum: 0Logical Maximum: 1Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Usage Page: 255 (Vendor Specific)Usage: 3 (Unknown)Report Size: 7Report Count: 1Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)End CollectionUsage Page: 12 (Consumer)Usage: 1 (Consumer Control)CollectionReport ID: 82Logical Minimum: 0Logical Maximum: 1Report Size: 1Report Count: 1Usage: 205 (Play/Pause)Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Usage: 179 (Fast Forward)Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Usage: 180 (Rewind)Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Usage: 181 (Scan Next Track)Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Usage: 182 (Scan Previous Track)Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Input: 1 (Constant,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position)Input: 1 (Constant,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position)Input: 1 (Constant,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position)Report ID: 9Logical Minimum: 0Logical Maximum: 1Report Size: 8Report Count: 1Usage Page: 65281 (Vendor Specific)Usage: 11 (Unknown)Feature: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Report Size: 8Report Count: 2Feature: 1 (Constant,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position)End CollectionThe USB Controller seems to have listed everything from the above combined I guess:Code:USB-ControllerApple Internal Keyboard / Trackpad (Internal Keyboard/Trackpad (ISO))Device Descriptor:----------------------------------------------Connection InformationPort: 2Speed: Full SpeedDevice address: 6Open pipes: 3Connection status: Device connectedDevice Descriptor:USB version: 2.0Device class: 0x0 - (Defined at Interface level)Device subclass: 0x0 - UnknownDevice protocol: 0x0 - UnknownControl pipe max size: 8 bytesVendor ID: 0x5ac (Apple, Inc.)Product ID: 0x246 (Internal Keyboard/Trackpad (ISO))Product version: 1.8Manufacturer: Apple Inc.Product: Apple Internal Keyboard / TrackpadSerial Number: Not specifiedConfigurations: 1Configuration Descriptor:----------------------------------------------descriptors = "Configuration Descriptor"bLength = 9bDescriptorType = USB_CONFIGURATION_DESCRIPTOR_TYPE (2)wTotalLength = 84bNumInterfaces = 3bConfigurationValue = 1iConfiguration = 0Reserved = 0SupportsRemoteWakeup = 1SelfPowered = 0PoweredByBus = 1MaxPower = 0x14 -> 40 mAdescriptors = "Interface Descriptor"bLength = 9bDescriptorType = USB_INTERFACE_DESCRIPTOR_TYPE (4)bInterfaceNumber = 0bAlternateSetting = 0bNumEndpoints = 1bInterfaceClass = UsbHID (3)bInterfaceSubClass = 1bInterfaceProtocol = 1iInterface = 3descriptors = "HID Descriptor"bLength = 9bDescriptorType = HID_HID_DESCRIPTOR_TYPE (33)bcdHID = 1.11bCountry = International (13)bNumDescriptors = 1reports =reports =bReportType = 34wReportLength = 156raw = 7, 5, 131, 3, 10…HID Descriptor:----------------------------------------------HID DescriptorUsage Page: 1 (Generic Desktop Controls)Usage: 6 (Keyboard)CollectionReport ID: 1Usage Page: 7 (Keyboard)Usages (224-231): Control Left, Shift Left, Alt Left, GUI Left, Control Right, Shift Right, Alt Right,GUI RightLogical Minimum: 0Logical Maximum: 1Report Size: 1Report Count: 8Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Report Count: 1Report Size: 8Input: 1 (Constant,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position)Report Count: 5Report Size: 1Usage Page: 8 (LEDs)Usages (1-5): NumLock, CapsLock, Scroll Lock, Compose, KanaOutput: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position,Non Volatile)Report Count: 1Report Size: 3Output: 1 (Constant,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position,Non Volatile)Report Count: 6Report Size: 8Logical Minimum: 0Logical Maximum: 255Usage Page: 7 (Keyboard)Usages (0-255): No Event, Keyboard ErrorRollOver, Keyboard POSTfail, Keyboard Error Undefined, A,B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z,1 and ! (One and Exclamation), 2 and @ (2 and at), 3 and # (3 and Hash), 4 and $ (4 and Dollar Sign),5 and % (5 and Percent Sign), 6 and ^ (6 and circumflex), 7 and & (Seven and Ampersand),8 and * (Eight and asterisk), 9 and ( (Nine and Parenthesis Left), 0 and ) (Zero and Parenthesis Right),Return (Enter), Escape, Delete (Backspace), Tab, Space Bar, - and _ (Minus and underscore),= and + (Equal and Plus), [ and { (Bracket and Braces Left), ] and } (Bracket and Braces Right),\ and | (Backslash and Bar), # and ~ (Hash and Tilde, Non-US Keyboard near right shift),; and : (Semicolon and Colon), ï¿½ and " (Accent Acute and Double Quotes),` and ~ (Accent Grace and Tilde), , and < (Comma and Less), . and > (Period and Greater),/ and ? (Slash and Question Mark), Caps Lock, F1, F2, F3, F4, F5, F6, F7, F8,F9, F10, F11, F12, Print Screen, Scroll Lock, Pause, Insert, Home, Page Up,Delete Forward (without Changing Position), End, Page Down, Right Arrow, Left Arrow,Down Arrow, Up Arrow, Num Lock and Clear, Keypad / (Division Sign), Keypad * (Multiplication Sign),Keypad - (Subtraction Sign), Keypad + (Addition Sign), Keypad Enter, Keypad 1 and END,Keypad 2 and Down Arrow, Keypad 3 and Page Down, Keypad 4 and Left Arrow, Keypad 5 (Tactilei Raised),Unknown, Keypad 6 and Right Arrow, Keypad 7 and Home, Keypad 8 and Up Arrow,Keypad 8 and Page Up, Keypad . (decimal delimiter) and Delete, \ and | (Backslash and Bar, UK and Non-US Keyboard near left shift),Keyboard Application (Windows Key for Win95 or Compose), Power (not a key),Keypad = (Equal Sign), F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23,F24, Execute, Help, Menu, Select, Stop, Again, Undo, Cut, Copy, Paste, Find,Mute, Volume Up, Volume Down, Locking Caps Lock, Locking Num Lock, Locking Scroll Lock,Keypad Comma, Keypad Equal Sign (AS/400), International 1 (PC98), International 2 (PC98),International 3 (PC98), International 4 (PC98), International 5 (PC98), International 6 (PC98),International 7 (Toggle Single/Double Byte Mode), International 8, International 9,LANG 1 (Hangul/English Toggle, Korea), LANG 2 (Hanja Conversion, Korea), LANG 3 (Katakana, Japan),LANG 4 (Hiragana, Japan), LANG 5 (Zenkaku/Hankaku, Japan), LANG 6, LANG 7,LANG 8, LANG 9, Alternate Erase, SysReq/Attention, Cancel, Clear, Prior, Return,Separator, Out, Open, Clear/Again, CrSel/Props, ExSel, Unknown, Unknown, Unknown,Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,Unknown, Unknown, Control Left, Shift Left, Alt Left, GUI Left, Control Right,Shift Right, Alt Right, GUI Right, Unknown, Unknown, Unknown, Unknown, Unknown,Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,UnknownInput: 0 (Data,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position)Usage Page: 12 (Consumer)Report Size: 1Report Count: 1Usage: 184 (Eject)Logical Minimum: 0Logical Maximum: 1Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Usage Page: 255 (Vendor Specific)Usage: 3 (Unknown)Report Size: 7Report Count: 1Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)End CollectionUsage Page: 12 (Consumer)Usage: 1 (Consumer Control)CollectionReport ID: 82Logical Minimum: 0Logical Maximum: 1Report Size: 1Report Count: 1Usage: 205 (Play/Pause)Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Usage: 179 (Fast Forward)Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Usage: 180 (Rewind)Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Usage: 181 (Scan Next Track)Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Usage: 182 (Scan Previous Track)Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Input: 1 (Constant,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position)Input: 1 (Constant,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position)Input: 1 (Constant,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position)Report ID: 9Logical Minimum: 0Logical Maximum: 1Report Size: 8Report Count: 1Usage Page: 65281 (Vendor Specific)Usage: 11 (Unknown)Feature: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Report Size: 8Report Count: 2Feature: 1 (Constant,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position)End CollectionHID DescriptorUsage Page: 65280 (Vendor Specific)Usage: 1 (Unknown)CollectionUsage Page: 65280 (Vendor Specific)Usage: 1 (Unknown)Logical Minimum: 0Logical Maximum: 255Report ID: 68Report Size: 8Report Count: 511Input: 0 (Data,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position)End CollectionHID DescriptorUsage Page: 1 (Generic Desktop Controls)Usage: 2 (Mouse)CollectionUsage: 1 (Pointer)CollectionUsage Page: 9 (Buttons)Usages (1-3): Button 1 (Primary), Button 2 (Secondary), Button 3 (Tertiary)Logical Minimum: 0Logical Maximum: 1Report ID: 2Report Count: 3Report Size: 1Input: 2 (Data,Variable,Absolute,No Wrap,Linear,Preferred State,No Null Position)Report Count: 1Report Size: 5Input: 1 (Constant,Array,Absolute,No Wrap,Linear,Preferred State,No Null Position)Usage Page: 1 (Generic Desktop Controls)Usage: 48 (Direction-X)Usage: 49 (Direction-Y)Logical Minimum: -127Logical Maximum: 127Report Size: 8Report Count: 2Input: 6 (Data,Variable,Relative,No Wrap,Linear,Preferred State,No Null Position)End CollectionEnd CollectionOn Windows, the Touchpad with usage page 65280 doesn't do anything without Apple drivers installed. The second touchpad is used as standard and functions as a mouse (move mouse, click with physical button).On Ubuntu it works without installing additional drivers (same for MacOS but that's obvious I guess).In my pc BIOS it works as a plain mouse.On Android_x86 it works normal when it's plugged in before starting the OS, when plugged in while it's running only the keyboard works but no sign on the trackpad (this puzzles me, why does a simple re-plug break functionality that is there and why does it only affect the touchpad and not the keyboard?).On native Android it's dead all the time, which puzzles me as well. Looking at the HID descriptor from the second touchpad, shouldn't it fall back to using it as a normal mouse in case the multitouch driver for the BCM5974 isn't loaded/present (like the BIOS does and like Windows does without the driver installed)?Thanks a lot already for your time... also, should I open a new thread for this?

author: Someone
author_rank: Super Contributor
timestamp: June 04, 2022, 11:30:30 pm
content: Quote from: yuri624 on June 04, 2022, 02:02:22 pmThis is the USB emulation, the bios is likely making it appear as a generic mouse.Quote from: yuri624 on June 04, 2022, 02:02:22 pmYou need to get the USB enumeration/tree and driver details on the android platform, you know it works on windows (and added a huge pile of junk to the forum about that) but you keep avoiding looking into what is happening on android. It may not have drivers for any of those descriptors.Quote from: yuri624 on June 04, 2022, 02:02:22 pmNot when you aren't listening or adding anything new.

author: Ags1677
author_rank: Newbie
timestamp: June 17, 2022, 11:28:15 pm
content: You do know this information is worth gold? You should totally make a YouTube video and/or instructables on this.I was looking at the schematic and it looks like the chip also controls stuff like Bluetooth and IR?Wondering if its possible that also would work through the usb.I’m planning on using mine as a KVM console.Bonus question: Does anyone know of a LCD/LVDS controller with the cable connector from the motherboard? So I don’t have to disassemble the lcd to replace the cable?

author: XForce
author_rank: Newbie
timestamp: February 02, 2023, 09:48:10 am
content: Hi guys! Maybe there is an easier way to connect the trackpad and keyboard? Without motherboard cutting

author: h497018787
author_rank: Newbie
timestamp: June 16, 2024, 04:55:24 am
content: I got a 2011 macbook air (a1370 model) and want to do the same.My connector and board look a little bit different. Anyone got ideas if this is feasible with my device or how to figure it out?Thanks!