Compare commits

...

2 Commits

Author SHA1 Message Date
deadprogram
f3862f6230 build: add channelscan example to smoketests
Signed-off-by: deadprogram <ron@hybridgroup.com>
2020-10-01 02:20:17 +02:00
deadprogram
458028f7fd examples: add channelscan example that shows use of goroutines and channels
Signed-off-by: deadprogram <ron@hybridgroup.com>
2020-10-01 02:19:14 +02:00
2 changed files with 77 additions and 0 deletions

@ -11,6 +11,8 @@ smoketest-tinygo:
@md5sum test.hex
$(TINYGO) build -o test.uf2 -size=short -target=circuitplay-bluefruit ./examples/circuitplay
@md5sum test.hex
$(TINYGO) build -o test.uf2 -size=short -target=circuitplay-bluefruit ./examples/channelscan
@md5sum test.hex
$(TINYGO) build -o test.hex -size=short -target=pca10040-s132v6 ./examples/heartrate
@md5sum test.hex
$(TINYGO) build -o test.hex -size=short -target=reelboard-s140v7 ./examples/ledcolor
@ -34,13 +36,16 @@ smoketest-linux:
GOOS=linux go build -o /tmp/go-build-discard ./examples/nusserver
GOOS=linux go build -o /tmp/go-build-discard ./examples/scanner
GOOS=linux go build -o /tmp/go-build-discard ./examples/discover
GOOS=linux go build -o /tmp/go-build-discard ./examples/channelscan
smoketest-windows:
# Test on Windows.
GOOS=windows CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -o /tmp/go-build-discard ./examples/scanner
GOOS=windows CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -o /tmp/go-build-discard ./examples/channelscan
smoketest-macos:
# Test on macos.
GOOS=darwin CGO_ENABLED=1 go build -o /tmp/go-build-discard ./examples/scanner
GOOS=darwin CGO_ENABLED=1 go build -o /tmp/go-build-discard ./examples/discover
GOOS=darwin CGO_ENABLED=1 go build -o /tmp/go-build-discard ./examples/nusclient
GOOS=darwin CGO_ENABLED=1 go build -o /tmp/go-build-discard ./examples/channelscan

@ -0,0 +1,72 @@
// This example program shows using Go routines and channels to coordinate
// BLE scanning.
//
// The first Go routine starts scanning using the BLE adaptor. When it finds
// a new device, it puts the information into a channel so it can be displayed.
//
// The second Go routine is a ticker that puts a "true" value into a channel every 3 seconds.
//
// The main function uses a select{} statement to wait until one of the two channels is unblocked
// by receiving data. If a new device is found, the boolean variable named "found" will
// be set to true, so that the timeout is reset for each 3 second period.
//
package main
import (
"time"
"tinygo.org/x/bluetooth"
)
var (
adapter = bluetooth.DefaultAdapter
devices = make(chan *bluetooth.ScanResult, 1)
ticker = make(chan bool, 1)
found = true
)
func main() {
// Enable BLE interface.
if err := adapter.Enable(); err != nil {
panic("failed to enable adaptor:" + err.Error())
}
// Start scanning
go performScan()
// Start timeout ticker
go startTicker()
// Wait for devices to be scanned
for {
select {
case device := <-devices:
found = true
println("found device:", device.Address.String(), device.RSSI, device.LocalName())
case <-ticker:
if !found {
println("no devices found in last 3 seconds...")
}
found = false
}
}
}
func performScan() {
println("scanning...")
err := adapter.Scan(func(adapter *bluetooth.Adapter, device bluetooth.ScanResult) {
devices <- &device
})
if err != nil {
panic("failed to scan:" + err.Error())
}
}
func startTicker() {
for {
time.Sleep(3 * time.Second)
ticker <- true
}
}