change send data to dmx as 23 millisecond ticker when new data
This commit is contained in:
@@ -141,9 +141,6 @@ func (d *ArtNetDriver) Connect(ip, id string, port uint) error {
|
||||
// send data to all buses that the send flage is true
|
||||
func (d *ArtNetDriver) SendData() {
|
||||
for _, bus := range d.Buses {
|
||||
if !bus.Reachable {
|
||||
continue
|
||||
}
|
||||
bus.Send <- bus.Data
|
||||
bus.Send = bus.Reachable
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user