Add debug logging

This commit is contained in:
Elara 2022-04-23 19:58:00 -07:00
parent c5d938ce99
commit a832c16d69
4 changed files with 57 additions and 1 deletions

View File

@ -73,6 +73,7 @@ func (a *Agent) RequestPasskey(device dbus.ObjectPath) (uint32, *dbus.Error) {
if a.ReqPasskey == nil { if a.ReqPasskey == nil {
return 0, errAuthFailed return 0, errAuthFailed
} }
log.Debug().Msg("Passkey requested, calling onReqPasskey callback")
passkey, err := a.ReqPasskey() passkey, err := a.ReqPasskey()
if err != nil { if err != nil {
return 0, errAuthFailed return 0, errAuthFailed

10
dfu.go
View File

@ -313,6 +313,7 @@ func (dfu *DFU) Reset() {
// on waits for the given command to be received on // on waits for the given command to be received on
// the control point characteristic, then runs the callback. // the control point characteristic, then runs the callback.
func (dfu *DFU) on(cmd []byte, onCmdCb func(data []byte) error) error { func (dfu *DFU) on(cmd []byte, onCmdCb func(data []byte) error) error {
log.Debug().Hex("expecting", cmd).Msg("Waiting for command")
// Use for loop in case of invalid property // Use for loop in case of invalid property
for { for {
select { select {
@ -324,6 +325,10 @@ func (dfu *DFU) on(cmd []byte, onCmdCb func(data []byte) error) error {
} }
// Assert propery value as byte slice // Assert propery value as byte slice
data := propChanged.Value.([]byte) data := propChanged.Value.([]byte)
log.Debug().
Hex("expecting", cmd).
Hex("received", data).
Msg("Received command")
// If command has prefix of given command // If command has prefix of given command
if bytes.HasPrefix(data, cmd) { if bytes.HasPrefix(data, cmd) {
// Return callback with data after command // Return callback with data after command
@ -408,6 +413,7 @@ func (dfu *DFU) stepSeven() error {
if err != nil { if err != nil {
return err return err
} }
log.Debug().Msg("Sent firmware image segment")
// Increment bytes sent by amount read // Increment bytes sent by amount read
dfu.bytesSent += len(segment) dfu.bytesSent += len(segment)
} }
@ -415,6 +421,10 @@ func (dfu *DFU) stepSeven() error {
err := dfu.on(DFUNotifPktRecvd, func(data []byte) error { err := dfu.on(DFUNotifPktRecvd, func(data []byte) error {
// Set bytes received to data returned by InfiniTime // Set bytes received to data returned by InfiniTime
dfu.bytesRecvd = int(binary.LittleEndian.Uint32(data)) dfu.bytesRecvd = int(binary.LittleEndian.Uint32(data))
log.Debug().
Int("sent", dfu.bytesSent).
Int("rcvd", dfu.bytesRecvd).
Msg("Received packet receipt notification")
if dfu.bytesRecvd != dfu.bytesSent { if dfu.bytesRecvd != dfu.bytesSent {
return ErrDFUSizeMismatch return ErrDFUSizeMismatch
} }

View File

@ -18,6 +18,11 @@ import (
"go.arsenm.dev/infinitime/blefs" "go.arsenm.dev/infinitime/blefs"
) )
// This global is used to store the logger.
// log.Logger is not used as it would interfere
// with the package importing the library
var log zerolog.Logger
const BTName = "InfiniTime" const BTName = "InfiniTime"
const ( const (
@ -90,7 +95,7 @@ func Connect(opts *Options) (*Device, error) {
opts = DefaultOptions opts = DefaultOptions
} }
opts.Logger = opts.Logger.Level(opts.LogLevel) log = opts.Logger.Level(opts.LogLevel)
// Set passkey request callback // Set passkey request callback
setOnPasskeyReq(opts.OnReqPasskey) setOnPasskeyReq(opts.OnReqPasskey)
@ -131,16 +136,25 @@ func connect(opts *Options, first bool) (dev *device.Device1, err error) {
// device, skip // device, skip
if opts.WhitelistEnabled && if opts.WhitelistEnabled &&
!contains(opts.Whitelist, listDev.Properties.Address) { !contains(opts.Whitelist, listDev.Properties.Address) {
log.Debug().
Str("mac", listDev.Properties.Address).
Msg("InfiniTime device skipped as it is not in whitelist")
continue continue
} }
// Set device // Set device
dev = listDev dev = listDev
log.Debug().
Str("mac", dev.Properties.Address).
Msg("InfiniTime device found in list")
break break
} }
// If device not set // If device not set
if dev == nil { if dev == nil {
log.Debug().Msg("No device found in list, attempting to discover")
// Discover devices on adapter // Discover devices on adapter
discoverCh, cancel, err := bt.Discover(defaultAdapter, &adapter.DiscoveryFilter{Transport: "le"}) discoverCh, cancel, err := bt.Discover(defaultAdapter, &adapter.DiscoveryFilter{Transport: "le"})
if err != nil { if err != nil {
@ -168,11 +182,18 @@ func connect(opts *Options, first bool) (dev *device.Device1, err error) {
// device, skip // device, skip
if opts.WhitelistEnabled && if opts.WhitelistEnabled &&
!contains(opts.Whitelist, discovered.Properties.Address) { !contains(opts.Whitelist, discovered.Properties.Address) {
log.Debug().
Str("mac", discovered.Properties.Address).
Msg("Discovered InfiniTime device skipped as it is not in whitelist")
continue continue
} }
// Set device // Set device
dev = discovered dev = discovered
log.Debug().
Str("mac", dev.Properties.Address).
Msg("InfiniTime device discovered")
break break
} }
// Stop discovery // Stop discovery
@ -189,6 +210,7 @@ func connect(opts *Options, first bool) (dev *device.Device1, err error) {
reconnRequired := false reconnRequired := false
// If device is not connected // If device is not connected
if !dev.Properties.Connected { if !dev.Properties.Connected {
log.Debug().Msg("Device not connected, connecting")
// Connect to device // Connect to device
err = dev.Connect() err = dev.Connect()
if err != nil { if err != nil {
@ -200,6 +222,7 @@ func connect(opts *Options, first bool) (dev *device.Device1, err error) {
// If device is not paired // If device is not paired
if !dev.Properties.Paired { if !dev.Properties.Paired {
log.Debug().Msg("Device not paired, pairing")
// Pair device // Pair device
err = dev.Pair() err = dev.Pair()
if err != nil { if err != nil {
@ -217,6 +240,7 @@ func connect(opts *Options, first bool) (dev *device.Device1, err error) {
// was required, and the OnReconnect callback exists, // was required, and the OnReconnect callback exists,
// run it // run it
if !first && reconnRequired && opts.OnReconnect != nil { if !first && reconnRequired && opts.OnReconnect != nil {
log.Debug().Msg("Reconnected to device, running OnReconnect callback")
opts.OnReconnect() opts.OnReconnect()
} }
@ -338,6 +362,7 @@ func (i *Device) resolveChars() error {
} }
// For every discovered characteristics // For every discovered characteristics
for _, char := range chars { for _, char := range chars {
charResolved := true
// Set correct characteristics // Set correct characteristics
switch char.Properties.UUID { switch char.Properties.UUID {
case NewAlertChar: case NewAlertChar:
@ -376,6 +401,13 @@ func (i *Device) resolveChars() error {
i.fsVersionChar = char i.fsVersionChar = char
case WeatherDataChar: case WeatherDataChar:
i.weatherDataChar = char i.weatherDataChar = char
default:
charResolved = false
}
if charResolved {
log.Debug().
Str("uuid", char.Properties.UUID).
Msg("Resolved characteristic")
} }
} }
return nil return nil
@ -478,6 +510,7 @@ func (i *Device) WatchHeartRate() (<-chan uint8, func(), error) {
for { for {
select { select {
case <-done: case <-done:
log.Debug().Str("func", "WatchMotion").Msg("Received done signal")
close(out) close(out)
close(done) close(done)
i.heartRateChar.StopNotify() i.heartRateChar.StopNotify()
@ -488,6 +521,7 @@ func (i *Device) WatchHeartRate() (<-chan uint8, func(), error) {
// Send heart rate to channel // Send heart rate to channel
out <- uint8(event.Value.([]byte)[1]) out <- uint8(event.Value.([]byte)[1])
} else if event.Name == "Notifying" && !event.Value.(bool) { } else if event.Name == "Notifying" && !event.Value.(bool) {
log.Debug().Str("func", "WatchMotion").Msg("Notifications stopped, restarting")
i.heartRateChar.StartNotify() i.heartRateChar.StartNotify()
} }
} }
@ -522,6 +556,7 @@ func (i *Device) WatchBatteryLevel() (<-chan uint8, func(), error) {
for { for {
select { select {
case <-done: case <-done:
log.Debug().Str("func", "WatchMotion").Msg("Received done signal")
close(out) close(out)
close(done) close(done)
i.battLevelChar.StopNotify() i.battLevelChar.StopNotify()
@ -532,6 +567,7 @@ func (i *Device) WatchBatteryLevel() (<-chan uint8, func(), error) {
// Send heart rate to channel // Send heart rate to channel
out <- uint8(event.Value.([]byte)[0]) out <- uint8(event.Value.([]byte)[0])
} else if event.Name == "Notifying" && !event.Value.(bool) { } else if event.Name == "Notifying" && !event.Value.(bool) {
log.Debug().Str("func", "WatchMotion").Msg("Notifications stopped, restarting")
i.battLevelChar.StartNotify() i.battLevelChar.StartNotify()
} }
} }
@ -566,6 +602,7 @@ func (i *Device) WatchStepCount() (<-chan uint32, func(), error) {
for { for {
select { select {
case <-done: case <-done:
log.Debug().Str("func", "WatchMotion").Msg("Received done signal")
close(out) close(out)
close(done) close(done)
i.stepCountChar.StopNotify() i.stepCountChar.StopNotify()
@ -576,6 +613,7 @@ func (i *Device) WatchStepCount() (<-chan uint32, func(), error) {
// Send step count to channel // Send step count to channel
out <- binary.LittleEndian.Uint32(event.Value.([]byte)) out <- binary.LittleEndian.Uint32(event.Value.([]byte))
} else if event.Name == "Notifying" && !event.Value.(bool) { } else if event.Name == "Notifying" && !event.Value.(bool) {
log.Debug().Str("func", "WatchMotion").Msg("Notifications stopped, restarting")
i.stepCountChar.StartNotify() i.stepCountChar.StartNotify()
} }
} }
@ -610,6 +648,7 @@ func (i *Device) WatchMotion() (<-chan MotionValues, func(), error) {
for { for {
select { select {
case <-done: case <-done:
log.Debug().Str("func", "WatchMotion").Msg("Received done signal")
close(out) close(out)
close(done) close(done)
i.motionValChar.StopNotify() i.motionValChar.StopNotify()
@ -622,6 +661,7 @@ func (i *Device) WatchMotion() (<-chan MotionValues, func(), error) {
// Send step count to channel // Send step count to channel
out <- motionVals out <- motionVals
} else if event.Name == "Notifying" && !event.Value.(bool) { } else if event.Name == "Notifying" && !event.Value.(bool) {
log.Debug().Str("func", "WatchMotion").Msg("Notifications stopped, restarting")
i.motionValChar.StartNotify() i.motionValChar.StartNotify()
} }
} }
@ -758,11 +798,13 @@ func (i *Device) AddWeatherEvent(event interface{}) error {
return err return err
} }
log.Debug().Interface("event", event).Msg("Adding weather event")
// Write data to weather data characteristic // Write data to weather data characteristic
return i.weatherDataChar.WriteValue(data, nil) return i.weatherDataChar.WriteValue(data, nil)
} }
func (i *Device) checkStatus(char *gatt.GattCharacteristic1) error { func (i *Device) checkStatus(char *gatt.GattCharacteristic1) error {
log.Debug().Msg("Checking characteristic status")
connected, err := i.device.GetConnected() connected, err := i.device.GetConnected()
if err != nil { if err != nil {
return err return err
@ -771,7 +813,9 @@ func (i *Device) checkStatus(char *gatt.GattCharacteristic1) error {
return ErrNotConnected return ErrNotConnected
} }
if char == nil { if char == nil {
log.Debug().Msg("Characteristic not available (nil)")
return ErrCharNotAvail return ErrCharNotAvail
} }
log.Debug().Str("uuid", char.Properties.UUID).Msg("Characteristic available")
return nil return nil
} }

View File

@ -72,6 +72,7 @@ func (mc MusicCtrl) WatchEvents() (<-chan MusicEvent, error) {
for event := range ch { for event := range ch {
// If value changes // If value changes
if event.Name == "Value" { if event.Name == "Value" {
log.Debug().Bytes("value", event.Value.([]byte)).Msg("Received music event from watch")
// Send music event to channel // Send music event to channel
musicEventCh <- MusicEvent(event.Value.([]byte)[0]) musicEventCh <- MusicEvent(event.Value.([]byte)[0])
} }