{"id":27182922,"url":"https://github.com/calebtt/xmaplib","last_synced_at":"2025-04-09T15:20:04.923Z","repository":{"id":37560464,"uuid":"439584072","full_name":"calebtt/XMapLib","owner":"calebtt","description":"A closer to the metal library for Xbox controller to keyboard and mouse input.","archived":false,"fork":false,"pushed_at":"2023-06-28T12:15:25.000Z","size":810,"stargazers_count":6,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-09T15:19:56.811Z","etag":null,"topics":["controllers","cpp","gamepad","input-simulation","joystick","mouse","mouse-movement","winapi","xbox"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/calebtt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-12-18T10:15:05.000Z","updated_at":"2024-08-30T02:19:53.000Z","dependencies_parsed_at":"2023-01-31T06:01:37.518Z","dependency_job_id":null,"html_url":"https://github.com/calebtt/XMapLib","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calebtt%2FXMapLib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calebtt%2FXMapLib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calebtt%2FXMapLib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/calebtt%2FXMapLib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/calebtt","download_url":"https://codeload.github.com/calebtt/XMapLib/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248055252,"owners_count":21040157,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["controllers","cpp","gamepad","input-simulation","joystick","mouse","mouse-movement","winapi","xbox"],"created_at":"2025-04-09T15:20:04.404Z","updated_at":"2025-04-09T15:20:04.917Z","avatar_url":"https://github.com/calebtt.png","language":"C++","readme":"# XMapLib\n[![MSBuild](https://github.com/calebtt/XMapLib/actions/workflows/msbuild.yml/badge.svg)](https://github.com/calebtt/XMapLib/actions/workflows/msbuild.yml)\n\u003cp\u003e\u003ci\u003eA closer to the metal library for Xbox controller to keyboard and mouse input simulation on Windows\u003c/i\u003e\u003c/p\u003e\n\u003cb\u003e\u003cp\u003eCurrent Features\u003c/b\u003e\n\u003cul\u003e\n  \u003cli\u003eMapping of controller input to keyboard and mouse input on Windows.\u003c/li\u003e\n  \u003cli\u003eGUI for changing key bindings\u003c/li\u003e\n  \u003cli\u003eList of key binding presets to choose from\u003c/li\u003e\n  \u003cli\u003eEditable list of key bindings\u003c/li\u003e\n  \u003cli\u003eAdjustable mouse sensitivity\u003c/li\u003e\n  \u003cli\u003eToggleable key repeat behavior\u003c/li\u003e\n \u003c/ul\u003e\n \u003cb\u003e\u003cp\u003eRoadmap\u003c/b\u003e\n \u003cul\u003e\n  \u003cli\u003eLower CPU usage\u003c/li\u003e\n  \u003cli\u003ePortable input simulation thread priorities\u003c/li\u003e\n  \u003cli\u003eDep. injected timestamp retrieval, system calls for high res. clock are heavy\u003c/li\u003e\n  \u003cli\u003eMake use of polar coordinates instead of scaling cartesian coordinates (PolarCode repo)\u003c/li\u003e\n \u003c/ul\u003e\n \u003cb\u003e\u003cp\u003ePossible Ideas\u003c/b\u003e\n \u003cul\u003e\n  \u003cli\u003eIntegrate my PolarCode repo code\u003c/li\u003e\n  \u003cli\u003ePortable everything\u003c/li\u003e\n  \u003cli\u003eRun as a system service instead of on-demand app\u003c/li\u003e\n  \u003cli\u003eLoad/Save config files and share them\u003c/li\u003e\n \u003c/ul\u003e\n \n\u003cp\u003e\u003cb\u003e\u003ci\u003eXMapLibSharp is a C# .NET GUI project using the C++ project code through a DLL. With this approach,\nthe project has access to the entire .NET framework for GUI work while keeping the native performance and power of the C++ XMapLib project code.\u003c/i\u003e\u003c/b\u003e\n  \u003cp\u003eThe project utilizes \n\u003cul\u003e\n  \u003cli\u003e.NET multi-threading\u003c/li\u003e \n  \u003cli\u003eevents\u003c/li\u003e \n  \u003cli\u003eprogrammatic UI element creation\u003c/li\u003e \n  \u003cli\u003ea producer/consumer design pattern.\u003c/li\u003e\n  \u003cli\u003emanaged/native interop via custom C++ DLL\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ca href=\"https://ibb.co/pymkwT7\"\u003e\u003cimg src=\"https://i.ibb.co/M6XJSHv/XMap-Lib-gui2.png\" alt=\"XMap-Lib-gui2\" border=\"0\"\u003e\u003c/a\u003e\n\u003ca href=\"https://ibb.co/tsvcZ2S\"\u003e\u003cimg src=\"https://i.ibb.co/FwyJsY9/XMap-Lib-gui3.png\" alt=\"XMap-Lib-gui3\" border=\"0\"\u003e\u003c/a\u003e\n  \n  \u003cb\u003e\u003cp\u003eA high level code diagram of the XMapLib project code (native C++)\u003c/b\u003e\n  \u003ca href=\"https://ibb.co/kBvqrRX\"\u003e\u003cimg src=\"https://i.ibb.co/g9htX5J/XMap-Lib-uml3.png\" alt=\"XMapLib-uml\" border=\"0\"\u003e\u003c/a\u003e\n  \u003cp\u003eThe project utilizes\n  \u003cul\u003e\n    \u003cli\u003eC++ templates\u003c/li\u003e\n    \u003cli\u003eTemplate SFINAE\u003c/li\u003e\n    \u003cli\u003econstexpr\u003c/li\u003e\n    \u003cli\u003eunit testing with Microsoft \u003ca href=\"https://docs.microsoft.com/en-us/visualstudio/test/how-to-use-microsoft-test-framework-for-cpp?view=vs-2022\"\u003eCppUnitTestingFramework\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003emulti-threading, many threads running concurrently and interacting\u003c/li\u003e \n    \u003cli\u003econcurrency synchronization objects, like mutexes and RAII scoped locks\u003c/li\u003e\n    \u003cli\u003eC++ standard atomics\u003c/li\u003e\n    \u003cli\u003elambdas, and passing lambdas as arguments\u003c/li\u003e\n    \u003cli\u003eusage of several Windows API functions including the XInput lib\u003c/li\u003e\n    \u003cli\u003eoperator overloads\u003c/li\u003e\n    \u003cli\u003einput simulation\u003c/li\u003e\n    \u003cli\u003eC++ pointer wrappers like unique_ptr\u003c/li\u003e\n    \u003cli\u003eif-constexpr to do compile-time decisions instead of run-time\u003c/li\u003e\n    \u003cli\u003eSTL containers and algorithms\u003c/li\u003e\n    \u003cli\u003eit is a real time system (or very close)\u003c/li\u003e\n    \u003cli\u003elots and lots of object oriented programming\u003c/li\u003e\n    \u003c/ul\u003e\n    \n\n  \u003cb\u003eThe main classes for use in the native C++ XMapLib project are :\u003c/b\u003e\n \u003cul\u003e\n\u003cli\u003e\u003cb\u003e\u003ca href=\"https://github.com/calebtt/XMapLib/blob/master/XMapLib/MouseMapper.h\"\u003eMouseMapper\u003c/a\u003e\u003c/b\u003e\u003c/li\u003e\n\u003cli\u003e\u003cb\u003e\u003ca href=\"https://github.com/calebtt/XMapLib/blob/master/XMapLib/KeyboardMapper.h\"\u003eKeyboardMapper\u003c/a\u003e\u003c/b\u003e\u003c/li\u003e\n\u003cli\u003e\u003cb\u003e\u003ca href=\"https://github.com/calebtt/XMapLib/blob/master/XMapLib/MousePlayerInfo.h\"\u003eMousePlayerInfo\u003c/a\u003e\u003c/b\u003e\u003c/li\u003e\n\u003cli\u003e\u003cb\u003e\u003ca href=\"https://github.com/calebtt/XMapLib/blob/master/XMapLib/KeyboardPlayerInfo.h\"\u003eKeyboardPlayerInfo\u003c/a\u003e\u003c/b\u003e\u003c/li\u003e\n\u003cli\u003eTo set the mapping details \u003cb\u003e\u003ca href=\"https://github.com/calebtt/XMapLib/blob/master/XMapLib/KeyboardKeyMap.h\"\u003eKeyboardKeyMap\u003c/a\u003e\u003c/b\u003e encapsulates the information comprising a controller key to keyboard/mouse key mapping.\u003c/li\u003e\n  \u003c/ul\u003e\n\u003cp\u003eAlso, please see the \u003cb\u003e\u003ca href=\"https://github.com/calebtt/XMapLib/blob/master/XMapLib/XMapLib.cpp\"\u003eExample\u003c/a\u003e\u003c/b\u003e\u003c/p\u003e\n\n\u003cb\u003e\u003cp\u003eThe DLL API exposed from XMapLibDLL is described totally in \u003ca href=\"https://github.com/calebtt/XMapLib/blob/master/XMapLibDLL/apifuncs.h\"\u003eapifuncs.h\u003c/a\u003e in the DLL project.\u003c/b\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcalebtt%2Fxmaplib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcalebtt%2Fxmaplib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcalebtt%2Fxmaplib/lists"}