From 2d63611b66d30546ae2487634ce3c3179619590f Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Thu, 20 Jul 2023 20:07:10 +0100 Subject: [PATCH 01/49] Adding first batch of ksy files These cover with documentation pulled from the spec itself. These are as of yet not tested thoroughly but will gradually be updated with fixes * artaddress * arddiagdata * artipprog * artipprogreply * artpoll * artpollreply --- artnet/ksy/artaddress.ksy | 337 ++++++++++++++++++++++++++++ artnet/ksy/artdiagdata.ksy | 38 ++++ artnet/ksy/artipprog.ksy | 113 ++++++++++ artnet/ksy/artipprogreply.ksy | 70 ++++++ artnet/ksy/artpoll.ksy | 114 ++++++++++ artnet/ksy/artpollreply.ksy | 402 ++++++++++++++++++++++++++++++++++ 6 files changed, 1074 insertions(+) create mode 100644 artnet/ksy/artaddress.ksy create mode 100644 artnet/ksy/artdiagdata.ksy create mode 100644 artnet/ksy/artipprog.ksy create mode 100644 artnet/ksy/artipprogreply.ksy create mode 100644 artnet/ksy/artpoll.ksy create mode 100644 artnet/ksy/artpollreply.ksy diff --git a/artnet/ksy/artaddress.ksy b/artnet/ksy/artaddress.ksy new file mode 100644 index 0000000..4cd2db1 --- /dev/null +++ b/artnet/ksy/artaddress.ksy @@ -0,0 +1,337 @@ +# Development Notes + +meta: + id: artaddress + +doc: | + A Controlleror monitoring device on the network can reprogram numerous controls of a node remotely. This,for example, would allow the lighting console to re-route DMX512 data at remote locations. This is achieved by sending an ArtAddress packet to the Node’s IP address. (The IP address is returned in the ArtPoll packet). The node replies with an ArtPollReply packet. + Fields 5 to 13 contain the data that will be programmed into the node + + Controller: + Receive: No Action + Unicase Transmit: Controller transmits to a specific node IP address. + Broadcast: Not Allowed + + Node: + Receive: Reply by unicasting ArtPollReply + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + + Media Server: + Receive: Reply by unicasting ArtPollReply + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + + - id: opcode + contents: [0x00, 0x60] + doc: OpAddress (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - id: net_switch + type: u1 + doc: | + Bits 14-8 of the 15 bit Port-Address are encoded into the bottom 7 bits of this field. This is used in combination with SubSwitch and SwIn[] or SwOut[] to produce the full universe address. + This value is ignored unless bit 7 is high. i.e. to program a value 0x07, send the value as 0x87. + Send 0x00 to reset this value to the physical switch setting. + + - id: bind_index + type: u1 + doc: | + The BindIndex defines the bound node which originated this packet and is used to uniquely identify the bound node when identical IP addresses are in use. This number represents the order of bound devices. A lower number means closer to root device. + A value of 1 meansroot device. + + - id: short_name + type: str + encoding: utf8 + size: 18 + doc: | + The array represents a nullterminated short name for the Node. The Controlleruses the ArtAddress packet to program this string. Max length is 17 characters plus the null. The Node will ignore this value if the string is null. + This is a fixed length field, although the string it contains can be shorter than the field. + + - id: long_name + type: str + encoding: utf8 + size: 64 + doc: | + The array represents a null terminated long name for the Node. The Controlleruses the ArtAddress packet to program this string. Max length is 63 characters plus the null. The Node will ignore this value if the string is null. + This is a fixed length field, although the string it contains can be shorter than the field. + + - id: sw_in + type: u1 + repeat: expr + repeat-expr: 4 + doc: | + Bits 3-0 of the 15 bit Port-Addressfor a given input port are encoded into the bottom 4 bits of this field. + This is used in combination with NetSwitch and SubSwitch to produce the full universe address. + This value is ignored unless bit 7 is high. i.e. to program a value 0x07, send the value as 0x87. + Send 0x00 to reset this value to the physical switch setting + + - id: sw_out + type: u1 + repeat: expr + repeat-expr: 4 + doc: | + Bits 3-0 of the 15 bit Port-Addressfor a given input port are encoded into the bottom 4 bits of this field. + This is used in combination with NetSwitch and SubSwitch to produce the full universe address. + This value is ignored unless bit 7 is high. i.e. to program a value 0x07, send the value as 0x87. + Send 0x00 to reset this value to the physical switch setting + + - id: sub_switch + type: u1 + doc: | + Bits 7-4 of the 15 bit Port-Address are encodedinto the bottom 4 bits of this field. This is used in combination with NetSwitch and SwIn[] or SwOut[] to produce the full universe address. + This value is ignored unless bit 7 is high. i.e. to program a value 0x07, send the value as 0x87. + Send 0x00 to reset this value to the physical switch setting + + - id: acn_priority + type: u1 + doc: | + Sets the sACN Priority field for sACN generated on all 4 ports encoded into this packet. A value of 255 represents no change. Values of 0 to 200 inclusive are valid. + + - id: command + type: u1 + enum: command + doc: Node configuration command + +enums: + command: + 0: + id: ac_none + doc: No action + 1: + id: ac_cancel_merge + doc: | + If Node is currently in merge mode, cancel merge mode upon receipt of next ArtDmx packet. + See discussion of merge operation + + 2: + id: ac_led_normal + doc: The front panel indicators of the Node operate normally + + 3: + id: ac_led_mute + doc: The front panel indicators of the Node are disabled and switched off + + 4: + id: ac_led_locate + doc: Rapid flashing of the Node's front panel indicators. It is intended as an outlet identifiers for large installations + + 5: + id: ac_reset_rx_flags + doc: | + Resets the Node's Sip, Text, Test and data error flags. + If an output short is being flagged, forces the test to re-run + + 6: + id: ac_analysis_on + doc: Enable analysis and debugging mode + + 7: + id: ac_analysis_off + doc: Diable analysis and debugging mode + + 8: + id: ac_fail_hold + doc: Set the node to hold last state in the event of loss of network data + + 9: + id: ac_fail_zero + doc: Set the node's output to zero in the event of loss of network data + + 10: + id: ac_fail_full + doc: Set the node's output to full in the event of loss of network data + + 11: + id: ac_fail_scene + doc: Set the node's outputs to play the failsafe scene in the event of loss of network data + + 12: + id: ac_fail_record + doc: Record the current output state as the failsafe scene + + 16: + id: ac_merge_ltp_0 + doc: Set DMX Port 0 to Merge in LTP mode. + + 17: + id: ac_merge_ltp_1 + doc: Set DMX Port 1 to Merge in LTP mode. + + 18: + id: ac_merge_ltp_2 + doc: Set DMX Port 2 to Merge in LTP mode. + + 19: + id: ac_merge_ltp_3 + doc: Set DMX Port 3 to Merge in LTP mode. + + 32: + id: ac_direction_tx_0 + doc: Set Port 0 direction to output. + + 33: + id: ac_direction_tx_1 + doc: Set Port 1 direction to output. + + 34: + id: ac_direction_tx_2 + doc: Set Port 2 direction to output. + + 35: + id: ac_direction_tx_3 + doc: Set Port 3 direction to output. + + 48: + id: ac_direction_rx_0 + doc: Set Port 0 direction to input. + + 49: + id: ac_direction_rx_1 + doc: Set Port 1 direction to input. + + 50: + id: ac_direction_rx_2 + doc: Set Port 2 direction to input. + + 51: + id: ac_direction_rx_3 + doc: Set Port 3 direction to input. + + 80: + id: ac_merge_htp_0 + doc: Set DMX Port 0 to Merge in HTP (default) mode. + + 81: + id: ac_merge_htp_1 + doc: Set DMX Port 1 to Merge in HTP (default) mode. + + 82: + id: ac_merge_htp_2 + doc: Set DMX Port 2 to Merge in HTP (default) mode. + + 83: + id: ac_merge_htp_3 + doc: Set DMX Port 3 to Merge in HTP (default) mode. + + 96: + id: ac_art_net_sel_0 + doc: Set DMX Port 0 to output both DMX512 and RDM packets from the Art-Net protocol (default). + + 97: + id: ac_art_net_sel_1 + doc: Set DMX Port 1 to output both DMX512 and RDM packetsfrom the Art-Net protocol (default). + + 98: + id: ac_art_net_sel_2 + doc: Set DMX Port 2 to output both DMX512 and RDM packets from the Art-Net protocol (default). + + 99: + id: ac_art_net_sel_3 + doc: Set DMX Port 3 to output both DMX512 and RDM packets from the Art-Net protocol (default). + + 112: + id: ac_acn_sel_0 + doc: Set DMX Port 0 to output DMX512 data from the sACNprotocol and RDM data from the Art-Net protocol. + + 113: + id: ac_acn_sel_1 + doc: Set DMX Port 1 to output DMX512 data from the sACN protocol and RDM data from the Art-Net protocol. + + 114: + id: ac_acn_sel_2 + doc: Set DMX Port 2 to output DMX512 data from the sACN protocol and RDM data from the Art-Net protocol. + + 115: + id: ac_acn_sel_3 + doc: Set DMX Port 3 to output DMX512 data from the sACN protocol and RDM data from the Art-Net protocol. + + 144: + id: ac_clear_op_0 + doc: Clear DMX Output buffer for Port 0 + + 145: + id: ac_clear_op_1 + doc: Clear DMX Output buffer for Port 1 + + 146: + id: ac_clear_op_2 + doc: Clear DMX Output buffer for Port 2 + + 147: + id: ac_clear_op_3 + doc: Clear DMX Output buffer for Port 3 + + 160: + id: ac_style_delta_0 + doc: Set output style to delta mode (DMX frame triggered by ArtDmx) for Port 0 + + 161: + id: ac_style_delta_1 + doc: Set output style to delta mode (DMX frame triggered by ArtDmx) for Port 1 + + 162: + id: ac_style_delta_2 + doc: Set output style to delta mode (DMX frame triggered by ArtDmx) for Port 2 + + 163: + id: ac_style_delta_3 + doc: Set output style to delta mode (DMX frame triggered by ArtDmx) for Port 3 + + 176: + id: ac_style_const_0 + doc: Set output style to constant mode (DMX output is continuous) for Port 0 + + 177: + id: ac_style_const_1 + doc: Set output style to constant mode (DMX output is continuous) for Port 1 + + 178: + id: ac_style_const_2 + doc: Set output style to constant mode (DMX output is continuous) for Port 2 + + 179: + id: ac_style_const_3 + doc: Set output style to constant mode (DMX output is continuous) for Port 3 + + 192: + id: ac_rdm_enable_0 + doc: Enable RDM for Port 0 + + 193: + id: ac_rdm_enable_1 + doc: Enable RDM for Port 1 + + 194: + id: ac_rdm_enable_2 + doc: Enable RDM for Port 2 + + 195: + id: ac_rdm_enable_3 + doc: Enable RDM for Port 3 + + 208: + id: ac_rdm_disable_0 + doc: Disable RDM for Port 0 + + 209: + id: ac_rdm_disable_1 + doc: Disable RDM for Port 1 + + 210: + id: ac_rdm_disable_2 + doc: Disable RDM for Port 2 + + 211: + id: ac_rdm_disable_3 + doc: Disable RDM for Port 3 diff --git a/artnet/ksy/artdiagdata.ksy b/artnet/ksy/artdiagdata.ksy new file mode 100644 index 0000000..568c901 --- /dev/null +++ b/artnet/ksy/artdiagdata.ksy @@ -0,0 +1,38 @@ +# Development Notes + +meta: + id: artdiagdata + +doc: | + ArtDiagData is a general purpose packet that allows a node or controller to send diagnostics data for display. + The ArtPoll packet sent by controllers defines the destination to which these messages should be sent. + + Controller: + Receive: Application specific + Unicase Transmit: As defined by ArtPoll (Allowed, with Targeted Mode) + Broadcast: As defined by ArtPoll (Allowed) + + Node: + Receive: No Action + Unicast Transmit: As defined by ArtPoll (Allowed, with Targeted Mode) + Broadcast: As defined by ArtPoll (Allowed) + + Media Server: + Receive: No Action + Unicast Transmit: As defined by ArtPoll (Allowed, with Targeted Mode) + Broadcast: As defined by ArtPoll (Allowed) + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + + - id: opcode + contents: [0x00, 0x60] + doc: OpAddress (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) diff --git a/artnet/ksy/artipprog.ksy b/artnet/ksy/artipprog.ksy new file mode 100644 index 0000000..7f64c2f --- /dev/null +++ b/artnet/ksy/artipprog.ksy @@ -0,0 +1,113 @@ +# Development Notes +# * TODO: prog_ip, prog_subnet_mask, prog_port, prog_default_gateway can all be conditional on their entry in command however this is not implemented right now + +meta: + id: artipprog + +doc: | + The ArtIpProg packet allows the IP settings of a Node to be reprogrammed. + The ArtIpProg packet is sent by a Controllerto the private address of a Node. If the Node supports remote programming of IP address, it will respond with an ArtIpProgReply packet. In all scenarios, the ArtIpProgReply is sent to the private address of the sender. + + Controller: + Receive: No Action + Unicase Transmit: Controller transmits to a specific node IP address + Broadcast: Not Allowed + + Node: + Receive: Reply with ArtIpProgReply + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + + Media Server: + Receive: Reply with ArtIpProgReply + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + + - id: opcode + contents: [0x00, 0xf8] + doc: OpIpProg (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - size: 2 + doc: Filler + + - id: command + type: command + doc: Actions this packet as follows + + - size: 1 + doc: Filler (set to zero for word alignment) + + - id: prog_ip + type: u4be + doc: IP Address to be programmed into Node if enabled by Command Field + + - id: prog_subnet_mask + type: u4be + doc: Subnet mask to be programmed into Node if enabled by Command Field + + - id: prog_port + type: u2be + doc: Port (deprecated) + + - id: prog_default_gateway + type: u4be + doc: Default Gateway to be programmed into Node if enabled by Command field + + - size: 4 + doc: Spare, transmit as 0, receivers should not test + +types: + command: + seq: + - id: enable_programming + type: b1 + doc: Set to enable any programming + + - id: enable_dhcp + type: b1 + doc: | + Set to enable DHCP (if set, ignore the lower bits - ) + Note: the following values are not skipped if set as the values are still present + + - type: b1 + + - type: b5 + if: enable_dhcp == true + doc: Used to skip 5 bits if enable_dhcp is set to true + + - id: program_default_gateway + type: b1 + doc: Program Default gateway + if: enable_dhcp == false + + - id: return_all_parameters + type: b1 + doc: Set to return all three parameters to default + if: enable_dhcp == false + + - id: program_ip + type: b1 + doc: Program IP Address + if: enable_dhcp == false + + - id: program_subnet_mask + type: b1 + doc: Program Subnet Mask + if: enable_dhcp == false + + - id: program_port + type: b1 + doc: Program port + if: enable_dhcp == false + diff --git a/artnet/ksy/artipprogreply.ksy b/artnet/ksy/artipprogreply.ksy new file mode 100644 index 0000000..f6e0ba9 --- /dev/null +++ b/artnet/ksy/artipprogreply.ksy @@ -0,0 +1,70 @@ +# Development Notes + +meta: + id: artipprogreply + +doc: | + The ArtIpProgReply packet is issued by a Node in response to an ArtIpProg packet. Nodes that do not support remote programming of IP address do not reply to ArtIpProg packets. In all scenarios, the ArtIpProgReplyis sent to the private address of the sender. + + Controller: + Receive: No Action + Unicase Transmit: Not Allowed + Broadcast: Not Allowed + + Node: + Receive: No Action + Unicast Transmit: Transmits to specific Controller IP address + Broadcast: Not Allowed + + Media Server: + Receive: No Action + Unicast Transmit: Transmits to specific Controller IP address + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + + - id: opcode + contents: [0x00, 0xf9] + doc: OpIpProgReply (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - size: 4 + doc: Filler (pad length to match ArtPoll and ArtIpProg) + + - id: prog_ip + type: u4be + doc: IP Address of node + + - id: prog_subnet_mask + type: u4be + doc: Subnet mask of node + + - id: prog_port + type: u2be + doc: Port (deprecated) + + - type: b1 + + - id: dhcp_enabled + type: b1 + doc: DHCP enabled + + - type: b6 + + - size: 1 + doc: Spare2 transmitted as zero, receivers don't test + + - id: prog_default_gateway + type: u4be + doc: Default Gateway of Node + + - size: 2 + doc: Spare, transmit as 0, receivers should not test diff --git a/artnet/ksy/artpoll.ksy b/artnet/ksy/artpoll.ksy new file mode 100644 index 0000000..374e8c0 --- /dev/null +++ b/artnet/ksy/artpoll.ksy @@ -0,0 +1,114 @@ +meta: + id: artpoll + +doc: | + The ArtPoll packet is used to discover the presence of other Controllers, Nodes and Media Servers. The ArtPoll packet can be sent by any device, but is usually only sent by the Controller. Both Controllers and Nodes respond to the packet. + A Controller broadcasts an ArtPoll packet to IP address 2.255.255.255 (sub-net mask 255.0.0.0) at UDP port 0x1936, this is the Directed Broadcast address. + The Controller may assume amaximum timeout of 3 seconds between sending ArtPoll and receiving all ArtPollReply packets. If the Controller does not receive a response in this time, it should consider the Node to have disconnected. + The Controller that broadcasts an ArtPoll should also reply to its own message (by unicast) with an ArtPollReply. It is a requirement of Art-Net that all controllers broadcast an ArtPoll every 2.5 to 3 seconds. This ensures that any network devices can easily detect a disconnect. + + ## Multiple Controllers + + Art-Net allows and supports multiple controllers on a network. When there are multiple controllers, Nodes will receive ArtPolls from different controllers which may contain conflicting diagnostics requirements. This is resolved as follows: + If any controller requests diagnostics, the node will send diagnostics. (ArtPoll->Flags->2). + If there are multiple controllersrequesting diagnostics, diagnostics shall be broadcast. (Ignore ArtPoll->Flags->3). + The lowest minimum value of Priority shall be used. (Ignore ArtPoll->DiagPriority). + + ## Targeted Mode + + Targeted mode allows the ArtPoll to define a range of Port-Addresses. Nodes will only reply to the ArtPoll is they are subscribed to a Port-Address that is inclusively in the range TargetPortAddressBottom to TargetPortAddressTop. The bit field ArtPoll->Flags->5 is used to enable Targeted Mode. + + ## Minimum Packet Length + + Consumers of ArtPoll shall accept as valid a packet of length 12 octets or larger. Any missing fields are assumed to be zero. This requirement is due to the fact that the length of ArtPoll has increased over the life of the protocol. + + All: + Receive: Send ArtPollReply + Unicast Transmit: Allowed, with Targeted Mode. + Directed Broadcast: Controller broadcasts this packet to poll all Controllers and Nodes on the network + Limited Broadcast: Not recommended + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 + + - id: opcode + contents: [0x00, 0x20] + doc: The OpCode defines the class of data following ArtPoll within this UDP packet. Transmitted little endian. Set to OpPoll + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - id: flags + type: flags + doc: Set behaviour of Node + if: _io.size >= 13 + + - id: diag_priority + type: u1 + enum: priority_codes + if: _io.size >= 14 + + - id: target_port + type: u4be + if: _io.size >= 18 and flags.targeted_mode + +types: + flags: + seq: + - type: b2 + doc: Unused, transmitted as zero, do not test upon receipt + + - id: targeted_mode + type: b1 + doc: Enable Targeted Mode + + - id: vlc_transmission + type: b1 + doc: Enable VLC transmission + + - id: diagnostic_unicast + type: b1 + if: send_diagnostics == true + doc: Diagnostic messages are unicast + + - type: b1 + if: send_diagnostics == false + doc: (Ensuring that one bit is consumed) + + - id: send_diagnostics + type: b1 + doc: Send me diagnostic messages + + - id: artpollreply_on_change + type: b1 + doc: Send ArtPollReply whenever Node conditions change. This selection allows the Controller to be informed of changes without the need to continously poll + + - type: b1 + doc: Deprecated + +enums: + priority_codes: + 16: + id: dp_low + doc: Low priority message + + 64: + id: dp_med + doc: Medium priority message + + 128: + id: dp_high + doc: High priority message + + 224: + id: dp_critical + doc: Critical priority message + + 240: + id: dp_volatile + doc: Volatile message. Messages of this type are displayed on a single line in the DMX-Workshop diagnostics display. All other types are displayed in a list box diff --git a/artnet/ksy/artpollreply.ksy b/artnet/ksy/artpollreply.ksy new file mode 100644 index 0000000..c5b108f --- /dev/null +++ b/artnet/ksy/artpollreply.ksy @@ -0,0 +1,402 @@ +meta: + id: artpollreply + +doc: | + A device, in response to a Controller's ArtPoll, sends the ArtPollReply. The device should wait for a random delay of up to 1s before sending the reply. This mechanism is intended to reduce packet bunching when scaling up to very large systems. + + ## Minimum Packet Length + + Consumers of ArtPollReplyshall accept as valid a packet of length 198(highlighted in grey below) octets or larger.Any missing fields are assumed to be zero. This requirement is due to the fact that the length of ArtPollReply has increased over the life of the protocol. + + All: + Receive: No Art-Net action + Unicast Transmit: Allowed + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 + + - id: opcode + contents: [0x00, 0x21] + doc: OpPollReply (Transmitted little endian) + + - id: ip_address + type: u4be + doc: The Node's IP address.When binding is implemented, bound nodes may share the rootnode's IP Address and the BindIndex is used to differentiate the nodes. + + - id: port + contents: [0x36, 0x19] + doc: The port is always 0x1936 (transmitted little endian) + + - id: version_info + type: u2be + doc: Node's firmware revision number. The controller should only use this field to decide if a firmware udpate should proceed. The convention is that a higher number is a more recent release of firmware + + - id: net_switch + type: u1 + doc: Bits 14-8 of the 15 bit Port-Address are encoded into the bottom 7 bits of this field. This is used in combination with SubSwitch and SwIn[] or SwOut[] to produce the full universe address + + - id: sub_switch + type: u1 + doc: Bits 7-4 of the 15 bit Port-Address are encoded into the bottom 4 bits of this field. This is used in combination with NetSwitch and SwIn[] or SwOut[] to produce the full universe address. + + - id: oem + type: u2be + doc: The Oem word unique identifies the product + + - id: ubea_version + type: u1 + doc: This field contains the firmware version of the User Bios Extension Area (UBEA). If the UBEA is not programmed, this field contains zero + + - id: status_1 + type: status_1 + doc: General status register containing bit fields + + - id: esta_manufacturer + type: u2le + doc: | + The ESTA manufacturer code. These codes are used to represent equipment manufacturer. They are assigned by ESTA. + This field can be interpreted as two ASCII octets representing the manufacturer initials. + + - id: short_name + type: str + encoding: utf8 + size: 18 + doc: | + The array represents a null terminated short name for the Node. The Controller uses the ArtAddress packet to program this string. + Max length is 17 characters plus the null. + This is a fixed length field, although the string it contains can be shorter than the field. + + - id: long_name + type: str + encoding: utf8 + size: 64 + doc: | + The array represents a null terminated long name for the Node. The Controller uses the ArtAddress packet to program this string. + Max length is 63 characters plus the null. + This is a fixed length field, although the string it contains can be shorter than the field. + + - id: node_report + type: str + encoding: utf8 + size: 64 + doc: | + The array is a textual report of the Node's operating status or operational errors. It is primarily intended for 'engineering' data rather than 'end user' data. The field is formatted as: “#xxxx [yyyy..] zzzzz…” + xxxx is a hex status code as defined in Table 3. + yyyy is a decimal counter that increments every time the Node sends an ArtPollResponse. This allows the controllerto monitor event changes in the Node. + zzzz is an English text string defining the status. + This is a fixed length field, although the string it contains can be shorter than the field. + + - id: num_ports + type: u2be + doc: | + The number of input or output ports. If number of inputs is not equal to number of outputs, the largest value is taken. + Zero is a legal value if no input or output ports are implemented. The maximum value is 4. + Nodes can ignore this field as the information is implicit in PortTypes[]. + + - id: port_types + type: port_type + repeat: expr + repeat-expr: 4 + doc: This array defines the operation and protocol of each channel. (A product with 4 inputs and 4 outputs would report 0xc0, 0xc0, 0xc0, 0xc0). The array length is fixed, independent of the number of inputs or outputs physically available on the Node. + + - id: good_inputs + type: good_input + repeat: expr + repeat-expr: 4 + doc: This array defines output status of the node + + - id: good_outputs + type: good_output + repeat: expr + repeat-expr: 4 + doc: This array defines output status of the node + + - id: sw_in + type: u4be + doc: Bits 3-0 of the 15 bit Port-Addressfor each of the 4 possible input ports are encoded into the low nibble. + + - id: sw_out + type: u4be + doc: Bits 3-0 of the 15 bit Port-Addressfor each of the 4 possible output ports are encoded into the low nibble. + + - id: acn_priority + type: u1 + doc: The sACNpriority value that will be used when any received DMX is converted to sACN. + + - id: sw_macro + type: u1 + doc: | + If the Node supports macro key inputs, this byte represents the trigger values. The Node is responsible for 'debouncing' inputs. When the ArtPollReplyis set to transmit automatically, (Flags Bit 1), the ArtPollReply will be sent on both key down and key up events. However, the Controllershould not assume that only one bit position has changed. + The Macro inputs are used for remote event triggering or cueing. + Bit fields are active high. + + - id: sw_remote + type: u1 + doc: | + If the Node supports remote trigger inputs, this byte represents the trigger values. The Node is responsible for 'debouncing' inputs. When the ArtPollReply is set to transmit automatically, (Flags Bit 1), the ArtPollReply will be sent on both key down and key up events. However, the Controllershould not assume that only one bit position has changed. + The Remote inputs are used for remote event triggering or cueing. + Bit fields are active high. + + - size: 3 + doc: Spare, not used, set to 0 + if: _io.size >= 200 + + - id: style + type: u1 + enum: style_codes + doc: The Style code defines the equipment style of the device. + if: _io.size >= 201 + + - id: mac + size: 6 + doc: MAC Address of the node, set to 0 if node cannot supply this information + if: _io.size >= 207 + + - id: bind_ip + type: u4be + doc: If this unit is part of a larger or modular product, this is the IP of the root device. + if: _io.size >= 211 + + - id: bind_index + type: u1 + doc: This number represents the order of bound devices. A lower number means closer to root device. A value of 0 or 1 means root device. + if: _io.size >= 212 + + - id: status_2 + type: status_2 + doc: General status register containing bit fields + if: _io.size >= 213 + + - id: good_output_bs + type: good_output_b + repeat: expr + repeat-expr: 4 + doc: This array defines output status of the node + if: _io.size >= 217 + + - id: status_3 + type: status_3 + doc: General status register containing bit fields + if: _io.size >= 218 + + - id: default_responder_uuid + size: 6 + doc: RDMnet & LLRP Default Responder UID + if: _io.size >= 224 + +types: + status_1: + seq: + - id: indicator_status + type: b2 + enum: indicator_state + doc: Indicator state (unknown, locate, mute or normal) + + - id: port_address_authority + type: b2 + enum: papa + doc: Port Address Programming Authority + + - type: b1 + doc: Not implemented, transmit as zero, receivers do not test + + - id: booted_from_rom + type: b1 + doc: Booted from ROM instead of normal firmware boot (from flash). Nodes that do not support dual boot clear this field (false) + + - id: rdm_supported + type: b1 + doc: Device is capable of Remote Device Management (RDM) + + - id: ubea_present + type: b1 + doc: UBEA is present in this packet + + status_2: + seq: + - id: supports_web_config + type: b1 + doc: Product supports web browser configuration + + - id: ip_dhcp_configured + type: b1 + doc: Node's IP is DHCP configured instead of manually configured + + - id: supports_dhcp + type: b1 + doc: Node is DHCP capable + + - id: supports_15b_port_address + type: b1 + doc: Node supports 15-bit port addresses (instead of 8-bit port addresses from Art-Net II) + + - id: supports_sacn_artnet_switching + type: b1 + doc: Node is able to switch between Art-Net and sACN + + - id: squawking + type: b1 + doc: Node is squawking + + - id: supports_artcommand_switch + type: b1 + doc: Node supports switching of output style using ArtCommand + + - id: supports_artcommand_rdm + type: b1 + doc: Node supports control of RDM using ArtCommand + + status_3: + seq: + - id: failsafe + type: b2 + enum: failsafe_state + doc: Failsafe state meaning how the node behaves in the event that network data is lost + + - id: supports_failover + type: b1 + doc: Node supports fail-over + + - id: supports_llrp + type: b1 + doc: Node supports LLRP + + - id: supports_io_switching + type: b1 + doc: Node supports switching ports between input and output (PortTypes[] shows the current direction) + + - type: b3 + doc: Not used, set to 0 + + port_type: + seq: + - id: outputs_artnet + type: b1 + doc: This channel can output data from the Art-Net network + + - id: inputs_artnet + type: b1 + doc: This channel can input data onto the Art-Net network + + - id: format + type: u1 + enum: port_type_format + doc: The format of data this port interacts with + + good_input: + seq: + - id: data_received + type: b1 + doc: Data has been received on this port + + - id: includes_test + type: b1 + doc: This channel includes DMX512 test packets + + - id: includes_sips + type: b1 + doc: This channel includes DMX512 SIP's packets + + - id: includes_text + type: b1 + doc: This channel includes DMX512 text packets + + - id: disabled + type: b1 + doc: Input is disabled + + - id: errors_detected + type: b1 + doc: Receive errors have been detected on this input + + - type: b2 + doc: Unused and transmitted as zero + + good_output: + seq: + - id: data_transmitted + type: b1 + doc: Data has been transmitted on this output + + - id: includes_test + type: b1 + doc: This channel includes DMX512 test packets + + - id: includes_sips + type: b1 + doc: This channel includes DMX512 SIP's packets + + - id: includes_text + type: b1 + doc: This channel includes DMX512 text packets + + - id: merging + type: b1 + doc: Otuput is merging Art-Net data + + - id: dmx_output_short + type: b1 + doc: DMX output short detected on power up + + - id: merge_ltp + type: b1 + doc: Merge mode is LTP + + - id: transmit_sacn + type: b1 + doc: Output is selected to transmit sACN + + good_output_b: + seq: + - id: rdm_disabled + type: b1 + doc: RDM is disabled on this output + + - id: output_continuous + type: b1 + doc: Output style is continuous instead of delta + + - type: b6 + doc: Not used, set to zero + +enums: + port_type_format: + 0: dmx512 + 1: midi + 2: avab + 3: colortran_cmx + 4: adb625 + 5: art_net + 6: dali + + failsafe_state: + 0: hold_last + 1: zero + 2: full + 3: safe_scene + + indicator_state: + 0: unknown + 1: locate + 2: mute + 3: normal + + papa: + 0: unknown + 1: front_panel + 2: network + 3: invalid + + style_codes: + 0: st_node + 1: st_controller + 2: st_media + 3: st_route + 4: st_backup + 5: st_config + 6: st_visual \ No newline at end of file From 8f87b43f5dd21d422d9c1b9f2d2f69c4f06c1e11 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Thu, 20 Jul 2023 20:07:10 +0100 Subject: [PATCH 02/49] Adding first batch of ksy files These cover with documentation pulled from the spec itself. These are as of yet not tested thoroughly but will gradually be updated with fixes * artaddress * arddiagdata * artipprog * artipprogreply * artpoll * artpollreply --- artnet/ksy/artaddress.ksy | 337 ++++++++++++++++++++++++++++ artnet/ksy/artdiagdata.ksy | 38 ++++ artnet/ksy/artipprog.ksy | 113 ++++++++++ artnet/ksy/artipprogreply.ksy | 70 ++++++ artnet/ksy/artpoll.ksy | 114 ++++++++++ artnet/ksy/artpollreply.ksy | 402 ++++++++++++++++++++++++++++++++++ 6 files changed, 1074 insertions(+) create mode 100644 artnet/ksy/artaddress.ksy create mode 100644 artnet/ksy/artdiagdata.ksy create mode 100644 artnet/ksy/artipprog.ksy create mode 100644 artnet/ksy/artipprogreply.ksy create mode 100644 artnet/ksy/artpoll.ksy create mode 100644 artnet/ksy/artpollreply.ksy diff --git a/artnet/ksy/artaddress.ksy b/artnet/ksy/artaddress.ksy new file mode 100644 index 0000000..4cd2db1 --- /dev/null +++ b/artnet/ksy/artaddress.ksy @@ -0,0 +1,337 @@ +# Development Notes + +meta: + id: artaddress + +doc: | + A Controlleror monitoring device on the network can reprogram numerous controls of a node remotely. This,for example, would allow the lighting console to re-route DMX512 data at remote locations. This is achieved by sending an ArtAddress packet to the Node’s IP address. (The IP address is returned in the ArtPoll packet). The node replies with an ArtPollReply packet. + Fields 5 to 13 contain the data that will be programmed into the node + + Controller: + Receive: No Action + Unicase Transmit: Controller transmits to a specific node IP address. + Broadcast: Not Allowed + + Node: + Receive: Reply by unicasting ArtPollReply + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + + Media Server: + Receive: Reply by unicasting ArtPollReply + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + + - id: opcode + contents: [0x00, 0x60] + doc: OpAddress (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - id: net_switch + type: u1 + doc: | + Bits 14-8 of the 15 bit Port-Address are encoded into the bottom 7 bits of this field. This is used in combination with SubSwitch and SwIn[] or SwOut[] to produce the full universe address. + This value is ignored unless bit 7 is high. i.e. to program a value 0x07, send the value as 0x87. + Send 0x00 to reset this value to the physical switch setting. + + - id: bind_index + type: u1 + doc: | + The BindIndex defines the bound node which originated this packet and is used to uniquely identify the bound node when identical IP addresses are in use. This number represents the order of bound devices. A lower number means closer to root device. + A value of 1 meansroot device. + + - id: short_name + type: str + encoding: utf8 + size: 18 + doc: | + The array represents a nullterminated short name for the Node. The Controlleruses the ArtAddress packet to program this string. Max length is 17 characters plus the null. The Node will ignore this value if the string is null. + This is a fixed length field, although the string it contains can be shorter than the field. + + - id: long_name + type: str + encoding: utf8 + size: 64 + doc: | + The array represents a null terminated long name for the Node. The Controlleruses the ArtAddress packet to program this string. Max length is 63 characters plus the null. The Node will ignore this value if the string is null. + This is a fixed length field, although the string it contains can be shorter than the field. + + - id: sw_in + type: u1 + repeat: expr + repeat-expr: 4 + doc: | + Bits 3-0 of the 15 bit Port-Addressfor a given input port are encoded into the bottom 4 bits of this field. + This is used in combination with NetSwitch and SubSwitch to produce the full universe address. + This value is ignored unless bit 7 is high. i.e. to program a value 0x07, send the value as 0x87. + Send 0x00 to reset this value to the physical switch setting + + - id: sw_out + type: u1 + repeat: expr + repeat-expr: 4 + doc: | + Bits 3-0 of the 15 bit Port-Addressfor a given input port are encoded into the bottom 4 bits of this field. + This is used in combination with NetSwitch and SubSwitch to produce the full universe address. + This value is ignored unless bit 7 is high. i.e. to program a value 0x07, send the value as 0x87. + Send 0x00 to reset this value to the physical switch setting + + - id: sub_switch + type: u1 + doc: | + Bits 7-4 of the 15 bit Port-Address are encodedinto the bottom 4 bits of this field. This is used in combination with NetSwitch and SwIn[] or SwOut[] to produce the full universe address. + This value is ignored unless bit 7 is high. i.e. to program a value 0x07, send the value as 0x87. + Send 0x00 to reset this value to the physical switch setting + + - id: acn_priority + type: u1 + doc: | + Sets the sACN Priority field for sACN generated on all 4 ports encoded into this packet. A value of 255 represents no change. Values of 0 to 200 inclusive are valid. + + - id: command + type: u1 + enum: command + doc: Node configuration command + +enums: + command: + 0: + id: ac_none + doc: No action + 1: + id: ac_cancel_merge + doc: | + If Node is currently in merge mode, cancel merge mode upon receipt of next ArtDmx packet. + See discussion of merge operation + + 2: + id: ac_led_normal + doc: The front panel indicators of the Node operate normally + + 3: + id: ac_led_mute + doc: The front panel indicators of the Node are disabled and switched off + + 4: + id: ac_led_locate + doc: Rapid flashing of the Node's front panel indicators. It is intended as an outlet identifiers for large installations + + 5: + id: ac_reset_rx_flags + doc: | + Resets the Node's Sip, Text, Test and data error flags. + If an output short is being flagged, forces the test to re-run + + 6: + id: ac_analysis_on + doc: Enable analysis and debugging mode + + 7: + id: ac_analysis_off + doc: Diable analysis and debugging mode + + 8: + id: ac_fail_hold + doc: Set the node to hold last state in the event of loss of network data + + 9: + id: ac_fail_zero + doc: Set the node's output to zero in the event of loss of network data + + 10: + id: ac_fail_full + doc: Set the node's output to full in the event of loss of network data + + 11: + id: ac_fail_scene + doc: Set the node's outputs to play the failsafe scene in the event of loss of network data + + 12: + id: ac_fail_record + doc: Record the current output state as the failsafe scene + + 16: + id: ac_merge_ltp_0 + doc: Set DMX Port 0 to Merge in LTP mode. + + 17: + id: ac_merge_ltp_1 + doc: Set DMX Port 1 to Merge in LTP mode. + + 18: + id: ac_merge_ltp_2 + doc: Set DMX Port 2 to Merge in LTP mode. + + 19: + id: ac_merge_ltp_3 + doc: Set DMX Port 3 to Merge in LTP mode. + + 32: + id: ac_direction_tx_0 + doc: Set Port 0 direction to output. + + 33: + id: ac_direction_tx_1 + doc: Set Port 1 direction to output. + + 34: + id: ac_direction_tx_2 + doc: Set Port 2 direction to output. + + 35: + id: ac_direction_tx_3 + doc: Set Port 3 direction to output. + + 48: + id: ac_direction_rx_0 + doc: Set Port 0 direction to input. + + 49: + id: ac_direction_rx_1 + doc: Set Port 1 direction to input. + + 50: + id: ac_direction_rx_2 + doc: Set Port 2 direction to input. + + 51: + id: ac_direction_rx_3 + doc: Set Port 3 direction to input. + + 80: + id: ac_merge_htp_0 + doc: Set DMX Port 0 to Merge in HTP (default) mode. + + 81: + id: ac_merge_htp_1 + doc: Set DMX Port 1 to Merge in HTP (default) mode. + + 82: + id: ac_merge_htp_2 + doc: Set DMX Port 2 to Merge in HTP (default) mode. + + 83: + id: ac_merge_htp_3 + doc: Set DMX Port 3 to Merge in HTP (default) mode. + + 96: + id: ac_art_net_sel_0 + doc: Set DMX Port 0 to output both DMX512 and RDM packets from the Art-Net protocol (default). + + 97: + id: ac_art_net_sel_1 + doc: Set DMX Port 1 to output both DMX512 and RDM packetsfrom the Art-Net protocol (default). + + 98: + id: ac_art_net_sel_2 + doc: Set DMX Port 2 to output both DMX512 and RDM packets from the Art-Net protocol (default). + + 99: + id: ac_art_net_sel_3 + doc: Set DMX Port 3 to output both DMX512 and RDM packets from the Art-Net protocol (default). + + 112: + id: ac_acn_sel_0 + doc: Set DMX Port 0 to output DMX512 data from the sACNprotocol and RDM data from the Art-Net protocol. + + 113: + id: ac_acn_sel_1 + doc: Set DMX Port 1 to output DMX512 data from the sACN protocol and RDM data from the Art-Net protocol. + + 114: + id: ac_acn_sel_2 + doc: Set DMX Port 2 to output DMX512 data from the sACN protocol and RDM data from the Art-Net protocol. + + 115: + id: ac_acn_sel_3 + doc: Set DMX Port 3 to output DMX512 data from the sACN protocol and RDM data from the Art-Net protocol. + + 144: + id: ac_clear_op_0 + doc: Clear DMX Output buffer for Port 0 + + 145: + id: ac_clear_op_1 + doc: Clear DMX Output buffer for Port 1 + + 146: + id: ac_clear_op_2 + doc: Clear DMX Output buffer for Port 2 + + 147: + id: ac_clear_op_3 + doc: Clear DMX Output buffer for Port 3 + + 160: + id: ac_style_delta_0 + doc: Set output style to delta mode (DMX frame triggered by ArtDmx) for Port 0 + + 161: + id: ac_style_delta_1 + doc: Set output style to delta mode (DMX frame triggered by ArtDmx) for Port 1 + + 162: + id: ac_style_delta_2 + doc: Set output style to delta mode (DMX frame triggered by ArtDmx) for Port 2 + + 163: + id: ac_style_delta_3 + doc: Set output style to delta mode (DMX frame triggered by ArtDmx) for Port 3 + + 176: + id: ac_style_const_0 + doc: Set output style to constant mode (DMX output is continuous) for Port 0 + + 177: + id: ac_style_const_1 + doc: Set output style to constant mode (DMX output is continuous) for Port 1 + + 178: + id: ac_style_const_2 + doc: Set output style to constant mode (DMX output is continuous) for Port 2 + + 179: + id: ac_style_const_3 + doc: Set output style to constant mode (DMX output is continuous) for Port 3 + + 192: + id: ac_rdm_enable_0 + doc: Enable RDM for Port 0 + + 193: + id: ac_rdm_enable_1 + doc: Enable RDM for Port 1 + + 194: + id: ac_rdm_enable_2 + doc: Enable RDM for Port 2 + + 195: + id: ac_rdm_enable_3 + doc: Enable RDM for Port 3 + + 208: + id: ac_rdm_disable_0 + doc: Disable RDM for Port 0 + + 209: + id: ac_rdm_disable_1 + doc: Disable RDM for Port 1 + + 210: + id: ac_rdm_disable_2 + doc: Disable RDM for Port 2 + + 211: + id: ac_rdm_disable_3 + doc: Disable RDM for Port 3 diff --git a/artnet/ksy/artdiagdata.ksy b/artnet/ksy/artdiagdata.ksy new file mode 100644 index 0000000..568c901 --- /dev/null +++ b/artnet/ksy/artdiagdata.ksy @@ -0,0 +1,38 @@ +# Development Notes + +meta: + id: artdiagdata + +doc: | + ArtDiagData is a general purpose packet that allows a node or controller to send diagnostics data for display. + The ArtPoll packet sent by controllers defines the destination to which these messages should be sent. + + Controller: + Receive: Application specific + Unicase Transmit: As defined by ArtPoll (Allowed, with Targeted Mode) + Broadcast: As defined by ArtPoll (Allowed) + + Node: + Receive: No Action + Unicast Transmit: As defined by ArtPoll (Allowed, with Targeted Mode) + Broadcast: As defined by ArtPoll (Allowed) + + Media Server: + Receive: No Action + Unicast Transmit: As defined by ArtPoll (Allowed, with Targeted Mode) + Broadcast: As defined by ArtPoll (Allowed) + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + + - id: opcode + contents: [0x00, 0x60] + doc: OpAddress (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) diff --git a/artnet/ksy/artipprog.ksy b/artnet/ksy/artipprog.ksy new file mode 100644 index 0000000..7f64c2f --- /dev/null +++ b/artnet/ksy/artipprog.ksy @@ -0,0 +1,113 @@ +# Development Notes +# * TODO: prog_ip, prog_subnet_mask, prog_port, prog_default_gateway can all be conditional on their entry in command however this is not implemented right now + +meta: + id: artipprog + +doc: | + The ArtIpProg packet allows the IP settings of a Node to be reprogrammed. + The ArtIpProg packet is sent by a Controllerto the private address of a Node. If the Node supports remote programming of IP address, it will respond with an ArtIpProgReply packet. In all scenarios, the ArtIpProgReply is sent to the private address of the sender. + + Controller: + Receive: No Action + Unicase Transmit: Controller transmits to a specific node IP address + Broadcast: Not Allowed + + Node: + Receive: Reply with ArtIpProgReply + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + + Media Server: + Receive: Reply with ArtIpProgReply + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + + - id: opcode + contents: [0x00, 0xf8] + doc: OpIpProg (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - size: 2 + doc: Filler + + - id: command + type: command + doc: Actions this packet as follows + + - size: 1 + doc: Filler (set to zero for word alignment) + + - id: prog_ip + type: u4be + doc: IP Address to be programmed into Node if enabled by Command Field + + - id: prog_subnet_mask + type: u4be + doc: Subnet mask to be programmed into Node if enabled by Command Field + + - id: prog_port + type: u2be + doc: Port (deprecated) + + - id: prog_default_gateway + type: u4be + doc: Default Gateway to be programmed into Node if enabled by Command field + + - size: 4 + doc: Spare, transmit as 0, receivers should not test + +types: + command: + seq: + - id: enable_programming + type: b1 + doc: Set to enable any programming + + - id: enable_dhcp + type: b1 + doc: | + Set to enable DHCP (if set, ignore the lower bits - ) + Note: the following values are not skipped if set as the values are still present + + - type: b1 + + - type: b5 + if: enable_dhcp == true + doc: Used to skip 5 bits if enable_dhcp is set to true + + - id: program_default_gateway + type: b1 + doc: Program Default gateway + if: enable_dhcp == false + + - id: return_all_parameters + type: b1 + doc: Set to return all three parameters to default + if: enable_dhcp == false + + - id: program_ip + type: b1 + doc: Program IP Address + if: enable_dhcp == false + + - id: program_subnet_mask + type: b1 + doc: Program Subnet Mask + if: enable_dhcp == false + + - id: program_port + type: b1 + doc: Program port + if: enable_dhcp == false + diff --git a/artnet/ksy/artipprogreply.ksy b/artnet/ksy/artipprogreply.ksy new file mode 100644 index 0000000..f6e0ba9 --- /dev/null +++ b/artnet/ksy/artipprogreply.ksy @@ -0,0 +1,70 @@ +# Development Notes + +meta: + id: artipprogreply + +doc: | + The ArtIpProgReply packet is issued by a Node in response to an ArtIpProg packet. Nodes that do not support remote programming of IP address do not reply to ArtIpProg packets. In all scenarios, the ArtIpProgReplyis sent to the private address of the sender. + + Controller: + Receive: No Action + Unicase Transmit: Not Allowed + Broadcast: Not Allowed + + Node: + Receive: No Action + Unicast Transmit: Transmits to specific Controller IP address + Broadcast: Not Allowed + + Media Server: + Receive: No Action + Unicast Transmit: Transmits to specific Controller IP address + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + + - id: opcode + contents: [0x00, 0xf9] + doc: OpIpProgReply (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - size: 4 + doc: Filler (pad length to match ArtPoll and ArtIpProg) + + - id: prog_ip + type: u4be + doc: IP Address of node + + - id: prog_subnet_mask + type: u4be + doc: Subnet mask of node + + - id: prog_port + type: u2be + doc: Port (deprecated) + + - type: b1 + + - id: dhcp_enabled + type: b1 + doc: DHCP enabled + + - type: b6 + + - size: 1 + doc: Spare2 transmitted as zero, receivers don't test + + - id: prog_default_gateway + type: u4be + doc: Default Gateway of Node + + - size: 2 + doc: Spare, transmit as 0, receivers should not test diff --git a/artnet/ksy/artpoll.ksy b/artnet/ksy/artpoll.ksy new file mode 100644 index 0000000..374e8c0 --- /dev/null +++ b/artnet/ksy/artpoll.ksy @@ -0,0 +1,114 @@ +meta: + id: artpoll + +doc: | + The ArtPoll packet is used to discover the presence of other Controllers, Nodes and Media Servers. The ArtPoll packet can be sent by any device, but is usually only sent by the Controller. Both Controllers and Nodes respond to the packet. + A Controller broadcasts an ArtPoll packet to IP address 2.255.255.255 (sub-net mask 255.0.0.0) at UDP port 0x1936, this is the Directed Broadcast address. + The Controller may assume amaximum timeout of 3 seconds between sending ArtPoll and receiving all ArtPollReply packets. If the Controller does not receive a response in this time, it should consider the Node to have disconnected. + The Controller that broadcasts an ArtPoll should also reply to its own message (by unicast) with an ArtPollReply. It is a requirement of Art-Net that all controllers broadcast an ArtPoll every 2.5 to 3 seconds. This ensures that any network devices can easily detect a disconnect. + + ## Multiple Controllers + + Art-Net allows and supports multiple controllers on a network. When there are multiple controllers, Nodes will receive ArtPolls from different controllers which may contain conflicting diagnostics requirements. This is resolved as follows: + If any controller requests diagnostics, the node will send diagnostics. (ArtPoll->Flags->2). + If there are multiple controllersrequesting diagnostics, diagnostics shall be broadcast. (Ignore ArtPoll->Flags->3). + The lowest minimum value of Priority shall be used. (Ignore ArtPoll->DiagPriority). + + ## Targeted Mode + + Targeted mode allows the ArtPoll to define a range of Port-Addresses. Nodes will only reply to the ArtPoll is they are subscribed to a Port-Address that is inclusively in the range TargetPortAddressBottom to TargetPortAddressTop. The bit field ArtPoll->Flags->5 is used to enable Targeted Mode. + + ## Minimum Packet Length + + Consumers of ArtPoll shall accept as valid a packet of length 12 octets or larger. Any missing fields are assumed to be zero. This requirement is due to the fact that the length of ArtPoll has increased over the life of the protocol. + + All: + Receive: Send ArtPollReply + Unicast Transmit: Allowed, with Targeted Mode. + Directed Broadcast: Controller broadcasts this packet to poll all Controllers and Nodes on the network + Limited Broadcast: Not recommended + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 + + - id: opcode + contents: [0x00, 0x20] + doc: The OpCode defines the class of data following ArtPoll within this UDP packet. Transmitted little endian. Set to OpPoll + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - id: flags + type: flags + doc: Set behaviour of Node + if: _io.size >= 13 + + - id: diag_priority + type: u1 + enum: priority_codes + if: _io.size >= 14 + + - id: target_port + type: u4be + if: _io.size >= 18 and flags.targeted_mode + +types: + flags: + seq: + - type: b2 + doc: Unused, transmitted as zero, do not test upon receipt + + - id: targeted_mode + type: b1 + doc: Enable Targeted Mode + + - id: vlc_transmission + type: b1 + doc: Enable VLC transmission + + - id: diagnostic_unicast + type: b1 + if: send_diagnostics == true + doc: Diagnostic messages are unicast + + - type: b1 + if: send_diagnostics == false + doc: (Ensuring that one bit is consumed) + + - id: send_diagnostics + type: b1 + doc: Send me diagnostic messages + + - id: artpollreply_on_change + type: b1 + doc: Send ArtPollReply whenever Node conditions change. This selection allows the Controller to be informed of changes without the need to continously poll + + - type: b1 + doc: Deprecated + +enums: + priority_codes: + 16: + id: dp_low + doc: Low priority message + + 64: + id: dp_med + doc: Medium priority message + + 128: + id: dp_high + doc: High priority message + + 224: + id: dp_critical + doc: Critical priority message + + 240: + id: dp_volatile + doc: Volatile message. Messages of this type are displayed on a single line in the DMX-Workshop diagnostics display. All other types are displayed in a list box diff --git a/artnet/ksy/artpollreply.ksy b/artnet/ksy/artpollreply.ksy new file mode 100644 index 0000000..c5b108f --- /dev/null +++ b/artnet/ksy/artpollreply.ksy @@ -0,0 +1,402 @@ +meta: + id: artpollreply + +doc: | + A device, in response to a Controller's ArtPoll, sends the ArtPollReply. The device should wait for a random delay of up to 1s before sending the reply. This mechanism is intended to reduce packet bunching when scaling up to very large systems. + + ## Minimum Packet Length + + Consumers of ArtPollReplyshall accept as valid a packet of length 198(highlighted in grey below) octets or larger.Any missing fields are assumed to be zero. This requirement is due to the fact that the length of ArtPollReply has increased over the life of the protocol. + + All: + Receive: No Art-Net action + Unicast Transmit: Allowed + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 + + - id: opcode + contents: [0x00, 0x21] + doc: OpPollReply (Transmitted little endian) + + - id: ip_address + type: u4be + doc: The Node's IP address.When binding is implemented, bound nodes may share the rootnode's IP Address and the BindIndex is used to differentiate the nodes. + + - id: port + contents: [0x36, 0x19] + doc: The port is always 0x1936 (transmitted little endian) + + - id: version_info + type: u2be + doc: Node's firmware revision number. The controller should only use this field to decide if a firmware udpate should proceed. The convention is that a higher number is a more recent release of firmware + + - id: net_switch + type: u1 + doc: Bits 14-8 of the 15 bit Port-Address are encoded into the bottom 7 bits of this field. This is used in combination with SubSwitch and SwIn[] or SwOut[] to produce the full universe address + + - id: sub_switch + type: u1 + doc: Bits 7-4 of the 15 bit Port-Address are encoded into the bottom 4 bits of this field. This is used in combination with NetSwitch and SwIn[] or SwOut[] to produce the full universe address. + + - id: oem + type: u2be + doc: The Oem word unique identifies the product + + - id: ubea_version + type: u1 + doc: This field contains the firmware version of the User Bios Extension Area (UBEA). If the UBEA is not programmed, this field contains zero + + - id: status_1 + type: status_1 + doc: General status register containing bit fields + + - id: esta_manufacturer + type: u2le + doc: | + The ESTA manufacturer code. These codes are used to represent equipment manufacturer. They are assigned by ESTA. + This field can be interpreted as two ASCII octets representing the manufacturer initials. + + - id: short_name + type: str + encoding: utf8 + size: 18 + doc: | + The array represents a null terminated short name for the Node. The Controller uses the ArtAddress packet to program this string. + Max length is 17 characters plus the null. + This is a fixed length field, although the string it contains can be shorter than the field. + + - id: long_name + type: str + encoding: utf8 + size: 64 + doc: | + The array represents a null terminated long name for the Node. The Controller uses the ArtAddress packet to program this string. + Max length is 63 characters plus the null. + This is a fixed length field, although the string it contains can be shorter than the field. + + - id: node_report + type: str + encoding: utf8 + size: 64 + doc: | + The array is a textual report of the Node's operating status or operational errors. It is primarily intended for 'engineering' data rather than 'end user' data. The field is formatted as: “#xxxx [yyyy..] zzzzz…” + xxxx is a hex status code as defined in Table 3. + yyyy is a decimal counter that increments every time the Node sends an ArtPollResponse. This allows the controllerto monitor event changes in the Node. + zzzz is an English text string defining the status. + This is a fixed length field, although the string it contains can be shorter than the field. + + - id: num_ports + type: u2be + doc: | + The number of input or output ports. If number of inputs is not equal to number of outputs, the largest value is taken. + Zero is a legal value if no input or output ports are implemented. The maximum value is 4. + Nodes can ignore this field as the information is implicit in PortTypes[]. + + - id: port_types + type: port_type + repeat: expr + repeat-expr: 4 + doc: This array defines the operation and protocol of each channel. (A product with 4 inputs and 4 outputs would report 0xc0, 0xc0, 0xc0, 0xc0). The array length is fixed, independent of the number of inputs or outputs physically available on the Node. + + - id: good_inputs + type: good_input + repeat: expr + repeat-expr: 4 + doc: This array defines output status of the node + + - id: good_outputs + type: good_output + repeat: expr + repeat-expr: 4 + doc: This array defines output status of the node + + - id: sw_in + type: u4be + doc: Bits 3-0 of the 15 bit Port-Addressfor each of the 4 possible input ports are encoded into the low nibble. + + - id: sw_out + type: u4be + doc: Bits 3-0 of the 15 bit Port-Addressfor each of the 4 possible output ports are encoded into the low nibble. + + - id: acn_priority + type: u1 + doc: The sACNpriority value that will be used when any received DMX is converted to sACN. + + - id: sw_macro + type: u1 + doc: | + If the Node supports macro key inputs, this byte represents the trigger values. The Node is responsible for 'debouncing' inputs. When the ArtPollReplyis set to transmit automatically, (Flags Bit 1), the ArtPollReply will be sent on both key down and key up events. However, the Controllershould not assume that only one bit position has changed. + The Macro inputs are used for remote event triggering or cueing. + Bit fields are active high. + + - id: sw_remote + type: u1 + doc: | + If the Node supports remote trigger inputs, this byte represents the trigger values. The Node is responsible for 'debouncing' inputs. When the ArtPollReply is set to transmit automatically, (Flags Bit 1), the ArtPollReply will be sent on both key down and key up events. However, the Controllershould not assume that only one bit position has changed. + The Remote inputs are used for remote event triggering or cueing. + Bit fields are active high. + + - size: 3 + doc: Spare, not used, set to 0 + if: _io.size >= 200 + + - id: style + type: u1 + enum: style_codes + doc: The Style code defines the equipment style of the device. + if: _io.size >= 201 + + - id: mac + size: 6 + doc: MAC Address of the node, set to 0 if node cannot supply this information + if: _io.size >= 207 + + - id: bind_ip + type: u4be + doc: If this unit is part of a larger or modular product, this is the IP of the root device. + if: _io.size >= 211 + + - id: bind_index + type: u1 + doc: This number represents the order of bound devices. A lower number means closer to root device. A value of 0 or 1 means root device. + if: _io.size >= 212 + + - id: status_2 + type: status_2 + doc: General status register containing bit fields + if: _io.size >= 213 + + - id: good_output_bs + type: good_output_b + repeat: expr + repeat-expr: 4 + doc: This array defines output status of the node + if: _io.size >= 217 + + - id: status_3 + type: status_3 + doc: General status register containing bit fields + if: _io.size >= 218 + + - id: default_responder_uuid + size: 6 + doc: RDMnet & LLRP Default Responder UID + if: _io.size >= 224 + +types: + status_1: + seq: + - id: indicator_status + type: b2 + enum: indicator_state + doc: Indicator state (unknown, locate, mute or normal) + + - id: port_address_authority + type: b2 + enum: papa + doc: Port Address Programming Authority + + - type: b1 + doc: Not implemented, transmit as zero, receivers do not test + + - id: booted_from_rom + type: b1 + doc: Booted from ROM instead of normal firmware boot (from flash). Nodes that do not support dual boot clear this field (false) + + - id: rdm_supported + type: b1 + doc: Device is capable of Remote Device Management (RDM) + + - id: ubea_present + type: b1 + doc: UBEA is present in this packet + + status_2: + seq: + - id: supports_web_config + type: b1 + doc: Product supports web browser configuration + + - id: ip_dhcp_configured + type: b1 + doc: Node's IP is DHCP configured instead of manually configured + + - id: supports_dhcp + type: b1 + doc: Node is DHCP capable + + - id: supports_15b_port_address + type: b1 + doc: Node supports 15-bit port addresses (instead of 8-bit port addresses from Art-Net II) + + - id: supports_sacn_artnet_switching + type: b1 + doc: Node is able to switch between Art-Net and sACN + + - id: squawking + type: b1 + doc: Node is squawking + + - id: supports_artcommand_switch + type: b1 + doc: Node supports switching of output style using ArtCommand + + - id: supports_artcommand_rdm + type: b1 + doc: Node supports control of RDM using ArtCommand + + status_3: + seq: + - id: failsafe + type: b2 + enum: failsafe_state + doc: Failsafe state meaning how the node behaves in the event that network data is lost + + - id: supports_failover + type: b1 + doc: Node supports fail-over + + - id: supports_llrp + type: b1 + doc: Node supports LLRP + + - id: supports_io_switching + type: b1 + doc: Node supports switching ports between input and output (PortTypes[] shows the current direction) + + - type: b3 + doc: Not used, set to 0 + + port_type: + seq: + - id: outputs_artnet + type: b1 + doc: This channel can output data from the Art-Net network + + - id: inputs_artnet + type: b1 + doc: This channel can input data onto the Art-Net network + + - id: format + type: u1 + enum: port_type_format + doc: The format of data this port interacts with + + good_input: + seq: + - id: data_received + type: b1 + doc: Data has been received on this port + + - id: includes_test + type: b1 + doc: This channel includes DMX512 test packets + + - id: includes_sips + type: b1 + doc: This channel includes DMX512 SIP's packets + + - id: includes_text + type: b1 + doc: This channel includes DMX512 text packets + + - id: disabled + type: b1 + doc: Input is disabled + + - id: errors_detected + type: b1 + doc: Receive errors have been detected on this input + + - type: b2 + doc: Unused and transmitted as zero + + good_output: + seq: + - id: data_transmitted + type: b1 + doc: Data has been transmitted on this output + + - id: includes_test + type: b1 + doc: This channel includes DMX512 test packets + + - id: includes_sips + type: b1 + doc: This channel includes DMX512 SIP's packets + + - id: includes_text + type: b1 + doc: This channel includes DMX512 text packets + + - id: merging + type: b1 + doc: Otuput is merging Art-Net data + + - id: dmx_output_short + type: b1 + doc: DMX output short detected on power up + + - id: merge_ltp + type: b1 + doc: Merge mode is LTP + + - id: transmit_sacn + type: b1 + doc: Output is selected to transmit sACN + + good_output_b: + seq: + - id: rdm_disabled + type: b1 + doc: RDM is disabled on this output + + - id: output_continuous + type: b1 + doc: Output style is continuous instead of delta + + - type: b6 + doc: Not used, set to zero + +enums: + port_type_format: + 0: dmx512 + 1: midi + 2: avab + 3: colortran_cmx + 4: adb625 + 5: art_net + 6: dali + + failsafe_state: + 0: hold_last + 1: zero + 2: full + 3: safe_scene + + indicator_state: + 0: unknown + 1: locate + 2: mute + 3: normal + + papa: + 0: unknown + 1: front_panel + 2: network + 3: invalid + + style_codes: + 0: st_node + 1: st_controller + 2: st_media + 3: st_route + 4: st_backup + 5: st_config + 6: st_visual \ No newline at end of file From 6e903c7444ca6ff49f849dc1a06475c92ba4a346 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Fri, 21 Jul 2023 02:10:27 +0100 Subject: [PATCH 03/49] Adding verbose output for better logging --- .github/workflows/compile-ksy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/compile-ksy.yaml b/.github/workflows/compile-ksy.yaml index 54c4f85..f90a2b3 100644 --- a/.github/workflows/compile-ksy.yaml +++ b/.github/workflows/compile-ksy.yaml @@ -27,6 +27,6 @@ jobs: rm kaitai.zip - name: Generate for all files - run: find ./ -type f -iname "*.ksy" -not -path "./kaitai-struct-compiler-0.10/*" -print0 | xargs -r -0 -n1 ./kaitai-struct-compiler-0.10/bin/kaitai-struct-compiler -t html + run: find ./ -type f -iname "*.ksy" -not -path "./kaitai-struct-compiler-0.10/*" -print0 | xargs -t -r -0 -n1 -- ./kaitai-struct-compiler-0.10/bin/kaitai-struct-compiler -t html From 69fba293840bd82a684c2c914b523d89f9147eaa Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Fri, 21 Jul 2023 16:05:01 +0100 Subject: [PATCH 04/49] Adding four new specification files --- artnet/ksy/artcommand.ksy | 63 ++++++++++++++++++++ artnet/ksy/artdmx.ksy | 119 +++++++++++++++++++++++++++++++++++++ artnet/ksy/arttimecode.ksy | 68 +++++++++++++++++++++ artnet/ksy/arttrigger.ksy | 78 ++++++++++++++++++++++++ 4 files changed, 328 insertions(+) create mode 100644 artnet/ksy/artcommand.ksy create mode 100644 artnet/ksy/artdmx.ksy create mode 100644 artnet/ksy/arttimecode.ksy create mode 100644 artnet/ksy/arttrigger.ksy diff --git a/artnet/ksy/artcommand.ksy b/artnet/ksy/artcommand.ksy new file mode 100644 index 0000000..dd52cbb --- /dev/null +++ b/artnet/ksy/artcommand.ksy @@ -0,0 +1,63 @@ +# Development nodes +# * esta_manufacturer has a misleading description in the spec. It is listed as going Hi Lo, however the description of the fields themselves describe Lo Hi. Based on experimentation, I am pretty sure its Lo Hi however this may need correcting + +meta: + id: artcommand + +doc: | + The ArtCommand packet is used to send property set style commands. The packet can be unicast or broadcast, the decision being application specific + + The Data field contains the command text. The text is ASCII encoded and is null terminated and is case insensitive. It is legal, although inefficient, to set the Data array size to the maximum of 512 and null pad unused entries. + + The command text may contain multiple commands and adheres to the following syntax: + + ``` + Command=Data& + ``` + + The ampersand is a break between commands. Also note that the text is capitalised for readability; it is case insensitive. + + Thus far, two commands are defined by Art-Net. It is anticipated that additional commands will be added as other manufacturers register commands which have industry wide relevance. + + These commands shall be transmitted with EstaMan = 0xFFFF + + |Command |Meaning | + |---------|-----------------------------------------------------------------------------------------------------------------------------| + |SwoutText|This command is used to re-programme the label associated with the ArtPollReply->Swout fields. Syntax: "SwoutText=Playback&" | + |SwinText |This command is used to re-programme the label associated with the ArtPollReply->Swin fields. Syntax: "SwinText=Record&" | + + All: + Receive: Application Specific + Unicast Transmit: Application Specific + Broadcast: Application Specific + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 + + - id: opcode + contents: [0x00, 0x24] + doc: OpCommand (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - id: esta_manufacturer + type: u2le + doc: | + The ESTA manufacturer code. These codesare used to represent equipment manufacturer. + They are assigned by ESTA. This field can be interpreted as two ASCII octetsrepresenting the manufacturer initials. + + - id: length + type: u2be + doc: The length of the text array below + + - id: data + type: str + encoding: ASCII + size: length + doc: ASCII text command string, null terminated. Max length is 512 octetsincluding the null term. diff --git a/artnet/ksy/artdmx.ksy b/artnet/ksy/artdmx.ksy new file mode 100644 index 0000000..2fa7ed1 --- /dev/null +++ b/artnet/ksy/artdmx.ksy @@ -0,0 +1,119 @@ +meta: + id: artdmx + +doc: | + ArtDmx is the data packet used to transfer DMX512 data. The format is identical for Node to Controller, Node to Node and Controllerto Node. + + The Data is output through the DMX O/P port corresponding to the Universe setting. In the absence of received ArtDmx packets, each DMX O/P port re-transmits the same frame continuously. + + The first complete DMX frame received at each input port is placed in an ArtDmx packet as above and transmittedas an ArtDmx packet containing the relevant Universe parameter. Each subsequent DMX frame containing new data(different length or different contents) is also transmittedas an ArtDmx packet. + + Nodes do not transmitArtDmx for DMX512 inputs that have not received data since power on. + + However, an input that is active but not changing, will re-transmitthe last valid ArtDmx packet at approximately 4-second intervals.(Note. In order to converge the needs of ArtNet and sACN it is recommended that Art-Netdevices actually use a re-transmit time of 800mS to 1000mS). + + A DMX input that fails will not continue to transmitArtDmx data. + + ## Unicast Subscription: + + ArtDmx packetsmust be unicast to subscribers of the specific universe contained in the ArtDmx packet. + + The transmitting device must regularly ArtPoll the network to detect any change in devices which are subscribed. Nodes that are subscribed will list the subscription universe in the ArtPollReply. Subscribed means any universes listed in either the Swin or Swout array. + + If there are no subscribers to a universe, the controller shall not send ArtDmx. There are no conditions in which broadcast is allowed. + + ## Refresh Rate: + + The ArtDmx packet is intended to transfer DMX512 data. For this reason, the ArtDmx packet for a specific IP Address should not be transmitted at a repeat rate faster than the maximum repeat rate of a DMX packet containing 512 data slots. + + ## Synchronous Data: + + In video or media-wall applications, the ability to synchronise multiple universes of ArtDmx is beneficial. This can be achieved with the ArtSync packet. + + ## Data Merging: + + The Art-Net protocol allows multiple nodes or controllers to transmit ArtDmx data to the same universe. + + A node can detect this situation by comparing the IP addresses of received ArtDmx packets. If ArtDmx packets addressed to the same Port-Addressare received from different IP addresses(or different Physical ports on the same IP address), a potential conflict exists. + + The Node can legitimately handle this situation using one of two methods: + + * Consider this to be an error condition and await user intervention. + * Automatically merge the data. + + Nodes should document the approach that is implemented in the product user guide. The Merge option is preferred as it provides a higher level of functionality. + + Merge is implemented in either LTP or HTP mode as specified by the ArtAddress packet. + + Merge mode is implemented asfollows: + + > If ArtDmx with identical Port-Addressis received from differing IP addresses, the data is merged to the DMX output. In this situation, ArtPollReply-GoodOutputBit3 is set. If Art-Poll-Flags Bit 1 is set, an ArtPollReply should be transmitted when merging commences. + > + > If ArtDmx with identical Port-Addressis received from identical IP addresses but differing Physical fields, the data is merged to the DMX output. In this situation, ArtPollReply-GoodOutput-Bit3 is set. If Art-Poll-Flags Bit 1 is set, an ArtPollReply should be transmitted when merging commences. + + Exit from Merge mode is handled as follows: + + > If ArtAddress AcCancelMerge is received, the Next ArtDmx message received ends Merge mode. The Node then discards any ArtDmx packets received from an IP address that does not match the IP address of the ArtDmx packet that terminated Merge mode. + > + > If either (but not both) sources of ArtDmx stop, the failed source is held in the merge buffer for 10 seconds. If, during the 10 second timeout, the failed source returns, Merge mode continues. If the failed source does not recover, at the end of the timeout period, the Node exits Merge mode. + > + > If both sources of ArtDmx fail, the output holds the last merge result. + + Merging is limited to two sources, any additional sources will be ignored by the Node. + + The Merge implementation allows for the following two key modes of operation. + + * Combined Control: Two Controllers (Consoles) can operate on a network and merge data to multiple Nodes. + * Backup: One Controller(Console) can monitor the network for a failure of the primary Controller. If a failure occurs, it can use the ArtAddress AcCancelMerge command to take instant control of the network. + + When a node provides multiple DMX512 inputs, it is the responsibility of the Node to handle merging of data. This is because the Node will have only one IP address. If this were not handled at the Node, ArtDmx packets with identical IP addresses and identical universe numbers, but conflicting level data would be transmitted to the network. + + All: + Receive: Application Specific + Unicast Transmit: Yes + Broadcast: No + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 + + - id: opcode + contents: [0x00, 0x50] + doc: OpOutput / OpDmx (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - id: sequence + type: u1 + doc: | + The sequence number is used to ensure that ArtDmx packets are used in the correct order. + + When Art-Net is carried over a medium such as the Internet, it is possible that ArtDmx packets will reach the receiver out of order. + + This field is incremented in the range 0x01 to 0xff to allow the receiving node to re-sequence packets. + + The Sequence field is set to 0x00 to disable this feature. + + - id: physical + type: u1 + doc: The physical input port from which DMX512 data was input. This field is used by the receiving device to discriminate between packets with identical Port-Address that have been generated by different input ports and so need to be merged. + + - id: port_address + type: u2le + doc: 15 bit Port-Address to which this packet is destined + + - id: len_data + type: u2be + doc: | + The length of the DMX512 data array. This value should be an even number in the range 2-512. + + It represents the number of DMX512 channels encoded in packet. NB: Products which convert Art-Net to DMX512 may opt to always send 512 channels. + + - id: data + size: len_data + doc: A variable length array of DMX512 lighting data diff --git a/artnet/ksy/arttimecode.ksy b/artnet/ksy/arttimecode.ksy new file mode 100644 index 0000000..235af1c --- /dev/null +++ b/artnet/ksy/arttimecode.ksy @@ -0,0 +1,68 @@ +meta: + id: arttimecode + +doc: | + ArtTimeCode allows time code to be transported over the network. The data format is compatible with both longitudinaltime code and MIDI time code. The four key types of Film, EBU, Drop Frame and SMPTE are also encoded. + Use of the packet is application specific but in general a single controllerwill broadcast the packet to the network. + + All: + Receive: Application Specific + Unicast Transmit: Application Specific + Broadcast: Application Specific + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 + + - id: opcode + contents: [0x00, 0x97] + doc: OpTimeCode (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - size: 2 + doc: Filler, ignore by receiver, set to zero by sender + + - id: frames + type: u1 + doc: Frames time. 0-29 depending on mode + + - id: seconds + type: u1 + doc: Seconds. 0-59 + + - id: minutes + type: u1 + doc: Minutes. 0-59 + + - id: hours + type: u1 + doc: Hours. 0-23 + + - id: type + type: u1 + enum: types + doc: Type of time code format being transmitted + +enums: + types: + 0: + id: film + doc: 24fps + + 1: + id: ebu + doc: 25fps + + 2: + id: df + doc: 29.97fps + + 3: + id: smpte + doc: 30fps \ No newline at end of file diff --git a/artnet/ksy/arttrigger.ksy b/artnet/ksy/arttrigger.ksy new file mode 100644 index 0000000..6f34c45 --- /dev/null +++ b/artnet/ksy/arttrigger.ksy @@ -0,0 +1,78 @@ +meta: + id: arttrigger + +doc: | + The ArtTrigger packet is used to send trigger macros to the network. The most common implementation involves a single controller broadcasting to all other devices. + In some circumstances a controller may only wish to trigger a single device or a small group in which case unicast would be used. + + ## Key + + The Key is an 8-bit number which defines the purpose ofthe packet. The interpretation of this field is dependent upon the Oem field. If the Oem field is set to a value other than 0xffff then the Key and SubKey fields are manufacturer specific. + However, when the Oem field = 0xffff the meaning of the Key, SubKey and Payload is defined by Table 7. + + ## SubKey + + The SubKey is an 8-bit number. The interpretation of this field is dependent upon the Oem field. If the Oem field is set to a value other than ffff16 then the Key and SubKey fields are manufacturer specific. + However, when the Oem field = ffff16 the meaning of the SubKey field is defined by the table above. + + ## Payload + + The Payload is a fixed length array of 512, 8-bit octets. The interpretation of this fieldis dependent upon the Oem field. If the Oem field is set to a value other than 0xffff then the Payload is manufacturer specific + + All: + Receive: Application Specific + Unicast Transmit: Application Specific + Broadcast: Application Specific + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 + + - id: opcode + contents: [0x00, 0x99] + doc: OpCommand (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - size: 2 + doc: Filler, ignore by receiver, set to zero by sender + + - id: oem_code + type: u2be + doc: The manufacturer code of nodes that shall accept this trigger + + - id: key + type: u1 + doc: The trigger key + enum: keys + + - id: sub_key + type: u1 + doc: The trigger subkey + + - id: data + size-eos: true + doc: The interpretation of the payload is defined by the Key + +enums: + keys: + 0: + id: key_ascii + doc: The SubKey field contains an ASCII character which the receiving device should process as if it were a keyboard press. (Payload not used). + + 1: + id: key_macro + doc: The SubKey field contains the number of a Macro which the receiving device should execute. (Payload not used). + + 2: + id: key_soft + doc: The SubKey field contains a soft-key number which the receiving device should process as if it were a soft-key keyboard press. (Payload not used). + + 3: + id: key_show + doc: The SubKey field contains the number of a Show which the receiving device should run. (Payload not used) \ No newline at end of file From 71b0578e201319c22aa2b34013c8a54008d42846 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 22 Jul 2023 16:05:45 +0100 Subject: [PATCH 05/49] Adding titles to all existing files --- artnet/ksy/artaddress.ksy | 1 + artnet/ksy/artcommand.ksy | 1 + artnet/ksy/artdiagdata.ksy | 1 + artnet/ksy/artdmx.ksy | 1 + artnet/ksy/artipprog.ksy | 1 + artnet/ksy/artipprogreply.ksy | 1 + artnet/ksy/artpoll.ksy | 1 + artnet/ksy/artpollreply.ksy | 1 + artnet/ksy/arttimecode.ksy | 1 + artnet/ksy/arttrigger.ksy | 1 + 10 files changed, 10 insertions(+) diff --git a/artnet/ksy/artaddress.ksy b/artnet/ksy/artaddress.ksy index 4cd2db1..dc7a396 100644 --- a/artnet/ksy/artaddress.ksy +++ b/artnet/ksy/artaddress.ksy @@ -2,6 +2,7 @@ meta: id: artaddress + title: ArtAddress doc: | A Controlleror monitoring device on the network can reprogram numerous controls of a node remotely. This,for example, would allow the lighting console to re-route DMX512 data at remote locations. This is achieved by sending an ArtAddress packet to the Node’s IP address. (The IP address is returned in the ArtPoll packet). The node replies with an ArtPollReply packet. diff --git a/artnet/ksy/artcommand.ksy b/artnet/ksy/artcommand.ksy index dd52cbb..120f9b9 100644 --- a/artnet/ksy/artcommand.ksy +++ b/artnet/ksy/artcommand.ksy @@ -3,6 +3,7 @@ meta: id: artcommand + title: ArtCommand doc: | The ArtCommand packet is used to send property set style commands. The packet can be unicast or broadcast, the decision being application specific diff --git a/artnet/ksy/artdiagdata.ksy b/artnet/ksy/artdiagdata.ksy index 568c901..119fefd 100644 --- a/artnet/ksy/artdiagdata.ksy +++ b/artnet/ksy/artdiagdata.ksy @@ -2,6 +2,7 @@ meta: id: artdiagdata + title: ArtDiagData doc: | ArtDiagData is a general purpose packet that allows a node or controller to send diagnostics data for display. diff --git a/artnet/ksy/artdmx.ksy b/artnet/ksy/artdmx.ksy index 2fa7ed1..e1309af 100644 --- a/artnet/ksy/artdmx.ksy +++ b/artnet/ksy/artdmx.ksy @@ -1,5 +1,6 @@ meta: id: artdmx + title: ArtDmx doc: | ArtDmx is the data packet used to transfer DMX512 data. The format is identical for Node to Controller, Node to Node and Controllerto Node. diff --git a/artnet/ksy/artipprog.ksy b/artnet/ksy/artipprog.ksy index 7f64c2f..9f64724 100644 --- a/artnet/ksy/artipprog.ksy +++ b/artnet/ksy/artipprog.ksy @@ -3,6 +3,7 @@ meta: id: artipprog + title: ArtIpProg doc: | The ArtIpProg packet allows the IP settings of a Node to be reprogrammed. diff --git a/artnet/ksy/artipprogreply.ksy b/artnet/ksy/artipprogreply.ksy index f6e0ba9..34e18a6 100644 --- a/artnet/ksy/artipprogreply.ksy +++ b/artnet/ksy/artipprogreply.ksy @@ -2,6 +2,7 @@ meta: id: artipprogreply + title: ArtIpProgReply doc: | The ArtIpProgReply packet is issued by a Node in response to an ArtIpProg packet. Nodes that do not support remote programming of IP address do not reply to ArtIpProg packets. In all scenarios, the ArtIpProgReplyis sent to the private address of the sender. diff --git a/artnet/ksy/artpoll.ksy b/artnet/ksy/artpoll.ksy index 374e8c0..f5401d6 100644 --- a/artnet/ksy/artpoll.ksy +++ b/artnet/ksy/artpoll.ksy @@ -1,5 +1,6 @@ meta: id: artpoll + title: ArtPoll doc: | The ArtPoll packet is used to discover the presence of other Controllers, Nodes and Media Servers. The ArtPoll packet can be sent by any device, but is usually only sent by the Controller. Both Controllers and Nodes respond to the packet. diff --git a/artnet/ksy/artpollreply.ksy b/artnet/ksy/artpollreply.ksy index c5b108f..8cc602a 100644 --- a/artnet/ksy/artpollreply.ksy +++ b/artnet/ksy/artpollreply.ksy @@ -1,5 +1,6 @@ meta: id: artpollreply + title: ArtPollReply doc: | A device, in response to a Controller's ArtPoll, sends the ArtPollReply. The device should wait for a random delay of up to 1s before sending the reply. This mechanism is intended to reduce packet bunching when scaling up to very large systems. diff --git a/artnet/ksy/arttimecode.ksy b/artnet/ksy/arttimecode.ksy index 235af1c..d5e072a 100644 --- a/artnet/ksy/arttimecode.ksy +++ b/artnet/ksy/arttimecode.ksy @@ -1,5 +1,6 @@ meta: id: arttimecode + title: ArtTimeCode doc: | ArtTimeCode allows time code to be transported over the network. The data format is compatible with both longitudinaltime code and MIDI time code. The four key types of Film, EBU, Drop Frame and SMPTE are also encoded. diff --git a/artnet/ksy/arttrigger.ksy b/artnet/ksy/arttrigger.ksy index 6f34c45..a35ff5a 100644 --- a/artnet/ksy/arttrigger.ksy +++ b/artnet/ksy/arttrigger.ksy @@ -1,5 +1,6 @@ meta: id: arttrigger + title: ArtTrigger doc: | The ArtTrigger packet is used to send trigger macros to the network. The most common implementation involves a single controller broadcasting to all other devices. From 463f184c33d76674782f5085b981865a5db75f1e Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 22 Jul 2023 23:00:54 +0100 Subject: [PATCH 06/49] Two new packet types! 9 more definitions to go --- artnet/ksy/artnzs.ksy | 61 ++++++++++++++++++++++++++++++++++++++++++ artnet/ksy/artsync.ksy | 58 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 artnet/ksy/artnzs.ksy create mode 100644 artnet/ksy/artsync.ksy diff --git a/artnet/ksy/artnzs.ksy b/artnet/ksy/artnzs.ksy new file mode 100644 index 0000000..83ab956 --- /dev/null +++ b/artnet/ksy/artnzs.ksy @@ -0,0 +1,61 @@ +meta: + id: artnzs + title: ArtNzs + +doc: | + ArtNzs is the data packet used to transfer DMX51 2 data with non-zero start codes (except RDM). The format is identical for Node to Controller, Node to Node and Controller to Node. + + Controller: + Receive: Application Specific + Unicase Transmit: Yes + Broadcast: No + + Node: + Receive: Application Specific + Unicast Transmit: Yes + Broadcast: No + + Media Server: + Receive: Application Specific + Unicast Transmit: Yes + Broadcast: No + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 + + - id: opcode + contents: [0x00, 0x51] + doc: OpNzs (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - id: sequence + type: u1 + doc: | + The sequence number is used to ensure that ArtNzs packets are used in the correct order. + When Art-Net is carried over a medium such as the Internet, it is possible that ArtNzs packets will reach the receiver out of order. + + - id: start_code + type: u1 + doc: The DMX512 start code of this packet. Must not be Zero or RDM + + - id: port_address + type: u2le + doc: 15 bit Port-Address to which this packet is destined + + - id: len_data + type: u2be + doc: | + The length of the data array. This value should be a number in the range 1 - 512. + It represents the number of DMX512 channels encoded in packet. + + - id: data + size: len_data + doc: A variable length array of DMX512 lighting data + \ No newline at end of file diff --git a/artnet/ksy/artsync.ksy b/artnet/ksy/artsync.ksy new file mode 100644 index 0000000..d413185 --- /dev/null +++ b/artnet/ksy/artsync.ksy @@ -0,0 +1,58 @@ +meta: + id: artsync + title: ArtSync + +doc: | + The ArtSync packet can be used to force nodes to synchronously output ArtDmx packets to their outputs. This is useful in video and media-wall applications. + + A controller that wishes to implement synchronous transmission will unicast multiple universes of ArtDmx and then broadcast an ArtSync to synchronously transfer all the ArtDmx packets to the nodes' outputs at the same time. + + ## Managing Synchronous and non-Synchronous modes + + At power on or reset a node shall operate in non-synchronous mode. This means that ArtDmx packets will be immediately processed and output. + + When a node receives an ArtSync packet it should transfer to synchronous operation. This means that received ArtDmx packets will be buffered and output when the next ArtSync is received. + + In order to allow transition between synchronous and non-synchronous modes, a node shall time out to non-synchronous operation if an ArtSync is not received for 4 seconds or more. + + ## Multiple controllers + + In order to allow for multiple controllers on a network, a node shall compare the source IP of the ArtSync to the source IP of the most recent ArtDmx packet. The ArtSync shall be ignored if the IP addresses do not match. + + When a port is merging multiple streams of ArtDmx from different IP addresses, ArtSync packets shall be ignored + + Controller: + Receive: No Action + Unicase Transmit: Not Allowed + Broadcast: Controller broadcasts this packet to synchronously transfer previous ArtDmx packets to Node's output + + Node: + Receive: Transfer previous ArtDmx packets to output + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + + Media Server: + Receive: Transfer previous ArtDmx packets to output + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 + + - id: opcode + contents: [0x00, 0x52] + doc: OpSync (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - id: aux + type: u1 + repeat: expr + repeat-expr: 2 + doc: Transmit as zero \ No newline at end of file From 4d3e36784c39779ea161d4fb25e55024e788816e Mon Sep 17 00:00:00 2001 From: Sam Lane Date: Sun, 23 Jul 2023 13:47:21 +0100 Subject: [PATCH 07/49] ArtTodRequest --- artnet/ksy/arttodrequest.ksy | 67 ++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 artnet/ksy/arttodrequest.ksy diff --git a/artnet/ksy/arttodrequest.ksy b/artnet/ksy/arttodrequest.ksy new file mode 100644 index 0000000..261ddc3 --- /dev/null +++ b/artnet/ksy/arttodrequest.ksy @@ -0,0 +1,67 @@ +# Development Notes + +meta: + id: arttodrequest + title: ArtTodRequest + +doc: | + This packet is used to request the Table of RDM Devices (TOD). A Node receiving this packet + must not interpret it as forcing full discovery. Full discovery is only initiated at power on, or when an ArtTodControl.AtcFlush is received. The response is ArtTodData. + + Controller: + Receive: No Action + Unicase Transmit: Not Allowed + Broadcast: Controller Directed Broadcast to all nodes + + Node Output Gateway: + Receive: Reply with ArtTodData + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + + Node Input Gateway: + Receive: No action + Unicast Transmit: Not Allowed + Broadcast: Input Gateway Directed Broadcasts to all nodes + + Media Server: + Receive: No Action + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + + - id: opcode + contents: [0x00, 0x80] + doc: OpIpProgReply (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - size: 2 + doc: Filler (pad length to match ArtPoll) + + - size: 7 + doc: Spare, transmit as 0, receivers don't test + + - id: net + type: u1 + doc: The top 7 bits of the 15 bit Port-Address of Nodes that must respond + + - id: command + contents: [0x00] + doc: 0x00 is TodFull, send the entire TOD + + - id: add_count + type: u1 + doc: The number of entries in Address that are used. Max value is 32 + + - id: address + type: u1 + size: add_count + doc: Array of low bytes of the Port-Address of Nodes that must respond. Combined with Net. From ef26a3a2ffa70ca3456976079ee5638d5c2a3d82 Mon Sep 17 00:00:00 2001 From: Sam Lane Date: Sun, 23 Jul 2023 15:53:24 +0100 Subject: [PATCH 08/49] Tab fixes --- artnet/ksy/arttodrequest.html | 122 ++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 artnet/ksy/arttodrequest.html diff --git a/artnet/ksy/arttodrequest.html b/artnet/ksy/arttodrequest.html new file mode 100644 index 0000000..784a6f7 --- /dev/null +++ b/artnet/ksy/arttodrequest.html @@ -0,0 +1,122 @@ + + + + + + + + + + + + Arttodrequest format specification + + +
+

Arttodrequest format specification

+ + + +

Type: Arttodrequest

+ +

This packet is used to request the Table of RDM Devices (TOD). A Node receiving this packet +must not interpret it as forcing full discovery. Full discovery is only initiated at power on, or when an ArtTodControl.AtcFlush is received. The response is ArtTodData. + +Controller: + Receive: No Action + Unicase Transmit: Not Allowed + Broadcast: Controller Directed Broadcast to all nodes + +Node Output Gateway: + Receive: Reply with ArtTodData + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + +Node Input Gateway: + Receive: No action + Unicast Transmit: Not Allowed + Broadcast: Input Gateway Directed Broadcasts to all nodes + +Media Server: + Receive: No Action + Unicast Transmit: Not Allowed + Broadcast: Not Allowed +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OffsetSizeIDTypeNote
0...idArray of 8 characters, the final character is a null termination. +Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 +
8...opcodeOpIpProgReply (transmitted little endian)
10...proto_versionProtocol version (constant 14, transmitted big endian)
12...unnamed_3Filler (pad length to match ArtPoll)
14...unnamed_4Spare, transmit as 0, receivers don't test
21...netu1The top 7 bits of the 15 bit Port-Address of Nodes that must respond
22...command0x00 is TodFull, send the entire TOD
23...len_addressu1The number of entries in Address that are used. Max value is 32
24...addressArray of low bytes of the Port-Address of Nodes that must respond. Combined with Net.
+ +
+ + + + + + + + From 774b32c467366f0e8ab317296d51f074f2783645 Mon Sep 17 00:00:00 2001 From: Sam Lane Date: Sun, 23 Jul 2023 15:54:19 +0100 Subject: [PATCH 09/49] ArtTodRequest tabs --- artnet/ksy/arttodrequest.ksy | 85 ++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 43 deletions(-) diff --git a/artnet/ksy/arttodrequest.ksy b/artnet/ksy/arttodrequest.ksy index 261ddc3..b220a54 100644 --- a/artnet/ksy/arttodrequest.ksy +++ b/artnet/ksy/arttodrequest.ksy @@ -5,28 +5,28 @@ meta: title: ArtTodRequest doc: | - This packet is used to request the Table of RDM Devices (TOD). A Node receiving this packet - must not interpret it as forcing full discovery. Full discovery is only initiated at power on, or when an ArtTodControl.AtcFlush is received. The response is ArtTodData. - - Controller: - Receive: No Action + This packet is used to request the Table of RDM Devices (TOD). A Node receiving this packet + must not interpret it as forcing full discovery. Full discovery is only initiated at power on, or when an ArtTodControl.AtcFlush is received. The response is ArtTodData. + + Controller: + Receive: No Action Unicase Transmit: Not Allowed Broadcast: Controller Directed Broadcast to all nodes - - Node Output Gateway: - Receive: Reply with ArtTodData - Unicast Transmit: Not Allowed - Broadcast: Not Allowed - - Node Input Gateway: - Receive: No action - Unicast Transmit: Not Allowed - Broadcast: Input Gateway Directed Broadcasts to all nodes - - Media Server: - Receive: No Action - Unicast Transmit: Not Allowed - Broadcast: Not Allowed + + Node Output Gateway: + Receive: Reply with ArtTodData + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + + Node Input Gateway: + Receive: No action + Unicast Transmit: Not Allowed + Broadcast: Input Gateway Directed Broadcasts to all nodes + + Media Server: + Receive: No Action + Unicast Transmit: Not Allowed + Broadcast: Not Allowed seq: - id: id @@ -42,26 +42,25 @@ seq: - id: proto_version contents: [0x00, 0x0e] doc: Protocol version (constant 14, transmitted big endian) - - - size: 2 - doc: Filler (pad length to match ArtPoll) - - - size: 7 - doc: Spare, transmit as 0, receivers don't test - - - id: net - type: u1 - doc: The top 7 bits of the 15 bit Port-Address of Nodes that must respond - - - id: command - contents: [0x00] - doc: 0x00 is TodFull, send the entire TOD - - - id: add_count - type: u1 - doc: The number of entries in Address that are used. Max value is 32 - - - id: address - type: u1 - size: add_count - doc: Array of low bytes of the Port-Address of Nodes that must respond. Combined with Net. + + - size: 2 + doc: Filler (pad length to match ArtPoll) + + - size: 7 + doc: Spare, transmit as 0, receivers don't test + + - id: net + type: u1 + doc: The top 7 bits of the 15 bit Port-Address of Nodes that must respond + + - id: command + contents: [0x00] + doc: 0x00 is TodFull, send the entire TOD + + - id: len_address + type: u1 + doc: The number of entries in Address that are used. Max value is 32 + + - id: address + size: len_address + doc: Array of low bytes for the Port-Address of Nodes that must respond. Combined with Net to give full Port-Address From eb519846a71588e2da67b0105f55fa11e917f652 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Mon, 24 Jul 2023 01:37:42 +0100 Subject: [PATCH 10/49] Rapidly fixing some docs --- artnet/ksy/arttodrequest.ksy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/artnet/ksy/arttodrequest.ksy b/artnet/ksy/arttodrequest.ksy index b220a54..6df49b4 100644 --- a/artnet/ksy/arttodrequest.ksy +++ b/artnet/ksy/arttodrequest.ksy @@ -37,7 +37,7 @@ seq: - id: opcode contents: [0x00, 0x80] - doc: OpIpProgReply (transmitted little endian) + doc: OpTodRequest (transmitted little endian) - id: proto_version contents: [0x00, 0x0e] From 33118af66d2211cd78e55576959a5fbb7e33db6f Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Mon, 24 Jul 2023 01:37:48 +0100 Subject: [PATCH 11/49] Adding ArtVlc --- artnet/ksy/artvlc.ksy | 131 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 artnet/ksy/artvlc.ksy diff --git a/artnet/ksy/artvlc.ksy b/artnet/ksy/artvlc.ksy new file mode 100644 index 0000000..1a73ac5 --- /dev/null +++ b/artnet/ksy/artvlc.ksy @@ -0,0 +1,131 @@ +meta: + id: artvlc + title: ArtVlc + +doc: | + ArtVlc is a specific implementation of the ArtNzs packet which is used for the transfer of VLC (Visible Light Communication) data over Art-Net. (The packet's payload can also be used to transfer VLC over a DMX512 physical layer). + + Fields 2, 6, 11, 12 and 13 should be treated as 'magic numbers' to detect this packet. + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 + + - id: opcode + contents: [0x00, 0x51] + doc: OpNzs (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - id: sequence + type: u1 + doc: | + The sequence number is used to ensure that ArtNzs packets are used in the correct order. + When Art-Net is carried over a medium such as the Internet, it is possible that ArtNzs packets will reach the receiver out of order. + + - id: start_code + type: u1 + doc: The DMX512 start code of this packet. Must not be Zero or RDM + + - id: port_address + type: u2le + doc: 15 bit Port-Address to which this packet is destined + + - id: len_data + type: u2be + doc: | + The length of the data array. This value should be a number in the range 1 - 512. + It represents the number of DMX512 channels encoded in packet. + + - id: magic_number + contents: [0x41, 0x4C, 0x45] + doc: Magic number used to identify this packet + + - id: flags + type: flags + doc: Bit fields used to control VL C operation. Bits that are unused shall be transmitted as zero. + + - id: data + size: len_data + doc: A variable length array of DMX512 lighting data + + - id: trans + type: u2be + doc: The transaction number is a 16-bit value which allows VLC transactions to be synchronised. A value of 0 indicates the first packet in a transaction. A value of ffff_16 indicates the final packet in the transaction. All other packets contain consecutive numbers which increment on each packet and roll over to 1 at fffe_16 + + - id: slot_address + type: u2be + doc: The slot number, range 1-512, of the device to which this packet is directed. A value 0f 0 indicates that all devices attached to this packet's Port-Address should accept the packet. + + - id: payload_count + type: u2be + doc: The 16-bit payload size in the range 0 to 480_10 + + - id: payload_checksum + type: u2be + doc: The 16-bit unsigned additive checksum of the data in the payload. + + - size: 1 + doc: Transmit as 0, receive does not check + + - id: depth + type: u1 + doc: The 8-bit VLC modulation depth expressed as a percentage in the range 1 to 100. A value of 0 indicates that the transmitter should use its default value + + - id: frequency + type: u2be + doc: The 16-bit modulation frequency of the VLC transmitter expressed in Hz. A value of 0 indicates that the transmitter should use its default value. + + - id: modulation + type: u2be + doc: The 16-bit modulation type number that the transmitter should use to transmit VLC. 000016 - Use transmitter default. + + - id: payload_language + type: u2be + doc: The 16-bit payload language code. + enum: lang_codes + + - id: beacon_repeat_frequency + type: u2be + doc: The 16-bit beacon mode repeat frequency. If Flags.Beacon is set, this 16-bit value indicates the frequency in Hertz at which the VLC packet should be repeated. 0000_16 means use transmitter default + + - id: payload + size: payload_count + doc: The actual VLC payload + +types: + flags: + seq: + - id: ieee + type: b1 + doc: If set, data in the payload area shall be interpreted as IEEE VL C data. If clear, PayLanguage defines the payload contents. + + - id: reply + type: b1 + doc: If set this is a reply packet that is in response to the request sent with matching number in the transaction number TransHi/Lo. If clear this is not a reply. + + - id: beacon + type: b1 + doc: If set, the transmitter should continuously repeat transmission of this packet until another is received. If clear, the transmitter should transmit this packet once + + - type: b5 + doc: Unused, transmit as zero + +enums: + lang_codes: + 0: + id: beacon_url + doc: Payload contains a simple text string representing a URL + + 1: + id: beacon_text + doc: Payload contains a simple ASCII text message. + + 2: + id: beacon_locator_id + doc: ayload contains a big-endian 16-bit number \ No newline at end of file From 3a391ba5895514cc91a0ce89f336a5a6df8d0ef9 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Mon, 24 Jul 2023 01:51:32 +0100 Subject: [PATCH 12/49] Fixing a recommendation from ksc --- artnet/ksy/artvlc.ksy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/artnet/ksy/artvlc.ksy b/artnet/ksy/artvlc.ksy index 1a73ac5..d937f9c 100644 --- a/artnet/ksy/artvlc.ksy +++ b/artnet/ksy/artvlc.ksy @@ -62,7 +62,7 @@ seq: type: u2be doc: The slot number, range 1-512, of the device to which this packet is directed. A value 0f 0 indicates that all devices attached to this packet's Port-Address should accept the packet. - - id: payload_count + - id: len_payload type: u2be doc: The 16-bit payload size in the range 0 to 480_10 @@ -95,7 +95,7 @@ seq: doc: The 16-bit beacon mode repeat frequency. If Flags.Beacon is set, this 16-bit value indicates the frequency in Hertz at which the VLC packet should be repeated. 0000_16 means use transmitter default - id: payload - size: payload_count + size: len_payload doc: The actual VLC payload types: From 1bb40874d51a079fe6268eb7c780df926f43a303 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Mon, 24 Jul 2023 01:51:45 +0100 Subject: [PATCH 13/49] Adding ArtInput and ArtFirmwareMaster --- artnet/ksy/artfirmwaremaster.ksy | 101 +++++++++++++++++++++++++++++++ artnet/ksy/artinput.ksy | 65 ++++++++++++++++++++ 2 files changed, 166 insertions(+) create mode 100644 artnet/ksy/artfirmwaremaster.ksy create mode 100644 artnet/ksy/artinput.ksy diff --git a/artnet/ksy/artfirmwaremaster.ksy b/artnet/ksy/artfirmwaremaster.ksy new file mode 100644 index 0000000..bc227f0 --- /dev/null +++ b/artnet/ksy/artfirmwaremaster.ksy @@ -0,0 +1,101 @@ +meta: + id: artfirmwaremaster + title: ArtFirmwareMaster + +doc: | + ## Firmware and UBEA Upgrades + + This section defines the packets used to send firmware revisions to a node. In all instances, communication is private. Under no circumstances should the broadcast address be used. + + The transaction involves the controller sending multiple ArtFirmwareMaster packets to a Node's IP address. Each packet is acknowledged by the Node with an ArtFirmwareReply. + + The controller allows a 30 second maximum delay for reception of the ArtFirmwareReply. + + If the reply is not received in this time, the controller aborts the transaction. The large time period is to allow for Nodes that are writing directly to slow non-volatile memory. + + The Node allows a 30 second delay between sending an ArtFirmwareReply and receipt of the next consecutive ArtFirmwareMaster. If the next consecutive block is not received within this time, the Node aborts the transaction. In this instance the Node returns to its previous operating system and sets ArtPollReply->Status and ArtPollReply ->NodeReport accordingly. + + The firmware update file contains a header that defines the Node OEM codes that are valid for this update. The Controller must check this value before sending to a Node. The Node also checks this data on r eceipt of the first packet. If the Node receives a packet with an invalid code, it sends an error response. + + The UBEA is the User Bios Expansion Area. This is a limited firmware upload mechanism that allows third party firmware extensions to be added to a Node. + + Manufacturers who implement this feature must document the software interface requirements + + Controller: + Receive: No Action + Unicase Transmit: Controller transmits to a specific node IP address + Broadcast: Not allowed + + Node: + Receive: Reply with OpFirmwareReply + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + + Media Server: + Receive: Reply with OpFirmwareReply + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 + + - id: opcode + contents: [0x00, 0xf2] + doc: OpFirmwareMaster (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - size: 2 + doc: Filler, pad length to match ArtPoll + + - id: type + type: u1 + enum: types + doc: Defines the packet contents + + - id: block_id + type: u1 + doc: Counts the consecutive blocks of firmware upload. Starting at 0x00 for the FirmFirst or UbeaFirst packet. + + - id: firmware_length + type: u4be + doc: This Int64 parameter describes the total number of words (Int16) in the firmware upload plus the firmware header size. Eg a 32K word upload plus 530 words of header information == 0x00008212. This value is also the file size (in words) of the file to be uploaded. + + - size: 20 + doc: Spare, controller sets to zero, node does not test + + - id: data + size: 512 + doc: This array contains the firmware or UBEA data block. The order is hi byte first. The interpretation of this data is manufacturer specific. Final packet should be null packed if less than 512 bytes needed. + +enums: + types: + 0: + id: firm_first + doc: The first packet of a firmware upload + + 1: + id: firm_cont + doc: A consecutive continuation packet of firmware upload + + 2: + id: firm_last + doc: The last packet of a firmware upload + + 3: + id: ubea_first + doc: The first packet of a UBEA upload + + 4: + id: ubea_cont + doc: A consecutive continuation packet of a UBEA upload + + 5: + id: ubea_last + doc: The last packet of a UBEA upload diff --git a/artnet/ksy/artinput.ksy b/artnet/ksy/artinput.ksy new file mode 100644 index 0000000..c6fe9f0 --- /dev/null +++ b/artnet/ksy/artinput.ksy @@ -0,0 +1,65 @@ +# Development nodes +# * should input be type u1, its technically b1 but with 7 dead bits + +meta: + id: artinput + title: ArtInput + +doc: | + A Controller or monitoring device on the network can enable or disable individual DMX512 inputs on any of the network nodes. This allows the Controller to directly control network traffic and ensures that unused inputs are disabled and therefore not wasting bandwidth. + + All nodes power on with all inputs enabled. + + Caution should be exercised when implementing this function in the controller. Keep in mind that some network traffic may be operating on a node to node basis. + + Controller: + Receive: No Action + Unicase Transmit: Controller transmits to a specific node IP address + Broadcast: Not allowed + + Node: + Receive: Reply with ArtPollReply + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + + Media Server: + Receive: Reply with ArtPollReply + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 + + - id: opcode + contents: [0x00, 0x70] + doc: OpInput (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - size: 1 + doc: Filler, pad length to match ArtPoll + + - id: bind_index + type: u1 + doc: The BindIndex defines the bound node which originated this packet and is used to uniquely identify the bound node when identical IP addresses are in use. This number represents the order of bound devices. A lower number me ans closer to root device. A value of 1 means root device. + + - id: num_ports + type: u2be + doc: Describes the number of input or output ports. Currently limited to 4 but with room for expansion + + - id: input + type: u1 + enum: input_status + repeat: expr + repeat-expr: 4 + +enums: + input_status: + 0: enabled + 1: disabled From eef6770a5f612e8698dba55fbd108684f6e5f22f Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Mon, 24 Jul 2023 01:55:11 +0100 Subject: [PATCH 14/49] Removing pre-built html --- artnet/ksy/arttodrequest.html | 122 ---------------------------------- 1 file changed, 122 deletions(-) delete mode 100644 artnet/ksy/arttodrequest.html diff --git a/artnet/ksy/arttodrequest.html b/artnet/ksy/arttodrequest.html deleted file mode 100644 index 784a6f7..0000000 --- a/artnet/ksy/arttodrequest.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - Arttodrequest format specification - - -
-

Arttodrequest format specification

- - - -

Type: Arttodrequest

- -

This packet is used to request the Table of RDM Devices (TOD). A Node receiving this packet -must not interpret it as forcing full discovery. Full discovery is only initiated at power on, or when an ArtTodControl.AtcFlush is received. The response is ArtTodData. - -Controller: - Receive: No Action - Unicase Transmit: Not Allowed - Broadcast: Controller Directed Broadcast to all nodes - -Node Output Gateway: - Receive: Reply with ArtTodData - Unicast Transmit: Not Allowed - Broadcast: Not Allowed - -Node Input Gateway: - Receive: No action - Unicast Transmit: Not Allowed - Broadcast: Input Gateway Directed Broadcasts to all nodes - -Media Server: - Receive: No Action - Unicast Transmit: Not Allowed - Broadcast: Not Allowed -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OffsetSizeIDTypeNote
0...idArray of 8 characters, the final character is a null termination. -Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 -
8...opcodeOpIpProgReply (transmitted little endian)
10...proto_versionProtocol version (constant 14, transmitted big endian)
12...unnamed_3Filler (pad length to match ArtPoll)
14...unnamed_4Spare, transmit as 0, receivers don't test
21...netu1The top 7 bits of the 15 bit Port-Address of Nodes that must respond
22...command0x00 is TodFull, send the entire TOD
23...len_addressu1The number of entries in Address that are used. Max value is 32
24...addressArray of low bytes of the Port-Address of Nodes that must respond. Combined with Net.
- -
- - - - - - - - From 99383548d55c2eeb7d454abfe08aa2b1a116cf71 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Mon, 24 Jul 2023 15:05:21 +0100 Subject: [PATCH 15/49] Adding ArtFirmwareReply --- artnet/ksy/artfirmwarereply.ksy | 61 +++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 artnet/ksy/artfirmwarereply.ksy diff --git a/artnet/ksy/artfirmwarereply.ksy b/artnet/ksy/artfirmwarereply.ksy new file mode 100644 index 0000000..56b12a8 --- /dev/null +++ b/artnet/ksy/artfirmwarereply.ksy @@ -0,0 +1,61 @@ +meta: + id: artfirmwarereply + title: ArtFirmwareReply + +doc: | + This packet is sent by the Node to the Controller in acknowledgement of each OpFirmwareMaster packet. + + Controller: + Receive: Send next OpFirmwareMaster + Unicase Transmit: Not allowed + Broadcast: Not allowed + + Node: + Receive: No Action + Unicast Transmit: Node transmits to specfic controller IP address + Broadcast: Not Allowed + + Media Server: + Receive: No Action + Unicast Transmit: Node transmits to specific controller IPI address + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 + + - id: opcode + contents: [0x00, 0xf3] + doc: OpFirmwareReply (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - size: 2 + doc: Filler, pad length to match ArtPoll + + - id: type + type: u1 + enum: types + doc: Defines the packet contents + + - size: 21 + doc: Spare, node sets to zero, controller does not test + +enums: + types: + 0: + id: firm_block_good + doc: Last packet received successfully + + 1: + id: firm_all_good + doc: All firmware received successfully + + 255: + id: firm_fail + doc: Frmware upload failed (all error conditions) From e33f1f098f728811877fb9034827879c2da4b272 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Mon, 24 Jul 2023 15:16:22 +0100 Subject: [PATCH 16/49] Adding the firmware format even though its not a packet --- artnet/ksy/firmware.ksy | 48 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 artnet/ksy/firmware.ksy diff --git a/artnet/ksy/firmware.ksy b/artnet/ksy/firmware.ksy new file mode 100644 index 0000000..afd6d59 --- /dev/null +++ b/artnet/ksy/firmware.ksy @@ -0,0 +1,48 @@ +# Development notes: +# * Note: this is not a packet but is formally defined +# * Username is assumed ASCII but not explicitly specified + +meta: + id: firmware + title: Firmware Format + +doc: | + All firmware and UBEA upload files should be of the following format. + + The firmware file extension is .alf + + The UBEA file extension is .alu + +seq: + - id: checksum + type: u2be + doc: This is a 16 bit, one's completement checksum of the firmware data area + + - id: version_info + type: u2be + doc: Node's firmware revision number. The Controllershould only use this field to decide if a firmware update should proceed. The convention is that a higher number is a more recent release of firmware + + - id: username + type: str + encoding: ASCII + size: 30 + doc: 30 byte field of user name information. This information is not checked by the Node. It is purely for display by the Controller. It should contain a human readable description of file and version number. Whilst this is a fixed length field, it must contain a null termination. (Note - assumed ASCII) + + - id: oem + type: u2be + repeat: expr + repeat-expr: 256 + doc: | + An array of 256 words. Each wordis hi byte first and represents an Oem code for which this file is valid. + Unused entries must be filled with 0x0000 + + - size: 510 + doc: An array of 255 words. Currently unused and should be set to zero + + - id: len_data + type: u4be + doc: The total lenght in words of the firmware information following this field + + - id: data + size: len_data + doc: The firmware data as an array of 16 bit values ordered hi byte first. The actual data is manufacturer specific From a939dc4cf431b62f357801b06a24289a762d0634 Mon Sep 17 00:00:00 2001 From: theMinorDeveloper Date: Thu, 3 Aug 2023 16:07:01 +0100 Subject: [PATCH 17/49] Setting DMX array min and max Min = 2, max = 512 --- artnet/ksy/artdmx.ksy | 3 +++ 1 file changed, 3 insertions(+) diff --git a/artnet/ksy/artdmx.ksy b/artnet/ksy/artdmx.ksy index e1309af..1ffa3a1 100644 --- a/artnet/ksy/artdmx.ksy +++ b/artnet/ksy/artdmx.ksy @@ -114,6 +114,9 @@ seq: The length of the DMX512 data array. This value should be an even number in the range 2-512. It represents the number of DMX512 channels encoded in packet. NB: Products which convert Art-Net to DMX512 may opt to always send 512 channels. + valid: + min: 2 + max: 512 - id: data size: len_data From 46af3a307584c97d62813144f8a4281a689497ad Mon Sep 17 00:00:00 2001 From: Sam Lane Date: Thu, 3 Aug 2023 17:35:28 +0100 Subject: [PATCH 18/49] Adding ArtTodData --- artnet/ksy/arttoddata.ksy | 110 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 artnet/ksy/arttoddata.ksy diff --git a/artnet/ksy/arttoddata.ksy b/artnet/ksy/arttoddata.ksy new file mode 100644 index 0000000..6321b6e --- /dev/null +++ b/artnet/ksy/arttoddata.ksy @@ -0,0 +1,110 @@ +# Development Notes + +meta: + id: arttoddata + title: ArtTodData + +doc: | + The ArtTodData packet is sent from Node Output Gateways in response to an ArtTodRequest from Controller. It is always sent as broadcast. + + Controller: + Receive: No Action + Unicase Transmit: Not Allowed + Broadcast: Not Allowed + + Node Output Gateway: + Receive: No Action + Unicast Transmit: Not Allowed + Broadcast: Output Gateway always Directed Broadcasts this packet + + Node Input Gateway: + Receive: No Action + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + + Media Server: + Receive: No Action + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + + - id: opcode + contents: [0x00, 0x81] + doc: OpIpProgReply (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - id: rdm_version + type: u1 + doc: Version of RDM specification supported by the device + enum: rdm_versions + + - id: port + type: u1 + doc: Physical port index in a range of 1-4. This number is used with bind_index to identify the physical port that generated the packets. This is done by referencing data in the ArtPollReply with a matching bind_index. Physical Port = (BindIndex - 1) * ArtPollReply->NumPortsLow + ArtTodDataPort. As most modern gateways will implmenet one universe per ArtPollReply, ArtTodData->Port will usually be set to a value of 1. + valid: + min: 1 + max: 4 + + - size: 6 + doc: Spare transmitted as zero, receivers don't test + + - id: bind_index + type: u1 + doc: The Bind Index defines the bound node which originated this packet. In combination with Port and Source IP address, it uniquely identifies the sender. This must match the BindIndex field in ArtPollReply. This number represents the order of bound devices. A lower number means close to root device. A value of 1 means root device. + + - id: net + type: u1 + doc: The top 7 bits of the Port-Address of the Output Gateway DMX Port that generated this packet + + - id: command_response + type: u1 + doc: Defines the packet contents according to the command_responses enum + enum: command_responses + + - id: address + type: u1 + doc: The low 8 bits of the Port-Address of the Output Gateway DMX Port that generated this packet. The high nibble is the Sub-Net switch. The low nibble corresponds to the Universe + + - id: uid_total + type: u2be + doc: The total number of RDM devices discovered by this Universe + + - id: block_count + type: u1 + doc: The index number of this packet. When uid_total exceeds 200, multiple ArtTodData packets are used. block_count is set to zero and incremented for each subsquent packet containing blocks of TOD information + + - id: len_tod + type: u1 + doc: The number of UIDs encoded in this packet. This is the length of the TOD array + + - id: tod + size: len_tod * 6 + doc: The array of RDM UIDs, each of which is a 6 byte value + +enums: + rdm_versions: + 0x00: + id: rdm_draft + doc: Devices that support the draft 1.0 version of RDM + + 0x01: + id: rdm_standard + doc: Devices that support the standard 1.0 version of RDM + + command_responses: + 0x00: + id: tod_full + doc: The packet contains the entire TOD or is the first packet in a sequence of packets that contains the entire TOD + + 0xFF: + id: tod_nak + doc: The TOD is not available or discovery is incomplete From a5accdf6ff643170705c46001ff64317a6499f2f Mon Sep 17 00:00:00 2001 From: Sam Lane Date: Thu, 3 Aug 2023 17:43:10 +0100 Subject: [PATCH 19/49] Adding ArtTodControl --- artnet/ksy/arttodcontrol.ksy | 72 ++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 artnet/ksy/arttodcontrol.ksy diff --git a/artnet/ksy/arttodcontrol.ksy b/artnet/ksy/arttodcontrol.ksy new file mode 100644 index 0000000..1fee7a9 --- /dev/null +++ b/artnet/ksy/arttodcontrol.ksy @@ -0,0 +1,72 @@ +# Development Notes + +meta: + id: arttodcontrol + title: ArtTodControl + +doc: | + The ArtTodControl packet is used to send RDM control parameters over Art-Net. The response is ArtTodData. + + Controller: + Receive: No Action + Unicase Transmit: Allowed + Broadcast: Allowed + + Node Output Gateway: + Receive: Reply with ArtTodData + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + + Node Input Gateway: + Receive: No Action + Unicast Transmit: Not Allowed + Broadcast: The Input Gateway Directed Broadcasts to all nodes + + Media Server: + Receive: No Action + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + + - id: opcode + contents: [0x00, 0x82] + doc: OpIpProgReply (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - size: 2 + doc: Pad length to match ArtPoll + + - size: 7 + doc: Spare transmitted as zerom receivers don't test + + - id: net + type: u1 + doc: The top 7 bits of the Port-Address of the Output Gateway DMX Port that should action this command + + - id: command_response + type: u1 + doc: Defines the packet action + enum: packet_action + + - id: address + type: u1 + doc: The low 8 bits of the Port-Address of the Output Gateway DMX Port that should action this command + +enums: + packet_action: + 0x00: + id: atc_none + doc: No action + + 0x01: + id: atc_flush + doc: The node fluses its TOD and instigates full discovery From c112e912108c3013f0f6e6190be975803da2b0b9 Mon Sep 17 00:00:00 2001 From: Sam Lane Date: Thu, 3 Aug 2023 17:54:29 +0100 Subject: [PATCH 20/49] Adding ArtRdm --- artnet/ksy/artrdm.ksy | 86 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 artnet/ksy/artrdm.ksy diff --git a/artnet/ksy/artrdm.ksy b/artnet/ksy/artrdm.ksy new file mode 100644 index 0000000..04e8d2f --- /dev/null +++ b/artnet/ksy/artrdm.ksy @@ -0,0 +1,86 @@ +# Development Notes + +meta: + id: artrdm + title: ArtRdm + +doc: | + The ArtRdm packet is used to transport all non-discovery RDM messages over Art-Net + + Controller: + Receive: No Action + Unicase Transmit: Yes + Broadcast: Not Allowed + + Node Output Gateway: + Receive: No Action + Unicast Transmit: Yes + Broadcast: Not Allowed + + Node Input Gateway: + Receive: No Action + Unicast Transmit: Yes + Broadcast: Not Allowed + + Media Server: + Receive: No Action + Unicast Transmit: Yes + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + + - id: opcode + contents: [0x00, 0x83] + doc: OpIpProgReply (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - id: rdm_version + type: u1 + doc: Version of RDM specification supported by the device + enum: rdm_versions + + - size: 1 + doc: Pad length to match ArtPoll + + - size: 7 + doc: Spare transmitted as zero, receivers don't test + + - id: net + type: u1 + doc: The top 7 bits of the Port-Address that should action this command + + - id: command + type: u1 + doc: Defines the packet action + enum: command + + - id: address + type: u1 + doc: The low 8 bits of the Port-Address that should action this packet + + - id: rdm_packet + size: 256 + doc: The RDM packet data excluding the DMX StartCode. The maximum packet length is 255 + 2-byte checksum - 1-byte start code = 256 bytes + +enums: + rdm_versions: + 0x00: + id: rdm_draft + doc: Devices that support the draft 1.0 version of RDM + + 0x01: + id: rdm_standard + doc: Devices that support the standard 1.0 version of RDM + + command: + 0x00: + id: ar_process + doc: Process the RDM Packet \ No newline at end of file From 871671981debf61543f56302ef42ae446249b71b Mon Sep 17 00:00:00 2001 From: Sam Lane Date: Thu, 3 Aug 2023 18:18:13 +0100 Subject: [PATCH 21/49] Adding ArtRdmSub --- artnet/ksy/artrdmsub.ksy | 106 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 artnet/ksy/artrdmsub.ksy diff --git a/artnet/ksy/artrdmsub.ksy b/artnet/ksy/artrdmsub.ksy new file mode 100644 index 0000000..945d32b --- /dev/null +++ b/artnet/ksy/artrdmsub.ksy @@ -0,0 +1,106 @@ +# Development Notes + +meta: + id: artrdmsub + title: ArtRdmSub + +doc: | + The ArtRdmSub packet is used to transfer Get, Set, GetResponse and SetResponse data to and from multiple sub-devices within an RDM device. This packet is primarily used by Art-Net devices that proxy or emulate RDM. It offers very significant bandwidth gains over the approach of sending multiple ArtRDM packets. + + Please note that this packet was added at the release of Art-Net II. For backwards compatibility it is only accepable to implement this packet in addition to ArtRdm. It must not be used instead of ArtRDM + + Controller: + Receive: No Action + Unicase Transmit: Yes + Broadcast: Not Allowed + + Node Output Gateway: + Receive: No Action + Unicast Transmit: Yes + Broadcast: Not Allowed + + Node Input Gateway: + Receive: No Action + Unicast Transmit: Yes + Broadcast: Not Allowed + + Media Server: + Receive: No Action + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + +seq: + - id: id + contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] + doc: | + Array of 8 characters, the final character is a null termination. + Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + + - id: opcode + contents: [0x00, 0x84] + doc: OpIpProgReply (transmitted little endian) + + - id: proto_version + contents: [0x00, 0x0e] + doc: Protocol version (constant 14, transmitted big endian) + + - id: rdm_version + type: u1 + doc: Version of RDM specification supported by the device + enum: rdm_versions + + - size: 1 + doc: Spare transmitted as zero, receivers don't test + + - id: uid + type: uid + doc: UID of target RDM device + + - size: 1 + doc: Spare transmitted as zero, receivers don't test + + - id: command_class + type: u1 + doc: As per RDM specification. This field defines wether this is a Get, Set, GetResponse, or SetResponse #TODO Enums + + - id: parameter_id + type: u2be + doc: As per RDM specification. This field defines the type of parameter contained in this packet + + - id: sub_device + type: u2be + doc: Defines the first device information contained in packet. This follows the RDM convention that 0 = root device, and 1 = first sub-devices + + - id: sub_count + type: u2be + doc: The number of sub-devices packed into the packet + valid: + min: 1 + + - size: 4 + doc: Spare transmit as zero, receviers don't test + + - id: data + size: sub_count * 2 + doc: The size of this 16-bit big endian data array is sub_count for Set and GetResponse, and 0 for Get and SetResponse commands + +enums: + rdm_versions: + 0x00: + id: rdm_draft + doc: Devices that support the draft 1.0 version of RDM + + 0x01: + id: rdm_standard + doc: Devices that support the standard 1.0 version of RDM + +types: + uid: + seq: + - id: manufacturer_id + type: u2be + doc: Manufacturer ID + + - id: device_id + type: u4be + doc: Device ID \ No newline at end of file From 7b8c4039781c9f370cbd1603509d905e8b8687c7 Mon Sep 17 00:00:00 2001 From: Sam Lane Date: Thu, 3 Aug 2023 18:18:26 +0100 Subject: [PATCH 22/49] Migrating RDM UID to custom type --- artnet/ksy/arttoddata.ksy | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/artnet/ksy/arttoddata.ksy b/artnet/ksy/arttoddata.ksy index 6321b6e..78963df 100644 --- a/artnet/ksy/arttoddata.ksy +++ b/artnet/ksy/arttoddata.ksy @@ -87,6 +87,7 @@ seq: doc: The number of UIDs encoded in this packet. This is the length of the TOD array - id: tod + type: uid size: len_tod * 6 doc: The array of RDM UIDs, each of which is a 6 byte value @@ -108,3 +109,14 @@ enums: 0xFF: id: tod_nak doc: The TOD is not available or discovery is incomplete + +types: + uid: + seq: + - id: manufacturer_id + type: u2be + doc: Manufacturer ID + + - id: device_id + type: u4be + doc: Device ID \ No newline at end of file From b5a9f5f12a7cc186e2d6a94528f38c8033338aee Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 5 Aug 2023 14:23:56 +0100 Subject: [PATCH 23/49] Documenting design choices for EstaMan Per https://github.com/About-Time-Technologies/Lighting-Protocols/pull/15#discussion_r1285039950 --- artnet/ksy/artcommand.ksy | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/artnet/ksy/artcommand.ksy b/artnet/ksy/artcommand.ksy index 120f9b9..8a553c1 100644 --- a/artnet/ksy/artcommand.ksy +++ b/artnet/ksy/artcommand.ksy @@ -1,6 +1,3 @@ -# Development nodes -# * esta_manufacturer has a misleading description in the spec. It is listed as going Hi Lo, however the description of the fields themselves describe Lo Hi. Based on experimentation, I am pretty sure its Lo Hi however this may need correcting - meta: id: artcommand title: ArtCommand @@ -53,6 +50,8 @@ seq: The ESTA manufacturer code. These codesare used to represent equipment manufacturer. They are assigned by ESTA. This field can be interpreted as two ASCII octetsrepresenting the manufacturer initials. + _**Note**: The fields are describes as HiLo in name, but descriptions specify LoHi. Experimentally LoHi seems accurate, however this may be a cause for bugs. LoHi also matches ArtPollReply, but does not match ArtPoll so you may need to invert this field yourself in some scenarios._ + - id: length type: u2be doc: The length of the text array below From 1ce27a6ad771e9b300fb9ce9c839be2a30b83964 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 5 Aug 2023 14:24:55 +0100 Subject: [PATCH 24/49] Fixing quotes on Art-Net Per https://github.com/About-Time-Technologies/Lighting-Protocols/pull/15#discussion_r1285040010 --- artnet/ksy/artaddress.ksy | 2 +- artnet/ksy/artdiagdata.ksy | 2 +- artnet/ksy/artipprog.ksy | 2 +- artnet/ksy/artipprogreply.ksy | 2 +- artnet/ksy/arttodrequest.ksy | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/artnet/ksy/artaddress.ksy b/artnet/ksy/artaddress.ksy index dc7a396..a16dbd7 100644 --- a/artnet/ksy/artaddress.ksy +++ b/artnet/ksy/artaddress.ksy @@ -28,7 +28,7 @@ seq: contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] doc: | Array of 8 characters, the final character is a null termination. - Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 - id: opcode contents: [0x00, 0x60] diff --git a/artnet/ksy/artdiagdata.ksy b/artnet/ksy/artdiagdata.ksy index 119fefd..3319c40 100644 --- a/artnet/ksy/artdiagdata.ksy +++ b/artnet/ksy/artdiagdata.ksy @@ -28,7 +28,7 @@ seq: contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] doc: | Array of 8 characters, the final character is a null termination. - Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 - id: opcode contents: [0x00, 0x60] diff --git a/artnet/ksy/artipprog.ksy b/artnet/ksy/artipprog.ksy index 9f64724..49859bd 100644 --- a/artnet/ksy/artipprog.ksy +++ b/artnet/ksy/artipprog.ksy @@ -29,7 +29,7 @@ seq: contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] doc: | Array of 8 characters, the final character is a null termination. - Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 - id: opcode contents: [0x00, 0xf8] diff --git a/artnet/ksy/artipprogreply.ksy b/artnet/ksy/artipprogreply.ksy index 34e18a6..2608312 100644 --- a/artnet/ksy/artipprogreply.ksy +++ b/artnet/ksy/artipprogreply.ksy @@ -27,7 +27,7 @@ seq: contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] doc: | Array of 8 characters, the final character is a null termination. - Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 - id: opcode contents: [0x00, 0xf9] diff --git a/artnet/ksy/arttodrequest.ksy b/artnet/ksy/arttodrequest.ksy index 6df49b4..ca83e07 100644 --- a/artnet/ksy/arttodrequest.ksy +++ b/artnet/ksy/arttodrequest.ksy @@ -33,7 +33,7 @@ seq: contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] doc: | Array of 8 characters, the final character is a null termination. - Value = ‘A’ ‘r’ ‘t’ ‘-‘ ‘N’ ‘e’ ‘t’ 0x00 + Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 - id: opcode contents: [0x00, 0x80] From 96b73dc3d3b6172dc635d4bca9a1ad676122eb44 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 5 Aug 2023 14:28:47 +0100 Subject: [PATCH 25/49] Finishing artdiagdata Per https://github.com/About-Time-Technologies/Lighting-Protocols/pull/15#discussion_r1285040042 --- artnet/ksy/artdiagdata.ksy | 47 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/artnet/ksy/artdiagdata.ksy b/artnet/ksy/artdiagdata.ksy index 3319c40..f403074 100644 --- a/artnet/ksy/artdiagdata.ksy +++ b/artnet/ksy/artdiagdata.ksy @@ -37,3 +37,50 @@ seq: - id: proto_version contents: [0x00, 0x0e] doc: Protocol version (constant 14, transmitted big endian) + + - size: 1 + doc: Filler1 - Ignore by receiver, set to zero by sender + + - id: diag_priority + type: u1 + enum: priority_codes + doc: The priority of this diagnostic data. See Table 5. + + - id: logical_port + type: u1 + doc: The logical DMX port of the product to which the message relates. Set to zero for general messages. This field if purely informational and is designedto allow development tools to filter diagnostics. + + - size: 1 + doc: Filler3 - Ignore by receiver, set to zero by sender + + - id: data_len + type: u2be + doc: The length of the text array below + + - id: data + type: str + encoding: ascii + size: data_len + doc: ASCII text array, null terminated. Max length is 512 bytes including the null terminator + +enums: + priority_codes: + 16: + id: dp_low + doc: Low priority message + + 64: + id: dp_med + doc: Medium priority message + + 128: + id: dp_high + doc: High priority message + + 224: + id: dp_critical + doc: Critical priority message + + 240: + id: dp_volatile + doc: Volatile message. Messages of this type are displayed on a single line in the DMX-Workshop diagnostics display. All other types are displayed in a list box From 1ee0734db97e70b1489dc56eb79ccb233b3d0e6c Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 5 Aug 2023 14:31:18 +0100 Subject: [PATCH 26/49] Adding EstaMan and Oem Needs testing due to the added consuming expression. Per https://github.com/About-Time-Technologies/Lighting-Protocols/pull/15#discussion_r1285041924 --- artnet/ksy/artpoll.ksy | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/artnet/ksy/artpoll.ksy b/artnet/ksy/artpoll.ksy index f5401d6..d1428da 100644 --- a/artnet/ksy/artpoll.ksy +++ b/artnet/ksy/artpoll.ksy @@ -56,7 +56,18 @@ seq: - id: target_port type: u4be - if: _io.size >= 18 and flags.targeted_mode + if: _io.size >= 18 and flags.targeted_mode == true + + - size: 4 + if: _io.size >= 18 and flags.targeted_mode == false + + - id: esta_manufacturer + type: u2be + doc: The ESTA Manufacturer Code is assigned by ESTA and uniquely identifies the manufacturer that generated this packet. + + - id: oem + type: u2be + doc: The Oem code uniquely identifies the product sending this packet types: flags: From d89f4b798f0ace52bd0b4507069f9ac8f3d01a2e Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 5 Aug 2023 14:31:45 +0100 Subject: [PATCH 27/49] Adding clarity Per https://github.com/About-Time-Technologies/Lighting-Protocols/pull/15#discussion_r1285042019 --- artnet/ksy/artpoll.ksy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/artnet/ksy/artpoll.ksy b/artnet/ksy/artpoll.ksy index d1428da..047676d 100644 --- a/artnet/ksy/artpoll.ksy +++ b/artnet/ksy/artpoll.ksy @@ -79,9 +79,9 @@ types: type: b1 doc: Enable Targeted Mode - - id: vlc_transmission + - id: disable_vlc_transmission type: b1 - doc: Enable VLC transmission + doc: Disables VLC transmission when set - id: diagnostic_unicast type: b1 From 6a85903e3915bbfbb71a0ac00c776e8f5fcefb79 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 5 Aug 2023 14:37:55 +0100 Subject: [PATCH 28/49] Fixing port address on ArtPollReply Per https://github.com/About-Time-Technologies/Lighting-Protocols/pull/15#discussion_r1285042548 --- artnet/ksy/artpollreply.ksy | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/artnet/ksy/artpollreply.ksy b/artnet/ksy/artpollreply.ksy index 8cc602a..bd5614f 100644 --- a/artnet/ksy/artpollreply.ksy +++ b/artnet/ksy/artpollreply.ksy @@ -37,14 +37,10 @@ seq: type: u2be doc: Node's firmware revision number. The controller should only use this field to decide if a firmware udpate should proceed. The convention is that a higher number is a more recent release of firmware - - id: net_switch - type: u1 - doc: Bits 14-8 of the 15 bit Port-Address are encoded into the bottom 7 bits of this field. This is used in combination with SubSwitch and SwIn[] or SwOut[] to produce the full universe address - - - id: sub_switch - type: u1 - doc: Bits 7-4 of the 15 bit Port-Address are encoded into the bottom 4 bits of this field. This is used in combination with NetSwitch and SwIn[] or SwOut[] to produce the full universe address. - + - id: port_address + type: u2be + doc: 15 bit Port-Address to which this packet is destined + - id: oem type: u2be doc: The Oem word unique identifies the product From 5e16b0bcd33193c4e0c92242963009cc9d82d418 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 5 Aug 2023 14:38:12 +0100 Subject: [PATCH 29/49] Integer to array for SwIn/Out in ArtPollReply Per https://github.com/About-Time-Technologies/Lighting-Protocols/pull/15#discussion_r1285042917 --- artnet/ksy/artpollreply.ksy | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/artnet/ksy/artpollreply.ksy b/artnet/ksy/artpollreply.ksy index bd5614f..ad5d987 100644 --- a/artnet/ksy/artpollreply.ksy +++ b/artnet/ksy/artpollreply.ksy @@ -114,11 +114,15 @@ seq: doc: This array defines output status of the node - id: sw_in - type: u4be + type: u1 + repeat: expr + repeat-expr: 4 doc: Bits 3-0 of the 15 bit Port-Addressfor each of the 4 possible input ports are encoded into the low nibble. - id: sw_out - type: u4be + type: u1 + repeat: expr + repeat-expr: 4 doc: Bits 3-0 of the 15 bit Port-Addressfor each of the 4 possible output ports are encoded into the low nibble. - id: acn_priority From 86cc808f9246051a940c4f7d0b5fe471f4f59b6c Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 5 Aug 2023 14:38:26 +0100 Subject: [PATCH 30/49] Adding missing fields to ArtPollReply Per https://github.com/About-Time-Technologies/Lighting-Protocols/pull/15#discussion_r1285044330 --- artnet/ksy/artpollreply.ksy | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/artnet/ksy/artpollreply.ksy b/artnet/ksy/artpollreply.ksy index ad5d987..4ca9cca 100644 --- a/artnet/ksy/artpollreply.ksy +++ b/artnet/ksy/artpollreply.ksy @@ -189,6 +189,21 @@ seq: size: 6 doc: RDMnet & LLRP Default Responder UID if: _io.size >= 224 + + - id: user + type: u2be + doc: Available for user specific data + if: _io.size >= 226 + + - id: refresh_rate + type: u2be + doc: RefreshRate allows the device to specify the maximum refresh rate, expressed in Hz, at which it can process ArtDmx. This is designed to allow refresh rates above DMX512 rates, for gateways that implement + if: _io.size >= 228 + + - size: 11 + doc: Filler, transmit as 0 for future expansion + if: _io.size >= 239 + types: status_1: From a997c9873fcb35ef0c3622fb4c2931e787e2dcb4 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 5 Aug 2023 14:39:17 +0100 Subject: [PATCH 31/49] Fixing field length in ArtPollReply Per https://github.com/About-Time-Technologies/Lighting-Protocols/pull/15#discussion_r1285045631 --- artnet/ksy/artpollreply.ksy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/artnet/ksy/artpollreply.ksy b/artnet/ksy/artpollreply.ksy index 4ca9cca..4bc1581 100644 --- a/artnet/ksy/artpollreply.ksy +++ b/artnet/ksy/artpollreply.ksy @@ -300,7 +300,7 @@ types: doc: This channel can input data onto the Art-Net network - id: format - type: u1 + type: b6 enum: port_type_format doc: The format of data this port interacts with From dcc43204ba22250ec0bac1464ea7259dd1dc2764 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 5 Aug 2023 14:39:53 +0100 Subject: [PATCH 32/49] Simplifying Aux in ArtSync Per https://github.com/About-Time-Technologies/Lighting-Protocols/pull/15#discussion_r1285048063 --- artnet/ksy/artsync.ksy | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/artnet/ksy/artsync.ksy b/artnet/ksy/artsync.ksy index d413185..cda1505 100644 --- a/artnet/ksy/artsync.ksy +++ b/artnet/ksy/artsync.ksy @@ -52,7 +52,5 @@ seq: doc: Protocol version (constant 14, transmitted big endian) - id: aux - type: u1 - repeat: expr - repeat-expr: 2 + size: 2 doc: Transmit as zero \ No newline at end of file From d531d946cd4ee90d39d06d64975c8b38db81a02d Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 5 Aug 2023 14:41:07 +0100 Subject: [PATCH 33/49] Mandating VLC magic number in ArtVlc Per https://github.com/About-Time-Technologies/Lighting-Protocols/pull/15#discussion_r1285049719 --- artnet/ksy/artvlc.ksy | 1 + 1 file changed, 1 insertion(+) diff --git a/artnet/ksy/artvlc.ksy b/artnet/ksy/artvlc.ksy index d937f9c..3e65b54 100644 --- a/artnet/ksy/artvlc.ksy +++ b/artnet/ksy/artvlc.ksy @@ -31,6 +31,7 @@ seq: - id: start_code type: u1 doc: The DMX512 start code of this packet. Must not be Zero or RDM + valid: 0x91 - id: port_address type: u2le From 1755a22f1e01a29059f4e92fb4dfb35ee5a3d280 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 5 Aug 2023 14:41:42 +0100 Subject: [PATCH 34/49] Removing invalid field in ArtVlc Per https://github.com/About-Time-Technologies/Lighting-Protocols/pull/15#discussion_r1285049898 --- artnet/ksy/artvlc.ksy | 4 ---- 1 file changed, 4 deletions(-) diff --git a/artnet/ksy/artvlc.ksy b/artnet/ksy/artvlc.ksy index 3e65b54..3f95a52 100644 --- a/artnet/ksy/artvlc.ksy +++ b/artnet/ksy/artvlc.ksy @@ -51,10 +51,6 @@ seq: type: flags doc: Bit fields used to control VL C operation. Bits that are unused shall be transmitted as zero. - - id: data - size: len_data - doc: A variable length array of DMX512 lighting data - - id: trans type: u2be doc: The transaction number is a 16-bit value which allows VLC transactions to be synchronised. A value of 0 indicates the first packet in a transaction. A value of ffff_16 indicates the final packet in the transaction. All other packets contain consecutive numbers which increment on each packet and roll over to 1 at fffe_16 From ba1294b7d629e88e012063d88789390ef8b9ad76 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 5 Aug 2023 14:45:55 +0100 Subject: [PATCH 35/49] Removing note that is now invalid Per https://github.com/About-Time-Technologies/Lighting-Protocols/pull/15#discussion_r1285041016 --- artnet/ksy/artipprog.ksy | 1 - 1 file changed, 1 deletion(-) diff --git a/artnet/ksy/artipprog.ksy b/artnet/ksy/artipprog.ksy index 49859bd..43038ea 100644 --- a/artnet/ksy/artipprog.ksy +++ b/artnet/ksy/artipprog.ksy @@ -79,7 +79,6 @@ types: type: b1 doc: | Set to enable DHCP (if set, ignore the lower bits - ) - Note: the following values are not skipped if set as the values are still present - type: b1 From 7fe29434a7d6615501efd296c4fd371889223810 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 5 Aug 2023 14:50:41 +0100 Subject: [PATCH 36/49] Reverting change to Port Address on ArtPollReply Per https://github.com/About-Time-Technologies/Lighting-Protocols/pull/15#discussion_r1285057124 --- artnet/ksy/artpollreply.ksy | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/artnet/ksy/artpollreply.ksy b/artnet/ksy/artpollreply.ksy index 4bc1581..32df9e9 100644 --- a/artnet/ksy/artpollreply.ksy +++ b/artnet/ksy/artpollreply.ksy @@ -37,9 +37,13 @@ seq: type: u2be doc: Node's firmware revision number. The controller should only use this field to decide if a firmware udpate should proceed. The convention is that a higher number is a more recent release of firmware - - id: port_address - type: u2be - doc: 15 bit Port-Address to which this packet is destined + - id: net_switch + type: u1 + doc: Bits 14-8 of the 15 bit Port-Address are encoded into the bottom 7 bits of this field. This is used in combination with SubSwitch and SwIn[] or SwOut[] to produce the full universe address. + + - id: sub_switch + type: u1 + doc: Bits 7-4 of the 15 bit Port-Address are encoded into the bottom 7 bits of this field. This is used in combination with SubSwitch and SwIn[] or SwOut[] to produce the full universe address. - id: oem type: u2be From 50aea39c295b65433e6f47b98d38aa37fe55a531 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Sat, 5 Aug 2023 23:34:52 +0100 Subject: [PATCH 37/49] Adding some extra documentation about sizing --- artnet/ksy/arttodrequest.ksy | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/artnet/ksy/arttodrequest.ksy b/artnet/ksy/arttodrequest.ksy index ca83e07..63c53e9 100644 --- a/artnet/ksy/arttodrequest.ksy +++ b/artnet/ksy/arttodrequest.ksy @@ -63,4 +63,7 @@ seq: - id: address size: len_address - doc: Array of low bytes for the Port-Address of Nodes that must respond. Combined with Net to give full Port-Address + doc: | + Array of low bytes for the Port-Address of Nodes that must respond. Combined with Net to give full Port-Address + + **Sizing Notes**: According to spec this should always be 32 bytes. However, to ensure non-compliant devices are likely to parse, this will only read up to the amount of addresses specified in the earlier field From 781f81652cd3f78ac39c628ed8720be765b186e0 Mon Sep 17 00:00:00 2001 From: minorDeveloper Date: Sat, 5 Aug 2023 23:44:49 +0100 Subject: [PATCH 38/49] Setting max value for len_address --- artnet/ksy/arttodrequest.ksy | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/artnet/ksy/arttodrequest.ksy b/artnet/ksy/arttodrequest.ksy index 63c53e9..2d687aa 100644 --- a/artnet/ksy/arttodrequest.ksy +++ b/artnet/ksy/arttodrequest.ksy @@ -59,7 +59,9 @@ seq: - id: len_address type: u1 - doc: The number of entries in Address that are used. Max value is 32 + doc: The number of entries in Address that are used + valid: + max: 32 - id: address size: len_address From 2e50f85ea4336da56ffe66225bd4968ad8d5e3b7 Mon Sep 17 00:00:00 2001 From: minorDeveloper Date: Sat, 5 Aug 2023 23:48:25 +0100 Subject: [PATCH 39/49] Port documentation formatting --- artnet/ksy/arttoddata.ksy | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/artnet/ksy/arttoddata.ksy b/artnet/ksy/arttoddata.ksy index 78963df..dd30776 100644 --- a/artnet/ksy/arttoddata.ksy +++ b/artnet/ksy/arttoddata.ksy @@ -49,7 +49,12 @@ seq: - id: port type: u1 - doc: Physical port index in a range of 1-4. This number is used with bind_index to identify the physical port that generated the packets. This is done by referencing data in the ArtPollReply with a matching bind_index. Physical Port = (BindIndex - 1) * ArtPollReply->NumPortsLow + ArtTodDataPort. As most modern gateways will implmenet one universe per ArtPollReply, ArtTodData->Port will usually be set to a value of 1. + doc: | + Physical port index in a range of 1-4. This number is used with bind_index to identify the physical port that generated the packets. + + `Physical port = (BindIndex - 1) * ArtPollReply->NumPortsLow + ArtTodDataPort` + + Most gateways will implmenet one universe per ArtPollReply so `ArtTodData->Port` will usually be set to a value of 1. valid: min: 1 max: 4 From 96f5ea601190d870d466c7164f1cde2c1c2898a8 Mon Sep 17 00:00:00 2001 From: minorDeveloper Date: Sat, 5 Aug 2023 23:52:50 +0100 Subject: [PATCH 40/49] Tabs formatting fix --- artnet/ksy/arttoddata.ksy | 6 +- artnet/ksy/arttodrequest.html | 125 ++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+), 3 deletions(-) create mode 100644 artnet/ksy/arttodrequest.html diff --git a/artnet/ksy/arttoddata.ksy b/artnet/ksy/arttoddata.ksy index dd30776..c0db0bb 100644 --- a/artnet/ksy/arttoddata.ksy +++ b/artnet/ksy/arttoddata.ksy @@ -50,11 +50,11 @@ seq: - id: port type: u1 doc: | - Physical port index in a range of 1-4. This number is used with bind_index to identify the physical port that generated the packets. + Physical port index in a range of 1-4. This number is used with bind_index to identify the physical port that generated the packets. - `Physical port = (BindIndex - 1) * ArtPollReply->NumPortsLow + ArtTodDataPort` + `Physical port = (BindIndex - 1) * ArtPollReply->NumPortsLow + ArtTodDataPort` - Most gateways will implmenet one universe per ArtPollReply so `ArtTodData->Port` will usually be set to a value of 1. + Most gateways will implmenet one universe per ArtPollReply so `ArtTodData->Port` will usually be set to a value of 1. valid: min: 1 max: 4 diff --git a/artnet/ksy/arttodrequest.html b/artnet/ksy/arttodrequest.html new file mode 100644 index 0000000..de91a1b --- /dev/null +++ b/artnet/ksy/arttodrequest.html @@ -0,0 +1,125 @@ + + + + + + + + + + + + Arttodrequest format specification + + +
+

Arttodrequest format specification

+ + + +

Type: Arttodrequest

+ +

This packet is used to request the Table of RDM Devices (TOD). A Node receiving this packet +must not interpret it as forcing full discovery. Full discovery is only initiated at power on, or when an ArtTodControl.AtcFlush is received. The response is ArtTodData. + +Controller: + Receive: No Action + Unicase Transmit: Not Allowed + Broadcast: Controller Directed Broadcast to all nodes + +Node Output Gateway: + Receive: Reply with ArtTodData + Unicast Transmit: Not Allowed + Broadcast: Not Allowed + +Node Input Gateway: + Receive: No action + Unicast Transmit: Not Allowed + Broadcast: Input Gateway Directed Broadcasts to all nodes + +Media Server: + Receive: No Action + Unicast Transmit: Not Allowed + Broadcast: Not Allowed +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OffsetSizeIDTypeNote
0...idArray of 8 characters, the final character is a null termination. +Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 +
8...opcodeOpTodRequest (transmitted little endian)
10...proto_versionProtocol version (constant 14, transmitted big endian)
12...unnamed_3Filler (pad length to match ArtPoll)
14...unnamed_4Spare, transmit as 0, receivers don't test
21...netu1The top 7 bits of the 15 bit Port-Address of Nodes that must respond
22...command0x00 is TodFull, send the entire TOD
23...len_addressu1The number of entries in Address that are used
24...addressArray of low bytes for the Port-Address of Nodes that must respond. Combined with Net to give full Port-Address + +**Sizing Notes**: According to spec this should always be 32 bytes. However, to ensure non-compliant devices are likely to parse, this will only read up to the amount of addresses specified in the earlier field +
+ +
+ + + + + + + + From d8418c92eff30174af56e316edbcbcda62fc31ec Mon Sep 17 00:00:00 2001 From: minorDeveloper Date: Sat, 5 Aug 2023 23:53:09 +0100 Subject: [PATCH 41/49] Remove html file --- artnet/ksy/arttodrequest.html | 125 ---------------------------------- 1 file changed, 125 deletions(-) delete mode 100644 artnet/ksy/arttodrequest.html diff --git a/artnet/ksy/arttodrequest.html b/artnet/ksy/arttodrequest.html deleted file mode 100644 index de91a1b..0000000 --- a/artnet/ksy/arttodrequest.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - Arttodrequest format specification - - -
-

Arttodrequest format specification

- - - -

Type: Arttodrequest

- -

This packet is used to request the Table of RDM Devices (TOD). A Node receiving this packet -must not interpret it as forcing full discovery. Full discovery is only initiated at power on, or when an ArtTodControl.AtcFlush is received. The response is ArtTodData. - -Controller: - Receive: No Action - Unicase Transmit: Not Allowed - Broadcast: Controller Directed Broadcast to all nodes - -Node Output Gateway: - Receive: Reply with ArtTodData - Unicast Transmit: Not Allowed - Broadcast: Not Allowed - -Node Input Gateway: - Receive: No action - Unicast Transmit: Not Allowed - Broadcast: Input Gateway Directed Broadcasts to all nodes - -Media Server: - Receive: No Action - Unicast Transmit: Not Allowed - Broadcast: Not Allowed -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
OffsetSizeIDTypeNote
0...idArray of 8 characters, the final character is a null termination. -Value = 'A' 'r' 't' '-' 'N' 'e' 't' 0x00 -
8...opcodeOpTodRequest (transmitted little endian)
10...proto_versionProtocol version (constant 14, transmitted big endian)
12...unnamed_3Filler (pad length to match ArtPoll)
14...unnamed_4Spare, transmit as 0, receivers don't test
21...netu1The top 7 bits of the 15 bit Port-Address of Nodes that must respond
22...command0x00 is TodFull, send the entire TOD
23...len_addressu1The number of entries in Address that are used
24...addressArray of low bytes for the Port-Address of Nodes that must respond. Combined with Net to give full Port-Address - -**Sizing Notes**: According to spec this should always be 32 bytes. However, to ensure non-compliant devices are likely to parse, this will only read up to the amount of addresses specified in the earlier field -
- -
- - - - - - - - From fc7985ccb015f1dc353a3e077c3b25a402216b35 Mon Sep 17 00:00:00 2001 From: minorDeveloper Date: Sun, 6 Aug 2023 00:05:25 +0100 Subject: [PATCH 42/49] Migrating to flexible RDM packet size --- artnet/ksy/artrdm.ksy | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/artnet/ksy/artrdm.ksy b/artnet/ksy/artrdm.ksy index 04e8d2f..2a24e8f 100644 --- a/artnet/ksy/artrdm.ksy +++ b/artnet/ksy/artrdm.ksy @@ -67,8 +67,10 @@ seq: doc: The low 8 bits of the Port-Address that should action this packet - id: rdm_packet - size: 256 + size-eos: true doc: The RDM packet data excluding the DMX StartCode. The maximum packet length is 255 + 2-byte checksum - 1-byte start code = 256 bytes + valid: + max: 256 enums: rdm_versions: From c1818251f150f9b3546ba554e176e8d4cd5004d7 Mon Sep 17 00:00:00 2001 From: minorDeveloper Date: Sun, 6 Aug 2023 00:09:27 +0100 Subject: [PATCH 43/49] Enforcing max data size for ArtTrigger --- artnet/ksy/arttrigger.ksy | 2 ++ 1 file changed, 2 insertions(+) diff --git a/artnet/ksy/arttrigger.ksy b/artnet/ksy/arttrigger.ksy index a35ff5a..07e0d47 100644 --- a/artnet/ksy/arttrigger.ksy +++ b/artnet/ksy/arttrigger.ksy @@ -59,6 +59,8 @@ seq: - id: data size-eos: true doc: The interpretation of the payload is defined by the Key + valid: + max: 512 enums: keys: From e7c3f137a0d9f3fe5450b983e58769c74cc358a8 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Mon, 7 Aug 2023 10:32:02 +0100 Subject: [PATCH 44/49] Converting handling rules into tables --- artnet/ksy/artaddress.ksy | 30 ++++++++++++------------ artnet/ksy/artcommand.ksy | 11 +++++---- artnet/ksy/artdiagdata.ksy | 28 +++++++++++------------ artnet/ksy/artdmx.ksy | 10 ++++---- artnet/ksy/artfirmwaremaster.ksy | 30 ++++++++++++------------ artnet/ksy/artfirmwarereply.ksy | 30 ++++++++++++------------ artnet/ksy/artinput.ksy | 28 +++++++++++------------ artnet/ksy/artipprog.ksy | 28 +++++++++++------------ artnet/ksy/artipprogreply.ksy | 28 +++++++++++------------ artnet/ksy/artnzs.ksy | 28 +++++++++++------------ artnet/ksy/artpoll.ksy | 12 ++++++---- artnet/ksy/artpollreply.ksy | 10 ++++---- artnet/ksy/artrdm.ksy | 39 ++++++++++++++++---------------- artnet/ksy/artrdmsub.ksy | 37 +++++++++++++++--------------- artnet/ksy/artsync.ksy | 28 +++++++++++------------ artnet/ksy/arttimecode.ksy | 10 ++++---- artnet/ksy/arttodcontrol.ksy | 37 +++++++++++++++--------------- artnet/ksy/arttoddata.ksy | 37 +++++++++++++++--------------- artnet/ksy/arttodrequest.ksy | 37 +++++++++++++++--------------- artnet/ksy/arttrigger.ksy | 10 ++++---- 20 files changed, 258 insertions(+), 250 deletions(-) diff --git a/artnet/ksy/artaddress.ksy b/artnet/ksy/artaddress.ksy index a16dbd7..6cd8915 100644 --- a/artnet/ksy/artaddress.ksy +++ b/artnet/ksy/artaddress.ksy @@ -8,21 +8,21 @@ doc: | A Controlleror monitoring device on the network can reprogram numerous controls of a node remotely. This,for example, would allow the lighting console to re-route DMX512 data at remote locations. This is achieved by sending an ArtAddress packet to the Node’s IP address. (The IP address is returned in the ArtPoll packet). The node replies with an ArtPollReply packet. Fields 5 to 13 contain the data that will be programmed into the node - Controller: - Receive: No Action - Unicase Transmit: Controller transmits to a specific node IP address. - Broadcast: Not Allowed - - Node: - Receive: Reply by unicasting ArtPollReply - Unicast Transmit: Not Allowed - Broadcast: Not Allowed - - Media Server: - Receive: Reply by unicasting ArtPollReply - Unicast Transmit: Not Allowed - Broadcast: Not Allowed - + | Handling Rules | | + | -- | -- | + | **Controller** | | + | Receive | No Action | + | Unicast Transmit | Controller transmits to a specific node IP address. | + | Broadcast | Not Allowed | + | **Node** | | + | Receive | Reply by unicasting ArtPollReply | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | + | **Media Server** | | + | Receive | Reply by unicasting ArtPollReply | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | + seq: - id: id contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] diff --git a/artnet/ksy/artcommand.ksy b/artnet/ksy/artcommand.ksy index 8a553c1..f7933d0 100644 --- a/artnet/ksy/artcommand.ksy +++ b/artnet/ksy/artcommand.ksy @@ -24,10 +24,13 @@ doc: | |SwoutText|This command is used to re-programme the label associated with the ArtPollReply->Swout fields. Syntax: "SwoutText=Playback&" | |SwinText |This command is used to re-programme the label associated with the ArtPollReply->Swin fields. Syntax: "SwinText=Record&" | - All: - Receive: Application Specific - Unicast Transmit: Application Specific - Broadcast: Application Specific + + | Handling Rules | | + | -- | -- | + | **All** || + | Receive | Application Specific | + | Unicast Transmit | Application Specific | + | Broadcast | Application Specific | seq: - id: id diff --git a/artnet/ksy/artdiagdata.ksy b/artnet/ksy/artdiagdata.ksy index f403074..9138947 100644 --- a/artnet/ksy/artdiagdata.ksy +++ b/artnet/ksy/artdiagdata.ksy @@ -8,20 +8,20 @@ doc: | ArtDiagData is a general purpose packet that allows a node or controller to send diagnostics data for display. The ArtPoll packet sent by controllers defines the destination to which these messages should be sent. - Controller: - Receive: Application specific - Unicase Transmit: As defined by ArtPoll (Allowed, with Targeted Mode) - Broadcast: As defined by ArtPoll (Allowed) - - Node: - Receive: No Action - Unicast Transmit: As defined by ArtPoll (Allowed, with Targeted Mode) - Broadcast: As defined by ArtPoll (Allowed) - - Media Server: - Receive: No Action - Unicast Transmit: As defined by ArtPoll (Allowed, with Targeted Mode) - Broadcast: As defined by ArtPoll (Allowed) + | Handling Rules | | + | -- | -- | + | **Controller** || + | Receive | Application specific | + | Unicast Transmit | As defined by ArtPoll (Allowed, with Targeted Mode) | + | Broadcast | As defined by ArtPoll (Allowed) | + | **Node** || + | Receive | No Action | + | Unicast Transmit | As defined by ArtPoll (Allowed, with Targeted Mode) | + | Broadcast | As defined by ArtPoll (Allowed) | + | **Media Server** || + | Receive | No Action | + | Unicast Transmit | As defined by ArtPoll (Allowed, with Targeted Mode) | + | Broadcast | As defined by ArtPoll (Allowed) | seq: - id: id diff --git a/artnet/ksy/artdmx.ksy b/artnet/ksy/artdmx.ksy index 1ffa3a1..2f5e397 100644 --- a/artnet/ksy/artdmx.ksy +++ b/artnet/ksy/artdmx.ksy @@ -69,10 +69,12 @@ doc: | When a node provides multiple DMX512 inputs, it is the responsibility of the Node to handle merging of data. This is because the Node will have only one IP address. If this were not handled at the Node, ArtDmx packets with identical IP addresses and identical universe numbers, but conflicting level data would be transmitted to the network. - All: - Receive: Application Specific - Unicast Transmit: Yes - Broadcast: No + | Handling Rules | | + | -- | -- | + | **All** || + | Receive | Application Specific | + | Unicast Transmit | Yes | + | Broadcast | No | seq: - id: id diff --git a/artnet/ksy/artfirmwaremaster.ksy b/artnet/ksy/artfirmwaremaster.ksy index bc227f0..f43ada8 100644 --- a/artnet/ksy/artfirmwaremaster.ksy +++ b/artnet/ksy/artfirmwaremaster.ksy @@ -20,21 +20,21 @@ doc: | The UBEA is the User Bios Expansion Area. This is a limited firmware upload mechanism that allows third party firmware extensions to be added to a Node. Manufacturers who implement this feature must document the software interface requirements - - Controller: - Receive: No Action - Unicase Transmit: Controller transmits to a specific node IP address - Broadcast: Not allowed - - Node: - Receive: Reply with OpFirmwareReply - Unicast Transmit: Not Allowed - Broadcast: Not Allowed - - Media Server: - Receive: Reply with OpFirmwareReply - Unicast Transmit: Not Allowed - Broadcast: Not Allowed + + | Handling Rules | | + | -- | -- | + | **Controller** || + | Receive | No Action | + | Unicast Transmit | Controller transmits to a specific node IP address | + | Broadcast | Not allowed | + | **Node** || + | Receive | Reply with OpFirmwareReply | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | + | **Media Server** || + | Receive | Reply with OpFirmwareReply | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | seq: - id: id diff --git a/artnet/ksy/artfirmwarereply.ksy b/artnet/ksy/artfirmwarereply.ksy index 56b12a8..61edbcb 100644 --- a/artnet/ksy/artfirmwarereply.ksy +++ b/artnet/ksy/artfirmwarereply.ksy @@ -4,21 +4,21 @@ meta: doc: | This packet is sent by the Node to the Controller in acknowledgement of each OpFirmwareMaster packet. - - Controller: - Receive: Send next OpFirmwareMaster - Unicase Transmit: Not allowed - Broadcast: Not allowed - - Node: - Receive: No Action - Unicast Transmit: Node transmits to specfic controller IP address - Broadcast: Not Allowed - - Media Server: - Receive: No Action - Unicast Transmit: Node transmits to specific controller IPI address - Broadcast: Not Allowed + + | Handling Rules | | + | -- | -- | + | **Controller** || + | Receive | Send next OpFirmwareMaster | + | Unicast Transmit | Not allowed | + | Broadcast | Not allowed | + | **Node** || + | Receive | No Action | + | Unicast Transmit | Node transmits to specfic controller IP address | + | Broadcast | Not Allowed | + | **Media Server** || + | Receive | No Action | + | Unicast Transmit | Node transmits to specific controller IP address | + | Broadcast | Not Allowed | seq: - id: id diff --git a/artnet/ksy/artinput.ksy b/artnet/ksy/artinput.ksy index c6fe9f0..ca584f4 100644 --- a/artnet/ksy/artinput.ksy +++ b/artnet/ksy/artinput.ksy @@ -11,21 +11,21 @@ doc: | All nodes power on with all inputs enabled. Caution should be exercised when implementing this function in the controller. Keep in mind that some network traffic may be operating on a node to node basis. - - Controller: - Receive: No Action - Unicase Transmit: Controller transmits to a specific node IP address - Broadcast: Not allowed - Node: - Receive: Reply with ArtPollReply - Unicast Transmit: Not Allowed - Broadcast: Not Allowed - - Media Server: - Receive: Reply with ArtPollReply - Unicast Transmit: Not Allowed - Broadcast: Not Allowed + | Handling Rules | | + | -- | -- | + | **Controller** || + | Receive | No Action | + | Unicast Transmit | Controller transmits to a specific node IP address | + | Broadcast | Not allowed | + | **Node** || + | Receive | Reply with ArtPollReply | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | + | **Media Server** || + | Receive | Reply with ArtPollReply | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | seq: - id: id diff --git a/artnet/ksy/artipprog.ksy b/artnet/ksy/artipprog.ksy index 43038ea..70f8747 100644 --- a/artnet/ksy/artipprog.ksy +++ b/artnet/ksy/artipprog.ksy @@ -9,20 +9,20 @@ doc: | The ArtIpProg packet allows the IP settings of a Node to be reprogrammed. The ArtIpProg packet is sent by a Controllerto the private address of a Node. If the Node supports remote programming of IP address, it will respond with an ArtIpProgReply packet. In all scenarios, the ArtIpProgReply is sent to the private address of the sender. - Controller: - Receive: No Action - Unicase Transmit: Controller transmits to a specific node IP address - Broadcast: Not Allowed - - Node: - Receive: Reply with ArtIpProgReply - Unicast Transmit: Not Allowed - Broadcast: Not Allowed - - Media Server: - Receive: Reply with ArtIpProgReply - Unicast Transmit: Not Allowed - Broadcast: Not Allowed + | Handling Rules | | + | -- | -- | + | **Controller** || + | Receive | No Action | + | Unicast Transmit | Controller transmits to a specific node IP address | + | Broadcast | Not Allowed | + | **Node** || + | Receive | Reply with ArtIpProgReply | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | + | **Media Server** || + | Receive | Reply with ArtIpProgReply | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | seq: - id: id diff --git a/artnet/ksy/artipprogreply.ksy b/artnet/ksy/artipprogreply.ksy index 2608312..14ca73f 100644 --- a/artnet/ksy/artipprogreply.ksy +++ b/artnet/ksy/artipprogreply.ksy @@ -7,20 +7,20 @@ meta: doc: | The ArtIpProgReply packet is issued by a Node in response to an ArtIpProg packet. Nodes that do not support remote programming of IP address do not reply to ArtIpProg packets. In all scenarios, the ArtIpProgReplyis sent to the private address of the sender. - Controller: - Receive: No Action - Unicase Transmit: Not Allowed - Broadcast: Not Allowed - - Node: - Receive: No Action - Unicast Transmit: Transmits to specific Controller IP address - Broadcast: Not Allowed - - Media Server: - Receive: No Action - Unicast Transmit: Transmits to specific Controller IP address - Broadcast: Not Allowed + | Handling Rules | | + | -- | -- | + | **Controller** || + | Receive | No Action | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | + | **Node** || + | Receive | No Action | + | Unicast Transmit | Transmits to specific Controller IP address | + | Broadcast | Not Allowed | + | **Media Server** || + | Receive | No Action | + | Unicast Transmit | Transmits to specific Controller IP address | + | Broadcast | Not Allowed | seq: - id: id diff --git a/artnet/ksy/artnzs.ksy b/artnet/ksy/artnzs.ksy index 83ab956..1b50990 100644 --- a/artnet/ksy/artnzs.ksy +++ b/artnet/ksy/artnzs.ksy @@ -5,20 +5,20 @@ meta: doc: | ArtNzs is the data packet used to transfer DMX51 2 data with non-zero start codes (except RDM). The format is identical for Node to Controller, Node to Node and Controller to Node. - Controller: - Receive: Application Specific - Unicase Transmit: Yes - Broadcast: No - - Node: - Receive: Application Specific - Unicast Transmit: Yes - Broadcast: No - - Media Server: - Receive: Application Specific - Unicast Transmit: Yes - Broadcast: No + | Handling Rules | | + | -- | -- | + | **Controller** || + | Receive | Application Specific | + | Unicast Transmit | Yes | + | Broadcast | No | + | **Node** || + | Receive | Application Specific | + | Unicast Transmit | Yes | + | Broadcast | No | + | **Media Server** || + | Receive | Application Specific | + | Unicast Transmit | Yes | + | Broadcast | No | seq: - id: id diff --git a/artnet/ksy/artpoll.ksy b/artnet/ksy/artpoll.ksy index 047676d..23a9a82 100644 --- a/artnet/ksy/artpoll.ksy +++ b/artnet/ksy/artpoll.ksy @@ -23,11 +23,13 @@ doc: | Consumers of ArtPoll shall accept as valid a packet of length 12 octets or larger. Any missing fields are assumed to be zero. This requirement is due to the fact that the length of ArtPoll has increased over the life of the protocol. - All: - Receive: Send ArtPollReply - Unicast Transmit: Allowed, with Targeted Mode. - Directed Broadcast: Controller broadcasts this packet to poll all Controllers and Nodes on the network - Limited Broadcast: Not recommended + | Handling Rules | | + | -- | -- | + | **All** || + | Receive | Send ArtPollReply | + | Unicast Transmit | Allowed, with Targeted Mode. | + | Directed Broadcast | Controller broadcasts this packet to poll all Controllers and Nodes on the network | + | Limited Broadcast | Not recommended | seq: - id: id diff --git a/artnet/ksy/artpollreply.ksy b/artnet/ksy/artpollreply.ksy index 32df9e9..34d5223 100644 --- a/artnet/ksy/artpollreply.ksy +++ b/artnet/ksy/artpollreply.ksy @@ -9,10 +9,12 @@ doc: | Consumers of ArtPollReplyshall accept as valid a packet of length 198(highlighted in grey below) octets or larger.Any missing fields are assumed to be zero. This requirement is due to the fact that the length of ArtPollReply has increased over the life of the protocol. - All: - Receive: No Art-Net action - Unicast Transmit: Allowed - Broadcast: Not Allowed + | Handling Rules | | + | -- | -- | + | **All** || + | Receive | No Art-Net action | + | Unicast Transmit | Allowed | + | Broadcast | Not Allowed | seq: - id: id diff --git a/artnet/ksy/artrdm.ksy b/artnet/ksy/artrdm.ksy index 04e8d2f..9861f3e 100644 --- a/artnet/ksy/artrdm.ksy +++ b/artnet/ksy/artrdm.ksy @@ -7,26 +7,25 @@ meta: doc: | The ArtRdm packet is used to transport all non-discovery RDM messages over Art-Net - Controller: - Receive: No Action - Unicase Transmit: Yes - Broadcast: Not Allowed - - Node Output Gateway: - Receive: No Action - Unicast Transmit: Yes - Broadcast: Not Allowed - - Node Input Gateway: - Receive: No Action - Unicast Transmit: Yes - Broadcast: Not Allowed - - Media Server: - Receive: No Action - Unicast Transmit: Yes - Broadcast: Not Allowed - + | Handling Rules | | + | -- | -- | + | **Controller** || + | Receive | No Action | + | Unicast Transmit | Yes | + | Broadcast | Not Allowed | + | **Node Output Gateway** || + | Receive | No Action | + | Unicast Transmit | Yes | + | Broadcast | Not Allowed | + | **Node Input Gateway** || + | Receive | No Action | + | Unicast Transmit | Yes | + | Broadcast | Not Allowed | + | **Media Server** || + | Receive | No Action | + | Unicast Transmit | Yes | + | Broadcast | Not Allowed | + seq: - id: id contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] diff --git a/artnet/ksy/artrdmsub.ksy b/artnet/ksy/artrdmsub.ksy index 945d32b..950d0ab 100644 --- a/artnet/ksy/artrdmsub.ksy +++ b/artnet/ksy/artrdmsub.ksy @@ -9,25 +9,24 @@ doc: | Please note that this packet was added at the release of Art-Net II. For backwards compatibility it is only accepable to implement this packet in addition to ArtRdm. It must not be used instead of ArtRDM - Controller: - Receive: No Action - Unicase Transmit: Yes - Broadcast: Not Allowed - - Node Output Gateway: - Receive: No Action - Unicast Transmit: Yes - Broadcast: Not Allowed - - Node Input Gateway: - Receive: No Action - Unicast Transmit: Yes - Broadcast: Not Allowed - - Media Server: - Receive: No Action - Unicast Transmit: Not Allowed - Broadcast: Not Allowed + | Handling Rules | | + | -- | -- | + | **Controller** || + | Receive | No Action | + | Unicast Transmit | Yes | + | Broadcast | Not Allowed | + | **Node Output Gateway** || + | Receive | No Action | + | Unicast Transmit | Yes | + | Broadcast | Not Allowed | + | **Node Input Gateway** || + | Receive | No Action | + | Unicast Transmit | Yes | + | Broadcast | Not Allowed | + | **Media Server** || + | Receive | No Action | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | seq: - id: id diff --git a/artnet/ksy/artsync.ksy b/artnet/ksy/artsync.ksy index cda1505..21cb8cc 100644 --- a/artnet/ksy/artsync.ksy +++ b/artnet/ksy/artsync.ksy @@ -21,20 +21,20 @@ doc: | When a port is merging multiple streams of ArtDmx from different IP addresses, ArtSync packets shall be ignored - Controller: - Receive: No Action - Unicase Transmit: Not Allowed - Broadcast: Controller broadcasts this packet to synchronously transfer previous ArtDmx packets to Node's output - - Node: - Receive: Transfer previous ArtDmx packets to output - Unicast Transmit: Not Allowed - Broadcast: Not Allowed - - Media Server: - Receive: Transfer previous ArtDmx packets to output - Unicast Transmit: Not Allowed - Broadcast: Not Allowed + | Handling Rules | | + | -- | -- | + | **Controller** || + | Receive | No Action | + | Unicast Transmit | Not Allowed | + | Broadcast | Controller broadcasts this packet to synchronously transfer previous ArtDmx packets to Node's output | + | **Node** || + | Receive | Transfer previous ArtDmx packets to output | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | + | **Media Server** || + | Receive | Transfer previous ArtDmx packets to output | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | seq: - id: id diff --git a/artnet/ksy/arttimecode.ksy b/artnet/ksy/arttimecode.ksy index d5e072a..4cf9e27 100644 --- a/artnet/ksy/arttimecode.ksy +++ b/artnet/ksy/arttimecode.ksy @@ -6,10 +6,12 @@ doc: | ArtTimeCode allows time code to be transported over the network. The data format is compatible with both longitudinaltime code and MIDI time code. The four key types of Film, EBU, Drop Frame and SMPTE are also encoded. Use of the packet is application specific but in general a single controllerwill broadcast the packet to the network. - All: - Receive: Application Specific - Unicast Transmit: Application Specific - Broadcast: Application Specific + | Handling Rules | | + | -- | -- | + | **All** || + | Receive | Application Specific | + | Unicast Transmit | Application Specific | + | Broadcast | Application Specific | seq: - id: id diff --git a/artnet/ksy/arttodcontrol.ksy b/artnet/ksy/arttodcontrol.ksy index 1fee7a9..97dad19 100644 --- a/artnet/ksy/arttodcontrol.ksy +++ b/artnet/ksy/arttodcontrol.ksy @@ -7,25 +7,24 @@ meta: doc: | The ArtTodControl packet is used to send RDM control parameters over Art-Net. The response is ArtTodData. - Controller: - Receive: No Action - Unicase Transmit: Allowed - Broadcast: Allowed - - Node Output Gateway: - Receive: Reply with ArtTodData - Unicast Transmit: Not Allowed - Broadcast: Not Allowed - - Node Input Gateway: - Receive: No Action - Unicast Transmit: Not Allowed - Broadcast: The Input Gateway Directed Broadcasts to all nodes - - Media Server: - Receive: No Action - Unicast Transmit: Not Allowed - Broadcast: Not Allowed + | Handling Rules | | + | -- | -- | + | **Controller** || + | Receive | No Action | + | Unicast Transmit | Allowed | + | Broadcast | Allowed | + | **Node Output Gateway** || + | Receive | Reply with ArtTodData | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | + | **Node Input Gateway** || + | Receive | No Action | + | Unicast Transmit | Not Allowed | + | Broadcast | The Input Gateway Directed Broadcasts to all nodes | + | **Media Server** || + | Receive | No Action | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | seq: - id: id diff --git a/artnet/ksy/arttoddata.ksy b/artnet/ksy/arttoddata.ksy index 78963df..5a9fe17 100644 --- a/artnet/ksy/arttoddata.ksy +++ b/artnet/ksy/arttoddata.ksy @@ -7,25 +7,24 @@ meta: doc: | The ArtTodData packet is sent from Node Output Gateways in response to an ArtTodRequest from Controller. It is always sent as broadcast. - Controller: - Receive: No Action - Unicase Transmit: Not Allowed - Broadcast: Not Allowed - - Node Output Gateway: - Receive: No Action - Unicast Transmit: Not Allowed - Broadcast: Output Gateway always Directed Broadcasts this packet - - Node Input Gateway: - Receive: No Action - Unicast Transmit: Not Allowed - Broadcast: Not Allowed - - Media Server: - Receive: No Action - Unicast Transmit: Not Allowed - Broadcast: Not Allowed + | Handling Rules | | + | -- | -- | + | **Controller** || + | Receive | No Action | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | + | **Node Output Gateway** || + | Receive | No Action | + | Unicast Transmit | Not Allowed | + | Broadcast | Output Gateway always Directed Broadcasts this packet | + | **Node Input Gateway** || + | Receive | No Action | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | + | **Media Server** || + | Receive | No Action | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | seq: - id: id diff --git a/artnet/ksy/arttodrequest.ksy b/artnet/ksy/arttodrequest.ksy index 63c53e9..a46a9c3 100644 --- a/artnet/ksy/arttodrequest.ksy +++ b/artnet/ksy/arttodrequest.ksy @@ -8,25 +8,24 @@ doc: | This packet is used to request the Table of RDM Devices (TOD). A Node receiving this packet must not interpret it as forcing full discovery. Full discovery is only initiated at power on, or when an ArtTodControl.AtcFlush is received. The response is ArtTodData. - Controller: - Receive: No Action - Unicase Transmit: Not Allowed - Broadcast: Controller Directed Broadcast to all nodes - - Node Output Gateway: - Receive: Reply with ArtTodData - Unicast Transmit: Not Allowed - Broadcast: Not Allowed - - Node Input Gateway: - Receive: No action - Unicast Transmit: Not Allowed - Broadcast: Input Gateway Directed Broadcasts to all nodes - - Media Server: - Receive: No Action - Unicast Transmit: Not Allowed - Broadcast: Not Allowed + | Handling Rules | | + | -- | -- | + | **Controller** || + | Receive | No Action | + | Unicast Transmit | Not Allowed | + | Broadcast | Controller Directed Broadcast to all nodes | + | **Node Output Gateway** || + | Receive | Reply with ArtTodData | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | + | **Node Input Gateway** || + | Receive | No action | + | Unicast Transmit | Not Allowed | + | Broadcast | Input Gateway Directed Broadcasts to all nodes | + | **Media Server** || + | Receive | No Action | + | Unicast Transmit | Not Allowed | + | Broadcast | Not Allowed | seq: - id: id diff --git a/artnet/ksy/arttrigger.ksy b/artnet/ksy/arttrigger.ksy index a35ff5a..9a9ee1c 100644 --- a/artnet/ksy/arttrigger.ksy +++ b/artnet/ksy/arttrigger.ksy @@ -20,10 +20,12 @@ doc: | The Payload is a fixed length array of 512, 8-bit octets. The interpretation of this fieldis dependent upon the Oem field. If the Oem field is set to a value other than 0xffff then the Payload is manufacturer specific - All: - Receive: Application Specific - Unicast Transmit: Application Specific - Broadcast: Application Specific + | Handling Rules | | + | -- | -- | + | **All** || + | Receive | Application Specific | + | Unicast Transmit | Application Specific | + | Broadcast | Application Specific | seq: - id: id From d3dff3927612862ebd0c6aa6f4f8eb8789f54a57 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Mon, 7 Aug 2023 10:45:30 +0100 Subject: [PATCH 45/49] Making flags and diagpriority non-option in ArtPoll --- artnet/ksy/artpoll.ksy | 2 -- 1 file changed, 2 deletions(-) diff --git a/artnet/ksy/artpoll.ksy b/artnet/ksy/artpoll.ksy index 23a9a82..da87586 100644 --- a/artnet/ksy/artpoll.ksy +++ b/artnet/ksy/artpoll.ksy @@ -49,12 +49,10 @@ seq: - id: flags type: flags doc: Set behaviour of Node - if: _io.size >= 13 - id: diag_priority type: u1 enum: priority_codes - if: _io.size >= 14 - id: target_port type: u4be From 027382d62f6dd7ad3e31beae294ebc2a6d4188a1 Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Mon, 7 Aug 2023 10:46:36 +0100 Subject: [PATCH 46/49] Making spare, style and mac required in ArtPollReply --- artnet/ksy/artpollreply.ksy | 3 --- 1 file changed, 3 deletions(-) diff --git a/artnet/ksy/artpollreply.ksy b/artnet/ksy/artpollreply.ksy index 34d5223..ed4fa61 100644 --- a/artnet/ksy/artpollreply.ksy +++ b/artnet/ksy/artpollreply.ksy @@ -151,18 +151,15 @@ seq: - size: 3 doc: Spare, not used, set to 0 - if: _io.size >= 200 - id: style type: u1 enum: style_codes doc: The Style code defines the equipment style of the device. - if: _io.size >= 201 - id: mac size: 6 doc: MAC Address of the node, set to 0 if node cannot supply this information - if: _io.size >= 207 - id: bind_ip type: u4be From 7e3c37218d506ece4d0eb714225b454cbaf324ff Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Tue, 8 Aug 2023 21:01:57 +0100 Subject: [PATCH 47/49] Handling variable size results in ArtTrigger --- artnet/ksy/arttrigger.ksy | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/artnet/ksy/arttrigger.ksy b/artnet/ksy/arttrigger.ksy index 6dc607e..e46fabc 100644 --- a/artnet/ksy/arttrigger.ksy +++ b/artnet/ksy/arttrigger.ksy @@ -59,10 +59,8 @@ seq: doc: The trigger subkey - id: data - size-eos: true + size: "_io.size - 18 < 512 ? _io.size - 18 : 512" doc: The interpretation of the payload is defined by the Key - valid: - max: 512 enums: keys: From bc8428724040e6885f7e27129bcfd4485890911b Mon Sep 17 00:00:00 2001 From: Ryan Delaney Date: Tue, 8 Aug 2023 21:04:28 +0100 Subject: [PATCH 48/49] Controlling variable length data for ArtRdm --- artnet/ksy/artrdm.ksy | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/artnet/ksy/artrdm.ksy b/artnet/ksy/artrdm.ksy index 03f7cd3..6fb8e79 100644 --- a/artnet/ksy/artrdm.ksy +++ b/artnet/ksy/artrdm.ksy @@ -25,7 +25,7 @@ doc: | | Receive | No Action | | Unicast Transmit | Yes | | Broadcast | Not Allowed | - + seq: - id: id contents: [0x41, 0x72, 0x74, 0x2d, 0x4e, 0x65, 0x74, 0x00] @@ -66,10 +66,8 @@ seq: doc: The low 8 bits of the Port-Address that should action this packet - id: rdm_packet - size-eos: true + size: "_io.size - 24 < 256 ? _io.size - 24 : 256" doc: The RDM packet data excluding the DMX StartCode. The maximum packet length is 255 + 2-byte checksum - 1-byte start code = 256 bytes - valid: - max: 256 enums: rdm_versions: From 2c4369479eed64d71110b032c997f236564c0ffe Mon Sep 17 00:00:00 2001 From: Sam Lane Date: Sat, 12 Aug 2023 17:09:51 +0100 Subject: [PATCH 49/49] Enums and conditional updates for ArtRdmSub --- artnet/ksy/artrdmsub.ksy | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/artnet/ksy/artrdmsub.ksy b/artnet/ksy/artrdmsub.ksy index 950d0ab..06b83a2 100644 --- a/artnet/ksy/artrdmsub.ksy +++ b/artnet/ksy/artrdmsub.ksy @@ -60,7 +60,8 @@ seq: - id: command_class type: u1 - doc: As per RDM specification. This field defines wether this is a Get, Set, GetResponse, or SetResponse #TODO Enums + doc: As per RDM specification. This field defines wether this is a Get, Set, GetResponse, or SetResponse + enum: command_classes - id: parameter_id type: u2be @@ -80,7 +81,7 @@ seq: doc: Spare transmit as zero, receviers don't test - id: data - size: sub_count * 2 + size: "command_class == command_classes::set or command_class == command_classes::get_response ? sub_count * 2 : 0" doc: The size of this 16-bit big endian data array is sub_count for Set and GetResponse, and 0 for Get and SetResponse commands enums: @@ -93,6 +94,24 @@ enums: id: rdm_standard doc: Devices that support the standard 1.0 version of RDM + command_classes: + 0x20: + id: get + doc: Request the value or status of a parameter from the device + + 0x21: + id: get_response + doc: Response from a get_command message + + 0x30: + id: set + doc: Change the value of a parameter within the device + + 0x31: + id: set_response + doc: Response from a set_command message + + types: uid: seq: