{"id":37741419,"url":"https://github.com/ultrawipf/openffboard","last_synced_at":"2026-01-18T21:00:50.194Z","repository":{"id":37248201,"uuid":"239824219","full_name":"Ultrawipf/OpenFFBoard","owner":"Ultrawipf","description":"OpenFFBoard is a universal force feedback interface for DIY simulation devices","archived":false,"fork":false,"pushed_at":"2026-01-10T14:24:05.000Z","size":42667,"stargazers_count":838,"open_issues_count":15,"forks_count":147,"subscribers_count":47,"default_branch":"master","last_synced_at":"2026-01-11T04:23:40.006Z","etag":null,"topics":["firmware","forcefeedback","usb-hid"],"latest_commit_sha":null,"homepage":"https://hackaday.io/project/163904-open-ffboard","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/Ultrawipf.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":null,"patreon":"Gigawipf","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":"paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=B23BD5FGD5CH8"}},"created_at":"2020-02-11T17:36:00.000Z","updated_at":"2026-01-10T22:29:45.000Z","dependencies_parsed_at":"2023-02-19T01:31:09.665Z","dependency_job_id":"a4a2bf48-e899-4281-a726-eca7bdcb83a6","html_url":"https://github.com/Ultrawipf/OpenFFBoard","commit_stats":{"total_commits":641,"total_committers":9,"mean_commits":71.22222222222223,"dds":0.109204368174727,"last_synced_commit":"dc2d3793e4d1d515c6ef6987722c126f736c2f8d"},"previous_names":[],"tags_count":63,"template":false,"template_full_name":null,"purl":"pkg:github/Ultrawipf/OpenFFBoard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ultrawipf%2FOpenFFBoard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ultrawipf%2FOpenFFBoard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ultrawipf%2FOpenFFBoard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ultrawipf%2FOpenFFBoard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ultrawipf","download_url":"https://codeload.github.com/Ultrawipf/OpenFFBoard/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ultrawipf%2FOpenFFBoard/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28550464,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T20:59:07.572Z","status":"ssl_error","status_checked_at":"2026-01-18T20:59:02.799Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["firmware","forcefeedback","usb-hid"],"created_at":"2026-01-16T14:10:26.181Z","updated_at":"2026-01-18T21:00:50.187Z","avatar_url":"https://github.com/Ultrawipf.png","language":"C","funding_links":["https://patreon.com/Gigawipf","paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=B23BD5FGD5CH8"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003ca href=\"https://github.com/Ultrawipf/OpenFFBoard\"\u003e\n        \u003cimg width=\"200\" height=\"200\" src=\"doc/img/ffboard_logo.svg\"\u003e\n    \u003c/a\u003e\n\t\u003cbr\u003e\n\t\u003cbr\u003e\n\t\u003cdiv style=\"display: flex;\"\u003e\n\t\t\u003ca href=\"https://discord.gg/gHtnEcP\"\u003e\n            \u003cimg src=\"https://img.shields.io/discord/704355326291607614\"\u003e\n\t\t\u003c/a\u003e\n\t\t\u003ca href=\"https://github.com/Ultrawipf/OpenFFBoard/stargazers\"\u003e\n            \u003cimg src=\"https://img.shields.io/github/stars/Ultrawipf/OpenFFBoard\"\u003e\n\t\t\u003c/a\u003e\n\t\t\u003ca href=\"https://github.com/Ultrawipf/OpenFFBoard/actions/workflows/build-firmware.yml\"\u003e\n            \u003cimg src=\"https://github.com/Ultrawipf/OpenFFBoard/actions/workflows/build-firmware.yml/badge.svg?branch=master\"\u003e\n\t\t\u003c/a\u003e\n\t\u003c/div\u003e\n\u003c/div\u003e\n\n\n\n# Open FFBoard\nThe Open FFBoard is an open source force feedback interface with the goal of creating a platform for highly compatible FFB simulation devices like steering wheels and joysticks.\n\nThis firmware is optimized for the Open FFBoard and mainly designed for use with DD steering wheels.\nRemember this software is experimental and is intended for advanced users. Features may contain errors and can change at any time.\n\nMore documentation about this project is on the [hackaday.io page](https://hackaday.io/project/163904-open-ffboard).\n\nThe hardware designs are found under [OpenFFBoard-hardware](https://github.com/Ultrawipf/OpenFFBoard-hardware).\n\nThe GUI for configuration is found at [OpenFFBoard-configurator](https://github.com/Ultrawipf/OpenFFBoard-configurator).\n\nThese git submodules can be pulled with `git submodule init` and `git submodule update`\n\nUpdates often require matching firmware and GUI versions!\nFor binary releases check the [github release section](https://github.com/Ultrawipf/OpenFFBoard/releases).\n\n## Documentation\nDocumentation will be updated in the [GitHub Wiki](https://github.com/Ultrawipf/OpenFFBoard/wiki).\n\nAvailable commands are listed on the [Commands wiki page](https://github.com/Ultrawipf/OpenFFBoard/wiki/Commands)\n\nCode summary and documentation of the latest stable version is available as a [Doxygen site](https://ultrawipf.github.io/OpenFFBoard/doxygen/).\n\nFor discussion and progress updates we have a [Discord server](https://discord.com/invite/gHtnEcP).\n\n\n## Features\nFor more information, [game compatibility](https://github.com/Ultrawipf/OpenFFBoard/wiki/Games-setup#compatibility-list) and common setups check the [GitHub Wiki](https://github.com/Ultrawipf/OpenFFBoard/wiki).\n### Main modes:\nSee [other mainclasses](https://github.com/Ultrawipf/OpenFFBoard/wiki/Commands#other-mainclasses) for full list.\n* **FFB Wheel**: \tUSB 1 Axis force feedback device with HID FFB support, multiple analog axis inputs (see analog sources) and digital buttons (see digital sources)\n* **FFB Joystick**: USB 2 Axis force feedback device\n\n* **EXT FFB Gamepad**: USB 2 axis gamepad device without HID FFB. Use this for simple non FFB devices or send custom FFB data via commands (See [Ext FFB mode](https://github.com/Ultrawipf/OpenFFBoard/wiki/External-FFB-mode))\n* **CAN Remote Analog/Digital**: Send all supported digital and analog inputs as CAN packets to a main FFBoard (Receive using CAN Analog/Digital source)\n---\n* **CAN Interface**: GVRET compatible CAN interface for CAN bus debugging\n\n### Supported motor drivers\n|Name|Interface|1ch Wheel support|2ch Joystick support|Supported motors|Supported encoders|Enc forwarding (see [FFBoard supported encoders](#supported-encoders))|Dual interface encoder\n|--|--|--|--|--|--|--|--|\n**OpenFFBoard TMC4671**|SPI|yes✅|limited⚠️|3 phase servo (BLDC), 2ph stepper (w. encoder), (DC) | ABZ, SinCos, (Digital Hall), Analog hall | yes✅|yes✅\nODrive|CAN|yes✅|yes✅|3 phase servo | ABZ, SPI, Internal (See ODrive docs) | no❌|no❌\nVESC|CAN|yes✅|yes✅|3 phase servo| ABZ | no❌|yes✅\nPWM|PWM pins|yes✅|no❌|Any external driver (PWM+Dir, Centered, RC PPM, 2x PWM)| Any [FFBoard encoder](#supported-encoders) | no❌|no❌\nMyActuator|CAN|yes✅|yes✅|Integrated in servo| Internal | no❌|no❌\nSimplemotion|RS432 w. adapter⚠️|yes✅|no❌|3 phase servo, Stepper| ABZ, BISS-C | no❌|no❌\n\n\n### Supported encoders\nEncoders supported directly by FFBoard firmware and main board\n\nCan be forwarded to TMC4671 using external encoder forwarding\n\n|Name|Interface|Absolute|\n|-|-|-|\n|ABZ Quadrature|ABZ|no❌|\n|BISS-C|SPI w. Adapter⚠️|yes✅|\n|MagnTek (MT6825,MT6835)|SPI + ABZ|yes✅|\n|SSI|SPI|yes✅|\n\n\n### Extensions\nThe modular structure means you are free to implement your own main classes.\nTake a look into the FFBoardMain and ExampleMain class files in the UserExtensions folder.\nHelper functions for parsing CDC commands and accessing the flash are included.\n\nThe firmware is class based in a way that for example the whole main class can be changed at runtime and with it for example even the usb device and complete behavior of the firmware.\n\nFor FFB the motor drivers, button sources or encoders also have their own interfaces.\n\nA unified command system supporting different interfaces is available and recommended for setting parameters at runtime. (see `CommandHandler.h` and the example mainclass)\n\n\n### Copyright notice:\nSome parts of this software may contain third party libraries and source code licenced under different terms.\nThe license applying to these files is found in the header of the file.\nFor all other parts in the `Firmware/FFBoard` folder the LICENSE file applies.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fultrawipf%2Fopenffboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fultrawipf%2Fopenffboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fultrawipf%2Fopenffboard/lists"}