From c374f1aa669a53c82d733388849affad84ca347b Mon Sep 17 00:00:00 2001 From: Hamza Date: Sat, 12 Sep 2026 06:54:41 +0100 Subject: [PATCH] Add GameSir Cyclone 2 wireless controller support & continuous 125Hz injection --- .gitignore | 15 ++ Ghostcontrol.elf | Bin 308192 -> 0 bytes README.md | 4 +- payload/Makefile | 2 +- payload/controller_xbox360.c | 178 ++++++++++++++++++++++ payload/controller_xbox360.h | 28 ++++ payload/gc_main.c | 281 ++++++++++++++++++++++++++++++----- 7 files changed, 472 insertions(+), 36 deletions(-) create mode 100644 .gitignore delete mode 100644 Ghostcontrol.elf create mode 100644 payload/controller_xbox360.c create mode 100644 payload/controller_xbox360.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2bf5bd --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +# Compiled binaries and payloads +*.elf +*.bin +*.o +*.a +*.so + +# PS5 Payload SDK +ps5-payload-sdk/ + +# OS and Editor artifacts +.DS_Store +Thumbs.db +.vscode/ +.idea/ diff --git a/Ghostcontrol.elf b/Ghostcontrol.elf deleted file mode 100644 index 0df1509af61ded5df8639188cdfeabf075e6cf47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308192 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 Ji5j-~{|}R6PdWeq diff --git a/README.md b/README.md index 6518d28..7b1034e 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ https://github.com/user-attachments/assets/6583b1c2-3d3d-4f2e-9e79-689121fea4a3 |-----------|------|---------|--------| | 8BitDo Ultimate 2 | Nintendo Switch Pro | 057e:2009 | ✅ Working | | 8BitDo Ultimate 2 | Native | 2dc8:310b | Untested | +| GameSir Cyclone 2 | XInput / Xbox 360 | 3537:100b | ✅ Added Support | See `othercontrollersGuide.md` for adding new controllers. @@ -88,8 +89,9 @@ See `ProControllerResearch.md` for the full research documentation on the USB HI | `gc_main.c` | Main payload — VDA, VDI, USB HID thread, button parsing | | `shellui_pad.c` | ShellUI PT_ATTACH helper for force_bind via MBus | | `shellui_pad.h` | Header for shellui_pad | +| `controller_xbox360.c` | Driver for Xbox 360 / XInput wireless controllers (GameSir Cyclone 2, etc.) | +| `controller_xbox360.h` | Header for Xbox 360 driver | | `Makefile` | Build system | -| `ghost-control-ps5.elf` | Pre-compiled payload (deploy directly) | | `ProControllerResearch.md` | Full USB protocol research for Nintendo Switch Pro Controller | | `othercontrollersGuide.md` | Guide for adding other USB HID controllers | diff --git a/payload/Makefile b/payload/Makefile index e6de9a5..d7aaa21 100644 --- a/payload/Makefile +++ b/payload/Makefile @@ -11,7 +11,7 @@ include $(PS5_PAYLOAD_SDK)/toolchain/prospero.mk CFLAGS += -D__PROSPERO__ -Wall -Wextra -g -O2 -fPIC -fno-stack-protector LDFLAGS += -lScePad -lSceUserService -lpthread -ldl -SRC := gc_main.c shellui_pad.c usb_helpers.c controller_nintendo.c controller_xbox.c +SRC := gc_main.c shellui_pad.c usb_helpers.c controller_nintendo.c controller_xbox.c controller_xbox360.c .PHONY: all clean deploy diff --git a/payload/controller_xbox360.c b/payload/controller_xbox360.c new file mode 100644 index 0000000..10d5b8b --- /dev/null +++ b/payload/controller_xbox360.c @@ -0,0 +1,178 @@ +#include "controller_xbox360.h" +#include "usb_helpers.h" +#include +#include +#include +#include + +#ifdef __PROSPERO__ +#include +#define LOG(...) klog_printf("[GC] " __VA_ARGS__) +#else +#define LOG(...) fprintf(stderr, __VA_ARGS__) +#endif + +/* ── helpers ──────────────────────────────────────────────────────────── */ + +#define DEADZONE 4000 + +static inline uint8_t stick_x(int16_t v) { + return (v > DEADZONE || v < -DEADZONE) ? (uint8_t)((v + 32768) >> 8) : 128u; +} + +static inline uint8_t stick_y(int16_t v) { + return (v > DEADZONE || v < -DEADZONE) ? (uint8_t)(255 - ((v + 32768) >> 8)) : 128u; +} + +/* ── input parsing ────────────────────────────────────────────────────── */ + +/* + * Xbox 360 wired / XInput packet layout (official Linux xpad.c): + * + * b[0] = 0x00 (report ID) + * b[1] = 0x14 (length = 20) + * + * b[2] (dpad + system buttons): + * bit 0 (0x01): DPad Up + * bit 1 (0x02): DPad Down + * bit 2 (0x04): DPad Left + * bit 3 (0x08): DPad Right + * bit 4 (0x10): Start (Options) + * bit 5 (0x20): Back / View (Share) + * bit 6 (0x40): Left Stick click (L3) + * bit 7 (0x80): Right Stick click (R3) + * + * b[3] (bumpers + Guide + face buttons): + * bit 0 (0x01): LB (L1) + * bit 1 (0x02): RB (R1) + * bit 2 (0x04): Guide / Home (PS button) + * bit 3 (0x08): sync / unused + * bit 4 (0x10): A (Cross) + * bit 5 (0x20): B (Circle) + * bit 6 (0x40): X (Square) + * bit 7 (0x80): Y (Triangle) + * + * b[4] = Left Trigger (0 - 255) + * b[5] = Right Trigger (0 - 255) + * b[6..7] = Left Stick X (int16 LE, center=0) + * b[8..9] = Left Stick Y (int16 LE, center=0, inverted) + * b[10..11] = Right Stick X (int16 LE, center=0) + * b[12..13] = Right Stick Y (int16 LE, center=0, inverted) + */ + +void xbox360_parse_input(const uint8_t *b, ScePadData *o) { + uint8_t b2 = b[2]; + uint8_t b3 = b[3]; + uint8_t lt = b[4]; + uint8_t rt = b[5]; + int16_t lx = (int16_t)((uint16_t)b[6] | ((uint16_t)b[7] << 8)); + int16_t ly = (int16_t)((uint16_t)b[8] | ((uint16_t)b[9] << 8)); + int16_t rx = (int16_t)((uint16_t)b[10] | ((uint16_t)b[11] << 8)); + int16_t ry = (int16_t)((uint16_t)b[12] | ((uint16_t)b[13] << 8)); + + uint32_t btn = 0; + + /* Dpad: b[2] bits 0-3 (standard Xbox 360 bitmask) */ + if (b2 & 0x01u) btn |= SCE_PAD_BUTTON_UP; + if (b2 & 0x02u) btn |= SCE_PAD_BUTTON_DOWN; + if (b2 & 0x04u) btn |= SCE_PAD_BUTTON_LEFT; + if (b2 & 0x08u) btn |= SCE_PAD_BUTTON_RIGHT; + + /* Start / Back: b[2] bits 4-5 */ + if (b2 & 0x10u) btn |= SCE_PAD_BUTTON_OPTIONS; /* Start -> Options */ + if (b2 & 0x20u) btn |= SCE_PAD_BUTTON_SHARE; /* Back -> Share / Create */ + + /* Thumbstick clicks: b[2] bits 6-7 */ + if (b2 & 0x40u) btn |= SCE_PAD_BUTTON_L3; + if (b2 & 0x80u) btn |= SCE_PAD_BUTTON_R3; + + /* Bumpers: b[3] bits 0-1 */ + if (b3 & 0x01u) btn |= SCE_PAD_BUTTON_L1; + if (b3 & 0x02u) btn |= SCE_PAD_BUTTON_R1; + + /* Guide / Home: b[3] bit 2 */ + if (b3 & 0x04u) btn |= SCE_PAD_BUTTON_PS; + + /* Face buttons: b[3] bits 4-7 */ + if (b3 & 0x10u) btn |= SCE_PAD_BUTTON_CROSS; /* A -> Cross */ + if (b3 & 0x20u) btn |= SCE_PAD_BUTTON_CIRCLE; /* B -> Circle */ + if (b3 & 0x40u) btn |= SCE_PAD_BUTTON_SQUARE; /* X -> Square */ + if (b3 & 0x80u) btn |= SCE_PAD_BUTTON_TRIANGLE; /* Y -> Triangle */ + + /* Analog Triggers + digital threshold */ + o->analogButtons.l2 = lt; + o->analogButtons.r2 = rt; + if (lt > 16u) btn |= SCE_PAD_BUTTON_L2; + if (rt > 16u) btn |= SCE_PAD_BUTTON_R2; + + o->buttons = btn; + + /* Analog Sticks with deadzone filter */ + o->leftStick.x = stick_x(lx); + o->leftStick.y = stick_y(ly); + o->rightStick.x = stick_x(rx); + o->rightStick.y = stick_y(ry); + + o->connected = 1; + o->quat.w = 1.0f; +} + +/* ── XInput protocol ──────────────────────────────────────────────────── */ + +void xbox360_handshake(int fd, struct usb_fs_endpoint *eps) { + /* Send single OUT enable packet to start XInput data stream */ + uint8_t enable[] = {0x01, 0x03, 0x0E}; + usb_send_out(fd, &eps[1], enable, sizeof(enable), "xbox360_enable"); + LOG("Xbox 360 handshake sent\n"); +} + +int xbox360_handle_packet(int fd, struct usb_fs_endpoint *eps, + const uint8_t *buf, uint32_t len, + ScePadData *out_pad) { + (void)fd; (void)eps; + + if (len < 3) return 0; + + /* Guide / Home button short packet: [0x01, 0x03, ] or [0x00, 0x03, ] */ + if ((buf[0] == 0x01 || buf[0] == 0x00) && buf[1] == 0x03 && len >= 3) { + out_pad->leftStick.x = 128; + out_pad->leftStick.y = 128; + out_pad->rightStick.x = 128; + out_pad->rightStick.y = 128; + out_pad->connected = 1; + out_pad->quat.w = 1.0f; + if (buf[2] & 0x01u) out_pad->buttons = SCE_PAD_BUTTON_PS; + return 1; + } + + if (len < 14) return 0; + + const uint8_t *pkt = NULL; + + /* 1. Direct Xbox 360 controller report starting at buf[0] */ + if (buf[0] == 0x00 && buf[1] == 0x14 && len >= 14) { + pkt = buf; + } + /* 2. Wireless receiver dongle with 4-byte radio header (length >= 24) */ + else if (len >= 24 && buf[4] == 0x00 && buf[5] == 0x14) { + pkt = &buf[4]; + } + /* 3. Search for [0x00, 0x14] signature anywhere */ + else { + for (uint32_t i = 0; i + 14 <= len; i++) { + if (buf[i] == 0x00 && buf[i+1] == 0x14) { + pkt = &buf[i]; + break; + } + } + } + + /* Reject all packets without valid [0x00, 0x14] Xbox 360 input signature! + * Never fall back to parsing an all-zero or unknown buffer. */ + if (pkt) { + xbox360_parse_input(pkt, out_pad); + return 1; + } + + return 0; +} diff --git a/payload/controller_xbox360.h b/payload/controller_xbox360.h new file mode 100644 index 0000000..35a7a60 --- /dev/null +++ b/payload/controller_xbox360.h @@ -0,0 +1,28 @@ +#pragma once +#include +#include +#include +#include "gc_types.h" + +/* + * Xbox 360 (Wired) / XInput Protocol + * Used by GameSir Cyclone 2 and others. + * + * Endpoints: IN=0x81 OUT=0x02 (varies, check descriptor) + */ + +#define XBOX360_EP_IN 0x81 +#define XBOX360_EP_OUT 0x02 + +/* Parse Xbox 360 input report into ScePadData */ +void xbox360_parse_input(const uint8_t *buf, ScePadData *o); + +/* Xbox 360 / XInput initialization handshake */ +void xbox360_handshake(int fd, struct usb_fs_endpoint *eps); + +/* Handle one IN packet. Returns 1 if pad updated, 0 to skip. */ +int xbox360_handle_packet(int fd, struct usb_fs_endpoint *eps, + const uint8_t *buf, uint32_t len, + ScePadData *out_pad); + +void notify(const char *fmt, ...); diff --git a/payload/gc_main.c b/payload/gc_main.c index 42f9491..ac91dd0 100644 --- a/payload/gc_main.c +++ b/payload/gc_main.c @@ -43,6 +43,7 @@ #include "usb_helpers.h" #include "controller_nintendo.h" #include "controller_xbox.h" +#include "controller_xbox360.h" /* ── Logging ──────────────────────────────────────────────────────────── */ #define LOG_DIR "/data/ghostpad" @@ -101,6 +102,9 @@ typedef struct { char dev_path[32]; /* ugen path claimed by this slot */ uint16_t vid, pid; volatile uint32_t inject_count; + volatile int has_data; + ScePadData last_pad; + pthread_mutex_t pad_lock; } ctrl_slot_t; static ctrl_slot_t g_slots[MAX_SLOTS]; @@ -142,7 +146,7 @@ static uint64_t klog_dequeue_ms(int ms) { /* ── Notification ─────────────────────────────────────────────────────── */ typedef struct { char _unk[45]; char message[3075]; } NotifyRequest; -static void notify(const char *fmt, ...) { +void notify(const char *fmt, ...) { NotifyRequest req; va_list ap; memset(&req, 0, sizeof(req)); va_start(ap, fmt); vsnprintf(req.message, sizeof(req.message), fmt, ap); va_end(ap); @@ -205,16 +209,48 @@ static void *klog_capture_thread(void *arg) { close(fd); return NULL; } -/* ── VDI injection ────────────────────────────────────────────────────── */ -static void inject_pad(int slot, const ScePadData *pad) { - int32_t h = g_slots[slot].handle; - if (h < 0 || !g_slots[slot].vdi_ready) return; - int vr = scePadVirtualDeviceInsertData(h, pad); - uint32_t n = ++g_slots[slot].inject_count; - if ((n % 600) == 0) - gp_log("slot[%d] VDI #%u ret=0x%08x\n", slot, n, (uint32_t)vr); - static int vdi_err_logged = 0; - if (vr != 0 && !vdi_err_logged) { gp_log("VDI error 0x%08x\n",(uint32_t)vr); vdi_err_logged=1; } +/* ── VDI continuous injection thread ──────────────────────────────────── */ +/* Runs at 125Hz (every 8ms) — matches Xbox 360 native report rate and PS5 + * virtual device frame pacing. Keeps scePadVirtualDeviceInsertData continuously + * fed so games and ShellCore hold-repeat work smoothly without buffer congestion. */ +static void *vdi_inject_thread(void *arg) { + (void)arg; + gp_log("VDI continuous injector thread started (125Hz)\n"); + + while (1) { + for (int s = 0; s < MAX_SLOTS; s++) { + if (!g_slots[s].vdi_ready || g_slots[s].handle < 0 || !g_slots[s].has_data) + continue; + + pthread_mutex_lock(&g_slots[s].pad_lock); + if (!g_slots[s].vdi_ready || g_slots[s].handle < 0 || !g_slots[s].has_data) { + pthread_mutex_unlock(&g_slots[s].pad_lock); + continue; + } + int32_t h = g_slots[s].handle; + ScePadData pad = g_slots[s].last_pad; + pthread_mutex_unlock(&g_slots[s].pad_lock); + + pad.connected = 1; + pad.quat.w = 1.0f; + pad.timestamp = 0; + pad.count = 0; + + int vr = scePadVirtualDeviceInsertData(h, &pad); + uint32_t n = ++g_slots[s].inject_count; + if ((n % 1250) == 0) { + gp_log("slot[%d] VDI #%u ret=0x%08x btn=0x%08x lx=%u ly=%u\n", + s, n, (uint32_t)vr, pad.buttons, pad.leftStick.x, pad.leftStick.y); + } + static int vdi_err_logged[MAX_SLOTS] = {0}; + if (vr != 0 && !vdi_err_logged[s]) { + gp_log("slot[%d] VDI error 0x%08x\n", s, (uint32_t)vr); + vdi_err_logged[s] = 1; + } + } + usleep(8000); /* 125 Hz (every 8ms) */ + } + return NULL; } /* ── ugen detection ───────────────────────────────────────────────────── */ @@ -224,6 +260,8 @@ static void inject_pad(int slot, const ScePadData *pad) { #define PID_SWITCH 0x2009u #define VID_XBOX 0x045eu #define PID_XBOX 0x02eau +#define VID_GAMESIR 0x3537u +#define PID_GAMESIR 0x100bu static const char *UGEN_PATHS[] = { "/dev/ugen2.2","/dev/ugen2.3","/dev/ugen2.4","/dev/ugen2.5", @@ -241,6 +279,89 @@ static int probe_one_path(const char *path, uint16_t *out_vid, uint16_t *out_pid int fd = open(path, O_RDWR|O_NONBLOCK); if (fd < 0) return 0; + uint16_t dev_vid = 0, dev_pid = 0; + + /* ── Try VID/PID detection BEFORE USB_FS_INIT ────────────────────── */ + /* USB_FS_INIT puts the device into bulk/interrupt transfer mode, + * which may block descriptor ioctls. Try them first. */ + + /* Method 1: USB_GET_DEVICE_DESC (raw USB descriptor, most reliable) */ + { + struct usb_device_descriptor ddesc; + memset(&ddesc, 0, sizeof(ddesc)); + if (ioctl(fd, USB_GET_DEVICE_DESC, &ddesc) == 0) { + dev_vid = UGETW(ddesc.idVendor); + dev_pid = UGETW(ddesc.idProduct); + gp_log("probe: %s M1(GET_DEVICE_DESC) VID=0x%04x PID=0x%04x\n", path, dev_vid, dev_pid); + } + } + + /* Method 2: USB_DEVICEINFO (ioctl #4, IOWR) */ + if (dev_vid == 0) { + struct usb_device_info di; + memset(&di, 0, sizeof(di)); + if (ioctl(fd, USB_DEVICEINFO, &di) == 0 && di.udi_vendorNo != 0) { + dev_vid = di.udi_vendorNo; + dev_pid = di.udi_productNo; + gp_log("probe: %s M2(DEVICEINFO) VID=0x%04x PID=0x%04x\n", path, dev_vid, dev_pid); + } + } + + /* Method 3: USB_GET_DEVICEINFO (ioctl #112, IOR) */ + if (dev_vid == 0) { + struct usb_device_info di; + memset(&di, 0, sizeof(di)); + if (ioctl(fd, USB_GET_DEVICEINFO, &di) == 0 && di.udi_vendorNo != 0) { + dev_vid = di.udi_vendorNo; + dev_pid = di.udi_productNo; + gp_log("probe: %s M3(GET_DEVICEINFO) VID=0x%04x PID=0x%04x\n", path, dev_vid, dev_pid); + } + } + + /* Method 4: USB_DO_REQUEST — raw GET_DESCRIPTOR control transfer */ + if (dev_vid == 0) { + uint8_t desc_buf[18]; + struct usb_ctl_request ucr; + memset(&ucr, 0, sizeof(ucr)); + memset(desc_buf, 0, sizeof(desc_buf)); + ucr.ucr_data = desc_buf; + ucr.ucr_flags = 0; + ucr.ucr_request.bmRequestType = 0x80; /* Device-to-host, standard, device */ + ucr.ucr_request.bRequest = 6; /* GET_DESCRIPTOR */ + USETW(ucr.ucr_request.wValue, 0x0100); /* Descriptor type 1 (DEVICE), index 0 */ + USETW(ucr.ucr_request.wIndex, 0); + USETW(ucr.ucr_request.wLength, 18); + if (ioctl(fd, USB_DO_REQUEST, &ucr) == 0 && ucr.ucr_actlen >= 10) { + dev_vid = (uint16_t)(desc_buf[8] | (desc_buf[9] << 8)); + dev_pid = (uint16_t)(desc_buf[10] | (desc_buf[11] << 8)); + gp_log("probe: %s M4(DO_REQUEST) VID=0x%04x PID=0x%04x\n", path, dev_vid, dev_pid); + } + } + + /* ── Match by VID/PID if we got one ─────────────────────────────── */ + if (dev_vid != 0) { + if (dev_vid == VID_GAMESIR && dev_pid == PID_GAMESIR) { + gp_log("probe: %s → GameSir Cyclone 2\n", path); + *out_vid = VID_GAMESIR; *out_pid = PID_GAMESIR; + close(fd); return 1; + } + if (dev_vid == VID_SWITCH && dev_pid == PID_SWITCH) { + gp_log("probe: %s → Nintendo (by VID/PID)\n", path); + *out_vid = VID_SWITCH; *out_pid = PID_SWITCH; + close(fd); return 1; + } + if ((dev_vid == VID_XBOX && dev_pid == PID_XBOX) || + (dev_vid == 0x057eu)) { + /* 8BitDo in Switch mode also uses VID 0x057E */ + gp_log("probe: %s → Xbox/Nintendo (by VID/PID)\n", path); + *out_vid = dev_vid; *out_pid = dev_pid; + close(fd); return 1; + } + /* Unknown VID/PID — log and continue to endpoint probe */ + gp_log("probe: %s VID=0x%04x PID=0x%04x — unknown\n", path, dev_vid, dev_pid); + } + + /* ── Endpoint-based fallback (needs USB_FS_INIT) ────────────────── */ struct usb_fs_endpoint ep; struct usb_fs_init ini; struct usb_fs_uninit u; @@ -252,15 +373,14 @@ static int probe_one_path(const char *path, uint16_t *out_vid, uint16_t *out_pid ii=1; ioctl(fd,USB_IFACE_DRIVER_DETACH,&ii); ii=2; ioctl(fd,USB_IFACE_DRIVER_DETACH,&ii); + int found = 0; struct usb_fs_open po; memset(&po,0,sizeof(po)); po.ep_index=0; po.max_bufsize=64; po.max_frames=1; - int found = 0; - /* Nintendo: ep=0x81, maxpkt=64 */ po.ep_no=0x81; if (ioctl(fd,USB_FS_OPEN,&po)==0 && po.max_packet_length==64) { - gp_log("probe: %s ep=0x81 mpkt=%u → Nintendo\n", path,(unsigned)po.max_packet_length); + gp_log("probe: %s ep=0x81 mpkt=%u → Nintendo (endpoint)\n", path,(unsigned)po.max_packet_length); struct usb_fs_close pc; memset(&pc,0,sizeof(pc)); pc.ep_index=0; ioctl(fd,USB_FS_CLOSE,&pc); *out_vid=VID_SWITCH; *out_pid=PID_SWITCH; found = 1; @@ -271,7 +391,7 @@ static int probe_one_path(const char *path, uint16_t *out_vid, uint16_t *out_pid memset(&po,0,sizeof(po)); po.ep_index=0; po.max_bufsize=64; po.max_frames=1; po.ep_no=0x82; if (ioctl(fd,USB_FS_OPEN,&po)==0 && po.max_packet_length>0 && po.max_packet_length<=64) { - gp_log("probe: %s ep=0x82 mpkt=%u → Xbox One\n", path,(unsigned)po.max_packet_length); + gp_log("probe: %s ep=0x82 mpkt=%u → Xbox One (endpoint)\n", path,(unsigned)po.max_packet_length); struct usb_fs_close pc; memset(&pc,0,sizeof(pc)); pc.ep_index=0; ioctl(fd,USB_FS_CLOSE,&pc); *out_vid=VID_XBOX; *out_pid=PID_XBOX; found = 1; @@ -395,6 +515,63 @@ static void *usb_hid_thread(void *arg) { goto main_loop; } + /* ── GameSir Cyclone 2 (XInput): Xbox One-style init ──────────────── */ + /* The GameSir in XInput mode uses a vendor-specific interface (not HID). + * Must DETACH before FS_INIT — same pattern as Xbox One. */ + if (pid == PID_GAMESIR) { + fd = open(dev_path, O_RDWR); + if (fd < 0) { gp_log("slot[%d] GameSir open fail errno=%d\n", slot, errno); goto exit_slot; } + + /* Detach ALL interfaces first (vendor-specific + HID) */ + { int ii; for(ii=0;ii<4;ii++){int i2=ii; ioctl(fd,USB_IFACE_DRIVER_DETACH,&i2);} } + usleep(120000); /* hub settle — critical for PS5 USB stack */ + + memset(eps,0,sizeof(eps)); memset(&init,0,sizeof(init)); + init.pEndpoints=eps; init.ep_index_max=4; + if (ioctl(fd,USB_FS_INIT,&init)!=0){ + gp_log("slot[%d] GameSir FS_INIT fail errno=%d\n",slot,errno); + close(fd); goto exit_slot; + } + + /* Try IN endpoints: 0x81 first, then 0x82, 0x83 */ + int in_ep = 0; + int ep_candidates[] = {0x81, 0x82, 0x83}; + for (int e = 0; e < 3; e++) { + memset(&fs_open,0,sizeof(fs_open)); + fs_open.ep_index=0; fs_open.ep_no=ep_candidates[e]; + fs_open.max_bufsize=64; fs_open.max_frames=1; + if (ioctl(fd,USB_FS_OPEN,&fs_open)==0) { + in_ep = ep_candidates[e]; + gp_log("slot[%d] GameSir IN ep=0x%02x ok maxpkt=%u\n", + slot, in_ep, (unsigned)fs_open.max_packet_length); + break; + } + gp_log("slot[%d] GameSir IN ep=0x%02x fail errno=%d\n",slot,ep_candidates[e],errno); + } + if (in_ep == 0) { + notify("Ghostcontrol: GameSir IN endpoint open failed"); + goto uninit_exit; + } + + buffers[0]=buf; lengths[0]=64; + eps[0].ppBuffer=buffers; eps[0].pLength=lengths; eps[0].nFrames=1; + eps[0].timeout=0; /* Infinite timeout: wait for incoming packet without aborting endpoint */ + eps[0].flags=USB_FS_FLAG_SINGLE_SHORT_OK|USB_FS_FLAG_MULTI_SHORT_OK; + + /* Try OUT endpoints: 0x01, 0x02 */ + memset(&fs_open,0,sizeof(fs_open)); + fs_open.ep_index=1; fs_open.ep_no=0x02; fs_open.max_bufsize=64; fs_open.max_frames=1; + out_opened = (ioctl(fd,USB_FS_OPEN,&fs_open)==0) ? 1 : 0; + if (!out_opened) { + memset(&fs_open,0,sizeof(fs_open)); + fs_open.ep_index=1; fs_open.ep_no=0x01; fs_open.max_bufsize=64; fs_open.max_frames=1; + out_opened = (ioctl(fd,USB_FS_OPEN,&fs_open)==0) ? 1 : 0; + } + gp_log("slot[%d] GameSir OUT opened=%d\n", slot, out_opened); + + goto main_loop; + } + /* ── Nintendo: two-pass ────────────────────────────────────────────── */ fd = open(dev_path, O_RDWR); if (fd < 0) { gp_log("slot[%d] open fail errno=%d\n", slot, errno); goto exit_slot; } @@ -464,7 +641,7 @@ static void *usb_hid_thread(void *arg) { } main_loop: ; - int hs_state = (pid==PID_XBOX) ? HS_STREAMING : HS_WAIT_81_01; + int hs_state = (pid==PID_XBOX || pid==PID_GAMESIR) ? HS_STREAMING : HS_WAIT_81_01; uint8_t nintendo_seq = 1; while (1) { @@ -486,14 +663,20 @@ main_loop: ; continue; } - int ok=0, cerr=0, cw=0; - for(cw=0;cw<60;cw++){ + int ok=0, cerr=0; + while (1) { memset(&complete,0,sizeof(complete)); complete.ep_index=0; - if(ioctl(fd,USB_FS_COMPLETE,&complete)==0){ok=1;break;} + if (ioctl(fd,USB_FS_COMPLETE,&complete)==0){ok=1;break;} cerr=errno; - if(cerr==ENXIO||cerr==ENOTTY){gp_log("slot[%d] COMPLETE errno=%d — gone\n",slot,cerr);goto reinit;} - if(cerr!=EBUSY) break; - usleep(500); + if (cerr==ENXIO||cerr==ENOTTY||cerr==EBADF){ + gp_log("slot[%d] COMPLETE errno=%d — gone\n",slot,cerr); + goto reinit; + } + if (cerr!=EBUSY) { + gp_log("slot[%d] COMPLETE errno=%d\n",slot,cerr); + break; + } + usleep(1000); } if(!ok){ memset(&stop,0,sizeof(stop)); stop.ep_index=0; ioctl(fd,USB_FS_STOP,&stop); @@ -508,15 +691,14 @@ main_loop: ; if (pid == PID_XBOX) { injected = xbox_handle_packet(fd, eps, buf, len, &pad); + } else if (pid == PID_GAMESIR) { + injected = xbox360_handle_packet(fd, eps, buf, len, &pad); } else { injected = nintendo_handle_packet(fd, eps, buf, len, &hs_state, &nintendo_seq, &pad); } if (injected > 0) { - if (!usb_ready_notified) { - notify("Ghostcontrol: slot[%d] streaming — controller active", slot); - usb_ready_notified = 1; - } + usb_ready_notified = 1; /* First real button press confirms the assignment — release the gate * so the manager can start the next controller's dialog. */ if (!g_slots[slot].confirmed && pad.buttons != 0) { @@ -524,7 +706,10 @@ main_loop: ; if (g_assign_slot == slot) g_assign_slot = -1; gp_log("slot[%d] assignment confirmed (button press)\n", slot); } - inject_pad(slot, &pad); + pthread_mutex_lock(&g_slots[slot].pad_lock); + g_slots[slot].last_pad = pad; + g_slots[slot].has_data = 1; + pthread_mutex_unlock(&g_slots[slot].pad_lock); } } @@ -542,10 +727,18 @@ uninit_exit: exit_slot: gp_log("slot[%d] USB thread exiting — freeing slot\n", slot); - scePadVirtualDeviceDeleteDevice(g_slots[slot].handle); - pthread_mutex_lock(&g_slot_lock); + pthread_mutex_lock(&g_slots[slot].pad_lock); + int32_t old_h = g_slots[slot].handle; g_slots[slot].handle = -1; g_slots[slot].vdi_ready = 0; + g_slots[slot].has_data = 0; + pthread_mutex_unlock(&g_slots[slot].pad_lock); + + if (old_h >= 0) { + scePadVirtualDeviceDeleteDevice(old_h); + } + + pthread_mutex_lock(&g_slot_lock); g_slots[slot].usb_active= 0; g_slots[slot].dev_path[0] = '\0'; pthread_mutex_unlock(&g_slot_lock); @@ -598,9 +791,10 @@ static void *controller_manager_thread(void *arg) { } const char *name = - (vid==VID_SWITCH && pid==PID_SWITCH) ? "Nintendo Switch Pro / 8BitDo" : - (vid==VID_NATIVE && pid==PID_NATIVE) ? "8BitDo Native" : - (vid==VID_XBOX && pid==PID_XBOX) ? "Xbox One S" : "Unknown"; + (vid==VID_SWITCH && pid==PID_SWITCH) ? "Nintendo Switch Pro / 8BitDo" : + (vid==VID_NATIVE && pid==PID_NATIVE) ? "8BitDo Native" : + (vid==VID_XBOX && pid==PID_XBOX) ? "Xbox One S" : + (vid==VID_GAMESIR && pid==PID_GAMESIR) ? "GameSir Cyclone 2" : "Unknown"; gp_log("manager: %s at %s → slot[%d]\n", name, path, slot); notify("Ghostcontrol: %s detected — assign user on screen", name); @@ -629,11 +823,21 @@ static void *controller_manager_thread(void *arg) { continue; } + pthread_mutex_lock(&g_slots[slot].pad_lock); pthread_mutex_lock(&g_slot_lock); - g_slots[slot].handle = handle; - g_slots[slot].vdi_ready = 1; + g_slots[slot].handle = handle; + g_slots[slot].vdi_ready = 1; g_slots[slot].inject_count = 0; + memset(&g_slots[slot].last_pad, 0, sizeof(ScePadData)); + g_slots[slot].last_pad.leftStick.x = 128; + g_slots[slot].last_pad.leftStick.y = 128; + g_slots[slot].last_pad.rightStick.x = 128; + g_slots[slot].last_pad.rightStick.y = 128; + g_slots[slot].last_pad.quat.w = 1.0f; + g_slots[slot].last_pad.connected = 1; + g_slots[slot].has_data = 1; pthread_mutex_unlock(&g_slot_lock); + pthread_mutex_unlock(&g_slots[slot].pad_lock); /* Launch USB reader thread */ usb_thread_arg_t *targ = malloc(sizeof(*targ)); @@ -731,7 +935,9 @@ int main(void) { g_slots[s].vdi_ready = 0; g_slots[s].usb_active = 0; g_slots[s].confirmed = 0; + g_slots[s].has_data = 0; g_slots[s].dev_path[0]= '\0'; + pthread_mutex_init(&g_slots[s].pad_lock, NULL); } g_assign_slot = -1; @@ -768,6 +974,13 @@ int main(void) { gp_log("Manager thread started\n"); } + /* Start continuous VDI injection thread (250Hz) */ + pthread_t inj_tid; + if (pthread_create(&inj_tid, NULL, vdi_inject_thread, NULL)==0) { + pthread_detach(inj_tid); + gp_log("VDI inject thread started\n"); + } + /* Keep-alive */ uint32_t tick = 0; while (1) {