Abstract
The project aims to create a qaul Ble(Bluetooth low energy) module in Rust for Linux which is compatible with Ble modules for Android and iOS. The module should provide the following functionalities :
- BLE discovery and connections: The project should be able to scan other discoverable devices and send BLE advertisements to nearby nodes at regular intervals.
- Establish data communication: The connection should be able to exchange messages between qaul nodes.
Plan Of Action
This project aims to establish a BLE connection between Linux and other compatible devices.
BLE GATT Service ➖
- GATT Server: A GATT server corresponds to an ATT server. It receives requests from clients and sends responses back.
- GATT Client: A GATT client corresponds to an ATT client. It sends requests to the server and receives responses. After the discovery of the server’s service attributes, it can start reading/writing about attributes found on the server based on permissions provided by the server.
GATT data hierarchy.
Implementation ➖
- Initiate BLE GATT server :
- Initialize the Bluetooth session and activate the Bluetooth adapter.
- Initiate local Ble GATT server using the bluer crate and set up Bluetooth GATT Services and Characteristics, which become available for remote servers.
- Initiate BLE GATT client :
- Initiate advertisement to look for nearby qaul nodes with specified service UUID and characteristic UUID.
- Connect to discovered devices and send RPC messages to libqaul.
- Establish communication between devices :
- On receiving the message.DirectSend request from the libqaul. Write the data into the characteristic.value if the service.UUID() and characteristic.UUID() is compatible with other qaul devices.
- Create a message listener and forward the characteristic value passed in the event to libqaul to be serialized as protobufs and displayed to the user.
Deliverables :
- Creating a stable working ble_module for Linux including fixing, and testing the current prototype.
- Establish communication of the ble_module with libqaul.
- Make sure the Linux Bluetooth code is interoperable with Android and iOS Bluetooth modules.
- Try to optimize the Bluetooth module for better stability and connection.
Concluding Thoughts:
I have always been inspired by the idea of a world built on free and decentralized architecture. When I read the project’s description, I felt motivated to join a community dedicated to achieving borderless, decentralized communication that rivals established centralized applications.
I would like to thank my mentors, Mathias Jud and Brenodt, for guiding me through the project and helping me understand the internal workings of the applications. I am eager to contribute to the project with great enthusiasm.