diff --git a/captures/libevdev delay, EV_MSC fastest, EV_KEY 20ms slower.sal b/captures/libevdev delay, EV_MSC fastest, EV_KEY 20ms slower.sal new file mode 100644 index 0000000..621a4f5 Binary files /dev/null and b/captures/libevdev delay, EV_MSC fastest, EV_KEY 20ms slower.sal differ diff --git a/captures/libevdev delay, EV_MSC fastest, EV_KEY 4ms slower on rpi.sal b/captures/libevdev delay, EV_MSC fastest, EV_KEY 4ms slower on rpi.sal new file mode 100644 index 0000000..8925186 Binary files /dev/null and b/captures/libevdev delay, EV_MSC fastest, EV_KEY 4ms slower on rpi.sal differ diff --git a/captures/usb delay notes.txt b/captures/usb delay notes.txt index 959e8f5..f5d02c5 100644 --- a/captures/usb delay notes.txt +++ b/captures/usb delay notes.txt @@ -16,4 +16,10 @@ while 1: print(data) using queue to despatch SPI on raspberry 3: 700 to 800us -on lichee 3.5ms \ No newline at end of file +on lichee 3.5ms + +hand parse raw dev/input: 470us on pi3, 1ms on lichee + + +32 byte fixed + diff --git a/user_program/devices.txt b/user_program/old/devices.txt similarity index 100% rename from user_program/devices.txt rename to user_program/old/devices.txt diff --git a/user_program/u2p2_evdev.py b/user_program/old/u2p2_evdev.py similarity index 70% rename from user_program/u2p2_evdev.py rename to user_program/old/u2p2_evdev.py index fb21332..2580ffc 100644 --- a/user_program/u2p2_evdev.py +++ b/user_program/old/u2p2_evdev.py @@ -1,6 +1,7 @@ +import sys import libevdev -fd = open("/dev/input/event0", "rb" ) +fd = open(sys.argv[1], "rb" ) d = libevdev.Device(fd) diff --git a/user_program/u2p2_same_thread.py b/user_program/old/u2p2_evdev_speed.py similarity index 73% rename from user_program/u2p2_same_thread.py rename to user_program/old/u2p2_evdev_speed.py index f94a6f7..a5aa0ca 100644 --- a/user_program/u2p2_same_thread.py +++ b/user_program/old/u2p2_evdev_speed.py @@ -1,5 +1,6 @@ +import sys import time -import struct +import libevdev import spidev import threading @@ -15,18 +16,19 @@ else: spi = spidev.SpiDev(1, 0) # lichee print("I'm on custom board!") -spi.max_speed_hz = 500000 +spi.max_speed_hz = 2000000 -fff = open("/dev/input/event0", "rb" ) +# fff = open("/dev/input/event1", "rb" ) +fff = open(sys.argv[1], "rb" ) +this_device = libevdev.Device(fff) +# this_device.disable(libevdev.EV_MSC) def keyboard_worker(): print("keyboard_thread started") while 1: - data = fff.read(24) - print(data) - print(struct.unpack('4IHHI', data)) - # print(len(data)) - print('------------') + for e in this_device.events(): + spi.xfer([0x5]*32) + print(e) def mouse_worker(): print("mouse_thread started") diff --git a/user_program/old/u2p2_main.py b/user_program/old/u2p2_main.py new file mode 100644 index 0000000..737d225 --- /dev/null +++ b/user_program/old/u2p2_main.py @@ -0,0 +1,24 @@ +import spidev + +is_on_raspberry_pi = False + +with open('/etc/os-release') as os_version_file: + is_on_raspberry_pi = 'raspbian' in os_version_file.read().lower() + +spi = None +if is_on_raspberry_pi: + spi = spidev.SpiDev(0, 0) # rasp + print("I'm on Raspberry Pi!") +else: + spi = spidev.SpiDev(1, 0) # lichee + print("I'm on custom board!") + +spi.max_speed_hz = 500000 + +fff = open("/dev/input/event0", "rb" ) +while 1: + data = fff.read(24) + data = list(data) + print(data) + spi.xfer(data) + \ No newline at end of file diff --git a/user_program/u2p2_scan_devices.py b/user_program/old/u2p2_scan_devices.py similarity index 100% rename from user_program/u2p2_scan_devices.py rename to user_program/old/u2p2_scan_devices.py diff --git a/user_program/temp.py b/user_program/temp.py index 28ae12a..90d5721 100644 --- a/user_program/temp.py +++ b/user_program/temp.py @@ -48,4 +48,14 @@ while True: if e.matches(libevdev.EV_KEY.BTN_LEFT): print('Left button event') elif e.matches(libevdev.EV_KEY.BTN_RIGHT): - print('Right button event') \ No newline at end of file + print('Right button event') + +print(struct.unpack('4IHHI', data)) + + +data = list(fff.read(16)[8:]) + # https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/input-event-codes.h#L38 + if data[0] == 1: # Keys + spi.xfer(data) + # print(data) + # print('----') \ No newline at end of file diff --git a/user_program/u2p2_main.py b/user_program/u2p2_main.py index 737d225..a9f2294 100644 --- a/user_program/u2p2_main.py +++ b/user_program/u2p2_main.py @@ -1,7 +1,9 @@ +import sys +import time import spidev +import threading is_on_raspberry_pi = False - with open('/etc/os-release') as os_version_file: is_on_raspberry_pi = 'raspbian' in os_version_file.read().lower() @@ -13,12 +15,53 @@ else: spi = spidev.SpiDev(1, 0) # lichee print("I'm on custom board!") -spi.max_speed_hz = 500000 +spi.max_speed_hz = 2000000 + +fff = open(sys.argv[1], "rb" ) + + +""" +https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/input-event-codes.h#L38 + +xbox gamepad: +EVENT TYPE: EV_ABS +dpad: ABS_HAT0X ABS_HAT1X +buttons: https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/input-event-codes.h#L385 +sticks: ABS_X, ABS_Y, ABS_RX, ABS_RY +""" + +EV_KEY = 0x01 +EV_REL = 0x02 +EV_ABS = 0x03 + +SPI_MSG_KEYBOARD_EVENT = 1 +SPI_MSG_MOUSE_EVENT = 2 +SPI_MSG_GAMEPAD_EVENT = 3 + +KEYBOARD_ID_PLACEHOLDER = 0 + +keyboard_spi_msg_header = [0xde, 0, SPI_MSG_KEYBOARD_EVENT, KEYBOARD_ID_PLACEHOLDER] + +def keyboard_worker(): + print("keyboard_thread started") + while 1: + data = list(fff.read(16)[8:]) + if data[0] == EV_KEY: + spi.xfer(keyboard_spi_msg_header + data) + # print(data) + # print('----') + +def mouse_worker(): + print("mouse_thread started") + while 1: + time.sleep(0.2) + +keyboard_thread = threading.Thread(target=keyboard_worker, daemon=True) +keyboard_thread.start() + +mouse_thread = threading.Thread(target=mouse_worker, daemon=True) +mouse_thread.start() -fff = open("/dev/input/event0", "rb" ) while 1: - data = fff.read(24) - data = list(data) - print(data) - spi.xfer(data) - \ No newline at end of file + # print("main loop") + time.sleep(1) \ No newline at end of file