54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
|
// This example advertises for 5 minutes after
|
||
|
// - boot
|
||
|
// - disconnect
|
||
|
// and then stops advertising.
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
|
||
|
"tinygo.org/x/bluetooth"
|
||
|
)
|
||
|
|
||
|
var adapter = bluetooth.DefaultAdapter
|
||
|
|
||
|
var advUntil = time.Now().Add(5 * time.Minute)
|
||
|
var advState = true
|
||
|
|
||
|
func main() {
|
||
|
must("enable BLE stack", adapter.Enable())
|
||
|
adv := adapter.DefaultAdvertisement()
|
||
|
must("config adv", adv.Configure(bluetooth.AdvertisementOptions{
|
||
|
LocalName: "Go Bluetooth",
|
||
|
}))
|
||
|
adapter.SetConnectHandler(func(device bluetooth.Addresser, connected bool) {
|
||
|
if connected {
|
||
|
println("connected, not advertising...")
|
||
|
advState = false
|
||
|
} else {
|
||
|
println("disconnected, advertising...")
|
||
|
advState = true
|
||
|
advUntil = time.Now().Add(5 * time.Minute)
|
||
|
}
|
||
|
})
|
||
|
must("start adv", adv.Start())
|
||
|
|
||
|
println("advertising...")
|
||
|
address, _ := adapter.Address()
|
||
|
for {
|
||
|
if advState && time.Now().After(advUntil) {
|
||
|
println("timeout, not advertising...")
|
||
|
advState = false
|
||
|
must("stop adv", adv.Stop())
|
||
|
}
|
||
|
println("Go Bluetooth /", address.MAC.String())
|
||
|
time.Sleep(time.Second)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func must(action string, err error) {
|
||
|
if err != nil {
|
||
|
panic("failed to " + action + ": " + err.Error())
|
||
|
}
|
||
|
}
|