From 62e229775e54456b20ffd5d32d93dcc3c096554d Mon Sep 17 00:00:00 2001 From: ItsDeidara Date: Mon, 8 Jun 2026 07:55:15 -0400 Subject: [PATCH] xbox series S support, official NX controllers + refactoring added support for official Nintendo Switch pro controllers(not just 8bito ultimate 2) and xbox series S --- Ghostcontrol.elf | Bin 0 -> 308192 bytes gc_main.c | 1085 ------------------------ ghost-control-ps5.elf | Bin 282720 -> 0 bytes Makefile => payload/Makefile | 11 +- payload/controller_nintendo.c | 161 ++++ payload/controller_nintendo.h | 27 + payload/controller_xbox.c | 198 +++++ payload/controller_xbox.h | 51 ++ payload/gc_main.c | 783 +++++++++++++++++ payload/gc_types.h | 45 + shellui_pad.c => payload/shellui_pad.c | 0 shellui_pad.h => payload/shellui_pad.h | 0 payload/usb_helpers.c | 56 ++ payload/usb_helpers.h | 8 + xboxSeriesSButtonBits.md | 67 ++ 15 files changed, 1400 insertions(+), 1092 deletions(-) create mode 100644 Ghostcontrol.elf delete mode 100644 gc_main.c delete mode 100644 ghost-control-ps5.elf rename Makefile => payload/Makefile (63%) create mode 100644 payload/controller_nintendo.c create mode 100644 payload/controller_nintendo.h create mode 100644 payload/controller_xbox.c create mode 100644 payload/controller_xbox.h create mode 100644 payload/gc_main.c create mode 100644 payload/gc_types.h rename shellui_pad.c => payload/shellui_pad.c (100%) rename shellui_pad.h => payload/shellui_pad.h (100%) create mode 100644 payload/usb_helpers.c create mode 100644 payload/usb_helpers.h create mode 100644 xboxSeriesSButtonBits.md diff --git a/Ghostcontrol.elf b/Ghostcontrol.elf new file mode 100644 index 0000000000000000000000000000000000000000..0df1509af61ded5df8639188cdfeabf075e6cf47 GIT binary patch literal 308192 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 Ji5j-~{|}R6PdWeq literal 0 HcmV?d00001 diff --git a/gc_main.c b/gc_main.c deleted file mode 100644 index 49d04b4..0000000 --- a/gc_main.c +++ /dev/null @@ -1,1085 +0,0 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later - * Ghost-Control v3: USB HID controller → virtual DualSense on PS5 - * - * Follows Ghostpad's proven VDA path exactly: - * 1. scePadVirtualDeviceAddDevice(userId=1, type=3) - * 2. Monitor klogsrv:3232 for DEVICE_ADDED [type:1][subType:22] - * 3. shellui_pad_force_bind(vDevId, fgUserId) via PT_ATTACH SceShellUI - * 4. scePadVirtualDeviceInsertData(handle, &padData) directly from this process - * - * USB HID input (new piece in front of Ghostpad's VDI path): - * /dev/ugen2.2 → USB_IFACE_DRIVER_DETACH → USB_FS_OPEN ep=0x81 - * → Nintendo handshake → 0x30/0x3f report loop → parse → VDI - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#ifdef __PROSPERO__ -#include -#include -#include -#endif - -#include "shellui_pad.h" - -/* ------------------------------------------------------------------ - * Logging - * ------------------------------------------------------------------ */ - -#define LOG_DIR "/data/ghostpad" -#define LOG_PATH "/data/ghostpad/gc_status.log" -#define PID_PATH "/data/ghostpad/gc_main.pid" -#define LOG_MAX 480 - -static pthread_mutex_t g_log_lock = PTHREAD_MUTEX_INITIALIZER; -static int g_log_fd = -1; - -void ghostpad_status_log_reset(void) { - pthread_mutex_lock(&g_log_lock); - if (g_log_fd >= 0) { close(g_log_fd); g_log_fd = -1; } - mkdir(LOG_DIR, 0755); - g_log_fd = open(LOG_PATH, O_WRONLY|O_CREAT|O_TRUNC, 0600); - pthread_mutex_unlock(&g_log_lock); -} - -void ghostpad_status_log(const char *fmt, ...) { - char buf[LOG_MAX]; - va_list ap; - va_start(ap, fmt); - vsnprintf(buf, sizeof(buf)-1, fmt, ap); - va_end(ap); - buf[LOG_MAX-1] = '\0'; - klog_printf("%s", buf); - pthread_mutex_lock(&g_log_lock); - if (g_log_fd >= 0) { - size_t n = strnlen(buf, sizeof(buf)); - write(g_log_fd, buf, n); - if (n && buf[n-1] != '\n') write(g_log_fd, "\n", 1); - } - pthread_mutex_unlock(&g_log_lock); -} - -#define gp_log(...) ghostpad_status_log("[GC] " __VA_ARGS__) - -/* ------------------------------------------------------------------ - * SCE stubs - * ------------------------------------------------------------------ */ - -extern int32_t sceUserServiceInitialize(void *params); -extern int32_t sceUserServiceGetInitialUser(int32_t *outUserId); -extern int32_t sceUserServiceGetForegroundUser(int32_t *outUserId); -extern int32_t scePadInit(void); -extern int32_t scePadSetProcessPrivilege(int32_t privilege); -extern int32_t scePadGetHandle(int32_t userId, int32_t type, int32_t index); -extern int32_t scePadVirtualDeviceAddDevice(void *param, int32_t deviceType); -extern int32_t scePadVirtualDeviceDeleteDevice(int32_t handle); -extern int32_t scePadVirtualDeviceInsertData(int32_t handle, const void *padData); -extern int32_t sceKernelSendNotificationRequest(int unk0, void *req, size_t size, int unk1); - -/* ------------------------------------------------------------------ - * SCE button constants - * ------------------------------------------------------------------ */ - -#define SCE_PAD_BUTTON_L3 0x00000002u -#define SCE_PAD_BUTTON_R3 0x00000004u -#define SCE_PAD_BUTTON_OPTIONS 0x00000008u -#define SCE_PAD_BUTTON_UP 0x00000010u -#define SCE_PAD_BUTTON_RIGHT 0x00000020u -#define SCE_PAD_BUTTON_DOWN 0x00000040u -#define SCE_PAD_BUTTON_LEFT 0x00000080u -#define SCE_PAD_BUTTON_L2 0x00000100u -#define SCE_PAD_BUTTON_R2 0x00000200u -#define SCE_PAD_BUTTON_L1 0x00000400u -#define SCE_PAD_BUTTON_R1 0x00000800u -#define SCE_PAD_BUTTON_TRIANGLE 0x00001000u -#define SCE_PAD_BUTTON_CIRCLE 0x00002000u -#define SCE_PAD_BUTTON_CROSS 0x00004000u -#define SCE_PAD_BUTTON_SQUARE 0x00008000u -#define SCE_PAD_BUTTON_CREATE 0x00010000u -#define SCE_PAD_BUTTON_PS 0x00010000u -#define SCE_PAD_BUTTON_TOUCH_PAD 0x00100000u - -typedef struct { uint16_t x; uint16_t y; uint8_t finger; uint8_t pad[3]; } ScePadTouch; -typedef struct { - uint8_t fingers; uint8_t pad1[3]; uint32_t pad2; ScePadTouch touch[2]; -} ScePadTouchData; -typedef struct { - uint32_t buttons; - struct { uint8_t x; uint8_t y; } leftStick; - struct { uint8_t x; uint8_t y; } rightStick; - struct { uint8_t l2; uint8_t r2; } analogButtons; - uint16_t padding; - struct { float x, y, z, w; } quat; - struct { float x, y, z; } vel; - struct { float x, y, z; } accel; - ScePadTouchData touchData; - uint8_t connected; - uint8_t _align[3]; - uint64_t timestamp; - uint8_t ext[16]; - uint8_t count; - uint8_t unknown[15]; -} ScePadData; - -#define VIRTUAL_DEVICE_TYPE_DUALSENSE 3 - -/* ------------------------------------------------------------------ - * Shared state - * ------------------------------------------------------------------ */ - -static volatile int32_t g_vdi_handle = -1; -static volatile int g_vdi_ready = 0; -/* Actual foreground userId — used for force_bind */ -static int32_t g_inject_uid = 0x10000000; - -/* klog monitoring: set when DEVICE_ADDED [type:1][subType:22] seen */ -static pthread_mutex_t g_klog_lock = PTHREAD_MUTEX_INITIALIZER; -static volatile uint64_t g_klog_vdev_id = 0; - -/* ------------------------------------------------------------------ - * Notification - * ------------------------------------------------------------------ */ - -typedef struct { char _unk[45]; char message[3075]; } NotifyRequest; -static 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); - sceKernelSendNotificationRequest(0, &req, sizeof(req), 0); -} - -/* ------------------------------------------------------------------ - * klog line parser — extract virtual DualSense DEVICE_ADDED deviceId - * ------------------------------------------------------------------ */ - -static uint64_t parse_hex_str(const char *s) { - uint64_t v = 0; - while (*s) { - char c = *s++; - if (c >= '0' && c <= '9') v = (v<<4)|(c-'0'); - else if (c >= 'a' && c <= 'f') v = (v<<4)|(c-'a'+10); - else if (c >= 'A' && c <= 'F') v = (v<<4)|(c-'A'+10); - else break; - } - return v; -} - -static void parse_klog_line(const char *line) { - /* Looking for: DEVICE_ADDED ... [type:1][subType:22][capabilityBattery:0] - * That's the virtual DualSense device we created with VDA(type=3). */ - if (!strstr(line, "DEVICE_ADDED")) return; - if (!strstr(line, "subType:22")) return; - if (!strstr(line, "capabilityBattery:0")) return; - - /* Extract DeviceId:0x... or deviceId=0x... */ - const char *p = strstr(line, "DeviceId:0x"); - if (!p) p = strstr(line, "deviceId=0x"); - if (!p) return; - p += 11; /* skip "DeviceId:0x" or "deviceId=0x" */ - - uint64_t dev_id = parse_hex_str(p); - if (!dev_id) return; - - pthread_mutex_lock(&g_klog_lock); - if (!g_klog_vdev_id) { - g_klog_vdev_id = dev_id; - gp_log("klog: VDA device 0x%llx\n", (unsigned long long)dev_id); - } - pthread_mutex_unlock(&g_klog_lock); -} - -/* ------------------------------------------------------------------ - * klog capture thread — connects to klogsrv:3232 (since /dev/klog - * is unavailable to payload processes: errno=16 EBUSY) - * ------------------------------------------------------------------ */ - -static void *klog_capture_thread(void *arg) { - (void)arg; - char buf[512]; - char line[1024]; - size_t line_len = 0; - int fd = -1; - - /* Try /dev/klog first; fall back to klogsrv TCP on port 3232 */ - fd = open("/dev/klog", O_RDONLY); - if (fd < 0) { - gp_log("klog: /dev/klog errno=%d, trying klogsrv TCP 127.0.0.1:3232\n", errno); - struct sockaddr_in sin; - int sock = socket(AF_INET, SOCK_STREAM, 0); - if (sock < 0) { gp_log("klog: socket failed errno=%d\n", errno); return NULL; } - memset(&sin, 0, sizeof(sin)); - sin.sin_family = AF_INET; - sin.sin_addr.s_addr = inet_addr("127.0.0.1"); - sin.sin_port = htons(3232); - for (int retry = 0; retry < 10; retry++) { - if (connect(sock, (struct sockaddr *)&sin, sizeof(sin)) == 0) { - fd = sock; - gp_log("klog: connected to klogsrv TCP 127.0.0.1:3232\n"); - break; - } - usleep(500000); - } - if (fd < 0) { - gp_log("klog: could not connect to klogsrv errno=%d\n", errno); - close(sock); - return NULL; - } - } - - while (1) { - ssize_t len = read(fd, buf, sizeof(buf)); - if (len < 0) { - if (errno == EINTR) continue; - gp_log("klog: read error errno=%d\n", errno); - break; - } - if (len == 0) { usleep(10000); continue; } - - for (ssize_t i = 0; i < len; i++) { - char c = buf[i]; - if (c == '\n' || line_len >= sizeof(line)-1) { - line[line_len] = '\0'; - parse_klog_line(line); - line_len = 0; - } else if (c != '\r') { - line[line_len++] = c; - } - } - } - close(fd); - return NULL; -} - -/* ------------------------------------------------------------------ - * Nintendo input parsing - * ------------------------------------------------------------------ */ - -static uint8_t ntoh_stick(uint16_t v) { - if (v > 4095) v = 4095; - return (uint8_t)((v * 255u) / 4095u); -} - -static uint32_t hat_to_dpad(uint8_t hat) { - switch (hat) { - case 0: return SCE_PAD_BUTTON_UP; - case 1: return SCE_PAD_BUTTON_UP | SCE_PAD_BUTTON_RIGHT; - case 2: return SCE_PAD_BUTTON_RIGHT; - case 3: return SCE_PAD_BUTTON_DOWN | SCE_PAD_BUTTON_RIGHT; - case 4: return SCE_PAD_BUTTON_DOWN; - case 5: return SCE_PAD_BUTTON_DOWN | SCE_PAD_BUTTON_LEFT; - case 6: return SCE_PAD_BUTTON_LEFT; - case 7: return SCE_PAD_BUTTON_UP | SCE_PAD_BUTTON_LEFT; - default: return 0; - } -} - -/* Report 0x30: full 60Hz input after Nintendo handshake - * [3]=right btns [4]=shared [5]=left btns [6-8]=lstick [9-11]=rstick */ -static void parse_0x30(const uint8_t *b, ScePadData *o) { - uint8_t br=b[3], bs=b[4], bl=b[5]; - uint16_t lx=(uint16_t)(b[6]|((b[7]&0xF)<<8)); - uint16_t ly=(uint16_t)((b[7]>>4)|((uint16_t)b[8]<<4)); - uint16_t rx=(uint16_t)(b[9]|((b[10]&0xF)<<8)); - uint16_t ry=(uint16_t)((b[10]>>4)|((uint16_t)b[11]<<4)); - uint32_t btn=0; - if(br&0x04) btn|=SCE_PAD_BUTTON_CROSS; - if(br&0x08) btn|=SCE_PAD_BUTTON_CIRCLE; - if(br&0x01) btn|=SCE_PAD_BUTTON_SQUARE; - if(br&0x02) btn|=SCE_PAD_BUTTON_TRIANGLE; - if(bl&0x40) btn|=SCE_PAD_BUTTON_L1; - if(bl&0x80) btn|=SCE_PAD_BUTTON_L2; - if(br&0x40) btn|=SCE_PAD_BUTTON_R1; - if(br&0x80) btn|=SCE_PAD_BUTTON_R2; - if(bs&0x08) btn|=SCE_PAD_BUTTON_L3; - if(bs&0x04) btn|=SCE_PAD_BUTTON_R3; - if(bs&0x02) btn|=SCE_PAD_BUTTON_OPTIONS; - if(bs&0x01) btn|=SCE_PAD_BUTTON_CREATE; - if(bs&0x10) btn|=SCE_PAD_BUTTON_PS; - if(bs&0x20) btn|=SCE_PAD_BUTTON_TOUCH_PAD; - if(bl&0x02) btn|=SCE_PAD_BUTTON_UP; - if(bl&0x01) btn|=SCE_PAD_BUTTON_DOWN; - if(bl&0x04) btn|=SCE_PAD_BUTTON_RIGHT; - if(bl&0x08) btn|=SCE_PAD_BUTTON_LEFT; - o->buttons=btn; - o->leftStick.x=ntoh_stick(lx); o->leftStick.y=ntoh_stick(ly); - o->rightStick.x=ntoh_stick(rx); o->rightStick.y=ntoh_stick(ry); - o->analogButtons.l2=(bl&0x80)?255:0; - o->analogButtons.r2=(br&0x80)?255:0; - o->connected=1; o->quat.w=1.0f; -} - -/* Report 0x3f: simple input on button change only - * [1]=right btns [2]=shared [3]=HAT [4]=lx [5]=ly [6]=rx [7]=ry [8]=L/ZL */ -static void parse_0x3f(const uint8_t *b, ScePadData *o) { - uint8_t b1=b[1],b2=b[2],hat=b[3],b8=b[8]; - uint32_t btn=0; - if(b1&0x04) btn|=SCE_PAD_BUTTON_CROSS; - if(b1&0x08) btn|=SCE_PAD_BUTTON_CIRCLE; - if(b1&0x01) btn|=SCE_PAD_BUTTON_SQUARE; - if(b1&0x02) btn|=SCE_PAD_BUTTON_TRIANGLE; - if(b8&0x40) btn|=SCE_PAD_BUTTON_L1; - if(b8&0x80) btn|=SCE_PAD_BUTTON_L2; - if(b1&0x40) btn|=SCE_PAD_BUTTON_R1; - if(b1&0x80) btn|=SCE_PAD_BUTTON_R2; - if(b2&0x08) btn|=SCE_PAD_BUTTON_L3; - if(b2&0x04) btn|=SCE_PAD_BUTTON_R3; - if(b2&0x02) btn|=SCE_PAD_BUTTON_OPTIONS; - if(b2&0x01) btn|=SCE_PAD_BUTTON_CREATE; - if(b2&0x10) btn|=SCE_PAD_BUTTON_PS; - if(b2&0x20) btn|=SCE_PAD_BUTTON_TOUCH_PAD; - btn|=hat_to_dpad(hat); - o->buttons=btn; - o->leftStick.x=b[4]; o->leftStick.y=b[5]; - o->rightStick.x=b[6]; o->rightStick.y=b[7]; - o->analogButtons.l2=(b8&0x80)?255:0; - o->analogButtons.r2=(b1&0x80)?255:0; - o->connected=1; o->quat.w=1.0f; -} - -/* ------------------------------------------------------------------ - * ugen device detection - * ------------------------------------------------------------------ */ - -static const char *UGEN_PATHS[] = { - "/dev/ugen2.2","/dev/ugen2.3","/dev/ugen2.4","/dev/ugen2.5", - "/dev/ugen1.2","/dev/ugen0.2","/dev/ugen0.3", -}; -#define N_UGEN_PATHS ((int)(sizeof(UGEN_PATHS)/sizeof(UGEN_PATHS[0]))) - -#define VID_NATIVE 0x2dc8u -#define PID_NATIVE 0x310bu -#define VID_SWITCH 0x057eu -#define PID_SWITCH 0x2009u - -static int ugen_find_target(const char **out_path, uint16_t *out_vid, uint16_t *out_pid) { - for (int i = 0; i < N_UGEN_PATHS; i++) { - /* Try O_RDWR — PS5 ugen requires RDWR for USB ioctls. - * USB_GET_DEVICEINFO returns ENOTTY with O_RDONLY on PS5. - * O_NONBLOCK prevents blocking if the device is busy. */ - int fd = open(UGEN_PATHS[i], O_RDWR | O_NONBLOCK); - if (fd < 0) { - if (errno != ENOENT) - gp_log("ugen_find: open(%s) errno=%d\n", UGEN_PATHS[i], errno); - continue; - } - struct usb_device_info di; - memset(&di, 0, sizeof(di)); - int ok = 0; - int r = ioctl(fd, USB_GET_DEVICEINFO, &di); - if (r != 0) { - if (errno == ENOTTY) { - if (strncmp(UGEN_PATHS[i], "/dev/ugen2.", 11) == 0) { - gp_log("ugen_find: %s USB_GET_DEVICEINFO ENOTTY, trying as Nintendo candidate\n", - UGEN_PATHS[i]); - if (out_vid) *out_vid = VID_SWITCH; - if (out_pid) *out_pid = PID_SWITCH; - if (out_path) *out_path = UGEN_PATHS[i]; - close(fd); - return 1; - } - gp_log("ugen_find: %s USB_GET_DEVICEINFO ENOTTY, ignored non-external bus\n", - UGEN_PATHS[i]); - close(fd); - continue; - } - if (errno != ENOENT) - gp_log("ugen_find: %s USB_GET_DEVICEINFO errno=%d\n", - UGEN_PATHS[i], errno); - close(fd); - continue; - } - if (r == 0) { - gp_log("ugen_find: %s VID=0x%04x PID=0x%04x\n", - UGEN_PATHS[i], di.udi_vendorNo, di.udi_productNo); - if ((di.udi_vendorNo == VID_NATIVE && di.udi_productNo == PID_NATIVE) || - (di.udi_vendorNo == VID_SWITCH && di.udi_productNo == PID_SWITCH)) { - if (out_vid) *out_vid = di.udi_vendorNo; - if (out_pid) *out_pid = di.udi_productNo; - if (out_path) *out_path = UGEN_PATHS[i]; - ok = 1; - } - } else { - /* ENOTTY = PS5 ugen doesn't support this ioctl in current state. - * Try a USB_FS_INIT probe to check if the device accepts ugen FS ops. - * If it does, assume it's our target (only one USB game controller expected). */ - struct usb_fs_endpoint ep_probe; - struct usb_fs_init init_probe; - memset(&ep_probe, 0, sizeof(ep_probe)); - memset(&init_probe, 0, sizeof(init_probe)); - init_probe.pEndpoints = &ep_probe; - init_probe.ep_index_max = 1; - int ir = ioctl(fd, USB_FS_INIT, &init_probe); - gp_log("ugen_find: %s DEVICEINFO errno=%d FS_INIT=%d\n", - UGEN_PATHS[i], errno, ir); - if (ir == 0) { - /* FS_INIT succeeded. Verify endpoint by opening ep=0x81 and - * checking max_pkt_length == 64 (8BitDo Nintendo IN ep is always 64). */ - struct usb_fs_open probe_open; - memset(&probe_open, 0, sizeof(probe_open)); - probe_open.ep_index = 0; - probe_open.ep_no = 0x81; - probe_open.max_bufsize = 64; - probe_open.max_frames = 1; - if (ioctl(fd, USB_FS_OPEN, &probe_open) == 0 && - probe_open.max_packet_length == 64) { - gp_log("ugen_find: %s ep=0x81 max_pkt=%u — 8BitDo!\n", - UGEN_PATHS[i], (unsigned)probe_open.max_packet_length); - struct usb_fs_close pc; memset(&pc,0,sizeof(pc)); pc.ep_index=0; - ioctl(fd, USB_FS_CLOSE, &pc); - if (out_vid) *out_vid = VID_SWITCH; - if (out_pid) *out_pid = PID_SWITCH; - if (out_path) *out_path = UGEN_PATHS[i]; - ok = 1; - } else { - gp_log("ugen_find: %s ep probe failed or wrong pkt size %u\n", - UGEN_PATHS[i], (unsigned)probe_open.max_packet_length); - } - struct usb_fs_uninit un; memset(&un,0,sizeof(un)); - ioctl(fd, USB_FS_UNINIT, &un); - } - } - close(fd); - if (ok) return 1; - } - return 0; -} - -/* ------------------------------------------------------------------ - * Inject pad data via direct VDI (Ghostpad path) - * ------------------------------------------------------------------ */ - -static void inject_pad(const ScePadData *pad) { - int32_t h = g_vdi_handle; - if (h < 0) return; - int vr = scePadVirtualDeviceInsertData(h, pad); - static uint32_t inject_count = 0; - inject_count++; - if (inject_count <= 8 || (inject_count % 300) == 0) { - gp_log("VDI inject #%u ret=0x%08x buttons=0x%08x ls=%u,%u rs=%u,%u lt=%u rt=%u\n", - inject_count, (uint32_t)vr, pad->buttons, - pad->leftStick.x, pad->leftStick.y, - pad->rightStick.x, pad->rightStick.y, - pad->analogButtons.l2, pad->analogButtons.r2); - } - static int logged = 0; - if (vr != 0 && !logged) { - gp_log("VDI error 0x%08x (logged once)\n", (uint32_t)vr); - logged = 1; - } -} - -static int usb_fs_send_out_report(int fd, struct usb_fs_endpoint *ep, - const uint8_t *data, uint32_t len, - const char *tag) { - void *out_buffers[1] = { (void *)data }; - uint32_t out_lengths[1] = { len }; - struct usb_fs_start start; - struct usb_fs_complete complete; - - ep->ppBuffer = out_buffers; - ep->pLength = out_lengths; - ep->nFrames = 1; - ep->timeout = 100; - ep->flags = 0; - ep->aFrames = 0; - ep->status = 0; - - memset(&start, 0, sizeof(start)); - start.ep_index = 1; - if (ioctl(fd, USB_FS_START, &start) != 0) { - int e = errno; - gp_log("OUT %s START failed errno=%d ep_status=%d aFrames=%u len=%u\n", - tag, e, ep->status, ep->aFrames, len); - return -errno; - } - - for (int wait = 0; wait < 20; wait++) { - memset(&complete, 0, sizeof(complete)); - complete.ep_index = 1; - if (ioctl(fd, USB_FS_COMPLETE, &complete) == 0) { - gp_log("OUT %s complete ok wait=%d ep_status=%d aFrames=%u len=%u\n", - tag, wait, ep->status, ep->aFrames, out_lengths[0]); - return 0; - } - if (errno != EBUSY) { - int e = errno; - gp_log("OUT %s COMPLETE failed errno=%d ep_status=%d aFrames=%u len=%u\n", - tag, e, ep->status, ep->aFrames, out_lengths[0]); - return -errno; - } - usleep(50000); - } - - gp_log("OUT %s COMPLETE still busy ep_status=%d aFrames=%u len=%u\n", - tag, ep->status, ep->aFrames, out_lengths[0]); - return -EBUSY; -} - -static int usb_fs_send_out_cmd(int fd, struct usb_fs_endpoint *ep, uint8_t a, uint8_t b) { - uint8_t out_buf[2] = { a, b }; - char tag[16]; - snprintf(tag, sizeof(tag), "%02x %02x", a, b); - return usb_fs_send_out_report(fd, ep, out_buf, sizeof(out_buf), tag); -} - -static int nintendo_send_subcmd(int fd, struct usb_fs_endpoint *ep, - uint8_t *seq, uint8_t subcmd, - const uint8_t *data, uint32_t data_len) { - static const uint8_t neutral_rumble[8] = { - 0x00, 0x01, 0x40, 0x40, 0x00, 0x01, 0x40, 0x40 - }; - uint8_t out_buf[64]; - char tag[32]; - uint32_t len = 11 + data_len; - - if (len > sizeof(out_buf)) - return -EINVAL; - - memset(out_buf, 0, sizeof(out_buf)); - out_buf[0] = 0x01; - out_buf[1] = *seq & 0x0f; - memcpy(out_buf + 2, neutral_rumble, sizeof(neutral_rumble)); - out_buf[10] = subcmd; - if (data_len) - memcpy(out_buf + 11, data, data_len); - *seq = (uint8_t)((*seq + 1) & 0x0f); - - snprintf(tag, sizeof(tag), "subcmd %02x", subcmd); - return usb_fs_send_out_report(fd, ep, out_buf, len, tag); -} - -static void nintendo_maybe_poll_state(int fd, struct usb_fs_endpoint *ep, - uint8_t *seq, int enabled) { - static struct timeval last_poll; - struct timeval now; - long elapsed_ms; - - if (!enabled) - return; - gettimeofday(&now, NULL); - elapsed_ms = (now.tv_sec - last_poll.tv_sec) * 1000L + - (now.tv_usec - last_poll.tv_usec) / 1000L; - if (last_poll.tv_sec != 0 && elapsed_ms < 33) - return; - last_poll = now; - (void)nintendo_send_subcmd(fd, ep, seq, 0x00, NULL, 0); -} - -/* ------------------------------------------------------------------ - * USB HID reader thread - * ------------------------------------------------------------------ */ - -/* Handshake states for Nintendo Pro Controller USB init */ -#define HS_WAIT_81_01 0 /* waiting for 0x81 sub=0x01 */ -#define HS_WAIT_81_02 1 /* saw 0x81 0x01, sent [80 02], waiting for 0x81 0x02 */ -#define HS_STREAMING 2 /* subcmds sent, reading 0x00/0x30 data */ - -static void *usb_hid_thread(void *arg) { - (void)arg; - const char *dev_path = NULL; - uint16_t vid=0, pid=0; - struct usb_fs_endpoint eps[2]; - struct usb_fs_init init; - struct usb_fs_open fs_open; - struct usb_fs_open fs_out_open; - struct usb_fs_start start; - struct usb_fs_complete complete; - struct usb_fs_stop stop; - struct usb_fs_close fs_close; - struct usb_fs_uninit uninit; - uint8_t buf[64]; - void *buffers[1]; uint32_t lengths[1]; - int fd = -1; - int out_opened = 0; - - gp_log("USB thread started\n"); - -retry_find: - dev_path = NULL; vid = 0; pid = 0; - out_opened = 0; - { int _scan=0; - while (!ugen_find_target(&dev_path, &vid, &pid)) { - if (_scan==0 || _scan==5) gp_log("USB scan #%d: no 8BitDo found\n",_scan); - _scan++; usleep(2000000); - } - } - gp_log("USB candidate at %s VID=0x%04x PID=0x%04x\n", dev_path, vid, pid); - { - const char *ctlr_name = - (vid==VID_SWITCH && pid==PID_SWITCH) ? "8BitDo (Nintendo Pro mode)" : - (vid==VID_NATIVE && pid==PID_NATIVE) ? "8BitDo (Native mode)" : - "Unknown controller"; - notify("Ghostcontrol: Detected %s", ctlr_name); - } - - fd = open(dev_path, O_RDWR); - if (fd < 0) { gp_log("open failed errno=%d\n", errno); goto retry_find; } - - /* Probe-matching two-stage USB FS setup. */ - memset(eps,0,sizeof(eps)); memset(&init,0,sizeof(init)); - init.pEndpoints=eps; init.ep_index_max=1; - if (ioctl(fd,USB_FS_INIT,&init)!=0) { - gp_log("USB_FS_INIT pass1 failed errno=%d\n",errno); - close(fd); goto retry_find; - } - - int iface0 = 0; - int dr0 = ioctl(fd, USB_IFACE_DRIVER_DETACH, &iface0); - int de0 = (dr0 == 0) ? 0 : errno; - int iface1 = 1; - int dr1 = ioctl(fd, USB_IFACE_DRIVER_DETACH, &iface1); - int de1 = (dr1 == 0) ? 0 : errno; - gp_log("USB_IFACE_DRIVER_DETACH pass1(0)=%d errno=%d, pass1(1)=%d errno=%d\n", - dr0, de0, dr1, de1); - - memset(&fs_open,0,sizeof(fs_open)); - fs_open.ep_index=0; fs_open.ep_no=0x81; - fs_open.max_bufsize=sizeof(buf); fs_open.max_frames=1; - if (ioctl(fd,USB_FS_OPEN,&fs_open)!=0) { - gp_log("USB_FS_OPEN pass1 IN failed errno=%d\n",errno); - goto uninit_retry; - } - gp_log("USB_FS_OPEN pass1 IN ok max_pkt=%u\n", - (unsigned)fs_open.max_packet_length); - - memset(&uninit,0,sizeof(uninit)); ioctl(fd,USB_FS_UNINIT,&uninit); - close(fd); fd = -1; - - fd = open(dev_path, O_RDWR); - if (fd < 0) { gp_log("reopen failed errno=%d\n", errno); goto retry_find; } - - iface0 = 0; - dr0 = ioctl(fd, USB_IFACE_DRIVER_DETACH, &iface0); - de0 = (dr0 == 0) ? 0 : errno; - iface1 = 1; - dr1 = ioctl(fd, USB_IFACE_DRIVER_DETACH, &iface1); - de1 = (dr1 == 0) ? 0 : errno; - gp_log("USB_IFACE_DRIVER_DETACH pass2(0)=%d errno=%d, pass2(1)=%d errno=%d\n", - dr0, de0, dr1, de1); - - memset(eps,0,sizeof(eps)); memset(&init,0,sizeof(init)); - init.pEndpoints=eps; init.ep_index_max=2; - if (ioctl(fd,USB_FS_INIT,&init)!=0) { - gp_log("USB_FS_INIT pass2 failed errno=%d\n",errno); - close(fd); goto retry_find; - } - - memset(&fs_open,0,sizeof(fs_open)); - fs_open.ep_index=0; fs_open.ep_no=0x81; - fs_open.max_bufsize=sizeof(buf); fs_open.max_frames=1; - if (ioctl(fd,USB_FS_OPEN,&fs_open)!=0) { - gp_log("USB_FS_OPEN pass2 IN failed errno=%d\n",errno); - goto uninit_retry; - } - gp_log("USB_FS_OPEN pass2 IN ok max_pkt=%u\n", - (unsigned)fs_open.max_packet_length); - if (fs_open.max_packet_length != 64) { - gp_log("USB_FS_OPEN IN max_pkt=%u is not controller HID, rejecting %s\n", - (unsigned)fs_open.max_packet_length, dev_path); - goto reinit; - } - - buffers[0]=buf; lengths[0]=sizeof(buf); - eps[0].ppBuffer=buffers; eps[0].pLength=lengths; - eps[0].nFrames=1; eps[0].timeout=200; - eps[0].flags=USB_FS_FLAG_SINGLE_SHORT_OK|USB_FS_FLAG_MULTI_SHORT_OK; - - out_opened = 0; - memset(&fs_out_open,0,sizeof(fs_out_open)); - fs_out_open.ep_index=1; fs_out_open.ep_no=0x02; - fs_out_open.max_bufsize=64; fs_out_open.max_frames=1; - if (ioctl(fd,USB_FS_OPEN,&fs_out_open)==0) { - out_opened = 1; - gp_log("USB_FS_OPEN OUT ep=0x02 ok max_pkt=%u\n", - (unsigned)fs_out_open.max_packet_length); - if (pid == PID_SWITCH && fs_out_open.max_packet_length != 64) { - gp_log("USB_FS_OPEN OUT max_pkt=%u is not Nintendo controller OUT, rejecting %s\n", - (unsigned)fs_out_open.max_packet_length, dev_path); - goto reinit; - } - } else { - gp_log("USB_FS_OPEN OUT ep=0x02 failed errno=%d\n", errno); - } - - /* Proven init sequence (from usb_handshake_probe v11): - * [80 02]+[80 04] blindly, then respond to 0x81 0x01→[80 02] and - * 0x81 0x02→[80 04]+subcmds(0x40,0x48,0x30,0x03 LAST). */ - uint8_t nintendo_seq = 1; - int hs_state = HS_WAIT_81_01; - - if (pid == PID_SWITCH && out_opened) { - int c0 = usb_fs_send_out_cmd(fd, &eps[1], 0x80, 0x02); - usleep(30000); - int c1 = usb_fs_send_out_cmd(fd, &eps[1], 0x80, 0x04); - gp_log("Nintendo blind [80 02]=%d [80 04]=%d; handshake state machine starting\n", c0, c1); - usleep(50000); - } else if (pid == PID_SWITCH) { - gp_log("Nintendo OUT not open — skipping handshake, trying native read\n"); - hs_state = HS_STREAMING; - } - - uint32_t pkt_count = 0; - int usb_ready_notified = 0; - - while (1) { - memset(buf,0,sizeof(buf)); - lengths[0]=sizeof(buf); eps[0].aFrames=0; eps[0].status=0; - - memset(&start,0,sizeof(start)); start.ep_index=0; - if (ioctl(fd,USB_FS_START,&start)!=0) { - if (errno==EBUSY) { - memset(&stop,0,sizeof(stop)); stop.ep_index=0; - ioctl(fd,USB_FS_STOP,&stop); usleep(5000); - } else if (errno==ENXIO||errno==ENOTTY) { - gp_log("START errno=%d — device gone, reinit\n",errno); - goto reinit; - } else { - gp_log("START fatal errno=%d\n",errno); goto reinit; - } - continue; - } - - int complete_ok = 0; - int complete_errno = 0; - int complete_wait = 0; - /* Poll COMPLETE for up to 300ms (timeout=200ms + margin) */ - for (complete_wait = 0; complete_wait < 10; complete_wait++) { - memset(&complete,0,sizeof(complete)); complete.ep_index=0; - if (ioctl(fd,USB_FS_COMPLETE,&complete)==0) { - complete_ok = 1; - break; - } - complete_errno = errno; - if (complete_errno==ENXIO||complete_errno==ENOTTY) { - gp_log("COMPLETE errno=%d — device gone, reinit\n",complete_errno); - goto reinit; - } - if (complete_errno != EBUSY) break; - usleep(50000); - } - if (!complete_ok) { - static uint32_t compl_err=0; compl_err++; - if (compl_err==1||compl_err%20==0) - gp_log("COMPLETE failed errno=%d wait=%d count=%u\n", - complete_errno,complete_wait,compl_err); - memset(&stop,0,sizeof(stop)); stop.ep_index=0; - ioctl(fd,USB_FS_STOP,&stop); - continue; - } - - if (lengths[0] < 1) continue; - uint8_t rid = buf[0]; - uint32_t len = lengths[0]; - - if (pkt_count < 10 || (pkt_count % 300 == 0)) { - gp_log("PKT #%u hs=%d id=0x%02x len=%u: " - "%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", - pkt_count, hs_state, rid, len, - buf[0],buf[1],buf[2],buf[3],buf[4],buf[5], - buf[6],buf[7],buf[8],buf[9],buf[10],buf[11]); - } - pkt_count++; - - ScePadData pad; - memset(&pad, 0, sizeof(pad)); - pad.quat.w = 1.0f; - - /* Data packets: rid=0x00 (8BitDo streaming format, same layout as 0x30) - * or rid=0x30 (first transition packet after subcmd 0x03). - * Require buf[1]!=0 (non-zero timer) — all-zeros is a USB buffer - * artifact after reconnect, not real data. */ - if ((rid == 0x00 || rid == 0x30) && len >= 12) { - if (rid == 0x00 && buf[1] == 0) { - /* All-zeros garbage packet — skip, handshake not done yet */ - continue; - } - if (hs_state != HS_STREAMING) { - gp_log("rid=0x%02x timer=0x%02x — already streaming, skip handshake\n", - rid, buf[1]); - hs_state = HS_STREAMING; - } - if (!usb_ready_notified) { - notify("Ghostcontrol: Controller connected and streaming"); - usb_ready_notified = 1; - } - parse_0x30(buf, &pad); - if (g_vdi_ready) inject_pad(&pad); - continue; - } - - if (rid == 0x3f && len >= 9) { - if (!usb_ready_notified) { - notify("Ghostcontrol: Controller connected and streaming"); - usb_ready_notified = 1; - } - parse_0x3f(buf, &pad); - if (g_vdi_ready) inject_pad(&pad); - continue; - } - - if (rid == 0x21 && len >= 12) { - gp_log("0x21 ACK subcmd=0x%02x hs=%d\n", (buf[12]&0x7f), hs_state); - /* ACK for subcmd 0x03 might carry first input data — try parsing */ - parse_0x30(buf, &pad); - if (g_vdi_ready && hs_state==HS_STREAMING) inject_pad(&pad); - continue; - } - - if (rid == 0x81) { - /* Nintendo handshake. State machine from probe v11: - * 0x81 0x01 → [80 02] → wait for 0x81 0x02 - * 0x81 0x02 → [80 04] → send subcmds 0x40,0x48,0x30,0x03 → streaming - * If 0x81 arrives while HS_STREAMING (reconnect): reset and redo handshake. */ - if (hs_state == HS_STREAMING) { - gp_log("0x81 sub=0x%02x while streaming — reconnect, restarting handshake\n", buf[1]); - hs_state = HS_WAIT_81_01; - usb_ready_notified = 0; - } - if (buf[1] == 0x01 && hs_state == HS_WAIT_81_01) { - int hr = out_opened ? usb_fs_send_out_cmd(fd,&eps[1],0x80,0x02) : -ENODEV; - gp_log("0x81 sub=0x01 → [80 02] ret=%d\n",hr); - hs_state = HS_WAIT_81_02; - } else if (buf[1] == 0x02 && hs_state <= HS_WAIT_81_02) { - /* Complete handshake and send full subcmd init sequence */ - int hr = out_opened ? usb_fs_send_out_cmd(fd,&eps[1],0x80,0x04) : -ENODEV; - gp_log("0x81 sub=0x02 → [80 04] ret=%d; sending subcmds\n",hr); - usleep(50000); - if (out_opened) { - uint8_t d1[]={0x01}; nintendo_send_subcmd(fd,&eps[1],&nintendo_seq,0x40,d1,1); usleep(50000); - uint8_t d2[]={0x01}; nintendo_send_subcmd(fd,&eps[1],&nintendo_seq,0x48,d2,1); usleep(50000); - uint8_t d3[]={0x01}; nintendo_send_subcmd(fd,&eps[1],&nintendo_seq,0x30,d3,1); usleep(50000); - uint8_t d4[]={0x30}; nintendo_send_subcmd(fd,&eps[1],&nintendo_seq,0x03,d4,1); - gp_log("Subcmds sent (0x40,0x48,0x30,0x03) — expecting 0x00 stream\n"); - } - hs_state = HS_STREAMING; - } else { - gp_log("0x81 sub=0x%02x hs=%d (ignored)\n",buf[1],hs_state); - } - continue; - } - - /* Unknown packet — log and skip */ - if (pkt_count < 20) { - gp_log("UNKNOWN rid=0x%02x len=%u hs=%d\n",rid,len,hs_state); - } - } - -reinit: - if (usb_ready_notified) { - notify("Ghostcontrol: Controller disconnected"); - usb_ready_notified = 0; - } - memset(&stop,0,sizeof(stop)); stop.ep_index=0; ioctl(fd,USB_FS_STOP,&stop); - if (out_opened) { - memset(&fs_close,0,sizeof(fs_close)); fs_close.ep_index=1; ioctl(fd,USB_FS_CLOSE,&fs_close); - out_opened = 0; - } - memset(&fs_close,0,sizeof(fs_close)); fs_close.ep_index=0; ioctl(fd,USB_FS_CLOSE,&fs_close); -uninit_retry: - memset(&uninit,0,sizeof(uninit)); ioctl(fd,USB_FS_UNINIT,&uninit); - close(fd); gp_log("USB: reinit in 300ms\n"); usleep(300000); - goto retry_find; -} - -/* ------------------------------------------------------------------ - * Credential elevation - * ------------------------------------------------------------------ */ - -static void elevate_credentials(void) { - pid_t mypid = getpid(); - uint8_t caps[16] = { - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff - }; - kernel_set_ucred_authid(mypid, 0x3800000000010003l); - kernel_set_ucred_caps(mypid, caps); -} - -/* ------------------------------------------------------------------ - * main — follows Ghostpad's VDA + klog + force_bind + direct VDI path - * ------------------------------------------------------------------ */ - -int main(void) { - int32_t userId = -1, fgUser = -1; - int ret; - - ghostpad_status_log_reset(); - gp_log("Ghost-Control v3 starting\n"); - notify("Ghostcontrol - by StonedModder"); - - /* Kill previous instance via pidfile */ - { - int pfd = open(PID_PATH, O_RDONLY); - if (pfd >= 0) { - char pbuf[16] = {0}; - read(pfd, pbuf, sizeof(pbuf)-1); - close(pfd); - pid_t old = (pid_t)atoi(pbuf); - if (old > 0 && old != getpid()) { - gp_log("Killing previous instance pid=%d\n", old); - kill(old, SIGTERM); - usleep(600000); - } - } - int pfd2 = open(PID_PATH, O_WRONLY|O_CREAT|O_TRUNC, 0600); - if (pfd2 >= 0) { - char pbuf[16]; - snprintf(pbuf, sizeof(pbuf), "%d", getpid()); - write(pfd2, pbuf, strlen(pbuf)); - close(pfd2); - } - } - - /* User service */ - sceUserServiceInitialize(NULL); - sceUserServiceGetInitialUser(&userId); - sceUserServiceGetForegroundUser(&fgUser); - gp_log("userId=0x%08x fgUser=0x%08x\n", (uint32_t)userId, (uint32_t)fgUser); - - /* g_inject_uid: actual foreground user — used for force_bind. - * userId is clamped to [0x10000000,0x1000000F] for direct scePad calls. */ - g_inject_uid = (fgUser > 0) ? fgUser : userId; - if ((uint32_t)userId < 0x10000000u || (uint32_t)userId > 0x1000000Fu) - userId = 0x10000000; - gp_log("inject_uid=0x%08x direct_uid=0x%08x\n", - (uint32_t)g_inject_uid, (uint32_t)userId); - - elevate_credentials(); - - ret = scePadInit(); - gp_log("scePadInit: 0x%08x\n", ret); - ret = scePadSetProcessPrivilege(1); - gp_log("scePadSetProcessPrivilege: 0x%08x\n", ret); - - /* Clean orphaned virtual devices from previous runs */ - for (int dh = 0; dh < 64; dh++) { - int32_t dr = scePadVirtualDeviceDeleteDevice(dh); - if (dr == 0) gp_log("deleteDevice(%d): ok\n", dh); - } - - /* Start klog monitoring BEFORE VDA so we never miss the DEVICE_ADDED event */ - pthread_t klog_tid; - if (pthread_create(&klog_tid, NULL, klog_capture_thread, NULL) == 0) { - pthread_detach(klog_tid); - gp_log("klog thread started\n"); - } - usleep(300000); /* let klog thread connect before VDA fires the event */ - - /* ── VDA: create virtual DualSense ────────────────────────────── - * PS5 VDA uses userId=1 (not the actual user ID). - * Returns 0x803b0006 on PS5 — device IS created despite error code. - * If ret >= 0, it may encode a handle in the return value or param fields. */ - struct { int32_t size; int32_t userId; int32_t pad[6]; } vdp; - const int32_t SENTINEL = (int32_t)0xDEADBEEF; - memset(&vdp, 0, sizeof(vdp)); - vdp.size = (int32_t)sizeof(vdp); - vdp.userId = 1; /* PS5 VDA always uses userId=1 */ - for (int k=0; k<6; k++) vdp.pad[k] = SENTINEL; - - ret = scePadVirtualDeviceAddDevice(&vdp, VIRTUAL_DEVICE_TYPE_DUALSENSE); - gp_log("VDA ret=0x%08x pad[0-3]=0x%08x 0x%08x 0x%08x 0x%08x\n", - (uint32_t)ret, (uint32_t)vdp.pad[0], (uint32_t)vdp.pad[1], - (uint32_t)vdp.pad[2], (uint32_t)vdp.pad[3]); - - /* Check if VDA returned a direct handle (positive return value) */ - int32_t direct_handle = -1; - if (ret > 0) { - direct_handle = ret; - gp_log("VDA direct handle from ret: %d\n", direct_handle); - } - for (int k=0; k<6; k++) { - if (vdp.pad[k] != SENTINEL && vdp.pad[k] > 0) { - gp_log("VDA handle in pad[%d]=%d\n", k, vdp.pad[k]); - if (direct_handle < 0) direct_handle = vdp.pad[k]; - break; - } - } - - /* ── Wait for klog to confirm DEVICE_ADDED (up to 10s) ─────────── */ - gp_log("Waiting for VDA device ID (klog + GetHandle fallback)...\n"); - uint64_t vdev_id = 0; - for (int t = 0; t < 100 && !vdev_id; t++) { - usleep(100000); - pthread_mutex_lock(&g_klog_lock); - vdev_id = g_klog_vdev_id; - pthread_mutex_unlock(&g_klog_lock); - } - - int32_t vdi_handle = -1; - - if (vdev_id) { - gp_log("VDA device from klog: 0x%llx\n", (unsigned long long)vdev_id); - vdi_handle = (int32_t)(vdev_id & 0xffffffffu); - /* force_bind triggers the PS5 user-assignment dialog. - * Without it the PS5 silently auto-assigns with no screen shown. - * The user then presses a button on the controller to confirm. */ - int br = shellui_pad_force_bind(vdev_id, g_inject_uid); - gp_log("force_bind(0x%llx, 0x%08x) ret=%d — dialog should appear\n", - (unsigned long long)vdev_id, (uint32_t)g_inject_uid, br); - - } else if (direct_handle >= 0) { - gp_log("klog timeout — using direct VDA handle %d\n", direct_handle); - vdi_handle = direct_handle; - } else { - /* Last resort: GetHandle scan for existing virtual DualSense */ - gp_log("klog timeout — GetHandle scan...\n"); - static const int32_t uids[] = {1, 0x10000000, (int32_t)0xffffffff}; - for (int ui=0; ui<3 && vdi_handle<0; ui++) - for (int idx=0; idx<8 && vdi_handle<0; idx++) { - vdi_handle = scePadGetHandle(uids[ui], 3, idx); - if (vdi_handle >= 0) - gp_log("GetHandle uid=0x%08x idx=%d h=%d\n", - (uint32_t)uids[ui], idx, vdi_handle); - } - } - - if (vdi_handle >= 0) { - g_vdi_handle = vdi_handle; - g_vdi_ready = 1; - gp_log("VDI READY handle=0x%x\n", (uint32_t)vdi_handle); - notify("Ghostcontrol: Ready — select your user with the controller"); - } else { - gp_log("ERROR: no VDI handle found\n"); - notify("Ghostcontrol: ERROR — no VDI handle"); - } - - /* Start USB HID reader thread */ - pthread_t usb_tid; - if (pthread_create(&usb_tid, NULL, usb_hid_thread, NULL) == 0) { - pthread_detach(usb_tid); - gp_log("USB thread created\n"); - } - - /* Keep-alive + periodic status */ - uint32_t tick = 0; - while (1) { - usleep(1000000); - tick++; - if (tick % 10 == 0) { - gp_log("alive tick=%u vdi_ready=%d handle=0x%x\n", - tick, g_vdi_ready, (uint32_t)g_vdi_handle); - } - } - return 0; -} diff --git a/ghost-control-ps5.elf b/ghost-control-ps5.elf deleted file mode 100644 index 15ec4c4e52260e9907553de0b4bc91d5823e71ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282720 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 Scx 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ພ=Vv8^fZFzLLEuXFEv_CD- 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 diff --git a/Makefile b/payload/Makefile similarity index 63% rename from Makefile rename to payload/Makefile index 9739342..e6de9a5 100644 --- a/Makefile +++ b/payload/Makefile @@ -1,9 +1,6 @@ -# SPDX-License-Identifier: GPL-3.0-or-later -# Ghost-Control: USB HID controller → virtual DualSense on PS5 - -PS5_HOST ?= ps5 +PS5_HOST ?= 192.168.69.44 PORT ?= 9021 -TARGET := ghost-control-ps5.elf +TARGET := ghost-control-xbox-ps5.elf ifndef PS5_PAYLOAD_SDK $(error PS5_PAYLOAD_SDK is not set) @@ -14,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 +SRC := gc_main.c shellui_pad.c usb_helpers.c controller_nintendo.c controller_xbox.c .PHONY: all clean deploy @@ -27,4 +24,4 @@ clean: rm -f $(TARGET) deploy: $(TARGET) - nc -w 5 $(PS5_HOST) $(PORT) < $(TARGET) + nc -w 8 $(PS5_HOST) $(PORT) < $(TARGET) diff --git a/payload/controller_nintendo.c b/payload/controller_nintendo.c new file mode 100644 index 0000000..f4f0811 --- /dev/null +++ b/payload/controller_nintendo.c @@ -0,0 +1,161 @@ +#include "controller_nintendo.h" +#include "usb_helpers.h" +#include +#include + +#ifdef __PROSPERO__ +#include +#define LOG(...) klog_printf("[GC] " __VA_ARGS__) +#else +#define LOG(...) fprintf(stderr, __VA_ARGS__) +#endif + +static uint8_t ntoh_stick(uint16_t v) { + if (v > 4095) v = 4095; + return (uint8_t)((v * 255u) / 4095u); +} + +static uint32_t hat_to_dpad(uint8_t hat) { + switch (hat) { + case 0: return SCE_PAD_BUTTON_UP; + case 1: return SCE_PAD_BUTTON_UP | SCE_PAD_BUTTON_RIGHT; + case 2: return SCE_PAD_BUTTON_RIGHT; + case 3: return SCE_PAD_BUTTON_DOWN | SCE_PAD_BUTTON_RIGHT; + case 4: return SCE_PAD_BUTTON_DOWN; + case 5: return SCE_PAD_BUTTON_DOWN | SCE_PAD_BUTTON_LEFT; + case 6: return SCE_PAD_BUTTON_LEFT; + case 7: return SCE_PAD_BUTTON_UP | SCE_PAD_BUTTON_LEFT; + default: return 0; + } +} + +/* Report 0x30: full 60Hz stream after handshake + * [3]=right btns [4]=shared [5]=left btns [6-8]=lstick [9-11]=rstick */ +void nintendo_parse_0x30(const uint8_t *b, ScePadData *o) { + uint8_t br=b[3], bs=b[4], bl=b[5]; + uint16_t lx=(uint16_t)(b[6]|((b[7]&0xF)<<8)); + uint16_t ly=(uint16_t)((b[7]>>4)|((uint16_t)b[8]<<4)); + uint16_t rx=(uint16_t)(b[9]|((b[10]&0xF)<<8)); + uint16_t ry=(uint16_t)((b[10]>>4)|((uint16_t)b[11]<<4)); + uint32_t btn=0; + if(br&0x04) btn|=SCE_PAD_BUTTON_CROSS; + if(br&0x08) btn|=SCE_PAD_BUTTON_CIRCLE; + if(br&0x01) btn|=SCE_PAD_BUTTON_SQUARE; + if(br&0x02) btn|=SCE_PAD_BUTTON_TRIANGLE; + if(bl&0x40) btn|=SCE_PAD_BUTTON_L1; + if(bl&0x80) btn|=SCE_PAD_BUTTON_L2; + if(br&0x40) btn|=SCE_PAD_BUTTON_R1; + if(br&0x80) btn|=SCE_PAD_BUTTON_R2; + if(bs&0x08) btn|=SCE_PAD_BUTTON_L3; + if(bs&0x04) btn|=SCE_PAD_BUTTON_R3; + if(bs&0x02) btn|=SCE_PAD_BUTTON_OPTIONS; + if(bs&0x01) btn|=SCE_PAD_BUTTON_CREATE; + if(bs&0x10) btn|=SCE_PAD_BUTTON_PS; + if(bs&0x20) btn|=SCE_PAD_BUTTON_TOUCH_PAD; + if(bl&0x02) btn|=SCE_PAD_BUTTON_UP; + if(bl&0x01) btn|=SCE_PAD_BUTTON_DOWN; + if(bl&0x04) btn|=SCE_PAD_BUTTON_RIGHT; + if(bl&0x08) btn|=SCE_PAD_BUTTON_LEFT; + o->buttons=btn; + o->leftStick.x=ntoh_stick(lx); o->leftStick.y=ntoh_stick(ly); + o->rightStick.x=ntoh_stick(rx); o->rightStick.y=ntoh_stick(ry); + o->analogButtons.l2=(bl&0x80)?255:0; + o->analogButtons.r2=(br&0x80)?255:0; + o->connected=1; o->quat.w=1.0f; +} + +/* Report 0x3f: simple button-change report + * [1]=right btns [2]=shared [3]=HAT [4..7]=sticks [8]=L/ZL */ +void nintendo_parse_0x3f(const uint8_t *b, ScePadData *o) { + uint8_t b1=b[1],b2=b[2],hat=b[3],b8=b[8]; + uint32_t btn=0; + if(b1&0x04) btn|=SCE_PAD_BUTTON_CROSS; + if(b1&0x08) btn|=SCE_PAD_BUTTON_CIRCLE; + if(b1&0x01) btn|=SCE_PAD_BUTTON_SQUARE; + if(b1&0x02) btn|=SCE_PAD_BUTTON_TRIANGLE; + if(b8&0x40) btn|=SCE_PAD_BUTTON_L1; + if(b8&0x80) btn|=SCE_PAD_BUTTON_L2; + if(b1&0x40) btn|=SCE_PAD_BUTTON_R1; + if(b1&0x80) btn|=SCE_PAD_BUTTON_R2; + if(b2&0x08) btn|=SCE_PAD_BUTTON_L3; + if(b2&0x04) btn|=SCE_PAD_BUTTON_R3; + if(b2&0x02) btn|=SCE_PAD_BUTTON_OPTIONS; + if(b2&0x01) btn|=SCE_PAD_BUTTON_CREATE; + if(b2&0x10) btn|=SCE_PAD_BUTTON_PS; + if(b2&0x20) btn|=SCE_PAD_BUTTON_TOUCH_PAD; + btn|=hat_to_dpad(hat); + o->buttons=btn; + o->leftStick.x=b[4]; o->leftStick.y=b[5]; + o->rightStick.x=b[6]; o->rightStick.y=b[7]; + o->analogButtons.l2=(b8&0x80)?255:0; + o->analogButtons.r2=(b1&0x80)?255:0; + o->connected=1; o->quat.w=1.0f; +} + +int nintendo_send_subcmd(int fd, struct usb_fs_endpoint *eps, + uint8_t *seq, uint8_t subcmd, + const uint8_t *data, uint32_t data_len) { + static const uint8_t rumble[8] = {0x00,0x01,0x40,0x40,0x00,0x01,0x40,0x40}; + uint8_t buf[64]; + uint32_t len = 11 + data_len; + if (len > sizeof(buf)) return -1; + memset(buf, 0, sizeof(buf)); + buf[0] = 0x01; buf[1] = *seq & 0x0f; + memcpy(buf+2, rumble, 8); + buf[10] = subcmd; + if (data_len) memcpy(buf+11, data, data_len); + *seq = (uint8_t)((*seq+1) & 0x0f); + char tag[16]; snprintf(tag, sizeof(tag), "sc%02x", subcmd); + return usb_send_out(fd, &eps[1], buf, len, tag); +} + +int nintendo_handle_packet(int fd, struct usb_fs_endpoint *eps, + const uint8_t *buf, uint32_t len, + int *hs_state, uint8_t *seq, + ScePadData *out_pad) { + uint8_t rid = buf[0]; + + /* Data packets */ + if ((rid == 0x00 || rid == 0x30) && len >= 12) { + if (rid == 0x00 && buf[1] == 0) return 0; /* all-zero artifact */ + if (*hs_state != HS_STREAMING) *hs_state = HS_STREAMING; + nintendo_parse_0x30(buf, out_pad); + return 1; + } + if (rid == 0x3f && len >= 9) { + nintendo_parse_0x3f(buf, out_pad); + return 1; + } + if (rid == 0x21 && len >= 12) { + LOG("0x21 ACK subcmd=0x%02x hs=%d\n", (buf[12]&0x7f), *hs_state); + if (*hs_state == HS_STREAMING) { + nintendo_parse_0x30(buf, out_pad); + return 1; + } + return 0; + } + if (rid == 0x81) { + if (*hs_state == HS_STREAMING) { + LOG("0x81 sub=0x%02x while streaming — reconnect\n", buf[1]); + *hs_state = HS_WAIT_81_01; + return 0; + } + if (buf[1] == 0x01 && *hs_state == HS_WAIT_81_01) { + usb_send_cmd(fd, &eps[1], 0x80, 0x02); + LOG("0x81 0x01 → [80 02]\n"); + *hs_state = HS_WAIT_81_02; + } else if (buf[1] == 0x02 && *hs_state <= HS_WAIT_81_02) { + usb_send_cmd(fd, &eps[1], 0x80, 0x04); + LOG("0x81 0x02 → [80 04] + subcmds\n"); + uint8_t d[]={0x01}; + nintendo_send_subcmd(fd,eps,seq,0x40,d,1); + nintendo_send_subcmd(fd,eps,seq,0x48,d,1); + nintendo_send_subcmd(fd,eps,seq,0x30,d,1); + uint8_t d2[]={0x30}; + nintendo_send_subcmd(fd,eps,seq,0x03,d2,1); + *hs_state = HS_STREAMING; + } + return 0; + } + return 0; +} diff --git a/payload/controller_nintendo.h b/payload/controller_nintendo.h new file mode 100644 index 0000000..514a2f3 --- /dev/null +++ b/payload/controller_nintendo.h @@ -0,0 +1,27 @@ +#pragma once +#include +#include +#include +#include "gc_types.h" + +/* Handshake states */ +#define HS_WAIT_81_01 0 +#define HS_WAIT_81_02 1 +#define HS_STREAMING 2 + +void nintendo_parse_0x30(const uint8_t *b, ScePadData *o); +void nintendo_parse_0x3f(const uint8_t *b, ScePadData *o); + +/* Send Nintendo subcommand on OUT ep (eps[1]). + * seq: rolling counter, incremented per call. */ +int nintendo_send_subcmd(int fd, struct usb_fs_endpoint *eps, + uint8_t *seq, uint8_t subcmd, + const uint8_t *data, uint32_t data_len); + +/* Handle one IN packet in the Nintendo state machine. + * Returns 1 if pad was updated and should be injected, 0 otherwise. + * hs_state and seq are in/out: updated by the function. */ +int nintendo_handle_packet(int fd, struct usb_fs_endpoint *eps, + const uint8_t *buf, uint32_t len, + int *hs_state, uint8_t *seq, + ScePadData *out_pad); diff --git a/payload/controller_xbox.c b/payload/controller_xbox.c new file mode 100644 index 0000000..24f3552 --- /dev/null +++ b/payload/controller_xbox.c @@ -0,0 +1,198 @@ +/* controller_xbox.c — Xbox One S GIP controller for Ghost-Control + * All button bit positions hardware-confirmed on PS5 via live GIP probe. + * Reference: xboxSeriesSButtonBits.md + */ + +#include "controller_xbox.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 + +/* Counts GIP INPUT packets — gates Guide button injection at startup */ +static uint32_t g_input_count = 0; + +/* ── helpers ──────────────────────────────────────────────────────────── */ + +static uint8_t trig_scale(uint16_t v) { + if (v > 1023u) v = 1023u; + return (uint8_t)((v * 255u) / 1023u); +} + +#define DEADZONE 7849 + +static uint8_t stick_x(int16_t v) { + return (v > DEADZONE || v < -DEADZONE) ? (uint8_t)((v + 32768) >> 8) : 128u; +} + +static uint8_t stick_y(int16_t v) { + return (v > DEADZONE || v < -DEADZONE) ? (uint8_t)(255 - ((v + 32768) >> 8)) : 128u; +} + +/* ── input parsing ────────────────────────────────────────────────────── */ + +/* Parse GIP INPUT (cmd=0x20, 18 bytes) into ScePadData. + * Hardware-confirmed bit positions — see xboxSeriesSButtonBits.md */ +void xbox_parse_input(const uint8_t *b, ScePadData *o) { + uint8_t b4 = b[4]; + uint8_t b5 = b[5]; + uint16_t lt16 = (uint16_t)b[6] | ((uint16_t)b[7] << 8); + uint16_t rt16 = (uint16_t)b[8] | ((uint16_t)b[9] << 8); + int16_t lx = (int16_t)((uint16_t)b[10] | ((uint16_t)b[11] << 8)); + int16_t ly = (int16_t)((uint16_t)b[12] | ((uint16_t)b[13] << 8)); + int16_t rx = (int16_t)((uint16_t)b[14] | ((uint16_t)b[15] << 8)); + int16_t ry = (int16_t)((uint16_t)b[16] | ((uint16_t)b[17] << 8)); + + uint8_t lt = trig_scale(lt16); + uint8_t rt = trig_scale(rt16); + + 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->analogButtons.l2 = lt; + o->analogButtons.r2 = rt; + + uint32_t btn = 0; + + /* b[4]: system + face buttons */ + if (b4 & 0x04u) btn |= SCE_PAD_BUTTON_OPTIONS; /* Menu (≡) → Options */ + if (b4 & 0x08u) btn |= SCE_PAD_BUTTON_SHARE; /* View (⧉) → Share */ + if (b4 & 0x10u) btn |= SCE_PAD_BUTTON_CROSS; /* A → Cross */ + if (b4 & 0x20u) btn |= SCE_PAD_BUTTON_CIRCLE; /* B → Circle */ + if (b4 & 0x40u) btn |= SCE_PAD_BUTTON_SQUARE; /* X → Square */ + if (b4 & 0x80u) btn |= SCE_PAD_BUTTON_TRIANGLE; /* Y → Triangle */ + + /* b[5]: dpad + bumpers + stick clicks */ + if (b5 & 0x01u) btn |= SCE_PAD_BUTTON_UP; + if (b5 & 0x02u) btn |= SCE_PAD_BUTTON_DOWN; + if (b5 & 0x04u) btn |= SCE_PAD_BUTTON_LEFT; + if (b5 & 0x08u) btn |= SCE_PAD_BUTTON_RIGHT; + if (b5 & 0x10u) btn |= SCE_PAD_BUTTON_L1; /* LB → L1 */ + if (b5 & 0x20u) btn |= SCE_PAD_BUTTON_R1; /* RB → R1 */ + if (b5 & 0x40u) btn |= SCE_PAD_BUTTON_L3; /* LS → L3 */ + if (b5 & 0x80u) btn |= SCE_PAD_BUTTON_R3; /* RS → R3 */ + + /* Triggers: analog + digital threshold */ + if (lt > 16u) btn |= SCE_PAD_BUTTON_L2; + if (rt > 16u) btn |= SCE_PAD_BUTTON_R2; + + o->buttons = btn; + o->connected = 1; + o->quat.w = 1.0f; +} + +/* ── GIP protocol ─────────────────────────────────────────────────────── */ + +static int read_one(int fd, struct usb_fs_endpoint *eps, + uint8_t *buf, uint32_t timeout_ms) { + void *b[1] = {buf}; uint32_t l[1] = {64}; + eps[0].ppBuffer = b; eps[0].pLength = l; eps[0].nFrames = 1; + eps[0].timeout = timeout_ms; eps[0].aFrames = 0; eps[0].status = 0; + eps[0].flags = USB_FS_FLAG_SINGLE_SHORT_OK | USB_FS_FLAG_MULTI_SHORT_OK; + + struct usb_fs_start st; memset(&st, 0, sizeof(st)); st.ep_index = 0; + if (ioctl(fd, USB_FS_START, &st) != 0) return -errno; + + int polls = (int)((timeout_ms + 300) / 50) + 1; + for (int w = 0; w < polls; w++) { + struct usb_fs_complete co; memset(&co, 0, sizeof(co)); co.ep_index = 0; + if (ioctl(fd, USB_FS_COMPLETE, &co) == 0) { + if (eps[0].aFrames == 0 || l[0] == 0) return 0; + return (int)l[0]; + } + if (errno != EBUSY) { + struct usb_fs_stop sp; memset(&sp, 0, sizeof(sp)); sp.ep_index = 0; + ioctl(fd, USB_FS_STOP, &sp); + return -errno; + } + usleep(50000); + } + struct usb_fs_stop sp; memset(&sp, 0, sizeof(sp)); sp.ep_index = 0; + ioctl(fd, USB_FS_STOP, &sp); + return 0; +} + +static void send_ack(int fd, struct usb_fs_endpoint *eps, uint8_t orig_seq) { + uint8_t ack[8] = {GIP_CMD_ACK, 0x00, 0x00, 0x04, + orig_seq, GIP_CMD_ANNOUNCE, 0x00, 0x00}; + usb_send_out(fd, &eps[1], ack, 8, "ack"); +} + +void xbox_gip_handshake(int fd, struct usb_fs_endpoint *eps) { + static const uint8_t power[] = {0x05, 0x20, 0x00, 0x01, 0x00}; + uint8_t buf[64]; + int announced = 0; + + g_input_count = 0; + + /* Pass 0: wait for ANNOUNCE; pass 1: send hello to re-trigger */ + for (int pass = 0; pass < 2 && !announced; pass++) { + if (pass == 1) { + uint8_t hello[4] = {GIP_CMD_ACK, 0x00, 0x00, 0x00}; + usb_send_out(fd, &eps[1], hello, 4, "hello"); + } + /* Pass 0: 3 reads — if ANNOUNCE was already sent during probe, we miss it fast. + * Pass 1: send hello to re-trigger, wait longer. Handles both direct + hub. */ + int reads = (pass == 0) ? 3 : 60; + for (int i = 0; i < reads && !announced; i++) { + int n = read_one(fd, eps, buf, 150); + if (n > 0 && buf[0] == GIP_CMD_ANNOUNCE) { + send_ack(fd, eps, buf[1]); + announced = 1; + } else if (n > 0 && buf[0] == GIP_CMD_INPUT) { + announced = 1; + } + } + } + + usb_send_out(fd, &eps[1], power, 5, "power"); + LOG("Xbox handshake done (announced=%d)\n", announced); +} + +int xbox_handle_packet(int fd, struct usb_fs_endpoint *eps, + const uint8_t *buf, uint32_t len, + ScePadData *out_pad) { + (void)fd; (void)eps; + uint8_t cmd = buf[0]; + + /* Player input */ + if (cmd == GIP_CMD_INPUT && len >= 18) { + g_input_count++; + xbox_parse_input(buf, out_pad); + return 1; + } + + /* Guide button (Xbox logo): cmd=0x07, b[4]=0x01 pressed, 0x00 released. + * Controller auto-sends this at connect — gate behind 10 INPUT packets + * so the startup auto-send does not inject a PS button press. */ + if (cmd == 0x07) { + out_pad->connected = 1; + out_pad->quat.w = 1.0f; + out_pad->leftStick.x = 128; + out_pad->leftStick.y = 128; + out_pad->rightStick.x = 128; + out_pad->rightStick.y = 128; + if (g_input_count > 10 && len >= 5 && (buf[4] & 0x01u)) + out_pad->buttons = SCE_PAD_BUTTON_PS; + return 1; + } + + /* Re-announce during streaming */ + if (cmd == GIP_CMD_ANNOUNCE && len >= 4) { + static const uint8_t power[] = {0x05, 0x20, 0x00, 0x01, 0x00}; + send_ack(fd, eps, buf[1]); + usb_send_out(fd, &eps[1], power, 5, "repower"); + return 0; + } + + return 0; +} diff --git a/payload/controller_xbox.h b/payload/controller_xbox.h new file mode 100644 index 0000000..c3eb93b --- /dev/null +++ b/payload/controller_xbox.h @@ -0,0 +1,51 @@ +#pragma once +#include +#include +#include +#include "gc_types.h" + +/* + * Xbox One (VID=0x045E PID=0x02EA) — GIP protocol over USB + * + * Endpoints: IN=0x82 OUT=0x02 (interface 1, FS speed, maxpkt=64) + * + * GIP input report format (18 bytes total): + * [0]=0x20 cmd [1]=seq [2]=opts [3]=0x0E (payload=14) + * [4..5] = buttons uint16 LE + * [6..7] = LT uint16 (0-1023) + * [8..9] = RT uint16 (0-1023) + * [10..11]= LX int16 (center=0) + * [12..13]= LY int16 + * [14..15]= RX int16 + * [16..17]= RY int16 + * + * GIP wire button layout (from Linux xpad.c, xpad_process_packet_xboxone): + * b[4] GIP_BTN1: bit2=View(→Create) bit3=Menu(→Options) + * bit4=A(→Cross) bit5=B(→Circle) bit6=X(→Square) bit7=Y(→Triangle) + * b[5] GIP_BTN2: bit0=DUp bit1=DDn bit2=DLt bit3=DRt + * bit4=LB(→L1) bit5=RB(→R1) bit6=LS(→L3) bit7=RS(→R3) + * NOTE: GIP wire bits differ from XInput wButtons constants (XInput driver remaps). + * Guide arrives as separate GIP cmd=0x07 packet. + */ + +#define XBOX_EP_IN 0x82 +#define XBOX_EP_OUT 0x02 + +/* GIP command bytes */ +#define GIP_CMD_ACK 0x01 +#define GIP_CMD_ANNOUNCE 0x02 +#define GIP_CMD_STATUS 0x03 +#define GIP_CMD_INPUT 0x20 + +/* Parse GIP input report into ScePadData */ +void xbox_parse_input(const uint8_t *buf, ScePadData *o); + +/* GIP handshake: catch ANNOUNCE → ACK → POWER. + * Call immediately after opening IN+OUT endpoints. + * eps[0]=IN eps[1]=OUT. */ +void xbox_gip_handshake(int fd, struct usb_fs_endpoint *eps); + +/* Handle one IN packet. Returns 1 if pad updated, 0 to skip, -1 to reinit. */ +int xbox_handle_packet(int fd, struct usb_fs_endpoint *eps, + const uint8_t *buf, uint32_t len, + ScePadData *out_pad); diff --git a/payload/gc_main.c b/payload/gc_main.c new file mode 100644 index 0000000..42f9491 --- /dev/null +++ b/payload/gc_main.c @@ -0,0 +1,783 @@ +/* SPDX-License-Identifier: GPL-3.0-or-later + * Ghost-Control v5: Multi-controller support + * USB HID controllers → virtual DualSense devices on PS5 + * + * Supports up to MAX_SLOTS (4) simultaneous controllers: + * - 8BitDo / Nintendo Switch Pro (VID=057E PID=2009) + * - Xbox One S (VID=045E PID=02EA) + * + * Each detected controller gets its own VDA device + force_bind + * assignment dialog + VDI injection thread. + * Hotplug: plug in any time, disconnect any time. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#ifdef __PROSPERO__ +#include +#include +#include +#endif + +#include "shellui_pad.h" +#include "gc_types.h" +#include "usb_helpers.h" +#include "controller_nintendo.h" +#include "controller_xbox.h" + +/* ── Logging ──────────────────────────────────────────────────────────── */ +#define LOG_DIR "/data/ghostpad" +#define LOG_PATH "/data/ghostpad/gc_status.log" +#define PID_PATH "/data/ghostpad/gc_main.pid" +#define LOG_MAX 480 + +static pthread_mutex_t g_log_lock = PTHREAD_MUTEX_INITIALIZER; +static int g_log_fd = -1; + +void ghostpad_status_log_reset(void) { + pthread_mutex_lock(&g_log_lock); + if (g_log_fd >= 0) { close(g_log_fd); g_log_fd = -1; } + mkdir(LOG_DIR, 0755); + g_log_fd = open(LOG_PATH, O_WRONLY|O_CREAT|O_TRUNC, 0600); + pthread_mutex_unlock(&g_log_lock); +} + +void ghostpad_status_log(const char *fmt, ...) { + char buf[LOG_MAX]; va_list ap; + va_start(ap, fmt); vsnprintf(buf, sizeof(buf)-1, fmt, ap); va_end(ap); + buf[LOG_MAX-1] = '\0'; + klog_printf("%s", buf); + pthread_mutex_lock(&g_log_lock); + if (g_log_fd >= 0) { + size_t n = strnlen(buf, sizeof(buf)); + write(g_log_fd, buf, n); + if (n && buf[n-1] != '\n') write(g_log_fd, "\n", 1); + } + pthread_mutex_unlock(&g_log_lock); +} +#define gp_log(...) ghostpad_status_log("[GC] " __VA_ARGS__) + +/* ── SCE stubs ────────────────────────────────────────────────────────── */ +extern int32_t sceUserServiceInitialize(void *params); +extern int32_t sceUserServiceGetInitialUser(int32_t *outUserId); +extern int32_t sceUserServiceGetForegroundUser(int32_t *outUserId); +extern int32_t scePadInit(void); +extern int32_t scePadSetProcessPrivilege(int32_t privilege); +extern int32_t scePadGetHandle(int32_t userId, int32_t type, int32_t index); +extern int32_t scePadVirtualDeviceAddDevice(void *param, int32_t deviceType); +extern int32_t scePadVirtualDeviceDeleteDevice(int32_t handle); +extern int32_t scePadVirtualDeviceInsertData(int32_t handle, const void *padData); +extern int32_t sceKernelSendNotificationRequest(int unk0, void *req, size_t size, int unk1); + +#define VIRTUAL_DEVICE_TYPE_DUALSENSE 3 + +/* ── Multi-controller slots ───────────────────────────────────────────── */ +#define MAX_SLOTS 4 + +typedef struct { + volatile int32_t handle; /* VDA handle, -1 = slot free */ + volatile int vdi_ready; + volatile int usb_active; /* USB reader thread is running */ + volatile int confirmed; /* user pressed a button — assignment done */ + char dev_path[32]; /* ugen path claimed by this slot */ + uint16_t vid, pid; + volatile uint32_t inject_count; +} ctrl_slot_t; + +static ctrl_slot_t g_slots[MAX_SLOTS]; +static pthread_mutex_t g_slot_lock = PTHREAD_MUTEX_INITIALIZER; +static int32_t g_inject_uid = 0x10000000; + +/* Assignment serialization: only ONE controller may show its assignment + * dialog at a time. g_assign_slot = slot awaiting user confirmation, or -1. + * Without this, multiple dialogs stack and all bind to the same user. */ +static volatile int g_assign_slot = -1; + +/* ── klog device-ID queue ─────────────────────────────────────────────── */ +#define KLOG_QSIZE 16 +static uint64_t g_klog_q[KLOG_QSIZE]; +static int g_klog_qw = 0, g_klog_qr = 0; +static pthread_mutex_t g_klog_lock = PTHREAD_MUTEX_INITIALIZER; + +static void klog_enqueue(uint64_t id) { + pthread_mutex_lock(&g_klog_lock); + int next = (g_klog_qw + 1) % KLOG_QSIZE; + if (next != g_klog_qr) { g_klog_q[g_klog_qw] = id; g_klog_qw = next; } + pthread_mutex_unlock(&g_klog_lock); +} + +static uint64_t klog_dequeue_ms(int ms) { + for (int t = 0; t < ms; t += 100) { + pthread_mutex_lock(&g_klog_lock); + if (g_klog_qw != g_klog_qr) { + uint64_t id = g_klog_q[g_klog_qr]; + g_klog_qr = (g_klog_qr + 1) % KLOG_QSIZE; + pthread_mutex_unlock(&g_klog_lock); + return id; + } + pthread_mutex_unlock(&g_klog_lock); + usleep(100000); + } + return 0; +} + +/* ── Notification ─────────────────────────────────────────────────────── */ +typedef struct { char _unk[45]; char message[3075]; } NotifyRequest; +static 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); + sceKernelSendNotificationRequest(0, &req, sizeof(req), 0); +} + +/* ── klog capture thread ──────────────────────────────────────────────── */ +static uint64_t parse_hex_str(const char *s) { + uint64_t v = 0; + while (*s) { + char c = *s++; + if (c >= '0' && c <= '9') v = (v<<4)|(c-'0'); + else if (c >= 'a' && c <= 'f') v = (v<<4)|(c-'a'+10); + else if (c >= 'A' && c <= 'F') v = (v<<4)|(c-'A'+10); + else break; + } + return v; +} + +static void parse_klog_line(const char *line) { + if (!strstr(line, "DEVICE_ADDED")) return; + if (!strstr(line, "subType:22")) return; + if (!strstr(line, "capabilityBattery:0")) return; + const char *p = strstr(line, "DeviceId:0x"); + if (!p) p = strstr(line, "deviceId=0x"); + if (!p) return; + p += 11; + uint64_t id = parse_hex_str(p); + if (!id) return; + gp_log("klog: VDA device 0x%llx\n", (unsigned long long)id); + klog_enqueue(id); +} + +static void *klog_capture_thread(void *arg) { + (void)arg; + char buf[512], line[1024]; size_t line_len = 0; + int fd = open("/dev/klog", O_RDONLY); + if (fd < 0) { + gp_log("klog: /dev/klog errno=%d, trying TCP 127.0.0.1:3232\n", errno); + struct sockaddr_in sin; int sock = socket(AF_INET, SOCK_STREAM, 0); + if (sock < 0) return NULL; + memset(&sin,0,sizeof(sin)); sin.sin_family=AF_INET; + sin.sin_addr.s_addr=inet_addr("127.0.0.1"); sin.sin_port=htons(3232); + for (int r=0; r<10; r++) { + if (connect(sock,(struct sockaddr*)&sin,sizeof(sin))==0){fd=sock;gp_log("klog: connected\n");break;} + usleep(500000); + } + if (fd<0){close(sock);return NULL;} + } + while (1) { + ssize_t len = read(fd, buf, sizeof(buf)); + if (len < 0) { if (errno==EINTR) continue; break; } + if (len == 0) { usleep(10000); continue; } + for (ssize_t i=0; i=sizeof(line)-1){line[line_len]='\0';parse_klog_line(line);line_len=0;} + else if (c!='\r') line[line_len++]=c; + } + } + 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; } +} + +/* ── ugen detection ───────────────────────────────────────────────────── */ +#define VID_NATIVE 0x2dc8u +#define PID_NATIVE 0x310bu +#define VID_SWITCH 0x057eu +#define PID_SWITCH 0x2009u +#define VID_XBOX 0x045eu +#define PID_XBOX 0x02eau + +static const char *UGEN_PATHS[] = { + "/dev/ugen2.2","/dev/ugen2.3","/dev/ugen2.4","/dev/ugen2.5", + "/dev/ugen2.6","/dev/ugen2.7","/dev/ugen2.8","/dev/ugen2.9", + "/dev/ugen1.2","/dev/ugen0.2","/dev/ugen0.3", +}; +#define N_UGEN_PATHS ((int)(sizeof(UGEN_PATHS)/sizeof(UGEN_PATHS[0]))) + +/* Probe one ugen2.x path to identify controller type. + * Returns 1 with vid/pid set, 0 if not a known controller. + * Skips non-ugen2 paths (not on external USB bus). */ +static int probe_one_path(const char *path, uint16_t *out_vid, uint16_t *out_pid) { + if (strncmp(path, "/dev/ugen2.", 11) != 0) return 0; + + int fd = open(path, O_RDWR|O_NONBLOCK); + if (fd < 0) return 0; + + struct usb_fs_endpoint ep; + struct usb_fs_init ini; + struct usb_fs_uninit u; + memset(&ep,0,sizeof(ep)); memset(&ini,0,sizeof(ini)); + ini.pEndpoints=&ep; ini.ep_index_max=1; + if (ioctl(fd,USB_FS_INIT,&ini)!=0) { close(fd); return 0; } + + int ii=0; ioctl(fd,USB_IFACE_DRIVER_DETACH,&ii); + ii=1; ioctl(fd,USB_IFACE_DRIVER_DETACH,&ii); + ii=2; ioctl(fd,USB_IFACE_DRIVER_DETACH,&ii); + + 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); + 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; + goto done; + } + + /* Xbox One: ep=0x82, maxpkt in (0,64] */ + 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); + 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; + goto done; + } + +done: + memset(&u,0,sizeof(u)); ioctl(fd,USB_FS_UNINIT,&u); + close(fd); + return found; +} + +/* ── Create VDA and force_bind for a slot ─────────────────────────────── */ +static int32_t create_vda_for_slot(int slot) { + struct { int32_t size; int32_t userId; int32_t pad[6]; } vdp; + const int32_t SEN = (int32_t)0xDEADBEEFu; + memset(&vdp,0,sizeof(vdp)); vdp.size=sizeof(vdp); vdp.userId=1; + for(int k=0;k<6;k++) vdp.pad[k]=SEN; + + int ret = scePadVirtualDeviceAddDevice(&vdp, VIRTUAL_DEVICE_TYPE_DUALSENSE); + gp_log("slot[%d] VDA ret=0x%08x\n", slot, (uint32_t)ret); + + int32_t handle = (ret > 0) ? ret : -1; + for(int k=0;k<6;k++){ + if(vdp.pad[k]!=SEN && vdp.pad[k]>0){if(handle<0)handle=vdp.pad[k];break;} + } + + uint64_t dev_id = klog_dequeue_ms(10000); + if (dev_id) { + handle = (int32_t)(dev_id & 0xffffffffu); + int br = shellui_pad_force_bind(dev_id, g_inject_uid); + gp_log("slot[%d] force_bind(0x%llx, 0x%08x) ret=%d\n", + slot, (unsigned long long)dev_id, (uint32_t)g_inject_uid, br); + } else if (handle >= 0) { + gp_log("slot[%d] klog timeout — using direct handle %d\n", slot, handle); + } else { + gp_log("slot[%d] GetHandle scan...\n", slot); + static const int32_t uids[]={1,0x10000000,(int32_t)0xffffffff}; + for(int ui=0;ui<3&&handle<0;ui++) + for(int idx=0;idx<8&&handle<0;idx++){ + handle=scePadGetHandle(uids[ui],3,idx); + if(handle>=0) gp_log("slot[%d] GetHandle uid=0x%08x idx=%d h=%d\n", + slot,(uint32_t)uids[ui],idx,handle); + } + } + if (handle>=0) + gp_log("slot[%d] VDI handle=0x%x ready\n", slot, (uint32_t)handle); + else + gp_log("slot[%d] ERROR: no VDA handle\n", slot); + return handle; +} + +/* ── USB HID thread ───────────────────────────────────────────────────── */ +/* Single-session: receives slot+path+vid+pid, runs until disconnect, then exits. + * Manager thread handles re-detection after exit. */ + +typedef struct { + int slot; + char dev_path[32]; + uint16_t vid, pid; +} usb_thread_arg_t; + +static void *usb_hid_thread(void *arg) { + usb_thread_arg_t *targ = (usb_thread_arg_t *)arg; + int slot = targ->slot; + char dev_path[32]; memcpy(dev_path, targ->dev_path, sizeof(dev_path)); + uint16_t vid = targ->vid, pid = targ->pid; + free(targ); + + struct usb_fs_endpoint eps[2]; + struct usb_fs_init init; + struct usb_fs_open fs_open; + struct usb_fs_start start; + struct usb_fs_complete complete; + struct usb_fs_stop stop; + struct usb_fs_close fs_close; + struct usb_fs_uninit uninit; + uint8_t buf[64]; + void *buffers[1]; uint32_t lengths[1]; + int fd = -1, out_opened = 0; + int usb_ready_notified = 0; + + gp_log("slot[%d] USB thread: %s VID=0x%04x PID=0x%04x\n", + slot, dev_path, vid, pid); + + /* ── Xbox One: single-pass ─────────────────────────────────────────── */ + if (pid == PID_XBOX) { + fd = open(dev_path, O_RDWR); + if (fd < 0) { gp_log("slot[%d] Xbox open fail errno=%d\n", slot, errno); goto exit_slot; } + + { int ii; for(ii=0;ii<4;ii++){int i2=ii; ioctl(fd,USB_IFACE_DRIVER_DETACH,&i2);} } + usleep(120000); /* hub settle: give USB hub time to propagate detach */ + 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] Xbox FS_INIT fail errno=%d\n",slot,errno); + close(fd); goto exit_slot; + } + + memset(&fs_open,0,sizeof(fs_open)); + fs_open.ep_index=0; fs_open.ep_no=XBOX_EP_IN; + fs_open.max_bufsize=64; fs_open.max_frames=1; + if (ioctl(fd,USB_FS_OPEN,&fs_open)!=0){ + gp_log("slot[%d] Xbox IN fail errno=%d\n",slot,errno); + goto uninit_exit; + } + gp_log("slot[%d] Xbox IN ep=0x%02x ok maxpkt=%u\n", + slot, XBOX_EP_IN, (unsigned)fs_open.max_packet_length); + + buffers[0]=buf; lengths[0]=64; + eps[0].ppBuffer=buffers; eps[0].pLength=lengths; eps[0].nFrames=1; + eps[0].timeout=50; eps[0].flags=USB_FS_FLAG_SINGLE_SHORT_OK|USB_FS_FLAG_MULTI_SHORT_OK; + + memset(&fs_open,0,sizeof(fs_open)); + fs_open.ep_index=1; fs_open.ep_no=XBOX_EP_OUT; + 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] Xbox OUT ep=0x%02x opened=%d\n", slot, XBOX_EP_OUT, out_opened); + + xbox_gip_handshake(fd, eps); + 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; } + + memset(eps,0,sizeof(eps)); memset(&init,0,sizeof(init)); + init.pEndpoints=eps; init.ep_index_max=1; + if (ioctl(fd,USB_FS_INIT,&init)!=0){ + gp_log("slot[%d] Nintendo FS_INIT p1 fail\n",slot); close(fd); goto exit_slot; + } + { int i0=0,i1=1; ioctl(fd,USB_IFACE_DRIVER_DETACH,&i0); ioctl(fd,USB_IFACE_DRIVER_DETACH,&i1); } + memset(&fs_open,0,sizeof(fs_open)); + fs_open.ep_index=0; fs_open.ep_no=0x81; fs_open.max_bufsize=64; fs_open.max_frames=1; + if (ioctl(fd,USB_FS_OPEN,&fs_open)!=0){ + gp_log("slot[%d] Nintendo IN p1 fail errno=%d\n",slot,errno); goto uninit_exit; + } + gp_log("slot[%d] Nintendo p1 IN ok maxpkt=%u\n",slot,(unsigned)fs_open.max_packet_length); + memset(&uninit,0,sizeof(uninit)); ioctl(fd,USB_FS_UNINIT,&uninit); + close(fd); fd=-1; + + /* Pass 2: retry DETACH+OPEN up to 5 times to beat usb_hid0 re-attach + * (real Switch Pro is claimed by PS5 native HID driver after probe releases it) */ + { int detach_try; + for (detach_try = 0; detach_try < 5; detach_try++) { + fd = open(dev_path, O_RDWR); + if (fd < 0) { gp_log("slot[%d] reopen fail attempt %d\n",slot,detach_try); goto exit_slot; } + { int i0=0,i1=1,i2=2; + ioctl(fd,USB_IFACE_DRIVER_DETACH,&i0); + ioctl(fd,USB_IFACE_DRIVER_DETACH,&i1); + ioctl(fd,USB_IFACE_DRIVER_DETACH,&i2); } + memset(eps,0,sizeof(eps)); memset(&init,0,sizeof(init)); + init.pEndpoints=eps; init.ep_index_max=2; + if (ioctl(fd,USB_FS_INIT,&init)!=0){ + close(fd); fd=-1; usleep(50000); continue; + } + memset(&fs_open,0,sizeof(fs_open)); + fs_open.ep_index=0; fs_open.ep_no=0x81; fs_open.max_bufsize=64; fs_open.max_frames=1; + if (ioctl(fd,USB_FS_OPEN,&fs_open)==0) break; /* claimed it */ + memset(&uninit,0,sizeof(uninit)); ioctl(fd,USB_FS_UNINIT,&uninit); + close(fd); fd=-1; + gp_log("slot[%d] Nintendo p2 OPEN retry %d errno=%d\n",slot,detach_try,errno); + usleep(50000); + } + if (fd < 0) { gp_log("slot[%d] Nintendo p2 give up\n",slot); goto exit_slot; } + } + gp_log("slot[%d] Nintendo p2 IN ok maxpkt=%u\n",slot,(unsigned)fs_open.max_packet_length); + if (fs_open.max_packet_length != 64){ gp_log("slot[%d] wrong maxpkt, reinit\n",slot); goto reinit; } + + buffers[0]=buf; lengths[0]=64; + eps[0].ppBuffer=buffers; eps[0].pLength=lengths; eps[0].nFrames=1; + eps[0].timeout=200; eps[0].flags=USB_FS_FLAG_SINGLE_SHORT_OK|USB_FS_FLAG_MULTI_SHORT_OK; + + /* 8BitDo uses ep=0x02; real Nintendo Switch Pro Controller uses ep=0x01 */ + 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; + if (out_opened) gp_log("slot[%d] Nintendo OUT ep=0x01 (real Switch Pro)\n", slot); + } + gp_log("slot[%d] Nintendo OUT opened=%d\n", slot, out_opened); + if (out_opened) { + usb_send_cmd(fd,&eps[1],0x80,0x02); usleep(30000); + usb_send_cmd(fd,&eps[1],0x80,0x04); usleep(50000); + gp_log("slot[%d] Nintendo [80 02]+[80 04] sent\n", slot); + } + +main_loop: ; + int hs_state = (pid==PID_XBOX) ? HS_STREAMING : HS_WAIT_81_01; + uint8_t nintendo_seq = 1; + + while (1) { + memset(buf,0,64); + buffers[0]=buf; lengths[0]=64; + eps[0].ppBuffer=buffers; eps[0].pLength=lengths; + eps[0].aFrames=0; eps[0].status=0; + + memset(&start,0,sizeof(start)); start.ep_index=0; + if (ioctl(fd,USB_FS_START,&start)!=0) { + if (errno==EBUSY){ + memset(&stop,0,sizeof(stop)); stop.ep_index=0; ioctl(fd,USB_FS_STOP,&stop); + usleep(5000); + } else if (errno==ENXIO||errno==ENOTTY){ + gp_log("slot[%d] START errno=%d — device gone\n",slot,errno); goto reinit; + } else { + gp_log("slot[%d] START fatal errno=%d\n",slot,errno); goto reinit; + } + continue; + } + + int ok=0, cerr=0, cw=0; + for(cw=0;cw<60;cw++){ + memset(&complete,0,sizeof(complete)); complete.ep_index=0; + 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(!ok){ + memset(&stop,0,sizeof(stop)); stop.ep_index=0; ioctl(fd,USB_FS_STOP,&stop); + continue; + } + if(lengths[0]<1) continue; + + uint32_t len = lengths[0]; + + ScePadData pad; memset(&pad,0,sizeof(pad)); pad.quat.w=1.0f; + int injected = 0; + + if (pid == PID_XBOX) { + injected = xbox_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; + } + /* 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) { + g_slots[slot].confirmed = 1; + if (g_assign_slot == slot) g_assign_slot = -1; + gp_log("slot[%d] assignment confirmed (button press)\n", slot); + } + inject_pad(slot, &pad); + } + } + +reinit: + if (usb_ready_notified) { notify("Ghostcontrol: slot[%d] controller disconnected", slot); usb_ready_notified=0; } + memset(&stop,0,sizeof(stop)); stop.ep_index=0; ioctl(fd,USB_FS_STOP,&stop); + if (out_opened) { + memset(&fs_close,0,sizeof(fs_close)); fs_close.ep_index=1; ioctl(fd,USB_FS_CLOSE,&fs_close); + out_opened=0; + } + memset(&fs_close,0,sizeof(fs_close)); fs_close.ep_index=0; ioctl(fd,USB_FS_CLOSE,&fs_close); +uninit_exit: + memset(&uninit,0,sizeof(uninit)); ioctl(fd,USB_FS_UNINIT,&uninit); + close(fd); fd=-1; + +exit_slot: + gp_log("slot[%d] USB thread exiting — freeing slot\n", slot); + scePadVirtualDeviceDeleteDevice(g_slots[slot].handle); + pthread_mutex_lock(&g_slot_lock); + g_slots[slot].handle = -1; + g_slots[slot].vdi_ready = 0; + g_slots[slot].usb_active= 0; + g_slots[slot].dev_path[0] = '\0'; + pthread_mutex_unlock(&g_slot_lock); + return NULL; +} + +/* ── Controller manager thread ────────────────────────────────────────── */ +static void *controller_manager_thread(void *arg) { + (void)arg; + int scan = 0; + gp_log("Manager thread started (MAX_SLOTS=%d)\n", MAX_SLOTS); + + while (1) { + for (int i = 0; i < N_UGEN_PATHS; i++) { + const char *path = UGEN_PATHS[i]; + + /* Skip non-external-bus paths */ + if (strncmp(path, "/dev/ugen2.", 11) != 0) continue; + + /* Serialize assignment: if a controller is still awaiting the user's + * button press to confirm its dialog, do not start another one. */ + if (g_assign_slot >= 0) break; + + /* Skip if already claimed by an active slot */ + int busy = 0; + pthread_mutex_lock(&g_slot_lock); + for (int s = 0; s < MAX_SLOTS; s++) { + if (g_slots[s].usb_active && strcmp(g_slots[s].dev_path, path) == 0) { + busy = 1; break; + } + } + pthread_mutex_unlock(&g_slot_lock); + if (busy) continue; + + /* Try to identify controller */ + uint16_t vid=0, pid=0; + if (!probe_one_path(path, &vid, &pid)) continue; + + /* Find free slot */ + int slot = -1; + pthread_mutex_lock(&g_slot_lock); + for (int s = 0; s < MAX_SLOTS; s++) { + if (g_slots[s].handle < 0 && !g_slots[s].usb_active) { slot=s; break; } + } + pthread_mutex_unlock(&g_slot_lock); + + if (slot < 0) { + if ((scan % 5) == 0) gp_log("manager: all %d slots full\n", MAX_SLOTS); + continue; + } + + 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"; + + gp_log("manager: %s at %s → slot[%d]\n", name, path, slot); + notify("Ghostcontrol: %s detected — assign user on screen", name); + + /* Claim the slot path before VDA so manager skips it if we retry. + * Set the assignment gate — released when user confirms (button press). */ + pthread_mutex_lock(&g_slot_lock); + strncpy(g_slots[slot].dev_path, path, sizeof(g_slots[slot].dev_path)-1); + g_slots[slot].usb_active = 1; /* tentatively claimed */ + g_slots[slot].confirmed = 0; + g_slots[slot].vid = vid; + g_slots[slot].pid = pid; + pthread_mutex_unlock(&g_slot_lock); + g_assign_slot = slot; + + /* Create VDA and force_bind (shows PS5 assignment dialog) */ + int32_t handle = create_vda_for_slot(slot); + if (handle < 0) { + gp_log("manager: slot[%d] VDA failed — releasing\n", slot); + pthread_mutex_lock(&g_slot_lock); + g_slots[slot].usb_active = 0; + g_slots[slot].dev_path[0] = '\0'; + g_slots[slot].handle = -1; + pthread_mutex_unlock(&g_slot_lock); + g_assign_slot = -1; + continue; + } + + pthread_mutex_lock(&g_slot_lock); + g_slots[slot].handle = handle; + g_slots[slot].vdi_ready = 1; + g_slots[slot].inject_count = 0; + pthread_mutex_unlock(&g_slot_lock); + + /* Launch USB reader thread */ + usb_thread_arg_t *targ = malloc(sizeof(*targ)); + if (!targ) { + gp_log("manager: malloc fail for slot[%d]\n", slot); + scePadVirtualDeviceDeleteDevice(handle); + pthread_mutex_lock(&g_slot_lock); + g_slots[slot].handle=-1; g_slots[slot].vdi_ready=0; + g_slots[slot].usb_active=0; g_slots[slot].dev_path[0]='\0'; + pthread_mutex_unlock(&g_slot_lock); + g_assign_slot = -1; + continue; + } + targ->slot = slot; + strncpy(targ->dev_path, path, sizeof(targ->dev_path)-1); + targ->vid=vid; targ->pid=pid; + + pthread_t tid; + if (pthread_create(&tid, NULL, usb_hid_thread, targ) != 0) { + gp_log("manager: pthread_create fail slot[%d]\n", slot); + free(targ); + scePadVirtualDeviceDeleteDevice(handle); + pthread_mutex_lock(&g_slot_lock); + g_slots[slot].handle=-1; g_slots[slot].vdi_ready=0; + g_slots[slot].usb_active=0; g_slots[slot].dev_path[0]='\0'; + pthread_mutex_unlock(&g_slot_lock); + g_assign_slot = -1; + } else { + pthread_detach(tid); + gp_log("manager: slot[%d] USB thread started handle=0x%x\n", + slot, (uint32_t)handle); + notify("Ghostcontrol: slot[%d] ready — press a button to assign", slot); + } + /* One controller per scan pass — assignment gate blocks the rest + * until the user confirms this one with a button press. */ + break; + } + + /* Assignment timeout: if the user never presses a button, release the + * gate after ~30s so the queue does not stall forever. */ + static int assign_wait = 0; + if (g_assign_slot >= 0) { + if (++assign_wait > 15) { /* 15 * 2s = 30s */ + gp_log("manager: assignment timeout slot[%d] — releasing gate\n", g_assign_slot); + g_assign_slot = -1; + assign_wait = 0; + } + } else { + assign_wait = 0; + } + + scan++; + if ((scan % 5) == 0) { + /* Log active slots every 10s */ + int active = 0; + for (int s = 0; s < MAX_SLOTS; s++) + if (g_slots[s].usb_active) active++; + if (active == 0 && (scan % 10) == 0) + gp_log("manager: scan #%d — no controllers\n", scan); + } + usleep(2000000); + } + return NULL; +} + +/* ── Credential elevation ─────────────────────────────────────────────── */ +static void elevate_credentials(void) { + pid_t p = getpid(); + uint8_t caps[16]; memset(caps,0xff,sizeof(caps)); + kernel_set_ucred_authid(p, 0x3800000000010003l); + kernel_set_ucred_caps(p, caps); +} + +/* ── main ─────────────────────────────────────────────────────────────── */ +int main(void) { + int32_t userId=-1, fgUser=-1; int ret; + + ghostpad_status_log_reset(); + gp_log("Ghost-Control v5 starting — %d slots\n", MAX_SLOTS); + notify("Ghostcontrol by StonedModder — plug in controllers now"); + + /* Kill previous instance */ + { int pfd=open(PID_PATH,O_RDONLY); + if(pfd>=0){char pb[16]={0};read(pfd,pb,15);close(pfd); + pid_t old=(pid_t)atoi(pb); + if(old>0&&old!=getpid()){gp_log("Killing prev pid=%d\n",old);kill(old,SIGTERM);usleep(600000);} + } + int pfd2=open(PID_PATH,O_WRONLY|O_CREAT|O_TRUNC,0600); + if(pfd2>=0){char pb[16];snprintf(pb,sizeof(pb),"%d",getpid());write(pfd2,pb,strlen(pb));close(pfd2);} + } + + /* Init slots */ + for (int s = 0; s < MAX_SLOTS; s++) { + g_slots[s].handle = -1; + g_slots[s].vdi_ready = 0; + g_slots[s].usb_active = 0; + g_slots[s].confirmed = 0; + g_slots[s].dev_path[0]= '\0'; + } + g_assign_slot = -1; + + sceUserServiceInitialize(NULL); + sceUserServiceGetInitialUser(&userId); + sceUserServiceGetForegroundUser(&fgUser); + gp_log("userId=0x%08x fgUser=0x%08x\n", (uint32_t)userId, (uint32_t)fgUser); + g_inject_uid = (fgUser > 0) ? fgUser : userId; + if ((uint32_t)userId<0x10000000u||(uint32_t)userId>0x1000000Fu) userId=0x10000000; + gp_log("inject_uid=0x%08x\n", (uint32_t)g_inject_uid); + + elevate_credentials(); + + ret=scePadInit(); gp_log("scePadInit: 0x%08x\n", ret); + ret=scePadSetProcessPrivilege(1); gp_log("scePadSetProcessPrivilege: 0x%08x\n", ret); + + /* Clean up any orphaned VDA devices */ + for (int dh=0; dh<64; dh++) { + if (scePadVirtualDeviceDeleteDevice(dh)==0) gp_log("deleteDevice(%d)\n", dh); + } + + /* Start klog capture thread first — must be running before any VDA call */ + pthread_t klog_tid; + if (pthread_create(&klog_tid, NULL, klog_capture_thread, NULL)==0) { + pthread_detach(klog_tid); + gp_log("klog thread started\n"); + } + usleep(300000); /* let klog thread connect before first VDA */ + + /* Start controller manager — handles all detection, VDA creation, USB threads */ + pthread_t mgr_tid; + if (pthread_create(&mgr_tid, NULL, controller_manager_thread, NULL)==0) { + pthread_detach(mgr_tid); + gp_log("Manager thread started\n"); + } + + /* Keep-alive */ + uint32_t tick = 0; + while (1) { + usleep(1000000); + tick++; + if (tick % 10 == 0) { + int active = 0; + for (int s = 0; s < MAX_SLOTS; s++) if (g_slots[s].usb_active) active++; + gp_log("alive tick=%u active_slots=%d\n", tick, active); + } + } + return 0; +} diff --git a/payload/gc_types.h b/payload/gc_types.h new file mode 100644 index 0000000..739080e --- /dev/null +++ b/payload/gc_types.h @@ -0,0 +1,45 @@ +#pragma once +#include + +/* SCE pad button constants */ +#define SCE_PAD_BUTTON_L3 0x00000002u +#define SCE_PAD_BUTTON_R3 0x00000004u +#define SCE_PAD_BUTTON_OPTIONS 0x00000008u +#define SCE_PAD_BUTTON_UP 0x00000010u +#define SCE_PAD_BUTTON_RIGHT 0x00000020u +#define SCE_PAD_BUTTON_DOWN 0x00000040u +#define SCE_PAD_BUTTON_LEFT 0x00000080u +#define SCE_PAD_BUTTON_L2 0x00000100u +#define SCE_PAD_BUTTON_R2 0x00000200u +#define SCE_PAD_BUTTON_L1 0x00000400u +#define SCE_PAD_BUTTON_R1 0x00000800u +#define SCE_PAD_BUTTON_TRIANGLE 0x00001000u +#define SCE_PAD_BUTTON_CIRCLE 0x00002000u +#define SCE_PAD_BUTTON_CROSS 0x00004000u +#define SCE_PAD_BUTTON_SQUARE 0x00008000u +#define SCE_PAD_BUTTON_CREATE 0x00010000u /* = PS button — triggers home screen via VDI */ +#define SCE_PAD_BUTTON_PS 0x00010000u +#define SCE_PAD_BUTTON_SHARE 0x00000001u /* DualSense Create/Share (DS4 SELECT/SHARE bit) */ +#define SCE_PAD_BUTTON_TOUCH_PAD 0x00100000u + +typedef struct { uint16_t x; uint16_t y; uint8_t finger; uint8_t pad[3]; } ScePadTouch; +typedef struct { + uint8_t fingers; uint8_t pad1[3]; uint32_t pad2; ScePadTouch touch[2]; +} ScePadTouchData; +typedef struct { + uint32_t buttons; + struct { uint8_t x; uint8_t y; } leftStick; + struct { uint8_t x; uint8_t y; } rightStick; + struct { uint8_t l2; uint8_t r2; } analogButtons; + uint16_t padding; + struct { float x, y, z, w; } quat; + struct { float x, y, z; } vel; + struct { float x, y, z; } accel; + ScePadTouchData touchData; + uint8_t connected; + uint8_t _align[3]; + uint64_t timestamp; + uint8_t ext[16]; + uint8_t count; + uint8_t unknown[15]; +} ScePadData; diff --git a/shellui_pad.c b/payload/shellui_pad.c similarity index 100% rename from shellui_pad.c rename to payload/shellui_pad.c diff --git a/shellui_pad.h b/payload/shellui_pad.h similarity index 100% rename from shellui_pad.h rename to payload/shellui_pad.h diff --git a/payload/usb_helpers.c b/payload/usb_helpers.c new file mode 100644 index 0000000..79bdd83 --- /dev/null +++ b/payload/usb_helpers.c @@ -0,0 +1,56 @@ +#include "usb_helpers.h" +#include +#include +#include +#include +#include + +#ifdef __PROSPERO__ +#include +#define LOG(...) klog_printf("[GC] " __VA_ARGS__) +#else +#define LOG(...) fprintf(stderr, __VA_ARGS__) +#endif + +int usb_send_out(int fd, struct usb_fs_endpoint *ep, + const uint8_t *data, uint32_t len, const char *tag) { + void *bufs[1] = { (void *)data }; + uint32_t lens[1] = { len }; + struct usb_fs_start start; + struct usb_fs_complete complete; + + ep->ppBuffer = bufs; + ep->pLength = lens; + ep->nFrames = 1; + ep->timeout = 150; + ep->flags = 0; + ep->aFrames = 0; + ep->status = 0; + + memset(&start, 0, sizeof(start)); + start.ep_index = 1; + if (ioctl(fd, USB_FS_START, &start) != 0) { + LOG("OUT %s START fail errno=%d\n", tag, errno); + return -errno; + } + for (int w = 0; w < 20; w++) { + memset(&complete, 0, sizeof(complete)); + complete.ep_index = 1; + if (ioctl(fd, USB_FS_COMPLETE, &complete) == 0) + return 0; + if (errno != EBUSY) { + LOG("OUT %s COMPLETE fail errno=%d\n", tag, errno); + return -errno; + } + usleep(50000); + } + LOG("OUT %s timeout\n", tag); + return -EBUSY; +} + +int usb_send_cmd(int fd, struct usb_fs_endpoint *ep, uint8_t a, uint8_t b) { + uint8_t buf[2] = { a, b }; + char tag[8]; + snprintf(tag, sizeof(tag), "%02x%02x", a, b); + return usb_send_out(fd, ep, buf, 2, tag); +} diff --git a/payload/usb_helpers.h b/payload/usb_helpers.h new file mode 100644 index 0000000..fda33d2 --- /dev/null +++ b/payload/usb_helpers.h @@ -0,0 +1,8 @@ +#pragma once +#include +#include +#include + +int usb_send_out(int fd, struct usb_fs_endpoint *ep, + const uint8_t *data, uint32_t len, const char *tag); +int usb_send_cmd(int fd, struct usb_fs_endpoint *ep, uint8_t a, uint8_t b); diff --git a/xboxSeriesSButtonBits.md b/xboxSeriesSButtonBits.md new file mode 100644 index 0000000..b5480ed --- /dev/null +++ b/xboxSeriesSButtonBits.md @@ -0,0 +1,67 @@ +# Xbox One S / Series S GIP Wire Button Bits +**VID=0x045E PID=0x02EA — hardware-confirmed on PS5 via live GIP probe** + +## GIP INPUT packet (cmd=0x20) layout +``` +b[0]=0x20 b[1]=seq b[2]=opts b[3]=0x0E (payload len=14) +b[4] = button byte 1 (digital buttons) +b[5] = button byte 2 (dpad + bumpers + sticks) +b[6..7] = LT uint16 LE 0-1023 → scale to 0-255 +b[8..9] = RT uint16 LE 0-1023 → scale to 0-255 +b[10..11]= LX int16 LE center≈0 +b[12..13]= LY int16 LE center≈0 +b[14..15]= RX int16 LE center≈0 +b[16..17]= RY int16 LE center≈0 +``` + +## b[4] — face buttons + system buttons +| Bit | Mask | Physical button | PS5 target | +|------|------|-----------------|-------------------| +| bit2 | 0x04 | Menu (≡) | OPTIONS (0x0008) | +| bit3 | 0x08 | View (⧉) | SHARE (0x20000)| +| bit4 | 0x10 | A | CROSS (0x4000) | +| bit5 | 0x20 | B | CIRCLE (0x2000) | +| bit6 | 0x40 | X | SQUARE (0x8000) | +| bit7 | 0x80 | Y | TRIANGLE (0x1000) | + +## b[5] — dpad + bumpers + stick clicks +| Bit | Mask | Physical button | PS5 target | +|------|------|-----------------|----------------| +| bit0 | 0x01 | DPad Up | UP (0x0010) | +| bit1 | 0x02 | DPad Down | DOWN (0x0040) | +| bit2 | 0x04 | DPad Left | LEFT (0x0080) | +| bit3 | 0x08 | DPad Right | RIGHT (0x0020) | +| bit4 | 0x10 | LB | L1 (0x0400) | +| bit5 | 0x20 | RB | R1 (0x0800) | +| bit6 | 0x40 | L3 (left click) | L3 (0x0002) | +| bit7 | 0x80 | R3 (right click)| R3 (0x0004) | + +## Analog +| Field | Range | PS5 field | +|-------------|--------|---------------------| +| LT (b[6..7])| 0-1023 | analogButtons.l2 (0-255), digital L2 bit if >16 | +| RT (b[8..9])| 0-1023 | analogButtons.r2 (0-255), digital R2 bit if >16 | +| LX (b[10..11])| int16 center≈0 | leftStick.x = (lx+32768)>>8, deadzone ±7849 | +| LY (b[12..13])| int16 center≈0 | leftStick.y = 255-((ly+32768)>>8), deadzone ±7849 | +| RX (b[14..15])| int16 center≈0 | rightStick.x = (rx+32768)>>8, deadzone ±7849 | +| RY (b[16..17])| int16 center≈0 | rightStick.y = 255-((ry+32768)>>8), deadzone ±7849 | + +## Guide button (Xbox logo) — HARDWARE CONFIRMED +``` +GIP cmd=0x07 len=6 +b[4]=0x01 = pressed +b[4]=0x00 = released +b[5]=0x5b (constant — controller status byte, ignore) +``` +Maps to SCE_PAD_BUTTON_PS (0x10000). +Current code: `if (cmd == 0x07 && buf[4] & 0x01u)` — correct. + +## Notes +- xpad.c (Linux) labels bit2=View, bit3=Menu — WRONG for this hardware. + Confirmed physically: bit2=Menu(≡), bit3=View(⧉). +- SCE_PAD_BUTTON_CREATE = SCE_PAD_BUTTON_PS = 0x10000 — injecting this + triggers PS home screen. View maps to SHARE (0x20000) instead. +- GIP wire bits differ completely from XInput wButtons API constants. + XInput is a Windows abstraction layer; these are raw USB GIP bytes. +- Idle stick drift observed: lx≈-1863, ly≈-149, rx≈2007, ry≈-771. + Deadzone of ±7849 covers this entirely.