104 lines
2.5 KiB
Go
104 lines
2.5 KiB
Go
|
package ble
|
||
|
|
||
|
import (
|
||
|
"github.com/JuulLabs-OSS/ble/linux/hci/evt"
|
||
|
"time"
|
||
|
|
||
|
"github.com/JuulLabs-OSS/ble/linux/hci/cmd"
|
||
|
)
|
||
|
|
||
|
// DeviceOption is an interface which the device should implement to allow using configuration options
|
||
|
type DeviceOption interface {
|
||
|
SetDeviceID(int) error
|
||
|
SetDialerTimeout(time.Duration) error
|
||
|
SetListenerTimeout(time.Duration) error
|
||
|
SetConnParams(cmd.LECreateConnection) error
|
||
|
SetScanParams(cmd.LESetScanParameters) error
|
||
|
SetAdvParams(cmd.LESetAdvertisingParameters) error
|
||
|
SetConnectedHandler(f func(evt.LEConnectionComplete)) error
|
||
|
SetDisconnectedHandler(f func(evt.DisconnectionComplete)) error
|
||
|
SetPeripheralRole() error
|
||
|
SetCentralRole() error
|
||
|
}
|
||
|
|
||
|
// An Option is a configuration function, which configures the device.
|
||
|
type Option func(DeviceOption) error
|
||
|
|
||
|
// OptDeviceID sets HCI device ID.
|
||
|
func OptDeviceID(id int) Option {
|
||
|
return func(opt DeviceOption) error {
|
||
|
opt.SetDeviceID(id)
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// OptDialerTimeout sets dialing timeout for Dialer.
|
||
|
func OptDialerTimeout(d time.Duration) Option {
|
||
|
return func(opt DeviceOption) error {
|
||
|
opt.SetDialerTimeout(d)
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// OptListenerTimeout sets dialing timeout for Listener.
|
||
|
func OptListenerTimeout(d time.Duration) Option {
|
||
|
return func(opt DeviceOption) error {
|
||
|
opt.SetListenerTimeout(d)
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// OptConnParams overrides default connection parameters.
|
||
|
func OptConnParams(param cmd.LECreateConnection) Option {
|
||
|
return func(opt DeviceOption) error {
|
||
|
opt.SetConnParams(param)
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// OptScanParams overrides default scanning parameters.
|
||
|
func OptScanParams(param cmd.LESetScanParameters) Option {
|
||
|
return func(opt DeviceOption) error {
|
||
|
opt.SetScanParams(param)
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// OptAdvParams overrides default advertising parameters.
|
||
|
func OptAdvParams(param cmd.LESetAdvertisingParameters) Option {
|
||
|
return func(opt DeviceOption) error {
|
||
|
opt.SetAdvParams(param)
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func OptConnectHandler(f func(evt.LEConnectionComplete)) Option {
|
||
|
return func(opt DeviceOption) error {
|
||
|
opt.SetConnectedHandler(f)
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func OptDisconnectHandler(f func(evt.DisconnectionComplete)) Option {
|
||
|
return func(opt DeviceOption) error {
|
||
|
opt.SetDisconnectedHandler(f)
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// OptPeripheralRole configures the device to perform Peripheral tasks.
|
||
|
func OptPeripheralRole() Option {
|
||
|
return func(opt DeviceOption) error {
|
||
|
opt.SetPeripheralRole()
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// OptCentralRole configures the device to perform Central tasks.
|
||
|
func OptCentralRole() Option {
|
||
|
return func(opt DeviceOption) error {
|
||
|
opt.SetCentralRole()
|
||
|
return nil
|
||
|
}
|
||
|
}
|