Bluetooth Low Energy for Go
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Greg 90ab682a44 Port to gio gioui.org@20200829. 1 year ago
depjars Fixes to depjars/build.go 2 years ago
gatt Working Android implementation. 2 years ago
ns Improve handling of peripheral disconnections and some refactoring. 2 years ago
.gitignore Documentation 2 years ago
Ble.jar Port to gio gioui.org@20200829. 1 year ago
BlessedConnect.java Port to gio gioui.org@20200829. 1 year ago
LICENSE Add license information. 2 years ago
LICENSE-BLESSED Add license information. 2 years ago
LICENSE-TIMBER Add Timber license. Add depjars/ and go:generate commands to build 2 years ago
README.md Doc updates, add "wantScan" to BleConnect.java so scan starts 2 years ago
ble.go Improve handling of peripheral disconnections and some refactoring. 2 years ago
ble_android.go Port to gio gioui.org@20200829. 1 year ago
ble_darwin.go Port to gio gioui.org@20200829. 1 year ago
blessed-full.jar Add Timber license. Add depjars/ and go:generate commands to build 2 years ago
go.mod Port to gio gioui.org@20200829. 1 year ago
go.sum Port to gio gioui.org@20200829. 1 year ago
jni_android.c Port to gio gioui.org@20200829. 1 year ago
jni_android.go Partial android implementation, including Enable(), readyToScan(), 2 years ago
jni_android.h Bump gio version, use window.Do() instead of RegisterFragment(). 1 year ago
nswrap.yaml Improve handling of peripheral disconnections and some refactoring. 2 years ago
timber.jar Add Timber license. Add depjars/ and go:generate commands to build 2 years ago

README.md

BLE

A modern, cross-platform Go library for Bluetooth Low Energy

This package is a working but incomplete interface for access to Bluetooth Low Energy devices. It is intended to support multiple operating systems with a uniform API. Currently, MacOS and Android are supported. Android support requires the use of Gio.

The API is asyncrhonous and event driven. To access Bluetooth hardware, first create a BLE variable with NewBLE(). On Android, you must also call Enable with a pointer to your Gio Window.

import (
	...
	"git.wow.st/gmp/ble"
	"gioui.org/app"
)

func runloop() {
	b := ble.NewBle()
	w := app.NewWindow()
	b.Enable(w)
	...

Once enabled, you can call the primary API functions, Scan, StopScan, Connect, and CancelConnection. You can also query the state of the Bluetooth hardware by calling State.

Calling Events on your BLE object returns a channel on which API events are delivered. These events notify your program when the state of the BLE hardware changes (e.g. powered on or off), peripherals are connected, services or characteristics are discovered, or values for characteristics are updated.

Using Gio, your main event loop will look something like this:

	for {
		select {
		case e := <-b.Events():
			switch e := e.(type) {
				// Handle BLE Events
			}
		}
		case e := <-w.Events():
			switch e := e.(type) {
				// Handle Gio events
			}
		}
	}

An example heart rate monitor app can be found at git.wow.st/gmp/hrm.