g0tmilk Posted July 7, 2022 Posted July 7, 2022 im building a mouse and keyboard usb from a rasperry pi. i have a working example with the mouse. but im confused about the x and y location documentation shows that both x and y consist of 2 values. a negative and positive x= -127 and 127 y= -127 and 127 so is there math involved? what is it? i can get the mouse to move by writing to the /dev/hidg0 echo -ne "\x00\x00\x40\x00\x40\x00\x00\x00" > /dev/hidg0 hex40=64 this command will locate the mouse to the center of my screen. but i cant get it to move one pixel at a time. im using ruby to automate this but i dont understand the coordinate system. since x and y require the use of a negative and a positive.
dark_pyrro Posted July 7, 2022 Posted July 7, 2022 What documentation are you using when developing this? Any official/public reference?
g0tmilk Posted July 15, 2022 Author Posted July 15, 2022 On 7/7/2022 at 7:34 AM, dark_pyrro said: What documentation are you using when developing this? Any official/public reference? Here is a article that will get a working example. https://forums.raspberrypi.com/viewtopic.php?t=234495 #!/bin/bash # mouse cd /sys/kernel/config/usb_gadget/ mkdir -p isticktoit cd isticktoit echo 0x1d6b > idVendor # Linux Foundation echo 0x0104 > idProduct # Multifunction Composite Gadget echo 0x0100 > bcdDevice # v1.0.0 echo 0x0200 > bcdUSB # USB2 mkdir -p strings/0x409 echo "fedcba9876543210" > strings/0x409/serialnumber echo "Tobias Girstmair" > strings/0x409/manufacturer echo "iSticktoit.net USB Device" > strings/0x409/product mkdir -p configs/c.1/strings/0x409 echo "Config 1: ECM network" > configs/c.1/strings/0x409/configuration echo 250 > configs/c.1/MaxPower # Add functions here mkdir -p functions/hid.usb0 echo 1 > functions/hid.usb0/protocol echo 1 > functions/hid.usb0/subclass echo 3 > functions/hid.usb0/report_length echo -ne \\x05\\x01\\x09\\x02\\xa1\\x01\\x09\\x01\\xa1\\x00\\x05\\x09\\x19\\x01\\x29\\x03\\x15\\x00\\x25\\x01\\x95\\x03\\x75\\x01\\x81\\x02\\x95\\x01\\x75\\x05\\x81\\x03\\x05\\x01\\x09\\x30\\x09\\x31\\x15\\x81\\x25\\x7f\\x75\\x08\\x95\\x02\\x81\\x06\\xc0\\xc0 > functions/hid.usb0/report_desc ln -s functions/hid.usb0 configs/c.1/ ls /sys/class/udc > UDC Chmod +x this bash script to enable the otg on the pi and your windows pc will see the pi as a new mouse. Then a quick test will move your mouse. On the pi run Echo -ne "\x00\x09\x09" > /dev/hidg0 Moves the mouse 9 pixles up and right. But with this config i found that if you run the command multiple times its inacurate. And wont work for me. Ill explain more on my lunch break
dark_pyrro Posted July 15, 2022 Posted July 15, 2022 I can't see where in the referenced "documentation" that the previously mentioned positive (127) and negative (-127, or -128) fit in. That type of "range" is used in other specifications for mouse control though. It should be used as a positioning reference based on the current position of the pointer, not aligned to any form of fixed grid. Arduino HID class/libraries use that form when "addressing" the position. Negative numbers moving the cursor down/left, positive numbers move the cursor right/up.
g0tmilk Posted July 15, 2022 Author Posted July 15, 2022 3 hours ago, dark_pyrro said: I can't see where in the referenced "documentation" that the previously mentioned positive (127) and negative (-127, or -128) fit in. That type of "range" is used in other specifications for mouse control though. It should be used as a positioning reference based on the current position of the pointer, not aligned to any form of fixed grid. Arduino HID class/libraries use that form when "addressing" the position. Negative numbers moving the cursor down/left, positive numbers move the cursor right/up. Here is the git i used for the first post. https://github.com/jonatanklosko/gerbil And below is the configure source file with bit codes to enable hidg0 that has me confused on the 8 bytes that include (-x , +x, -y, +y) https://github.com/jonatanklosko/gerbil/blob/main/bin/enable_mouse_hid_gadget.sh This is the config report \x05\x01\x09\x02\xa1\x01\x09\x01\xa1\x00\x05\x09\x19\x01\x29\x03\x15\x00\x25\x01\x95\x03\x75\x01\x81\x02\x95\x01\x75\x05\x81\x03\x05\x01\x09\x30\x09\x31\x15\x00\x26\xff\x7f\x75\x10\x95\x02\x81\x02\xc0\xc0 # Write the report descriptor # # 0x05, 0x01, // Usage Page (Generic Desktop) # 0x09, 0x02, // Usage (Mouse) # 0xa1, 0x01, // Collection (Application) # 0x09, 0x01, // Usage (Pointer) # 0xa1, 0x00, // Collection (Physical) # 0x05, 0x09, // Usage Page (Buttons) # 0x19, 0x01, // Usage Minimum (Button 1) # 0x29, 0x03, // Usage Maximum (Button 3) # 0x15, 0x00, // Logical Minimum (0) # 0x25, 0x01, // Logical Maximum (1) # 0x95, 0x03, // Report Count (3) # 0x75, 0x01, // Report Size (1) # 0x81, 0x02, // Input (Data, Variable, Absolute) # 0x95, 0x01, // Report Count (1) # 0x75, 0x05, // Report Size (5) # 0x81, 0x03, // Input (Constant, Variable, Absolute) # 0x05, 0x01, // Usage Page (Generic Desktop) # 0x09, 0x30, // Usage (X) # 0x09, 0x31, // Usage (Y) # 0x15, 0x00, // Logical Minimum (0) # 0x26, 0xff, 0x7f, // Logical Maximum (32767) # 0x75, 0x10, // Report Size (16) # 0x95, 0x02, // Report Count (2) # 0x81, 0x02, // Input (Data, Variable, Absolute) # 0xc0, // End Collection # 0xc0 // End Collection #
Recommended Posts
Archived
This topic is now archived and is closed to further replies.