initial version.

This commit is contained in:
Erik Brakkee 2026-05-26 15:21:48 +02:00
parent c37fde8cf6
commit 2bbca6f082
5 changed files with 121 additions and 0 deletions

32
Makefile Normal file
View File

@ -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

47
cmd/bridge/main.go Normal file
View File

@ -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")
}

7
go.mod Normal file
View File

@ -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

4
go.sum Normal file
View File

@ -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=

31
setup.md Normal file
View File

@ -0,0 +1,31 @@
# dmesg
Make sure usbserial does not handle this device
```
cat > /etc/udev/rules.d/99-ant-usb.rules <<EOF
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fcf", ATTRS{idProduct}=="1008", ENV{MODALIAS}="ignore"
EOF
```
Reload the rules
```
# remove dongle
sudo modprobe -r usb_serial_simple
sudo udevadm control --reload-rules
sudo udevadm trigger
```
Output of dmesg
```
[20167.459968] usb 3-2.2.1: new full-speed USB device number 16 using xhci_hcd
[20167.550486] usb 3-2.2.1: New USB device found, idVendor=0fcf, idProduct=1008, bcdDevice= 1.00
[20167.550497] usb 3-2.2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[20167.550501] usb 3-2.2.1: Product: ANT USBStick2
[20167.550503] usb 3-2.2.1: Manufacturer: CYCPLUS
[20167.550506] usb 3-2.2.1: SerialNumber: 123
```