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
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
|
|
||||||
"github.com/half2me/antgo/ant"
|
"github.com/google/gousb"
|
||||||
"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 main() {
|
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 {
|
listenForAntDevice(vendorId, productId, deviceNumber)
|
||||||
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())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println("channel closed")
|
fmt.Println("channel closed")
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user