From 2bbca6f082b69b20ee137db331b0ce9de4d78822 Mon Sep 17 00:00:00 2001 From: Erik Brakkee Date: Tue, 26 May 2026 15:21:48 +0200 Subject: [PATCH] initial version. --- Makefile | 32 +++++++++++++++++++++++++++++++ cmd/bridge/main.go | 47 ++++++++++++++++++++++++++++++++++++++++++++++ go.mod | 7 +++++++ go.sum | 4 ++++ setup.md | 31 ++++++++++++++++++++++++++++++ 5 files changed, 121 insertions(+) create mode 100644 Makefile create mode 100644 cmd/bridge/main.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 setup.md diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..af52902 --- /dev/null +++ b/Makefile @@ -0,0 +1,32 @@ +.DEFAULT_GOAL := all + +.PHONY: fmt vet build clean tools + +tools: + GOPROXY=direct go install git.wamblee.org/public/gotools/cmd/go2junit@main + go install github.com/a-h/templ/cmd/templ@v0.3.977 + +fmt: + go fmt ./... + +vet: fmt + go vet ./... + + +build: vet + mkdir -p bin + go build -ldflags "-X main.Version=$(shell git rev-parse HEAD ) -X main.BuildTime=$(shell date +'%Y-%m-%dT%H:%M:%S')" -o bin ./cmd/... + +install: build + go install ./... + +test: build + go test -count=1 -coverprofile=testout/coverage.out -json ${TESTFLAGS} ./... | go2junit testout + +clean: + rm -rf bin + rm -f pkg/server/ui/LICENSE* + rm -rf testout + +all: build + diff --git a/cmd/bridge/main.go b/cmd/bridge/main.go new file mode 100644 index 0000000..2dbf75d --- /dev/null +++ b/cmd/bridge/main.go @@ -0,0 +1,47 @@ +package main + +import ( + "context" + "fmt" + + "github.com/half2me/antgo/ant" + "github.com/half2me/antgo/device" + "github.com/half2me/antgo/driver/usb" +) + +func main() { + drv, err := usb.GetDevice(0x0fcf, 0x1008) + if err != nil { + panic(err) + } + defer drv.Close() + + fmt.Println("device opened") + + if err := device.ResetWait(drv); err != nil { + panic(fmt.Sprintf("reset failed: %v", err)) + } + fmt.Println("reset ok") + + if err := device.StartRxScanModeWait(drv); err != nil { + panic(fmt.Sprintf("scan mode failed: %v", 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("power: %dW cadence: %d rpm\n", cur.InstantaneousPower(), cur.InstantaneousCadence()) + } + } + + fmt.Println("channel closed") +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..f412cb8 --- /dev/null +++ b/go.mod @@ -0,0 +1,7 @@ +module git.wamblee.org/antplusbridge + +go 1.26.2 + +require github.com/half2me/antgo v0.0.0-20240825222428-e6b9ddc9c32f + +require github.com/google/gousb v1.1.3 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..5f5e401 --- /dev/null +++ b/go.sum @@ -0,0 +1,4 @@ +github.com/google/gousb v1.1.3 h1:xt6M5TDsGSZ+rlomz5Si5Hmd/Fvbmo2YCJHN+yGaK4o= +github.com/google/gousb v1.1.3/go.mod h1:GGWUkK0gAXDzxhwrzetW592aOmkkqSGcj5KLEgmCVUg= +github.com/half2me/antgo v0.0.0-20240825222428-e6b9ddc9c32f h1:T1EVnxPi3CqwmJdOs/s76vplnG8t0MEFmwo3bvHrZAo= +github.com/half2me/antgo v0.0.0-20240825222428-e6b9ddc9c32f/go.mod h1:BXp/M+7//3V0GY2ytRJw4vcxZve8mQ0zRVuow+fANkE= diff --git a/setup.md b/setup.md new file mode 100644 index 0000000..d84eb6d --- /dev/null +++ b/setup.md @@ -0,0 +1,31 @@ + +# dmesg + +Make sure usbserial does not handle this device + +``` +cat > /etc/udev/rules.d/99-ant-usb.rules <