Bluetooth Low Energy for Go
Go to file
2019-11-27 11:06:42 -05:00
gatt Working Android implementation. 2019-11-27 10:44:37 -05:00
ns Initial commit. 2019-10-23 18:28:19 -04:00
.gitignore Partial android implementation, including Enable(), readyToScan(), 2019-11-22 16:15:02 -05:00
ble_android.go Working Android implementation. 2019-11-27 10:44:37 -05:00
ble_darwin.go Partial android implementation, including Enable(), readyToScan(), 2019-11-22 16:15:02 -05:00
ble.go Working Android implementation. 2019-11-27 10:44:37 -05:00
BleConnect.java Working Android implementation. 2019-11-27 10:44:37 -05:00
go.mod Working Android implementation. 2019-11-27 10:44:37 -05:00
go.sum Working Android implementation. 2019-11-27 10:44:37 -05:00
jni_android.c Working Android implementation. 2019-11-27 10:44:37 -05:00
jni_android.go Partial android implementation, including Enable(), readyToScan(), 2019-11-22 16:15:02 -05:00
jni_android.h Working Android implementation. 2019-11-27 10:44:37 -05:00
nswrap.yaml Initial commit. 2019-10-23 18:28:19 -04:00
README.go Documentation 2019-11-27 11:06:42 -05:00

# 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. 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](https://gioui.org).

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.

```go
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 be 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
			}
		}
	}
```