balazsgrill/wscgo

View on GitHub
integration/pca9685.go

Summary

Maintainability
A
40 mins
Test Coverage
package integration

import (
    "log"

    "github.com/home2mqtt/wscgo/config"
    "periph.io/x/conn/v3/i2c/i2creg"
    "periph.io/x/conn/v3/physic"
    "periph.io/x/devices/v3/pca9685"
)

type pca9685ConfigParser struct{}

type Pca9685Config struct {
    Address   int `ini:"address"`
    Frequency int `ini:"frequency"`
}

func (*pca9685ConfigParser) ParseConfiguration(section config.ConfigurationSection, context config.ConfigurationContext) error {
    c := &Pca9685Config{}
    err := section.FillData(c)
    if err != nil {
        return err
    }
    context.AddDeviceInitializer(config.SLExtender, func(config.RuntimeContext) error {
        bus, err := i2creg.Open("")
        if err != nil {
            return err
        }
        dev, err := pca9685.NewI2C(bus, uint16(c.Address))
        if err != nil {
            return err
        }
        err = dev.SetPwmFreq(physic.Frequency(c.Frequency) * physic.Hertz)
        if err != nil {
            return err
        }
        log.Printf("Configured pca9685 at 0x%x", c.Address)
        return dev.RegisterPins()
    })
    return nil
}

func init() {
    config.RegisterConfigurationPartParser("pca9685", &pca9685ConfigParser{})
}