From a6650c4393049cfab3307ae02d57a59d0ec19c06 Mon Sep 17 00:00:00 2001 From: dekuNukem Date: Sat, 23 Aug 2025 11:33:49 +0100 Subject: [PATCH] evdev test --- user_program/sync.sh | 14 ++-- user_program/usb4vc_evdev_test.py | 113 ++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+), 6 deletions(-) create mode 100644 user_program/usb4vc_evdev_test.py diff --git a/user_program/sync.sh b/user_program/sync.sh index cf98900..6b1f5b4 100644 --- a/user_program/sync.sh +++ b/user_program/sync.sh @@ -1,12 +1,14 @@ -# scp ./* pi@192.168.1.60:~/usb4vc/rpi_app +# scp ./* pi@192.168.1.98:~/usb4vc/rpi_app # sh sync.sh; ssh -t pi@192.168.1.62 "pkill python3;cd ~/usb4vc/rpi_app;python3 usb4vc_main.py" scp ./* pi@192.168.1.98:~/usb4vc/rpi_app -# ssh -t pi@192.168.1.60 "pkill python3;cd ~/usb4vc/rpi_app;python3 usb4vc_main.py" -# ssh -t pi@192.168.1.60 "pkill python3;cd ~/usb4vc/rpi_app;python3 usb4vc_check_update.py" +# ssh -t pi@192.168.1.98 "pkill python3;cd ~/usb4vc/rpi_app;python3 usb4vc_main.py" +# ssh -t pi@192.168.1.98 "pkill python3;cd ~/usb4vc/rpi_app;python3 usb4vc_check_update.py" -# ssh -t pi@192.168.1.60 "pkill python3;cd ~/usb4vc/rpi_app;python3 firmware_flasher.py /home/pi/usb4vc/firmware/PBFW_IBMPC_PBID1_V0_1_5.hex /home/pi/usb4vc/firmware/ibmpc_test.hex" -# ssh -t pi@192.168.1.60 "pkill python3;cd ~/usb4vc/rpi_app;python3 bb_tester.py" +# ssh -t pi@192.168.1.98 "pkill python3;cd ~/usb4vc/rpi_app;python3 firmware_flasher.py /home/pi/usb4vc/firmware/PBFW_IBMPC_PBID1_V0_1_5.hex /home/pi/usb4vc/firmware/ibmpc_test.hex" +# ssh -t pi@192.168.1.98 "pkill python3;cd ~/usb4vc/rpi_app;python3 bb_tester.py" -# pi@169.254.245.21 bb_tester \ No newline at end of file +# pi@169.254.245.21 bb_tester + +ssh -t pi@192.168.1.98 "pkill python3;cd ~/usb4vc/rpi_app;python3 usb4vc_evdev_test.py" \ No newline at end of file diff --git a/user_program/usb4vc_evdev_test.py b/user_program/usb4vc_evdev_test.py new file mode 100644 index 0000000..525370b --- /dev/null +++ b/user_program/usb4vc_evdev_test.py @@ -0,0 +1,113 @@ +import os +import sys +import time +import math +import spidev +import evdev +import threading +import RPi.GPIO as GPIO +import usb4vc_ui +from usb4vc_shared import * +import usb4vc_gamepads + +SPI_BUF_INDEX_MAGIC = 0 +SPI_BUF_INDEX_SEQNUM = 1 +SPI_BUF_INDEX_MSG_TYPE = 2 + +SPI_MOSI_MSG_TYPE_NOP = 0 +SPI_MOSI_MSG_TYPE_INFO_REQUEST = 1 +SPI_MOSI_MSG_TYPE_SET_PROTOCOL = 2 +SPI_MOSI_MSG_TYPE_REQ_ACK = 3 + +SPI_MOSI_MSG_TYPE_KEYBOARD_EVENT = 8 +SPI_MOSI_MSG_TYPE_MOUSE_EVENT = 9 +SPI_MOSI_MSG_TYPE_GAMEPAD_EVENT_RAW_UNKNOWN = 10 +SPI_MOSI_MSG_TYPE_GAMEPAD_EVENT_MAPPED = 11 +SPI_MOSI_MSG_TYPE_GAMEPAD_EVENT_RAW_SUPPORTED = 12 + +SPI_MISO_MSG_TYPE_NOP = 0 +SPI_MISO_MSG_TYPE_INFO_REQUEST = 128 +SPI_MISO_MSG_TYPE_KB_LED_REQUEST = 129 + +SPI_MOSI_MAGIC = 0xde +SPI_MISO_MAGIC = 0xcd + + +PCARD_BUSY_PIN = 20 +SLAVE_REQ_PIN = 16 + +GPIO.setmode(GPIO.BCM) +GPIO.setup(SLAVE_REQ_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) +GPIO.add_event_detect(SLAVE_REQ_PIN, GPIO.RISING) + +GPIO.setup(PCARD_BUSY_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) + +pcard_spi = spidev.SpiDev(0, 0) +pcard_spi.max_speed_hz = 2000000 + +opened_device_dict = {} + +led_device_path = '/sys/class/leds' +input_device_path = '/dev/input/by-path/' + + +SPI_XFER_TIMEOUT = 0.025 +def xfer_when_not_busy(data, drop=False): + start_ts = time.time() + while GPIO.input(PCARD_BUSY_PIN): + # print(time.time(), "P-Card is busy!") + if drop: + return None + if time.time() - start_ts > SPI_XFER_TIMEOUT: + break + return pcard_spi.xfer(data) + +def is_gamepad_button(event_code): + name_result = code_value_to_name_lookup.get(event_code) + if name_result is None: + return False + for item in name_result: + if item in gamepad_event_code_name_list: + return True + return False + +nop_spi_msg_template = [SPI_MOSI_MAGIC] + [0]*31 +info_request_spi_msg_template = [SPI_MOSI_MAGIC, 0, SPI_MOSI_MSG_TYPE_INFO_REQUEST] + [0]*29 +keyboard_event_spi_msg_template = [SPI_MOSI_MAGIC, 0, SPI_MOSI_MSG_TYPE_KEYBOARD_EVENT] + [0]*29 +mouse_event_spi_msg_template = [SPI_MOSI_MAGIC, 0, SPI_MOSI_MSG_TYPE_MOUSE_EVENT] + [0]*29 +gamepad_event_ibm_ggp_spi_msg_template = [SPI_MOSI_MAGIC, 0, SPI_MOSI_MSG_TYPE_GAMEPAD_EVENT_MAPPED, 0, 0, 0, 0, 0, 127, 127, 127, 127] + [0]*20 +raw_usb_unknown_gamepad_event_spi_msg_template = [SPI_MOSI_MAGIC, 0, SPI_MOSI_MSG_TYPE_GAMEPAD_EVENT_RAW_UNKNOWN] + [0]*7 + [127]*8 + [0]*14 +raw_usb_supported_gamepad_event_spi_msg_template = [SPI_MOSI_MAGIC, 0, SPI_MOSI_MSG_TYPE_GAMEPAD_EVENT_RAW_SUPPORTED] + [0]*7 + [127]*4 + [0, 0, 127, 127] + [0]*14 + +def make_spi_msg_ack(): + return [SPI_MOSI_MAGIC, 0, SPI_MOSI_MSG_TYPE_REQ_ACK] + [0]*29 + +def make_keyboard_spi_packet(input_data, kbd_id): + result = list(keyboard_event_spi_msg_template) + result[3] = kbd_id + result[4] = input_data[2] + result[5] = input_data[3] + result[6] = input_data[4] + return result + +def make_mouse_spi_packet(mouse_dict, mouse_id): + to_transfer = list(mouse_event_spi_msg_template) + to_transfer[3] = mouse_id + to_transfer[4:6] = mouse_dict['x'] + to_transfer[6:8] = mouse_dict['y'] + to_transfer[8] = mouse_dict['scroll'] + to_transfer[9] = mouse_dict['hscroll'] + to_transfer[13] = mouse_dict[BTN_LEFT] + to_transfer[14] = mouse_dict[BTN_RIGHT] + to_transfer[15] = mouse_dict[BTN_MIDDLE] + to_transfer[16] = mouse_dict[BTN_SIDE] + to_transfer[17] = mouse_dict[BTN_EXTRA] + return to_transfer + +PID_PROTOCOL_OFF = 0 +PID_GENERIC_GAMEPORT_GAMEPAD = 7 +PID_BBC_MICRO_JOYSTICK = 14 +PID_RAW_USB_GAMEPAD = 127 + + +print("hello world!") \ No newline at end of file