|
|
|
@@ -29,7 +29,7 @@ type Bus struct {
|
|
|
|
|
Resubscribe *[]json_dataModels.Subscription `yaml:"-" json:"resubscribe"`
|
|
|
|
|
Watchdog context.CancelFunc `yaml:"-" json:"-"`
|
|
|
|
|
Reachable bool `yaml:"-" json:"-"`
|
|
|
|
|
Send chan *DMX `yaml:"-" json:"-"`
|
|
|
|
|
Send bool `yaml:"-" json:"-"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// adds new Art-Net interface to driver port 0 = 6454 (default art-net)
|
|
|
|
@@ -107,8 +107,6 @@ func (b *Bus) Start(log *logging.Logger) error {
|
|
|
|
|
var ctx context.Context
|
|
|
|
|
ctx, b.Watchdog = context.WithCancel(context.Background())
|
|
|
|
|
|
|
|
|
|
b.Send = make(chan *DMX, 1024)
|
|
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
|
var interval time.Duration = 10 * time.Second
|
|
|
|
|
log.Info("bus.Start", fmt.Sprintf("device:%s ip:%s watchdog starting", b.Name, b.Ip))
|
|
|
|
@@ -129,7 +127,7 @@ func (b *Bus) Start(log *logging.Logger) error {
|
|
|
|
|
} else {
|
|
|
|
|
b.Reachable = true
|
|
|
|
|
// send data as a heartbeat for she ArtNet Protocol
|
|
|
|
|
b.Send <- b.Data
|
|
|
|
|
b.Send = true
|
|
|
|
|
log.Info("bus.Start", fmt.Sprintf("device:%s ip:%s watchdog running", b.Name, b.Ip))
|
|
|
|
|
interval = 30 * time.Second
|
|
|
|
|
}
|
|
|
|
@@ -148,17 +146,26 @@ func (b *Bus) Start(log *logging.Logger) error {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
|
defer conn.Close()
|
|
|
|
|
//close send channel
|
|
|
|
|
defer close(b.Send)
|
|
|
|
|
ticker := time.NewTicker(23 * time.Millisecond)
|
|
|
|
|
|
|
|
|
|
for send := range b.Send {
|
|
|
|
|
_, err = conn.Write(NewArtNetPackage(send))
|
|
|
|
|
defer func() {
|
|
|
|
|
b.Send = false
|
|
|
|
|
conn.Close()
|
|
|
|
|
ticker.Stop()
|
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
for range ticker.C {
|
|
|
|
|
if !b.Send {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
b.Send = false
|
|
|
|
|
|
|
|
|
|
_, err = conn.Write(NewArtNetPackage(b.Data))
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Error("bus.Start", err)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
time.Sleep(23 * time.Millisecond)
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
return nil
|
|
|
|
@@ -169,8 +176,8 @@ func (b *Bus) Stop() {
|
|
|
|
|
if b.Watchdog != nil {
|
|
|
|
|
//cancels context
|
|
|
|
|
b.Watchdog()
|
|
|
|
|
//close send channel
|
|
|
|
|
close(b.Send)
|
|
|
|
|
|
|
|
|
|
b.Send = false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|