59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package board
|
|
|
|
import (
|
|
"errors"
|
|
|
|
MQTT "github.com/eclipse/paho.mqtt.golang"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
var boardCreatorFunctions = make(map[string]BoardCreatorFunction)
|
|
|
|
var AllChannels = make(map[string]Channel)
|
|
|
|
type BoardCreatorFunction func(*viper.Viper, string) *Board
|
|
type onChannelUpdateFunction func(oldValue bool, c Channel)
|
|
|
|
type Board interface {
|
|
Initialize()
|
|
Dump()
|
|
Channel(uint64) Channel
|
|
}
|
|
|
|
type Channel interface {
|
|
Toggle() (bool, error)
|
|
On() error
|
|
Off() error
|
|
ToString() string
|
|
Status() bool
|
|
Parent() Board
|
|
Dump()
|
|
Name() string
|
|
OnBoot() string
|
|
SetOnBoot(string)
|
|
SetMQTTStateTopic(string)
|
|
SetMQTTCommandTopic(string)
|
|
MQTTStateTopic() string
|
|
MQTTCommandTopic() string
|
|
MQTTHandler(MQTT.Client, MQTT.Message)
|
|
AddOnChannelUpdateFunction(string, onChannelUpdateFunction)
|
|
}
|
|
|
|
func RegisterBoardType(name string, fun BoardCreatorFunction) {
|
|
boardCreatorFunctions[name] = fun
|
|
}
|
|
|
|
func CreateBoard(cfg *viper.Viper, key string) (Board, error) {
|
|
var createNewBoard BoardCreatorFunction
|
|
var ok bool
|
|
|
|
boardType := cfg.GetString("type")
|
|
createNewBoard, ok = boardCreatorFunctions[boardType]
|
|
|
|
if !ok {
|
|
return nil, errors.New("unknown board type")
|
|
}
|
|
|
|
return *createNewBoard(cfg, key), nil
|
|
}
|