no more init() and package level config.

This commit is contained in:
Erik Brakkee 2026-05-26 23:15:59 +02:00
parent ed4f75a93d
commit e99348c66d

View File

@ -30,59 +30,56 @@ func newConfig() *config {
return &config{} return &config{}
} }
var rootCmd = &cobra.Command{ func main() {
Use: "bridge", rootCmd := &cobra.Command{
Short: "ANT+ to Bluetooth LE bridge", Use: "bridge",
Long: `Bridge an ANT+ cycling power trainer over Bluetooth Low Energy. Short: "ANT+ to Bluetooth LE bridge",
Long: `Bridge an ANT+ cycling power trainer over Bluetooth Low Energy.
This allows these trainers to be used with modern devices that don't support ANT+.`, This allows these trainers to be used with modern devices that don't support ANT+.`,
Version: fmt.Sprintf("%s (built %s)", Version, BuildTime), Version: fmt.Sprintf("%s (built %s)", Version, BuildTime),
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
c := newConfig() c := newConfig()
c.vendor = cmd.Flags().Lookup("vendor").Value.String() c.vendor = cmd.Flags().Lookup("vendor").Value.String()
c.product = cmd.Flags().Lookup("product").Value.String() c.product = cmd.Flags().Lookup("product").Value.String()
c.device = cmd.Flags().Lookup("device").Value.String() c.device = cmd.Flags().Lookup("device").Value.String()
vendorID, err := parseHex(c.vendor, 16) vendorID, err := parseHex(c.vendor, 16)
if err != nil { if err != nil {
return fmt.Errorf("invalid --vendor %q: %w", c.vendor, err) return fmt.Errorf("invalid --vendor %q: %w", c.vendor, err)
} }
productID, err := parseHex(c.product, 16) productID, err := parseHex(c.product, 16)
if err != nil { if err != nil {
return fmt.Errorf("invalid --product %q: %w", c.product, err) return fmt.Errorf("invalid --product %q: %w", c.product, err)
} }
deviceNumber, err := parseHex(c.device, 32) deviceNumber, err := parseHex(c.device, 32)
if err != nil { if err != nil {
return fmt.Errorf("invalid --device %q: %w", c.device, err) return fmt.Errorf("invalid --device %q: %w", c.device, err)
} }
c.vendorID = vendorID c.vendorID = vendorID
c.productID = productID c.productID = productID
c.deviceNumber = uint32(deviceNumber) c.deviceNumber = uint32(deviceNumber)
logMsgf("ANT Bridge %s built %s", Version, BuildTime) logMsgf("ANT Bridge %s built %s", Version, BuildTime)
logMsgf("vendor: 0x%04x/%d", vendorID, vendorID) logMsgf("vendor: 0x%04x/%d", vendorID, vendorID)
logMsgf("product: 0x%04x/%d", productID, productID) logMsgf("product: 0x%04x/%d", productID, productID)
logMsgf("device: 0x%03x/%d", deviceNumber, deviceNumber) logMsgf("device: 0x%03x/%d", deviceNumber, deviceNumber)
exec.Command("hciconfig", "hci0", "down").Run() exec.Command("hciconfig", "hci0", "down").Run()
exec.Command("hciconfig", "hci0", "up").Run() exec.Command("hciconfig", "hci0", "up").Run()
events := make(chan Event) events := make(chan Event)
go ListenForTrainer(uint16(c.vendorID), uint16(c.productID), c.deviceNumber, events) go ListenForTrainer(uint16(c.vendorID), uint16(c.productID), c.deviceNumber, events)
ExposeBluetooth(events) ExposeBluetooth(events)
return nil return nil
}, },
} }
func init() {
rootCmd.Flags().String("vendor", "0x0fcf", "USB vendor ID (hex, e.g. 0x0fcf)") rootCmd.Flags().String("vendor", "0x0fcf", "USB vendor ID (hex, e.g. 0x0fcf)")
rootCmd.Flags().String("product", "0x1008", "USB product ID (hex, e.g. 0x1008)") rootCmd.Flags().String("product", "0x1008", "USB product ID (hex, e.g. 0x1008)")
rootCmd.Flags().String("device", "3001", "ANT+ device number (hex or decimal, e.g. 3001 or 0xbb9)") rootCmd.Flags().String("device", "3001", "ANT+ device number (hex or decimal, e.g. 3001 or 0xbb9)")
}
func main() {
if err := rootCmd.Execute(); err != nil { if err := rootCmd.Execute(); err != nil {
os.Exit(1) os.Exit(1)
} }