package main import ( "context" "fmt" "io" "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 main() { drv, err := usb.GetDevice(0x0fcf, 0x1008) 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 { //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") }