seprating the ant+ code out.
This commit is contained in:
parent
e9dd5bbc99
commit
0a48932baa
66
cmd/bridge/ant.go
Normal file
66
cmd/bridge/ant.go
Normal file
@ -0,0 +1,66 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"github.com/google/gousb"
|
||||
"github.com/half2me/antgo/ant"
|
||||
"github.com/half2me/antgo/device"
|
||||
"github.com/half2me/antgo/driver/usb"
|
||||
)
|
||||
|
||||
func resetAndWait(drv io.ReadWriter) error {
|
||||
if _, err := drv.Write(ant.SystemResetMessage()); err != nil {
|
||||
return err
|
||||
}
|
||||
// drain until we see the startup message (0x6F)
|
||||
for {
|
||||
msg, err := ant.ReadMsg(drv)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if msg.Class() == ant.MESSAGE_STARTUP {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func listenForAntDevice(vendorId gousb.ID, productId gousb.ID, deviceNumber uint32) {
|
||||
drv, err := usb.GetDevice(vendorId, productId)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer drv.Close()
|
||||
|
||||
fmt.Println("device opened")
|
||||
|
||||
if err := resetAndWait(drv); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if err := device.StartRxScanModeWait(drv); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println("scan mode started")
|
||||
|
||||
msgs := make(chan ant.BroadcastMessage, 100)
|
||||
go device.DumpBroadcastMessages(context.Background(), drv, msgs)
|
||||
|
||||
fmt.Println("listening...")
|
||||
for msg := range msgs {
|
||||
if msg.DeviceNumber() != deviceNumber {
|
||||
fmt.Printf("Received msg from ignored ant+ device %v\n", msg.DeviceNumber())
|
||||
continue
|
||||
}
|
||||
//fmt.Printf("raw msg: device type=0x%02x device number=%d content=%x\n",
|
||||
// msg.DeviceType(), msg.DeviceNumber(), msg.Content())
|
||||
|
||||
switch msg.DeviceType() {
|
||||
case ant.DEVICE_TYPE_POWER:
|
||||
cur := ant.PowerMessage(msg)
|
||||
fmt.Printf("%v: power: %dW cadence: %d rpm\n",
|
||||
msg.DeviceNumber(), cur.InstantaneousPower(), cur.InstantaneousCadence())
|
||||
}
|
||||
}
|
||||
}
|
||||
1
cmd/bridge/bluetooth.go
Normal file
1
cmd/bridge/bluetooth.go
Normal file
@ -0,0 +1 @@
|
||||
package main
|
||||
@ -1,63 +1,18 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"github.com/half2me/antgo/ant"
|
||||
"github.com/half2me/antgo/device"
|
||||
"github.com/half2me/antgo/driver/usb"
|
||||
"github.com/google/gousb"
|
||||
)
|
||||
|
||||
func resetAndWait(drv io.ReadWriter) error {
|
||||
if _, err := drv.Write(ant.SystemResetMessage()); err != nil {
|
||||
return err
|
||||
}
|
||||
// drain until we see the startup message (0x6F)
|
||||
for {
|
||||
msg, err := ant.ReadMsg(drv)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if msg.Class() == ant.MESSAGE_STARTUP {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
drv, err := usb.GetDevice(0x0fcf, 0x1008)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer drv.Close()
|
||||
|
||||
fmt.Println("device opened")
|
||||
var vendorId gousb.ID = 0x0fcf
|
||||
var productId gousb.ID = 0x1008
|
||||
var deviceNumber uint32 = 3001
|
||||
|
||||
if err := resetAndWait(drv); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if err := device.StartRxScanModeWait(drv); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println("scan mode started")
|
||||
|
||||
msgs := make(chan ant.BroadcastMessage, 100)
|
||||
go device.DumpBroadcastMessages(context.Background(), drv, msgs)
|
||||
|
||||
fmt.Println("listening...")
|
||||
for msg := range msgs {
|
||||
//fmt.Printf("raw msg: device type=0x%02x device number=%d content=%x\n",
|
||||
// msg.DeviceType(), msg.DeviceNumber(), msg.Content())
|
||||
|
||||
switch msg.DeviceType() {
|
||||
case ant.DEVICE_TYPE_POWER:
|
||||
cur := ant.PowerMessage(msg)
|
||||
fmt.Printf("%v: power: %dW cadence: %d rpm\n",
|
||||
msg.DeviceNumber(), cur.InstantaneousPower(), cur.InstantaneousCadence())
|
||||
}
|
||||
}
|
||||
listenForAntDevice(vendorId, productId, deviceNumber)
|
||||
|
||||
fmt.Println("channel closed")
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user