Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Android Keyboard → Flipper Zero → USB HID

Bluetooth bridge / direct HID: a landscape Android app can send keyboard and mouse events either through Flipper Zero (BLE Serial → USB HID) or directly to a PC over Bluetooth HID (no Flipper).

Android app  ──BLE Serial──►  Flipper FAP  ──USB HID──►  PC

Motivation

I often work with devices that ship without a keyboard and needed something universal — a keyboard that can reach hosts over as many interfaces as practical (USB via Flipper today, direct Bluetooth HID from the phone, more later). Dedicated mini keyboards help, but their radio dongles kept going missing, which got old fast. A phone is almost always in reach, and a Flipper Zero is harder to lose than a tiny USB stick — so the phone becomes the keys, and Flipper (or Bluetooth) is the cable into the target.

Screenshots

Android app

Keyboard (macOS · English), dual labels, stacked ↑↓:

Keyboard macOS EN

Layout switch banner after swiping the space bar:

Layout switch banner

Connected (macOS · English):

Keyboard connected

Touchpad mode:

Touchpad

Settings — output mode (Flipper vs Direct Bluetooth) and keyboard name:

Settings output

Settings — host list, keyboard template, and languages:

Settings templates and languages

Settings — languages (enabled pinned to the top):

Settings languages

Flipper FAP (Android KB Bridge)

Waiting for phone (USB connected). Bottom hint includes Dn3=shot when built with AKB_SCREENSHOT=1:

Flipper waiting

Phone connected over BLE — ready to type:

Flipper connected

On-device capture: triple short Down → PBM on SD (apps_data/android_keyboard_bridge/). Details: docs/FLIPPER.md.

More screenshots: docs/screenshots/.

Components

Path Description
docs/BUILD.md Build, flash, install, troubleshooting
docs/ANDROID.md Android app UI, Settings, templates + language packs
docs/FLIPPER.md FAP behavior, USB identity, BLE/RPC, optional screenshots
docs/PROTOCOL.md BLE UUIDs and frame format
docs/screenshots/ Android + Flipper UI screenshots
flipper/android_keyboard_bridge/ Flipper FAP sources (C — production / default)
flipper/android_keyboard_bridge_rust/ Same FAP in Rust, for educational purposes only
android/ Android app (assets/layouts/templates/, assets/layouts/languages/)

Requirements

  • Flipper Zero
  • Android 8.0+ (API 26), BLE
  • USB data cable (Flipper ↔ PC)
  • Phone paired with Flipper in system Bluetooth settings
  • Local flipperzero-firmware checkout to build the FAP
  • JDK 17 for command-line Android builds

Quick start

# Flipper
make flipper-link
make flipper-launch

# Android
make apk-install

Then on the phone:

  1. Settings → choose Via Flipper or Direct Bluetooth to PC, pick a template, enable languages (search the list), optionally Show two languages on keys → Save
  2. Tap the top-left connection button (green = ready; blue = waiting for PC to pair in Direct mode)
  3. For Direct BT without a saved PC: accept discoverable, then pair/connect from the PC — host MAC is saved automatically
  4. Type on the keyboard, or use the top-center Keyboard | Touchpad switch
  5. Swipe on the space bar to switch languages (banner + toolbar show the active name)

Details: docs/ANDROID.md, docs/FLIPPER.md.

Bundled templates: macOS, PC, Number. Bundled label packs are generated from CLDR Windows keyboards (EN, RU, DE, FR, … — see make language-packs). Settings lists all system-known languages (searchable); pick what you need. Optional dual-label keys (current large, next small). Drop extra language JSON into the app’s files/layouts/languages/ folder (see docs/ANDROID.md).

Limits: Android often exposes only the primary system language, and does not provide soft-keyboard glyph maps — so auto-detect and “letters from the system keyboard” are incomplete. Real labels need a pack (bundled or your JSON); other selections fall back to English QWERTY on the keys. Layout screens also do not switch the Mac/PC input language.

If you have a solid idea how to read the full preferred-language list or keyboard layouts on stock Android without hacks, please open an issue — I’d be grateful for tips.

Build shortcuts

make help
make apk
make apk-install
make apk-release          # → FlipperZeroKbd-<version>.apk
make apk-release-install
make flipper-link
make flipper-build
make flipper-flash
make flipper-launch
make flipper-rust-build   # optional educational Rust FAP (.fap)
make flipper-cli

Full instructions: docs/BUILD.md.

Protocol

Keyboard taps use key_down / key_up; touchpad uses mouse move / button / scroll frames (same 6-byte header). See docs/PROTOCOL.md.

Credits

Built with help from Cursor.

About

Android keyboard/touchpad → Flipper Zero BLE Serial → USB HID (or Direct Bluetooth HID to PC)

Topics

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages