Parse BLE advertising packets in C/C++ - bluetooth-lowenergy

I'm working on Nordic's nrf52840 BLE chip, which is scanning the nearby available beacons.
I'm getting BDADDR, Name and RSSI value using my application which is in C(Used Bluez's api).
Now i want to write a C/C++ application which could parse the beacon advertising packets and get the sensor data from the packets.
I have observed that Noble module of Nodejs can do the job easily, but i don't have a knowledge of node.
So is there any library/APIs available using which parsing of BLE sensor advertising packets is possible?
NOTE: I didn't find any API in bluez 5.50 which can provide parsed data.
Thanks,
Mayank

Related

Using Arduino to read BLE

I have an Arduino MEGA2560, I hooked it up to a BLE module HM-19 through serial. I can send AT commands and receive responses from the HM-19 successfully.
I have a BLE Smart wristwatch. This BLE smart wristwatch stores my Daily steps, Heart rate & Blood Oxygen.
I can send AT commands to my HM-19 BLE module to successfully connect to my BLE Smart wristwatch. However, after connecting/pairing the HM-19 and the smart wristwatch there doesn't seem to be much I can do.
Question: What AT commands do I have to send to read the wristwatches BLE services and characteristics?
I want to read the daily step counts, heart rate, blood oxygen, battery percentage, etc.
Does anyone know how?
From looking at the documentation for the HM-19 module it looks like it might be difficult to do what you are looking for as the product looks like it focuses on supporting UART over BLE.
The only customisation is what UUIDs are used for the two UART characteristics.

Raspberry Pi3 BLE only accepts a single connection

I have created a BLE peripheral that exposes a GATT service. It uses BlueZ 5.50, but it seems that only one device can connect to the GATT service. When the device is connected, then other devices can't see it anymore. It's not showing up in a scan anymore and if it was already scanned, then I can't connect to it anymore.
It seems to be a limitation or configuration issue in BlueZ, because when using the Paypal GATT library it can handle multiple connections. As far as I know, the RPi3 BLE chip should be able to handle up to 10 connections.
Does anyone know if this can be done using BlueZ?
The Paypal GATT library directly connects to the HCI device and bypasses most of the kernel stuff. BlueZ depends on kernel drivers and user-space applications and is capable if the driver reports that the controller allows multiple connections. You need a decent BLE controller and a recent kernel to make it work.
More information can be found in https://github.com/bluez/bluez/issues/12.

How to spoof individual BLE packets

I'm doing a security analysis project on an IoT device that uses an unencrypted BLE connection (with ATT protocol) and I want to spoof an individual BLE packet with the source address of an already connected device. Is there some tool or API that would allow me to do this easily? I've already tried gatttool and spooftooph but they seem to be connection based and don't allow you to send out single packets with modified fields (as far as I could tell).
You will need some hardware where you can access the radio peripheral directly. What you basically need to do is to find or write a ble sniffer firmware, with the modification that it at a given moment sends a packet on the connection it is currently listening to. But note that the signal strength must be stronger than the original device's signal so it doesn't interfere.
The only open source project I'm aware of is Ubertooth. You will also be able to do this with an nRF52 but then you need to write your own sniffer firmware since Nordic Semiconductor's is closed source.
I can't comment on Emils reply yet, < 50 rep:
Nordic Semis nRF Sniffer v2 needs only the nRF52DK and wireshark to work as a general BLE sniffer. At 40$ it's not that expensive. I know for a fact they will release a new dongle soon that will sell for ~10-15 bucks if you can wait a a month or two.

Programming a BLE Beacon to connect with server

I am developing a solution where, Fixed BLE beacon detects a moving BLE device and sends the relevant data to the server using wifi/ethernet/etc. All the examples I have found have BLE beacons talking to the mobile phone which in my case isnt true. AFIK an embedded systems engineer can configure the fixed beacon to send data to server. BUT is there any ready to use solution that lets the beacon connect to backend? Thanks.
You mention having a "[f]ixed BLE beacon [detect] a moving BLE device". Understand that this is very different from the way an Apple-style BLE iBeacon works, which is a transmit only device. (I mention this because the question is tagged with ibeacon.)
What you are describing is probably better described as either a beacon scanner or a BLE scanner. My company has a Raspberry Pi-based product that can scan for beacons and take programmatic action based on detections. We have a blog post about how to make a beacon turn on a lamp using this device, but you could just as easily make it contact a server when a BLE device is detected.

Receive BLE signal from iBeacon to Bluno(arduino with BLE)

I want to receive rssi signal and UUID from iBeacon to Bluno which the Arduino board has BLE.
there are some questions for this.
Are there any solutions to receive UUID and rssi from BLE to BLE?
Is it possible to communicate two BLE device each other?
I want some sites to reference for this problem.
I also need to connect bluno with AR.Drone. Could you give me some advices for this?
thank you for your help
The Bluno has the ability to act as an iBeacon (transmitter), but it doesn't have the ability to receive iBeacon announcements and pass these to the Arduino.
BLE devices can communicate and can receive UUIDs and RSSIs, but it depends on the capability of the device and the interfaces it exposes. An iOS device, for example, exposes a very sophisticated BLE API. The Bluno board does not. It exposes a "serial port" to the Arduino and maps send/receive data to a set of BLE GATT characteristics. A pair of Bluno devices can be configured to act as a wireless serial link, or software on a computer or mobile device can exchange data with the Arduino via the bluetooth stack.
There is an AT command that will return the rssi of the paired device, but the documentation isn't clear as to whether this is available to the Arduino or only via the USB connection to a computer.
The best reference (such as it is) for the Bluno specifically, seems to be the DFRobot Wiki
I doubt you will be able to connect to the AR.Drone using Bluetooth Low Energy directly from a Bluno doesn't have Bluetooth LE. In theory you could connect another Bluno to the USB port on the AR.Drone and write software, but it would be simpler to get a WiFi shield for an Arduino and use the WiFi networking that is built in to the AR.Drone

Resources