Commit Graph

25 Commits

Author SHA1 Message Date
8a4457119a Add comments documenting gousb lifecycle management
Explain why we use gousb directly instead of antgo/driver/usb
(libusb context leak on error paths), document the defer cleanup
ordering, and note that errors are returned for graceful retry.
2026-06-14 13:03:39 +00:00
9efdfc9b83 Robustness for the USB connection.
ant: replace usb.GetDevice with direct gousb usage

Remove dependency on antgo/driver/usb to fix libusb context leaks on
device-not-found errors. The previous code called usb.GetDevice which
creates a gousb.Context via libusb_init but leaks it on every error
path (device not found, interface claim failure, etc.). Calling
ListenForTrainer repeatedly (e.g. starting with no dongle and plugging
it in later) triggered a libusb assertion in pthread_key_create because
the leaked contexts were never torn down.

Replace with direct gousb calls in ListenForTrainer, managing the
gousb.Context lifecycle explicitly. Cleanup is ordered correctly on
all paths: release interface, close device, close context, cancel
the ANT message goroutine context.

Also convert panics to returned errors for graceful retry.
2026-06-14 15:20:56 +02:00
c75c2ea0e1 workaround for when the trainer stops transmitting. ListenForTrainer now
restarts after not having received data for 10 seconds.
2026-06-14 14:58:22 +02:00
0d49c6f51f fixed syntax error. 2026-06-13 11:53:04 +02:00
7ee776ba1a slightly more accurate computation of the time of the last full
revolution by using the average RPM over the last interval instead of
using the last RPM.
2026-06-07 23:24:19 +02:00
de9ab0ca51 Set Cycling Power Feature characteristic to advertise Cumulative Torque and Power Output 2026-06-06 18:35:00 +00:00
13ea215996 more stable computation of lastRevtime
Only computing lastRevtime when we have made a new full rev.
This leads to more consistency in RPMs, especially when accelerating or
decellerating.
2026-06-06 16:58:26 +02:00
7644ab2e4d Now using the original time that the event was received instead of when
it is processed by bluetooth.
2026-06-05 18:35:17 +02:00
7f52f0ff68 feat: make --device flag optional with 'any' default
When --device is omitted or set to 0, the bridge listens to all
broadcasting ANT+ trainers instead of filtering by a specific device.
The actual transmitting device ID is shown in data logs, allowing
users to discover and then filter specific trainers.

Also fix vendorID/productID not being assigned to config struct
which caused ListenForTrainer to receive 0 for both values.
2026-05-26 23:06:05 +00:00
19e4e78c75 feat: add protocol prefixes to log messages
Prefix log output with 'ant:', 'bt:', or 'usb:' to distinguish
between ANT+, Bluetooth LE, and USB device messages.
2026-05-26 22:45:43 +00:00
6bb59b845c removed obsolete setup.md 2026-05-27 00:38:24 +02:00
72987c5935 refactor: replace magic hex constants with named constants
- Add BLE spec constants for service/characteristic UUIDs and signal flag
- Add ANT+ spec constants for data page mask and cycling power page
- Add descriptive comments explaining each constant's origin and purpose
2026-05-27 00:36:06 +02:00
443a88e0f1 logging when BLE stops. 2026-05-27 00:36:06 +02:00
4949beae3e fix: synchronize logs, buffer events channel, exit on goroutine failure
- Add mutex to prevent interleaved log output from concurrent goroutines
- Make logMsg delegate to logPrintf for consistent synchronization
- Buffer events channel to size 1 with select/drop when full
- Close events channel on ListenForTrainer exit so process terminates
2026-05-27 00:36:06 +02:00
091067593b refactor: remove init() and package-level rootCmd, add error logging
- Move flag registration from init() to main()
- Make rootCmd a local variable in main() instead of a package variable
- Log errors from hciconfig down/up reset commands
- Log errors from BLE power characteristic writes
2026-05-27 00:36:06 +02:00
e99348c66d no more init() and package level config. 2026-05-27 00:36:06 +02:00
b24513fcc3 feat: add CLI with Cobra and timestamped logging
Introduce structured CLI argument parsing using Cobra with three
configurable flags:
  --vendor: USB vendor ID (default: 0x0fcf)
  --product: USB product ID (default: 0x1008)
  --device: ANT+ device number (default: 3001)

Add timestamped logging for all log statements with format
YYYY-MM-DD HH:MM:SS. Log vendor, product, and device values at
startup in both hex and decimal.

Remove hardcoded USB identifiers from main.go and consolidate all
startup logic into cli.go with a dedicated Config struct.

Update ant.go ListenForTrainer signature to accept uint16 for
vendor and product IDs.
2026-05-27 00:36:06 +02:00
39b5a95eb4 logging with date time format. 2026-05-27 00:36:06 +02:00
29d7dc1632 Fully functional ant+ to bluetooth bridge. 2026-05-27 00:36:06 +02:00
eb6fdd6b16 moved bluetooth function over to separate file 2026-05-27 00:36:06 +02:00
10d8f6bb97 improved bluetooth loop 2026-05-27 00:36:06 +02:00
b5b3610b70 bluetooth with fake data. 2026-05-27 00:36:06 +02:00
0a48932baa seprating the ant+ code out. 2026-05-27 00:36:06 +02:00
e9dd5bbc99 a bit more robust. 2026-05-27 00:36:06 +02:00
2bbca6f082 initial version. 2026-05-27 00:36:06 +02:00