All Projects → TorstenRobitzki → Bluetoe

TorstenRobitzki / Bluetoe

Licence: mit
C++ Framework to build Bluetooth LE Server (GATT)

Projects that are alternatives of or similar to Bluetoe

Nimble Arduino
A fork of the NimBLE library structured for compilation with Ardruino, designed for use with ESP32.
Stars: ✭ 108 (-4.42%)
Mutual labels:  ble, bluetooth-low-energy
Beacons Android
Android BLE advertising library
Stars: ✭ 107 (-5.31%)
Mutual labels:  ble, bluetooth-low-energy
Android Dfu Library
A library with DFU feature for Android 4.3+.
Stars: ✭ 532 (+370.8%)
Mutual labels:  ble, bluetooth-low-energy
Flutterblelib
Bluetooth Low Energy library for Flutter with support for simulating peripherals
Stars: ✭ 393 (+247.79%)
Mutual labels:  ble, bluetooth-low-energy
React Native Ble Manager
React Native BLE communication module
Stars: ✭ 1,210 (+970.8%)
Mutual labels:  ble, bluetooth-low-energy
Btle
Bluetooth Low Energy (BLE) packet sniffer and transmitter for both standard and non standard (raw bit) based on Software Defined Radio (SDR).
Stars: ✭ 411 (+263.72%)
Mutual labels:  ble, bluetooth-low-energy
Flutter wechat ble
ble 4.0 with wechat style api for flutter. flutter版微信api风格的低功耗蓝牙
Stars: ✭ 41 (-63.72%)
Mutual labels:  ble, bluetooth-low-energy
Gattlib
Library to access GATT information from BLE (Bluetooth Low Energy) devices
Stars: ✭ 281 (+148.67%)
Mutual labels:  ble, bluetooth-low-energy
Rxbluetoothkotlin
Bluetooth low energy reactive framework for Android written in Kotlin
Stars: ✭ 68 (-39.82%)
Mutual labels:  ble, bluetooth-low-energy
Ble Ebook Project
The companion repository for the book: "Bluetooth 5 & Bluetooth Low Energy: A Developer's Guide"
Stars: ✭ 48 (-57.52%)
Mutual labels:  ble, bluetooth-low-energy
Ble Security Attack Defence
✨ Purpose only! The dangers of Bluetooth Low Energy(BLE)implementations: Unveiling zero day vulnerabilities and security flaws in modern Bluetooth LE stacks.
Stars: ✭ 88 (-22.12%)
Mutual labels:  ble, bluetooth-low-energy
Extendable
Blocks Based Bluetooth LE Connectivity framework for iOS/watchOS/tvOS/OSX. Quickly configure centrals & peripherals, perform read/write operations, and respond characteristic updates.
Stars: ✭ 88 (-22.12%)
Mutual labels:  ble, bluetooth-low-energy
Bleunlock
Lock/unlock your Mac with your iPhone, Apple Watch, or any other Bluetooth LE devices
Stars: ✭ 383 (+238.94%)
Mutual labels:  ble, bluetooth-low-energy
Android Scanner Compat Library
A compat library for Bluetooth Low Energy scanning on Android.
Stars: ✭ 462 (+308.85%)
Mutual labels:  ble, bluetooth-low-energy
Ios Pods Dfu Library
OTA DFU Library for Mac and iOS, compatible with nRF5x SoCs
Stars: ✭ 349 (+208.85%)
Mutual labels:  ble, bluetooth-low-energy
Esp32 ble wedo
A library to control LEGO wedo 2.0 with the ESP32 through Bluetooth low energy
Stars: ✭ 16 (-85.84%)
Mutual labels:  ble, bluetooth-low-energy
JDY-08
JDY-08 Bluetooth transparent transmission module, with resource for KiCAD
Stars: ✭ 48 (-57.52%)
Mutual labels:  ble, bluetooth-low-energy
Rxandroidble
An Android Bluetooth Low Energy (BLE) Library with RxJava2 interface
Stars: ✭ 3,025 (+2576.99%)
Mutual labels:  ble, bluetooth-low-energy
Ancs4linux
iOS/iPadOS notification service client for Linux desktop (notifications on your desktop, over Bluetooth Low Energy)
Stars: ✭ 47 (-58.41%)
Mutual labels:  ble, bluetooth-low-energy
Rxbluetoothkit
iOS & OSX Bluetooth library for RxSwift
Stars: ✭ 1,213 (+973.45%)
Mutual labels:  ble, bluetooth-low-energy

Bluetoe Build Status Join the chat at https://gitter.im/TorstenRobitzki/bluetoe Language grade: C/C++

Overview

Bluetoe implements a GATT server with a very low memory footprint and a convenience C++ interface. Bluetoe makes easy things easy but gives the opportunity to fiddle with all the low level GATT details if necessary. The main target of Bluetoe is to be implemented on very small microcontrollers. Here is a complete example of a small GATT server, that allows a client to controll an IO pin, running on a nrf51422:

#include <bluetoe/server.hpp>
#include <bluetoe/bindings/nrf51.hpp>
#include <nrf.h>

using namespace bluetoe;

static constexpr int io_pin = 19;

static std::uint8_t io_pin_write_handler( bool state )
{
    // the GPIO pin according to the received value: 0 = off, 1 = on
    NRF_GPIO->OUT = state
        ? NRF_GPIO->OUT | ( 1 << io_pin )
        : NRF_GPIO->OUT & ~( 1 << io_pin );

    return error_codes::success;
}

typedef server<
    service<
        service_uuid< 0xC11169E1, 0x6252, 0x4450, 0x931C, 0x1B43A318783B >,
        characteristic<
            free_write_handler< bool, io_pin_write_handler >
        >
    >
> blinky_server;

blinky_server gatt;

nrf51< blinky_server > gatt_srv;

int main()
{
    // Init GPIO pin
    NRF_GPIO->PIN_CNF[ io_pin ] =
        ( GPIO_PIN_CNF_DRIVE_S0H1 << GPIO_PIN_CNF_DRIVE_Pos ) |
        ( GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos );

    for ( ;; )
        gatt_srv.run( gatt );
}

Documentation

http://torstenrobitzki.github.io/bluetoe/

L2CAP

Bluetoe ships with its own link layer. Currently a link layer based on the nrf51422 is under construction and is already usable. The link layer implementation will be based and tested on an abstract device, called a scheduled radio and should be easily ported to similar hardware. As Bluetoe is a GATT server implementation, only that parts of the link layer are implemented, that are nessary. Bluetoe can easily adapted to any other existing L2CAP implementation (based on HCI for example).

Current State

The following table show the list of GATT procedures and there implementation status and there planned implementation status:

Feature Sub-Procedure Status
Server Configuration Exchange MTU implemented
Primary Service Discovery Discover All Primary Services implemented

Discover Primary Service By Service UUID implemented
Relationship Discovery Find Included Services implemented

Declare Secondary Services implemented
Characteristic Discovery Discover All Characteristic of a Service implemented

Discover Characteristic by UUID implemented
Characteristic Descriptor Discovery Discover All Characteristic Descriptors implemented
Characteristic Value Read Read Characteristic Value implemented

Read Using Characteristic UUID implemented

Read Long Characteristic Value implemented

Read Multiple Characteristic Values implemented
Characteristic Value Write Write Without Response implemented

Signed Write Without Response not planned

Write Characteristic Value implemented

Write Long Characteristic Values implemented

Characteristic Value Reliable Writes implemented
Characteristic Value Notification Notifications implemented
Characteristic Value Indication Indications implemented
Characteristic Descriptor Value Read Read Characteristic Descriptors implemented

Read Long Characteristic Descriptors implemented
Characteristic Descriptor Value Write Write Characteristic Descriptors implemented

Write Long Characteristic Descriptors implemented
Cryptography Encryption implemented

Authentication planned

This is the current state of implemented Advertising Data:

Advertising Data Format Status
Service UUID Incomplete List of 16-bit Service UUIDs implemented

Complete List of 16-bit Service UUIDs implemented

Incomplete List of 32-bit Service UUIDs not planned

Complete List of 32-bit Service UUIDs not planned

Incomplete List of 128-bit Service UUIDs implemented

Complete List of 128-bit Service UUIDs implemented
Local Name Shortened Local Name implemented

Complete Local Name implemented
Flags Flags implemented
Manufacturer Specific Data Manufacturer Specific Data planned
TX Power Level TX Power Level planned
Secure Simple Pairing Out of Band not planned
Security Manager Out of Band not planned
Security Manager TK Value not planned
Slave Connection Interval Range not planned
Service Solicitation not planned
Service Data not planned
Appearance Appearance implemented
LE Role LE Role planned

This is the current state of the Link Layer implementation:

Aspect Feature Status
Roles Slave Role implemented

Master Role not planned
Advertising connectable undirected advertising implemented

connectable directed advertising implemented

non-connectable undirected advertising implemented

scannable undirected advertising implemented
Device Filtering implemented
Connections Single Connection implemented

Multiple Connection not planned
Connection Slave Latency planned
Feature Support LE Encryption planned

Connection Parameters Request Procedure planned

Extended Reject Indication planned

Slave-initiated Features Exchange planned

LE Ping implemented

LE Data Packet Length Extension planned

LL Privacy not planned

Extended Scanner Filter Policies not planned

Pullrequests are wellcome.

Dependencies

  • boost for Unittests
  • CMake for build
  • a decent C++ compiler supporting C++11
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].