Flipwire lets you control your Flipper Zero from any computer over Bluetooth just like the mobile app. Flipwire is currently only a command-line tool.
Flipwire will attempt to connect to your Flipper before any operation. Pair your Flipper to your computer before using Flipwire so that they can find each other.
Run flipwire
with no arguments to see the built-in help. Command
line usage is basically:
$ flipwire [-d] -f <Flipper name> <command> <arguments...>
Flags:
-d
: disconnect from Flipper on exit (optional)-f <Flipper name>
: Flipper name, likeUwuw2
if your Flipper is namedUwuw2
(required)
Commands:
upload <src> <dest>
: upload a file to a path on the Flipper. The destination path must include the filename. For example:upload picopass.fap /ext/apps/NFC/picopass.fap
.download <src> <dest>
: download a file from the Flipper to a local file.launch <app>
: launch a.fap
file on the Flipper.ls <dir>
: list a directory on the Flipper.rm <path>
: delete file or directory recursively.alert
: play an alert on the Flipper to help you find it.synctime
: sync the Flipper's clock to the computer's clock.
The Flipper uses a Unix-style path system to specify paths in internal
and external storage. Most likely you want to interact with external
storage (the SD card), which the Flipper sees at /ext
. /ext
is
also the directory you browse when you use the Browser tool on the
Flipper itself.
Example paths:
/ext/apps/NFC/nfc.fap
: the FAP (external application) file for the NFC app/ext/infrared
: the directory where IR files are saved
In an MSYS shell on Windows, you have to suppress path translation for
Flipwire to work, otherwise it will receive Flipper paths as local
system paths. In Git Bash, set MSYS_NO_PATHCONV=1
. In MSYS2, set
MSYS2_ARG_CONV_EXCL="*"
. See this StackOverflow
answer.
It sounds cool. Plus, "flip" is sort of a synonym of "invert", and the opposite of a wire is wireless, and Flipwire lets you do things with your Flipper wirelessly...you get the idea.
Because I like Rust. Also, because the Flipper ecosystem has a strong "plug and play" mentality, and Rust makes it easy to make an application that does exactly that.
No GUI yet, possibly never. A GUI makes the application a lot larger and more complex, and on top of that, there isn't much Rust GUI support right now. If I do add GUI support, I would probably use imgui-rs.
From my limited testing, the Flipper doesn't show up in a macOS Bluetooth scan. There's one instance of a person using an alternate Bluetooth tool to connect the Flipper but I don't know if Flipwire works.
I don't have a macOS device to test on or to provide builds for, so until I do, consider Flipwire macOS support completely experimental.
Flipwire is not perfect software by any means. In particular:
- Uploading is slow. I'm working on this but there isn't much documentation and the Flipper RPC system is not simple.
- Bluetooth is flaky, so Flipwire can be unpredictable. Expect disconnects and errors at strange times that are fixed only by rebooting the Flipper, power cycling the Bluetooth adapter, or both.
Some common problems include Flipwire not finding the Flipper or returning an error. Make sure the Flipper is already paired to your computer.
On Linux, you might need to use bluetoothctl
instead of your desktop
environment's Bluetooth tool. For example, the KDE Bluetooth tool
refuses to pair to the Flipper.
Troubleshooting steps:
- Turn Bluetooth on the Flipper off and on again.
- Turn Bluetooth on your computer off and on again.
- Reboot the Flipper.
- Unpair the Flipper from your computer and pair it again.
- Unpair all devices from the Flipper (
Settings->Bluetooth->Forget All Paired Devices
) and pair it to your computer again. - Run Flipwire with the
RUST_LOG=debug
environment variable to see if anything odd is happening. - On Linux, restart the Bluetooth service with
sudo systemctl restart bluetooth
(or the equivalent if you're not on systemd).
This can fix issues like Error finding Flipper Uwuw2: le-connection-abort-by-local
. You might also need to remove and
re-pair. If it's still not working, you've probably discovered a
bug. Create a new issue with some output with RUST_LOG=debug
and a
description of the problem.
Flipwire is only intended for use with Flippers running official firmware. If you're using another firmware, you're on your own.
Most Bluetooth adapters work perfectly with the Flipper. However,
Intel Stone Peak WiFi/Bluetooth have trouble downloading a file from
the Flipper. The Flipper's Bluetooth implementation exhibits strange
compatibility issues with these: the Flipper will disconnect while
it's sending data with disconnect reason 0x08
(connection
supervision timeout reached). This means that you can upload files,
run small commands, and sometimes download small files without
problems, but you can't download files bigger than about 5 kB before
the Flipper disconnects. I have no idea why this happens.
If your adapter isn't one of the Stone Peak adapters listed below, and exhibits issues after pair/unpair and disconnect/connect cycles, open an issue to add it to the incompatible list.
These are the two models in the Intel Stone Peak series. There are several models of the 7265, but I've only tested the 802.11ac version of the 7265. However, given that both the 7265 and 3165 have the Bluetooth issue, I suspect it's common to the whole series.
- Intel Wireless 7265
- Intel Wireless 3165
I tested the 7265 on Linux and the 3165 on Windows and Linux. Whatever the problem is, it's independent of OS on both the 3165 and 7265. The Intel 8265 works (see below), so I think this is specific to Stone Peak.
Given that the Stone Peak adapters have issues independent of operating system, I assume that all adapter functionality is OS-agnostic, so I don't keep track of what OS I test card on.
- Intel Wireless 8265
- Intel AX200
- Intel AX201
- Intel AX211
- Qualcomm Atheros QCA6174
- Cypress CYW43455 (on the Pi 4 and Quartz64 Model B)
- Cypress CYW43438 (on the Pi 3)
- Broadcom BCM20702A0 external USB adapter
- Cambridge Silicon external USB adapter
Like Flipwire? Leave me a star!
If you'd like to test Flipwire on macOS, let me know! I'd love to make it fully cross-platform.
If you have feature requests, bugs to report, or code to add, open an issue or pull request.
Make sure you have protoc
, the protobuf
compiler,
installed and in your PATH. On Linux, you also need libdbus
(including the headers) and pkg-config
. Check your package manager
for these.
Clone the Flipwire repo and submodules, and run cargo build
:
$ git clone --recursive https://github.com/liamhays/flipwire
$ cd flipwire
$ cargo build
If you're on Linux, especially a weak single-board computer, I
recommend using the mold linker
via mold -run
or some configuration in .cargo/config.toml
.