...
This commit is contained in:
@@ -3,32 +3,25 @@ package PinControlService
|
||||
import (
|
||||
"errors"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"github.com/stianeikeland/go-rpio"
|
||||
"time"
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
type PinControlService struct {
|
||||
Pins map[string]Pin
|
||||
timer* time.Ticker
|
||||
exit chan bool
|
||||
Pins map[string]Pin
|
||||
timer *time.Ticker
|
||||
exit chan bool
|
||||
OnChangeCallback PinCallback
|
||||
OnCycleCallback PinCallback
|
||||
|
||||
OnCycleCallback PinCallback
|
||||
}
|
||||
|
||||
|
||||
func (p*PinControlService) AddPin(
|
||||
func (p *PinControlService) AddPin(
|
||||
config PinConfig) {
|
||||
pin := NewPin(config)
|
||||
p.Pins[pin.Name] = pin
|
||||
|
||||
}
|
||||
|
||||
func (p*PinControlService) Command(pinName string, command PinCommand) error {
|
||||
func (p *PinControlService) Command(pinName string, command PinCommand) error {
|
||||
if pin, found := p.Pins[pinName]; found == false {
|
||||
return errors.New("pin not configured")
|
||||
} else {
|
||||
@@ -36,25 +29,25 @@ func (p*PinControlService) Command(pinName string, command PinCommand) error {
|
||||
}
|
||||
}
|
||||
|
||||
func (p*PinControlService) Start() {
|
||||
if err := rpio.Open(); err != nil {
|
||||
func (p *PinControlService) Start() {
|
||||
if err := HardwarePinOpen(); err != nil {
|
||||
log.Fatal(err)
|
||||
panic(err)
|
||||
}
|
||||
|
||||
for _,v := range p.Pins {
|
||||
for _, v := range p.Pins {
|
||||
v.Configure()
|
||||
}
|
||||
go p._task()
|
||||
}
|
||||
func (p*PinControlService) Stop() {
|
||||
func (p *PinControlService) Stop() {
|
||||
p.exit <- true
|
||||
}
|
||||
|
||||
func (p*PinControlService) _task() {
|
||||
func (p *PinControlService) _task() {
|
||||
for {
|
||||
select {
|
||||
case <- p.timer.C:
|
||||
case <-p.timer.C:
|
||||
for pinName, pin := range p.Pins {
|
||||
log.Debug("timer event")
|
||||
if pin.Changed() {
|
||||
@@ -69,7 +62,7 @@ func (p*PinControlService) _task() {
|
||||
p.OnCycleCallback(pinName, pin.State())
|
||||
}
|
||||
}
|
||||
case <- p.exit:
|
||||
case <-p.exit:
|
||||
log.Debug("stop timer")
|
||||
p.timer.Stop()
|
||||
return
|
||||
@@ -79,11 +72,10 @@ func (p*PinControlService) _task() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
func NewPinControl(config *PinControlConfig) (*PinControlService, error) {
|
||||
p := PinControlService{
|
||||
Pins: make(map[string]Pin),
|
||||
exit: make(chan bool,1),
|
||||
Pins: make(map[string]Pin),
|
||||
exit: make(chan bool, 1),
|
||||
timer: time.NewTicker(time.Duration(config.PollingTimeMs) * time.Millisecond)}
|
||||
|
||||
for _, pinConfig := range config.GpioPins {
|
||||
@@ -91,4 +83,4 @@ func NewPinControl(config *PinControlConfig) (*PinControlService, error) {
|
||||
}
|
||||
|
||||
return &p, nil
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user