Bluez - transmit beacon and scan on same radio - bluetooth

I am using Bluez to set up a BLE beacon scanner on a standalone Linux box. I want it to do some form of self diagnosis on the radio (for some specific application reasons) and the way I'd like to do it is by transmitting a beacon (iBeacon or any other form) every so often and listening for this beacon on the same radio.
This is the setup that I have:
Unit 1: standard off-the-shelf iBeacon.
Unit 2: Ubuntu VM with CSR
BLE radio. Running an iBeacon scanner and an iBeacon transmitter.
Unit 3: Ubuntu VM with CSR BLE radio (different from the one in Unit
2). Running an iBeacon scanner.
Results:
Unit 3: is able to see Unit 1 and the iBeacon transmitted by Unit 2.
Unit 2: is able to see Unit 1 but NOT the iBeacon transmitted by Unit 2.
Should it be possible for Unit 2 to see itself? If not, why not?

No, a Bluetooth LE device cannot detect it's own transmission. This is nothing specific to BlueZ, Linux, or even the specific Bluetooth hardware you are using. All BLE devices work this way including those on Android, iOS, Windows, Mac and other embedded platforms.
The limitation is baked into the hardware and the design of the Bluetooth specification. Why? Because for non-experimental purposes, it just does not make sense to have a radio transmitter/receiver pick up its own transmission. Think of an old fashioned CB radio, which always turns off its receiver when transmitting.
You can, of course, add a second Bluetooth dongle on Linux, then use it to receive the transmission from the other interface.

Related

Bluetooth Low Energy - Connecting to same device

I'm writing a Bluetooth Low Energy library. For now, it will only run on Linux (and with Bluez 5.41+).
I'd like to have tests that can be run on any computer with BLE support and test the entire stack (application, host and controller), without requiring extra hardware (another BLE-capable device). Requiring extra hardware is a great way of making sure the tests won't be run more than once in a blue moon.
For that end, I'd like to use my computer to connect to itself (as both a peripheral and central) during the tests. It seems like this should be possible, since I can be connected at the same time as peripheral and central to other devices. But advertisements from my own computer never show up on (my own computer's) BLE scans.
Is it all possible to have the computer connect to itself in this way?
No, not if you only have one Bluetooth controller.
The reason is that radio peripherals can only transmit OR receive in a given time moment.

Multiple BLE device testing

I have to test Ble devices with an App on iOS and Android, the scenario is having multiple device sending signals and it is difficult to figure out which device is connecting to what phone.
Is there a better way to test and what are some of best tools for checking the status of ble devices like signal strength and other characteristics.
I've been using LightBlue Explorer to poke at BLE devices to see characteristics and values. It can also emulate devices once it's seen a real one.
I ultimately ended up writing my own Device Simulator on iOS. This lets me generate a controlled BLE service/characteristic, with full control of the device name, advertised broadcast name, and characteristic values.

Emulate a Bluetooth Device from PC

I wonder whether it is possible to emulate a specific bluetooth device like a Remote Controller for a TV or another device with my PC. I'd be okay with installing an additional hardware device for my computer (e. g. a BlueTooth PCIe card).
I imagined something like "recording" all single commands of my original remote controller using my Bluetooth card and afterwards use these recorded commands to turn on my TV for example.
Is something like this possible (with additional hardware maybe)?
Of course this is possible. Bluetooth is just a protocol and you can impliment it in your custom software to emulate all kinds of devices. If you need to emulate simple devices like keyboard or mouse, there are many ready solutions like this.
But if you have non standard device, there won't be any ready solutions and you will have to implement it yourself. What can help you:
If you have some kind of controller for PC and you want to emulate device with unknown protocol, you can use WireShark or other sniffer to understand what's going on.
There is an emulator called BT-Sim, but it is so poorly documented that I can't even guess what it does.
You can can take as example different android software like described in answers to this question.
You can check different program samples for PC like this.
For hardware you need only simple Bluetooth dongle. However, if you want to spy on some BLE (Bluetooth Low Energy) devices, you can buy hardware sniffer like this.
(At least in Windows 10) Microsoft Store has an application called "Bluetooth LE Explorer" which is able to simulate different kind of Bluetooth GATT profiles as a peripheral.

is it possible for iBeacon to act as just normal BLE data transmission module after connection?

i know that iBeacon use only advertising channel. which means there is no need connection.
im trying to make my own beacon module which send and receive data.
im curious about what makes the packet in iBeacon format(prefix /UUID / minor/ major/ TX) in communication ?
is it firmware?
let's assume that
when i make my iPhone act as iBeacon , it will send the advertising packet. which means it sends data in iBeacon format. but after turn off the app for iBeacon, i try to use my iphone
to send some files to laptop via Bluetooth low energy mode as usual.
then it will send data in bluetooth standard format. is this right?
given that situation, my iphone can be both iBeacon and just normal phone capable of bluetooth low energy.
i think also the beacon module can be like that. how about the product recently released? like estimote, redbearlab and so on. after connection, do they receive data?
Every iBeacon product works a little differently, but it is common for a product to be connectable for configuration purposes over Bluetooth LE.
Radius Networks' RadBeacon, for example, has firmware that sends out its advertisement as needed to be a standard iBeacon. The same firmware will allow a connection over Bluetooth LE, exchanging data with an external client (the RadBeacon app for iOS). This connectability is outside standard iBeacon functionality, using proprietary techniques that are still part of the larger Bluetooth LE standard.
Your understanding is therefore correct.
Full disclosure: I am Chief Engineer at Radius Networks.

Does the WindowsCE firmware support multiple BlueTooth connections?

Can a WindowsCE device connect so more than one BlueTooth device? The device needs to both serve as a BlueTooth hands-free speaker for a phone and connect to a third device via a serial BlueTooth connection.
Can an application do this without the need of a speciel driver?
You must understand that Windows CE is a modular OS and any specific platform capabilities are implemented by an OEM. An OEM can create a Windows CE device with absolutely no Bluetooth support or they might choose to implement just a Bluetooth client profile (say as a bluetooth audio device) or they may choose to implement a Bluetooth server so they can consume a Bluetooth serial device. They may also choose to implement both. Beyond what the OEM does in software, the hardware itself might allow only one or the other (or both or neither for that matter).
The short of this is that we can't actually answer your question becasue there is no generic answer that fits all devices. You have to ask the Device OEM what they support and if they can extend that support if they don't support what you need.

Resources