diff --git a/main.go b/main.go index 9b90845..b478fc4 100644 --- a/main.go +++ b/main.go @@ -47,7 +47,7 @@ type LedDaemon struct { var log = logging.MustGetLogger("LedD") var ledDaemon = &LedDaemon{} var pca9685 = device.PCA9685{} - +var pwmMap = map[int32]*device.Pwm{} func check(e error) { if e != nil { @@ -78,7 +78,16 @@ func (daemon *LedDaemon) receive() { switch msg := backendMsg.Msg.(type) { case *ledd.BackendWrapperMessage_MLedd: daemon.name = msg.MLedd.Name - log.Infof("Connection with LedD (%s) etablished and registered", msg.MLedd.Name) + log.Infof("Connection with %s etablished; backend registered", msg.MLedd.Name) + case *ledd.BackendWrapperMessage_MSetChannel: + for c, v := range msg.MSetChannel.NewChannelValues { + if pwm, ok := pwmMap[c]; ok { + pwm.SetPercentage(float32(v)/RESOLUTION) + } else { + pwmMap[c] = pca9685.NewPwm(int(c)) + pwmMap[c].SetPercentage(float32(v)/RESOLUTION) + } + } } } } @@ -123,12 +132,15 @@ func main() { pca9685 := device.NewPCA9685(i2cDevice, "PWM Controller", config.Pca9685.MinPulse, config.Pca9685.MaxPulse, log) pca9685.Init() + pwmMap = make(map[int32]*device.Pwm, 1) + conn, err := net.Dial("tcp4", fmt.Sprintf("%s:%d", config.Ledd.Host, config.Ledd.Port)) check(err) ledDaemon = &LedDaemon{ socket:conn, data: make (chan []byte), + name: "?", } go ledDaemon.send() @@ -152,4 +164,11 @@ func main() { ledDaemon.data <- prepareProtobuf(data) <-killSignals + + keys := make([]int, 0, len(pwmMap)) + for c := range pwmMap { + keys = append(keys, int(c)) + } + + pca9685.SwichOff(keys) } diff --git a/proto b/proto index c0b46db..f64cea8 160000 --- a/proto +++ b/proto @@ -1 +1 @@ -Subproject commit c0b46db0cf38cfd192d6a787c0328cbff8db42fb +Subproject commit f64cea8403ed81f8e7aee6558f55b8f98792dac5