Este projeto é considerado estável e nenhum desenvolvimento significativo de recursos está planejado atualmente. No entanto, pull requests e problemas são bem-vindos: suporte/manutenção serão fornecidos conforme o tempo permitir.
Esta é uma implementação sACN para golang. É baseado no protocolo E1.31 da ESTA. Uma cópia pode ser encontrada aqui.
Esta não é de forma alguma uma implementação completa ainda, mas pode ser no futuro. Se você quiser ver um pacote DMX completo, consulte o projeto OLA.
Há também alguma documentação em godoc.org. Este projeto suporta módulos Go introduzidos no Go 1.11.
go get github.com/Hundemeier/go-sacn/sacn
A maneira mais simples de receber pacotes sACN é usar sacn.NewReceiverSocket
.
Para obter informações atualizadas, visite o site godoc.org com este repositório.
Você pode interromper o recebimento de pacotes em um receptor via receiver.Stop()
. Observe que pode levar até 2,5s para interromper a recepção e fechar todos os canais. Se você interrompeu um receptor uma vez, pode reiniciá-lo via receiver.Start()
.
Para transmitir dados DMX, você deve inicializar um objeto Transmitter
. Isso lida com todas as ações específicas do protocolo (atualmente não todas). Você pode ativar universos, se desejar enviar dados. Então você pode usar um canal para matrizes de 512 bytes para transmiti-las pela rede.
Existem dois tipos diferentes de endereçamento do receptor: unicast e multicast. Ao usar multicast, observe que é necessário fornecer um endereço de ligação em alguns sistemas operacionais (por exemplo, Windows). Você pode usar ambos ao mesmo tempo e qualquer número de endereços unicast. Para definir se o multicast deve ser usado, chame transmitter.SetMulticast(<universe>, <bool>)
. Você pode definir vários destinos unicast como fatia por meio de transmitter.SetDestinations(<universe>, <[]string>)
. Observe que todos os destinos existentes serão substituídos. Se quiser anexar um destino, você pode usar transmitter.Destination(<universe>)
que retorna uma cópia detalhada dos objetos net.UDPAddr usados.
Exemplos de GoDoc:
Exemplo de transmissor:
package main
import (
"log"
"math/rand"
"time"
"github.com/Hundemeier/go-sacn/sacn"
)
func main () {
//instead of "" you could provide an ip-address that the socket should bind to
trans , err := sacn . NewTransmitter ( "" , [ 16 ] byte { 1 , 2 , 3 }, "test" )
if err != nil {
log . Fatal ( err )
}
//activates the first universe
ch , err := trans . Activate ( 1 )
if err != nil {
log . Fatal ( err )
}
//deactivate the channel on exit
defer close ( ch )
//set a unicast destination, and/or use multicast
trans . SetMulticast ( 1 , true ) //this specific setup will not multicast on windows,
//because no bind address was provided
//set some example ip-addresses
trans . SetDestinations ( 1 , [] string { "192.168.1.13" , "192.168.1.1" })
//send some random data for 10 seconds
for i := 0 ; i < 20 ; i ++ {
ch <- [ 512 ] byte { byte ( rand . Int ()), byte ( i & 0xFF )}
time . Sleep ( 500 * time . Millisecond )
}
}