Using the Studio
Included with Warsha BLE Studio for macOS
Explore Nearby Devices
Explore is the other side of the Studio: instead of acting as a Bluetooth LE peripheral, the app scans for devices around you, connects to one, and reads, writes and subscribes to its characteristics. It is free, on Android and on macOS.
Everything Explore finds stays on your device. It is shown, kept in memory for the session, and written to a file only when you export it.
Scan
Open Explore and choose Scan. A scan runs for a few seconds, counts down, and stops by itself. Continuous keeps scanning until you choose Stop; nothing scans in the background.
Each device appears once, however often it advertises, with its latest signal strength and when it was last seen. A device that stops advertising stays in the list but is marked as not seen recently, rather than looking as if it were still nearby.
- Search matches a device’s name or identifier.
- Signal, Name and Last seen change the order.
- Filters narrows the list by advertised service, manufacturer ID, minimum signal, bytes the advertisement contains, or connectable devices only. Named only and Saved only are one tap.
- Timeline lines up when each device’s advertisements arrived, side by side.
Permissions on macOS
macOS asks once whether Warsha BLE Studio may use Bluetooth. If you refused, turn it on in System Settings → Privacy & Security → Bluetooth.
What an advertisement shows
Select a device to see its advertisement before you connect: the name it advertises, its services, service and manufacturer data, flags and transmit power where the system reports them, and its signal. Known beacon formats and standard service data are labeled, and the raw bytes stay beside the label.
These are the fields the operating system reported. They are not a captured over-the-air packet.
Signal on the Overview tab plots the signal strength of each advertisement the device received, and lists advertising fields that changed from one advertisement to a later one. It is what this device observed, not a radio-level measurement. Export signal… saves the history as a file.
Device names and identifiers
A device can show two names: the one it advertises, and the name the system remembers for it from an earlier connection. Explore shows the advertised name first and labels the remembered one, so a phone that advertises a test peripheral is not mistaken for the phone itself.
macOS never reveals a device’s Bluetooth address. The identifier Explore shows is one macOS assigns for this Mac only; the same device has a different identifier on another computer.
Connect and inspect
Choose Connect. Explore discovers the device’s services and characteristics and shows them on the GATT tab, grouped by service. Each service can be collapsed; Expand all and Collapse all open or close them together, and the search box finds a service or characteristic by name or UUID. When a device has two copies of the same service, each one is numbered.
Every value says where it came from: read just now, received as a notification, or advertised. A value from earlier is never shown as a fresh read.
A characteristic offers only the actions it supports:
- Read asks the device for the current value.
- Write sends bytes you type as hex, decimal, octal, binary or text, with a preview of the exact bytes first. Without response is offered only where the device supports it, and is labeled as not confirmed by the device.
- Subscribe turns on notifications or indications and shows each value as it arrives. Unsubscribe turns them off. A disconnect ends every subscription.
Descriptors can be read, and written where the device allows it. The subscription descriptor is controlled by Subscribe, not edited by hand.
If a device asks for pairing, the system’s pairing prompt appears; Explore reports how it ended. An operation that fails says why, in the device’s own terms where Bluetooth defines them (for example, that the attribute cannot be read, or that it needs encryption).
You can connect to several devices at once. Each has its own tabs, operations and activity.
If the device changes its services, Explore closes open write editors, clears values from the previous service database, and ends subscriptions. Review the new tree and subscribe again explicitly. A value description you are editing stays open and follows its characteristic. If discovering the new services fails, Explore says why and offers Discover services again; the old tree stays visible but cannot be used until a discovery succeeds.
On macOS, an external connection keeps the app active while receiving values. Scanning stops when you hide or minimize the window, or leave Explore; connections remain until you disconnect them.
Connection details
Connection on the Overview tab shows the state of the link and its signal. Read connected RSSI reads the signal strength of the open connection, which differs from the strength seen while scanning. macOS negotiates the MTU and connection parameters itself, and apps cannot change them.
Human-readable values
Standard Bluetooth values Explore knows, such as heart rate, battery level, cycling speed and cadence, and fitness machine data, are decoded with units. Anything else is shown as raw bytes.
For a characteristic Explore does not know, Describe value… lets you name its fields: type, order, scale and unit. The description is used both to show the value and to compose writes, and you can export it and import it on another device. A description is a view of the bytes, not proof that the device follows it; Explore warns when a value is too short or does not fit.
Activity and traces
The Activity tab lists what happened on a connection, in order: connection changes, discovery, reads, writes, subscriptions, notifications and failures, with the raw bytes and the decoded value. It is a record of what the app saw. It does not capture packets the operating system handled on its own.
Export trace… saves a session to a file. Before saving you can remove device names and identifiers, and remove the bytes while keeping their length, so a trace can be shared without revealing what it recorded. Freeform error details are omitted when either redaction option is on, because those messages may also contain identifiers or payloads. Compare runs then marks two failures of the same kind as unknown rather than the same or different, as it does for removed bytes.
Compare runs… opens two traces side by side and marks each operation as the same, different, or only in one run. Use it to check a device before and after a change, or a real device against the peripheral you built from it.
Record actions
Record actions saves a short sequence of reads, writes, subscriptions and waits on the connected device, so you can run it again. A recording’s values are fixed, or typed in before each run. It runs in order, shows its progress, stops at the first failure, and can be canceled. A repeat count runs it up to 100 times. A run stops at once if the connection ends or the device changes its services, even during a wait.
Actions… lists saved recordings. From there you can run, edit, export, import and delete them.
Nothing in a recording depends on what the device answers. Logic that reacts to a device’s values is what scripts are for.
Saved devices
Save device keeps a device in your list with the services it had, so you can find it again. A saved device is not necessarily nearby or connectable. Saved only shows just those.
Scan through a remote agent
Explore can also scan and connect through a RemoteBLE agent running on another device. The agent’s radio does the scanning and connecting, and the results appear here as if they were nearby. This is useful when the device you want to test is in another room, or when this device’s own radio is busy.
- Start the agent on the other device and copy its pairing link, which starts with
remoteble://. The RemoteBLE agent app shows it under Show pairing code; an agent on a computer prints it when started with--print-pairing. - In Explore, choose Scan through a remote agent….
- Enter a name and paste the pairing link. It carries the agent’s address and token, and, when the
agent encrypts its connections, the identity to trust. An agent without a link can be set up with
its address (for example
192.168.1.20, or a fullws://address) and its token instead. Show reveals the token so you can check it. - Choose Check and save. Explore checks that the agent answers, accepts the token, and turns away anyone without it. Nothing is saved otherwise.
With a pairing link from an agent that encrypts, the connection to the agent is encrypted, and Explore trusts only the agent it was paired with: another device answering at the same address is refused before the token is sent. Set up with an address alone, the connection is not encrypted and the token travels over it, so use one only on networks you trust. The setup form says which applies. The pairing link holds the token, so share it only with someone you would give the token.
The agent then appears as a source above the device list, next to this device. Switch between them at any time.
You can also open the pairing link instead of pasting it: scan the agent’s QR code with the camera, or open the link where you received it. Explore then opens its agent setup with the link filled in. It saves nothing until you choose Check and save, because any app can open a link, so save it only if it comes from your agent.
The token is stored in the system’s secure storage and is never shown again. To change it, open Edit remote agent… and type a new one, or paste a new pairing link; leaving the field empty keeps the saved token.
Scanning through an agent needs no Bluetooth permission on this device. Operations take longer than over this device’s own radio, because every one crosses the network.
What a device’s advertisement shows depends on the agent. An agent running RemoteBLE 0.15 or later also forwards service data, Tx power and whether the device accepts connections, as far as its platform reports them: an Android agent forwards all of them, a desktop agent may leave some out. An older agent forwards the name, signal, services and manufacturer data only.
When the agent cannot be reached
Explore names what went wrong:
- Nothing at that address accepted the connection. The agent is not started, or the address or port is wrong.
- Nothing answered at that address. Check the address, and that both devices are on the same network. Guest networks often keep devices from reaching each other.
- That host name could not be found. Use the agent’s IP address instead.
- The agent refused the token. Check it with Show; it must match the agent’s exactly.
- The agent accepts connections without a token. Explore only uses agents that require one, so that nobody else on the network can use it. Set a token on the agent first.
- The agent stopped answering. The agent was stopped, or the network dropped. Scan again to reconnect.
- The agent runs a version of RemoteBLE this app cannot talk to. Update the agent or the app.
- The agent encrypts its connections, so set it up with its pairing link. An address alone does not say which agent to trust. Paste the pairing link instead.
- The agent no longer has the identity it was paired with. If you reset the agent’s identity, set it up again with its new pairing link. If you did not, another device may be answering at its address: find out why before pairing again.
- The agent is not encrypting connections, but it was set up for an encrypted link. Turn encryption back on at the agent (Encrypt connections in the RemoteBLE agent app), or set it up again with its current pairing link.
Limits
- Explore cannot scan for and connect to a peripheral this same device is advertising. Use a second device, or a remote agent, to explore a peripheral you are running.
- Some devices hide services until they are paired, or change their services while connected; Explore rediscovers them when the device says they changed.
- How many devices can be connected at once depends on the device and its operating system.