tcnet

package module
v0.0.0-...-82aab5d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 13, 2025 License: MIT Imports: 5 Imported by: 0

README

tcnet

Go Reference

Go implementation of the TCNet protocol.

Disclaimer

This work has not been sponsored or endorsed by Pioneer DJ or Event Imagineering Group. All product and company names are trademarks™ or registered® trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ApplicationCode

type ApplicationCode uint32
const (
	ApplicationCodePublic                     ApplicationCode = 0x0000
	ApplicationCodePioneerDJ                  ApplicationCode = 0x0AA0 // http://www.pioneerdj.com
	ApplicationCodeTCSupplyShowKontrol        ApplicationCode = 0x0AAA // http://www.showkontrol.com
	ApplicationCodeTCSupplyPyrotechnicSystems ApplicationCode = 0x0AAB // http://www.tc-supply.com
	ApplicationCodeTCSupplyRideControlSystems ApplicationCode = 0x0AAC // http://www.tc-supply.com
	ApplicationCodeAvolitesLighting           ApplicationCode = 0x0AB0 // http://www.avolites.com
	ApplicationCodeMALighting                 ApplicationCode = 0x0AB1 // http://www.malighting.com
	ApplicationCodeChamsysLighting            ApplicationCode = 0x0AB3 // http://www.chamsys.co.uk
	ApplicationCodeObsidianControl            ApplicationCode = 0x0AB4 // http://www.obsidiancontrol.com
	ApplicationCodeArkaosSoftware             ApplicationCode = 0x0ABA // http://www.arkaos.net
	ApplicationCodeBLCKBOOKTimeCodeSync       ApplicationCode = 0x0ABB // http://www.timecodesync.com
	ApplicationCodeResolumeSoftware           ApplicationCode = 0x0ABC // http://www.resolume.com
	ApplicationCodeGreenHippo                 ApplicationCode = 0x0ABD // http://www.green-hippo.com
	ApplicationCodeRDShowCockpit              ApplicationCode = 0x0ABE // http://www.showcockpit.com
	ApplicationCodeDisguise                   ApplicationCode = 0x0ABF // http://disguise.one
	ApplicationCodeOrangePI                   ApplicationCode = 0x0ACA // http://orangepi.dmx.org
	ApplicationCodeRedPillVR                  ApplicationCode = 0x0ACB // http://www.redpillvr.com
	ApplicationCodePublic2                    ApplicationCode = 0xFFFF
)
type Header struct {
	// Unique Node ID. When multiple applications/services are running on same IP, this number must be unique.
	NodeID NodeID

	// Protocol version of source that sends the packet. - Example: 1.00 would be: 01 00
	Version flame.Version

	// TCNet Protocol Header (Must be “TCN”)
	Header string

	// Message type of packet.
	MessageType MessageType

	// GW Code of software/machine/source that sends packet. (8 Characters).
	NodeName string

	// Sequence number of packet.
	Sequence uint8

	// Node Type.
	NodeType NodeType

	// Node options. (Bit field).
	NodeOptions NodeOption

	// Time stamp in microseconds that is used to calculate network latency.
	Timestamp uint32
}

type MessageType

type MessageType uint8
const (
	MessageTypeOptIn  MessageType = 002 // Present and keep alive a node into a TCNet network.
	MessageTypeOptOut MessageType = 003 // Notifies other nodes that node leaves network.

	MessageTypeStatus MessageType = 005 // Status packet of current settings on node.

	MessageTypeTimeSync MessageType = 010 // Send and Receive Time Sync Data.

	// Notification messages.
	MessageTypeErrorNotification   MessageType = 013 // Notifies that a request is not handled.
	MessageTypeRequest             MessageType = 020 // Request Data from other Node.
	MessageTypeApplicationSpecific MessageType = 030

	MessageTypeControl      MessageType = 101 // Send and Receive Control Packets to control nodes remotely.
	MessageTypeTextData     MessageType = 128 // Send and Receive Text Data Packets to control nodes remotely.
	MessageTypeKeyboardData MessageType = 133 // Send and Receive Realtime Keyboard Data Packets to control nodes remotely.

	MessageTypeData MessageType = 200 // Updates Metrics Data for Layer.

	MessageTypeFileData MessageType = 204 // Contains Low Res Artwork file (JPEG Format).

	MessageTypeApplicationSpecifcData MessageType = 213 // Application Specific Broadcasted Data.

	MessageTypeTime MessageType = 254 // Constant stream of timing data of layers.
)

type NodeID

type NodeID uint16

type NodeOption

type NodeOption uint16
const (
	// NodeOptionNeedsAuthentication signifies that authentication for extended communication with the node is needed.
	NodeOptionNeedsAuthentication NodeOption = 1 << iota
	// NodeOptionSupportsTCNCM signifies that the node listens to TCNet Control Messages.
	NodeOptionSupportsTCNCM
	// NodeOptionSupportsTCNASDP signifies that the node listens to TCNet Application Specific Data Packet.
	NodeOptionSupportsTCNASDP
	// NodeOptionDND signifies that the node is in do not disturb/sleeping mode. The node will request data itself if needed to avoid traffic.
	NodeOptionDND
)

type NodeType

type NodeType uint8
const (
	NodeTypeAuto NodeType = 1 << iota
	NodeTypeMaster
	NodeTypeSlave
	NodeTypeRepeater
)

type OptInData

type OptInData struct {
	// Number of nodes registered by system.
	NodeCount uint16

	// Listener port of node (Used to receive unicast messages).
	NodeListenerPort uint16

	// Up time of Node in seconds. (!) Must Roll over / Reset every 12 hours.
	Uptime uint16

	// Name of Vendor of Node.
	VendorName string

	// Name of Application/Device (Node).
	NodeName string

	// Major Version of Node.
	NodeVersionMajor uint8

	// Minor Version of Node.
	NodeVersionMinor uint8

	// Bug Version of Node.
	NodeVersionBug uint8
}

Opt-in message data.

In order to correctly implement the Opt-In usage, the following steps are needed.

Step 1: Create a Opt-IN packet and make sure your Node Listeners Port value is correct.

Step 2: Broadcast every 1000ms a Opt-IN packet to port 60000

Step 3: Unicast every 1000ms a Opt-IN packet to each discovered node, targeting that node’s port. This ensures that when a node doesn’t receive broadcast messages, it still can discover your node.

type OptOutData

type OptOutData struct {
	// Number of nodes registered by system.
	NodeCount uint16

	// Listener port of node (Used to receive unicast messages).
	NodeListenerPort uint16
}

Opt-out message data.

TIP: In case of a disconnect of a Master Node in the network, the next master is chosen by looking at all Nodes running as Node Type 1 (Auto Master). The node that has the highest Uptime including Timestamp becomes the new master. This node changes its type to 2 (Master) and starts its services as such.

type Server

type Server struct {
	// contains filtered or unexported fields
}

func NewServer

func NewServer() (*Server, error)

func (*Server) Close

func (s *Server) Close() (err error)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL
JackTT - Gopher 🇻🇳