{"id":17650744,"url":"https://github.com/eaceto/ttyusb.q10","last_synced_at":"2025-08-10T07:19:40.189Z","repository":{"id":55476390,"uuid":"277218513","full_name":"eaceto/ttyUSB.Q10","owner":"eaceto","description":"A USB Interface for BlackBerry's Q10 keyboard and BlackBerry's trackball","archived":false,"fork":false,"pushed_at":"2020-12-28T13:28:25.000Z","size":4980,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-14T18:11:33.895Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","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/eaceto.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}},"created_at":"2020-07-05T02:37:07.000Z","updated_at":"2024-12-10T10:46:49.000Z","dependencies_parsed_at":"2022-08-15T01:10:49.151Z","dependency_job_id":null,"html_url":"https://github.com/eaceto/ttyUSB.Q10","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eaceto%2FttyUSB.Q10","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eaceto%2FttyUSB.Q10/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eaceto%2FttyUSB.Q10/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eaceto%2FttyUSB.Q10/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eaceto","download_url":"https://codeload.github.com/eaceto/ttyUSB.Q10/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248933340,"owners_count":21185460,"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":[],"created_at":"2024-10-23T11:39:22.004Z","updated_at":"2025-04-14T18:11:41.569Z","avatar_url":"https://github.com/eaceto.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ttyUSB.Q10\nAn USB Interface for BlackBerry's Q10 keyboard and BlackBerry's trackball\n\n# Hardware\n\nBlackBerry devices has (IMHO) the best-in-class hardware keyboard. Also the trackball it's a nice replacement for a mouse in a portable device. I found a board created by [@arturo192](https://twitter.com/arturo182) which exposes a BB Q10 Keyboard over an I2C protocol. I decided to create this small project in order to use this keyboard, and a trackball, but over USB. \n\nCreating an USB interface is a step I have to in order to interface this keyboard with a Raspberry Pi Zero W, which will be the main board of my Palmtop device. Eventhought the Pi Zero W has an I2C port, I will use of the available ports for a hi resolution display.\n\n# Software\n\nThis application is not just a replacement of the I2C interface of the BB Q10 PMOD because introduce some features that are not available in the standard BlackBerry's Keyboard interface, for example:\n\n* Controlling the backlight brightness\n* Emulating keyboard arrows\n* Adding cut, copy and paste shortcuts.\n\nAmong other features that I will be implementing during the development of this project.\n\n# Reference board\n\nThe reference board used in this project is the Adafruit Trinket M0 which uses an ATSAMD21E18 32-bit Cortex M0+ CPU.\n\n## Connection\n\n| Keyboard PMOD | Trinket M0 |\n|---------------|------------|\n| 3V3           | 3V3        |\n| GND           | GND        |\n| SDA           | SDA        |\n| SCL           | SCL        |\n| INT           | A0         |\n\n\n# Implemented Features\n\n- [X] Controlling the backlight brightness\n- [X] Function keys (F1 to F9 and F12)\n- [X] Act as Apple Keyboard\n- [X] Emulating keyboard arrows\n- [X] Undu, cut, copy and paste.\n- [_] Handle keys repeat\n- [_] [Complete Documentation](https://eaceto.github.io/ttyUSB.Q10)\n\n## Controlling the backlight brightness\n\nThe following combination of keys will increase or decrease the brightness of the backlight keyboard. The brightness goes from 0 to 100% in 20% steps. \n\nPress and hold **Shift** then **Sym**\n\n* Press and release **A** to decrease the brightness\n\n* Press and release **Q** to increase the brightness\n\n## Function keys (F1 to F9 and F12)\n\nFunction keys are very useful, from asking for help (F1) to closing a windows (Alt + F4), but also when booting a computer in order to access BIOS / EFI, or boot disk menu (F2, F9, F12...).\n\nThe mapping that I have deviced for this keyboard implemented only F1 to F9 and F12. All this function keys can be press by:\n\nPress and hold **Shift** then **Sym** \n\n* Press and release **1** to **9** for F1 to F9 (keys: w, e, r, s, d, f, z, x, c)\n\n* Press and release **0** for F12 (the mic Key)\n\n## Act as Apple Keyboard\n\nSetting **_act_as_apple_keyboard** to **True** replaces Control Key with Command Key for **cut, copy and paste** actions. This feature should be translated to a hardware configuration (pin in low or high state).\n\n## Emulating keyboard arrows\n\nAs the BlackBerry Q10 keyboard does not have built-in arrows key, the emulation of these keys is done by using the **Sym** key plus **a** (left), **s** (down), **d** (right), **w** (up). This four keys are widely used in video games.\n\nThis combination of keys supports repeat. So holding down **Sym** plus any of the arrow keys, while result in a repetition of the key pressed.\n\n## Undo, cut, copy and paste\n\nUndo, cut, copy and paste is implemented by holding the **Sym** key and pressing:\n\n* **z** for Undo\n* **x** for Cut\n* **c** for Copy\n* **v** for Paste\n\n# Links to components\n\n- [@arturo182 BlackBerry Q10 Keyboard PMOD](https://www.tindie.com/products/arturo182/bb-q10-keyboard-pmod/)\n- [Pimoroni Trackball Brakeout](https://shop.pimoroni.com/products/trackball-breakout)\n\n# Support and Contact\n\n- [Blog](https://eaceto.dev)\n- [Linkedin](https://www.linkedin.com/in/ezequielaceto/)\n- [E-mail](mailto:eaceto@pm.me) \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feaceto%2Fttyusb.q10","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feaceto%2Fttyusb.q10","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feaceto%2Fttyusb.q10/lists"}