Compare commits
2 commits
release
...
channelsca
Author | SHA1 | Date | |
---|---|---|---|
|
afe3dff19e | ||
|
58d88cd7e7 |
2 changed files with 76 additions and 0 deletions
5
Makefile
5
Makefile
|
@ -13,6 +13,8 @@ smoketest-tinygo:
|
||||||
@md5sum test.hex
|
@md5sum test.hex
|
||||||
$(TINYGO) build -o test.uf2 -size=short -target=circuitplay-bluefruit ./examples/discover
|
$(TINYGO) build -o test.uf2 -size=short -target=circuitplay-bluefruit ./examples/discover
|
||||||
@md5sum test.hex
|
@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
|
$(TINYGO) build -o test.hex -size=short -target=pca10040-s132v6 ./examples/heartrate
|
||||||
@md5sum test.hex
|
@md5sum test.hex
|
||||||
$(TINYGO) build -o test.hex -size=short -target=reelboard-s140v7 ./examples/ledcolor
|
$(TINYGO) build -o test.hex -size=short -target=reelboard-s140v7 ./examples/ledcolor
|
||||||
|
@ -41,12 +43,14 @@ smoketest-linux:
|
||||||
GOOS=linux go build -o /tmp/go-build-discard ./examples/nusserver
|
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/scanner
|
||||||
GOOS=linux go build -o /tmp/go-build-discard ./examples/discover
|
GOOS=linux go build -o /tmp/go-build-discard ./examples/discover
|
||||||
|
GOOS=linux go build -o /tmp/go-build-discard ./examples/channelscan
|
||||||
|
|
||||||
smoketest-windows:
|
smoketest-windows:
|
||||||
# Test on 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/scanner
|
||||||
GOOS=windows CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -o /tmp/go-build-discard ./examples/discover
|
GOOS=windows CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -o /tmp/go-build-discard ./examples/discover
|
||||||
GOOS=windows CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -o /tmp/go-build-discard ./examples/heartrate-monitor
|
GOOS=windows CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -o /tmp/go-build-discard ./examples/heartrate-monitor
|
||||||
|
GOOS=windows CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -o /tmp/go-build-discard ./examples/channelscan
|
||||||
|
|
||||||
smoketest-macos:
|
smoketest-macos:
|
||||||
# Test on macos.
|
# Test on macos.
|
||||||
|
@ -54,6 +58,7 @@ smoketest-macos:
|
||||||
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/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/nusclient
|
||||||
GOOS=darwin CGO_ENABLED=1 go build -o /tmp/go-build-discard ./examples/heartrate-monitor
|
GOOS=darwin CGO_ENABLED=1 go build -o /tmp/go-build-discard ./examples/heartrate-monitor
|
||||||
|
GOOS=darwin CGO_ENABLED=1 go build -o /tmp/go-build-discard ./examples/channelscan
|
||||||
|
|
||||||
gen-uuids:
|
gen-uuids:
|
||||||
# generate the standard service and characteristic UUIDs
|
# generate the standard service and characteristic UUIDs
|
||||||
|
|
71
examples/channelscan/main.go
Normal file
71
examples/channelscan/main.go
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
// 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
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue