tinypilot
tinypilot copied to clipboard
Not able to connect/control Windows properly
I have the earlier version of the TinyPilot which has a Raspberry Pi 4B.
Raspberry Pi 4B was updated to Bullseye Headless Lite.
Powered via power supply-->USB C.
Data Cable: USB A connected to Windows machine (Microsoft 10 Home, build 19045)
By default, the mouse is the only thing that "works". I narrowed it down to what appears to be how Windows handles these devices but I don't know how to fix it.
If I comment out this line (160): https://github.com/tiny-pilot/tinypilot/blob/master/debian-pkg/opt/tinypilot-privileged/init-usb-gadget#L160 The keyboard works, mouse does not. Leave it alone, uncommented, only mouse works.
Applying these:
echo 0xEF > bDeviceClass
echo 0x02 > bDeviceSubClass
echo 0x01 > bDeviceProtocol
from here did not work but maybe it will give someone more familiar with this more insight?
I'm open to trying more as in the end I would like to be able to use these in a Windows application. If you have some tests you'd like me to run, just let me know.
Update: I am able to send HID commands to a Windows machine using code from the answer on this link.
The device shows up in the Pi as /dev/hidg0 only. There is not a second device. Keyboard and mouse both work in Windows.
Hi @samkys, thank you for your message. I'm sorry you're having mouse and keyboard support issues.
There could be several explanations for this issue, so we'll need to investigate further. TinyPilot presents itself to your target computer as a composite USB device (essentially a USB hub) with a keyboard and mouse attached, so it's strange for only one to work at a time.
Can you please share a link to your logs? You can obtain the link by going to System, then Logs, then Get Shareable URL.
Hi @cghague, thank you for your reply.
Here is the log link:
https://logs.tinypilotkvm.com/LxLltBqo
Image from Device Manager in Windows. The main odd thing is that a network device also shows up:
And output on the Windows side from using this HID tool
WinHIDdump:
1D6B:0104: tinypilot - HID Interface
PATH:\\?\hid#vid_1d6b&pid_0104&mi_01#7&30a8cdce&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
DESCRIPTOR:
05 01 09 02 A1 01 05 09 19 01 29 08 15 00 25 01
35 00 45 01 65 00 55 00 75 01 95 08 81 02 05 01
09 30 26 FF 7F 45 00 75 10 95 01 81 02 09 31 81
02 09 38 25 7F 75 08 81 06 05 0C 0A 38 02 81 06
C1 00
(66 bytes)
Update: Using this file, the device shows up on Windows and I am able to get input data on Windows for Mouse & Keyboard by sending commands from the terminal in the Pi. This would require some changes on the app side but it does work. The report_desc structure may need some tweaks.
Command for sending a keyboard command:
Send Key "h" to the connected computer:
echo -ne "\x2\0\0\xb\0\0\0\0\0" > /dev/hidg0
Clear the send:
echo -ne "\x2\0\0\0\0\0\0\0\0" > /dev/hidg0
Command to send a mouse control:
Move the mouse +x 5, +y 5
echo -ne "\x1\0\x5\x5\0" > /dev/hidg0
Thanks for sending me your logs! I've looked through them, and, as you correctly spotted, one of the /dev/hidg*
devices that TinyPilot requires is missing, although it's unclear why.
There could be a few explanations for the missing devices, including filesystem corruption and isolated software glitches. Unfortunately, TinyPilot cannot function correctly without both devices being present.
The fact that the network device appears in Device Manager is interesting. It could suggest a configuration error, as the composite USB device can include a network adapter, but it's not a piece of functionality we currently use.
I appreciate it's a hassle, but the quickest way to resolve the issue will likely be a full reinstallation. The logs show that you're running the community version of TinyPilot, so you'd need to flash a fresh copy of Raspberry Pi OS Bullseye (32-bit) and install TinyPilot from scratch.
I hope this is helpful! If you have any questions, please let me know.
Hi @cghague, so that was a fresh install from about ~5mins from before I sent the logs. I had reflashed it to know that it was in a known fresh state before uploading logs to you.
Thanks for confirming!
A complete reinstallation should have ensured both /dev/hidg*
devices were present, so this could be a compatibility issue or a hardware fault. It's also possible that other software, either on the TinyPilot device or the target computer, could be interfering.
I appreciate these are basic requests, but it would be helpful to rule out a few potential causes. Could you please connect to a different target machine, ideally using a different USB data cable, and check if you see the same issue?
Thank you for your time on this, I'm hopeful we can get it all to work.
I don't have a different USB cable available at the moment, so all testing is with the same cable.
With TinyPilot USB Data cable connected to an Ubuntu 20.04 machine, Mouse & Keyboard work as expected. I unplugged from here, and plugged directly into Windows again with the same error, only Mouse works.
Plugged into Windows, checking for hidg devices:
pilot@tinypilot:/opt/tinypilot-privileged $ ls /dev/hidg*
/dev/hidg0 /dev/hidg1
Thanks for confirming!
It sounds like the TinyPilot device is working correctly, so we can assume the issue is with the Windows 10 computer. I can confirm that TinyPilot generally works with Windows 10, so this could be something specific to that particular computer or an isolated glitch.
One possibility is that the Windows 10 machine incorrectly identified the TinyPilot device when it was first connected and didn't fully set up support for all of its capabilities. Can you please try uninstalling/removing the TinyPilot device from Device Manager and see if that helps?
@cghague thank you for the support! I tried with a different Windows machine and things work, so apparently something is just weird with the first Windows machine I tried.
Again, thank you and I appreciate your time, we can close this issue.