{"id":47605762,"url":"https://github.com/daniel-bavrin/cirque-fix","last_synced_at":"2026-05-03T12:05:35.810Z","repository":{"id":345592054,"uuid":"1186435760","full_name":"daniel-bavrin/cirque-fix","owner":"daniel-bavrin","description":"Restores TrackPoint middle-button scroll on Lenovo laptops with Cirque/Sensel touchpads after Windows lock/unlock","archived":false,"fork":false,"pushed_at":"2026-04-28T10:11:51.000Z","size":24,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-28T12:15:35.550Z","etag":null,"topics":["cirque","driver","hid","lenovo","sensel","thinkpad","touchpad","trackpoint","windows","windows-11","windows11","workaround"],"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/daniel-bavrin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2026-03-19T16:12:12.000Z","updated_at":"2026-04-28T10:10:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/daniel-bavrin/cirque-fix","commit_stats":null,"previous_names":["daniel-bavrin/cirque-fix"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/daniel-bavrin/cirque-fix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniel-bavrin%2Fcirque-fix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniel-bavrin%2Fcirque-fix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniel-bavrin%2Fcirque-fix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniel-bavrin%2Fcirque-fix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daniel-bavrin","download_url":"https://codeload.github.com/daniel-bavrin/cirque-fix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniel-bavrin%2Fcirque-fix/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32568037,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: 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":["cirque","driver","hid","lenovo","sensel","thinkpad","touchpad","trackpoint","windows","windows-11","windows11","workaround"],"created_at":"2026-04-01T19:19:34.267Z","updated_at":"2026-05-03T12:05:35.804Z","avatar_url":"https://github.com/daniel-bavrin.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CirqueFix\n\nRestores TrackPoint middle-button scroll on Lenovo laptops with Cirque/Sensel touchpads after Windows lock/unlock or sleep/wake.\n\n## The problem\n\nLenovo ThinkPads with Cirque/Sensel touchpads have a setting \"Use top zone as TrackPoint buttons\" that enables middle-button scrolling via the TrackPoint. This setting is stored in the driver but resets to its default (disabled) every time the screen locks and unlocks, or the system wakes from sleep. The official Sensel Control Panel UI re-applies the setting when its window is focused — but only if the UI is open and visible.\n\n## How it works\n\nCirqueFix watches for Windows session unlock events and re-writes the relevant HID registers directly to the touchpad firmware via the Sensel serial pipe protocol (HID report ID 9, usage page 0xFF00). It reads your current settings from the registry (`HKCU\\Software\\Cirque\\Touchpad\\Current`) so it always applies whatever you have configured in the Sensel UI.\n\nThe mechanism was discovered by decompiling `SenselSerialDevice.dll` from the Cirque Touchpad Custom Settings app, which uses the open-source [HidSharp](https://github.com/IntergatedCircuits/HidSharp) library internally.\n\n## Requirements\n\n- Windows 11 (tested), Windows 10 should work\n- Lenovo laptop with Cirque/Sensel touchpad (VID `0x2C2F` or `0x17EF`)\n- [Cirque Touchpad Custom Settings](https://apps.microsoft.com/detail/CirqueCorporation.CirqueTouchpadCustomSettings) installed and configured at least once\n- [.NET 10 runtime](https://dotnet.microsoft.com/download/dotnet/10.0) (or use the standalone build)\n\n## Installation\n\n### Option A — installer (recommended)\n\n1. Download `CirqueFix-x.x.x-Setup.exe` from [Releases](../../releases)\n2. Run it — Windows may show a SmartScreen warning (\"Windows protected your PC\") because the exe is not code-signed. Click **More info** → **Run anyway**. This is expected for open-source tools without a paid certificate.\n3. UAC will prompt for admin (needed to install to Program Files) — click Yes\n4. Follow the wizard — leave \"Start automatically at logon\" checked\n5. Done. CirqueFix starts immediately and will restart automatically after every future logon\n\nTo uninstall: **Add/Remove Programs** → CirqueFix → Uninstall.\nTo repair: run the installer again — it will offer Repair and Uninstall options.\n\n### Option B — manual (no installer)\n\nDownload `CirqueFix.exe` from Releases and run it directly:\n\n```powershell\n# Apply once and exit\nCirqueFix.exe --once\n\n# Run in background, re-applies after every unlock/wake\nCirqueFix.exe --watch\n```\n\nTo register the startup task manually:\n```powershell\nschtasks /create /tn \"CirqueFix\" /tr \"\\\"C:\\path\\to\\CirqueFix.exe\\\" --watch\" /sc onlogon /ru \"%USERNAME%\" /f /rl limited\n```\n\n## Compatibility\n\nTested on:\n- Lenovo ThinkPad with Cirque touchpad, VID `0x2C2F` (Sensel) [Lenovo ThinkPad X1 2-in-1 Aura Edition 21NU-007XPG]\n- Windows 11 23H2+\n\nShould work on any device matched by the Cirque Touchpad Custom Settings app (VID `0x2C2F` or `0x17EF`).\n\n## Building from source\n\n```powershell\ngit clone https://github.com/YOUR_USERNAME/CirqueFix\ncd CirqueFix\ndotnet build src/CirqueFix.csproj -c Release\n\n# Run tests\ndotnet test tests/CirqueFix.Tests.csproj\n\n# Debug build (verbose logging)\ndotnet build src/CirqueFix.csproj -c Debug\n```\n\n## Legal\n\nCirqueFix is an independent tool and is **not affiliated with, endorsed by, or supported by Cirque Corporation, Sensel, or Lenovo**. \"Cirque\" and \"Sensel\" are trademarks of their respective owners, used here solely to identify hardware compatibility.\n\nThe protocol implemented here was discovered through lawful reverse engineering for interoperability purposes, consistent with EU Directive 2009/24/EC Article 6 and established US case law (*Sega v. Accolade*, *Sony v. Connectix*). No proprietary source code or copyrighted expression from Cirque or Sensel is included in this project.\n\n## License\n\nMIT — see [LICENSE](LICENSE)\n\n## Contributing\n\nIssues and PRs welcome. If you have a different Cirque/Sensel device and it works (or doesn't), please open an issue with your VID/PID.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaniel-bavrin%2Fcirque-fix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaniel-bavrin%2Fcirque-fix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaniel-bavrin%2Fcirque-fix/lists"}