Coverage Report

Created: 2026-06-30 07:22

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-artnet.c
Line
Count
Source
1
/* packet-artnet.c
2
 * Routines for Art-Net packet disassembly
3
 *
4
 * Copyright (c) 2003, 2011 by Erwin Rol <erwin@erwinrol.com>
5
 * Copyright (c) 2014 by Claudius Zingerli <czingerl@gmail.com>
6
 * Copyright (c) 2022-2024 by Martin Mayer <martin.mayer@m2-it-solutions.de>
7
 *
8
 * Wireshark - Network traffic analyzer
9
 * By Gerald Combs <gerald@wireshark.org>
10
 * Copyright 1999 Gerald Combs
11
 *
12
 * SPDX-License-Identifier: GPL-2.0-or-later
13
 */
14
15
#include "config.h"
16
#include <stdlib.h>
17
#include <epan/packet.h>
18
#include <epan/expert.h>
19
#include <epan/tfs.h>
20
#include <epan/unit_strings.h>
21
#include "packet-rdm.h"
22
#include "data-dmx-manfid.h"
23
24
/*
25
 * See
26
 *
27
 *     Protocol Spec: http://www.artisticlicence.com/WebSiteMaster/User%20Guides/art-net.pdf
28
 *     OEM Codes: https://artisticlicence.com/WebSiteMaster/Software/Art-Net/Art-NetOemCodes.h
29
 *     or rather https://art-net.org.uk/join-the-club/oem-code-listing/
30
 *     but you first have to select 'All' before downloading the CSV to process...
31
 *     ESTA Codes: https://tsp.esta.org/tsp/working_groups/CP/mfctrIDs.php
32
 */
33
34
void proto_register_artnet(void);
35
void proto_reg_handoff_artnet(void);
36
37
static dissector_handle_t artnet_handle;
38
39
/* Define udp_port for ArtNET */
40
41
#define UDP_PORT_ARTNET 0x1936
42
43
14
#define ARTNET_HEADER_LENGTH                   10
44
#define ARTNET_POLL_LENGTH                      4
45
#define ARTNET_POLL_REPLY_LENGTH              197
46
3
#define ARTNET_POLL_REPLY_PORT_INFO_LENGTH     22
47
3
#define ARTNET_POLL_REPLY_PORT_TYPES_LENGTH     4
48
3
#define ARTNET_POLL_REPLY_GOOD_INPUT_LENGTH     4
49
3
#define ARTNET_POLL_REPLY_GOOD_OUTPUT_LENGTH    4
50
3
#define ARTNET_POLL_REPLY_GOOD_OUTPUT_B_LENGTH  4
51
3
#define ARTNET_POLL_REPLY_SWIN_LENGTH           4
52
3
#define ARTNET_POLL_REPLY_SWOUT_LENGTH          4
53
#define ARTNET_ADDRESS_LENGTH                  95
54
0
#define ARTNET_ADDRESS_SWIN_LENGTH              4
55
0
#define ARTNET_ADDRESS_SWOUT_LENGTH             4
56
#define ARTNET_OUTPUT_LENGTH                    1
57
#define ARTNET_INPUT_LENGTH                    10
58
0
#define ARTNET_INPUT_INPUT_LENGTH               4
59
#define ARTNET_FIRMWARE_MASTER_LENGTH        1035
60
#define ARTNET_FIRMWARE_REPLY_LENGTH           27
61
#define ARTNET_VIDEO_SETUP_LENGTH              74
62
#define ARTNET_VIDEO_PALETTE_LENGTH            55
63
#define ARTNET_VIDEO_DATA_LENGTH                8
64
65
0
#define ARTNET_OP_POLL               0x2000
66
21
#define ARTNET_OP_POLL_REPLY         0x2100
67
5
#define ARTNET_OP_POLL_FP_REPLY      0x2200
68
0
#define ARTNET_OP_DIAG_DATA          0x2300
69
0
#define ARTNET_OP_COMMAND            0x2400
70
71
0
#define ARTNET_OP_DATA_REQUEST       0x2700
72
0
#define ARTNET_OP_DATA_REPLY         0x2800
73
74
0
#define ARTNET_OP_OUTPUT             0x5000
75
2
#define ARTNET_OP_NZS                0x5100
76
0
#define ARTNET_OP_SYNC               0x5200
77
78
0
#define ARTNET_OP_ADDRESS            0x6000
79
80
0
#define ARTNET_OP_INPUT              0x7000
81
82
0
#define ARTNET_OP_TOD_REQUEST        0x8000
83
0
#define ARTNET_OP_TOD_DATA           0x8100
84
1
#define ARTNET_OP_TOD_CONTROL        0x8200
85
0
#define ARTNET_OP_RDM                0x8300
86
0
#define ARTNET_OP_RDM_SUB            0x8400
87
88
0
#define ARTNET_OP_MEDIA              0x9000
89
0
#define ARTNET_OP_MEDIA_PATCH        0x9100
90
0
#define ARTNET_OP_MEDIA_CONTROL      0x9200
91
0
#define ARTNET_OP_MEDIA_CONTRL_REPLY 0x9300
92
93
0
#define ARTNET_OP_TIME_CODE          0x9700
94
0
#define ARTNET_OP_TIME_SYNC          0x9800
95
0
#define ARTNET_OP_TRIGGER            0x9900
96
97
0
#define ARTNET_OP_DIRECTORY          0x9a00
98
0
#define ARTNET_OP_DIRECTORY_REPLY    0x9b00
99
100
0
#define ARTNET_OP_VIDEO_SETUP        0xa010
101
0
#define ARTNET_OP_VIDEO_PALETTE      0xa020
102
0
#define ARTNET_OP_VIDEO_DATA         0xa040
103
104
0
#define ARTNET_OP_MAC_MASTER         0xf000
105
0
#define ARTNET_OP_MAC_SLAVE          0xf100
106
0
#define ARTNET_OP_FIRMWARE_MASTER    0xf200
107
0
#define ARTNET_OP_FIRMWARE_REPLY     0xf300
108
0
#define ARTNET_OP_FILE_TN_MASTER     0xf400
109
0
#define ARTNET_OP_FILE_FN_MASTER     0xf500
110
0
#define ARTNET_OP_FILE_FN_REPLY      0xf600
111
112
0
#define ARTNET_OP_IP_PROG            0xf800
113
0
#define ARTNET_OP_IP_PROG_REPLY      0xf900
114
115
static const value_string artnet_opcode_vals[] = {
116
  { ARTNET_OP_POLL,               "ArtPoll" },
117
  { ARTNET_OP_POLL_REPLY,         "ArtPollReply" },
118
  { ARTNET_OP_POLL_FP_REPLY,      "ArtPollFpReply" },
119
  { ARTNET_OP_DIAG_DATA,          "ArtDiagData" },
120
  { ARTNET_OP_COMMAND,            "ArtCommand" },
121
  { ARTNET_OP_DATA_REQUEST,       "ArtDataRequest" },
122
  { ARTNET_OP_DATA_REPLY,         "ArtDataReply" },
123
  { ARTNET_OP_OUTPUT,             "ArtDMX" },
124
  { ARTNET_OP_NZS,                "ArtNzs" },
125
  { ARTNET_OP_SYNC,               "ArtSync" },
126
  { ARTNET_OP_ADDRESS,            "ArtAddress" },
127
  { ARTNET_OP_INPUT,              "ArtInput" },
128
  { ARTNET_OP_TOD_REQUEST,        "ArtTodRequest" },
129
  { ARTNET_OP_TOD_DATA,           "ArtTodData" },
130
  { ARTNET_OP_TOD_CONTROL,        "ArtTodControl" },
131
  { ARTNET_OP_RDM,                "ArtRdm" },
132
  { ARTNET_OP_RDM_SUB,            "ArtRdmSub" },
133
  { ARTNET_OP_MEDIA,              "ArtMedia" },
134
  { ARTNET_OP_MEDIA_PATCH,        "ArtMediaPatch" },
135
  { ARTNET_OP_MEDIA_CONTROL,      "ArtMediaControl" },
136
  { ARTNET_OP_MEDIA_CONTRL_REPLY, "ArtMediaContrlReply" },
137
  { ARTNET_OP_TIME_CODE,          "ArtTimeCode" },
138
  { ARTNET_OP_TIME_SYNC,          "ArtTimeSync" },
139
  { ARTNET_OP_TRIGGER,            "ArtTrigger" },
140
  { ARTNET_OP_DIRECTORY,          "ArtDirectory" },
141
  { ARTNET_OP_DIRECTORY_REPLY,    "ArtDirectoryReply" },
142
  { ARTNET_OP_VIDEO_SETUP,        "ArtVideoSetup" },
143
  { ARTNET_OP_VIDEO_PALETTE,      "ArtVideoPalette" },
144
  { ARTNET_OP_VIDEO_DATA,         "ArtVideoData" },
145
  { ARTNET_OP_MAC_MASTER,         "ArtMacMaster" },
146
  { ARTNET_OP_MAC_SLAVE,          "ArtMacSlave" },
147
  { ARTNET_OP_FIRMWARE_MASTER,    "ArtFirmwareMaster" },
148
  { ARTNET_OP_FIRMWARE_REPLY,     "ArtFirmwareReply" },
149
  { ARTNET_OP_FILE_TN_MASTER,     "ArtfileTnMaster" },
150
  { ARTNET_OP_FILE_FN_MASTER,     "ArtfileFnMaster" },
151
  { ARTNET_OP_FILE_FN_REPLY,      "ArtfileFnReply" },
152
  { ARTNET_OP_IP_PROG,            "ArtIpProg" },
153
  { ARTNET_OP_IP_PROG_REPLY,      "ArtIpProgReply" },
154
  { 0,                            NULL }
155
};
156
static value_string_ext artnet_opcode_vals_ext = VALUE_STRING_EXT_INIT(artnet_opcode_vals);
157
158
/*
159
 * OEM code database date: 2025-08-04
160
 *
161
 * String format:
162
 * <MANUFACTURER>: <PRODUCT>
163
 */
164
static const value_string artnet_oem_code_vals[] = {
165
  { 0x0000, "Artistic Licence Engineering Ltd: Dmx Hub" },
166
  { 0x0001, "ADB: Netgate" },
167
  { 0x0002, "Artistic Licence Engineering Ltd: MAHub" },
168
  { 0x0003, "Artistic Licence Engineering Ltd: Ether Lynx I" },
169
  { 0x0004, "Lew Light: Lew Light" },
170
  { 0x0005, "High End Systems: High End Systems" },
171
  { 0x0006, "Avolites: Dimmer" },
172
  { 0x0007, "Artistic Licence Engineering Ltd: Art Net II Processor" },
173
  { 0x0010, "Artistic Licence Engineering Ltd: Down Link" },
174
  { 0x0011, "Artistic Licence Engineering Ltd: Up Link" },
175
  { 0x0012, "Artistic Licence Engineering Ltd: Truss Link OP" },
176
  { 0x0013, "Artistic Licence Engineering Ltd: Truss Link IP" },
177
  { 0x0014, "Artistic Licence Engineering Ltd: Net Link OP" },
178
  { 0x0015, "Artistic Licence Engineering Ltd: Net Link IP" },
179
  { 0x0016, "Artistic Licence Engineering Ltd: Radio Link OP" },
180
  { 0x0017, "Artistic Licence Engineering Ltd: Radio Link IP" },
181
  { 0x0030, "Doug Fleenor Design Inc: DFD DL" },
182
  { 0x0031, "Doug Fleenor Design Inc: DFD UL" },
183
  { 0x0050, "Goddard Design Company: GDC DL" },
184
  { 0x0051, "Goddard Design Company: GDC UL" },
185
  { 0x0070, "ADB: ADB Down Link" },
186
  { 0x0071, "ADB: ADB Up Link" },
187
  { 0x0072, "ADB: ADB WiFi" },
188
  { 0x0080, "Artistic Licence Engineering Ltd: AL 0 Down" },
189
  { 0x0081, "Artistic Licence Engineering Ltd: AL 0 Up" },
190
  { 0x0082, "Artistic Licence Engineering Ltd: AL 1 Down" },
191
  { 0x0083, "Artistic Licence Engineering Ltd: AL 1 Up" },
192
  { 0x0084, "Artistic Licence Engineering Ltd: AL 2 Down" },
193
  { 0x0085, "Artistic Licence Engineering Ltd: AL 2 Up" },
194
  { 0x0086, "Artistic Licence Engineering Ltd: AL 3 Down" },
195
  { 0x0087, "Artistic Licence Engineering Ltd: AL 3 Up" },
196
  { 0x0088, "Artistic Licence Engineering Ltd: AL 4 Down" },
197
  { 0x0089, "Artistic Licence Engineering Ltd: AL 4 Up" },
198
  { 0x008A, "Artistic Licence Engineering Ltd: AL 5 Down" },
199
  { 0x008B, "Artistic Licence Engineering Ltd: AL 5 Up" },
200
  { 0x008C, "Zero 88: Zero Out2" },
201
  { 0x008D, "Zero 88: Zero In2" },
202
  { 0x008E, "Flying Pig Systems: FP Out2" },
203
  { 0x008F, "Flying Pig Systems: FP In2" },
204
  { 0x0090, "ELC: Two Port Node" },
205
  { 0x0091, "ELC: Four Port Node" },
206
  { 0x00FF, "Artistic Licence Engineering Ltd: OemUnknown" },
207
  { 0x0100, "Artistic Licence Engineering Ltd: Ether Lynx Exp 0" },
208
  { 0x0101, "Artistic Licence Engineering Ltd: Ether Lynx Exp 1" },
209
  { 0x0102, "Artistic Licence Engineering Ltd: Ether Lynx Exp 2" },
210
  { 0x0103, "Artistic Licence Engineering Ltd: Ether Lynx Exp 3" },
211
  { 0x0104, "Artistic Licence Engineering Ltd: Ether Lynx Exp 4" },
212
  { 0x0105, "Artistic Licence Engineering Ltd: Ether Lynx Exp 5" },
213
  { 0x0106, "Artistic Licence Engineering Ltd: Ether Lynx Exp 6" },
214
  { 0x0107, "Artistic Licence Engineering Ltd: Ether Lynx Exp 7" },
215
  { 0x0108, "Artistic Licence Engineering Ltd: Ether Lynx Exp 8" },
216
  { 0x0109, "Artistic Licence Engineering Ltd: Ether Lynx Exp 9" },
217
  { 0x010A, "Artistic Licence Engineering Ltd: Ether Lynx Exp a" },
218
  { 0x010B, "Artistic Licence Engineering Ltd: Ether Lynx Exp b" },
219
  { 0x010C, "Artistic Licence Engineering Ltd: Ether Lynx Exp c" },
220
  { 0x010D, "Artistic Licence Engineering Ltd: Ether Lynx Exp d" },
221
  { 0x010E, "Artistic Licence Engineering Ltd: Ether Lynx Exp e" },
222
  { 0x010F, "Artistic Licence Engineering Ltd: Ether Lynx Exp f" },
223
  { 0x0110, "Artistic Licence Engineering Ltd: Cata Lynx" },
224
  { 0x0111, "Artistic Licence Engineering Ltd: Cata Lynx Exp 1" },
225
  { 0x0112, "Artistic Licence Engineering Ltd: Cata Lynx Exp 2" },
226
  { 0x0113, "Artistic Licence Engineering Ltd: Cata Lynx Exp 3" },
227
  { 0x0114, "Artistic Licence Engineering Ltd: Cata Lynx Exp 4" },
228
  { 0x0115, "Artistic Licence Engineering Ltd: Cata Lynx Exp 5" },
229
  { 0x0116, "Artistic Licence Engineering Ltd: Cata Lynx Exp 6" },
230
  { 0x0117, "Artistic Licence Engineering Ltd: Cata Lynx Exp 7" },
231
  { 0x0118, "Artistic Licence Engineering Ltd: Cata Lynx Exp 8" },
232
  { 0x0119, "Artistic Licence Engineering Ltd: Cata Lynx Exp 9" },
233
  { 0x011A, "Artistic Licence Engineering Ltd: Cata Lynx Exp a" },
234
  { 0x011B, "Artistic Licence Engineering Ltd: Cata Lynx Exp b" },
235
  { 0x011C, "Artistic Licence Engineering Ltd: Cata Lynx Exp c" },
236
  { 0x011D, "Artistic Licence Engineering Ltd: Cata Lynx Exp d" },
237
  { 0x011E, "Artistic Licence Engineering Ltd: Cata Lynx Exp e" },
238
  { 0x011F, "Artistic Licence Engineering Ltd: Cata Lynx Exp f" },
239
  { 0x0120, "Artistic Licence Engineering Ltd: Pixi Power F1a" },
240
  { 0x0180, "Martin: Maxxyz Node" },
241
  { 0x0181, "Martin: P3 System Controller" },
242
  { 0x0190, "Enttec: Enttec 0" },
243
  { 0x0191, "Enttec: Enttec 1" },
244
  { 0x0192, "Enttec: Enttec 2" },
245
  { 0x0193, "Enttec: Enttec 3" },
246
  { 0x0194, "Enttec: Enttec 4" },
247
  { 0x0195, "Enttec: Enttec 5" },
248
  { 0x0196, "Enttec: Enttec 6" },
249
  { 0x0197, "Enttec: Enttec 7" },
250
  { 0x0198, "Enttec: Enttec 8" },
251
  { 0x0199, "Enttec: Enttec 9" },
252
  { 0x019A, "Enttec: Enttec a" },
253
  { 0x019B, "Enttec: Enttec b" },
254
  { 0x019C, "Enttec: Enttec c" },
255
  { 0x019D, "Enttec: Enttec d" },
256
  { 0x019E, "Enttec: Enttec e" },
257
  { 0x019F, "Enttec: Enttec f" },
258
  { 0x01A0, "LES: PBX" },
259
  { 0x01A1, "LES: Executive" },
260
  { 0x01A2, "LES: Matrix" },
261
  { 0x01A3, "LES: LES 3" },
262
  { 0x01A4, "LES: LES 4" },
263
  { 0x01A5, "LES: LES 5" },
264
  { 0x01A6, "LES: LES 6" },
265
  { 0x01A7, "LES: LES 7" },
266
  { 0x01A8, "LES: LES 8" },
267
  { 0x01A9, "LES: LES 9" },
268
  { 0x01AA, "LES: LES a" },
269
  { 0x01AB, "LES: LES b" },
270
  { 0x01AC, "LES: LES c" },
271
  { 0x01AD, "LES: LES d" },
272
  { 0x01AE, "LES: LES e" },
273
  { 0x01AF, "LES: LES f" },
274
  { 0x01B0, "EDI: Edig" },
275
  { 0x01C0, "Nondim Enterprises: Openlux" },
276
  { 0x01D0, "Green Hippo: Hippotizer" },
277
  { 0x01E0, "VNR: Merger Booster" },
278
  { 0x01F0, "Robe: ILE" },
279
  { 0x01F1, "Robe: Robe 4 4" },
280
  { 0x0210, "Artistic Licence Engineering Ltd: Down Lynx 2" },
281
  { 0x0211, "Artistic Licence Engineering Ltd: Up Lynx 2" },
282
  { 0x0212, "Artistic Licence Engineering Ltd: Truss Lynx 2" },
283
  { 0x0213, "Artistic Licence Engineering Ltd: Truss Lynx 2" },
284
  { 0x0214, "Artistic Licence Engineering Ltd: Net Lynx OP 2" },
285
  { 0x0215, "Artistic Licence Engineering Ltd: Net Lynx IP 2" },
286
  { 0x0216, "Artistic Licence Engineering Ltd: Radio Lynx OP 2" },
287
  { 0x0217, "Artistic Licence Engineering Ltd: Radio Lynx IP 2" },
288
  { 0x0230, "Doug Fleenor Design Inc: DFD Dlynx 2" },
289
  { 0x0231, "Doug Fleenor Design Inc: DFD Ulynx 2" },
290
  { 0x0250, "Goddard Design Company: GDC Dlynx 2" },
291
  { 0x0251, "Goddard Design Company: GDC Ulynx 2" },
292
  { 0x0270, "ADB: ADB Down Lynx 2" },
293
  { 0x0271, "ADB: ADB Up Lynx 2" },
294
  { 0x0280, "LSC: LSC Down Lynx 2" },
295
  { 0x0281, "LSC: LSC Up Lynx 2" },
296
  { 0x0282, "Artistic Licence Engineering Ltd: AL OEM D1" },
297
  { 0x0283, "Artistic Licence Engineering Ltd: AL OEM U1" },
298
  { 0x0284, "Artistic Licence Engineering Ltd: AL OEM D2" },
299
  { 0x0285, "Artistic Licence Engineering Ltd: AL OEM U2" },
300
  { 0x0286, "Artistic Licence Engineering Ltd: AL OEM D3" },
301
  { 0x0287, "Artistic Licence Engineering Ltd: AL OEM U3" },
302
  { 0x0288, "Artistic Licence Engineering Ltd: AL OEM D4" },
303
  { 0x0289, "Artistic Licence Engineering Ltd: AL OEM U4" },
304
  { 0x028A, "Artistic Licence Engineering Ltd: AL OEM D5" },
305
  { 0x028B, "Artistic Licence Engineering Ltd: AL OEM U5" },
306
  { 0x0300, "Gold Stage: DMX net O" },
307
  { 0x0301, "Gold Stage: DMX net I" },
308
  { 0x0302, "Gold Stage: OemGold2" },
309
  { 0x0303, "Gold Stage: OemGold3" },
310
  { 0x0304, "Gold Stage: GT 96" },
311
  { 0x0305, "Gold Stage: Goldstage III Light Console" },
312
  { 0x0306, "Gold Stage: OemGold6" },
313
  { 0x0307, "Gold Stage: OemGold7" },
314
  { 0x0308, "Gold Stage: KTG 55 Dimmer" },
315
  { 0x0309, "Gold Stage: OemGold9" },
316
  { 0x030A, "Gold Stage: OemGolda" },
317
  { 0x030B, "Gold Stage: OemGoldb" },
318
  { 0x030C, "Gold Stage: OemGoldc" },
319
  { 0x030D, "Gold Stage: OemGoldd" },
320
  { 0x030E, "Gold Stage: OemGolde" },
321
  { 0x030F, "Gold Stage: OemGoldf" },
322
  { 0x0310, "Sunset Dynamics: StarGateDMX" },
323
  { 0x0320, "Luminex LCE: Ethernet DMX8" },
324
  { 0x0321, "Luminex LCE: Ethernet DMX2" },
325
  { 0x0322, "Luminex LCE: Ethernet DMX4" },
326
  { 0x0323, "Luminex LCE: LumiNet Monitor" },
327
  { 0x0330, "Invisible Rival: Blue Hysteria" },
328
  { 0x0340, "Avolites: Diamond 4 Vision" },
329
  { 0x0341, "Avolites: Diamond 4 elite" },
330
  { 0x0342, "Avolites: Peal offline" },
331
  { 0x0343, "Avolites: Titan" },
332
  { 0x0350, "Bigfoot: EtherMux Remote" },
333
  { 0x0351, "Bigfoot: EtherMux Server" },
334
  { 0x0352, "Bigfoot: EtherMux Desktop" },
335
  { 0x0360, "Ecue: Ecue 512" },
336
  { 0x0361, "Ecue: Ecue 1024" },
337
  { 0x0362, "Ecue: Ecue 2048" },
338
  { 0x0370, "Kiss Box: DMX Box" },
339
  { 0x0380, "Arkaos: V J DMX" },
340
  { 0x0390, "Digital Enlightenment: ShowGate" },
341
  { 0x03A0, "DES: NELI" },
342
  { 0x03B0, "Nicolaudie: Easy" },
343
  { 0x03B1, "Nicolaudie: Magic 3D" },
344
  { 0x03C0, "Catalyst: Catalyst" },
345
  { 0x03D0, "Bleasdale: PixelMad" },
346
  { 0x03E0, "Lehigh Electric Products Co: DX2 Dimming Rack" },
347
  { 0x03F0, "Horizon: Horizon Controller" },
348
  { 0x0400, "Audio Scene: OemAudioSceneO" },
349
  { 0x0401, "Audio Scene: OemAudioSceneI" },
350
  { 0x0410, "Pathport: 2 out" },
351
  { 0x0411, "Pathport: 2 in" },
352
  { 0x0412, "Pathport: 1 out" },
353
  { 0x0413, "Pathport: 1 in" },
354
  { 0x0420, "Botex: OemBotex1" },
355
  { 0x0430, "Simon Newton: LibArtNet" },
356
  { 0x0431, "Simon Newton: LLA Live" },
357
  { 0x0440, "XLNT: OemTeamXlntIp" },
358
  { 0x0441, "XLNT: OemTeamXlntOp" },
359
  { 0x0450, "Schnick Schnack Systems: Systemnetzteil 4E" },
360
  { 0x0451, "Schnick Schnack Systems: SysOne" },
361
  { 0x0452, "Schnick Schnack Systems: Pix Gate" },
362
  { 0x0460, "Dom Dv: NetDmx" },
363
  { 0x0470, "Sean Christopher: Projection Pal" },
364
  { 0x0471, "Sean Christopher: The Lighting Remote" },
365
  { 0x0472, "LSS Lighting: MasterGate Profibus interface" },
366
  { 0x0473, "LSS Lighting: Rail Controller Profibus" },
367
  { 0x0474, "LSS Lighting: Master Port Mini" },
368
  { 0x0475, "LSS Lighting: Powerdim" },
369
  { 0x0490, "Open Clear: OemOpenClear0" },
370
  { 0x0491, "Open Clear: OemOpenClear1" },
371
  { 0x0492, "Open Clear: OemOpenClear2" },
372
  { 0x0493, "Open Clear: OemOpenClear3" },
373
  { 0x0494, "Open Clear: OemOpenClear4" },
374
  { 0x0495, "Open Clear: OemOpenClear5" },
375
  { 0x0496, "Open Clear: OemOpenClear6" },
376
  { 0x0497, "Open Clear: OemOpenClear7" },
377
  { 0x0498, "Open Clear: OemOpenClear8" },
378
  { 0x0499, "Open Clear: OemOpenClear9" },
379
  { 0x049A, "Open Clear: OemOpenCleara" },
380
  { 0x049B, "Open Clear: OemOpenClearb" },
381
  { 0x049C, "Open Clear: OemOpenClearc" },
382
  { 0x049D, "Open Clear: OemOpenCleard" },
383
  { 0x049E, "Open Clear: OemOpenCleare" },
384
  { 0x049F, "Open Clear: OemOpenClearf" },
385
  { 0x04B0, "MA Lighting: 2 Port Node" },
386
  { 0x04B1, "MA Lighting: Nsp" },
387
  { 0x04B2, "MA Lighting: Ndp" },
388
  { 0x04B3, "MA Lighting: Remote" },
389
  { 0x04B4, "MA Lighting: GrandMA2 Consoles and OnPC" },
390
  { 0x04B5, "MA Lighting: VPU" },
391
  { 0x04B6, "MA Lighting: MA 2 4 8 Port Node programmable io" },
392
  { 0x04B7, "MA Lighting: Dot2 console and Dot2OnPC" },
393
  { 0x04B8, "MA Lighting: Dot2 VPU" },
394
  { 0x04B9, "MA Lighting: Dot2 X Port nodes" },
395
  { 0x04BA, "MA Lighting: OemMaa" },
396
  { 0x04BB, "MA Lighting: OemMab" },
397
  { 0x04BC, "MA Lighting: OemMac" },
398
  { 0x04BD, "MA Lighting: OemMad" },
399
  { 0x04BE, "MA Lighting: OemMae" },
400
  { 0x04BF, "MA Lighting: OemMaf" },
401
  { 0x04C0, "inoage GmbH: MADRIX 2" },
402
  { 0x04C1, "GLP: Ion control pc" },
403
  { 0x04C2, "inoage GmbH: Snuffler" },
404
  { 0x04C3, "inoage GmbH: PLEXUS" },
405
  { 0x04C4, "inoage GmbH: MADRIX 3" },
406
  { 0x04C5, "inoage GmbH: LUNA 8" },
407
  { 0x04C6, "inoage GmbH: OemMadrix6" },
408
  { 0x04C7, "inoage GmbH: LUNA 4" },
409
  { 0x04C8, "inoage GmbH: LUNA 16" },
410
  { 0x04C9, "inoage GmbH: NEBULA" },
411
  { 0x04CA, "inoage GmbH: STELLA" },
412
  { 0x04CB, "inoage GmbH: ORION" },
413
  { 0x04CC, "inoage GmbH: MADRIX 5" },
414
  { 0x04CD, "inoage GmbH: OemMadrixd" },
415
  { 0x04CE, "inoage GmbH: AURA" },
416
  { 0x04CF, "inoage GmbH: OemMadrixf" },
417
  { 0x04D0, "Team Projects: Xilver Controller" },
418
  { 0x04E0, "Wybron: PSU 2" },
419
  { 0x04F0, "Pharos Architectural Controls: LPCX" },
420
  { 0x04F1, "Pharos Architectural Controls: OemPharosLpc1" },
421
  { 0x04F2, "Pharos Architectural Controls: OemPharosLpc2" },
422
  { 0x04F3, "Pharos Architectural Controls: OemPharos3" },
423
  { 0x04F4, "Pharos Architectural Controls: OemPharos4" },
424
  { 0x04F5, "Pharos Architectural Controls: OemPharos5" },
425
  { 0x04F6, "Pharos Architectural Controls: OemPharos6" },
426
  { 0x04F7, "Pharos Architectural Controls: OemPharos7" },
427
  { 0x04F8, "Pharos Architectural Controls: OemPharos8" },
428
  { 0x04F9, "Pharos Architectural Controls: OemPharos9" },
429
  { 0x04FA, "Pharos Architectural Controls: OemPharosa" },
430
  { 0x04FB, "Pharos Architectural Controls: OemPharosb" },
431
  { 0x04FC, "Pharos Architectural Controls: OemPharosc" },
432
  { 0x04FD, "Pharos Architectural Controls: OemPharosd" },
433
  { 0x04FE, "Pharos Architectural Controls: OemPharose" },
434
  { 0x04FF, "Pharos Architectural Controls: OemPharosf" },
435
  { 0x0500, "HES: DP8000 16" },
436
  { 0x0501, "HES: DP8000 12" },
437
  { 0x0502, "HES: DP2000" },
438
  { 0x0600, "Spectrum Manufacturing: Chroma Q PSU32" },
439
  { 0x0610, "DmxDesign: EthDec2" },
440
  { 0x0620, "WodieLite: ArtMedia" },
441
  { 0x0800, "Element Labs: Vizomo" },
442
  { 0x0810, "Dataton: Watchout" },
443
  { 0x0820, "Barco: Barco DML 120" },
444
  { 0x0821, "Barco: FLM" },
445
  { 0x0822, "Barco: CLM" },
446
  { 0x0830, "City Theatrical: SHoW DMX Transmitter" },
447
  { 0x0831, "City Theatrical: SHoW DMX Neo Transceiver" },
448
  { 0x0840, "Quantukm Logic: DMX Ethernet Node" },
449
  { 0x0850, "LSS Lighting: MasterSwitch" },
450
  { 0x0851, "LSS Lighting: MasterPort4" },
451
  { 0x0852, "LSS Lighting: MasterPortPSU" },
452
  { 0x0853, "LSS Lighting: DMX View" },
453
  { 0x0860, "Future Design ApS: FD Trio" },
454
  { 0x0870, "Qmaxz Lighting: QME700P" },
455
  { 0x0871, "Lux Lumen: Lux Node" },
456
  { 0x0880, "Martin: Ether2DMX8 Node" },
457
  { 0x0890, "PHOENIXstudios Remsfeld: DIMMER ShowGate" },
458
  { 0x0891, "LaserAnimation Sollinger GmbH: Lasergraph DSP" },
459
  { 0x0892, "LaserAnimation Sollinger GmbH: Lasergraph DSP" },
460
  { 0x08A0, "COEMAR: Infinity Spot S" },
461
  { 0x08A1, "COEMAR: Infinity Wash S" },
462
  { 0x08A2, "COEMAR: Infinity ACL S" },
463
  { 0x08A3, "COEMAR: Infinity Spot XL" },
464
  { 0x08A4, "COEMAR: Infinity Wash XL" },
465
  { 0x08A5, "COEMAR: DR1+" },
466
  { 0x08A6, "COEMAR: Infinity Spot M" },
467
  { 0x08A7, "COEMAR: Infinity Wash M" },
468
  { 0x08A8, "COEMAR: Infinity ACL M" },
469
  { 0x08B0, "DMXControl: DMXControl" },
470
  { 0x08B1, "DMXControl: AvrNode" },
471
  { 0x08C0, "ChamSys: MagicQ" },
472
  { 0x08D0, "Fisher Technical Services Inc: Navigator Automation System" },
473
  { 0x08E0, "Electric Spark: VPIX40" },
474
  { 0x08F0, "JSC: Gate Pro 1P" },
475
  { 0x08F1, "JSC: Gate Pro 2P" },
476
  { 0x08F2, "JSC: Gate Pro 4P" },
477
  { 0x0900, "EQUIPSON S A: WORK LM 3R" },
478
  { 0x0901, "EQUIPSON S A: WORK LM 3E" },
479
  { 0x0910, "TecArt Lighting: 1CH Node" },
480
  { 0x0911, "TecArt Lighting: Ethernet Merger" },
481
  { 0x0912, "TecArt Lighting: 2CH Node" },
482
  { 0x0920, "Zero 88: ORB" },
483
  { 0x0921, "Zero 88: ORBxf" },
484
  { 0x0922, "Zero 88: Zero Wire CRMX TX RDM" },
485
  { 0x0923, "Zero 88: Solution" },
486
  { 0x0924, "Zero 88: Solution XL" },
487
  { 0x0925, "Zero 88: EtherN 2 RDM" },
488
  { 0x0926, "Zero 88: EtherN 8 RDM" },
489
  { 0x0927, "Zero 88: G4" },
490
  { 0x0928, "Zero 88: G8" },
491
  { 0x0930, "EQUIPSON S A: WORK LM 4" },
492
  { 0x0940, "Laser Technology Ltd: LasNet" },
493
  { 0x0950, "LSS Lighting: Discovery" },
494
  { 0x0960, "JPK Systems Limited: OemJpk1" },
495
  { 0x0961, "JPK Systems Limited: OemJpk2" },
496
  { 0x0962, "JPK Systems Limited: OemJpk3" },
497
  { 0x0963, "JPK Systems Limited: OemJpk4" },
498
  { 0x0964, "JPK Systems Limited: OemJpk5" },
499
  { 0x0965, "JPK Systems Limited: OemJpk6" },
500
  { 0x0966, "JPK Systems Limited: OemJpk7" },
501
  { 0x0967, "JPK Systems Limited: OemJpk8" },
502
  { 0x0968, "JPK Systems Limited: OemJpk9" },
503
  { 0x0969, "JPK Systems Limited: OemJpk10" },
504
  { 0x096A, "JPK Systems Limited: OemJpk11" },
505
  { 0x096B, "JPK Systems Limited: OemJpk12" },
506
  { 0x096C, "JPK Systems Limited: OemJpk13" },
507
  { 0x096D, "JPK Systems Limited: OemJpk14" },
508
  { 0x096E, "JPK Systems Limited: OemJpk15" },
509
  { 0x096F, "JPK Systems Limited: OemJpk16" },
510
  { 0x0970, "Fresnel Strong: Power 12 3 TR Net" },
511
  { 0x0971, "Fresnel S A Strong: Nocturne Stage Control" },
512
  { 0x0972, "Fresnel S A Strong: Ethernet DMX" },
513
  { 0x0980, "Prism Projection: RevEAL" },
514
  { 0x0990, "Moving Art: M NET" },
515
  { 0x09A0, "HPL LIGHT COMPANY: DIMMER POWER LIGHT" },
516
  { 0x09B0, "Engineering Solutions Inc: Tripix controller" },
517
  { 0x09B1, "Engineering Solutions Inc: E16 RGB Node Driver" },
518
  { 0x09B2, "Engineering Solutions Inc: E8 RGB Node Driver" },
519
  { 0x09B3, "Engineering Solutions Inc: E4 RGB Node Driver" },
520
  { 0x09C0, "SAND Network Systems: SandPort SandBox" },
521
  { 0x09D0, "Oarw: Screen Monkey" },
522
  { 0x09E0, "Mueller Elektronik: NetLase" },
523
  { 0x09F0, "LumenRadio AB: CRMX Nova TX2" },
524
  { 0x09F1, "LumenRadio AB: CRMX Nova TX2 RDM" },
525
  { 0x09F2, "LumenRadio AB: CRMX Nova FX" },
526
  { 0x09F3, "LumenRadio AB: CRMX Nova FX2" },
527
  { 0x09F4, "LumenRadio AB: CRMX Outdoor F1ex" },
528
  { 0x09F5, "LumenRadio AB: SuperNova" },
529
  { 0x0A00, "SRS Light Design: NDP12 Network Dimmer Pack" },
530
  { 0x0A10, "VYV Corporation: Photon" },
531
  { 0x0A20, "CDS: LanBox LCX" },
532
  { 0x0A21, "CDS: LanBox LCE" },
533
  { 0x0A22, "CDS: LanBox LCP" },
534
  { 0x0A30, "Total Light: Mx Single" },
535
  { 0x0A31, "Total Light: Mx Dual" },
536
  { 0x0A40, "Shanghai SeaChip Electronics Co Ltd: SC DMX 2000" },
537
  { 0x0A50, "Synthe FX: Luminair" },
538
  { 0x0A51, "Synthe FX: Pixelnode" },
539
  { 0x0A60, "Goddard Design Company: OemGodAL5001" },
540
  { 0x0A61, "Goddard Design Company: OemGodDataLynxOp" },
541
  { 0x0A62, "Goddard Design Company: OemGodRailLynxOp" },
542
  { 0x0A63, "Goddard Design Company: OemGodDownLynx4" },
543
  { 0x0A64, "Goddard Design Company: OemGodNetLynxOp4" },
544
  { 0x0A65, "Goddard Design Company: OemGodAL5002" },
545
  { 0x0A66, "Goddard Design Company: OemGodDataLynxIp" },
546
  { 0x0A67, "Goddard Design Company: OemGodCataLynxNt" },
547
  { 0x0A68, "Goddard Design Company: OemGodRailLynxIp" },
548
  { 0x0A69, "Goddard Design Company: OemGodUpLynx4" },
549
  { 0x0A6A, "Goddard Design Company: OemGodNetLynxIp4" },
550
  { 0x0A6B, "Goddard Design Company: OemGodArtBoot" },
551
  { 0x0A6C, "Goddard Design Company: OemGodArtLynxOp" },
552
  { 0x0A6D, "Goddard Design Company: OemGodArtLynxIp" },
553
  { 0x0A6E, "Goddard Design Company: OemGodEtherLynxII" },
554
  { 0x0A80, "CLAYPAKY: Alpha Spot HPE 700" },
555
  { 0x0A81, "CLAYPAKY: Alpha Beam 700" },
556
  { 0x0A82, "CLAYPAKY: Alpha Wash 700" },
557
  { 0x0A83, "CLAYPAKY: Alpha Profile 700" },
558
  { 0x0A84, "CLAYPAKY: Alpha Beam 1500" },
559
  { 0x0A85, "CLAYPAKY: Alpha Wash LT1500" },
560
  { 0x0A86, "CLAYPAKY: Alpha Spot HPE 1500" },
561
  { 0x0A87, "CLAYPAKY: Alpha Profile 1500" },
562
  { 0x0A88, "CLAYPAKY: Alpha Wash 1500" },
563
  { 0x0A89, "CLAYPAKY: Sharpy" },
564
  { 0x0A8A, "CLAYPAKY: Shot Light Wash" },
565
  { 0x0A8B, "CLAYPAKY: Alpha Spot QWO800" },
566
  { 0x0A8C, "CLAYPAKY: Alpha Profile 1500Q" },
567
  { 0x0A8D, "CLAYPAKY: Alpha Profile 800" },
568
  { 0x0A8E, "CLAYPAKY: Aleda K5" },
569
  { 0x0A8F, "CLAYPAKY: Aleda K10" },
570
  { 0x0A90, "CLAYPAKY: Aleda K20" },
571
  { 0x0A91, "CLAYPAKY: Sharpy Wash" },
572
  { 0x0A92, "CLAYPAKY: Aleda K10 B Eye Easy" },
573
  { 0x0A93, "CLAYPAKY: Aleda K20 B Eye" },
574
  { 0x0A94, "CLAYPAKY: Aleda K10 B Eye" },
575
  { 0x0A95, "CLAYPAKY: SuperSharpy" },
576
  { 0x0A96, "CLAYPAKY: Mythos" },
577
  { 0x0A97, "CLAYPAKY: Sharpy Wash PC" },
578
  { 0x0A98, "CLAYPAKY: SCENIUS PROFILE" },
579
  { 0x0A99, "CLAYPAKY: SCENIUS SPOT" },
580
  { 0x0A9A, "CLAYPAKY: SPHERISCAN" },
581
  { 0x0A9B, "CLAYPAKY: SPHERLIGHT" },
582
  { 0x0A9C, "CLAYPAKY: HEPIKOS" },
583
  { 0x0A9D, "CLAYPAKY: SHOWBATTEN" },
584
  { 0x0A9E, "CLAYPAKY: SHAR BAR" },
585
  { 0x0A9F, "CLAYPAKY: MYTHOS2" },
586
  { 0x0AA0, "Raven Systems Design Inc: AquaDuct Fountain" },
587
  { 0x0AA1, "Raven Systems Design Inc: OemRaven1" },
588
  { 0x0AA2, "Raven Systems Design Inc: OemRaven2" },
589
  { 0x0AA3, "Raven Systems Design Inc: OemRaven3" },
590
  { 0x0AA4, "Raven Systems Design Inc: OemRaven4" },
591
  { 0x0AA5, "Raven Systems Design Inc: OemRaven5" },
592
  { 0x0AA6, "Raven Systems Design Inc: OemRaven6" },
593
  { 0x0AA7, "Raven Systems Design Inc: OemRaven7" },
594
  { 0x0AA8, "Raven Systems Design Inc: OemRaven8" },
595
  { 0x0AA9, "Raven Systems Design Inc: OemRaven9" },
596
  { 0x0AAA, "Raven Systems Design Inc: OemRavena" },
597
  { 0x0AAB, "Raven Systems Design Inc: OemRavenb" },
598
  { 0x0AAC, "Raven Systems Design Inc: OemRavenc" },
599
  { 0x0AAD, "Raven Systems Design Inc: OemRavend" },
600
  { 0x0AAE, "Raven Systems Design Inc: OemRavene" },
601
  { 0x0AAF, "Raven Systems Design Inc: OemRavenf" },
602
  { 0x0AB0, "Theatrelight New Zealand: TLED2 Ethernet to isolated DMX converter" },
603
  { 0x0AB1, "Theatrelight New Zealand: TLDE2 Isolated DMX to Ethernet converter" },
604
  { 0x0AB2, "Theatrelight New Zealand: TLPID II 60 Plugin Dimmer Cabinet" },
605
  { 0x0AB3, "Theatrelight New Zealand: TLPID II 96 Plugin Dimmer Cabinet" },
606
  { 0x0AB4, "Theatrelight New Zealand: TLPID II 120 Plugin Dimmer Cabinet" },
607
  { 0x0AB5, "Theatrelight New Zealand: TLPID II 192 Plugin Dimmer Cabinet" },
608
  { 0x0AC0, "Cinetix Medien und Interface GmbH: Ethernet DMX512 Control Box" },
609
  { 0x0AC1, "Cinetix Medien und Interface GmbH: Ethernet DMX512 Generator" },
610
  { 0x0AC2, "Cinetix Medien und Interface GmbH: Ethernet DMX512 GenIO" },
611
  { 0x0AD0, "WERPAX bvba: MULTI DMX" },
612
  { 0x0AE0, "chainzone: RoundTable" },
613
  { 0x0AF0, "City Theatrical Inc: PDS 750TRX" },
614
  { 0x0AF1, "City Theatrical Inc: PDS 375TRX" },
615
  { 0x0B00, "STC Mecatronica: DDR 2404 Digital Dimmer Rack" },
616
  { 0x0B10, "LSC: OemLscOut1" },
617
  { 0x0B11, "LSC: OemLscIn1" },
618
  { 0x0B12, "LSC: OemLscOut4" },
619
  { 0x0B13, "LSC: OemLscIn4" },
620
  { 0x0B20, "EUROLITE: Node 8" },
621
  { 0x0B30, "Absolute FX Pte Ltd: Showtime" },
622
  { 0x0B40, "Mediamation Inc: Virtual Fountain" },
623
  { 0x0B50, "Vanilla Internet Ltd: Chameleon" },
624
  { 0x0B60, "LightWild LC: LightWild DataBridge" },
625
  { 0x0B70, "Flexvisual: FlexNode" },
626
  { 0x0B80, "Company NA: Digi Network" },
627
  { 0x0B81, "Company NA: Mozart PSU 4" },
628
  { 0x0B82, "Company NA: DigiNet 416" },
629
  { 0x0B90, "DMX4ALL GmbH: DMX UNIVERSE 4 1" },
630
  { 0x0B91, "DMX4ALL GmbH: DMX STAGE PROFI 1 1" },
631
  { 0x0B92, "DMX4ALL GmbH: MagiarLED II flex PixxControl" },
632
  { 0x0BA0, "Starlighting: Net DMX Notes" },
633
  { 0x0BB0, "medien technik cords: MGate4" },
634
  { 0x0BC0, "Joshua 1 Systems Inc: ECG M32MX" },
635
  { 0x0BC1, "Joshua 1 Systems Inc: ECG DR2" },
636
  { 0x0BC2, "Joshua 1 Systems Inc: ECG DR4" },
637
  { 0x0BC3, "Joshua 1 Systems Inc: ECG PIX8" },
638
  { 0x0BC4, "Joshua 1 Systems Inc: ECGPro D1" },
639
  { 0x0BC5, "Joshua 1 Systems Inc: ECGPro D4" },
640
  { 0x0BC6, "Joshua 1 Systems Inc: ECGPro D8" },
641
  { 0x0BD0, "Astera: AC4" },
642
  { 0x0BE0, "MARUMO ELECTRIC Co Ltd: MBK 350E" },
643
  { 0x0BE1, "MARUMO ELECTRIC Co Ltd: MBK 360E" },
644
  { 0x0BE2, "MARUMO ELECTRIC Co Ltd: MBK 370E" },
645
  { 0x0BF0, "Weigl Elektronik Mediaprojekte: Pro IO" },
646
  { 0x0C00, "GLP German Light Products GmbH: Impression Spot one" },
647
  { 0x0C01, "GLP German Light Products GmbH: Impression Wash one" },
648
  { 0x0C10, "s jaekel: DmxScreen" },
649
  { 0x0C11, "s jaekel: TimecodeSender" },
650
  { 0x0C12, "s jaekel: TimecodeViewer" },
651
  { 0x0C13, "s jaekel: DmxSnuffler" },
652
  { 0x0C14, "s jaekel: DmxConsole" },
653
  { 0x0C15, "s jaekel: TimecodeSyncAudioPlayer" },
654
  { 0x0D00, "Peter Maes Technology: EtherDmxLinkDuo" },
655
  { 0x0D10, "SOUNDLIGHT: USBDMX TWO" },
656
  { 0x0D20, "IBH: loox" },
657
  { 0x0D30, "Thorn Lighting Ltd: SensaPro eDMX" },
658
  { 0x0D40, "Chromateq SARL: LED Player" },
659
  { 0x0D41, "Chromateq SARL: Pro DMX" },
660
  { 0x0D50, "KiboWorks: KiboNode 16 Port" },
661
  { 0x0D60, "The White Rabbit Company Inc: MCM Mini Communications Module" },
662
  { 0x0D70, "TMB: ProPlex IQ" },
663
  { 0x0D71, "TMB: Mozart MZ 40" },
664
  { 0x0D80, "Celestial Audio: EtherDMX8 Simple" },
665
  { 0x0D81, "Celestial Audio: EtherDMX8 Pro" },
666
  { 0x0D82, "Celestial Audio: DMX36" },
667
  { 0x0D90, "Doug Fleenor Design Inc: Node4" },
668
  { 0x0DA0, "Lex: AL5003 Lex" },
669
  { 0x0DB0, "Revolution Display Inc: Navigator" },
670
  { 0x0DC0, "Visual Productions: CueCore" },
671
  { 0x0DC1, "Visual Productions: IoCore" },
672
  { 0x0DD0, "LLT Lichttechnik GmbH Co KG: SMS 28A" },
673
  { 0x0DE0, "Chromlech: Elidy S" },
674
  { 0x0DE1, "Chromlech: Elidy S RDM" },
675
  { 0x0DE2, "Chromlech: Elidy" },
676
  { 0x0DE3, "Chromlech: Elidy RDM" },
677
  { 0x0DF0, "Integrated System Technologies Ltd: iDrive Thor 36" },
678
  { 0x0DF1, "Integrated System Technologies Ltd: iDrive White Knight 36" },
679
  { 0x0DF2, "Integrated System Technologies Ltd: iDrive Force 12" },
680
  { 0x0DF3, "Integrated System Technologies Ltd: iDrive Thor 16" },
681
  { 0x0E00, "RayComposer R Adams: RayComposer Software" },
682
  { 0x0E01, "RayComposer R Adams: RayComposer NET" },
683
  { 0x0E10, "eldoLED: PowerBOX Addresser" },
684
  { 0x0E20, "coolux GmbH: Pandoras Box Mediaserver" },
685
  { 0x0E21, "coolux GmbH: Widget Designer" },
686
  { 0x0E30, "ELETTROLAB Srl: Accendo Smart Light Power" },
687
  { 0x0E40, "Philips: ColorBlaze TRX" },
688
  { 0x0E70, "XiamenGreenTao Opto Electronics Co Ltd: GT DMX 2000" },
689
  { 0x0E71, "XiamenGreenTao Opto Electronics Co Ltd: GT DMX 4000" },
690
  { 0x0E80, "Rnet: Rnet 8" },
691
  { 0x0E81, "Rnet: Rnet 6" },
692
  { 0x0E82, "Rnet: Rnet 4" },
693
  { 0x0E83, "Rnet: Rnet 2" },
694
  { 0x0E84, "Rnet: Rnet 1" },
695
  { 0x0E90, "Dmx4All: Player AN" },
696
  { 0x0E91, "Dmx4All: AN Led Dimmer AN" },
697
  { 0x0EA0, "EQUIPSON S A: WORK LM 5" },
698
  { 0x0EA1, "EQUIPSON S A: WORK LM 3R2" },
699
  { 0x0EA2, "EQUIPSON S A: WORK LM 5W" },
700
  { 0x0EA3, "EQUIPSON S A: WORK DMXNET 4" },
701
  { 0x0EA4, "EQUIPSON S A: WORK DMXNET 8" },
702
  { 0x0EB0, "SanDevices: E680 pixel controllers" },
703
  { 0x0EB1, "SanDevices: E681 pixel controllers" },
704
  { 0x0EB2, "SanDevices: E682 pixel controllers" },
705
  { 0x0EB3, "SanDevices: E6804 pixel controllers" },
706
  { 0x0EC0, "BRAINSALT MEDIA GMBH: BSM Conductor PRO" },
707
  { 0x0ED0, "ELETTROLAB Srl: Avvio 04" },
708
  { 0x0ED1, "ELETTROLAB Srl: Remoto" },
709
  { 0x0EE0, "PRO SOLUTIONS: DMX PRO Net 02" },
710
  { 0x0EE1, "PRO SOLUTIONS: DMX PRO Net 01" },
711
  { 0x0EE2, "PRO SOLUTIONS: DMX PRO Net 10" },
712
  { 0x0EE3, "PRO SOLUTIONS: DMX PRO Net 11" },
713
  { 0x0EE4, "PRO SOLUTIONS: DMX PRO Net 04" },
714
  { 0x0EE5, "PRO SOLUTIONS: DMX PRO Net 14" },
715
  { 0x0EF0, "eIdea Creative Technology: EtherShow 2" },
716
  { 0x0F00, "Brink Electronics: net node 01" },
717
  { 0x0F01, "Brink Electronics: net node 10" },
718
  { 0x0F02, "Brink Electronics: net node 11" },
719
  { 0x0F10, "deskontrol electronics: Pixel controller II" },
720
  { 0x0F11, "deskontrol electronics: Pixel controller III" },
721
  { 0x0F12, "deskontrol electronics: DMX controller" },
722
  { 0x0F20, "Kirron light components: IDycoLED Control" },
723
  { 0x0F30, "Visual Productions: B Station" },
724
  { 0x0F31, "Visual Productions: F Station" },
725
  { 0x0F40, "LSS GmbH: MasterPort RM" },
726
  { 0x0F50, "kuwatec Inc: EtherMX" },
727
  { 0x0F60, "Integrated System Technologies Ltd: iDrive PixelLED" },
728
  { 0x0F61, "Integrated System Technologies Ltd: iDrive Gateway 12" },
729
  { 0x0F70, "Philips Large Luminous Surfaces: Luminous Textile Panel" },
730
  { 0x0F80, "VT Control: WRDM V1 0" },
731
  { 0x0F90, "Panasonic Corporation: EMIT AX" },
732
  { 0x0F91, "Panasonic Corporation: Projector" },
733
  { 0x0FA0, "Diamante Lighting: DMNet Out" },
734
  { 0x0FB0, "Glow Motion Technologies LLC: Ghostband Transmitter" },
735
  { 0x0FC0, "Sigma Net: AM 8" },
736
  { 0x0FD0, "DiGidot: DiGidot C 4" },
737
  { 0x0FE0, "techKnow Design: techNodeTx1" },
738
  { 0x0FE1, "techKnow Design: techNodeTx2" },
739
  { 0x0FE2, "techKnow Design: techNodeRx1" },
740
  { 0x0FE3, "techKnow Design: techNodeRx2" },
741
  { 0x0FF0, "Total Light: Ether Quad" },
742
  { 0x1000, "IP DMX Control: ip dmx dx 1 2" },
743
  { 0x1010, "TNF Concept: RTS DMX 512" },
744
  { 0x1020, "Nico Technology: Nico DMX interface 4504" },
745
  { 0x1030, "Highendled Electronics Company Limited: EZK456" },
746
  { 0x1031, "Highendled Electronics Company Limited: PIX101" },
747
  { 0x1032, "Highendled Electronics Company Limited: FLA472" },
748
  { 0x1033, "Highendled Electronics Company Limited: ULT538" },
749
  { 0x1034, "Highendled Electronics Company Limited: PSU 10A" },
750
  { 0x1040, "Visual Productions: Cuety" },
751
  { 0x1041, "Visual Productions: QuadCore" },
752
  { 0x1050, "Ackerman Computer Sciences: CFSound IV - Compact Flash Sound Player IV" },
753
  { 0x1051, "Ackerman Computer Sciences: Color LCD 320x240 Terminal" },
754
  { 0x1060, "Innovation LED Limited: Ilumo Zoom Spot" },
755
  { 0x1061, "Innovation LED Limited: Ilumo Cyc 1" },
756
  { 0x1062, "Innovation LED Limited: Ilumo ARC Gateway" },
757
  { 0x1063, "Innovation LED Limited: Ether DMX 1" },
758
  { 0x1064, "Innovation LED Limited: Ether DMX 2" },
759
  { 0x1065, "Innovation LED Limited: Ether DMX 4" },
760
  { 0x1070, "LightAct d o o: reActor" },
761
  { 0x1080, "wupperTec: iMerge" },
762
  { 0x1090, "Integrated System Technologies Ltd: iMune" },
763
  { 0x10A0, "Advatek Lighting: PixLite 16" },
764
  { 0x10A1, "Advatek Lighting: PixLite 4" },
765
  { 0x10B0, "ACME: XP 1000 SZ" },
766
  { 0x10C0, "AV Stumpfl GmbH: Wings AV Suite" },
767
  { 0x10D0, "Lumax: LumaxNET ILDA Interface" },
768
  { 0x10E0, "Zingerli Show Engineering: Katlait" },
769
  { 0x10E1, "Zingerli Show Engineering: Kailua" },
770
  { 0x10E2, "Zingerli Show Engineering: Kailua 2" },
771
  { 0x10E3, "Zingerli Show Engineering: Pina" },
772
  { 0x10E4, "Zingerli Show Engineering: Sina" },
773
  { 0x10E5, "Zingerli Show Engineering: Tukra" },
774
  { 0x10F0, "kuwatec Inc: DIAheart" },
775
  { 0x1100, "Sigma Net: E NODE 8 1" },
776
  { 0x1110, "Radig Hard Software: EDC 01" },
777
  { 0x1120, "Mogees Ltd: Mogees" },
778
  { 0x1130, "GuangZhou MCSWE Technologies: MCSWE 1024" },
779
  { 0x1131, "GuangZhou MCSWE Technologies: MCSWE 2048" },
780
  { 0x1140, "Dynamic Projection Institute Herstellungs und Vertriebs GmbH: Mirror Head" },
781
  { 0x1150, "Steinigke Showtechnic GmbH: PSU 8A" },
782
  { 0x1151, "Steinigke Showtechnic GmbH: Node 1" },
783
  { 0x1152, "Steinigke Showtechnic GmbH: Pixel Ball" },
784
  { 0x1153, "Steinigke Showtechnic GmbH: Zeitgeist PMC 16" },
785
  { 0x1154, "Steinigke Showtechnic GmbH: Stage Bar 5" },
786
  { 0x1155, "Steinigke Showtechnic GmbH: Stage Bar 10" },
787
  { 0x1160, "BEGLEC: BT NODE28" },
788
  { 0x1161, "BEGLEC: POWERMATRIX5x5 RGB Mk2" },
789
  { 0x1162, "BEGLEC: BEAM MATRIX5x5 RGBW" },
790
  { 0x1170, "Fineline Solutions Ltd: 16 Channel Stepper Controller" },
791
  { 0x1171, "Fineline Solutions Ltd: Fineline product 1" },
792
  { 0x1172, "Fineline Solutions Ltd: Fineline product 2" },
793
  { 0x1173, "Fineline Solutions Ltd: Fineline product 3" },
794
  { 0x1174, "Fineline Solutions Ltd: Fineline product 4" },
795
  { 0x1175, "Fineline Solutions Ltd: Fineline product 5" },
796
  { 0x1176, "Fineline Solutions Ltd: Fineline product 6" },
797
  { 0x1177, "Fineline Solutions Ltd: Fineline product 7" },
798
  { 0x1178, "Fineline Solutions Ltd: Fineline product 8" },
799
  { 0x1179, "Fineline Solutions Ltd: Fineline product 9" },
800
  { 0x117A, "Fineline Solutions Ltd: Fineline product 10" },
801
  { 0x117B, "Fineline Solutions Ltd: Fineline product 11" },
802
  { 0x117C, "Fineline Solutions Ltd: Fineline product 12" },
803
  { 0x117D, "Fineline Solutions Ltd: Fineline product 13" },
804
  { 0x117E, "Fineline Solutions Ltd: Fineline product 14" },
805
  { 0x117F, "Fineline Solutions Ltd: Fineline product 15" },
806
  { 0x1180, "Rocrail: Rocrail DMX Daylight" },
807
  { 0x1190, "PXM: Px314" },
808
  { 0x1191, "PXM: Px357" },
809
  { 0x11A0, "OTTEC Technology GmbH: Fogmachine" },
810
  { 0x11B0, "Claude Bigonoff: Interface LT Open source" },
811
  { 0x11C0, "Rena Electronica B V: Bits2Power Power Data Controller" },
812
  { 0x11D0, "LIGHT SKY: OemSkyHub" },
813
  { 0x11E0, "HDL: DMXNode4" },
814
  { 0x11F0, "Pangolin Laser Systems Inc: FB4 SE" },
815
  { 0x11F1, "Pangolin Laser Systems Inc: AVR Ethernet DMX" },
816
  { 0x1200, "ShenZhen HuaCanXing Technology Co Ltd: H801RT" },
817
  { 0x1210, "Highendled Electronics Company Limited: FLA308" },
818
  { 0x1211, "Highendled Electronics Company Limited: FLA320" },
819
  { 0x1220, "Pacific Northwest National Laboratory: PNNL Connected Lighting System Testbed" },
820
  { 0x1230, "Ed Keefe Design: Advanced Laser Router" },
821
  { 0x1240, "Guangzhou Hongcai Stage Equipment co: Q 5 Turbo" },
822
  { 0x1250, "Claude Heintz Design: LXConsole" },
823
  { 0x1260, "Immersive Design Studios: Canvas" },
824
  { 0x1270, "Visual Productions: LPU 1" },
825
  { 0x1271, "Visual Productions: LPU 2" },
826
  { 0x1272, "Visual Productions: QuadCore" },
827
  { 0x1273, "Visual Productions: CueCore2" },
828
  { 0x1280, "ARC Solid State Lighting Corporation: DMX Converter" },
829
  { 0x1290, "Peter Meyer Project Management Adviser GmbH: PMA DMX Driver" },
830
  { 0x12A0, "Robert Juliat: Dalis Reference : 860" },
831
  { 0x12A1, "Robert Juliat: Merlin" },
832
  { 0x12B0, "Briteq: BEAMBAR5 RGBW" },
833
  { 0x12B1, "Briteq: BEAMBAR10 RGBW" },
834
  { 0x12B2, "Briteq: BEAM WIZARD5x5" },
835
  { 0x12B3, "Briteq: BEAM MATRIX5x5 RGBW" },
836
  { 0x12C0, "JMS Pro Light: WLAN2DMX" },
837
  { 0x12D0, "Interactive Technologies Inc: CueServer 2" },
838
  { 0x12E0, "Strand Lighting: Single Gang Node PN 65161" },
839
  { 0x12E1, "Strand Lighting: 3 Port Node PN 65163" },
840
  { 0x12E2, "Strand Lighting: 3 Port DIN PCB PN 97 0387" },
841
  { 0x12E3, "Strand Lighting: 3 Port Embedded PCB PN 74261" },
842
  { 0x12E4, "Strand Lighting: 8 Port Node PN 65168" },
843
  { 0x12E5, "Strand Lighting: 2 Port Node PN 65162" },
844
  { 0x12F0, "Chauvet Professional: Epix Drive 900" },
845
  { 0x12F1, "Chauvet Professional: Epix Drive 642" },
846
  { 0x12F2, "Chauvet Professional: Net X" },
847
  { 0x12F3, "Chauvet Professional: Nexus 4x4" },
848
  { 0x12F4, "Chauvet Professional: Nexus 2x2" },
849
  { 0x12F5, "Chauvet Professional: Nexus 4x1" },
850
  { 0x12F6, "Chauvet Professional: Maverick Mk2" },
851
  { 0x12F7, "Chauvet Professional: Maverick Mk1 Wash" },
852
  { 0x12F8, "Chauvet Professional: Maverick Mkx1 Wash" },
853
  { 0x12F9, "Chauvet Professional: Ovation B 565FC" },
854
  { 0x12FA, "Chauvet Professional: Ovation B 2805FC" },
855
  { 0x12FB, "Chauvet Professional: VIP Drive 43s" },
856
  { 0x1300, "HPL Company: Delta 8 Node" },
857
  { 0x1310, "Steinigke Showtechnic GmbH: PSU 4A" },
858
  { 0x1320, "Lumenpulse Lighting Inc: Lumencove XT Ethernet Enabled" },
859
  { 0x1321, "Lumenpulse Lighting Inc: CBOX Ethernet" },
860
  { 0x1330, "deskontrol electronics: deskontroller" },
861
  { 0x1331, "deskontrol electronics: deskontroller pro" },
862
  { 0x1340, "Seiko Epson Corporation: Projector" },
863
  { 0x1350, "Image Engineering: Beam Composer" },
864
  { 0x1360, "Arnold Richter Cine Technik GmbH: ARRI" },
865
  { 0x1370, "NISCON Inc: RAYNOK Motion Control System" },
866
  { 0x1380, "Immersive Design Studios inc: Canvas" },
867
  { 0x1390, "ADJ Products: Flash Kling Panel" },
868
  { 0x13A0, "Callegenix LLC: DMX Commander" },
869
  { 0x13A1, "Callegenix LLC: Pixel Driver" },
870
  { 0x13B0, "ARC Solid State Lighting Corporation: Constant Voltage Driver" },
871
  { 0x13B1, "ARC Solid State Lighting Corporation: LF75 Flood Light" },
872
  { 0x13B2, "ARC Solid State Lighting Corporation: LF150 Flood Light" },
873
  { 0x13C0, "Licht Team: LT1" },
874
  { 0x13C1, "SGH: Martin" },
875
  { 0x13C2, "ADJ Products: Airstream DMX Bridge" },
876
  { 0x13C3, "DMG Technologies DMG Lumiere: Universal battery box" },
877
  { 0x13C4, "SWGroup: Easydim" },
878
  { 0x13C5, "GLP German Light Products GmbH: GT 1" },
879
  { 0x13C6, "ADL Electronics Ltd: ADL DMX NetGate" },
880
  { 0x13C7, "ADL Electronics Ltd: ADL DMX NetGate +" },
881
  { 0x13C8, "ADL Electronics Ltd: ADL DMX NetGate RDM" },
882
  { 0x13C9, "ADL Electronics Ltd: ADL DMX NetGate+ RDM" },
883
  { 0x13CA, "ADL Electronics Ltd: ADL DMX NetGate DIN" },
884
  { 0x13CB, "ADL Electronics Ltd: ADL DMX NetGate ALARM" },
885
  { 0x13CC, "ADL Electronics Ltd: ADL DC PU 24" },
886
  { 0x13CD, "ADL Electronics Ltd: ADL DC PU 24C" },
887
  { 0x13CE, "ADL Electronics Ltd: ADL DC PU 6" },
888
  { 0x13CF, "ADL Electronics Ltd: ADL DC WSO operator workstation" },
889
  { 0x13D0, "ADL Electronics Ltd: ADL DC IKB" },
890
  { 0x13D1, "ADL Electronics Ltd: ADL DimmerCabinet CPU" },
891
  { 0x13D2, "ADL Electronics Ltd: ADL Dimmer 220 12d x" },
892
  { 0x13D3, "ADL Electronics Ltd: ADL MediaPlayer" },
893
  { 0x13D4, "Opito Labs GmbH: Opito Converter Toolkit" },
894
  { 0x13D5, "Opito Labs GmbH: Opito Video Controller" },
895
  { 0x13D6, "Swisson AG: XND 4" },
896
  { 0x13D7, "ROF Electronics: Multi4verse" },
897
  { 0x13D8, "d3 Technologies Ltd: Pro Plus range" },
898
  { 0x13D9, "Integrated System Technologies Ltd: Sensor Hub" },
899
  { 0x13DA, "LKE Lasershow: H2O Motion" },
900
  { 0x13DB, "LKE Lasershow: eXtreme Motion Jet" },
901
  { 0x13DC, "LeMaitre Ltd: G300 Smart" },
902
  { 0x13DD, "Company NA: DigiNet Manager" },
903
  { 0x13DE, "TMB: ProPlex IQ Manager" },
904
  { 0x13DF, "Exalux: Connect One" },
905
  { 0x13E0, "MTH: MED LDMX512" },
906
  { 0x13E1, "MTH: MED LDMX512HUB" },
907
  { 0x13E2, "AC Lasers: SuperNova" },
908
  { 0x13E3, "AC Lasers: W Lux" },
909
  { 0x13F0, "Batmink Ltd: OEMVISAGEVISIONMAPPER" },
910
  { 0x13F1, "LEDTUNE COM: ABOX 01" },
911
  { 0x13F2, "Vertigo ApS: BlackLED" },
912
  { 0x13F3, "Ingham Designs LLC: Hunt Node" },
913
  { 0x13F4, "GuangZhou LiDang Technology Co Ltd: LD NET 1024" },
914
  { 0x13F5, "GuangZhou LiDang Technology Co Ltd: LD NET 2028" },
915
  { 0x13F6, "RGBlink: Venus X7" },
916
  { 0x13F7, "RGBlink: G 3 Net" },
917
  { 0x13F8, "Imimot Kft: Mitti" },
918
  { 0x13F9, "MCSWE Technologies INC: MCSWE LUNA 8" },
919
  { 0x13FA, "MCSWE Technologies INC: MCSWE LUNA 16" },
920
  { 0x13FB, "Digital Sputnik Lighting: DSL1" },
921
  { 0x13FC, "SRS Light Design: ANGS4" },
922
  { 0x13FD, "Chauvet DJ: DMX AN" },
923
  { 0x13FE, "Rosstech Signals: DMXBridge" },
924
  { 0x13FF, "LSC Lighting Systems Aust Pty Ltd: Mantra Lite" },
925
  { 0x1400, "DMT: Pixelstrip controller MKII" },
926
  { 0x1401, "Elation Lighting: TVL Panel DW" },
927
  { 0x1402, "RGBlink: Venus X2" },
928
  { 0x1403, "Elation Lighting: TVL Panel DW" },
929
  { 0x1404, "Elation Lighting: eNode4" },
930
  { 0x1405, "Elation Lighting: eNode8 Pro" },
931
  { 0x1406, "Exalux: Connect Plus" },
932
  { 0x1407, "Foshan YiFeng Electric Industrial Co ltd: CA EN28S" },
933
  { 0x1408, "Foshan YiFeng Electric Industrial Co ltd: CA AN28" },
934
  { 0x1409, "Foshan YiFeng Electric Industrial Co ltd: CA EN28" },
935
  { 0x140A, "Foshan YiFeng Electric Industrial Co ltd: CA AN08" },
936
  { 0x140B, "Foshan YiFeng Electric Industrial Co ltd: CA AN04" },
937
  { 0x140C, "Soundlight: Soundlight 4port node" },
938
  { 0x2000, "Artistic Licence Engineering Ltd: AL5001" },
939
  { 0x2001, "Artistic Licence Engineering Ltd: artLynx duo" },
940
  { 0x2002, "Artistic Licence Engineering Ltd: artLynx uno" },
941
  { 0x2010, "Artistic Licence Engineering Ltd: Data Lynx OP" },
942
  { 0x2020, "Artistic Licence Engineering Ltd: Rail Lynx OP" },
943
  { 0x2030, "Artistic Licence Engineering Ltd: Down Lynx G4" },
944
  { 0x2040, "Artistic Licence Engineering Ltd: Net Lynx OP G4" },
945
  { 0x2050, "Artistic Licence Engineering Ltd: AL5002" },
946
  { 0x2060, "Artistic Licence Engineering Ltd: Data Lynx IP" },
947
  { 0x2070, "Artistic Licence Engineering Ltd: Cata Lynx IP G4" },
948
  { 0x2075, "Artistic Licence Engineering Ltd: Cata Lynx OP G4" },
949
  { 0x2080, "Artistic Licence Engineering Ltd: Rail Lynx IP" },
950
  { 0x2090, "Artistic Licence Engineering Ltd: Up Lynx G4" },
951
  { 0x20A0, "Artistic Licence Engineering Ltd: Net Lynx IP G4" },
952
  { 0x20B0, "Artistic Licence Engineering Ltd: Art Play" },
953
  { 0x20D0, "Artistic Licence Engineering Ltd: Art Demux" },
954
  { 0x20E0, "Artistic Licence Engineering Ltd: Art Relay" },
955
  { 0x20F0, "Artistic Licence Engineering Ltd: Art Pipe" },
956
  { 0x2100, "Artistic Licence Engineering Ltd: Art Media" },
957
  { 0x2110, "Artistic Licence Engineering Ltd: Art Boot" },
958
  { 0x2120, "Artistic Licence Engineering Ltd: Art Lynx OP" },
959
  { 0x2130, "Artistic Licence Engineering Ltd: Art Lynx IP" },
960
  { 0x2140, "Artistic Licence Engineering Ltd: Ether Lynx II" },
961
  { 0x2150, "Artistic Licence Engineering Ltd: Multichrome E2" },
962
  { 0x2160, "Artistic Licence Engineering Ltd: Art Monitor Base" },
963
  { 0x2170, "Artistic Licence Engineering Ltd: Multichrome E1" },
964
  { 0x2200, "Artistic Licence Engineering Ltd: Micro Scope 5" },
965
  { 0x2210, "Artistic Licence Engineering Ltd: Two Play" },
966
  { 0x2211, "Artistic Licence Engineering Ltd: Two Play XT" },
967
  { 0x2212, "Artistic Licence Engineering Ltd: Multi Play" },
968
  { 0x2220, "Artistic Licence Engineering Ltd: Diamond" },
969
  { 0x2221, "Artistic Licence Engineering Ltd: Quartz" },
970
  { 0x2222, "Artistic Licence Engineering Ltd: Zircon" },
971
  { 0x2223, "Artistic Licence Engineering Ltd: Graphite" },
972
  { 0x2224, "Artistic Licence Engineering Ltd: Opal" },
973
  { 0x2225, "Artistic Licence Engineering Ltd: Mica" },
974
  { 0x2230, "Artistic Licence Engineering Ltd: eSense" },
975
  { 0x2231, "Artistic Licence Engineering Ltd: eSense XT" },
976
  { 0x2240, "Artistic Licence Engineering Ltd: dVnet" },
977
  { 0x2241, "Artistic Licence Engineering Ltd: versaSplit EthB" },
978
  { 0x2242, "Artistic Licence Engineering Ltd: versaSplit EthA" },
979
  { 0x2250, "Artistic Licence Engineering Ltd: AL5003" },
980
  { 0x2258, "Artistic Licence Engineering Ltd: daliGate uno" },
981
  { 0x2259, "Artistic Licence Engineering Ltd: daliGate duo" },
982
  { 0x225A, "Artistic Licence Engineering Ltd: daliGate quad" },
983
  { 0x2260, "Artistic Licence Engineering Ltd: lightJuice CV4" },
984
  { 0x2261, "Artistic Licence Engineering Ltd: lightJuice DC24" },
985
  { 0x2262, "Artistic Licence Engineering Ltd: lightJuice CC2" },
986
  { 0x2263, "Artistic Licence Engineering Ltd: lightJuice OL1" },
987
  { 0x2264, "Artistic Licence Engineering Ltd: lightJuice PX1" },
988
  { 0x2265, "Artistic Licence Engineering Ltd: lightJuice DALI" },
989
  { 0x2266, "Artistic Licence Engineering Ltd: lightJuice Dmx" },
990
  { 0x2267, "Artistic Licence Engineering Ltd: artLynx quad" },
991
  { 0x2268, "Artistic Licence Engineering Ltd: dataLynx II" },
992
  { 0x2269, "Singularity (UK) Ltd: DMX Workshop" },
993
  { 0x226A, "Singularity (UK) Ltd: ACT" },
994
  { 0x226B, "Artistic Licence Engineering Ltd: Colour Tramp Input" },
995
  { 0x226C, "Singularity (UK) Ltd: DmxToolBox" },
996
  { 0x226D, "Artistic Licence Engineering Ltd: pixiLynx 4x4" },
997
  { 0x226E, "Artistic Licence Engineering Ltd: artLynx rj45" },
998
  { 0x226F, "Artistic Licence Engineering Ltd: netLynx quad" },
999
  { 0x2270, "Artistic Licence Engineering Ltd: downLynx quad" },
1000
  { 0x2271, "Artistic Licence Engineering Ltd: rackLynxOcto" },
1001
  { 0x2272, "Artistic Licence Engineering Ltd: oemGate quad" },
1002
  { 0x2801, "Gearbox Solutions: LC1" },
1003
  { 0x2802, "Licht en Geluid Team: DMXDisplay" },
1004
  { 0x2803, "Lycht: Lycht Hub" },
1005
  { 0x2804, "Elation Lighting: TVL Softlight DW" },
1006
  { 0x2805, "ELETTROLAB Srl: Avvio Mini WiFi" },
1007
  { 0x2806, "CLAYPAKY: SUPERSHARPY²" },
1008
  { 0x2807, "JMS Pro Light: AIR2DMX" },
1009
  { 0x2808, "Steinigke Showtechnic GmbH: Node 8 MK2" },
1010
  { 0x2809, "W A Benjamin Electric Co: Integrity RDM Conformance Test" },
1011
  { 0x280A, "DMX4ALL GmbH: Wireless DMX4ALL Device" },
1012
  { 0x280B, "DMX4ALL GmbH: DMX4ALL PixxDevice" },
1013
  { 0x280C, "DMX4ALL GmbH: DMX4ALL PlayerDevice" },
1014
  { 0x280D, "DMX4ALL GmbH: DMX4ALL MuxDevice" },
1015
  { 0x280E, "DMX4ALL GmbH: DMX4ALL WirelessDevice" },
1016
  { 0x280F, "DMX4ALL GmbH: DMX4ALL WirelessPixxDevice" },
1017
  { 0x2810, "Steinigke Showtechnic GmbH: LED TMH X25 XL" },
1018
  { 0x2811, "Elation Lighting: eNode 2POE" },
1019
  { 0x2812, "Elation Lighting: TVL Panel DW" },
1020
  { 0x2813, "BLS: c21550820" },
1021
  { 0x2814, "Elation Lighting: TVL Softlight DW" },
1022
  { 0x2815, "ImageCue LLC: ImageCue NEV" },
1023
  { 0x2816, "NightStarry Electronics Co LTD: Net Dmx" },
1024
  { 0x2817, "NightStarry Electronics Co LTD: Net Node:32" },
1025
  { 0x2818, "NightStarry Electronics Co LTD: Net Node:16" },
1026
  { 0x2819, "NightStarry Electronics Co LTD: Net Node:8" },
1027
  { 0x281A, "NightStarry Electronics Co LTD: Net Node:4" },
1028
  { 0x281B, "Showtec: Pixel Bubble 80 MKII" },
1029
  { 0x281C, "Colordreamer Technology Co Limited: Titan A16" },
1030
  { 0x281D, "Showtec: White PIX" },
1031
  { 0x281E, "Showtec: Node 1" },
1032
  { 0x281F, "DMT: Pixel Tile P25 MKII" },
1033
  { 0x2820, "DMT: PixelBatten P25 MKII" },
1034
  { 0x2821, "Showtec: Phantom 300 LED Matrix" },
1035
  { 0x2822, "Infinity: iW 1915 Pixel" },
1036
  { 0x2823, "Infinity: iS 400" },
1037
  { 0x2824, "Infinity: iPW 150 LED Sunpanel" },
1038
  { 0x2825, "Infinity: Chimp 300" },
1039
  { 0x2826, "Infinity: Chimp 100" },
1040
  { 0x2827, "Infinity: iM 2515" },
1041
  { 0x2828, "Resolume: Arena" },
1042
  { 0x2829, "LED concept: LED Pixel Director 4" },
1043
  { 0x282A, "LED concept: LED Pixel Director 8" },
1044
  { 0x282B, "DMX4ALL GmbH: DMX4ALL DMXDevice" },
1045
  { 0x282C, "kuwatec Inc: Ex8" },
1046
  { 0x282D, "DMX4ALL GmbH: DMX4ALL SoftwareDevice" },
1047
  { 0x282E, "XING YE DIAN ZI: NS NET ONE" },
1048
  { 0x282F, "XING YE DIAN ZI: NS NET03" },
1049
  { 0x2830, "XING YE DIAN ZI: NS NET02" },
1050
  { 0x2831, "XING YE DIAN ZI: NS NET01" },
1051
  { 0x2832, "ExMachina: Winch Dynamic" },
1052
  { 0x2833, "Schnick Schnack Systems GmbH: DMX Pixel Router" },
1053
  { 0x2834, "Schnick Schnack Systems GmbH: DPB Pixel Router" },
1054
  { 0x2835, "Stage Eyes: Tri Engine" },
1055
  { 0x2836, "Colordreamer Technology Co Limited: Titan AS4" },
1056
  { 0x2837, "Colordreamer Technology Co Limited: Titan A2" },
1057
  { 0x2838, "Colordreamer Technology Co Limited: Titan A4" },
1058
  { 0x2839, "Colordreamer Technology Co Limited: Titan A8" },
1059
  { 0x283A, "eIdea Creative Technology: AuNode" },
1060
  { 0x283B, "LIGHTSKY: IP3000" },
1061
  { 0x283C, "colordreamer: Colordreamer Update Boot" },
1062
  { 0x283D, "Digital Sputnik Lighting Oü: DS Control DMX" },
1063
  { 0x283E, "Colordreamer Technology Co Limited: Titan A8 Pro" },
1064
  { 0x283F, "LED concept: LED PIXEL DIRECTOR 24" },
1065
  { 0x2840, "LED concept: LED PIXEL DIRECTOR 16" },
1066
  { 0x2841, "LED concept: LED PIXEL DIRECTOR 12" },
1067
  { 0x2842, "HMB TEC GmbH: CC512 Pix" },
1068
  { 0x2843, "ROF Electronics: Big Foot IV" },
1069
  { 0x2844, "ROF Electronics: Big Foot II" },
1070
  { 0x2845, "ROF Electronics: TNT" },
1071
  { 0x2846, "ROF Electronics: Multi8verse" },
1072
  { 0x2847, "ROF Electronics: Multi6verse" },
1073
  { 0x2848, "ROF Electronics: Multi2verse" },
1074
  { 0x2849, "AC3 Studio: Kinetic Stepper Interface" },
1075
  { 0x284A, "AYRTON: AyrtonFixtureNode" },
1076
  { 0x284B, "DMLITE: SOLEIL" },
1077
  { 0x284C, "M Light: Mini Display 16" },
1078
  { 0x284D, "LEDsistem Technology LTD: Cloud Drive" },
1079
  { 0x284E, "ROBERT JULIAT: SpotME" },
1080
  { 0x284F, "ROBERT JULIAT: ALICE 1469" },
1081
  { 0x2850, "ROBERT JULIAT: OZ 1169" },
1082
  { 0x2851, "ROBERT JULIAT: DALIS 862" },
1083
  { 0x2852, "ROBERT JULIAT: DALIS 861" },
1084
  { 0x2853, "Chauvet Professional: Epix Drive 2000 IP" },
1085
  { 0x2854, "LIGHTSKY: IP2000" },
1086
  { 0x2855, "SmoothLUX B V: SmoothDMX 128" },
1087
  { 0x2856, "SmoothLUX B V: SmoothDMX 512" },
1088
  { 0x2857, "Big Dipper Laser Science and Technology Co Ltd: BP 440BSW" },
1089
  { 0x2858, "Eurolumen shanghai Lighting Co LTD: s100" },
1090
  { 0x2859, "Total Light: Etherstrip 8" },
1091
  { 0x285A, "Total Light: Ether Dual A" },
1092
  { 0x285B, "Total Light: Ether Dual B" },
1093
  { 0x285C, "Infinity: iW 1240" },
1094
  { 0x285D, "Infinity: iW 740" },
1095
  { 0x285E, "Infinity: iW 340" },
1096
  { 0x285F, "Digital Sputnik Lighting Oü: DSL3" },
1097
  { 0x2860, "Digital Sputnik Lighting Oü: DSL2" },
1098
  { 0x2861, "Visual Productions: IoCore2" },
1099
  { 0x2862, "Visual Productions: TimeCore" },
1100
  { 0x2863, "Bright Sound: Bright Mapper" },
1101
  { 0x2864, "atit no: NorseDMX Wi Fi Node II" },
1102
  { 0x2865, "Tian Hai BeiFang: AMX" },
1103
  { 0x2866, "Starlight: XNET 8" },
1104
  { 0x2867, "Starlight: XNET 4" },
1105
  { 0x2868, "Starlight: XNET 2" },
1106
  { 0x2869, "Xian NovaStar Tech Co Ltd: NOVA DMX11" },
1107
  { 0x286A, "LED concept: SWITCHMAN 2 1" },
1108
  { 0x286B, "LED concept: SWITCHMAN 4 1" },
1109
  { 0x286C, "LED concept: SWITCHMAN 0 4" },
1110
  { 0x286D, "LED concept: SWITCHMAN 3 1" },
1111
  { 0x286E, "LED concept: SWITCHMAN 1 1" },
1112
  { 0x286F, "LED concept: SWITCHMAN 8" },
1113
  { 0x2870, "LED concept: SWITCHMAN 2" },
1114
  { 0x2871, "LED concept: SWITCHMAN 2a" },
1115
  { 0x2872, "LED concept: SWITCHMAN 1" },
1116
  { 0x2873, "LED concept: SWITCHMAN 4" },
1117
  { 0x2874, "PXM: Px724" },
1118
  { 0x2875, "Showtec: Pixel Tube Set 96" },
1119
  { 0x2876, "Showtec: NET 8 3" },
1120
  { 0x2877, "Showtec: NET 8 5" },
1121
  { 0x2878, "Showtec: NET 8 3a" },
1122
  { 0x2879, "Showtec: RT 200" },
1123
  { 0x287A, "OpenLX SP Ltd: EasyDMX" },
1124
  { 0x287B, "Signblazer Ltd: SopraText" },
1125
  { 0x287C, "Sam light: Forte 150" },
1126
  { 0x287D, "Yarilo Pro: LANdmx4" },
1127
  { 0x287E, "Key Delfin: WI Net 1" },
1128
  { 0x287F, "Key Delfin: RJ Net 1" },
1129
  { 0x2880, "Illum Technology LLC: Xstream" },
1130
  { 0x2881, "Jjj: Bou" },
1131
  { 0x2882, "GIP Innovation Tools: LIGEO Gateway" },
1132
  { 0x2883, "EastSun Technology CO Ltd: NET4D01" },
1133
  { 0x2884, "EastSun Technology CO Ltd: NET1D01" },
1134
  { 0x2885, "Amptown System Company: ControLite VIGOR DINRail Switch" },
1135
  { 0x2886, "Elation Professional: 4 Cast DMX Bridge" },
1136
  { 0x2887, "WLPS: Remote FollowSpot" },
1137
  { 0x2888, "ADDiCTiON bOx: FrEEdOsE WLaN" },
1138
  { 0x2889, "ADDiCTiON bOx: FuLLdOsE 8 Port" },
1139
  { 0x288A, "ADDiCTiON bOx: TrUssdOsE 4 Port" },
1140
  { 0x288B, "ADDiCTiON bOx: HaLFdOsE 4 Port" },
1141
  { 0x288C, "ADDiCTiON bOx: HaLFdOsE 8 Port" },
1142
  { 0x288D, "Kontrolcla Show Control S L: Rdm assistant" },
1143
  { 0x288E, "Integrated System Technologies Limited: Thor 8" },
1144
  { 0x288F, "Integrated System Technologies Limited: Thor8" },
1145
  { 0x2890, "Yarilo Pro: LANdmx2" },
1146
  { 0x2891, "HMB TEC GmbH: RR512" },
1147
  { 0x2892, "HMB TEC GmbH: CC512" },
1148
  { 0x2893, "ElectroTAS: TH 8U" },
1149
  { 0x2894, "ElectroTAS: TH 6U" },
1150
  { 0x2895, "electroTAS: TH 4U" },
1151
  { 0x2896, "ElectroTAS: TH 2U" },
1152
  { 0x2897, "ElectroTAS: TH 1U" },
1153
  { 0x2898, "showjockey: SJ DMX E16" },
1154
  { 0x2899, "Qdot Lighting Limited: QNET 16W" },
1155
  { 0x289A, "Qdot Lighting Limited: QNET 8W" },
1156
  { 0x289B, "Qdot Lighting Limited: QNET 2048" },
1157
  { 0x289C, "Qdot Lighting Limited: QNET 1024" },
1158
  { 0x289D, "Chauvet Professional: NET X 2 0" },
1159
  { 0x289E, "Elation Lighting: eNode 2 POE" },
1160
  { 0x289F, "LEON: LEONGRECO" },
1161
  { 0x28A0, "ElectroTAS: TH AIO" },
1162
  { 0x28A1, "AK LIGHT: DMX 4" },
1163
  { 0x28A2, "LIGHTSKY: DMX BOX" },
1164
  { 0x28A3, "CLAYPAKY: SCENIUS UNICO" },
1165
  { 0x28A4, "AB DMX: A512 node" },
1166
  { 0x28A5, "NuDelta Digital: LogiCue" },
1167
  { 0x28A6, "iColor Led Shenzhen Co Ltd: SC1712" },
1168
  { 0x28A7, "iColor Led Shenzhen Co Ltd: SC1711" },
1169
  { 0x28A8, "Elation Professional: Show Designer" },
1170
  { 0x28A9, "UNT: SLNS" },
1171
  { 0x28AA, "X Laser: Mercury" },
1172
  { 0x28AB, "LuxCena Iumina: LuxCena WiFi DMX" },
1173
  { 0x28AC, "BRITEQ: BT NODE24" },
1174
  { 0x28AD, "TLS INTERNATIONAL: TLS DIGITAL PIXEL CONTROLLER" },
1175
  { 0x28AE, "Apollo Security: ENI 110" },
1176
  { 0x28AF, "Showtacle Ltd: SPI Matrix" },
1177
  { 0x28B0, "Showtacle Ltd: LEC3" },
1178
  { 0x28B1, "Argent Data Systems Inc: Hyperion Hoop" },
1179
  { 0x28B2, "EQUIPSON S A: LS Core" },
1180
  { 0x28B3, "CLAYPAKY: AXCOR SPOT HPE 300" },
1181
  { 0x28B4, "EQUIPSON S A: WORK LS 1" },
1182
  { 0x28B5, "CLAYPAKY: AXCOR WASH 300" },
1183
  { 0x28B6, "CLAYPAKY: AXCOR BEAM 300" },
1184
  { 0x28B7, "CLAYPAKY: ALEDA K EYE K20 HCR" },
1185
  { 0x28B8, "CLAYPAKY: ALEDA K EYE K10 HCR" },
1186
  { 0x28B9, "CLAYPAKY: AXCOR PROFILE 900 3K" },
1187
  { 0x28BA, "CLAYPAKY: AXCOR PROFILE 900 6K" },
1188
  { 0x28BB, "CLAYPAKY: AXCOR PROFILE 900 8K" },
1189
  { 0x28BC, "LIGHTSKY: LED0760" },
1190
  { 0x28BD, "LIGHTSKY: LED0960" },
1191
  { 0x28BE, "Elation Lighting: Pixel Driver 4000" },
1192
  { 0x28BF, "Voidcorp: VirtualPanel" },
1193
  { 0x28C0, "AUTOLUX Handels und ProduktionsgmbH: ALX MEDIAWALL" },
1194
  { 0x28C1, "Swisson AG: XND 8" },
1195
  { 0x28C2, "LumenRadio: ARRI Skylink Base Station" },
1196
  { 0x28C3, "Cameo: EVOS W7" },
1197
  { 0x28C4, "Cameo: EVOS S3" },
1198
  { 0x28C5, "Infinity: TF 300 Fresnel" },
1199
  { 0x28C6, "Infinity: TS 200C7 Profile" },
1200
  { 0x28C7, "Infinity: TS 300 Profile" },
1201
  { 0x28C8, "Infinity: TS 150 Profile" },
1202
  { 0x28C9, "Illum Technology LLC: XStream" },
1203
  { 0x28CA, "Biamino and Figli S p A: BIALEDA01" },
1204
  { 0x28CB, "Shenzhen Yuming Vision Technology Co Ltd: YM RX803" },
1205
  { 0x28CC, "ADJ Products: Par Z100 5K" },
1206
  { 0x28CD, "ADJ Products: Par Z100 3K" },
1207
  { 0x28CE, "ADJ Products: VIZI CMY 300" },
1208
  { 0x28CF, "Stage Team: MagicNode" },
1209
  { 0x28D0, "GLP German Light Products GmbH: Impression S350" },
1210
  { 0x28D1, "CLAYPAKY: K EYE S10 HCR" },
1211
  { 0x28D2, "CLAYPAKY: K EYE S20 HCR" },
1212
  { 0x28D3, "Steinigke Showtechnic GmbH: Sunbar 10" },
1213
  { 0x28D4, "ERAL s r l: Paseo Pixel Box Controller" },
1214
  { 0x28D5, "Savant Systems LLC: SmartDMX" },
1215
  { 0x28D6, "BOOQlight BV: WiFi DMX RDM Module" },
1216
  { 0x28D7, "Dynamic Projection Institute Herstellungs und Vertriebs GmbH: JCD" },
1217
  { 0x28D8, "Conceptinectics Technologies and Consultancy Limited: CTC NEXT" },
1218
  { 0x28D9, "Conceptinetics Technologies and Consultancy Limited: CTC MUFIC" },
1219
  { 0x28DA, "Elation Lighting: Eclipse" },
1220
  { 0x28DB, "Jumptronic GmbH: ProtocolController" },
1221
  { 0x28DC, "Acme: Acme LED" },
1222
  { 0x28DD, "Acme: Acme LS" },
1223
  { 0x28DE, "Acme: Acme MP" },
1224
  { 0x28DF, "Acme: Acme CM" },
1225
  { 0x28E0, "Acme: Acme TS" },
1226
  { 0x28E1, "Acme: Acme XA" },
1227
  { 0x28E2, "Acme: Acme XP" },
1228
  { 0x28E3, "Acme: CM S6" },
1229
  { 0x28E4, "Acme: XP 1000FS" },
1230
  { 0x28E5, "Acme: XP 1000SZF" },
1231
  { 0x28E6, "Acme: XP 5000NF" },
1232
  { 0x28E7, "Acme: XP 5000WZ" },
1233
  { 0x28E8, "Acme: TS 150M WW CW" },
1234
  { 0x28E9, "Acme: TS 150 WW CW" },
1235
  { 0x28EA, "Acme: TS 300 WW CW" },
1236
  { 0x28EB, "Acme: TS 300 WW C" },
1237
  { 0x28EC, "Acme: TS 300M WW CW" },
1238
  { 0x28ED, "Acme: LED MTX36 HEX" },
1239
  { 0x28EE, "Acme: LED MTX36" },
1240
  { 0x28EF, "Acme: LP F2000" },
1241
  { 0x28F0, "Acme: LP F1000" },
1242
  { 0x28F1, "Acme: XP 1000WZ" },
1243
  { 0x28F2, "Music Lights S R L: DIAMOND37" },
1244
  { 0x28F3, "Music Lights S R L: STARK1000" },
1245
  { 0x28F4, "Steinigke Showtechnic GmbH: EYE 37" },
1246
  { 0x28F5, "Acme: TB 1230QW" },
1247
  { 0x28F6, "ABLELITE INTERNATIONAL: EVA3715Z" },
1248
  { 0x28F7, "ADJ PRODUCTS: VIZI WASH PRO" },
1249
  { 0x28F8, "Vsevolod Kozlov: Show Box" },
1250
  { 0x28F9, "Tom Bland: Q SYS Plugin" },
1251
  { 0x28FA, "Kinescope: Bridge" },
1252
  { 0x28FB, "SLS: atmani" },
1253
  { 0x28FC, "Daniel Large: STATIS" },
1254
  { 0x28FD, "Douglas Heriot: DMX Assistant" },
1255
  { 0x28FE, "Douglas Heriot: Diode Control" },
1256
  { 0x28FF, "ADJ PRODUCTS: ENCORE BURST 200b" },
1257
  { 0x2900, "Integrated System Technologies Ltd: Quattro CVL" },
1258
  { 0x2901, "Integrated System Technologies Ltd: iDrive Thor 4" },
1259
  { 0x2902, "Jata Tech Ltd: FX Engine" },
1260
  { 0x2903, "Integrated System Technologies Ltd: iDrive White knight 24" },
1261
  { 0x2904, "Integrated System Technologies Ltd: iDrive White knight 48" },
1262
  { 0x2905, "X Laser: Skywriter HPX M 20" },
1263
  { 0x2906, "X Laser: Skywriter HPX M 10" },
1264
  { 0x2907, "X Laser: Skywriter HPX M 5" },
1265
  { 0x2908, "margau: dmxnet" },
1266
  { 0x2909, "feno GmbH: fe stile 1312 LED Matrix" },
1267
  { 0x290A, "Steinigke Showtechnic GmbH: Stage Pixel Bar 10 WW" },
1268
  { 0x290B, "ADJ Products: Encore Burst 200" },
1269
  { 0x290C, "Key Lab: BlackTrax Extender" },
1270
  { 0x290D, "DJSI SCHINSTAD: Northern Star Polaris v1 5" },
1271
  { 0x290E, "ADB STAGELIGHT: LEXPERT FRESNEL M WW" },
1272
  { 0x290F, "ADB STAGELIGHT: LEXPERT FRESNEL M CW" },
1273
  { 0x2910, "ADB STAGELIGHT: LEXPERT PROFILE L WW" },
1274
  { 0x2911, "ADB STAGELIGHT: LEXPERT PROFILE L CW" },
1275
  { 0x2912, "ADB STAGELIGHT: LEXPERT PROFILE L" },
1276
  { 0x2913, "ChengDuChenyuDianZiKeji: DMX2048CH PRO1" },
1277
  { 0x2914, "ChengDuChenyuDianZiKeji: DMX2048CH PRO2" },
1278
  { 0x2915, "MLBA Team: Stagehand Live" },
1279
  { 0x2916, "Acme: XA 1000F" },
1280
  { 0x2917, "xuri: xur" },
1281
  { 0x2918, "Infinity: FURION S601 PROFILE" },
1282
  { 0x2919, "Infinity: FURION S401 SPOT" },
1283
  { 0x291A, "Infinity: FURION S201 SPOT" },
1284
  { 0x291B, "Steinigke Showtechnic GmbH: DMX AIO" },
1285
  { 0x291C, "HYCL: DMX_SYNC" },
1286
  { 0x291D, "HYCL: DMX_Player_32" },
1287
  { 0x291E, "HYCL: DMX_Player_16" },
1288
  { 0x291F, "HYCL: DMX_Player_8" },
1289
  { 0x2920, "HYCL: DMX_Player_1" },
1290
  { 0x2921, "HYCL: DMX_Player_4" },
1291
  { 0x2922, "ainetauto: LJ" },
1292
  { 0x2923, "ADJ Products: Par Z100 RGBW" },
1293
  { 0x2924, "LEDBLADE: Creon HD" },
1294
  { 0x2925, "Guangzhou Chaoran Computer Co Ltd: EtherNode8" },
1295
  { 0x2926, "German Light Products GmbH: impression E350" },
1296
  { 0x2927, "Arrigo Lighting: AL A4RGB" },
1297
  { 0x2928, "Rosstech Signals: Smart16" },
1298
  { 0x2929, "Arrigo Lighting: Arrigo Lighting Liberty 22" },
1299
  { 0x292A, "Matthias Bauch Software: LiveLight" },
1300
  { 0x292B, "JB Lighting Lichtanlagentechnik GmbH: JB LightingFixtureNode" },
1301
  { 0x292C, "Bandhaus Straubing eV: Wireless2DMX Bridge" },
1302
  { 0x292D, "ETC Audiovisuel: OnlyView" },
1303
  { 0x292E, "RGBlink: TTWO" },
1304
  { 0x292F, "RGBlink: TONE" },
1305
  { 0x2930, "RGBlink: FLEX 256" },
1306
  { 0x2931, "RGBlink: FLEX 128" },
1307
  { 0x2932, "RGBlink: FLEX 64" },
1308
  { 0x2933, "RGBlink: FLEX 32" },
1309
  { 0x2934, "RGBlink: FLEX 16" },
1310
  { 0x2935, "RGBlink: FLEX 8" },
1311
  { 0x2936, "RGBlink: FLEX RS1" },
1312
  { 0x2937, "RGBlink: FLEX 4" },
1313
  { 0x2938, "ADJ Products: Flash Kling Strip" },
1314
  { 0x2939, "ADJ Products: Flash Kling Batten" },
1315
  { 0x293A, "Elation Lighting: EZ Kling" },
1316
  { 0x293B, "Qdot Lighting Limited: QNET APP" },
1317
  { 0x293C, "X Laser: Mobile Beat Mercury" },
1318
  { 0x293D, "X Laser: Skywriter HPX M_2" },
1319
  { 0x293E, "dbnetsoft: VirtualDmxLib" },
1320
  { 0x293F, "JCSKJ: JC_Controller_X" },
1321
  { 0x2940, "ADB STAGELIGHT: KLEMANTIS AS500" },
1322
  { 0x2941, "ADB STAGELIGHT: KLEMANTIS AS1000" },
1323
  { 0x2942, "CLAYPAKY: AXCOR SPOT 400 HC" },
1324
  { 0x2943, "CLAYPAKY: AXCOR SPOT 400" },
1325
  { 0x2944, "CLAYPAKY: AXCOR PROFILE 400 HC" },
1326
  { 0x2945, "CLAYPAKY: AXCOR PROFILE 400" },
1327
  { 0x2946, "CLAYPAKY: AXCOR PROFILE 600 HC" },
1328
  { 0x2947, "CLAYPAKY: AXCOR PROFILE 600" },
1329
  { 0x2948, "Luminxa: Luminxa1" },
1330
  { 0x2949, "Luminxa: Luminxa2" },
1331
  { 0x294A, "audioligh: HD217 1" },
1332
  { 0x294B, "audioligh: HD217 2" },
1333
  { 0x294C, "KWMATIK: PROMYK v1 0" },
1334
  { 0x294D, "Rnet Lighting technology limited: R NET DMX Rack" },
1335
  { 0x294E, "Astera LED Technology GmbH: 10way Titan Powersupply" },
1336
  { 0x294F, "Buehler electronic GmbH LSdigital: DMX Light Interface" },
1337
  { 0x2950, "atomica peru: arri skypanel" },
1338
  { 0x2951, "GIP Innovation Tools GmbH: LIGEO SL WiFi" },
1339
  { 0x2952, "Rethink DMX: node1" },
1340
  { 0x2953, "Elation Lighting: CUEPIX PANEL" },
1341
  { 0x2954, "Elation Lighting: SIXBAR 1000" },
1342
  { 0x2955, "Elation Lighting: SEVEN BATTEN 72" },
1343
  { 0x2956, "Hera Led: Hera Ether Node4" },
1344
  { 0x2957, "Chauvet Professional: Rogue R1 FXB" },
1345
  { 0x2958, "Chauvet Professional: Maverick MK 1 Hybrid" },
1346
  { 0x2959, "Chauvet Professional: Maverick MK Pyxis" },
1347
  { 0x295A, "Chauvet Professional: Maverick MK2 Profile" },
1348
  { 0x295B, "Chauvet Professional: Maverick MK3 Wash" },
1349
  { 0x295C, "Chauvet Professional: Maverick MK2 Wash" },
1350
  { 0x295D, "Chauvet Professional: Maverick MK1 Spot" },
1351
  { 0x295E, "SSG Technology Ltd: SD980 AN" },
1352
  { 0x295F, "LKE Lasershow: Frequency Unit" },
1353
  { 0x2960, "JUAN FRANCISCO CAMPOS SAA: BM LIGHTS 1 UNIVERSE" },
1354
  { 0x2961, "Zboxes Intelligent Technology Shanghai Co Ltd: Zboxes 8" },
1355
  { 0x2962, "Guangzhou Ming Jing Stage Light: King Kong Controller" },
1356
  { 0x2963, "Fiberli: Node8X" },
1357
  { 0x2964, "GLP German Light Products GmbH: KNV Arc" },
1358
  { 0x2965, "GLP German Light Products GmbH: KNV Cube" },
1359
  { 0x2966, "SmartShow UK: NetTWIN" },
1360
  { 0x2967, "SmartShow UK: AirDMXout" },
1361
  { 0x2968, "SmartShow UK: AirPixel Quad" },
1362
  { 0x2969, "SmartShow UK: AirPixel Mini" },
1363
  { 0x296A, "SmartShow UK: AirPixel Micro" },
1364
  { 0x296B, "SmartShow UK: NetPixel Quad" },
1365
  { 0x296C, "SmartShow UK: NetWS 2040" },
1366
  { 0x296D, "SmartShow UK: NetWS 340" },
1367
  { 0x296E, "SmartShow UK: NetBuddy" },
1368
  { 0x296F, "SmartShow UK: NetDMX" },
1369
  { 0x2970, "Pulsar: Node1" },
1370
  { 0x2971, "PXM: Px760" },
1371
  { 0x2972, "PXM: Px314" },
1372
  { 0x2973, "Ambion Gmbh Ambrain: Flex Led Gate" },
1373
  { 0x2974, "Guangzhou ChaiYi Light CO Ltd: DMXGate" },
1374
  { 0x2975, "Digital Projection: Titan Laser Projector" },
1375
  { 0x2976, "CLAYPAKY: ALEDA BEAM 200" },
1376
  { 0x2977, "CLAYPAKY: SHARPY PLUS" },
1377
  { 0x2978, "Chauvet Professional: Epix Flex Drive" },
1378
  { 0x2979, "Arrigo Lighting: AL WS2812B" },
1379
  { 0x297A, "Roleds: RTG180" },
1380
  { 0x297B, "Audiowerk: LC1" },
1381
  { 0x297C, "NOVA: LED" },
1382
  { 0x297D, "Martin: MAC Allure Profile" },
1383
  { 0x297E, "Lifetime Music Academy: Light SPECTRUM" },
1384
  { 0x297F, "City Theatrical: Multiverse Gateway" },
1385
  { 0x2980, "City Theatrical: Multiverse Transmitter" },
1386
  { 0x2981, "Rosstech Signals: MatrixView" },
1387
  { 0x2982, "CLAYPAKY: AXCOR PROFILE 900 6K LN" },
1388
  { 0x2983, "CLAYPAKY: AXCOR PROFILE 900 8K LN" },
1389
  { 0x2984, "CLAYPAKY: HY_B EYE K25" },
1390
  { 0x2985, "CLAYPAKY: HY_B EYE K15" },
1391
  { 0x2986, "D5 systems: Lighting Network Toolset" },
1392
  { 0x2987, "ADB STAGELIGHT: OKSALIS FL20" },
1393
  { 0x2988, "ADB STAGELIGHT: OKSALIS FL10" },
1394
  { 0x2989, "CLAYPAKY: AXCOR WASH 600 HC" },
1395
  { 0x298A, "CLAYPAKY: AXCOR WASH 600" },
1396
  { 0x298B, "CLAYPAKY: AXCOR PROFILE 600 HC ST" },
1397
  { 0x298C, "CLAYPAKY: AXCOR PROFILE 600 ST" },
1398
  { 0x298D, "atmosphere media gmbH: atmosphere media player" },
1399
  { 0x298E, "DTS Illuminazione srl: DRIVENET 1664" },
1400
  { 0x298F, "DTS Illuminazione srl: DRIVENET 416 POWER" },
1401
  { 0x2990, "DTS Illuminazione srl: DRIVENET 416" },
1402
  { 0x2991, "DTS Illuminazione srl: DRIVENET 832 POWER" },
1403
  { 0x2992, "DTS Illuminazione srl: DRIVENET 832" },
1404
  { 0x2993, "DTS Illuminazione srl: SYNERGY 5 SPOT" },
1405
  { 0x2994, "DTS Illuminazione srl: SYNERGY 5 PROFILE" },
1406
  { 0x2995, "Guangzhou JinZhiHui Electronic Technology Co: TOP 1440 LED RGB STROBE" },
1407
  { 0x2996, "Creative Lighting: eDIDIO 8 pole" },
1408
  { 0x2997, "Creative Lighting: eDIDIO 4 pole" },
1409
  { 0x2998, "ADB STAGELIGHT: ORKIS FOCUS SPOT" },
1410
  { 0x2999, "Waves System: Event Video Player" },
1411
  { 0x299A, "SQD lighting Co Limited: LED lighting fixtures series" },
1412
  { 0x299B, "BSL BV: Epikon" },
1413
  { 0x299C, "Shenzhen Lei Fei Lighting Technology Co Ltd: LiteMeta Controller 2" },
1414
  { 0x299D, "Shenzhen Lei Fei Lighting Technology Co Ltd: LiteMeta Controller 16" },
1415
  { 0x299E, "Shenzhen Lei Fei Lighting Technology Co Ltd: LiteMeta Controller 8" },
1416
  { 0x299F, "Pulsar: Luxinode" },
1417
  { 0x29A0, "Integrated System Technology Ltd: White Knight 24 Emergency" },
1418
  { 0x29A1, "Integrated System Technology Ltd: White Knight 36_1600" },
1419
  { 0x29A2, "EMP Designs Ltd: EMP1" },
1420
  { 0x29A3, "MCINTIRE ENTERPRISES INC: 24 CH Dimmer" },
1421
  { 0x29A4, "AMOLVIN: DMX NODE" },
1422
  { 0x29A5, "Guangzhou HuaYong Intelligent Technology Co Ltd: HuaYong Controller" },
1423
  { 0x29A6, "Philips Controller 32: Signify China Investment Co Ltd" },
1424
  { 0x29A7, "Signify Investment Co Ltd: Philips Controller 24" },
1425
  { 0x29A8, "Signify Investment Co Ltd: Philips Controller 16" },
1426
  { 0x29A9, "Signify Investment Co Ltd: Philips Controller 8" },
1427
  { 0x29AA, "Signify Investment Co Ltd: Philips Controller 2" },
1428
  { 0x29AB, "ER Productions: ER Display V1" },
1429
  { 0x29AC, "Shenzhen Leifei Lighting Technology Co Ltd: LiteMeta Controller 32" },
1430
  { 0x29AD, "Impolux GmbH: ULTIM8 ST16 O" },
1431
  { 0x29AE, "Martin Professional: MAC Allure Wash PC" },
1432
  { 0x29AF, "Shenzhen Leifei Lighting Technology Co Ltd: LiteMeta Controller 24" },
1433
  { 0x29B0, "Guangzhou ChaiYi Light CO Ltd: TEKMAND Node" },
1434
  { 0x29B1, "Alex Sagias: PixLed" },
1435
  { 0x29B2, "GLP German Light Products GmbH: Highlander" },
1436
  { 0x29B3, "Edelmann Electronics: Enigma2Kxx" },
1437
  { 0x29B4, "PR LIGHTING LTD: PR Lighting 1" },
1438
  { 0x29B5, "Wiktor Kaluzny: DMX BOX" },
1439
  { 0x29B6, "GLP German Light Products GmbH: Impression W350" },
1440
  { 0x29B7, "nox multimedia GmbH: NAN 8" },
1441
  { 0x29B8, "ON LX Limited: Ctrl" },
1442
  { 0x29B9, "HYCL: DMX Player Super 4" },
1443
  { 0x29BA, "HYCL: DMX Player Super 8" },
1444
  { 0x29BB, "HYCL: DMX Player Super 16" },
1445
  { 0x29BC, "Guangzhou ChaiYi Light CO Ltd: TEKMAND Node 4P OD" },
1446
  { 0x29BD, "Guangzhou ChaiYi Light CO Ltd: TEKMAND Node 8P" },
1447
  { 0x29BE, "Guangzhou ChaiYi Light CO Ltd: TEKMAND Node 4P" },
1448
  { 0x29BF, "HYCL: dmx player 512" },
1449
  { 0x29C0, "HYCL: dmx player 256" },
1450
  { 0x29C1, "HYCL: dmx player 64" },
1451
  { 0x29C2, "HYCL: dmx player 2" },
1452
  { 0x29C3, "PR LIGHTING LTD: PR Lighting 2" },
1453
  { 0x29C4, "Spacelights: spacenet1i" },
1454
  { 0x29C5, "Spacelights: spacenet2o" },
1455
  { 0x29C6, "Event Imagineering Group: ShowKontrol" },
1456
  { 0x29C7, "Brink Ventures LLC: Blackout Lighting Console" },
1457
  { 0x29C8, "Integrated System Technology Ltd: White Knight 48 DC" },
1458
  { 0x29C9, "Integrated System Technology Ltd: White Knight 24 DC" },
1459
  { 0x29CA, "Integrated System Technology Ltd: Thor16 Silent 500W" },
1460
  { 0x29CB, "Integrated System Technology Ltd: White Knight 24 Silent 500W" },
1461
  { 0x29CC, "THELIGHT Luminary for Cine and TV SL: EVO 2x2 STUDIO" },
1462
  { 0x29CD, "THELIGHT Luminary for Cine and TV SL: EVO 2x2 WEATHERPROOF" },
1463
  { 0x29CE, "THELIGHT Luminary for Cine and TV SL: EVO 2 STUDIO" },
1464
  { 0x29CF, "THELIGHT Luminary for Cine and TV SL: EVO 2 WEATHERPROOF" },
1465
  { 0x29D0, "THELIGHT Luminary for Cine and TV SL: EVO 1 STUDIO" },
1466
  { 0x29D1, "THELIGHT Luminary for Cine and TV SL: EVO 1 WEATHERPROOF" },
1467
  { 0x29D2, "Exacta: CCL PC" },
1468
  { 0x29D3, "Light Converse Ltd: LIGHTCONVERSE TOOLS" },
1469
  { 0x29D4, "Lumos Design: Lumos Node 4" },
1470
  { 0x29D5, "CLAYPAKY: XTYLOS" },
1471
  { 0x29D6, "SZe Schneider Zirr engineering GmbH: CF Player A FullHD2 0" },
1472
  { 0x29D7, "VL software: Arthur Maxi" },
1473
  { 0x29D8, "eX Systems: RGB Floodlight" },
1474
  { 0x29D9, "DCLX Ltd: Pixel Sabre" },
1475
  { 0x29DA, "HDL: DMXNode8" },
1476
  { 0x29DB, "Luminex Lighting Control Equipment: LumiNode 12" },
1477
  { 0x29DC, "Luminex Lighting Control Equipment: LumiNode 4" },
1478
  { 0x29DD, "Luminex Lighting Control Equipment: LumiNode 2" },
1479
  { 0x29DE, "Luminex lighting Control Equipment: LumiNode 1" },
1480
  { 0x29DF, "MaNiMa Technologies BV: MaNiMa LED interface" },
1481
  { 0x29E0, "xinqidian: ganelight" },
1482
  { 0x29E1, "LIGHTLINE Lasertechnik GmbH: Laserlink" },
1483
  { 0x29E2, "HYCL: BootLoader" },
1484
  { 0x29E3, "Disguise: Disguise Production Toolkit" },
1485
  { 0x29E4, "Equivalent: LSEthernetToDMX" },
1486
  { 0x29E5, "Equivalent: EtherConDMX8" },
1487
  { 0x29E6, "Equivalent: LSDW_2435E" },
1488
  { 0x29E7, "Equivalent: LSDR 123E" },
1489
  { 0x29E8, "Equivalent: LSDR 65E" },
1490
  { 0x29E9, "Chauvet Lighting: Ovation B 1965FC" },
1491
  { 0x29EA, "Chauvet Lighting: Ovation B 1965FC" },
1492
  { 0x29EB, "WangMing: WangMing" },
1493
  { 0x29EC, "ADJ PRODUCTS: ALLEGRO Z6" },
1494
  { 0x29ED, "EQUIPSON S A: LSNODE4" },
1495
  { 0x29EE, "EQUIPSON S A: LSNODE2" },
1496
  { 0x29EF, "EQUIPSON S A: LSNODE1" },
1497
  { 0x29F0, "Chauvet Professional: Maverick MK3 Profile CX" },
1498
  { 0x29F1, "Chauvet Professional: Maverick MK3 Spot" },
1499
  { 0x29F2, "Chauvet Professional: Maverick MK3 Profile" },
1500
  { 0x29F3, "Chauvet Professional: Colorado Solo Batten 4" },
1501
  { 0x29F4, "Chauvet Professional: Colorado Solo Batten" },
1502
  { 0x29F5, "Light Converse Ltd: LIGTHCONVERSE TOOLS" },
1503
  { 0x29F6, "DP Lumi: DP Lumi Pro" },
1504
  { 0x29F7, "Martin Professional: VDO Atomic Dot WRM" },
1505
  { 0x29F8, "Martin Professional: VDO Atomic Dot CLD" },
1506
  { 0x29F9, "GLP German Light Products GmbH: KNV PSU" },
1507
  { 0x29FA, "GLP German Light Products GmbH: Impression FR10 Bar" },
1508
  { 0x29FB, "Guangzhou ChaiYi Light CO Ltd: Replay Server" },
1509
  { 0x29FC, "DTS Illuminazione srl: Alchemy5" },
1510
  { 0x29FD, "Vibesta BV: RTX1" },
1511
  { 0x29FE, "Echoic Tech LLC: Mach1 LED Controller" },
1512
  { 0x29FF, "GuangZhou Ming jing stage lighting equipment co LTD: KingKongBaton" },
1513
  { 0x2A00, "Blue Ridge Concepts Inc: EladniDesktop" },
1514
  { 0x2A01, "DTS Illuminazione srl: Alchemy3" },
1515
  { 0x2A02, "Crew Light: VController" },
1516
  { 0x2A03, "KappaStyle Productions: KappaNode2" },
1517
  { 0x2A04, "Blinkinlabs: SuperSweet" },
1518
  { 0x2A05, "Coretronic Corporation: Projector" },
1519
  { 0x2A06, "Guangzhou ChaiYi Light CO Ltd: General Purpose Device" },
1520
  { 0x2A07, "Sharp NEC Display Solutions LTD: Projector" },
1521
  { 0x2A08, "Sharp NEC Display Solutions LTD: Flat Panel Display" },
1522
  { 0x2A09, "WA Benjamin: PMP Power Metering Panel" },
1523
  { 0x2A0A, "HYCL: IOT Update" },
1524
  { 0x2A0B, "HYCL: RDM Player 1" },
1525
  { 0x2A0C, "HYCL: RDM Player 2" },
1526
  { 0x2A0D, "HYCL: RDM Player 4" },
1527
  { 0x2A0E, "HYCL: RDM Player 8" },
1528
  { 0x2A0F, "Elation Lighting: Pixel Driver 1000IP" },
1529
  { 0x2A10, "Integrated System Technology Ltd: White Knight 12" },
1530
  { 0x2A11, "Sigma Net: BlueDMX" },
1531
  { 0x2A12, "BonKon: DMX Link Pro1" },
1532
  { 0x2A13, "VANRAY: DMX LINK PRO" },
1533
  { 0x2A14, "Chauvet Professional: Maverick Silens 2 Profile" },
1534
  { 0x2A15, "Fiberli: Node4X" },
1535
  { 0x2A16, "Ocular BVBA: Ocularium" },
1536
  { 0x2A17, "Showtacle Ltd: THE UPGRADE" },
1537
  { 0x2A18, "Showtacle Ltd: Moncha2" },
1538
  { 0x2A19, "zhsj: Video control" },
1539
  { 0x2A1A, "Archon: Archon Dev" },
1540
  { 0x2A1B, "Tristan Leonid Zoltan Thiltges: Lightsculptures" },
1541
  { 0x2A1C, "Elation Lighting: RDM 6XL" },
1542
  { 0x2A1D, "Elation Lighting: RDM 645" },
1543
  { 0x2A1E, "Elation Lighting: RDM 10" },
1544
  { 0x2A1F, "Elation Lighting: EP4" },
1545
  { 0x2A20, "Elation Lighting: EN4" },
1546
  { 0x2A21, "Elation Lighting: EN12" },
1547
  { 0x2A22, "Kyle Hensel: Node js API" },
1548
  { 0x2A23, "Showart: DMXrecorder" },
1549
  { 0x2A24, "ON LX Limited: CommsKit" },
1550
  { 0x2A25, "Guangzhou ChaiYi Light CO Ltd: Air Gate" },
1551
  { 0x2A26, "SmartShow UK: NetPixel ONE" },
1552
  { 0x2A27, "SmartShow UK: AirPixel ONE" },
1553
  { 0x2A28, "Pixout SIA: Pixout Controller" },
1554
  { 0x2A29, "Steinigke Showtechnic GmbH: EYE 740" },
1555
  { 0x2A2A, "ADJ Group: Pixie Driver 2K" },
1556
  { 0x2A2B, "Belayingpin com: BPC Video Server" },
1557
  { 0x2A2C, "Lucenti: Blackwave PixlDrive" },
1558
  { 0x2A2D, "Integrated System Technologies: iDrive Workshop" },
1559
  { 0x2A2E, "R S Schwarze Elektrotechnik Moderne Industrieelektronik GmbH: SG 4" },
1560
  { 0x2A2F, "Sigma Net: Light Magic" },
1561
  { 0x2A30, "Paulo Macedo: WIFIpixel" },
1562
  { 0x2A31, "DATALED: DATALED NET" },
1563
  { 0x2A32, "ADB STAGELIGHT: ORKIS PROFILE M" },
1564
  { 0x2A33, "CLAYPAKY: REFLECTXION" },
1565
  { 0x2A34, "Offstage Controls: Unlicensed OCPE" },
1566
  { 0x2A35, "PXM: Px786" },
1567
  { 0x2A36, "PXM: Px785" },
1568
  { 0x2A37, "Suga koubou Co Ltd: DMX Recorder" },
1569
  { 0x2A38, "CLAYPAKY: ALQIMYA" },
1570
  { 0x2A39, "Offstage Controls: Kilo Gate I" },
1571
  { 0x2A3A, "Offstage Controls: Kilo Gate O" },
1572
  { 0x2A3B, "Offstage Controls: Kilo Gate IO" },
1573
  { 0x2A3C, "JAH Audio Corp: JAH 8 Port Node" },
1574
  { 0x2A3D, "JAH Audio Corp: JAH Lighting Engine" },
1575
  { 0x2A3E, "ADJ Products: TrussHub U1" },
1576
  { 0x2A3F, "Integrated System Technologies: Sentinel 24" },
1577
  { 0x2A40, "BSL BV: PowerNode 8" },
1578
  { 0x2A41, "BSL BV: Node 2" },
1579
  { 0x2A42, "DTS Illuminazione srl: SYNERGY 7 PROFILE" },
1580
  { 0x2A43, "DTS Illuminazione srl: ALCHEMY 7" },
1581
  { 0x2A44, "LaserNet: LiveFeedback" },
1582
  { 0x2A45, "Focus Technologies BV: Focus3D" },
1583
  { 0x2A46, "Exalux: Connect Plus" },
1584
  { 0x2A47, "Bafa Elektronik ve Isik Tasarimlari Sanayii Ticaret Sti: Zerolight16" },
1585
  { 0x2A48, "Fiberli: Node2X" },
1586
  { 0x2A49, "WizzuLED: Matrix LED Modules" },
1587
  { 0x2A4A, "Kifo: Kifo Lightcontroller" },
1588
  { 0x2A4B, "Digital Projection: Digital Projection Projector" },
1589
  { 0x2A4C, "tx: plamp1" },
1590
  { 0x2A4D, "tx: plamp2" },
1591
  { 0x2A4E, "tongxinkeji: plamp3" },
1592
  { 0x2A4F, "Kloeckner EDV Service BK Tec Audio: Audiostack" },
1593
  { 0x2A50, "kuwatec Inc: Valencia" },
1594
  { 0x2A51, "Luxeos Luminaires Ltd: Luxnode" },
1595
  { 0x2A52, "ADJ PRODUCTS: HYDRO WASH X19" },
1596
  { 0x2A53, "guangzhou hongcai stage equipment co ltd: x7 coupe" },
1597
  { 0x2A54, "Zinc Event Production Ltd: Wireless LED controller" },
1598
  { 0x2A55, "CLAYPAKY: HY B EYE K25 TEATRO" },
1599
  { 0x2A56, "CLAYPAKY: AXCOR PROFILE 600 TEATRO" },
1600
  { 0x2A57, "Luminex Lighting Control Equipment: LumiCore" },
1601
  { 0x2A58, "Equivalent: LSSR 123E" },
1602
  { 0x2A59, "Steinigke Showtechnic GmbH: Node IV" },
1603
  { 0x2A5A, "Steinigke Showtechnic GmbH: Pixel Node II" },
1604
  { 0x2A5B, "Steinigke Showtechnic GmbH: freeDMX AP" },
1605
  { 0x2A5C, "Visual Productions: CueCore3" },
1606
  { 0x2A5D, "Visual Productions: B Station2" },
1607
  { 0x2A5E, "Visual Productions: DaliCore" },
1608
  { 0x2A5F, "Litefocus: Node8" },
1609
  { 0x2A60, "Litefocus: Node4" },
1610
  { 0x2A61, "Litefocus: Node24" },
1611
  { 0x2A62, "Litefocus: Node12" },
1612
  { 0x2A63, "Litefocus: Node10" },
1613
  { 0x2A64, "Litefocus: Node8a" },
1614
  { 0x2A65, "Litefocus: Node4a" },
1615
  { 0x2A66, "Litefocus: Node2" },
1616
  { 0x2A67, "Litefocus: Node1" },
1617
  { 0x2A68, "CLAYPAKY: XTYLOS AQUA" },
1618
  { 0x2A69, "CLAYPAKY: AXCOR PROFILE 600 HC TEATRO" },
1619
  { 0x2A6A, "Modern Stage Service Pvt Ltd: MSSP DMX4" },
1620
  { 0x2A6B, "Chengdu Chengyu Electronic Technology Co Ltd: CYT LightShow Controller" },
1621
  { 0x2A6C, "Chengdu Chengyu Electronic Technology Co Ltd: CYT LED Controller" },
1622
  { 0x2A6D, "Chengdu Chengyu Electronic Technology Co Ltd: CYT DMX512 Controller" },
1623
  { 0x2A6E, "stage design technology co Ltd nanchang: multifunction network processing unit" },
1624
  { 0x2A6F, "LiteLEES: SUPER HERO 470 PRO" },
1625
  { 0x2A70, "LiteLEES: BIG EYE L4025" },
1626
  { 0x2A71, "LiteLEES: BIG EYE L4019" },
1627
  { 0x2A72, "Dizzy D Productions: DAn Controller" },
1628
  { 0x2A73, "Martin Professional: MAC Aura PXL" },
1629
  { 0x2A74, "sziton: mess light" },
1630
  { 0x2A75, "CLAYPAKY: AROLLA SPOT MP" },
1631
  { 0x2A76, "CLAYPAKY: AROLLA PROFILE MP" },
1632
  { 0x2A77, "CLAYPAKY: AROLLA PROFILE HP" },
1633
  { 0x2A78, "CLAYPAKY: MIDIB" },
1634
  { 0x2A79, "CLAYPAKY: TAMBORA BATTEN K25" },
1635
  { 0x2A7A, "CLAYPAKY: MINIB PARLED AQUA" },
1636
  { 0x2A7B, "CLAYPAKY: SHARPY PLUS AQUA" },
1637
  { 0x2A7C, "Acme: TRUSSHUB U1" },
1638
  { 0x2A7D, "Acme: LEO" },
1639
  { 0x2A7E, "Acme: DARKMOON" },
1640
  { 0x2A7F, "Acme: SILVERMOON" },
1641
  { 0x2A80, "Acme: GEIST BSWF" },
1642
  { 0x2A81, "Acme: GEIST BEAM" },
1643
  { 0x2A82, "Acme: SUNRISE" },
1644
  { 0x2A83, "Acme: TRUSSHUB U" },
1645
  { 0x2A84, "Acme: TRUSSHUB S" },
1646
  { 0x2A85, "Foshan YiFeng Electric Industrial Co ltd: SOLAR IMPULSE" },
1647
  { 0x2A86, "MODUS: ARL 01 8CH RELAY" },
1648
  { 0x2A87, "LSC Lighting Systems Aust Pty Ltd: MantraMini" },
1649
  { 0x2A88, "LSC Lighting Systems Aust Pty Ltd: UniTour" },
1650
  { 0x2A89, "LSC Lighting Systems Aust Pty Ltd: Unity" },
1651
  { 0x2A8A, "ProtoPixel: 1 Channel WiFi Controller" },
1652
  { 0x2A8B, "Integrated System Technology Limited: iMune multiGate" },
1653
  { 0x2A8C, "ShoCobra: FX1" },
1654
  { 0x2A8D, "ShoCobra: ELD4" },
1655
  { 0x2A8E, "ROBERT JULIAT: CHARLES 960SX" },
1656
  { 0x2A8F, "ROBERT JULIAT: DALIS 864" },
1657
  { 0x2A90, "ROBERT JULIAT: DALIS 863" },
1658
  { 0x2A91, "ROBERT JULIAT: TIBO HE 553" },
1659
  { 0x2A92, "ROBERT JULIAT: SULLY 1156" },
1660
  { 0x2A93, "ROBERT JULIAT: SULLY 305L" },
1661
  { 0x2A94, "ROBERT JULIAT: SULLY 650SX" },
1662
  { 0x2A95, "ROBERT JULIAT: ARTHUR 1014" },
1663
  { 0x2A96, "Colordeve International: NETnode22" },
1664
  { 0x2A97, "Colordeve International: NETnode14" },
1665
  { 0x2A98, "Colordeve International: NETnode18" },
1666
  { 0x2A99, "ShenZhen ChuanTian QuanCai Technology Co ltd: CT 3072 1CH" },
1667
  { 0x2A9A, "ShenZhen ChuanTian QuanCai Technology Co ltd: CT 16384 16CH" },
1668
  { 0x2A9B, "ShenZhen ChuanTian QuanCai Technology Co ltd: CT 8192 8CH" },
1669
  { 0x2A9C, "jin ye Electronics: JY KZQ" },
1670
  { 0x2A9D, "Paai: PAAI Ethernet node" },
1671
  { 0x2A9E, "iion: MNM" },
1672
  { 0x2A9F, "ALA Equipment Company Ltd: PowerNet" },
1673
  { 0x2AA0, "ChromaTech: ThunderOne" },
1674
  { 0x2AA1, "Aputure Imaging Industries Co Ltd: LS 600 LS 1500" },
1675
  { 0x2AA2, "Aputure Imaging Industries Co Ltd: SQ NET" },
1676
  { 0x2AA3, "Guangzhou Mingyan Electronic Technology Co Ltd: Mingyan motherboard" },
1677
  { 0x2AA4, "Guangzhou Mingyan Electronic Technology Co Ltd: Par light motherboard" },
1678
  { 0x2AA5, "Guangzhou Mingyan Electronic Technology Co Ltd: Wifi controller" },
1679
  { 0x2AA6, "Fiilex: Fiilex Color" },
1680
  { 0x2AA7, "Cameo: Evos W3" },
1681
  { 0x2AA8, "Cameo: Opus H5" },
1682
  { 0x2AA9, "Cameo: Opus X" },
1683
  { 0x2AAA, "Cameo: Opus SP5 FC" },
1684
  { 0x2AAB, "Cameo: XNODE 8" },
1685
  { 0x2AAC, "cameo: Opus SP5" },
1686
  { 0x2AAD, "Cameo: Opus S5" },
1687
  { 0x2AAE, "Cameo: XNODE 4" },
1688
  { 0x2AAF, "Chromatech: ThunderPanel" },
1689
  { 0x2AB0, "AC Power Distribution ACT Lighting Inc: PDXND41" },
1690
  { 0x2AB1, "AVW Controls Ltd: QAxis Stage automation integration with LX" },
1691
  { 0x2AB2, "CPOINT: Ledogen" },
1692
  { 0x2AB3, "CPOINT: DMXplorer" },
1693
  { 0x2AB4, "Lichtmanufaktur Berlin GmbH: Casambi Gateway" },
1694
  { 0x2AB5, "ShenZhen ChuanTian QuanCai Technology Co ltd: CT3276832CH" },
1695
  { 0x2AB6, "Ether Dream: Ether Dream 2" },
1696
  { 0x2AB7, "Chauvet Professional: Maverick MK3 Profile CX 2" },
1697
  { 0x2AB8, "Chauvet Professional: Maverick Force 3 Spot" },
1698
  { 0x2AB9, "Chauvet Professional: Maverick Force 3 Profile" },
1699
  { 0x2ABA, "Chauvet Professional: Maverick Force 2 Profile" },
1700
  { 0x2ABB, "Chauvet Professional: Maverick Force 1 Spot" },
1701
  { 0x2ABC, "Chauvet Professional: Maverick Silens 1 Profile" },
1702
  { 0x2ABD, "Chauvet Professional: onAir Panel 2 IP" },
1703
  { 0x2ABE, "Chauvet Professional: onAir Panel 1 IP" },
1704
  { 0x2ABF, "Insight Lighting: CDS RDM PoE" },
1705
  { 0x2AC0, "nicolaudie: Sunlite Suite 2 FC plus" },
1706
  { 0x2AC1, "PLS LLC: Platinum Dimmer System" },
1707
  { 0x2AC2, "ecue: Sympl Bridge Node" },
1708
  { 0x2AC3, "ecue: Bridge8" },
1709
  { 0x2AC4, "ecue: SYMPHOLIGHT" },
1710
  { 0x2AC5, "LED CONTROL PTE LTD: MX96" },
1711
  { 0x2AC6, "ShenZhen ChuanTian QuanCai Technology Co ltd: CT 1020X16" },
1712
  { 0x2AC7, "Advatek Lighting: PixLite A16 S Mk3" },
1713
  { 0x2AC8, "Advatek Lighting: PixLite A4 W Mk3" },
1714
  { 0x2AC9, "Advatek Lighting: PixLite A4 S Mk3" },
1715
  { 0x2ACA, "Advatek Lighting: PixLite T8 S Mk3" },
1716
  { 0x2ACB, "Advatek Lighting: PixLite A16 S Mk2" },
1717
  { 0x2ACC, "Advatek Lighting: PixLite A4 S Mk2" },
1718
  { 0x2ACD, "Advatek Lighting: PixLite T8 S Mk2" },
1719
  { 0x2ACE, "Advatek Lighting: PixLite 16 Plug Play Mk2 plus" },
1720
  { 0x2ACF, "Advatek Lighting: PixLite 16 Plug Play Mk2" },
1721
  { 0x2AD0, "Advatek Lighting: PixLite 4 Mk2 Rugged" },
1722
  { 0x2AD1, "Advatek Lighting: PixLite 16 Mk2 Long Range" },
1723
  { 0x2AD2, "Advatek Lighting: PixLite 16 Mk2 ECO" },
1724
  { 0x2AD3, "Advatek Lighting: PixLite 16 Mk2" },
1725
  { 0x2AD4, "Advatek Lighting: PixLite 4 Mk2 ECO" },
1726
  { 0x2AD5, "Advatek Lighting: PixLite 4 Mk2" },
1727
  { 0x2AD6, "LAMP Aydinlatma: OPUS 16" },
1728
  { 0x2AD7, "LAMP Aydinlatma: OPUS 8" },
1729
  { 0x2AD8, "LAMP Aydinlatma: OPUS 4" },
1730
  { 0x2AD9, "Stage Gear: AUM" },
1731
  { 0x2ADA, "DLL ltd: AC 404" },
1732
  { 0x2ADB, "MODUS: ACTION FX MODUS" },
1733
  { 0x2ADC, "MODUS: ACTION LAB MODUS" },
1734
  { 0x2ADD, "MODUS: ALM MODUS" },
1735
  { 0x2ADE, "MODUS: AV PLAYER MODUS" },
1736
  { 0x2ADF, "MODUS: ALC MODUS" },
1737
  { 0x2AE0, "MODUS: ACW MODUS" },
1738
  { 0x2AE1, "MODUS: ASC MODUS" },
1739
  { 0x2AE2, "MODUS: ADL 16 MODUS" },
1740
  { 0x2AE3, "MODUS: ADL 02 MODUS" },
1741
  { 0x2AE4, "MODUS: ADAC MODUS" },
1742
  { 0x2AE5, "MODUS: E GATE MODUS" },
1743
  { 0x2AE6, "MODUS: AADC MODUS" },
1744
  { 0x2AE7, "MODUS: ADMX MODUS" },
1745
  { 0x2AE8, "MODUS: ARS MODUS" },
1746
  { 0x2AE9, "Chromateq SARL: Chromateq Node" },
1747
  { 0x2AEA, "SIRS E: Pilotino WIFI PCB" },
1748
  { 0x2AEB, "able: PRIME RGB 5300" },
1749
  { 0x2AEC, "TDE Lighttech: IZI Access" },
1750
  { 0x2AED, "Nuvolight GmbH Co KG: SMARTsplitter" },
1751
  { 0x2AEE, "Chauvet Professional: Logic Drive 2X" },
1752
  { 0x2AEF, "Vivitek: Projector" },
1753
  { 0x2AF0, "Sensation Lighting Technology Co Ltd: Tungsten cubic" },
1754
  { 0x2AF1, "Eon lighting: Eonport4" },
1755
  { 0x2AF2, "Eon lighting: Eonport2" },
1756
  { 0x2AF3, "Eon lighting: Eonport1" },
1757
  { 0x2AF4, "LSC Lighting Systems Aust Pty Ltd: Houston X" },
1758
  { 0x2AF5, "INTILED: U BOX 8" },
1759
  { 0x2AF6, "Foshan city Yanyao lighting Equipment Factory: X_NODE_8U" },
1760
  { 0x2AF7, "Foshan city Yanyao lighting Equipment Factory: X_NODE_4U" },
1761
  { 0x2AF8, "Foshan city Yanyao lighting Equipment Factory: X_NODE_PIXEL_2U" },
1762
  { 0x2AF9, "Foshan city Yanyao lighting Equipment Factory: X_NODE_PIXEL" },
1763
  { 0x2AFA, "S4 Lights: Motherline Main Board" },
1764
  { 0x2AFB, "Laserworld Group: ShowNET" },
1765
  { 0x2AFC, "HYCL: Super RdmController 16" },
1766
  { 0x2AFD, "HYCL: Super RdmController 1" },
1767
  { 0x2AFE, "HYCL: Super RdmController 2" },
1768
  { 0x2AFF, "HYCL: Super RdmController 4" },
1769
  { 0x2B00, "HYCL: Super RdmController 8" },
1770
  { 0x2B01, "Showtacle Ltd: Reactivo" },
1771
  { 0x2B02, "Advatek Lighting: PixLite E16 S Mk3" },
1772
  { 0x2B03, "Advatek Lighting: PixLite E4 S Mk3" },
1773
  { 0x2B04, "EagleLight: Node16S" },
1774
  { 0x2B05, "EagleLight: Node8S" },
1775
  { 0x2B06, "EagleLight: Node4S" },
1776
  { 0x2B07, "EagleLight: Node2S" },
1777
  { 0x2B08, "EagleLight: Node1S" },
1778
  { 0x2B09, "EagleLight: Node16D" },
1779
  { 0x2B0A, "EagleLight: Node8D" },
1780
  { 0x2B0B, "EagleLight: Node4D" },
1781
  { 0x2B0C, "EagleLight: Node2D" },
1782
  { 0x2B0D, "EagleLight: Node1D" },
1783
  { 0x2B0E, "PXM: QRay Console 36" },
1784
  { 0x2B0F, "PXM: QRay Console 24" },
1785
  { 0x2B10, "CLAYPAKY: MINI XTYLOS" },
1786
  { 0x2B11, "Acme: TRUSSHUB UG" },
1787
  { 0x2B12, "Acme: THUNDER BREAKER" },
1788
  { 0x2B13, "Acme: CALORIE" },
1789
  { 0x2B14, "Acme: JOULES" },
1790
  { 0x2B15, "Acme: PASCAL" },
1791
  { 0x2B16, "Acme: GRAVITRON" },
1792
  { 0x2B17, "Acme: NEWTON" },
1793
  { 0x2B18, "Acme: GEMINI" },
1794
  { 0x2B19, "TELMICNeo: QUADTRA2" },
1795
  { 0x2B1A, "TrasMaTech: TrasMaTech Led Panel" },
1796
  { 0x2B1B, "Yarilo Pro: PixelDIN" },
1797
  { 0x2B1C, "CLAYPAKY: MINI XTYLOS HPE" },
1798
  { 0x2B1D, "WizzuLED: WizzuLED WiFi Link Pro Optoisolated" },
1799
  { 0x2B1E, "WizzuLED: WizzuLED WiFi Link" },
1800
  { 0x2B1F, "WizzuLED: WizzuLED Matrix Display Module v2" },
1801
  { 0x2B20, "CLAYPAKY: SINFONYA PROFILE 600" },
1802
  { 0x2B21, "IMMOLAS: IMMO GATE x4 ISO" },
1803
  { 0x2B22, "Chauvet Professional: Logic POE X" },
1804
  { 0x2B23, "Chauvet Professional: Logic AR111 DN 24W" },
1805
  { 0x2B24, "Chauvet Professional: Logic AR111 DN 12W" },
1806
  { 0x2B25, "Chauvet Professional: Logic MR16 DN 6W" },
1807
  { 0x2B26, "Chauvet Professional: Logic GZ 48W" },
1808
  { 0x2B27, "Chauvet Professional: Logic GZ 12W" },
1809
  { 0x2B28, "Chauvet Professional: Logic CV 24W" },
1810
  { 0x2B29, "Chauvet Professional: Logic CV 12W" },
1811
  { 0x2B2A, "Chauvet Professional: Logic Drive 2Xb" },
1812
  { 0x2B2B, "Control Pro Kft: CubeOS" },
1813
  { 0x2B2C, "LightnTec GmbH: ledTec flex wallpaper" },
1814
  { 0x2B2D, "Luminex Lighting Control Equipment: LumiNode 12 RJ45" },
1815
  { 0x2B2E, "Luminex Lighting Control Equipment: LumiNode 4 DIN" },
1816
  { 0x2B2F, "Colordeve International: MissionBAR" },
1817
  { 0x2B30, "Chauvet Professional: Maverick Force S Profile" },
1818
  { 0x2B31, "Chauvet Professional: Maverick Force S Spot" },
1819
  { 0x2B32, "Integrated System Technology Limited: Tendo Pod PoE" },
1820
  { 0x2B33, "Integrated System Technologies: POE LED Driver 2" },
1821
  { 0x2B34, "Integrated System Technologies: POE LED Driver 4" },
1822
  { 0x2B35, "Integrated System Technologies: Well building Environmental Sensor" },
1823
  { 0x2B36, "Nastedt VA Technik: PixelLedDriver" },
1824
  { 0x2B37, "Chauvet Professional: Color STRIKE M" },
1825
  { 0x2B38, "Sidus Link Ltd: Sidus QNet Jupiter" },
1826
  { 0x2B39, "CLAYPAKY: VOLERO BATTEN AQUA" },
1827
  { 0x2B3A, "CLAYPAKY: VOLERO WAVE" },
1828
  { 0x2B3B, "CLAYPAKY: ACTORIS PARLED" },
1829
  { 0x2B3C, "CLAYPAKY: PANIFY" },
1830
  { 0x2B3D, "CLAYPAKY: SHARPY X FRAME" },
1831
  { 0x2B3E, "CLAYPAKY: MIDIB WW" },
1832
  { 0x2B3F, "CLAYPAKY: MINIB PARLED AQUA WW" },
1833
  { 0x2B40, "CLAYPAKY: MINIB WW" },
1834
  { 0x2B41, "Hypar Collective: HyparDrive" },
1835
  { 0x2B42, "Uniquenterprice: Unique" },
1836
  { 0x2B43, "Martin Professional: MAC Ultra Wash" },
1837
  { 0x2B44, "Martin Professional: MAC Ultra Performance" },
1838
  { 0x2B45, "Akatsuki: Node 10" },
1839
  { 0x2B46, "NEWSUBSTANCE Ltd: Timecode Receiver" },
1840
  { 0x2B47, "NEWSUBSTANCE Ltd: LED Pixel Driver" },
1841
  { 0x2B48, "Licht Technik Hagenbach Grill: MB Yoke" },
1842
  { 0x2B49, "Stops Mops GmbH: Desk Dough Beam" },
1843
  { 0x2B4A, "elements: DEX 8" },
1844
  { 0x2B4B, "LumiOS: eDLC4" },
1845
  { 0x2B4C, "LumiOS: eDLC1" },
1846
  { 0x2B4D, "LumiOS: eDMX1" },
1847
  { 0x2B4E, "LumiOS: eDMX12" },
1848
  { 0x2B4F, "LumiOS: eDMX4" },
1849
  { 0x2B50, "ADL Electronics Ltd: ADL NET SERVER" },
1850
  { 0x2B51, "ADL Electronics Ltd: ADL DIM SW 220 6 5" },
1851
  { 0x2B52, "ADL Electronics Ltd: ADL DIM SW 220 6 3" },
1852
  { 0x2B53, "ADL Electronics Ltd: ADL DIM SW 220 24 3" },
1853
  { 0x2B54, "ADL Electronics Ltd: ADL DIM SW 220 12 3" },
1854
  { 0x2B55, "ADL Electronics Ltd: ADL SW 220 6 5" },
1855
  { 0x2B56, "ADL Electronics Ltd: ADL SW 220 12 3" },
1856
  { 0x2B57, "ADL Electronics Ltd: ADL DIM 220 6 5" },
1857
  { 0x2B58, "ADL Electronics Ltd: ADL DIM 220 6 1 LED" },
1858
  { 0x2B59, "ADL Electronics Ltd: ADL DIM 220 12 1 LED" },
1859
  { 0x2B5A, "ADL Electronics Ltd: ADL DIM 220 12 3" },
1860
  { 0x2B5B, "ADL Electronics Ltd: ADL DC WSO Note" },
1861
  { 0x2B5C, "ADL Electronics Ltd: ADL DMX NetGate Mini" },
1862
  { 0x2B5D, "ADL Electronics Ltd: ADL DMX NetGate SPI" },
1863
  { 0x2B5E, "ADL Electronics Ltd: ADL DMX NetGate DALI" },
1864
  { 0x2B5F, "LRS Solutions: LRS ControlBridge" },
1865
  { 0x2B60, "Pioneer lighting solutions india pvt ltd: PL NODE 8" },
1866
  { 0x2B61, "AECO 10: AECO 10" },
1867
  { 0x2B62, "Acme: AECO 12" },
1868
  { 0x2B63, "Acme: AECO 5" },
1869
  { 0x2B64, "Acme: AECO 20" },
1870
  { 0x2B65, "Acme: AECO 8" },
1871
  { 0x2B66, "Acme: AECO 22" },
1872
  { 0x2B67, "CLAYPAKY: TAMBORA BATTEN SQUARE" },
1873
  { 0x2B68, "CLAYPAKY: TAMBORA BATTEN ROUND" },
1874
  { 0x2B69, "WHITEvoid: Comms Module" },
1875
  { 0x2B6A, "Martin Professional: PDE Junction Box Active" },
1876
  { 0x2B6B, "Martin Professional: VDO Atomic Bold" },
1877
  { 0x2B6C, "SLLCP: NodeSTereo" },
1878
  { 0x2B6D, "Acme: NEOZONE" },
1879
  { 0x2B6E, "Acme: FLASHBOLT" },
1880
  { 0x2B6F, "Acme: OCTOPUS 8" },
1881
  { 0x2B70, "SLLCP: NodeSTereo2" },
1882
  { 0x2B71, "Tavlintsev Timofey: LedMapper" },
1883
  { 0x2B72, "Tyler Ward: POE stack light" },
1884
  { 0x2B73, "Alexin Smart Integrations: RTI colorpicker driver" },
1885
  { 0x2B74, "Wireless Solution Sweden AB: W DMX WiFi Bridge F 2" },
1886
  { 0x2B75, "Wireless Solution Sweden AB: W DMX WiFi Bridge F 1" },
1887
  { 0x2B76, "LumenRadio: CRMX Aurora" },
1888
  { 0x2B77, "LumenRadio AB: CRMX Stardust" },
1889
  { 0x2B78, "Schnick Schnack Systems GmbH: Pixel Gate Mini" },
1890
  { 0x2B79, "LIGEO GmbH: LIGEO GATEWAY G2" },
1891
  { 0x2B7A, "Strike Theatre Electronics LLC: Hellbender Console" },
1892
  { 0x2B7B, "Elation Lighting: EP2" },
1893
  { 0x2B7C, "Locimation Pty Ltd: LX Toolkit" },
1894
  { 0x2B7D, "NEWSUBSTANCE Ltd: Media Server" },
1895
  { 0x2B7E, "Yarilo Pro: Pixel Mini" },
1896
  { 0x2B7F, "StrongLED Lighting Systems Suzhou Co Ltd: IP Controller" },
1897
  { 0x2B80, "Wattle IT: Kanet" },
1898
  { 0x2B81, "kuwatec Inc: PrefLight" },
1899
  { 0x2B82, "kuwatec Inc: Ex2" },
1900
  { 0x2B83, "Chauvet Professional: COLORado PXL BAR 16" },
1901
  { 0x2B84, "Chauvet Professional: COLORado PXL BAR 8" },
1902
  { 0x2B85, "Falcon Christmas: FPP" },
1903
  { 0x2B86, "LIGEO GmbH: LIGEO WIFI G1" },
1904
  { 0x2B87, "Imlight Electronics: Netline 2" },
1905
  { 0x2B88, "Imlight Electronics: Netline 8" },
1906
  { 0x2B89, "Imlight Electronics: Netline 4" },
1907
  { 0x2B8A, "Imlight Electronics: DimRack 96" },
1908
  { 0x2B8B, "Imlight Electronics: DimRack 48" },
1909
  { 0x2B8C, "DTS Illuminazione srl: ALCHEMY 7 F" },
1910
  { 0x2B8D, "Steinigke Showtechnic GmbH: DXT PoE Node I" },
1911
  { 0x2B8E, "Chauvet Professional: Maverick Storm 2 BeamWash" },
1912
  { 0x2B8F, "Arkaos: MediaMaster6" },
1913
  { 0x2B90, "ALPHA LITE: ALPHA LITE" },
1914
  { 0x2B91, "LED CONTROL PTE LTD: MX96 v2" },
1915
  { 0x2B92, "LED CTRL: LED CTRL" },
1916
  { 0x2B93, "control8r: MIDIMonster" },
1917
  { 0x2B94, "StageTubes: MatrixEngine" },
1918
  { 0x2B95, "Pippin Technical Service: PTS Limelight" },
1919
  { 0x2B96, "Emporio On Stage: EosOemController" },
1920
  { 0x2B97, "Integrated System Technologies Ltd: iDrive Eco 12" },
1921
  { 0x2B98, "MakePro X: Glue" },
1922
  { 0x2B99, "GODOX PHOTO EQUIPMENT CO LTD: LED Light" },
1923
  { 0x2B9A, "Lucenti: Blackwave PixlDrive8 Pro" },
1924
  { 0x2B9B, "LSC ControlSystems Pty Ltd: TRS Rack" },
1925
  { 0x2B9C, "Acme: HAIL" },
1926
  { 0x2B9D, "Acme: PIXEL LINE IP" },
1927
  { 0x2B9E, "L4S GmbH: ETH Controller 10x1024" },
1928
  { 0x2B9F, "CLAYPAKY: TAMBORA FLASH" },
1929
  { 0x2BA0, "CLAYPAKY: TAMBORA LINEAR 100" },
1930
  { 0x2BA1, "Luminex Lighting Control Equipment: LumiNode 4 Wall" },
1931
  { 0x2BA2, "CLAYPAKY: MINIB" },
1932
  { 0x2BA3, "Vari Lite: VL internal node" },
1933
  { 0x2BA4, "Pixsper: LXMax" },
1934
  { 0x2BA5, "Steinigke Showtechnic GmbH: IP PLH 420 Moving Head SpotBeam" },
1935
  { 0x2BA6, "Steinigke Showtechnic GmbH: IP PLB420 Moving Head Beam" },
1936
  { 0x2BA7, "Integrated System Technologies Ltd: iDrive Atlas 36" },
1937
  { 0x2BA8, "Integrated System Technologies Ltd: iDrive Atlas 12" },
1938
  { 0x2BA9, "equivalent: LSSR 65" },
1939
  { 0x2BAA, "White Wing Logic: Ethersplitter" },
1940
  { 0x2BAB, "LUXIBEL: B BLAST" },
1941
  { 0x2BAC, "LUXIBEL: B BLAST PRO" },
1942
  { 0x2BAD, "JentonDimaco: VeriPACK" },
1943
  { 0x2BAE, "AhojPepo eu: Node1w1" },
1944
  { 0x2BAF, "Schannherz Elektronikai Mahely: MUEB 4" },
1945
  { 0x2BB0, "Shenzhen ImagineVision Technology Limited: ZOLAR Toliman 30C" },
1946
  { 0x2BB1, "Yarilo Pro: LanDMX8DIN" },
1947
  { 0x2BB2, "SoundSwitch: SoundSwitch" },
1948
  { 0x2BB3, "Shenzhen ImagineVision Technology Limited: ZOLAR Vega 30C" },
1949
  { 0x2BB4, "Shenzhen ImagineVision Technology Limited: ZOLAR Toliman 30Cb" },
1950
  { 0x2BB5, "Shenzhen ImagineVision Technology Limited: ZOLAR Toliman 30S" },
1951
  { 0x2BB6, "Lichtmanufaktur Berlin GmbH: Lithernet Casambi Gateway" },
1952
  { 0x2BB7, "Tank Serbatoio Culturale: TASV" },
1953
  { 0x2BB8, "L4S GmbH: ETH Controller 10x1024b" },
1954
  { 0x2BB9, "expanseElectronics: soloWiFi" },
1955
  { 0x2BBA, "expanseElectronics: dualETH" },
1956
  { 0x2BBB, "Chauvet Professional: Maverick Storm 4 Profile" },
1957
  { 0x2BBC, "Chauvet Professional: Maverick Storm 2 Profile" },
1958
  { 0x2BBD, "Adkins Professional Lighting: 6x6 Watt RGBAW UV FlatPar" },
1959
  { 0x2BBE, "Shenzhen ImagineVision Technology Limited: ZOLAR" },
1960
  { 0x2BBF, "Manu: Enttec" },
1961
  { 0x2BC0, "GVA Lighting Inc: PDC-G5" },
1962
  { 0x2BC1, "Subsomav Lda: MyPocketNode" },
1963
  { 0x2BC2, "Krypton: P800 IP" },
1964
  { 0x2BC3, "Krypton: BRUTE" },
1965
  { 0x2BC4, "SUPER CAN Light: HDMI Video Player" },
1966
  { 0x2BC5, "SUPER CAN Industry Growing Co LTD: ETA Node" },
1967
  { 0x2BC6, "Krypton: X Treme 1100" },
1968
  { 0x2BC7, "Skaarhoj: BluePill" },
1969
  { 0x2BC8, "ADJ Products: Pixie Driver 8000" },
1970
  { 0x2BC9, "riccarf: asa" },
1971
  { 0x2BCA, "ON LX Limited: Ctrl Engine" },
1972
  { 0x2BCB, "nicoleaudio: daslight4" },
1973
  { 0x2BCC, "Briteq: BTX LIGHTSTRIKE" },
1974
  { 0x2BCD, "Company 235 LLC: OpenLCP" },
1975
  { 0x2BCE, "Guangzhou ChaiYi Light CO Ltd: TEKMAND Node 2P" },
1976
  { 0x2BCF, "CHAUVET: DMX AN" },
1977
  { 0x2BD0, "Automatic Devices Company: ADC Clear Path Controller" },
1978
  { 0x2BD1, "edelkrone: LightONE" },
1979
  { 0x2BD2, "JPK Systems Limited: LeDMX4 MAX" },
1980
  { 0x2BD3, "JPK Systems Limited: LeDMX2 MAX" },
1981
  { 0x2BD4, "JPK Systems Limited: eDMX4 MAX ISODIN11" },
1982
  { 0x2BD5, "JPK Systems Limited: eDMX4 MAX DIN" },
1983
  { 0x2BD6, "JPK Systems Limited: ultraDMX MAX" },
1984
  { 0x2BD7, "MLH Electronics: LEDstrip controller" },
1985
  { 0x2BD8, "FixtureMapper: FixtureMapper" },
1986
  { 0x2BD9, "Mantic Lighting Appliance Co Ltd: Matrix M801" },
1987
  { 0x2BDA, "Litegear Inc: LiteDimmer" },
1988
  { 0x2BDB, "Litegear Inc: Litemat" },
1989
  { 0x2BDC, "TORRES: DMXAN" },
1990
  { 0x2BDD, "HongYuan: HY001" },
1991
  { 0x2BDE, "Chauvet Professional: STRIKE Bolt" },
1992
  { 0x2BDF, "Chauvet Professional: Color STRIKE L" },
1993
  { 0x2BE0, "USHIO LIGHTING INC: Amata2" },
1994
  { 0x2BE1, "Mate LLC: MEL" },
1995
  { 0x2BE2, "Litegear Inc: LiteDimmerB" },
1996
  { 0x2BE3, "CLAYPAKY: MINI B SPOT" },
1997
  { 0x2BE4, "CLAYPAKY: ACTORIS PARLED RGBW" },
1998
  { 0x2BE5, "CLAYPAKY: TAMBORA LINEAR 60" },
1999
  { 0x2BE6, "arpschuino: arpschuino32" },
2000
  { 0x2BE7, "xiaoxu: DMX512 Expander" },
2001
  { 0x2BE8, "MODUS: Wi Fi ColorBox" },
2002
  { 0x2BE9, "Home Assistant Core Team and Community: Home Assistant" },
2003
  { 0x2BEA, "LKE Lasershow: LED Driver" },
2004
  { 0x2BEB, "Jorge Lighting: Obsidian EN4" },
2005
  { 0x2BEC, "Guangdong Nanguang Photo Video Systems Co Ltd: NANLUX" },
2006
  { 0x2BED, "Martin Professional: MAC Aura XIP" },
2007
  { 0x2BEE, "mad: ks910p" },
2008
  { 0x2BEF, "allroundDigital: cuewise Audio" },
2009
  { 0x2BF0, "Aircoookie: WLED" },
2010
  { 0x2BF1, "JPK Systems Limited: eDMX4 MAX" },
2011
  { 0x2BF2, "JPK Systems Limited: eDMX2 MAX" },
2012
  { 0x2BF3, "JPK Systems Limited: eDMX1 MAX" },
2013
  { 0x2BF4, "JPK Systems Limited: eDMX4 MAX ISODIN22" },
2014
  { 0x2BF5, "Fufeng lighting: EN8" },
2015
  { 0x2BF6, "PH Lighting: LCI WiFi MINI" },
2016
  { 0x2BF7, "PH Lighting: LCI WiFi MAX" },
2017
  { 0x2BF8, "Steinigke Showtechnic GmbH: LED IP Atmo Blinder 9" },
2018
  { 0x2BF9, "Astera: AsteraBox Wifi" },
2019
  { 0x2BFA, "Ex Machina: lonestar" },
2020
  { 0x2BFB, "Showtacle Ltd: SPI LED 2" },
2021
  { 0x2BFC, "JPK Systems Limited: eDMX1 MAX DIN" },
2022
  { 0x2BFD, "Vari Lite: Neo" },
2023
  { 0x2BFE, "Vari Lite: ZerOS" },
2024
  { 0x2BFF, "NEWSUBSTANCE Ltd: Wireless LED Pixel Driver" },
2025
  { 0x2C00, "gobo ws: IoT lighting gateway" },
2026
  { 0x2C01, "United Protocols: UP8420" },
2027
  { 0x2C02, "United Protocols: UP8410" },
2028
  { 0x2C03, "PIONEER LIGHTING SOLUTIONS INDIA PVT LTD: PL NODE 4" },
2029
  { 0x2C04, "Chauvet Professional: onAir IP Panel 3" },
2030
  { 0x2C05, "Lumascape: Lumascape PSync 010" },
2031
  { 0x2C06, "Lumascape: Lumascape PSync 009" },
2032
  { 0x2C07, "Lumascape: Lumascape PSync 008" },
2033
  { 0x2C08, "Lumascape: Lumascape PSync 007" },
2034
  { 0x2C09, "Lumascape: Lumascape PSync 006" },
2035
  { 0x2C0A, "Lumascape: Lumascape PSync 005" },
2036
  { 0x2C0B, "Lumascape: Lumascape PSync 004" },
2037
  { 0x2C0C, "Lumascape: Lumascape PSync 003" },
2038
  { 0x2C0D, "Lumascape: Lumascape PSync 002" },
2039
  { 0x2C0E, "Lumascape: Lumascape PSync 001" },
2040
  { 0x2C0F, "CLAYPAKY: SKYLOS" },
2041
  { 0x2C10, "Showtacle Ltd: Reactivo 2" },
2042
  { 0x2C11, "PXM: Px914" },
2043
  { 0x2C12, "Cronic Industries: FlexNode S1" },
2044
  { 0x2C13, "Chauvet Professional: onAir Panel 4 IP Hard" },
2045
  { 0x2C14, "Chauvet Professional: Strike Array 1" },
2046
  { 0x2C15, "rosdi ab latiff: TouchDesigner" },
2047
  { 0x2C16, "VINGTQUATREVOLTS: D Light" },
2048
  { 0x2C17, "Synthesis LED: Synthesis Pro" },
2049
  { 0x2C18, "AULIOS GmbH: AULIOS" },
2050
  { 0x2C19, "St Andrews: Dot 2" },
2051
  { 0x2C1A, "Digipet: Win Digipet" },
2052
  { 0x2C1B, "Chauvet Professional: Maverick Storm 3 BeamWash" },
2053
  { 0x2C1C, "Chauvet Professional: Maverick Force 3 Profile" },
2054
  { 0x2C1D, "Chauvet Professional: Maverick Force 2 Beam" },
2055
  { 0x2C1E, "Chauvet Professional: COLORado PXL Curve 12" },
2056
  { 0x2C1F, "Chauvet Professional: Maverick Storm 1 Beam" },
2057
  { 0x2C20, "Chauvet Professional: Maverick Storm 1 Hybrid" },
2058
  { 0x2C21, "Steinigke Showtechnic GmbH: LED IP Atmo Bar 10" },
2059
  { 0x2C22, "Acme: LIGHTNING" },
2060
  { 0x2C23, "CLAYPAKY: MIDIB FX" },
2061
  { 0x2C24, "CLAYPAKY: SHARPY X SPOT" },
2062
  { 0x2C25, "CLAYPAKY: AROLLA AQUA" },
2063
  { 0x2C26, "CLAYPAKY: K15 AQUA" },
2064
  { 0x2C27, "CLAYPAKY: ACTORIS PROFILE FC" },
2065
  { 0x2C28, "CLAYPAKY: MINI B AQUA" },
2066
  { 0x2C29, "Steinigke Showtechnic GmbH: DXT Pixel Node IV" },
2067
  { 0x2C2A, "Vivalyte BV: LEDLogix" },
2068
  { 0x2C2B, "PXL Lighting: B1" },
2069
  { 0x2C2C, "Pyrodigy Production: DAC" },
2070
  { 0x2C2D, "Chauvet Professional: Strike Array 2 FC" },
2071
  { 0x2C2E, "Chauvet Professional: Strike Array 4 FC" },
2072
  { 0x2C2F, "Chauvet Professional: Color Strike Duo" },
2073
  { 0x2C30, "Plura: SPT" },
2074
  { 0x2C31, "ARGETRON: Norval" },
2075
  { 0x2C32, "PXM: Rh836" },
2076
  { 0x2C33, "Plura: TRC" },
2077
  { 0x2C34, "Plura: ELC" },
2078
  { 0x2C35, "Plura: TCUH1D" },
2079
  { 0x2C36, "Plura: SPTH1" },
2080
  { 0x2C37, "Plura: TCUH1" },
2081
  { 0x2C38, "Plura: TCU MTD ID" },
2082
  { 0x2C39, "Plura: TCU" },
2083
  { 0x2C3A, "Plura: SPT MTD ID" },
2084
  { 0x2C3B, "Plura: UD300D" },
2085
  { 0x2C3C, "Plura: UD300" },
2086
  { 0x2C3D, "Plura: UD56S" },
2087
  { 0x2C3E, "Plura: UD56" },
2088
  { 0x2C3F, "Plura: UD56 8" },
2089
  { 0x2C40, "Plura: UD25 8" },
2090
  { 0x2C41, "Plura: UDD25" },
2091
  { 0x2C42, "Plura: UD25" },
2092
  { 0x2C43, "LSC Control Systems Pty Ltd: NEXEN DIN" },
2093
  { 0x2C44, "LSC Control Systems Pty Ltd: NXD4" },
2094
  { 0x2C45, "LSC Control Systems Pty Ltd: NXW2" },
2095
  { 0x2C46, "LSC Control Systems Pty Ltd: NXP2" },
2096
  { 0x2C47, "Acme: XA 2000 BSWF IP" },
2097
  { 0x2C48, "Acme: XA 1000 BW IP" },
2098
  { 0x2C49, "Acme: XA 1000 BSWF IP" },
2099
  { 0x2C4A, "Acme: TS 500 RGBA" },
2100
  { 0x2C4B, "Acme: TS 500 CW WW" },
2101
  { 0x2C4C, "Acme: TB 5 IP" },
2102
  { 0x2C4D, "Acme: TB 5" },
2103
  { 0x2C4E, "Acme: STROBE 7 IP" },
2104
  { 0x2C4F, "Acme: MB 1000" },
2105
  { 0x2C50, "Acme: LP F3000" },
2106
  { 0x2C51, "Acme: HUE 6 IP" },
2107
  { 0x2C52, "Acme: CM S2" },
2108
  { 0x2C53, "Acme: CM 1000Z" },
2109
  { 0x2C54, "Acme: BLINDER BAR IP" },
2110
  { 0x2C55, "Acme: ARC 640" },
2111
  { 0x2C56, "Acme: STROBE 1 IP" },
2112
  { 0x2C57, "Acme: ARC ST200" },
2113
  { 0x2C58, "GLP German Light Products INC: Drixl" },
2114
  { 0x2C59, "GLP German Light Products INC: Scenex PixiPower" },
2115
  { 0x2C5A, "Synthesis LED: Synthesis Assistant tool" },
2116
  { 0x2C5B, "SmartShow UK Ltd: Pro ONE" },
2117
  { 0x2C5C, "Bulldog Lighting and Events: Armani Cobra 4" },
2118
  { 0x2C5D, "Bulldog Lighting and Events: Diesel 12" },
2119
  { 0x2C5E, "Bulldog Lighting and Events: Diesel 24" },
2120
  { 0x2C5F, "Singularity UK Ltd: rdmInspect" },
2121
  { 0x2C60, "ARCTOS Showlasertechnik GmbH: Orbit" },
2122
  { 0x2C61, "CLAYPAKY: RHAPSODY" },
2123
  { 0x2C62, "ChamSys Ltd: QuickQ" },
2124
  { 0x2C63, "PIXILAB Technologies AB: PIXILAB Blocks" },
2125
  { 0x2C64, "JPK Systems Limited: eDMX4 MAX ISODIN" },
2126
  { 0x2C65, "JPK Systems Limited: eDMX8 MAX" },
2127
  { 0x2C66, "CLAYPAKY: SINFONYA PROFILE HP" },
2128
  { 0x2C67, "CLAYPAKY: SINFONYA PROFILE 600EX" },
2129
  { 0x2C68, "CLAYPAKY: RHAPSODYA" },
2130
  { 0x2C69, "CLAYPAKY: SKYLOS NV" },
2131
  { 0x2C6A, "Onderweg Software: Onderweg DMX Library" },
2132
  { 0x2C6B, "ChromaQ: 2inspire 300" },
2133
  { 0x2C6C, "ChromaQ: 2inspire 200" },
2134
  { 0x2C6D, "ChromaQ: 2inspire 100" },
2135
  { 0x2C6E, "DTS Illuminazione srl: SYNERGY 6 PROFILE" },
2136
  { 0x2C6F, "TELMIC Neo: Recoller" },
2137
  { 0x2C70, "CB Electronics: TC 5 Midi Timecode Interface" },
2138
  { 0x2C71, "BRITEQ Beglec NV: BTX SKYRAN" },
2139
  { 0x2C72, "JPK Systems Limited: eDMX8 MAX DIN" },
2140
  { 0x2C73, "Chauvet Professional: onAir B6" },
2141
  { 0x2C74, "Chauvet Professional: onAir B4" },
2142
  { 0x2C75, "Chauvet Professional: onAir B1" },
2143
  { 0x2C76, "Swisson AG: XMT 500" },
2144
  { 0x2C77, "Kino Flo Lighting Systems: Celeb Ikon 12" },
2145
  { 0x2C78, "Kino Flo Lighting Systems: Celeb Ikon 6" },
2146
  { 0x2C79, "Kino Flo Lighting Systems: Diva Lux 4" },
2147
  { 0x2C7A, "Kino Flo Lighting Systems: Diva Lux 2" },
2148
  { 0x2C7B, "Kino Flo Lighting Systems: Diva Lux 1" },
2149
  { 0x2C7C, "Kino Flo Lighting Systems: FreeFrame Control 2" },
2150
  { 0x2C7D, "Kino Flo Lighting Systems: FreeFrame P3" },
2151
  { 0x2C7E, "Kino Flo Lighting Systems: FreeFrame P2" },
2152
  { 0x2C7F, "Kino Flo Lighting Systems: FreeFrame P1" },
2153
  { 0x2C80, "Kino Flo Lighting Systems: LED Fixture" },
2154
  { 0x2C81, "Chauvet Professional: Epix Drive 4000X IP" },
2155
  { 0x2C82, "Briteq Beglec NV: BT NODE24 Mk2" },
2156
  { 0x2C83, "Briteq Beglec NV: BTI LIGHTSTRIKE IP66" },
2157
  { 0x2C84, "ChamSys Ltd: MagicHD" },
2158
  { 0x2C85, "ChamSys Ltd: MagicVis" },
2159
  { 0x2C86, "Lighting Infusion LLC: Streaming Toolkit" },
2160
  { 0x2C87, "Shenzhen Lumi Lime Technology Limited: LA01" },
2161
  { 0x2C88, "Steinigke Showtechnic GmbH: eurolite Light Captain" },
2162
  { 0x2C89, "ADJ Products: Wifi Net 2" },
2163
  { 0x2C8A, "ADJ Products: Net 8" },
2164
  { 0x2C8B, "ADJ Products: Net 4" },
2165
  { 0x2C8C, "Martin Professional: ERA 700 Performance IP" },
2166
  { 0x2C8D, "White WIng Logic: PoE LED controller MW10P" },
2167
  { 0x2C8E, "DALCERO ENGINEERING: OemDalceroGateway04" },
2168
  { 0x2C8F, "DALCERO ENGINEERING: OemDalceroGateway01" },
2169
  { 0x2C90, "Chauvet Professional: Maverick Silens 2X Profile" },
2170
  { 0x2C91, "Chauvet Professional: Maverick Silens 1X Profile" },
2171
  { 0x2C92, "Elation Lighting: EN6 IP" },
2172
  { 0x2C93, "Elation Lighting: EN12i" },
2173
  { 0x2C94, "Elation Lighting: EP1" },
2174
  { 0x2C95, "ADB: ORKIS CYC" },
2175
  { 0x2C96, "Emilio Karas: Fixture Visualizer unreleased" },
2176
  { 0x2C97, "Steinigke Showtechnic GmbH: LED Pixel Matrix Panel 5x5 RGBWW" },
2177
  { 0x2C98, "MODUS: MODUS Max08" },
2178
  { 0x2C99, "IQ COMPANY Ltd: DOTIMAGE" },
2179
  { 0x2C9A, "Chauvet Professional: Maverick Storm 4 SoloWash" },
2180
  { 0x2C9B, "CLAYPAKY: Deprecated1" },
2181
  { 0x2C9C, "Thomas Neumann Licht und Tontechnik: Levelcheck" },
2182
  { 0x2C9D, "LaserAV: DistroNode" },
2183
  { 0x2C9E, "LumenRadio AB: CRMX Galileo MAX" },
2184
  { 0x2C9F, "Martin Professional: MAC One" },
2185
  { 0x2CA0, "LSC Control Systems Pty Ltd: GENX" },
2186
  { 0x2CA1, "LSC Control Systems Pty Ltd: APSX" },
2187
  { 0x2CA2, "Chauvet Professional: Strike Rail" },
2188
  { 0x2CA3, "Rift Labs: Kelvin" },
2189
  { 0x2CA4, "SG Product: ArtnetWirelessSerialLed" },
2190
  { 0x2CA5, "Constell8: KLSTR CTRL" },
2191
  { 0x2CA6, "Chauvet Professional: Maverick Storm 3X BeamWash" },
2192
  { 0x2CA7, "Steinigke Showtechnic GmbH: LED PIX 12 Swing QCL Zoom Bar" },
2193
  { 0x2CA8, "Chauvet Professional: Maverick Storm 2 Profile M" },
2194
  { 0x2CA9, "OSRAM: RGBI controller" },
2195
  { 0x2CAA, "Elation Lighting: EP1D" },
2196
  { 0x2CAB, "Elation Lighting: EN6D" },
2197
  { 0x2CAC, "Elation Lighting: DA2410V" },
2198
  { 0x2CAD, "Acme: XP 400 BEAM IP" },
2199
  { 0x2CAE, "Acme: Deprecated1" },
2200
  { 0x2CAF, "Acme: CM 7 IP" },
2201
  { 0x2CB0, "Acme: XP 500 BEAM IP" },
2202
  { 0x2CB1, "Acme: Deprecated2" },
2203
  { 0x2CB2, "Acme: BLB 10 IP" },
2204
  { 0x2CB3, "Acme: BLB 5 IP" },
2205
  { 0x2CB4, "Acme: AECO 30 IP" },
2206
  { 0x2CB5, "Acme: Deprecated3" },
2207
  { 0x2CB6, "Acme: XA 600 BSWF IP" },
2208
  { 0x2CB7, "Acme: XA 600 BSW IP" },
2209
  { 0x2CB8, "Cindy Professional Lighting Co Ltd: TOUGH 800 BAR" },
2210
  { 0x2CB9, "Imlight Electronics: Apollo CCS" },
2211
  { 0x2CBA, "FTSLED: Cerise 1U USB" },
2212
  { 0x2CBB, "FTSLED: Cerise 2U Pro" },
2213
  { 0x2CBC, "FTSLED: Cerise 2U Pro Wired" },
2214
  { 0x2CBD, "FTSLED: Cerise 4U Pro" },
2215
  { 0x2CBE, "FTSLED: Cerise 4U Pro Wired" },
2216
  { 0x2CBF, "FTSLED: Cerise Wired 1U" },
2217
  { 0x2CC0, "NEWSUBSTANCE Ltd: LoRa LED Controller" },
2218
  { 0x2CC1, "tarm AG: tarm BLAZE" },
2219
  { 0x2CC2, "Hondel Lighting Limited: HDS308A" },
2220
  { 0x2CC3, "Lighthaus: Lighthaus Controller A" },
2221
  { 0x2CC4, "Advatek Lighting Pty Ltd: PixLite T16X S Mk3" },
2222
  { 0x2CC5, "Chauvet Professional: Maverick Silens 2 SoloWash" },
2223
  { 0x2CC6, "kuwatec Inc: Ex4" },
2224
  { 0x2CC7, "Vari Lite: RigSwitchPlus" },
2225
  { 0x2CC8, "Cameo: P6" },
2226
  { 0x2CC9, "Cameo: OTOS W12" },
2227
  { 0x2CCA, "Cameo: OTOS W6" },
2228
  { 0x2CCB, "Cameo: OTOS W3" },
2229
  { 0x2CCC, "Cameo: OPUS X4" },
2230
  { 0x2CCD, "Cameo: ORON H2" },
2231
  { 0x2CCE, "Resolume: Resolume Arena" },
2232
  { 0x2CCF, "Martin Professional: MAC Viper XIP" },
2233
  { 0x2CD0, "RT DMX: RT DMX Device" },
2234
  { 0x2CD1, "Particle Studio: Pixel Postie" },
2235
  { 0x2CD2, "Colordreamer Technology Co Limited: CD Titan R8" },
2236
  { 0x2CD3, "Tea Engineering Ltd: RazzleDMX" },
2237
  { 0x2CD4, "DELTACAST: TriggersManager" },
2238
  { 0x2CD5, "Event Lighting Pty Ltd: APRO4_IP" },
2239
  { 0x2CD6, "Event Lighting Pty Ltd: APRO8" },
2240
  { 0x2CD7, "Event Lighting Pty Ltd: APRO4" },
2241
  { 0x2CD8, "Event Lighting Pty Ltd: APRO2" },
2242
  { 0x2CD9, "GLP German Light Products GmbH: XDC1 IP Hybrid" },
2243
  { 0x2CDA, "GLP German Light Products GmbH: JDC2 IP" },
2244
  { 0x2CDB, "GLP German Light Products GmbH: impression X5 Bar 1000" },
2245
  { 0x2CDC, "GLP German Light Products GmbH: impression X5 IP Bar" },
2246
  { 0x2CDD, "GLP German Light Products GmbH: impression X5 IP Maxx" },
2247
  { 0x2CDE, "GLP German Light Products GmbH: impression X5 Compact" },
2248
  { 0x2CDF, "GLP German Light Products GmbH: impression X5" },
2249
  { 0x2CE0, "Steinigke Showtechnic GmbH: LED Pixel Matrix Panel 2x5 RGBWW" },
2250
  { 0x2CE1, "Steinigke Showtechnic GmbH: LED Pixel Matrix Bar 10 RGBWW" },
2251
  { 0x2CE2, "Axion Lighting: Axion PoE WiFi DMX Controller" },
2252
  { 0x2CE3, "Fufeng ligthing: ANP4 PRO IP" },
2253
  { 0x2CE4, "Fufeng ligthing: ANP8 PRO" },
2254
  { 0x2CE5, "Fufeng ligthing: ANP4 PRO" },
2255
  { 0x2CE6, "Fufeng ligthing: ANP2 PRO" },
2256
  { 0x2CE7, "ROBERT JULIAT: TRISTAN 1189" },
2257
  { 0x2CE8, "ROBERT JULIAT: BIZET 1176" },
2258
  { 0x2CE9, "ROBERT JULIAT: BIZET 67X" },
2259
  { 0x2CEA, "Highlite International BV: Furion P602 Profile" },
2260
  { 0x2CEB, "Highlite International BV: Furion P402 Profile" },
2261
  { 0x2CEC, "Highlite International BV: Furion S602 Spot" },
2262
  { 0x2CED, "Highlite International BV: Furion S402 Spot" },
2263
  { 0x2CEE, "Highlite International BV: Furion W602 WashBeam" },
2264
  { 0x2CEF, "Highlite International BV: Furion W402 WashBeam" },
2265
  { 0x2CF0, "Highlite International BV: Furion H402 Hybrid" },
2266
  { 0x2CF1, "Highlite International BV: Furion B402 Beam" },
2267
  { 0x2CF2, "EXALUX: TiLINK" },
2268
  { 0x2CF3, "Optoma Corporation: Projector" },
2269
  { 0x2CF4, "Plura: SPTH1D" },
2270
  { 0x2CF5, "City Theatrical: DMXcat E" },
2271
  { 0x2CF6, "Chauvet Professional: Ovation E 2FCS" },
2272
  { 0x2CF7, "Chauvet Professional: Ovation Reve F 3S" },
2273
  { 0x2CF8, "Chauvet Professional: Ovation Reve E 3S" },
2274
  { 0x2CF9, "Chauvet Professional: Strike Array 1BC" },
2275
  { 0x2CFA, "Chauvet Professional: COLORado Solo FL" },
2276
  { 0x2CFB, "Artistic Licence Engineering Ltd: TRUSS GATEWAY 4 RDM" },
2277
  { 0x2CFC, "Artistic Licence Engineering Ltd: RACK DATA 8 RDM" },
2278
  { 0x2CFD, "Artistic Licence Engineering Ltd: RACK GATEWAY 12 RDM" },
2279
  { 0x2CFE, "Jiangmen Seekway Technology Limited: AN Controller" },
2280
  { 0x2CFF, "Jiangmen Seekway Technology Limited: A308" },
2281
  { 0x2D00, "Light Stream: Light Stream Player" },
2282
  { 0x2D01, "kw Veranstaltungstechnik: Smart Test Tool" },
2283
  { 0x2D02, "CLAYPAKY: VOLERO TWINS" },
2284
  { 0x2D03, "CLAYPAKY: VOLERO CUBE" },
2285
  { 0x2D04, "CLAYPAKY: PANIFY 2" },
2286
  { 0x2D05, "CLAYPAKY: ACTORIS FRESNEL" },
2287
  { 0x2D06, "CLAYPAKY: AROLLA WASH AQUA" },
2288
  { 0x2D07, "CLAYPAKY: AROLLA AQUA LT" },
2289
  { 0x2D08, "CLAYPAKY: ULTIMO BEAM" },
2290
  { 0x2D09, "CLAYPAKY: ULTIMO SHARPY" },
2291
  { 0x2D0A, "CLAYPAKY: ULTIMO HYBRID" },
2292
  { 0x2D0B, "CLAYPAKY: TAMBORA STORMY LINEAR" },
2293
  { 0x2D0C, "CLAYPAKY: TAMBORA GLARE" },
2294
  { 0x2D0D, "CLAYPAKY: TAMBORA STORMY" },
2295
  { 0x2D0E, "CLAYPAKY: TAMBORA RAYS" },
2296
  { 0x2D0F, "CLAYPAKY: MINI B SPARKY AQUA" },
2297
  { 0x2D10, "CLAYPAKY: MINI B AQUA PX" },
2298
  { 0x2D11, "Martin Professional: P3 PowerPort 500 IP Install" },
2299
  { 0x2D12, "Martin Professional: P3 PowerPort 500 IP Rental" },
2300
  { 0x2D13, "Martin Professional: P3 PowerPort 2000" },
2301
  { 0x2D14, "Martin Professional: Exterior DC Feeder" },
2302
  { 0x2D15, "Martin Professional: Exterior AC Feeder" },
2303
  { 0x2D16, "Martin Professional: Exterior Dot 9 Pro" },
2304
  { 0x2D17, "Martin Professional: Exterior Dot 4 Pro" },
2305
  { 0x2D18, "Hangzhou YD Illumination Co Ltd: LED Controller" },
2306
  { 0x2D19, "Martin Professional: Exterior Dot 1 Pro" },
2307
  { 0x2D1A, "Martin Professional: Exterior Dot HP Pro" },
2308
  { 0x2D1B, "TELMIC Neo: U bar Trans" },
2309
  { 0x2D1C, "TELMIC Neo: QUADTRA3" },
2310
  { 0x2D1D, "inoage GmbH: MADRIX StarterTool" },
2311
  { 0x2D1E, "inoage GmbH: MADRIX HARDWARE MANAGER" },
2312
  { 0x2D1F, "matrix: matrix" },
2313
  { 0x2D20, "CHAUVET Professional: Ovation Reve 1 Wash" },
2314
  { 0x2D21, "CHAUVET Professional: Ovation Reve 1 Profile" },
2315
  { 0x2D22, "CHAUVET Professional: Ovation Reve 1 Spot" },
2316
  { 0x2D23, "CHAUVET Professional: Ovation Reve 2 Wash" },
2317
  { 0x2D24, "CHAUVET Professional: Ovation Reve 2 Profile" },
2318
  { 0x2D25, "CHAUVET Professional: Strike Verve" },
2319
  { 0x2D26, "CLAYPAKY: AROLLA AQUA LT FS" },
2320
  { 0x2D27, "GLP German Light Products GmbH: impression X5 IP" },
2321
  { 0x2D28, "GLP German Light Products GmbH: GLP impression S500 Wash HC" },
2322
  { 0x2D29, "GLP German Light Products GmbH: GLP impression S500 Profile HC" },
2323
  { 0x2D2A, "GLP German Light Products GmbH: GLP impression S500 Profile HO" },
2324
  { 0x2D2B, "Newlab Srl: AN FORREST SPI" },
2325
  { 0x2D2C, "Obsidian Controls: Onyx" },
2326
  { 0x2D2D, "Prolights: ASTRABLADE100IP" },
2327
  { 0x2D2E, "Prolights: SUNBLASTFLX" },
2328
  { 0x2D2F, "Prolights: HALUPIXDUO" },
2329
  { 0x2D30, "CHAUVET Professional: Maverick Storm 1L Hybrid" },
2330
  { 0x2D31, "Prolights: ECLPANELIPHARD2X1" },
2331
  { 0x2D32, "Prolights: ECLPANELIPHARD1X1" },
2332
  { 0x2D33, "Prolights: ECLPANELIPSOFT2X1" },
2333
  { 0x2D34, "Prolights: ECLPANELIPSOFT1X1" },
2334
  { 0x2D35, "BRITEQ Beglec NV: BTI BLIZZARD PROFILE" },
2335
  { 0x2D36, "BRITEQ Beglec NV: BTI BLIZZARD BSW2" },
2336
  { 0x2D37, "BRITEQ Beglec NV: BTI BLIZZARD WASH2" },
2337
  { 0x2D38, "pro solution: sun star" },
2338
  { 0x2D39, "Showtec: Festoonlight Q4" },
2339
  { 0x2D3A, "Infinity: iW 1941" },
2340
  { 0x2D3B, "Showtec: Titan Strobe FLEX FX" },
2341
  { 0x2D3C, "Showtec: Octostrip FLEX" },
2342
  { 0x2D3D, "Showtec: NET 45 IP" },
2343
  { 0x2D3E, "Showtec: NET 43 IP" },
2344
  { 0x2D3F, "Showtec: SPI2 Install" },
2345
  { 0x2D40, "Showtec: NET 2 Panel" },
2346
  { 0x2D41, "Showtec: NET 2 Install" },
2347
  { 0x2D42, "Showtec: NET 2 5 Pocket" },
2348
  { 0x2D43, "Showtec: NET 2 3 Pocket" },
2349
  { 0x2D44, "WKL TEAM64: PROMYK 3 6" },
2350
  { 0x2D45, "CHAUVET Professional: Strike V" },
2351
  { 0x2D46, "CHAUVET Professional: Maveric Storm 1 Flex" },
2352
  { 0x2D47, "Showjockey Technology Co Ltd: SJ DMX E32" },
2353
  { 0x2D48, "Showjockey Technology Co Ltd: SJ DMX E24" },
2354
  { 0x2D49, "Showjockey Technology Co Ltd: SJ DMX E8" },
2355
  { 0x2D4A, "Showjockey Technology Co Ltd: SJ DMX E4" },
2356
  { 0x2D4B, "Showjockey Technology Co Ltd: SJ DMX E2" },
2357
  { 0x2D4C, "Audioeffetti: AE Node4" },
2358
  { 0x2D4D, "Audioeffetti: AE Node8" },
2359
  { 0x2D4E, "Chaostreff Backnang Ev: ChaosDMX" },
2360
  { 0x2D4F, "The White Rabbit Company Inc: SPM Controller" },
2361
  { 0x2D50, "FengYi: DLB" },
2362
  { 0x2D51, "Myostat Motion Control: CM1 T" },
2363
  { 0x2D52, "CHAUVET Professional: Maverick Storm 3 Profile" },
2364
  { 0x2D53, "Showjockey Technology Co Ltd: SJ DMX E100" },
2365
  { 0x2D54, "Steinigke Showtechnic GmbH: LED Pixel Ball PSU 5 MK2" },
2366
  { 0x2D55, "Quasar Science: Rainbow 2 and Double Rainbow" },
2367
  { 0x2D56, "Videndum: Astra IP" },
2368
  { 0x2D57, "CHAUVET Professional: Maverick Force X Spot" },
2369
  { 0x2D58, "CHAUVET Professional: Maverick Force X Profile" },
2370
  { 0x2D59, "CHAUVET Professional: Maveric Force X Spot" },
2371
  { 0x2D5A, "Luminex Lighting Control Equipment: LumiNode 8 IP" },
2372
  { 0x2D5B, "Benjamin Graf Ton und Medientechnik: DmxRgbDisplay" },
2373
  { 0x2D5C, "Cindy Professional Lighting Co Ltd: CL 180C BEAM" },
2374
  { 0x2D5D, "Cindy Professional Lighting Co Ltd: CL 1950 WASH" },
2375
  { 0x2D5E, "Cindy Professional Lighting Co Ltd: CL 2850 WASH" },
2376
  { 0x2D5F, "Cindy Professional Lighting Co Ltd: CL 650D HYBRID" },
2377
  { 0x2D60, "Cindy Professional Lighting Co Ltd: CL 800 BSWF" },
2378
  { 0x2D61, "Cindy Professional Lighting Co Ltd: CL 1800 WF" },
2379
  { 0x2D62, "Cindy Professional Lighting Co Ltd: CL 1800 BSWF" },
2380
  { 0x2D63, "Cindy Professional Lighting Co Ltd: CL 1060 WEAVER" },
2381
  { 0x2D64, "Prolights: AETHERBOX" },
2382
  { 0x2D65, "Prolights: PIXELBRUTE" },
2383
  { 0x2D66, "Prolights: ASTRAPROFILE900" },
2384
  { 0x2D67, "Prolights: ASTRAHYB260IP" },
2385
  { 0x2D68, "Integrated System Technologies Ltd: iDrive Ultima 36" },
2386
  { 0x2D69, "sqdlighting: SQD ZNJCX1 12" },
2387
  { 0x2D6A, "sqdlighting: SQD ZNJCX1 6" },
2388
  { 0x2D6B, "sqdlighting: SQD ZNFDQ1 8" },
2389
  { 0x2D6C, "sqdlighting: SQD ZNJCX 6" },
2390
  { 0x2D6D, "sqdlighting: SQD ZNJCX 12" },
2391
  { 0x2D6E, "sqdlighting: SQD NOODE2 8" },
2392
  { 0x2D6F, "sqdlighting: SQD NOODE2 4" },
2393
  { 0x2D70, "sqdlighting: SQD NOODE2 2" },
2394
  { 0x2D71, "sqdlighting: SQD NOODE1 2" },
2395
  { 0x2D72, "sqdlighting: SQD NOODE1 4" },
2396
  { 0x2D73, "sqdlighting: SQD NOODE1 8" },
2397
  { 0x2D74, "sqdlighting: SQD NODE1 2" },
2398
  { 0x2D75, "sqdlighting: SQD NODE1 2a" },
2399
  { 0x2D76, "sqdlighting: SQD NOODE2 2a" },
2400
  { 0x2D77, "sqdlighting: SQD NOODE2 4a" },
2401
  { 0x2D78, "sqdlighting: SQD NOODE2 8a" },
2402
  { 0x2D79, "Calvitia Limited: Wireless Pixel Driver" },
2403
  { 0x2D7A, "Plura: DTG" },
2404
  { 0x2D7B, "Plura: UD Stage" },
2405
  { 0x2D7C, "Artistic Licence: artCore" },
2406
  { 0x2D7D, "Huizhou LATU Film Equipment Co Ltd: SD1200B" },
2407
  { 0x2D7E, "EQ2: GinormoTime" },
2408
  { 0x2D7F, "De Sisti: OEMDeSisti" },
2409
  { 0x2D80, "L8 LLC: L8" },
2410
  { 0x2D81, "Martin Professional: VDO Sceptron XB 1000mm" },
2411
  { 0x2D82, "Martin Professional: VDO Sceptron XB 320mm" },
2412
  { 0x2D83, "Martin Professional: MAC Aura Raven XIP" },
2413
  { 0x2D84, "Blizzard Lighting LLC: Stingray" },
2414
  { 0x2D85, "Cindy Professional Lighting Co Ltd: CL 800PLUS BSWF" },
2415
  { 0x2D86, "Cindy Professional Lighting Co Ltd: CL 750 HYBRID" },
2416
  { 0x2D87, "Lumenpulse Lighting Inc: Lumenlink Pro" },
2417
  { 0x2D88, "Lumenpulse Lighting Inc: CBOX ExtendX" },
2418
  { 0x2D89, "Highlite International BV: Goliath" },
2419
  { 0x2D8A, "RMLX: StageThing" },
2420
  { 0x2D8B, "Singularity (UK) Ltd: RefCon" },
2421
  { 0x2D8C, "ADJ Products: Vizi Pix Z19" },
2422
  { 0x2D8D, "ADJ Products: Vintage Bar" },
2423
  { 0x2D8E, "GLP German Light Products GmbH: JDC Burst 1" },
2424
  { 0x2D8F, "GLP German Light Products GmbH: Creos" },
2425
  { 0x2D90, "GLP German Light Products GmbH: MAD MAXX CMY" },
2426
  { 0x2D91, "GLP German Light Products GmbH: MAD MAXX CW" },
2427
  { 0x2D92, "GLP German Light Products GmbH: Matrix Burst" },
2428
  { 0x2D93, "GLP German Light Products GmbH: Wild Bar 9X" },
2429
  { 0x2D94, "GLP German Light Products GmbH: Wild Batten 16" },
2430
  { 0x2D95, "GLP German Light Products GmbH: Wild Bar 16" },
2431
  { 0x2D96, "Dijiabaosheng: Projector" },
2432
  { 0x2D97, "Cronic Lighting: Cronic Node DMX Mini" },
2433
  { 0x2D98, "Cronic Lighting: Cronic Node DMX" },
2434
  { 0x2D99, "SQD lighting Co Limited: SQD ZNJCX112Z" },
2435
  { 0x2D9A, "SQD lighting Co Limited: SQD ZNJCX16Z" },
2436
  { 0x2D9B, "Highlite International BV: Furion FX402 Bar" },
2437
  { 0x2D9D, "Prolights: SUNRISE2FLXFC" },
2438
  { 0x2D9E, "Prolights: ASTRAHYB330IP" },
2439
  { 0x2D9F, "Prolights: ASTRAHYB330" },
2440
  { 0x2DA0, "Light Stream: Light Stream Converter 8Lite" },
2441
  { 0x2DA1, "Light Stream: Light Stream Converter 2" },
2442
  { 0x2DA2, "Light Stream: Light Stream Converter 6" },
2443
  { 0x2DA3, "SQD lighting Co Limited: SQD ZNFDQ14" },
2444
  { 0x2DA4, "SQD lighting Co Limited: CD90RACK 48i" },
2445
  { 0x2DA5, "SQD lighting Co Limited: CD90RACK 96i" },
2446
  { 0x2DA6, "8lightspace limited: Beambar" },
2447
  { 0x2DA7, "Vari-Lite: VLHive 151 Digital FX" },
2448
  { 0x2DA8, "Cindy Professional Lighting Co Ltd: CL400LS BEAM" },
2449
  { 0x2DA9, "Pyrotechnics Management Inc: FireOne TimeMachine" },
2450
  { 0x2DAA, "QubiCast GmbH: QubiCore" },
2451
  { 0x2DAB, "Prolights: ASTRABEAM120IP" },
2452
  { 0x2DAC, "NXT Lights: FLEXON L" },
2453
  { 0x2DAD, "NXT Lights: NEXON M" },
2454
  { 0x2DAE, "Sharp Corporation: Flat Panel Display" },
2455
  { 0x2DAF, "Sharp Corporation: Projector" },
2456
  { 0x2DB0, "GuangZhou Dream Lighting Equipment Co Ltd: DREAM L1600HP FLAG" },
2457
  { 0x2DB1, "GLP German Light Products GmbH: Matrix Eye 4" },
2458
  { 0x2DB2, "GLP German Light Products GmbH: Matrix Eye 2" },
2459
  { 0x2DB3, "CLAYPAKY: AROLLA AQUA SP" },
2460
  { 0x2DB4, "CLAYPAKY: AROLLA AQUA MP" },
2461
  { 0x2DB5, "CLAYPAKY: AROLLA AQUA HP FS" },
2462
  { 0x2DB6, "CLAYPAKY: AROLLA AQUA HP" },
2463
  { 0x2DB7, "CLAYPAKY: ULTIMO SKYBEAM" },
2464
  { 0x2DB8, "SQD lighting Co Limited: SQD SN2048 H" },
2465
  { 0x2DB9, "SQD lighting Co Limited: SQD SN1024 H" },
2466
  { 0x2DBA, "Cindy Professional Lighting Co Ltd: CL 1000 BSWF" },
2467
  { 0x2DBB, "Cindy Professional Lighting Co Ltd: CL 600C TRIDENT" },
2468
  { 0x2DBC, "Cindy Professional Lighting Co Ltd: CL 200C PUZZLE" },
2469
  { 0x2DBD, "Cindy Professional Lighting Co Ltd: CL 200C COMPACT PUZZLE" },
2470
  { 0x2DBE, "Calvitia Limited: Wired Pixel Driver" },
2471
  { 0x2DBF, "Dijiabaosheng: Projector" },
2472
  { 0x2DC0, "Chauvet Professional: COLORado Edge 3" },
2473
  { 0x2DC1, "Chauvet Professional: COLORado Edge 1" },
2474
  { 0x2DC2, "Visual Productions BV: SpiNode" },
2475
  { 0x2DC3, "Visual Productions BV: RdmNode" },
2476
  { 0x2DC4, "Chauvet: Ovation Reve 2 Profile" },
2477
  { 0x2DC5, "Equipson SA: NODE 4" },
2478
  { 0x2DC6, "Equipson SA: NODE 2" },
2479
  { 0x2DC7, "Equipson SA: NODE 1" },
2480
  { 0x2DC8, "CEE Lighting Equipment Co Ltd: NP4096" },
2481
  { 0x2DC9, "TELMIC Neo: ADC20" },
2482
  { 0x2DCA, "Lumenpulse Lighting Inc: LumenID software" },
2483
  { 0x2DCB, "Cindy Professional Lighting Co Ltd: CL 780D BEAM" },
2484
  { 0x2DCC, "Cindy Professional Lighting Co Ltd: CP3 WASH" },
2485
  { 0x2DCD, "Cindy Professional Lighting Co Ltd: CP3 BSWF" },
2486
  { 0x2DCE, "Cindy Professional Lighting Co Ltd: CP2 BAR" },
2487
  { 0x2DCF, "Blizzard Lighting: Stingray DMX App" },
2488
  { 0x2DD0, "ROBERT JULIAT: BIZET 370" },
2489
  { 0x2DD1, "ROBERT JULIAT: BIZET 770X" },
2490
  { 0x2DD2, "ROBERT JULIAT: BIZET 370 MOT" },
2491
  { 0x2DD3, "ROBERT JULIAT: MORGANE 1489" },
2492
  { 0x2DD4, "SWISSON AG: XND 1" },
2493
  { 0x2DD5, "The Viva Foundation of South Africa: Hybrid Mini 1000T" },
2494
  { 0x2DD6, "INACKS: IS3730" },
2495
  { 0x2DD7, "Changsha ZMIOT Co Ltd: ZM-AF8K" },
2496
  { 0x2DD8, "Foshan Xinzhijie Optoelectronics: XZJ led800" },
2497
  { 0x2DD9, "Foshan Xinzhijie Optoelectronics: XZJ 8CH LNC" },
2498
  { 0x2DDA, "Foshan Xinzhijie Optoelectronics: XZJ 4CH LNC" },
2499
  { 0x2DDB, "Foshan Xinzhijie Optoelectronics: XZJ 2CH LNC" },
2500
  { 0x2DDC, "Foshan Xinzhijie Optoelectronics: XZJ 2CH LNC" },
2501
  { 0x2DDD, "ashl ee: Triggerino" },
2502
  { 0x2DDE, "Highlite International BV: Signature TF480C6 Fresnel" },
2503
  { 0x2DDF, "Highlite International BV: Signature TS480C6 Profile" },
2504
  { 0x2DE0, "PXM: Px749" },
2505
  { 0x2DE1, "MSL: BT NODE24 Mk2" },
2506
  { 0x2DE2, "Changsha ZMIOT Co Ltd: ZM AF08" },
2507
  { 0x2DE3, "roca: burro" },
2508
  { 0x2DE4, "Vari Lite: 3 Port DIN PCB PN 97 0387" },
2509
  { 0x2DE5, "Vari Lite: 3 Port Embedded PCB PN 74261" },
2510
  { 0x2DE6, "Vari Lite: 8 Port Node PN 65168" },
2511
  { 0x2DE7, "Vari Lite: 2 Port Node PN 65162" },
2512
  { 0x2DE8, "Vari Lite: Single Gang Node PN 65161" },
2513
  { 0x2DE9, "tarm AG: tarm REVOLT RGB" },
2514
  { 0x2DEA, "tarm AG: tarm REVOLT" },
2515
  { 0x2DEB, "Prolights: ASTRAPROFILE600IP" },
2516
  { 0x2DEC, "Prolights: ASTRAPROFILE400" },
2517
  { 0x2DED, "Prolights: ASTRAWASH37PIX" },
2518
  { 0x2DEE, "Prolights: ASTRAWASH19PIXIP" },
2519
  { 0x2DEF, "Prolights: ASTRAWASH19PIX" },
2520
  { 0x2DF0, "Prolights: ASTRAWASH7PIXIP" },
2521
  { 0x2DF1, "Prolights: ASTRAWASH7PIX" },
2522
  { 0x2DF2, "Prolights: ASTRAPROF300LTIP" },
2523
  { 0x2DF3, "Prolights: ASTRAPROF500LTIP" },
2524
  { 0x2DF4, "Prolights: LUMIPIXXB100" },
2525
  { 0x2DF5, "Prolights: AETHERBOXTWO" },
2526
  { 0x2DF6, "Prolights: ASTRAPROF1000MC" },
2527
  { 0x2DF7, "Prolights: AETHERBOXONE" },
2528
  { 0x2DF8, "Prolights: HALUSTRIPDUO" },
2529
  { 0x2DF9, "Prolights: SUNBARFLX" },
2530
  { 0x2DFA, "Prolights: SUNRISE2FLXVW" },
2531
  { 0x2DFB, "Prolights: ASTRAPROF1200IP" },
2532
  { 0x2DFC, "BRITEQ Beglec NV: BT NODE28x" },
2533
  { 0x2DFD, "Chauvet Professional: Epix X1 IP 50cm" },
2534
  { 0x2DFE, "Chauvet Professional: Epix X1 IP 100cm" },
2535
  { 0x2DFF, "Chauvet Professional: Epix Drive 4X IP" },
2536
  { 0x2E00, "PIXL Lighting Inc.: PixlGear" },
2537
  { 0x8000, "Artistic Licence Engineering Ltd: Netgate XT" },
2538
  { 0x8001, "Artistic Licence Engineering Ltd: Net Patch" },
2539
  { 0x8002, "Artistic Licence Engineering Ltd: DMX Hub XT" },
2540
  { 0x8003, "Artistic Licence Engineering Ltd: Four Play" },
2541
  { 0xFFFF, "Artistic Licence Engineering Ltd: OemGlobal" },
2542
  { 0,      NULL }
2543
};
2544
static value_string_ext artnet_oem_code_vals_ext = VALUE_STRING_EXT_INIT(artnet_oem_code_vals);
2545
2546
static const value_string artnet_indicator_state_vals[] = {
2547
  { 0x00, "unknown" },
2548
  { 0x01, "Locate Mode" },
2549
  { 0x02, "Mute Mode" },
2550
  { 0x03, "Normal Mode" },
2551
  { 0,      NULL }
2552
};
2553
2554
static const true_false_string tfs_artnet_rom_booted = {
2555
  "Booted from ROM",
2556
  "Normal boot (from flash)"
2557
};
2558
2559
static const value_string artnet_port_prog_auth_vals[] = {
2560
  { 0x00, "unknown" },
2561
  { 0x01, "front panel" },
2562
  { 0x02, "network" },
2563
  { 0x03, "unused" },
2564
  { 0,      NULL }
2565
};
2566
2567
#define ARTNET_PT_DMX512     0x00
2568
#define ARTNET_PT_MIDI       0x01
2569
#define ARTNET_PT_AVAB       0x02
2570
#define ARTNET_PT_CMX        0x03
2571
#define ARTNET_PT_ADB625     0x04
2572
#define ARTNET_PT_ARTNET     0x05
2573
#define ARTNET_PT_DALI       0x06
2574
2575
#define ARTNET_PT_DIR_NONE   0x00
2576
#define ARTNET_PT_DIR_INPUT  0x40
2577
#define ARTNET_PT_DIR_OUTPUT 0x80
2578
#define ARTNET_PT_DIR_BIDIR  0xc0
2579
2580
static const value_string artnet_port_type_vals[] = {
2581
  { ARTNET_PT_DIR_NONE                     , "Not present" },
2582
  { ARTNET_PT_DIR_INPUT  | ARTNET_PT_DMX512, "DMX512 -> Art-Net" },
2583
  { ARTNET_PT_DIR_INPUT  | ARTNET_PT_MIDI,   "MIDI -> Art-Net" },
2584
  { ARTNET_PT_DIR_INPUT  | ARTNET_PT_AVAB,   "Avab -> Art-Net" },
2585
  { ARTNET_PT_DIR_INPUT  | ARTNET_PT_CMX,    "Colortran CMX -> Art-Net" },
2586
  { ARTNET_PT_DIR_INPUT  | ARTNET_PT_ADB625, "ADB 62.5 -> Art-Net" },
2587
  { ARTNET_PT_DIR_INPUT  | ARTNET_PT_ARTNET, "Art-Net -> Art-Net" },
2588
  { ARTNET_PT_DIR_INPUT  | ARTNET_PT_DALI,   "DALI -> Art-Net" },
2589
  { ARTNET_PT_DIR_OUTPUT | ARTNET_PT_DMX512, "Art-Net -> DMX512" },
2590
  { ARTNET_PT_DIR_OUTPUT | ARTNET_PT_MIDI,   "Art-Net -> MIDI" },
2591
  { ARTNET_PT_DIR_OUTPUT | ARTNET_PT_AVAB,   "Art-Net -> Avab" },
2592
  { ARTNET_PT_DIR_OUTPUT | ARTNET_PT_CMX,    "Art-Net -> Colortran CMX" },
2593
  { ARTNET_PT_DIR_OUTPUT | ARTNET_PT_ADB625, "Art-Net -> ADB 62.5" },
2594
  { ARTNET_PT_DIR_OUTPUT | ARTNET_PT_ARTNET, "Art-Net -> Art-Net" },
2595
  { ARTNET_PT_DIR_OUTPUT | ARTNET_PT_DALI,   "Art-Net -> DALI" },
2596
  { ARTNET_PT_DIR_BIDIR  | ARTNET_PT_DMX512, "Art-Net <-> DMX512" },
2597
  { ARTNET_PT_DIR_BIDIR  | ARTNET_PT_MIDI,   "Art-Net <-> MIDI" },
2598
  { ARTNET_PT_DIR_BIDIR  | ARTNET_PT_AVAB,   "Art-Net <-> Avab" },
2599
  { ARTNET_PT_DIR_BIDIR  | ARTNET_PT_CMX,    "Art-Net <-> Colortran CMX" },
2600
  { ARTNET_PT_DIR_BIDIR  | ARTNET_PT_ADB625, "Art-Net <-> ADB 62.5" },
2601
  { ARTNET_PT_DIR_BIDIR  | ARTNET_PT_ARTNET, "Art-Net <-> Art-Net" },
2602
  { ARTNET_PT_DIR_BIDIR  | ARTNET_PT_DALI,   "Art-Net <-> DALI" },
2603
  { 0,      NULL }
2604
};
2605
2606
2607
#define ARTNET_AC_NONE           0x00
2608
#define ARTNET_AC_CANCEL_MERGE   0x01
2609
#define ARTNET_AC_LED_NORMAL     0x02
2610
#define ARTNET_AC_LED_MUTE       0x03
2611
#define ARTNET_AC_LED_LOCATE     0x04
2612
#define ARTNET_AC_RESET_RX_FLAGS 0x05
2613
#define ARTNET_AC_ANALYSIS_ON    0x06
2614
#define ARTNET_AC_ANALYSIS_OFF   0x07
2615
#define ARTNET_AC_FAIL_HOLD      0x08
2616
#define ARTNET_AC_FAIL_ZERO      0x09
2617
#define ARTNET_AC_FAIL_FULL      0x0A
2618
#define ARTNET_AC_FAIL_SCENE     0x0B
2619
#define ARTNET_AC_FAIL_RECORD    0x0C
2620
#define ARTNET_AC_MERGE_LTP0     0x10
2621
#define ARTNET_AC_MERGE_LTP1     0x11
2622
#define ARTNET_AC_MERGE_LTP2     0x12
2623
#define ARTNET_AC_MERGE_LTP3     0x13
2624
#define ARTNET_AC_DIR_TX0        0x20
2625
#define ARTNET_AC_DIR_TX1        0x21
2626
#define ARTNET_AC_DIR_TX2        0x22
2627
#define ARTNET_AC_DIR_TX3        0x23
2628
#define ARTNET_AC_DIR_RX0        0x30
2629
#define ARTNET_AC_DIR_RX1        0x31
2630
#define ARTNET_AC_DIR_RX2        0x32
2631
#define ARTNET_AC_DIR_RX3        0x33
2632
#define ARTNET_AC_MERGE_HTP0     0x50
2633
#define ARTNET_AC_MERGE_HTP1     0x51
2634
#define ARTNET_AC_MERGE_HTP2     0x52
2635
#define ARTNET_AC_MERGE_HTP3     0x53
2636
#define ARTNET_AC_ARTNET_SEL0    0x60
2637
#define ARTNET_AC_ARTNET_SEL1    0x61
2638
#define ARTNET_AC_ARTNET_SEL2    0x62
2639
#define ARTNET_AC_ARTNET_SEL3    0x63
2640
#define ARTNET_AC_ACN_SEL0       0x70
2641
#define ARTNET_AC_ACN_SEL1       0x71
2642
#define ARTNET_AC_ACN_SEL2       0x72
2643
#define ARTNET_AC_ACN_SEL3       0x73
2644
#define ARTNET_AC_CLEAR_OP0      0x90
2645
#define ARTNET_AC_CLEAR_OP1      0x91
2646
#define ARTNET_AC_CLEAR_OP2      0x92
2647
#define ARTNET_AC_CLEAR_OP3      0x93
2648
#define ARTNET_AC_STYLE_DELTA0   0xA0
2649
#define ARTNET_AC_STYLE_DELTA1   0xA1
2650
#define ARTNET_AC_STYLE_DELTA2   0xA2
2651
#define ARTNET_AC_STYLE_DELTA3   0xA3
2652
#define ARTNET_AC_STYLE_CONST0   0xB0
2653
#define ARTNET_AC_STYLE_CONST1   0xB1
2654
#define ARTNET_AC_STYLE_CONST2   0xB2
2655
#define ARTNET_AC_STYLE_CONST3   0xB3
2656
#define ARTNET_AC_RDM_ENABLE0    0xC0
2657
#define ARTNET_AC_RDM_ENABLE1    0xC1
2658
#define ARTNET_AC_RDM_ENABLE2    0xC2
2659
#define ARTNET_AC_RDM_ENABLE3    0xC3
2660
#define ARTNET_AC_RDM_DISABLE0   0xD0
2661
#define ARTNET_AC_RDM_DISABLE1   0xD1
2662
#define ARTNET_AC_RDM_DISABLE2   0xD2
2663
#define ARTNET_AC_RDM_DISABLE3   0xD3
2664
#define ARTNET_AC_BQP0           0xE0
2665
#define ARTNET_AC_BQP1           0xE1
2666
#define ARTNET_AC_BQP2           0xE2
2667
#define ARTNET_AC_BQP3           0xE3
2668
#define ARTNET_AC_BQP4           0xE4
2669
#define ARTNET_AC_BQP5           0xE5
2670
#define ARTNET_AC_BQP6           0xE6
2671
#define ARTNET_AC_BQP7           0xE7
2672
#define ARTNET_AC_BQP8           0xE8
2673
#define ARTNET_AC_BQP9           0xE9
2674
#define ARTNET_AC_BQP10          0xEA
2675
#define ARTNET_AC_BQP11          0xEB
2676
#define ARTNET_AC_BQP12          0xEC
2677
#define ARTNET_AC_BQP13          0xED
2678
#define ARTNET_AC_BQP14          0xEE
2679
#define ARTNET_AC_BQP15          0xEF
2680
2681
static const value_string artnet_address_command_vals[] = {
2682
  { ARTNET_AC_NONE,            "No Action" },
2683
  { ARTNET_AC_CANCEL_MERGE,    "Cancel merge" },
2684
  { ARTNET_AC_LED_NORMAL,      "LED Normal" },
2685
  { ARTNET_AC_LED_MUTE,        "LED Mute" },
2686
  { ARTNET_AC_LED_LOCATE,      "LED Locate" },
2687
  { ARTNET_AC_RESET_RX_FLAGS,  "Reset SIP text" },
2688
  { ARTNET_AC_ANALYSIS_ON,     "Enable analysis/debugging" },
2689
  { ARTNET_AC_ANALYSIS_OFF,    "Disable analysis/debugging" },
2690
  { ARTNET_AC_FAIL_HOLD,       "AcFail: Set outputs to hold last state" },
2691
  { ARTNET_AC_FAIL_ZERO,       "AcFail: Set outputs to zero" },
2692
  { ARTNET_AC_FAIL_FULL,       "AcFail: Set outputs to full" },
2693
  { ARTNET_AC_FAIL_SCENE,      "AcFail: Set outputs to failsafe scene" },
2694
  { ARTNET_AC_FAIL_RECORD,     "AcFail: Record outputs as failsafe scene" },
2695
  { ARTNET_AC_MERGE_LTP0,      "DMX port 1 LTP" },
2696
  { ARTNET_AC_MERGE_LTP1,      "DMX port 2 LTP" },
2697
  { ARTNET_AC_MERGE_LTP2,      "DMX port 3 LTP" },
2698
  { ARTNET_AC_MERGE_LTP3,      "DMX port 4 LTP" },
2699
  { ARTNET_AC_DIR_TX0,         "Set Port 0 direction to output" },
2700
  { ARTNET_AC_DIR_TX1,         "Set Port 1 direction to output (deprecated)" },
2701
  { ARTNET_AC_DIR_TX2,         "Set Port 2 direction to output (deprecated)" },
2702
  { ARTNET_AC_DIR_TX3,         "Set Port 3 direction to output (deprecated)" },
2703
  { ARTNET_AC_DIR_RX0,         "Set Port 0 direction to input" },
2704
  { ARTNET_AC_DIR_RX1,         "Set Port 1 direction to input (deprecated)" },
2705
  { ARTNET_AC_DIR_RX2,         "Set Port 2 direction to input (deprecated)" },
2706
  { ARTNET_AC_DIR_RX3,         "Set Port 3 direction to input (deprecated)" },
2707
  { ARTNET_AC_MERGE_HTP0,      "DMX port 1 HTP" },
2708
  { ARTNET_AC_MERGE_HTP1,      "DMX port 2 HTP" },
2709
  { ARTNET_AC_MERGE_HTP2,      "DMX port 3 HTP" },
2710
  { ARTNET_AC_MERGE_HTP3,      "DMX port 4 HTP" },
2711
  { ARTNET_AC_ARTNET_SEL0,     "DMX port 1 Art-Net -> DMX/RDM" },
2712
  { ARTNET_AC_ARTNET_SEL1,     "DMX port 2 Art-Net -> DMX/RDM" },
2713
  { ARTNET_AC_ARTNET_SEL2,     "DMX port 3 Art-Net -> DMX/RDM" },
2714
  { ARTNET_AC_ARTNET_SEL3,     "DMX port 4 Art-Net -> DMX/RDM" },
2715
  { ARTNET_AC_ACN_SEL0,        "DMX port 1 Art-Net -> RDM, sACN -> DMX" },
2716
  { ARTNET_AC_ACN_SEL1,        "DMX port 2 Art-Net -> RDM, sACN -> DMX" },
2717
  { ARTNET_AC_ACN_SEL2,        "DMX port 3 Art-Net -> RDM, sACN -> DMX" },
2718
  { ARTNET_AC_ACN_SEL3,        "DMX port 4 Art-Net -> RDM, sACN -> DMX" },
2719
  { ARTNET_AC_CLEAR_OP0,       "Clear DMX port 1" },
2720
  { ARTNET_AC_CLEAR_OP1,       "Clear DMX port 2" },
2721
  { ARTNET_AC_CLEAR_OP2,       "Clear DMX port 3" },
2722
  { ARTNET_AC_CLEAR_OP3,       "Clear DMX port 4" },
2723
  { ARTNET_AC_STYLE_DELTA0,    "DMX port 1 delta mode" },
2724
  { ARTNET_AC_STYLE_DELTA1,    "DMX port 2 delta mode" },
2725
  { ARTNET_AC_STYLE_DELTA2,    "DMX port 3 delta mode" },
2726
  { ARTNET_AC_STYLE_DELTA3,    "DMX port 4 delta mode" },
2727
  { ARTNET_AC_STYLE_CONST0,    "DMX port 1 constant mode" },
2728
  { ARTNET_AC_STYLE_CONST1,    "DMX port 2 constant mode" },
2729
  { ARTNET_AC_STYLE_CONST2,    "DMX port 3 constant mode" },
2730
  { ARTNET_AC_STYLE_CONST3,    "DMX port 4 constant mode" },
2731
  { ARTNET_AC_RDM_ENABLE0,     "DMX port 1 enable RDM" },
2732
  { ARTNET_AC_RDM_ENABLE1,     "DMX port 2 enable RDM" },
2733
  { ARTNET_AC_RDM_ENABLE2,     "DMX port 3 enable RDM" },
2734
  { ARTNET_AC_RDM_ENABLE3,     "DMX port 4 enable RDM" },
2735
  { ARTNET_AC_RDM_DISABLE0,    "DMX port 1 disable RDM" },
2736
  { ARTNET_AC_RDM_DISABLE1,    "DMX port 2 disable RDM" },
2737
  { ARTNET_AC_RDM_DISABLE2,    "DMX port 3 disable RDM" },
2738
  { ARTNET_AC_RDM_DISABLE3,    "DMX port 4 disable RDM" },
2739
  { ARTNET_AC_BQP0,            "Set BackgroundQueuePolicy to 0 (Collect using STATUS_NONE)" },
2740
  { ARTNET_AC_BQP1,            "Set BackgroundQueuePolicy to 1 (Collect using STATUS_ADVISORY)" },
2741
  { ARTNET_AC_BQP2,            "Set BackgroundQueuePolicy to 2 (Collect using STATUS_WARNING)" },
2742
  { ARTNET_AC_BQP3,            "Set BackgroundQueuePolicy to 3 (Collect using STATUS_ERROR)" },
2743
  { ARTNET_AC_BQP4,            "Set BackgroundQueuePolicy to 4 (Disabled)" },
2744
  { ARTNET_AC_BQP5,            "Set BackgroundQueuePolicy to 5 (user defined)" },
2745
  { ARTNET_AC_BQP6,            "Set BackgroundQueuePolicy to 6 (user defined)" },
2746
  { ARTNET_AC_BQP7,            "Set BackgroundQueuePolicy to 7 (user defined)" },
2747
  { ARTNET_AC_BQP8,            "Set BackgroundQueuePolicy to 8 (user defined)" },
2748
  { ARTNET_AC_BQP9,            "Set BackgroundQueuePolicy to 9 (user defined)" },
2749
  { ARTNET_AC_BQP10,           "Set BackgroundQueuePolicy to 10 (user defined)" },
2750
  { ARTNET_AC_BQP11,           "Set BackgroundQueuePolicy to 11 (user defined)" },
2751
  { ARTNET_AC_BQP12,           "Set BackgroundQueuePolicy to 12 (user defined)" },
2752
  { ARTNET_AC_BQP13,           "Set BackgroundQueuePolicy to 13 (user defined)" },
2753
  { ARTNET_AC_BQP14,           "Set BackgroundQueuePolicy to 14 (user defined)" },
2754
  { ARTNET_AC_BQP15,           "Set BackgroundQueuePolicy to 15 (user defined)" },
2755
  { 0,                         NULL }
2756
};
2757
2758
#define ARTNET_FT_FIRM_FIRST 0x00
2759
#define ARTNET_FT_FIRM_CONT  0x01
2760
#define ARTNET_FT_FIRM_LAST  0x02
2761
#define ARTNET_FT_UBEA_FIRST 0x03
2762
#define ARTNET_FT_UBEA_CONT  0x04
2763
#define ARTNET_FT_UBEA_LAST  0x05
2764
2765
static const value_string artnet_firmware_master_type_vals[] = {
2766
  { ARTNET_FT_FIRM_FIRST, "FirmFirst" },
2767
  { ARTNET_FT_FIRM_CONT,  "FirmCont" },
2768
  { ARTNET_FT_FIRM_LAST,  "FirmLast" },
2769
  { ARTNET_FT_UBEA_FIRST, "UbeaFirst" },
2770
  { ARTNET_FT_UBEA_CONT,  "UbeaCont" },
2771
  { ARTNET_FT_UBEA_LAST,  "UbeaLast" },
2772
  { 0,                    NULL }
2773
};
2774
2775
#define ARTNET_FRT_FIRM_BLOCK_GOOD 0x00
2776
#define ARTNET_FRT_FIRM_ALL_GOOD   0x01
2777
#define ARTNET_FRT_FIRM_FAIL       0xff
2778
2779
static const value_string artnet_firmware_reply_type_vals[] = {
2780
  { ARTNET_FRT_FIRM_BLOCK_GOOD, "FirmBlockGood" },
2781
  { ARTNET_FRT_FIRM_ALL_GOOD,   "FirmAllGood" },
2782
  { ARTNET_FRT_FIRM_FAIL,       "FirmFail" },
2783
  { 0,                          NULL }
2784
};
2785
2786
#define ARTNET_TRC_TOD_FULL    0x00
2787
2788
static const value_string artnet_tod_request_command_vals[] = {
2789
  { ARTNET_TRC_TOD_FULL,    "TodFull" },
2790
  { 0,                      NULL }
2791
};
2792
2793
#define ARTNET_TDC_TOD_FULL    0x00
2794
#define ARTNET_TDC_TOD_NAK     0xFF
2795
2796
static const value_string artnet_tod_data_command_vals[] = {
2797
  { ARTNET_TDC_TOD_FULL,    "TodFull" },
2798
  { ARTNET_TDC_TOD_NAK,     "TodNak" },
2799
  { 0,                      NULL }
2800
};
2801
2802
#define ARTNET_TCC_ATC_NONE     0x00
2803
#define ARTNET_TCC_ATC_FLUSH    0x01
2804
#define ARTNET_TCC_ATC_END      0x02
2805
#define ARTNET_TCC_ATC_INC_ON   0x03
2806
#define ARTNET_TCC_ATC_INC_OFF  0x04
2807
2808
static const value_string artnet_tod_control_command_vals[] = {
2809
  { ARTNET_TCC_ATC_NONE,    "AtcNone" },
2810
  { ARTNET_TCC_ATC_FLUSH,   "AtcFlush" },
2811
  { ARTNET_TCC_ATC_END,     "AtcEnd" },
2812
  { ARTNET_TCC_ATC_INC_ON,  "AtcIncOn" },
2813
  { ARTNET_TCC_ATC_INC_OFF, "AtcIncOff" },
2814
  { 0,                      NULL }
2815
};
2816
2817
#define ARTNET_RC_AR_PROCESS  0x00
2818
2819
static const value_string artnet_rdm_command_vals[] = {
2820
  { ARTNET_RC_AR_PROCESS,  "ArProcess" },
2821
  { 0,                     NULL }
2822
};
2823
2824
0
#define ARTNET_CC_DISCOVERY_COMMAND          0x10
2825
0
#define ARTNET_CC_DISCOVERY_COMMAND_RESPONSE 0x11
2826
0
#define ARTNET_CC_GET_COMMAND                0x20
2827
0
#define ARTNET_CC_GET_COMMAND_RESPONSE       0x21
2828
0
#define ARTNET_CC_SET_COMMAND                0x30
2829
0
#define ARTNET_CC_SET_COMMAND_RESPONSE       0x31
2830
2831
static const value_string artnet_cc_vals[] = {
2832
  { ARTNET_CC_DISCOVERY_COMMAND,          "Discovery Command" },
2833
  { ARTNET_CC_DISCOVERY_COMMAND_RESPONSE, "Discovery Command Response" },
2834
  { ARTNET_CC_GET_COMMAND,                "Get Command" },
2835
  { ARTNET_CC_GET_COMMAND_RESPONSE,       "Get Command Response" },
2836
  { ARTNET_CC_SET_COMMAND,                "Set Command" },
2837
  { ARTNET_CC_SET_COMMAND_RESPONSE,       "Set Command Response" },
2838
  { 0, NULL },
2839
};
2840
2841
#define ARTNET_FILE_TYPE_FIRST  0x00
2842
#define ARTNET_FILE_TYPE_NORM   0x01
2843
#define ARTNET_FILE_TYPE_LAST   0x02
2844
2845
static const value_string artnet_file_type_vals[] = {
2846
  { ARTNET_FILE_TYPE_FIRST, "First file packet" } ,
2847
  { ARTNET_FILE_TYPE_NORM,  "File packet" } ,
2848
  { ARTNET_FILE_TYPE_LAST,  "Final file packet" } ,
2849
  { 0, NULL },
2850
};
2851
2852
static const char * artnet_poll_reply_node_report_regex = "^#([A-Fa-f0-9]{4}) \\[?([0-9]+)\\]? (.{1,56})$";
2853
2854
static const value_string vals_artnet_poll_reply_style[] = {
2855
  { 0x00, "StNode (Art-Net to DMX device)" },
2856
  { 0x01, "StController (Lighting console)" },
2857
  { 0x02, "StMedia (Medial server)" },
2858
  { 0x03, "StRoute (Network routing device)" },
2859
  { 0x04, "StBackup (Backup device)" },
2860
  { 0x05, "StConfig (Configuration or diagnostic tool)" },
2861
  { 0x06, "StVisual (Visualizer)" },
2862
  { 0x00, NULL },
2863
};
2864
2865
static const true_false_string tfs_artnet_poll_reply_tx_and_conversion_proto = {
2866
  "sACN",
2867
  "Art-Net"
2868
};
2869
2870
static const true_false_string tfs_artnet_poll_reply_status2_bigaddr_supported = {
2871
  "15bit Port-Address",
2872
  "8bit Port-Address"
2873
};
2874
2875
static const true_false_string tfs_artnet_poll_reply_output_style = {
2876
  "continuous",
2877
  "delta"
2878
};
2879
2880
static const true_false_string tfs_artnet_poll_reply_output_discovery = {
2881
  "Currently not running",
2882
  "Currently running"
2883
};
2884
2885
static const value_string vals_artnet_poll_reply_status3_failsafe_state[] = {
2886
  { 0x00, "Hold last state" },
2887
  { 0x01, "All outputs to zero" },
2888
  { 0x02, "All outputs to full" },
2889
  { 0x03, "Playback failsafe scene" },
2890
  { 0x00, NULL }
2891
};
2892
2893
static const value_string vals_artnet_poll_reply_node_report_status_code[] = {
2894
  { 0x0000, "RcDebug" },
2895
  { 0x0001, "RcPowerOk" },
2896
  { 0x0002, "RcPowerFail" },
2897
  { 0x0003, "RcSocketWr1" },
2898
  { 0x0004, "RcParseFail" },
2899
  { 0x0005, "RcUdpFail" },
2900
  { 0x0006, "RcShNameOk" },
2901
  { 0x0007, "RcLoNameOk" },
2902
  { 0x0008, "RcDmxError" },
2903
  { 0x0009, "RcDmxUdpFull" },
2904
  { 0x000A, "RcDmxRxFull" },
2905
  { 0x000B, "RcSwitchErr" },
2906
  { 0x000C, "RcConfigErr" },
2907
  { 0x000D, "RcDmxShort" },
2908
  { 0x000E, "RcFirmwareFail" },
2909
  { 0x000F, "RcUserFail" },
2910
  { 0x0010, "RcFactoryRes" },
2911
  { 0x0000, NULL }
2912
};
2913
2914
static const range_string vals_artnet_poll_reply_bg_queue_policy[] = {
2915
  {   0,   0, "Collect using STATUS_NONE" },
2916
  {   1,   1, "Collect using STATUS_ADVISORY" },
2917
  {   2,   2, "Collect using STATUS_WARNING" },
2918
  {   3,   3, "Collect using STATUS_ERROR" },
2919
  {   4,   4, "Collection disabled" },
2920
  {   5, 250, "Manufacturer defined" },
2921
  { 251, 255, "Reserved" },
2922
  {   0,   0, NULL}
2923
};
2924
2925
/* Define the artnet proto */
2926
static int proto_artnet;
2927
2928
/* general */
2929
static int hf_artnet_filler;
2930
static int hf_artnet_spare;
2931
static int hf_artnet_data;
2932
static int hf_artnet_excess_bytes;
2933
2934
/* Header */
2935
static int hf_artnet_header;
2936
static int hf_artnet_header_id;
2937
static int hf_artnet_header_opcode;
2938
static int hf_artnet_header_protver;
2939
2940
/* ArtPoll */
2941
static int hf_artnet_poll;
2942
static int hf_artnet_poll_talktome;
2943
static int hf_artnet_poll_talktome_reply_change;
2944
static int hf_artnet_poll_talktome_diag;
2945
static int hf_artnet_poll_talktome_diag_unicast;
2946
static int hf_artnet_poll_talktome_vlc;
2947
static int hf_artnet_poll_talktome_targeted;
2948
2949
static int hf_artnet_poll_diag_priority;
2950
static int hf_artnet_poll_target_port_top;
2951
static int hf_artnet_poll_target_port_bottom;
2952
static int hf_artnet_poll_esta_man;
2953
static int hf_artnet_poll_oem;
2954
2955
static int ett_artnet_poll_talktome;
2956
2957
static int * const artnet_poll_talktome_fields[] = {
2958
  &hf_artnet_poll_talktome_reply_change,
2959
  &hf_artnet_poll_talktome_diag,
2960
  &hf_artnet_poll_talktome_diag_unicast,
2961
  &hf_artnet_poll_talktome_vlc,
2962
  &hf_artnet_poll_talktome_targeted,
2963
  NULL
2964
};
2965
2966
static const true_false_string tfs_artnet_talktome_diag_unicast = {
2967
  "Unicast",
2968
  "Broadcast"
2969
};
2970
2971
static const value_string artnet_talktome_diag_priority_vals[] = {
2972
  { 0x00, "DpAll" },
2973
  { 0x10, "DpLow" },
2974
  { 0x40, "DpMed" },
2975
  { 0x80, "DpHigh" },
2976
  { 0xe0, "DpCritical" },
2977
  { 0xf0, "DpVolatile" },
2978
  { 0x00, NULL }
2979
};
2980
2981
/* ArtPollReply */
2982
static int hf_artnet_poll_reply;
2983
static int hf_artnet_poll_reply_ip_address;
2984
static int hf_artnet_poll_reply_port_nr;
2985
static int hf_artnet_poll_reply_versinfo;
2986
static int hf_artnet_poll_reply_netswitch;
2987
static int hf_artnet_poll_reply_subswitch;
2988
static int hf_artnet_poll_reply_oem;
2989
static int hf_artnet_poll_reply_ubea_version;
2990
static int hf_artnet_poll_reply_status;
2991
static int hf_artnet_poll_reply_status_ubea_present;
2992
static int hf_artnet_poll_reply_status_rdm_supported;
2993
static int hf_artnet_poll_reply_status_rom_booted;
2994
static int hf_artnet_poll_reply_status_port_prog;
2995
static int hf_artnet_poll_reply_status_indicator;
2996
2997
static int hf_artnet_poll_reply_esta_man;
2998
static int hf_artnet_poll_reply_short_name;
2999
static int hf_artnet_poll_reply_long_name;
3000
static int hf_artnet_poll_reply_node_report;
3001
static int hf_artnet_poll_reply_port_info;
3002
static int hf_artnet_poll_reply_num_ports;
3003
static int hf_artnet_poll_reply_port_types;
3004
static int hf_artnet_poll_reply_port_types_1;
3005
static int hf_artnet_poll_reply_port_types_2;
3006
static int hf_artnet_poll_reply_port_types_3;
3007
static int hf_artnet_poll_reply_port_types_4;
3008
static int hf_artnet_poll_reply_good_input;
3009
static int hf_artnet_poll_reply_good_input_1;
3010
static int hf_artnet_poll_reply_good_input_2;
3011
static int hf_artnet_poll_reply_good_input_3;
3012
static int hf_artnet_poll_reply_good_input_4;
3013
static int hf_artnet_poll_reply_good_output;
3014
static int hf_artnet_poll_reply_good_output_1;
3015
static int hf_artnet_poll_reply_good_output_2;
3016
static int hf_artnet_poll_reply_good_output_3;
3017
static int hf_artnet_poll_reply_good_output_4;
3018
static int hf_artnet_poll_reply_good_output_b;
3019
static int hf_artnet_poll_reply_good_output_b_1;
3020
static int hf_artnet_poll_reply_good_output_b_2;
3021
static int hf_artnet_poll_reply_good_output_b_3;
3022
static int hf_artnet_poll_reply_good_output_b_4;
3023
static int hf_artnet_poll_reply_good_output_tx_proto;
3024
static int hf_artnet_poll_reply_good_output_merge_ltp;
3025
static int hf_artnet_poll_reply_good_output_short;
3026
static int hf_artnet_poll_reply_good_output_merge_artnet;
3027
static int hf_artnet_poll_reply_good_output_dmx_text;
3028
static int hf_artnet_poll_reply_good_output_dmx_sip;
3029
static int hf_artnet_poll_reply_good_output_dmx_test;
3030
static int hf_artnet_poll_reply_good_output_data;
3031
static int hf_artnet_poll_reply_good_output_bg_discovery;
3032
static int hf_artnet_poll_reply_good_output_discovery;
3033
static int hf_artnet_poll_reply_good_output_style;
3034
static int hf_artnet_poll_reply_good_output_rdm;
3035
static int hf_artnet_poll_reply_swin;
3036
static int hf_artnet_poll_reply_swin_1;
3037
static int hf_artnet_poll_reply_swin_2;
3038
static int hf_artnet_poll_reply_swin_3;
3039
static int hf_artnet_poll_reply_swin_4;
3040
static int hf_artnet_poll_reply_swin_1_universe;
3041
static int hf_artnet_poll_reply_swin_2_universe;
3042
static int hf_artnet_poll_reply_swin_3_universe;
3043
static int hf_artnet_poll_reply_swin_4_universe;
3044
static int hf_artnet_poll_reply_swout;
3045
static int hf_artnet_poll_reply_swout_1;
3046
static int hf_artnet_poll_reply_swout_2;
3047
static int hf_artnet_poll_reply_swout_3;
3048
static int hf_artnet_poll_reply_swout_4;
3049
static int hf_artnet_poll_reply_swout_1_universe;
3050
static int hf_artnet_poll_reply_swout_2_universe;
3051
static int hf_artnet_poll_reply_swout_3_universe;
3052
static int hf_artnet_poll_reply_swout_4_universe;
3053
static int hf_artnet_poll_reply_sacnprio;
3054
static int hf_artnet_poll_reply_swmacro;
3055
static int hf_artnet_poll_reply_swremote;
3056
static int hf_artnet_poll_reply_style;
3057
static int hf_artnet_poll_reply_mac;
3058
static int hf_artnet_poll_reply_bind_ip_address;
3059
static int hf_artnet_poll_reply_bind_index;
3060
static int hf_artnet_poll_reply_status2;
3061
static int hf_artnet_poll_reply_status2_web_supported;
3062
static int hf_artnet_poll_reply_status2_dhcp_used;
3063
static int hf_artnet_poll_reply_status2_dhcp_supported;
3064
static int hf_artnet_poll_reply_status2_bigaddr_supported;
3065
static int hf_artnet_poll_reply_status2_sacn_supported;
3066
static int hf_artnet_poll_reply_status2_squawking;
3067
static int hf_artnet_poll_reply_status2_output_switching_supported;
3068
static int hf_artnet_poll_reply_status2_control_rdm_supported;
3069
static int hf_artnet_poll_reply_status3;
3070
static int hf_artnet_poll_reply_status3_prog_bg_discovery_supported;
3071
static int hf_artnet_poll_reply_status3_bg_queue_supported;
3072
static int hf_artnet_poll_reply_status3_rdmnet_supported;
3073
static int hf_artnet_poll_reply_status3_switching_port_supported;
3074
static int hf_artnet_poll_reply_status3_llrp_supported;
3075
static int hf_artnet_poll_reply_status3_failover_supported;
3076
static int hf_artnet_poll_reply_status3_failsafe_state;
3077
static int hf_artnet_poll_reply_default_responder_uid;
3078
static int hf_artnet_poll_reply_node_report_status_code;
3079
static int hf_artnet_poll_reply_node_report_response_counter;
3080
static int hf_artnet_poll_reply_node_report_status_string;
3081
3082
static int ett_artnet_poll_reply_status;
3083
static int ett_artnet_poll_reply_port_info;
3084
static int ett_artnet_poll_reply_port_types;
3085
static int ett_artnet_poll_reply_good_input;
3086
static int ett_artnet_poll_reply_good_input_1;
3087
static int ett_artnet_poll_reply_good_input_2;
3088
static int ett_artnet_poll_reply_good_input_3;
3089
static int ett_artnet_poll_reply_good_input_4;
3090
static int ett_artnet_poll_reply_good_output;
3091
static int ett_artnet_poll_reply_good_output_1;
3092
static int ett_artnet_poll_reply_good_output_2;
3093
static int ett_artnet_poll_reply_good_output_3;
3094
static int ett_artnet_poll_reply_good_output_4;
3095
static int ett_artnet_poll_reply_good_output_b;
3096
static int ett_artnet_poll_reply_good_output_b_1;
3097
static int ett_artnet_poll_reply_good_output_b_2;
3098
static int ett_artnet_poll_reply_good_output_b_3;
3099
static int ett_artnet_poll_reply_good_output_b_4;
3100
static int ett_artnet_poll_reply_swin;
3101
static int ett_artnet_poll_reply_swout;
3102
static int ett_artnet_poll_reply_swmacro;
3103
static int ett_artnet_poll_reply_swremote;
3104
static int ett_artnet_poll_reply_status2;
3105
static int ett_artnet_poll_reply_status3;
3106
3107
static int hf_artnet_poll_reply_good_input_converts_to;
3108
static int hf_artnet_poll_reply_good_input_recv_error;
3109
static int hf_artnet_poll_reply_good_input_disabled;
3110
static int hf_artnet_poll_reply_good_input_dmx_text;
3111
static int hf_artnet_poll_reply_good_input_dmx_sip;
3112
static int hf_artnet_poll_reply_good_input_dmx_test;
3113
static int hf_artnet_poll_reply_good_input_data;
3114
3115
static int hf_artnet_poll_reply_swmacro_1;
3116
static int hf_artnet_poll_reply_swmacro_2;
3117
static int hf_artnet_poll_reply_swmacro_3;
3118
static int hf_artnet_poll_reply_swmacro_4;
3119
static int hf_artnet_poll_reply_swmacro_5;
3120
static int hf_artnet_poll_reply_swmacro_6;
3121
static int hf_artnet_poll_reply_swmacro_7;
3122
static int hf_artnet_poll_reply_swmacro_8;
3123
3124
static int hf_artnet_poll_reply_swremote_1;
3125
static int hf_artnet_poll_reply_swremote_2;
3126
static int hf_artnet_poll_reply_swremote_3;
3127
static int hf_artnet_poll_reply_swremote_4;
3128
static int hf_artnet_poll_reply_swremote_5;
3129
static int hf_artnet_poll_reply_swremote_6;
3130
static int hf_artnet_poll_reply_swremote_7;
3131
static int hf_artnet_poll_reply_swremote_8;
3132
3133
static int hf_artnet_poll_reply_user;
3134
static int hf_artnet_poll_reply_refreshrate;
3135
static int hf_artnet_poll_reply_bg_queue_policy;
3136
3137
static int * const artnet_poll_reply_status_fields[] = {
3138
  &hf_artnet_poll_reply_status_ubea_present,
3139
  &hf_artnet_poll_reply_status_rdm_supported,
3140
  &hf_artnet_poll_reply_status_rom_booted,
3141
  &hf_artnet_poll_reply_status_port_prog,
3142
  &hf_artnet_poll_reply_status_indicator,
3143
  NULL
3144
};
3145
3146
static int * const artnet_poll_reply_good_input_fields[] = {
3147
  &hf_artnet_poll_reply_good_input_converts_to,
3148
  &hf_artnet_poll_reply_good_input_recv_error,
3149
  &hf_artnet_poll_reply_good_input_disabled,
3150
  &hf_artnet_poll_reply_good_input_dmx_text,
3151
  &hf_artnet_poll_reply_good_input_dmx_sip,
3152
  &hf_artnet_poll_reply_good_input_dmx_test,
3153
  &hf_artnet_poll_reply_good_input_data,
3154
  NULL
3155
};
3156
3157
static int * const artnet_poll_reply_good_output_fields[] = {
3158
  &hf_artnet_poll_reply_good_output_tx_proto,
3159
  &hf_artnet_poll_reply_good_output_merge_ltp,
3160
  &hf_artnet_poll_reply_good_output_short,
3161
  &hf_artnet_poll_reply_good_output_merge_artnet,
3162
  &hf_artnet_poll_reply_good_output_dmx_text,
3163
  &hf_artnet_poll_reply_good_output_dmx_sip,
3164
  &hf_artnet_poll_reply_good_output_dmx_test,
3165
  &hf_artnet_poll_reply_good_output_data,
3166
  NULL
3167
};
3168
3169
static int * const artnet_poll_reply_good_output_b_fields[] = {
3170
  &hf_artnet_poll_reply_good_output_bg_discovery,
3171
  &hf_artnet_poll_reply_good_output_discovery,
3172
  &hf_artnet_poll_reply_good_output_style,
3173
  &hf_artnet_poll_reply_good_output_rdm,
3174
  NULL
3175
};
3176
3177
static int * const artnet_poll_reply_status2_fields[] = {
3178
  &hf_artnet_poll_reply_status2_web_supported,
3179
  &hf_artnet_poll_reply_status2_dhcp_used,
3180
  &hf_artnet_poll_reply_status2_dhcp_supported,
3181
  &hf_artnet_poll_reply_status2_bigaddr_supported,
3182
  &hf_artnet_poll_reply_status2_sacn_supported,
3183
  &hf_artnet_poll_reply_status2_squawking,
3184
  &hf_artnet_poll_reply_status2_output_switching_supported,
3185
  &hf_artnet_poll_reply_status2_control_rdm_supported,
3186
  NULL
3187
};
3188
3189
static int * const artnet_poll_reply_status3_fields[] = {
3190
  &hf_artnet_poll_reply_status3_prog_bg_discovery_supported,
3191
  &hf_artnet_poll_reply_status3_bg_queue_supported,
3192
  &hf_artnet_poll_reply_status3_rdmnet_supported,
3193
  &hf_artnet_poll_reply_status3_switching_port_supported,
3194
  &hf_artnet_poll_reply_status3_llrp_supported,
3195
  &hf_artnet_poll_reply_status3_failover_supported,
3196
  &hf_artnet_poll_reply_status3_failsafe_state,
3197
  NULL
3198
};
3199
3200
static int * const artnet_poll_reply_swmacro_fields[] = {
3201
  &hf_artnet_poll_reply_swmacro_1,
3202
  &hf_artnet_poll_reply_swmacro_2,
3203
  &hf_artnet_poll_reply_swmacro_3,
3204
  &hf_artnet_poll_reply_swmacro_4,
3205
  &hf_artnet_poll_reply_swmacro_5,
3206
  &hf_artnet_poll_reply_swmacro_6,
3207
  &hf_artnet_poll_reply_swmacro_7,
3208
  &hf_artnet_poll_reply_swmacro_8,
3209
  NULL
3210
};
3211
3212
static int * const artnet_poll_reply_swremote_fields[] = {
3213
  &hf_artnet_poll_reply_swremote_1,
3214
  &hf_artnet_poll_reply_swremote_2,
3215
  &hf_artnet_poll_reply_swremote_3,
3216
  &hf_artnet_poll_reply_swremote_4,
3217
  &hf_artnet_poll_reply_swremote_5,
3218
  &hf_artnet_poll_reply_swremote_6,
3219
  &hf_artnet_poll_reply_swremote_7,
3220
  &hf_artnet_poll_reply_swremote_8,
3221
  NULL
3222
};
3223
3224
static expert_field ei_artnet_poll_reply_bind_ip_without_index;
3225
static expert_field ei_artnet_poll_reply_bind_index_without_ip;
3226
static expert_field ei_artnet_poll_reply_node_report_invalid_format;
3227
3228
/* ArtOutput */
3229
static int hf_artnet_output;
3230
static int hf_artnet_output_sequence;
3231
static int hf_artnet_output_physical;
3232
static int hf_artnet_output_universe;
3233
static int hf_artnet_output_length;
3234
3235
/* ArtSync */
3236
static int hf_artnet_sync;
3237
static int hf_artnet_sync_aux;
3238
3239
/* ArtAddress */
3240
static int hf_artnet_address;
3241
static int hf_artnet_address_netswitch_special;
3242
static int hf_artnet_address_netswitch_net;
3243
static int hf_artnet_address_netswitch_write;
3244
static int hf_artnet_address_bind_index;
3245
static int hf_artnet_address_short_name;
3246
static int hf_artnet_address_long_name;
3247
static int hf_artnet_address_swin;
3248
static int hf_artnet_address_swin_1;
3249
static int hf_artnet_address_swin_2;
3250
static int hf_artnet_address_swin_3;
3251
static int hf_artnet_address_swin_4;
3252
static int hf_artnet_address_swout;
3253
static int hf_artnet_address_swout_1;
3254
static int hf_artnet_address_swout_2;
3255
static int hf_artnet_address_swout_3;
3256
static int hf_artnet_address_swout_4;
3257
static int hf_artnet_address_subswitch_special;
3258
static int hf_artnet_address_subswitch_sub;
3259
static int hf_artnet_address_subswitch_write;
3260
static int hf_artnet_address_sacnprio;
3261
static int hf_artnet_address_command;
3262
3263
static int ett_artnet_address_netswitch;
3264
static int ett_artnet_address_swin;
3265
static int ett_artnet_address_swout;
3266
static int ett_artnet_address_subswitch;
3267
3268
static int * const artnet_address_netswitch_fields[] = {
3269
  &hf_artnet_address_netswitch_net,
3270
  &hf_artnet_address_netswitch_write,
3271
  NULL
3272
};
3273
3274
static int * const artnet_address_subswitch_fields[] = {
3275
  &hf_artnet_address_subswitch_sub,
3276
  &hf_artnet_address_subswitch_write,
3277
  NULL
3278
};
3279
3280
static const value_string artnet_address_switch_vals[] = {
3281
  { 0x00, "Reset to Physical Switch" },
3282
  { 0x7f, "No Change" },
3283
  { 0x00, NULL }
3284
};
3285
3286
/* ArtInput */
3287
static int hf_artnet_input;
3288
static int hf_artnet_input_bind_index;
3289
static int hf_artnet_input_num_ports;
3290
static int hf_artnet_input_input;
3291
static int hf_artnet_input_input_1;
3292
static int hf_artnet_input_input_2;
3293
static int hf_artnet_input_input_3;
3294
static int hf_artnet_input_input_4;
3295
static int hf_artnet_input_input_disabled;
3296
3297
static int ett_artnet_input_input;
3298
static int ett_artnet_input_input_1;
3299
static int ett_artnet_input_input_2;
3300
static int ett_artnet_input_input_3;
3301
static int ett_artnet_input_input_4;
3302
3303
static int * const artnet_input_input_fields[] = {
3304
  &hf_artnet_input_input_disabled,
3305
  NULL
3306
};
3307
3308
/* ArtFirmwareMaster */
3309
static int hf_artnet_firmware_master;
3310
static int hf_artnet_firmware_master_type;
3311
static int hf_artnet_firmware_master_block_id;
3312
static int hf_artnet_firmware_master_length;
3313
static int hf_artnet_firmware_master_data;
3314
3315
/* ArtFirmwareReply */
3316
static int hf_artnet_firmware_reply;
3317
static int hf_artnet_firmware_reply_type;
3318
3319
/* ArtVideoSetup */
3320
static int hf_artnet_video_setup_control;
3321
static int hf_artnet_video_setup_font_height;
3322
static int hf_artnet_video_setup_first_font;
3323
static int hf_artnet_video_setup_last_font;
3324
static int hf_artnet_video_setup_win_font_name;
3325
static int hf_artnet_video_setup_font_data;
3326
3327
/* ArtVideoPalette */
3328
static int hf_artnet_video_palette_colour_red;
3329
static int hf_artnet_video_palette_colour_green;
3330
static int hf_artnet_video_palette_colour_blue;
3331
3332
/* ArtVideoData */
3333
static int hf_artnet_video_data_pos_x;
3334
static int hf_artnet_video_data_pos_y;
3335
static int hf_artnet_video_data_len_x;
3336
static int hf_artnet_video_data_len_y;
3337
static int hf_artnet_video_data_data;
3338
3339
/* ArtPollFpReply */
3340
static int hf_artnet_poll_fp_reply;
3341
3342
/* ArtTodRequest */
3343
static int hf_artnet_tod_request;
3344
static int hf_artnet_tod_request_net;
3345
static int hf_artnet_tod_request_command;
3346
static int hf_artnet_tod_request_ad_count;
3347
static int hf_artnet_tod_request_address;
3348
3349
/* ArtTodData */
3350
static int hf_artnet_tod_data;
3351
static int hf_artnet_tod_data_rdm_ver;
3352
static int hf_artnet_tod_data_bind_index;
3353
static int hf_artnet_tod_data_port;
3354
static int hf_artnet_tod_data_net;
3355
static int hf_artnet_tod_data_command_response;
3356
static int hf_artnet_tod_data_address;
3357
static int hf_artnet_tod_data_uid_total;
3358
static int hf_artnet_tod_data_block_count;
3359
static int hf_artnet_tod_data_uid_count;
3360
static int hf_artnet_tod_data_tod;
3361
static int hf_artnet_tod_data_tod_manf;
3362
static int hf_artnet_tod_data_tod_dev;
3363
3364
static int ett_artnet_tod_data_tod;
3365
3366
/* ArtTodControl */
3367
static int hf_artnet_tod_control;
3368
static int hf_artnet_tod_control_net;
3369
static int hf_artnet_tod_control_command;
3370
static int hf_artnet_tod_control_address;
3371
static int hf_artnet_tod_control_universe;
3372
3373
/* ArtRdm */
3374
static int hf_artnet_rdm;
3375
static int hf_artnet_rdm_command;
3376
static int hf_artnet_rdm_address;
3377
static int hf_artnet_rdm_sc;
3378
3379
static int hf_artnet_rdm_rdmver;
3380
static int hf_artnet_rdm_fifo_avail;
3381
static int hf_artnet_rdm_fifo_max;
3382
static int hf_artnet_rdm_net;
3383
3384
/* ArtRdmSub */
3385
static int hf_artnet_rdm_sub;
3386
static int hf_artnet_rdm_sub_uid;
3387
static int hf_artnet_rdm_sub_command_class;
3388
static int hf_artnet_rdm_sub_pid;
3389
static int hf_artnet_rdm_sub_sub_device;
3390
static int hf_artnet_rdm_sub_sub_count;
3391
static int hf_artnet_rdm_sub_data;
3392
3393
/* ArtIpProg */
3394
static int hf_artnet_ip_prog;
3395
static int hf_artnet_ip_prog_command;
3396
static int hf_artnet_ip_prog_command_prog_port;
3397
static int hf_artnet_ip_prog_command_prog_sm;
3398
static int hf_artnet_ip_prog_command_prog_ip;
3399
static int hf_artnet_ip_prog_command_reset;
3400
static int hf_artnet_ip_prog_command_gw;
3401
static int hf_artnet_ip_prog_command_unused;
3402
static int hf_artnet_ip_prog_command_dhcp_enable;
3403
static int hf_artnet_ip_prog_command_prog_enable;
3404
static int hf_artnet_ip_prog_ip;
3405
static int hf_artnet_ip_prog_sm;
3406
static int hf_artnet_ip_prog_port;
3407
static int hf_artnet_ip_prog_gw;
3408
3409
static int ett_artnet_ip_prog_command;
3410
3411
static int * const artnet_ip_prog_command_fields[] = {
3412
  &hf_artnet_ip_prog_command_prog_port,
3413
  &hf_artnet_ip_prog_command_prog_sm,
3414
  &hf_artnet_ip_prog_command_prog_ip,
3415
  &hf_artnet_ip_prog_command_reset,
3416
  &hf_artnet_ip_prog_command_gw,
3417
  &hf_artnet_ip_prog_command_unused,
3418
  &hf_artnet_ip_prog_command_dhcp_enable,
3419
  &hf_artnet_ip_prog_command_prog_enable,
3420
  NULL
3421
};
3422
3423
/* ArtIpProgReply */
3424
static int hf_artnet_ip_prog_reply;
3425
static int hf_artnet_ip_prog_reply_ip;
3426
static int hf_artnet_ip_prog_reply_sm;
3427
static int hf_artnet_ip_prog_reply_port;
3428
static int hf_artnet_ip_prog_reply_status;
3429
static int hf_artnet_ip_prog_reply_status_unused;
3430
static int hf_artnet_ip_prog_reply_status_dhcp_enable;
3431
static int hf_artnet_ip_prog_reply_gw;
3432
3433
static int ett_artnet_ip_prog_reply_status;
3434
3435
static int * const artnet_ip_prog_reply_status_fields[] = {
3436
  &hf_artnet_ip_prog_reply_status_unused,
3437
  &hf_artnet_ip_prog_reply_status_dhcp_enable,
3438
  NULL
3439
};
3440
3441
/* ArtDiagData */
3442
static int hf_artnet_diag_data;
3443
static int hf_artnet_diag_data_priority;
3444
static int hf_artnet_diag_data_port;
3445
static int hf_artnet_diag_data_length;
3446
static int hf_artnet_diag_data_data;
3447
3448
/* ArtCommand */
3449
static int hf_artnet_command;
3450
static int hf_artnet_command_esta_man;
3451
static int hf_artnet_command_length;
3452
static int hf_artnet_command_data;
3453
3454
/* ArtDataRequest */
3455
static int hf_artnet_data_request;
3456
static int hf_artnet_data_request_esta_man;
3457
static int hf_artnet_data_request_oem;
3458
static int hf_artnet_data_request_request;
3459
static int hf_artnet_data_request_spare;
3460
3461
#define ARTNET_DR_POLL          0x0000
3462
#define ARTNET_DR_URL_PRODUCT   0x0001
3463
#define ARTNET_DR_URL_USERGUIDE 0x0002
3464
#define ARTNET_DR_URL_SUPPORT   0x0003
3465
#define ARTNET_DR_URL_PERS_UDR  0x0004
3466
#define ARTNET_DR_URL_PERS_GDTF 0x0005
3467
#define ARTNET_DR_MAN_SPEC_LOW  0x8000
3468
#define ARTNET_DR_MAN_SPEC_HIGH 0xFFFF
3469
3470
static const range_string artnet_data_request_vals[] = {
3471
  { ARTNET_DR_POLL,          ARTNET_DR_POLL,          "DrPoll" },
3472
  { ARTNET_DR_URL_PRODUCT,   ARTNET_DR_URL_PRODUCT,   "DrUrlProduct" },
3473
  { ARTNET_DR_URL_USERGUIDE, ARTNET_DR_URL_USERGUIDE, "DrUrlUserGuide" },
3474
  { ARTNET_DR_URL_SUPPORT,   ARTNET_DR_URL_SUPPORT,   "DrUrlSupport" },
3475
  { ARTNET_DR_URL_PERS_UDR,  ARTNET_DR_URL_PERS_UDR,  "DrPersUdr" },
3476
  { ARTNET_DR_URL_PERS_GDTF, ARTNET_DR_URL_PERS_GDTF, "DrPersGdtf" },
3477
  { ARTNET_DR_MAN_SPEC_LOW,  ARTNET_DR_MAN_SPEC_HIGH, "DrManSpec" },
3478
  { 0,                       0,                       NULL }
3479
};
3480
3481
/* ArtDataReply */
3482
static int hf_artnet_data_reply;
3483
static int hf_artnet_data_reply_esta_man;
3484
static int hf_artnet_data_reply_oem;
3485
static int hf_artnet_data_reply_request;
3486
static int hf_artnet_data_reply_payload_length;
3487
static int hf_artnet_data_reply_payload;
3488
3489
/* ArtMedia */
3490
static int hf_artnet_media;
3491
3492
/* ArtMediaPatch */
3493
static int hf_artnet_media_patch;
3494
3495
/* ArtMediaControl */
3496
static int hf_artnet_media_control;
3497
3498
/* ArtMediaControlReply */
3499
static int hf_artnet_media_control_reply;
3500
3501
/* ArtTimeCode */
3502
static int hf_artnet_time_code;
3503
static int hf_artnet_time_code_stream_id;
3504
static int hf_artnet_time_code_frames;
3505
static int hf_artnet_time_code_seconds;
3506
static int hf_artnet_time_code_minutes;
3507
static int hf_artnet_time_code_hours;
3508
static int hf_artnet_time_code_type;
3509
3510
static const value_string artnet_time_code_vals[] = {
3511
  { 0x00, "Film (24fps)" },
3512
  { 0x01, "EBU (25fps)" },
3513
  { 0x02, "DF (29.97fps)" },
3514
  { 0x03, "SMPTE (30fps)" },
3515
  { 0x00, NULL }
3516
};
3517
3518
/* ArtTimeSync */
3519
static int hf_artnet_time_sync;
3520
3521
/* ArtTrigger */
3522
0
#define ARTNET_TRIGGER_NOT_OEM_SPECIFIC 0xFFFF
3523
3524
static int hf_artnet_trigger;
3525
static int hf_artnet_trigger_oem;
3526
static int hf_artnet_trigger_key;
3527
static int hf_artnet_trigger_key_unspecific;
3528
static int hf_artnet_trigger_subkey;
3529
static int hf_artnet_trigger_data;
3530
3531
static const value_string artnet_trigger_key_vals[] = {
3532
  { 0x00, "KeyAscii" },
3533
  { 0x01, "KeyMacro" },
3534
  { 0x02, "KeySoft" },
3535
  { 0x03, "KeyShow" },
3536
  { 0x00, NULL }
3537
};
3538
3539
/* ArtDirectory */
3540
static int hf_artnet_directory;
3541
static int hf_artnet_directory_filler;
3542
static int hf_artnet_directory_cmd;
3543
static int hf_artnet_directory_file;
3544
3545
/* ArtDirectoryReply */
3546
static int hf_artnet_directory_reply;
3547
static int hf_artnet_directory_reply_filler;
3548
static int hf_artnet_directory_reply_flags;
3549
static int hf_artnet_directory_reply_file;
3550
static int hf_artnet_directory_reply_name;
3551
static int hf_artnet_directory_reply_desc;
3552
static int hf_artnet_directory_reply_length;
3553
static int hf_artnet_directory_reply_data;
3554
3555
/* ArtMacMaster */
3556
static int hf_artnet_mac_master;
3557
3558
/* ArtMacSlave */
3559
static int hf_artnet_mac_slave;
3560
3561
/* ArtFileTnMaster */
3562
static int hf_artnet_file_tn_master;
3563
static int hf_artnet_file_tn_master_filler;
3564
static int hf_artnet_file_tn_master_type;
3565
static int hf_artnet_file_tn_master_block_id;
3566
static int hf_artnet_file_tn_master_length;
3567
static int hf_artnet_file_tn_master_name;
3568
static int hf_artnet_file_tn_master_checksum;
3569
static int hf_artnet_file_tn_master_spare;
3570
static int hf_artnet_file_tn_master_data;
3571
3572
3573
/* ArtFileFnMaster */
3574
static int hf_artnet_file_fn_master;
3575
3576
/* ArtFileFnReply */
3577
static int hf_artnet_file_fn_reply;
3578
3579
/* ArtNzs */
3580
static int hf_artnet_nzs;
3581
static int hf_artnet_nzs_sequence;
3582
static int hf_artnet_nzs_start_code;
3583
static int hf_artnet_nzs_subuni;
3584
static int hf_artnet_nzs_net;
3585
static int hf_artnet_nzs_length;
3586
static int hf_artnet_nzs_vlc_man_id;
3587
static int hf_artnet_nzs_vlc_sub_code;
3588
static int hf_artnet_nzs_vlc_flags;
3589
static int hf_artnet_nzs_vlc_flags_ieee;
3590
static int hf_artnet_nzs_vlc_flags_reply;
3591
static int hf_artnet_nzs_vlc_flags_beacon;
3592
static int hf_artnet_nzs_vlc_transaction;
3593
static int hf_artnet_nzs_vlc_slot_addr;
3594
static int hf_artnet_nzs_vlc_payload_size;
3595
static int hf_artnet_nzs_vlc_payload_checksum;
3596
static int hf_artnet_nzs_vlc_mod_depth;
3597
static int hf_artnet_nzs_vlc_mod_freq;
3598
static int hf_artnet_nzs_vlc_mod_type;
3599
static int hf_artnet_nzs_vlc_lang_code;
3600
static int hf_artnet_nzs_vlc_beacon_repeat;
3601
static int hf_artnet_nzs_vlc_payload;
3602
static int hf_artnet_nzs_vlc_payload_beacon_url;
3603
static int hf_artnet_nzs_vlc_payload_beacon_text;
3604
static int hf_artnet_nzs_vlc_payload_beacon_location_id;
3605
3606
static int ett_artnet_nzs_vlc_flags;
3607
3608
static int * const artnet_nzs_vlc_flags_fields[] = {
3609
  &hf_artnet_nzs_vlc_flags_beacon,
3610
  &hf_artnet_nzs_vlc_flags_reply,
3611
  &hf_artnet_nzs_vlc_flags_ieee,
3612
  NULL
3613
};
3614
3615
4
#define ARTNET_NZS_VLC_START_CODE       0x91
3616
2
#define ARTNET_NZS_VLC_MAGIC_MAN_ID     0x414C
3617
0
#define ARTNET_NZS_VLC_MAGIC_SUB_CODE   0x45
3618
3619
static const true_false_string tfs_artnet_nzs_vlc_ieee = {
3620
  "IEEE VLC data",
3621
  "Payload language"
3622
};
3623
3624
static const true_false_string tfs_artnet_nzs_vlc_beacon = {
3625
  "continuously repeat",
3626
  "send once"
3627
};
3628
3629
0
#define ARTNET_NZS_VLC_LANG_CODE_BEACON_URL       0x0000
3630
0
#define ARTNET_NZS_VLC_LANG_CODE_BEACON_TEXT      0x0001
3631
0
#define ARTNET_NZS_VLC_LANG_CODE_BEACON_LOCID     0x0002
3632
3633
static const value_string vals_artnet_nzs_vlc_lang_code[] = {
3634
  { ARTNET_NZS_VLC_LANG_CODE_BEACON_URL,   "BeaconURL" },
3635
  { ARTNET_NZS_VLC_LANG_CODE_BEACON_TEXT,  "BeaconText" },
3636
  { ARTNET_NZS_VLC_LANG_CODE_BEACON_LOCID, "BeaconLocationID" },
3637
  { 0x0000, NULL }
3638
};
3639
3640
3641
/* Define the tree for artnet */
3642
static int ett_artnet;
3643
static int ett_artnet_header;
3644
static int ett_artnet_data;
3645
3646
/* A static handle for the rdm dissector */
3647
static dissector_handle_t rdm_handle;
3648
static dissector_handle_t dmx_chan_handle;
3649
3650
static unsigned
3651
dissect_artnet_poll(tvbuff_t *tvb, unsigned offset, proto_tree *tree, packet_info *pinfo)
3652
0
{
3653
3654
0
  proto_tree_add_bitmask(tree, tvb, offset, hf_artnet_poll_talktome,
3655
0
                         ett_artnet_poll_talktome,
3656
0
                         artnet_poll_talktome_fields,
3657
0
                         ENC_BIG_ENDIAN);
3658
0
  offset += 1;
3659
3660
0
  col_append_fstr(pinfo->cinfo, COL_INFO, " Prio=%s",
3661
0
                  val_to_str(pinfo->pool, tvb_get_uint8(tvb, offset), artnet_talktome_diag_priority_vals, "unknown(%u)"));
3662
0
  proto_tree_add_item(tree, hf_artnet_poll_diag_priority, tvb,
3663
0
                      offset, 1, ENC_BIG_ENDIAN);
3664
0
  offset += 1;
3665
3666
  /* TargetPort Top/Bottom not present (compatibility, >= Rev. DE) */
3667
0
  if(tvb_reported_length_remaining(tvb, offset) < 4) {
3668
0
    return offset;
3669
0
  }
3670
3671
0
  proto_tree_add_item(tree, hf_artnet_poll_target_port_top, tvb,
3672
0
                    offset, 2, ENC_BIG_ENDIAN);
3673
0
  offset += 2;
3674
3675
0
  proto_tree_add_item(tree, hf_artnet_poll_target_port_bottom, tvb,
3676
0
                    offset, 2, ENC_BIG_ENDIAN);
3677
0
  offset += 2;
3678
3679
0
  col_append_fstr(pinfo->cinfo, COL_INFO, " (%d-%d)",
3680
0
    tvb_get_uint16(tvb, offset-2, ENC_BIG_ENDIAN),
3681
0
    tvb_get_uint16(tvb, offset-4, ENC_BIG_ENDIAN));
3682
3683
  /* EstaMan/OEM not present (compatibility, >= Rev. DE) */
3684
0
  if(tvb_reported_length_remaining(tvb, offset) < 4) {
3685
0
    return offset;
3686
0
  }
3687
3688
0
  proto_tree_add_item(tree, hf_artnet_poll_esta_man, tvb,
3689
0
                      offset, 2, ENC_BIG_ENDIAN);
3690
0
  offset += 2;
3691
3692
0
  proto_tree_add_item(tree, hf_artnet_poll_oem, tvb,
3693
0
                      offset, 2, ENC_BIG_ENDIAN);
3694
0
  offset += 2;
3695
3696
0
  return offset;
3697
0
}
3698
3699
static unsigned
3700
dissect_artnet_poll_reply(tvbuff_t *tvb, unsigned offset, proto_tree *tree, packet_info *pinfo)
3701
3
{
3702
3
  proto_tree *hi, *si, *ti;
3703
3
  proto_item *tf, *tp;
3704
3
  uint16_t universe,uni_port;
3705
3
  uint8_t bind_index;
3706
3
  uint32_t bind_ip_address;
3707
3
  GRegex *regex = NULL;
3708
3
  GMatchInfo *match_info = NULL;
3709
3
  bool bg_queue_supported;
3710
3711
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_ip_address, tvb,
3712
3
                      offset, 4, ENC_BIG_ENDIAN);
3713
3
  offset += 4;
3714
3715
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_port_nr, tvb,
3716
3
                      offset, 2, ENC_LITTLE_ENDIAN);
3717
3
  offset += 2;
3718
3719
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_versinfo, tvb,
3720
3
                      offset, 2, ENC_BIG_ENDIAN);
3721
3
  offset += 2;
3722
3723
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_netswitch, tvb,
3724
3
                      offset, 1, ENC_BIG_ENDIAN);
3725
3
  universe = (tvb_get_uint8(tvb, offset) & 0x7F) << 8;
3726
3
  offset += 1;
3727
3728
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_subswitch, tvb,
3729
3
                      offset, 1, ENC_BIG_ENDIAN);
3730
3
  universe |= (tvb_get_uint8(tvb, offset) & 0x0F) << 4;
3731
3
  offset += 1;
3732
3733
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_oem, tvb,
3734
3
                      offset, 2, ENC_BIG_ENDIAN);
3735
3
  offset += 2;
3736
3737
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_ubea_version, tvb,
3738
3
                      offset, 1, ENC_BIG_ENDIAN);
3739
3
  offset += 1;
3740
3741
3
  proto_tree_add_bitmask(tree, tvb, offset, hf_artnet_poll_reply_status,
3742
3
                         ett_artnet_poll_reply_status,
3743
3
                         artnet_poll_reply_status_fields,
3744
3
                         ENC_BIG_ENDIAN);
3745
3
  offset += 1;
3746
3747
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_esta_man, tvb,
3748
3
                      offset, 2, ENC_LITTLE_ENDIAN);
3749
3
  offset += 2;
3750
3751
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_short_name,
3752
3
                      tvb, offset, 18, ENC_ASCII);
3753
3
  offset += 18;
3754
3755
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_long_name,
3756
3
                      tvb, offset, 64, ENC_ASCII);
3757
3
  offset += 64;
3758
3759
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_node_report,
3760
3
                      tvb, offset, 64, ENC_ASCII);
3761
3762
  /* Try to extract node report regex data as generated fields (only if data contained) */
3763
3
  if(tvb_get_uint64(tvb, offset, ENC_BIG_ENDIAN) > 0) {
3764
3
    regex = g_regex_new(artnet_poll_reply_node_report_regex, G_REGEX_DEFAULT, (GRegexMatchFlags) 0, NULL);
3765
3
    DISSECTOR_ASSERT(regex != NULL);
3766
3
    g_regex_match(
3767
3
      regex,
3768
3
      (const char*)tvb_get_string_enc(pinfo->pool, tvb, offset, 64, ENC_ASCII),
3769
3
      (GRegexMatchFlags) 0,
3770
3
      &match_info);
3771
3772
3
    if(g_match_info_matches(match_info) && g_match_info_get_match_count(match_info) == 4) {
3773
0
      char *status_code = g_match_info_fetch(match_info, 1);
3774
0
      char *counter = g_match_info_fetch(match_info, 2);
3775
0
      char *status_string = g_match_info_fetch(match_info, 3);
3776
3777
0
      tf = proto_tree_add_uint(tree, hf_artnet_poll_reply_node_report_status_code, tvb, 0, 0, (uint16_t)strtol(status_code, NULL, 16));
3778
0
      proto_item_set_generated(tf);
3779
3780
0
      tf = proto_tree_add_uint(tree, hf_artnet_poll_reply_node_report_response_counter, tvb, 0, 0, (uint32_t)strtoul(counter, NULL, 10));
3781
0
      proto_item_set_generated(tf);
3782
3783
0
      tf = proto_tree_add_string(tree, hf_artnet_poll_reply_node_report_status_string, tvb, 0, 0, status_string);
3784
0
      proto_item_set_generated(tf);
3785
3786
0
      g_free(status_code);
3787
0
      g_free(counter);
3788
0
      g_free(status_string);
3789
3
    } else {
3790
3
      expert_add_info(pinfo, tree, &ei_artnet_poll_reply_node_report_invalid_format);
3791
3
    }
3792
3
    g_regex_unref(regex);
3793
3
    g_match_info_free(match_info);
3794
3
  }
3795
3
  offset += 64;
3796
3797
3798
3
  hi = proto_tree_add_item(tree,
3799
3
                           hf_artnet_poll_reply_port_info,
3800
3
                           tvb,
3801
3
                           offset,
3802
3
                           ARTNET_POLL_REPLY_PORT_INFO_LENGTH,
3803
3
                           ENC_NA);
3804
3805
3
  si = proto_item_add_subtree(hi, ett_artnet_poll_reply_port_info);
3806
3807
3
  col_append_fstr(pinfo->cinfo, COL_INFO, " Ports=%d", tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN));
3808
3
  proto_tree_add_item(si, hf_artnet_poll_reply_num_ports, tvb,
3809
3
                      offset, 2, ENC_BIG_ENDIAN);
3810
3
  offset += 2;
3811
3812
3
  hi = proto_tree_add_item(si,
3813
3
                           hf_artnet_poll_reply_port_types,
3814
3
                           tvb,
3815
3
                           offset,
3816
3
                           ARTNET_POLL_REPLY_PORT_TYPES_LENGTH,
3817
3
                           ENC_NA);
3818
3819
3
  ti = proto_item_add_subtree(hi, ett_artnet_poll_reply_port_types);
3820
3821
3
  proto_tree_add_item(ti, hf_artnet_poll_reply_port_types_1, tvb,
3822
3
                      offset, 1, ENC_BIG_ENDIAN);
3823
3
  offset += 1;
3824
3825
3
  proto_tree_add_item(ti, hf_artnet_poll_reply_port_types_2, tvb,
3826
3
                      offset, 1, ENC_BIG_ENDIAN);
3827
3
  offset += 1;
3828
3829
3
  proto_tree_add_item(ti, hf_artnet_poll_reply_port_types_3, tvb,
3830
3
                      offset, 1, ENC_BIG_ENDIAN);
3831
3
  offset += 1;
3832
3833
3
  proto_tree_add_item(ti, hf_artnet_poll_reply_port_types_4, tvb,
3834
3
                      offset, 1, ENC_BIG_ENDIAN);
3835
3
  offset += 1;
3836
3837
3
  hi = proto_tree_add_item(si,
3838
3
                           hf_artnet_poll_reply_good_input,
3839
3
                           tvb,
3840
3
                           offset,
3841
3
                           ARTNET_POLL_REPLY_GOOD_INPUT_LENGTH,
3842
3
                           ENC_NA);
3843
3844
3
  ti = proto_item_add_subtree(hi, ett_artnet_poll_reply_good_input);
3845
3846
3
  proto_tree_add_bitmask(ti, tvb, offset, hf_artnet_poll_reply_good_input_1,
3847
3
                         ett_artnet_poll_reply_good_input_1,
3848
3
                         artnet_poll_reply_good_input_fields,
3849
3
                         ENC_BIG_ENDIAN);
3850
3
  offset += 1;
3851
3
  proto_tree_add_bitmask(ti, tvb, offset, hf_artnet_poll_reply_good_input_2,
3852
3
                         ett_artnet_poll_reply_good_input_2,
3853
3
                         artnet_poll_reply_good_input_fields,
3854
3
                         ENC_BIG_ENDIAN);
3855
3
  offset += 1;
3856
3
  proto_tree_add_bitmask(ti, tvb, offset, hf_artnet_poll_reply_good_input_3,
3857
3
                         ett_artnet_poll_reply_good_input_3,
3858
3
                         artnet_poll_reply_good_input_fields,
3859
3
                         ENC_BIG_ENDIAN);
3860
3
  offset += 1;
3861
3
  proto_tree_add_bitmask(ti, tvb, offset, hf_artnet_poll_reply_good_input_4,
3862
3
                         ett_artnet_poll_reply_good_input_4,
3863
3
                         artnet_poll_reply_good_input_fields,
3864
3
                         ENC_BIG_ENDIAN);
3865
3
  offset += 1;
3866
3867
3
  hi = proto_tree_add_item(si,
3868
3
                           hf_artnet_poll_reply_good_output,
3869
3
                           tvb,
3870
3
                           offset,
3871
3
                           ARTNET_POLL_REPLY_GOOD_OUTPUT_LENGTH,
3872
3
                           ENC_NA);
3873
3874
3
  ti = proto_item_add_subtree(hi, ett_artnet_poll_reply_good_output);
3875
3876
3
  proto_tree_add_bitmask(ti, tvb, offset, hf_artnet_poll_reply_good_output_1,
3877
3
                         ett_artnet_poll_reply_good_output_1,
3878
3
                         artnet_poll_reply_good_output_fields,
3879
3
                         ENC_BIG_ENDIAN);
3880
3
  offset += 1;
3881
3
  proto_tree_add_bitmask(ti, tvb, offset, hf_artnet_poll_reply_good_output_2,
3882
3
                         ett_artnet_poll_reply_good_output_2,
3883
3
                         artnet_poll_reply_good_output_fields,
3884
3
                         ENC_BIG_ENDIAN);
3885
3
  offset += 1;
3886
3
  proto_tree_add_bitmask(ti, tvb, offset, hf_artnet_poll_reply_good_output_3,
3887
3
                         ett_artnet_poll_reply_good_output_3,
3888
3
                         artnet_poll_reply_good_output_fields,
3889
3
                         ENC_BIG_ENDIAN);
3890
3
  offset += 1;
3891
3
  proto_tree_add_bitmask(ti, tvb, offset, hf_artnet_poll_reply_good_output_4,
3892
3
                         ett_artnet_poll_reply_good_output_4,
3893
3
                         artnet_poll_reply_good_output_fields,
3894
3
                         ENC_BIG_ENDIAN);
3895
3
  offset += 1;
3896
3897
3
  hi = proto_tree_add_item(si,
3898
3
                           hf_artnet_poll_reply_swin,
3899
3
                           tvb,
3900
3
                           offset,
3901
3
                           ARTNET_POLL_REPLY_SWIN_LENGTH,
3902
3
                           ENC_NA);
3903
3904
3
  ti = proto_item_add_subtree(hi, ett_artnet_poll_reply_swin);
3905
3906
3
  proto_tree_add_item(ti, hf_artnet_poll_reply_swin_1, tvb,
3907
3
                      offset, 1, ENC_BIG_ENDIAN);
3908
3909
3
  uni_port = tvb_get_uint8(tvb, offset) & 0x0F;
3910
3
  tf = proto_tree_add_uint(ti,hf_artnet_poll_reply_swin_1_universe,tvb,
3911
3
                           offset, 0, universe | uni_port);
3912
3
  proto_item_set_generated(tf);
3913
3
  offset += 1;
3914
3915
3
  proto_tree_add_item(ti, hf_artnet_poll_reply_swin_2, tvb,
3916
3
                      offset, 1, ENC_BIG_ENDIAN);
3917
3
  uni_port = tvb_get_uint8(tvb, offset) & 0x0F;
3918
3
  tf = proto_tree_add_uint(ti,hf_artnet_poll_reply_swin_2_universe,tvb,
3919
3
                           offset, 0, universe | uni_port);
3920
3
  proto_item_set_generated(tf);
3921
3
  offset += 1;
3922
3923
3
  proto_tree_add_item(ti, hf_artnet_poll_reply_swin_3, tvb,
3924
3
                      offset, 1, ENC_BIG_ENDIAN);
3925
3
  uni_port = tvb_get_uint8(tvb, offset) & 0x0F;
3926
3
  tf = proto_tree_add_uint(ti,hf_artnet_poll_reply_swin_3_universe,tvb,
3927
3
                           offset, 0, universe | uni_port);
3928
3
  proto_item_set_generated(tf);
3929
3
  offset += 1;
3930
3931
3
  proto_tree_add_item(ti, hf_artnet_poll_reply_swin_4, tvb,
3932
3
                      offset, 1, ENC_BIG_ENDIAN);
3933
3
  uni_port = tvb_get_uint8(tvb, offset) & 0x0F;
3934
3
  tf = proto_tree_add_uint(ti,hf_artnet_poll_reply_swin_4_universe,tvb,
3935
3
                           offset, 0, universe | uni_port);
3936
3
  proto_item_set_generated(tf);
3937
3
  offset += 1;
3938
3939
3
  hi = proto_tree_add_item(si,
3940
3
                           hf_artnet_poll_reply_swout,
3941
3
                           tvb,
3942
3
                           offset,
3943
3
                           ARTNET_POLL_REPLY_SWOUT_LENGTH,
3944
3
                           ENC_NA);
3945
3946
3
  ti = proto_item_add_subtree(hi, ett_artnet_poll_reply_swout);
3947
3948
3
  proto_tree_add_item(ti, hf_artnet_poll_reply_swout_1, tvb,
3949
3
                      offset, 1, ENC_BIG_ENDIAN);
3950
3
  uni_port = tvb_get_uint8(tvb, offset) & 0x0F;
3951
3
  tf = proto_tree_add_uint(ti,hf_artnet_poll_reply_swout_1_universe,tvb,
3952
3
                           offset, 0, universe | uni_port);
3953
3
  proto_item_set_generated(tf);
3954
3
  offset += 1;
3955
3956
3
  proto_tree_add_item(ti, hf_artnet_poll_reply_swout_2, tvb,
3957
3
                      offset, 1, ENC_BIG_ENDIAN);
3958
3
  uni_port = tvb_get_uint8(tvb, offset) & 0x0F;
3959
3
  tf = proto_tree_add_uint(ti,hf_artnet_poll_reply_swout_2_universe,tvb,
3960
3
                           offset, 0, universe | uni_port);
3961
3
  proto_item_set_generated(tf);
3962
3
  offset += 1;
3963
3964
3
  proto_tree_add_item(ti, hf_artnet_poll_reply_swout_3, tvb,
3965
3
                      offset, 1, ENC_BIG_ENDIAN);
3966
3
  uni_port = tvb_get_uint8(tvb, offset) & 0x0F;
3967
3
  tf = proto_tree_add_uint(ti,hf_artnet_poll_reply_swout_3_universe,tvb,
3968
3
                           offset, 0, universe | uni_port);
3969
3
  proto_item_set_generated(tf);
3970
3
  offset += 1;
3971
3972
3
  proto_tree_add_item(ti, hf_artnet_poll_reply_swout_4, tvb,
3973
3
                      offset, 1, ENC_BIG_ENDIAN);
3974
3
  uni_port = tvb_get_uint8(tvb, offset) & 0x0F;
3975
3
  tf = proto_tree_add_uint(ti,hf_artnet_poll_reply_swout_4_universe,tvb,
3976
3
                           offset, 0, universe | uni_port);
3977
3
  proto_item_set_generated(tf);
3978
3
  offset += 1;
3979
3980
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_sacnprio, tvb,
3981
3
                      offset, 1, ENC_BIG_ENDIAN);
3982
3
  offset += 1;
3983
3984
3
  proto_tree_add_bitmask(tree, tvb, offset, hf_artnet_poll_reply_swmacro,
3985
3
                         ett_artnet_poll_reply_swmacro,
3986
3
                         artnet_poll_reply_swmacro_fields,
3987
3
                         ENC_BIG_ENDIAN);
3988
3
  offset += 1;
3989
3990
3
  proto_tree_add_bitmask(tree, tvb, offset, hf_artnet_poll_reply_swremote,
3991
3
                         ett_artnet_poll_reply_swremote,
3992
3
                         artnet_poll_reply_swremote_fields,
3993
3
                         ENC_BIG_ENDIAN);
3994
3
  offset += 1;
3995
3996
3
  proto_tree_add_item(tree, hf_artnet_spare, tvb,
3997
3
                      offset, 3, ENC_NA);
3998
3
  offset += 3;
3999
4000
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_style, tvb,
4001
3
                      offset, 1, ENC_BIG_ENDIAN);
4002
3
  offset += 1;
4003
4004
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_mac,
4005
3
                        tvb, offset, 6, ENC_NA);
4006
3
  offset += 6;
4007
4008
3
  bind_ip_address = tvb_get_uint32(tvb, offset, ENC_BIG_ENDIAN);
4009
3
  tp = proto_tree_add_item(tree, hf_artnet_poll_reply_bind_ip_address, tvb,
4010
3
                      offset, 4, ENC_BIG_ENDIAN);
4011
3
  if(bind_ip_address == 0) {
4012
0
    proto_item_append_text(tp, " (unused)");
4013
0
  }
4014
3
  offset += 4;
4015
4016
3
  bind_index = tvb_get_uint8(tvb, offset);
4017
3
  col_append_fstr(pinfo->cinfo, COL_INFO, " BindIdx=0x%02x", bind_index);
4018
3
  tp = proto_tree_add_item(tree, hf_artnet_poll_reply_bind_index, tvb,
4019
3
                      offset, 1, ENC_BIG_ENDIAN);
4020
3
  if(bind_index == 0) {
4021
0
    proto_item_append_text(tp, " (unused)");
4022
3
  } else if(bind_index == 1) {
4023
0
    proto_item_append_text(tp, " (root device)");
4024
0
  }
4025
3
  offset += 1;
4026
4027
  /* If bind IP is non-zero, bind index must also be non-zero */
4028
3
  if(bind_ip_address != 0 && bind_index == 0) {
4029
0
    expert_add_info(pinfo, tree, &ei_artnet_poll_reply_bind_ip_without_index);
4030
0
  }
4031
4032
  /* If bind index is non-zero, bind IP must also be non-zero */
4033
3
  if(bind_index != 0 && bind_ip_address == 0) {
4034
0
    expert_add_info(pinfo, tree, &ei_artnet_poll_reply_bind_index_without_ip);
4035
0
  }
4036
4037
3
  proto_tree_add_bitmask(tree, tvb, offset, hf_artnet_poll_reply_status2,
4038
3
                         ett_artnet_poll_reply_status2,
4039
3
                         artnet_poll_reply_status2_fields,
4040
3
                         ENC_BIG_ENDIAN);
4041
3
  offset += 1;
4042
4043
4044
3
  hi = proto_tree_add_item(tree,
4045
3
                           hf_artnet_poll_reply_good_output_b,
4046
3
                           tvb,
4047
3
                           offset,
4048
3
                           ARTNET_POLL_REPLY_GOOD_OUTPUT_B_LENGTH,
4049
3
                           ENC_NA);
4050
4051
3
  ti = proto_item_add_subtree(hi, ett_artnet_poll_reply_good_output_b);
4052
4053
3
  proto_tree_add_bitmask(ti, tvb, offset, hf_artnet_poll_reply_good_output_b_1,
4054
3
                         ett_artnet_poll_reply_good_output_b_1,
4055
3
                         artnet_poll_reply_good_output_b_fields,
4056
3
                         ENC_BIG_ENDIAN);
4057
3
  offset += 1;
4058
3
  proto_tree_add_bitmask(ti, tvb, offset, hf_artnet_poll_reply_good_output_b_2,
4059
3
                         ett_artnet_poll_reply_good_output_b_2,
4060
3
                         artnet_poll_reply_good_output_b_fields,
4061
3
                         ENC_BIG_ENDIAN);
4062
3
  offset += 1;
4063
3
  proto_tree_add_bitmask(ti, tvb, offset, hf_artnet_poll_reply_good_output_b_3,
4064
3
                         ett_artnet_poll_reply_good_output_b_3,
4065
3
                         artnet_poll_reply_good_output_b_fields,
4066
3
                         ENC_BIG_ENDIAN);
4067
3
  offset += 1;
4068
3
  proto_tree_add_bitmask(ti, tvb, offset, hf_artnet_poll_reply_good_output_b_4,
4069
3
                         ett_artnet_poll_reply_good_output_b_4,
4070
3
                         artnet_poll_reply_good_output_b_fields,
4071
3
                         ENC_BIG_ENDIAN);
4072
3
  offset += 1;
4073
4074
3
  bg_queue_supported = (bool)tvb_get_bits8(tvb, offset*8+6, 1);
4075
3
  proto_tree_add_bitmask(tree, tvb, offset, hf_artnet_poll_reply_status3,
4076
3
                         ett_artnet_poll_reply_status3,
4077
3
                         artnet_poll_reply_status3_fields,
4078
3
                         ENC_BIG_ENDIAN);
4079
3
  offset += 1;
4080
4081
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_default_responder_uid, tvb, offset, 6, ENC_NA);
4082
3
  offset += 6;
4083
4084
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_user, tvb, offset, 2, ENC_BIG_ENDIAN);
4085
3
  offset += 2;
4086
4087
3
  proto_tree_add_item(tree, hf_artnet_poll_reply_refreshrate, tvb, offset, 2, ENC_BIG_ENDIAN);
4088
3
  offset += 2;
4089
4090
3
  if(bg_queue_supported) {
4091
0
    proto_tree_add_item(tree, hf_artnet_poll_reply_bg_queue_policy, tvb, offset, 1, ENC_BIG_ENDIAN);
4092
0
    offset += 1;
4093
0
  }
4094
4095
  /* There are additional filler bytes reserved for future use */
4096
3
  if (offset < tvb_reported_length(tvb))
4097
0
  {
4098
0
    proto_tree_add_item(tree, hf_artnet_filler, tvb, offset, -1, ENC_NA);
4099
0
    offset = tvb_reported_length(tvb);
4100
0
  }
4101
4102
3
  return offset;
4103
3
}
4104
4105
static unsigned
4106
dissect_artnet_output(tvbuff_t *tvb, unsigned offset, proto_tree *tree, packet_info *pinfo, proto_tree* base_tree)
4107
0
{
4108
0
  tvbuff_t *next_tvb;
4109
0
  uint16_t  length;
4110
0
  unsigned  size;
4111
0
  bool      save_info;
4112
4113
0
  proto_tree_add_item(tree, hf_artnet_output_sequence, tvb,
4114
0
                      offset, 1, ENC_BIG_ENDIAN);
4115
0
  offset += 1;
4116
4117
0
  proto_tree_add_item(tree, hf_artnet_output_physical, tvb,
4118
0
                      offset, 1, ENC_BIG_ENDIAN);
4119
0
  offset += 1;
4120
4121
0
  proto_tree_add_item(tree, hf_artnet_output_universe, tvb,
4122
0
                      offset, 2, ENC_LITTLE_ENDIAN);
4123
0
  offset += 2;
4124
4125
0
  col_append_fstr(pinfo->cinfo, COL_INFO, " Seq=%d Port=%d Univ=%d",
4126
0
    tvb_get_uint8(tvb, offset-4), tvb_get_uint8(tvb, offset-3), tvb_get_uint16(tvb, offset-2, ENC_LITTLE_ENDIAN));
4127
4128
0
  length = tvb_get_ntohs(tvb, offset);
4129
0
  proto_tree_add_uint(tree, hf_artnet_output_length, tvb,
4130
0
                      offset, 2, length);
4131
0
  offset += 2;
4132
4133
0
  size = tvb_reported_length_remaining(tvb, offset);
4134
4135
0
  save_info = col_get_writable(pinfo->cinfo, COL_INFO);
4136
0
  col_set_writable(pinfo->cinfo, COL_INFO, false);
4137
4138
0
  next_tvb = tvb_new_subset_length(tvb, offset, length);
4139
4140
0
  call_dissector(dmx_chan_handle, next_tvb, pinfo, base_tree);
4141
4142
0
  col_set_writable(pinfo->cinfo, COL_INFO, save_info);
4143
4144
0
  return offset + size;
4145
0
}
4146
4147
static unsigned
4148
dissect_artnet_sync(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
4149
0
{
4150
0
  proto_tree_add_item(tree, hf_artnet_sync_aux, tvb,
4151
0
                      offset, 2, ENC_BIG_ENDIAN);
4152
0
  offset += 2;
4153
4154
0
  return offset;
4155
0
}
4156
4157
static unsigned
4158
dissect_artnet_nzs(tvbuff_t *tvb, unsigned offset, proto_tree *tree, packet_info *pinfo, proto_tree* base_tree)
4159
2
{
4160
2
  uint16_t length, payload_length, lang_code;
4161
2
  uint8_t start_code;
4162
2
  bool save_info;
4163
2
  tvbuff_t *next_tvb;
4164
2
  proto_item *pi;
4165
4166
2
  proto_tree_add_item(tree, hf_artnet_nzs_sequence, tvb,
4167
2
                      offset, 1, ENC_BIG_ENDIAN);
4168
2
  offset += 1;
4169
4170
2
  start_code = tvb_get_uint8(tvb, offset);
4171
2
  proto_tree_add_item(tree, hf_artnet_nzs_start_code, tvb,
4172
2
                      offset, 1, ENC_BIG_ENDIAN);
4173
2
  offset += 1;
4174
4175
2
  proto_tree_add_item(tree, hf_artnet_nzs_subuni, tvb,
4176
2
                      offset, 1, ENC_BIG_ENDIAN);
4177
2
  offset += 1;
4178
4179
2
  proto_tree_add_item(tree, hf_artnet_nzs_net, tvb,
4180
2
                      offset, 1, ENC_BIG_ENDIAN);
4181
2
  offset += 1;
4182
4183
2
  length = tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN);
4184
2
  proto_tree_add_item(tree, hf_artnet_nzs_length, tvb,
4185
2
                      offset, 2, ENC_BIG_ENDIAN);
4186
2
  offset += 2;
4187
4188
4189
  /* check if packet is normal ArtNzs or ArtVlc */
4190
4191
2
  if(tvb_reported_length_remaining(tvb, offset) < 3) {
4192
0
    return offset;
4193
0
  }
4194
4195
2
  if(
4196
2
    start_code == ARTNET_NZS_VLC_START_CODE &&
4197
0
    tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN) == ARTNET_NZS_VLC_MAGIC_MAN_ID &&
4198
0
    tvb_get_uint8(tvb, offset + 2) == ARTNET_NZS_VLC_MAGIC_SUB_CODE
4199
2
  ) {
4200
4201
    /* VLC */
4202
4203
0
    proto_tree_add_item(tree, hf_artnet_nzs_vlc_man_id, tvb,
4204
0
                    offset, 2, ENC_BIG_ENDIAN);
4205
0
    offset += 2;
4206
4207
0
    proto_tree_add_item(tree, hf_artnet_nzs_vlc_sub_code, tvb,
4208
0
                        offset, 1, ENC_BIG_ENDIAN);
4209
0
    offset += 1;
4210
4211
0
    proto_tree_add_bitmask(tree, tvb, offset, hf_artnet_nzs_vlc_flags,
4212
0
                          ett_artnet_nzs_vlc_flags,
4213
0
                          artnet_nzs_vlc_flags_fields,
4214
0
                          ENC_BIG_ENDIAN);
4215
0
    offset += 1;
4216
4217
0
    proto_tree_add_item(tree, hf_artnet_nzs_vlc_transaction, tvb,
4218
0
                        offset, 2, ENC_BIG_ENDIAN);
4219
0
    offset += 2;
4220
4221
0
    proto_tree_add_item(tree, hf_artnet_nzs_vlc_slot_addr, tvb,
4222
0
                        offset, 2, ENC_BIG_ENDIAN);
4223
0
    offset += 2;
4224
4225
0
    payload_length = tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN);
4226
0
    proto_tree_add_item(tree, hf_artnet_nzs_vlc_payload_size, tvb,
4227
0
                        offset, 2, ENC_BIG_ENDIAN);
4228
0
    offset += 2;
4229
4230
0
    proto_tree_add_checksum(tree, tvb, offset, hf_artnet_nzs_vlc_payload_checksum, -1, NULL, NULL, 0, ENC_BIG_ENDIAN, PROTO_CHECKSUM_NO_FLAGS);
4231
0
    offset += 2;
4232
4233
0
    proto_tree_add_item(tree, hf_artnet_spare, tvb,
4234
0
                        offset, 1, ENC_NA);
4235
0
    offset += 1;
4236
4237
0
    proto_tree_add_item(tree, hf_artnet_nzs_vlc_mod_depth, tvb,
4238
0
                        offset, 1, ENC_BIG_ENDIAN);
4239
0
    offset += 1;
4240
4241
0
    proto_tree_add_item(tree, hf_artnet_nzs_vlc_mod_freq, tvb,
4242
0
                        offset, 2, ENC_BIG_ENDIAN);
4243
0
    offset += 2;
4244
4245
0
    proto_tree_add_item(tree, hf_artnet_nzs_vlc_mod_type, tvb,
4246
0
                        offset, 2, ENC_BIG_ENDIAN);
4247
0
    offset += 2;
4248
4249
0
    lang_code = tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN);
4250
0
    proto_tree_add_item(tree, hf_artnet_nzs_vlc_lang_code, tvb,
4251
0
                        offset, 2, ENC_BIG_ENDIAN);
4252
0
    offset += 2;
4253
4254
0
    proto_tree_add_item(tree, hf_artnet_nzs_vlc_beacon_repeat, tvb,
4255
0
                        offset, 2, ENC_BIG_ENDIAN);
4256
0
    offset += 2;
4257
4258
0
    proto_tree_add_item(tree, hf_artnet_nzs_vlc_payload, tvb,
4259
0
                        offset, payload_length, ENC_NA);
4260
4261
0
    if(lang_code == ARTNET_NZS_VLC_LANG_CODE_BEACON_URL) {
4262
0
      pi = proto_tree_add_item(tree, hf_artnet_nzs_vlc_payload_beacon_url, tvb, offset, payload_length, ENC_ASCII);
4263
0
      proto_item_set_generated(pi);
4264
0
    } else if(lang_code == ARTNET_NZS_VLC_LANG_CODE_BEACON_TEXT) {
4265
0
      pi = proto_tree_add_item(tree, hf_artnet_nzs_vlc_payload_beacon_text, tvb, offset, payload_length, ENC_ASCII);
4266
0
      proto_item_set_generated(pi);
4267
0
    } else if(lang_code == ARTNET_NZS_VLC_LANG_CODE_BEACON_LOCID && tvb_reported_length_remaining(tvb, offset) >= 2) {
4268
0
      pi = proto_tree_add_item(tree, hf_artnet_nzs_vlc_payload_beacon_location_id, tvb, offset, 2, ENC_BIG_ENDIAN);
4269
0
      proto_item_set_generated(pi);
4270
0
    }
4271
0
    offset += payload_length;
4272
4273
0
    return offset;
4274
4275
2
  } else {
4276
4277
    /* Nzs -> DMX data */
4278
4279
2
    save_info = col_get_writable(pinfo->cinfo, COL_INFO);
4280
2
    col_set_writable(pinfo->cinfo, COL_INFO, false);
4281
4282
2
    next_tvb = tvb_new_subset_length(tvb, offset, length);
4283
4284
2
    call_dissector(dmx_chan_handle, next_tvb, pinfo, base_tree);
4285
4286
2
    col_set_writable(pinfo->cinfo, COL_INFO, save_info);
4287
4288
2
    return offset + length;
4289
4290
2
  }
4291
2
}
4292
4293
static unsigned
4294
0
dissect_artnet_address(tvbuff_t *tvb, unsigned offset, proto_tree *tree, packet_info *pinfo) {
4295
0
  proto_tree *hi, *si, *ti;
4296
0
  uint8_t net, sub;
4297
4298
0
  net = tvb_get_uint8(tvb, offset);
4299
4300
  /* Treat the "special" values differently */
4301
0
  if (net == 0x00 || net == 0x7F) {
4302
0
    proto_tree_add_uint(tree,hf_artnet_address_netswitch_special, tvb,
4303
0
                           offset, 0, net);
4304
0
  } else {
4305
0
    proto_tree_add_bitmask_text(tree, tvb, offset, 1, "NetSwitch: ",
4306
0
                  "NetSwitch Error: ", ett_artnet_address_netswitch,
4307
0
                  artnet_address_netswitch_fields, ENC_BIG_ENDIAN, 0);
4308
0
  }
4309
4310
0
  offset += 1;
4311
4312
0
  col_append_fstr(pinfo->cinfo, COL_INFO, " BindIdx=0x%02x", tvb_get_uint8(tvb, offset));
4313
0
  proto_tree_add_item(tree, hf_artnet_address_bind_index, tvb,
4314
0
                      offset, 1, ENC_BIG_ENDIAN);
4315
0
  offset += 1;
4316
4317
0
  proto_tree_add_item(tree, hf_artnet_address_short_name,
4318
0
                      tvb, offset, 18, ENC_ASCII);
4319
0
  offset += 18;
4320
4321
0
  proto_tree_add_item(tree, hf_artnet_address_long_name,
4322
0
                      tvb, offset, 64, ENC_ASCII);
4323
0
  offset += 64;
4324
4325
0
  hi = proto_tree_add_item(tree,
4326
0
                           hf_artnet_address_swin,
4327
0
                           tvb,
4328
0
                           offset,
4329
0
                           ARTNET_ADDRESS_SWIN_LENGTH,
4330
0
                           ENC_NA);
4331
4332
0
  ti = proto_item_add_subtree(hi, ett_artnet_address_swin);
4333
4334
0
  proto_tree_add_item(ti, hf_artnet_address_swin_1, tvb,
4335
0
                      offset, 1, ENC_BIG_ENDIAN);
4336
0
  offset += 1;
4337
4338
0
  proto_tree_add_item(ti, hf_artnet_address_swin_2, tvb,
4339
0
                      offset, 1, ENC_BIG_ENDIAN);
4340
0
  offset += 1;
4341
4342
0
  proto_tree_add_item(ti, hf_artnet_address_swin_3, tvb,
4343
0
                      offset, 1, ENC_BIG_ENDIAN);
4344
0
  offset += 1;
4345
4346
0
  proto_tree_add_item(ti, hf_artnet_address_swin_4, tvb,
4347
0
                      offset, 1, ENC_BIG_ENDIAN);
4348
0
  offset += 1;
4349
4350
0
  hi = proto_tree_add_item(tree,
4351
0
                           hf_artnet_address_swout,
4352
0
                           tvb,
4353
0
                           offset,
4354
0
                           ARTNET_ADDRESS_SWOUT_LENGTH,
4355
0
                           ENC_NA);
4356
4357
0
  si = proto_item_add_subtree(hi, ett_artnet_address_swout);
4358
4359
0
  proto_tree_add_item(si, hf_artnet_address_swout_1, tvb,
4360
0
                      offset, 1, ENC_BIG_ENDIAN);
4361
0
  offset += 1;
4362
4363
0
  proto_tree_add_item(si, hf_artnet_address_swout_2, tvb,
4364
0
                      offset, 1, ENC_BIG_ENDIAN);
4365
0
  offset += 1;
4366
4367
0
  proto_tree_add_item(si, hf_artnet_address_swout_3, tvb,
4368
0
                      offset, 1, ENC_BIG_ENDIAN);
4369
0
  offset += 1;
4370
4371
0
  proto_tree_add_item(si, hf_artnet_address_swout_4, tvb,
4372
0
                      offset, 1, ENC_BIG_ENDIAN);
4373
0
  offset += 1;
4374
4375
0
  sub = tvb_get_uint8(tvb, offset);
4376
4377
  /* Treat the "special" values differently */
4378
0
  if (sub == 0x00 || sub == 0x7F) {
4379
0
    proto_tree_add_uint(tree,hf_artnet_address_subswitch_special, tvb,
4380
0
                           offset, 0, sub);
4381
0
  } else {
4382
0
    proto_tree_add_bitmask_text(tree, tvb, offset, 1, "SubSwitch: ",
4383
0
                  "SubSwitch Error: ", ett_artnet_address_subswitch,
4384
0
                  artnet_address_subswitch_fields, ENC_BIG_ENDIAN, 0);
4385
0
  }
4386
0
  offset += 1;
4387
4388
0
  proto_tree_add_item(tree, hf_artnet_address_sacnprio, tvb,
4389
0
                      offset, 1, ENC_BIG_ENDIAN);
4390
0
  offset += 1;
4391
4392
0
  proto_tree_add_item(tree, hf_artnet_address_command, tvb,
4393
0
                      offset, 1, ENC_BIG_ENDIAN);
4394
4395
0
  offset += 1;
4396
4397
0
  return offset;
4398
0
}
4399
4400
static unsigned
4401
0
dissect_artnet_input(tvbuff_t *tvb, unsigned offset, proto_tree *tree, packet_info *pinfo) {
4402
0
  proto_tree *hi, *si;
4403
4404
0
  proto_tree_add_item(tree, hf_artnet_filler, tvb,
4405
0
                      offset, 1, ENC_NA);
4406
0
  offset += 1;
4407
4408
0
  col_append_fstr(pinfo->cinfo, COL_INFO, " BindIdx=0x%02x", tvb_get_uint8(tvb, offset));
4409
0
  proto_tree_add_item(tree, hf_artnet_input_bind_index, tvb,
4410
0
                      offset, 1, ENC_BIG_ENDIAN);
4411
0
  offset += 1;
4412
4413
0
  col_append_fstr(pinfo->cinfo, COL_INFO, " Ports=%d", tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN));
4414
0
  proto_tree_add_item(tree, hf_artnet_input_num_ports, tvb,
4415
0
                      offset, 2, ENC_BIG_ENDIAN);
4416
0
  offset += 2;
4417
4418
0
  hi = proto_tree_add_item(tree,
4419
0
                           hf_artnet_input_input,
4420
0
                           tvb,
4421
0
                           offset,
4422
0
                           ARTNET_INPUT_INPUT_LENGTH,
4423
0
                           ENC_NA);
4424
4425
0
  si = proto_item_add_subtree(hi, ett_artnet_input_input);
4426
4427
0
  proto_tree_add_bitmask(si, tvb, offset, hf_artnet_input_input_1,
4428
0
                         ett_artnet_input_input_1,
4429
0
                         artnet_input_input_fields,
4430
0
                         ENC_BIG_ENDIAN);
4431
0
  offset += 1;
4432
4433
0
  proto_tree_add_bitmask(si, tvb, offset, hf_artnet_input_input_2,
4434
0
                         ett_artnet_input_input_2,
4435
0
                         artnet_input_input_fields,
4436
0
                         ENC_BIG_ENDIAN);
4437
0
  offset += 1;
4438
4439
0
  proto_tree_add_bitmask(si, tvb, offset, hf_artnet_input_input_3,
4440
0
                         ett_artnet_input_input_3,
4441
0
                         artnet_input_input_fields,
4442
0
                         ENC_BIG_ENDIAN);
4443
0
  offset += 1;
4444
4445
0
  proto_tree_add_bitmask(si, tvb, offset, hf_artnet_input_input_4,
4446
0
                         ett_artnet_input_input_4,
4447
0
                         artnet_input_input_fields,
4448
0
                         ENC_BIG_ENDIAN);
4449
0
  offset += 1;
4450
4451
0
  return offset;
4452
0
}
4453
4454
static unsigned
4455
0
dissect_artnet_video_setup(tvbuff_t *tvb, unsigned offset, proto_tree *tree ) {
4456
0
  uint32_t size;
4457
0
  uint8_t font_height, last_font;
4458
4459
0
  proto_tree_add_item(tree, hf_artnet_filler, tvb,
4460
0
                      offset, 4, ENC_NA);
4461
0
  offset += 4;
4462
4463
0
  proto_tree_add_item(tree, hf_artnet_video_setup_control, tvb,
4464
0
                      offset, 1, ENC_BIG_ENDIAN);
4465
0
  offset += 1;
4466
4467
0
  font_height = tvb_get_uint8(tvb, offset);
4468
0
  proto_tree_add_uint(tree, hf_artnet_video_setup_font_height, tvb,
4469
0
                      offset, 1, font_height);
4470
0
  offset += 1;
4471
4472
0
  proto_tree_add_item(tree, hf_artnet_video_setup_first_font, tvb,
4473
0
                      offset, 1, ENC_BIG_ENDIAN);
4474
0
  offset += 1;
4475
4476
0
  last_font = tvb_get_uint8(tvb, offset);
4477
0
  proto_tree_add_uint(tree, hf_artnet_video_setup_last_font, tvb,
4478
0
                      offset, 1, last_font);
4479
0
  offset += 1;
4480
4481
0
  proto_tree_add_item(tree, hf_artnet_video_setup_win_font_name,
4482
0
                      tvb, offset, 64, ENC_ASCII);
4483
0
  offset += 64;
4484
4485
0
  size = last_font * font_height;
4486
4487
0
  proto_tree_add_item(tree, hf_artnet_video_setup_font_data, tvb,
4488
0
                      offset, size, ENC_NA );
4489
4490
0
  offset += size;
4491
4492
0
  return offset;
4493
0
}
4494
4495
static unsigned
4496
dissect_artnet_video_palette(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
4497
0
{
4498
0
  proto_tree_add_item(tree, hf_artnet_filler, tvb,
4499
0
                      offset, 2, ENC_NA);
4500
0
  offset += 2;
4501
4502
0
  proto_tree_add_item(tree, hf_artnet_video_palette_colour_red, tvb,
4503
0
                      offset, 17, ENC_NA );
4504
0
  offset += 17;
4505
4506
0
  proto_tree_add_item(tree, hf_artnet_video_palette_colour_green, tvb,
4507
0
                      offset, 17, ENC_NA );
4508
0
  offset += 17;
4509
4510
0
  proto_tree_add_item(tree, hf_artnet_video_palette_colour_blue, tvb,
4511
0
                      offset, 17, ENC_NA );
4512
0
  offset += 17;
4513
4514
0
  return offset;
4515
0
}
4516
4517
static unsigned
4518
0
dissect_artnet_video_data(tvbuff_t *tvb, unsigned offset, proto_tree *tree) {
4519
0
  uint8_t len_x, len_y;
4520
0
  uint32_t size;
4521
4522
0
  proto_tree_add_item(tree, hf_artnet_filler, tvb,
4523
0
                      offset, 2, ENC_NA);
4524
0
  offset += 2;
4525
4526
0
  proto_tree_add_item(tree, hf_artnet_video_data_pos_x, tvb,
4527
0
                      offset, 1, ENC_BIG_ENDIAN);
4528
0
  offset += 1;
4529
4530
0
  proto_tree_add_item(tree, hf_artnet_video_data_pos_y, tvb,
4531
0
                      offset, 1, ENC_BIG_ENDIAN);
4532
0
  offset += 1;
4533
4534
0
  len_x = tvb_get_uint8(tvb, offset);
4535
0
  proto_tree_add_uint(tree, hf_artnet_video_data_len_x, tvb,
4536
0
                      offset, 1, len_x);
4537
0
  offset += 1;
4538
4539
0
  len_y = tvb_get_uint8(tvb, offset);
4540
0
  proto_tree_add_uint(tree, hf_artnet_video_data_len_y, tvb,
4541
0
                      offset, 1, len_y);
4542
0
  offset += 1;
4543
4544
0
  size = len_x * len_y * 2;
4545
4546
0
  proto_tree_add_item(tree, hf_artnet_video_data_data, tvb,
4547
0
                      offset, size, ENC_NA );
4548
4549
0
  offset += size;
4550
4551
0
  return offset;
4552
0
}
4553
4554
static unsigned
4555
0
dissect_artnet_firmware_master(tvbuff_t *tvb, unsigned offset, proto_tree *tree ) {
4556
0
  proto_tree_add_item(tree, hf_artnet_filler, tvb,
4557
0
                      offset, 2, ENC_NA);
4558
0
  offset += 2;
4559
4560
0
  proto_tree_add_item(tree, hf_artnet_firmware_master_type, tvb,
4561
0
                      offset, 1, ENC_BIG_ENDIAN);
4562
0
  offset += 1;
4563
4564
0
  proto_tree_add_item(tree, hf_artnet_firmware_master_block_id, tvb,
4565
0
                      offset, 1, ENC_BIG_ENDIAN);
4566
0
  offset += 1;
4567
4568
0
  proto_tree_add_item(tree, hf_artnet_firmware_master_length, tvb,
4569
0
                      offset, 4, ENC_BIG_ENDIAN);
4570
0
  offset += 4;
4571
4572
0
  proto_tree_add_item(tree, hf_artnet_spare, tvb,
4573
0
                      offset, 20, ENC_NA );
4574
0
  offset += 20;
4575
4576
0
  proto_tree_add_item(tree, hf_artnet_firmware_master_data, tvb,
4577
0
                      offset, 1024, ENC_NA );
4578
0
  offset += 1024;
4579
4580
0
  return offset;
4581
0
}
4582
4583
static unsigned
4584
0
dissect_artnet_firmware_reply(tvbuff_t *tvb, unsigned offset, proto_tree *tree) {
4585
0
  proto_tree_add_item(tree, hf_artnet_filler, tvb,
4586
0
                      offset, 2, ENC_NA);
4587
0
  offset += 2;
4588
4589
0
  proto_tree_add_item(tree, hf_artnet_firmware_reply_type, tvb,
4590
0
                      offset, 1, ENC_BIG_ENDIAN);
4591
0
  offset += 1;
4592
4593
0
  proto_tree_add_item(tree, hf_artnet_spare, tvb,
4594
0
                      offset, 21, ENC_NA );
4595
0
  offset += 21;
4596
4597
0
  return offset;
4598
0
}
4599
4600
static unsigned
4601
dissect_artnet_tod_request(tvbuff_t *tvb, unsigned offset, proto_tree *tree, packet_info *pinfo)
4602
0
{
4603
0
  uint8_t ad_count;
4604
4605
0
  proto_tree_add_item(tree, hf_artnet_filler, tvb,
4606
0
                      offset, 2, ENC_NA);
4607
0
  offset += 2;
4608
4609
0
  proto_tree_add_item(tree, hf_artnet_spare, tvb,
4610
0
                      offset, 7, ENC_NA);
4611
0
  offset += 7;
4612
4613
0
  proto_tree_add_item(tree, hf_artnet_tod_request_net, tvb,
4614
0
                      offset, 1, ENC_NA);
4615
0
  offset += 1;
4616
4617
0
  col_append_fstr(pinfo->cinfo, COL_INFO, " Cmd=%s", val_to_str(pinfo->pool, tvb_get_uint8(tvb, offset), artnet_tod_request_command_vals, "unknown(%u)"));
4618
0
  proto_tree_add_item(tree, hf_artnet_tod_request_command, tvb,
4619
0
                      offset, 1, ENC_BIG_ENDIAN);
4620
0
  offset += 1;
4621
4622
0
  ad_count = tvb_get_uint8(tvb, offset);
4623
0
  proto_tree_add_uint(tree, hf_artnet_tod_request_ad_count, tvb,
4624
0
                      offset, 1, ad_count);
4625
0
  offset += 1;
4626
4627
0
  proto_tree_add_item(tree, hf_artnet_tod_request_address, tvb,
4628
0
                      offset, ad_count, ENC_NA);
4629
0
  offset += ad_count;
4630
4631
0
  return offset;
4632
0
}
4633
4634
static unsigned
4635
dissect_artnet_tod_data(tvbuff_t *tvb, unsigned offset, proto_tree *tree, packet_info *pinfo)
4636
0
{
4637
0
  uint16_t    universe;
4638
0
  proto_item *tf, *tod_item;
4639
0
  proto_tree * tod_tree;
4640
0
  uint8_t i, uid_count;
4641
4642
0
  proto_tree_add_item(tree, hf_artnet_tod_data_rdm_ver, tvb,
4643
0
                      offset, 1, ENC_BIG_ENDIAN);
4644
0
  offset += 1;
4645
4646
0
  proto_tree_add_item(tree, hf_artnet_tod_data_port, tvb,
4647
0
                      offset, 1, ENC_BIG_ENDIAN);
4648
0
  offset += 1;
4649
4650
0
  proto_tree_add_item(tree, hf_artnet_spare, tvb,
4651
0
                      offset, 6, ENC_NA);
4652
0
  offset += 6;
4653
4654
0
  col_append_fstr(pinfo->cinfo, COL_INFO, " BindIdx=0x%02x", tvb_get_uint8(tvb, offset));
4655
0
  proto_tree_add_item(tree, hf_artnet_tod_data_bind_index, tvb,
4656
0
                      offset, 1, ENC_BIG_ENDIAN);
4657
0
  offset += 1;
4658
4659
0
  proto_tree_add_item(tree, hf_artnet_tod_data_net, tvb,
4660
0
                      offset, 1, ENC_BIG_ENDIAN);
4661
0
  universe = (tvb_get_uint8(tvb, offset) & 0x7F) << 8;
4662
0
  offset += 1;
4663
4664
0
  proto_tree_add_item(tree, hf_artnet_tod_data_command_response, tvb,
4665
0
                      offset, 1, ENC_BIG_ENDIAN);
4666
0
  offset += 1;
4667
4668
0
  proto_tree_add_item(tree, hf_artnet_tod_data_address, tvb,
4669
0
                      offset, 1, ENC_BIG_ENDIAN);
4670
0
  universe |= tvb_get_uint8(tvb, offset);
4671
0
  tf = proto_tree_add_uint(tree,hf_artnet_tod_control_universe,tvb,
4672
0
                           offset, 0, universe);
4673
0
  proto_item_set_generated(tf);
4674
0
  offset += 1;
4675
4676
0
  proto_tree_add_item(tree, hf_artnet_tod_data_uid_total, tvb,
4677
0
                      offset, 2, ENC_BIG_ENDIAN);
4678
0
  offset += 2;
4679
4680
0
  proto_tree_add_item(tree, hf_artnet_tod_data_block_count, tvb,
4681
0
                      offset, 1, ENC_BIG_ENDIAN);
4682
0
  offset += 1;
4683
4684
0
  uid_count = tvb_get_uint8(tvb, offset);
4685
0
  proto_tree_add_uint(tree, hf_artnet_tod_data_uid_count, tvb,
4686
0
                      offset, 1, uid_count);
4687
0
  offset += 1;
4688
4689
0
  for( i = 0; i < uid_count; i++)
4690
0
  {
4691
0
    tod_item = proto_tree_add_item(tree, hf_artnet_tod_data_tod, tvb,
4692
0
                                  offset, 6, ENC_NA);
4693
0
    tod_tree = proto_item_add_subtree(tod_item, ett_artnet_tod_data_tod);
4694
0
    proto_tree_add_item(tod_tree, hf_artnet_tod_data_tod_manf, tvb,
4695
0
                        offset, 2, ENC_BIG_ENDIAN);
4696
0
    proto_tree_add_item(tod_tree, hf_artnet_tod_data_tod_dev, tvb,
4697
0
                        offset+2, 4, ENC_BIG_ENDIAN);
4698
0
    offset += 6;
4699
0
  }
4700
4701
0
  return offset;
4702
0
}
4703
4704
static unsigned
4705
dissect_artnet_tod_control(tvbuff_t *tvb, unsigned offset, proto_tree *tree, packet_info *pinfo)
4706
1
{
4707
1
  uint16_t universe;
4708
1
  proto_item *tf;
4709
4710
1
  proto_tree_add_item(tree, hf_artnet_filler, tvb,
4711
1
                      offset, 2, ENC_NA);
4712
1
  offset += 2;
4713
4714
1
  proto_tree_add_item(tree, hf_artnet_spare, tvb,
4715
1
                      offset, 7, ENC_NA);
4716
1
  offset += 7;
4717
4718
1
  proto_tree_add_item(tree, hf_artnet_tod_control_net, tvb,
4719
1
                      offset, 1, ENC_BIG_ENDIAN);
4720
1
  universe = (tvb_get_uint8(tvb, offset) & 0x7F) << 8;
4721
1
  offset += 1;
4722
4723
1
  col_append_fstr(pinfo->cinfo, COL_INFO, " Cmd=%s", val_to_str(pinfo->pool, tvb_get_uint8(tvb, offset), artnet_tod_control_command_vals, "unknown(%u)"));
4724
1
  proto_tree_add_item(tree, hf_artnet_tod_control_command, tvb,
4725
1
                      offset, 1, ENC_BIG_ENDIAN);
4726
1
  offset += 1;
4727
4728
1
  proto_tree_add_item(tree, hf_artnet_tod_control_address, tvb,
4729
1
                      offset, 1, ENC_BIG_ENDIAN);
4730
1
  universe |= tvb_get_uint8(tvb, offset);
4731
1
  tf = proto_tree_add_uint(tree,hf_artnet_tod_control_universe,tvb,
4732
1
                           offset, 0, universe);
4733
1
  proto_item_set_generated(tf);
4734
1
  offset += 1;
4735
4736
1
  return offset;
4737
1
}
4738
4739
static unsigned
4740
dissect_artnet_rdm(tvbuff_t *tvb, unsigned offset, proto_tree *tree,  packet_info *pinfo, proto_tree *base_tree)
4741
0
{
4742
0
  uint16_t    universe;
4743
0
  proto_item *tf;
4744
0
  uint8_t   rdmver;
4745
0
  uint8_t   sc;
4746
0
  unsigned  size;
4747
0
  bool      save_info;
4748
0
  tvbuff_t *next_tvb;
4749
4750
0
  rdmver = tvb_get_uint8(tvb, offset);
4751
0
  if (rdmver == 0x00) {
4752
0
    proto_tree_add_item(tree, hf_artnet_filler, tvb,
4753
0
                        offset, 2, ENC_NA);
4754
0
    offset += 2;
4755
4756
0
    proto_tree_add_item(tree, hf_artnet_spare, tvb,
4757
0
                        offset, 8, ENC_NA);
4758
0
    offset += 8;
4759
0
    universe = 0;
4760
0
  } else {
4761
0
    proto_tree_add_item(tree, hf_artnet_rdm_rdmver, tvb,
4762
0
                        offset, 1, ENC_BIG_ENDIAN);
4763
0
    offset += 1;
4764
4765
0
    proto_tree_add_item(tree, hf_artnet_filler, tvb,
4766
0
                        offset, 1, ENC_NA);
4767
0
    offset += 1;
4768
4769
0
    proto_tree_add_item(tree, hf_artnet_spare, tvb,
4770
0
                        offset, 5, ENC_NA);
4771
0
    offset += 5;
4772
4773
0
    proto_tree_add_item(tree, hf_artnet_rdm_fifo_avail, tvb,
4774
0
                        offset, 1, ENC_BIG_ENDIAN);
4775
0
    offset += 1;
4776
4777
0
    proto_tree_add_item(tree, hf_artnet_rdm_fifo_max, tvb,
4778
0
                        offset, 1, ENC_BIG_ENDIAN);
4779
0
    offset += 1;
4780
4781
0
    proto_tree_add_item(tree, hf_artnet_rdm_net, tvb,
4782
0
                        offset, 1, ENC_BIG_ENDIAN);
4783
0
    universe = (tvb_get_uint8(tvb, offset) & 0x7F) << 8;
4784
0
    offset += 1;
4785
0
  }
4786
4787
0
  proto_tree_add_item(tree, hf_artnet_rdm_command, tvb,
4788
0
                      offset, 1, ENC_BIG_ENDIAN);
4789
0
  offset += 1;
4790
4791
0
  proto_tree_add_item(tree, hf_artnet_rdm_address, tvb,
4792
0
                      offset, 1, ENC_BIG_ENDIAN);
4793
0
  universe |= tvb_get_uint8(tvb, offset);
4794
0
  tf = proto_tree_add_uint(tree,hf_artnet_tod_control_universe,tvb,
4795
0
                           offset, 0, universe);
4796
0
  proto_item_set_generated(tf);
4797
0
  offset += 1;
4798
4799
  /* check for old version that included the 0xCC startcode
4800
   * The 0xCC will never be the first byte of the RDM packet
4801
   */
4802
0
  sc = tvb_get_uint8(tvb, offset);
4803
4804
0
  if (sc == 0xCC) {
4805
0
    proto_tree_add_item(tree, hf_artnet_rdm_sc, tvb,
4806
0
                      offset, 1, ENC_BIG_ENDIAN);
4807
0
    offset += 1;
4808
0
  }
4809
4810
0
  size = tvb_reported_length_remaining(tvb, offset);
4811
4812
0
  save_info = col_get_writable(pinfo->cinfo, COL_INFO);
4813
0
  col_set_writable(pinfo->cinfo, COL_INFO, false);
4814
4815
0
  next_tvb = tvb_new_subset_remaining(tvb, offset);
4816
4817
0
  call_dissector(rdm_handle, next_tvb, pinfo, base_tree);
4818
4819
0
  col_set_writable(pinfo->cinfo, COL_INFO, save_info);
4820
4821
0
  return offset + size;
4822
0
}
4823
4824
4825
static unsigned
4826
dissect_artnet_rdm_sub(tvbuff_t *tvb, unsigned offset, proto_tree *tree,  packet_info *pinfo _U_)
4827
0
{
4828
0
  uint8_t cc;
4829
0
  int    size;
4830
4831
0
  proto_tree_add_item(tree, hf_artnet_rdm_rdmver, tvb,
4832
0
                      offset, 1, ENC_BIG_ENDIAN);
4833
0
  offset += 1;
4834
4835
0
  proto_tree_add_item(tree, hf_artnet_filler, tvb,
4836
0
                      offset, 1, ENC_NA);
4837
0
  offset += 1;
4838
4839
0
  proto_tree_add_item(tree, hf_artnet_rdm_sub_uid, tvb,
4840
0
                        offset, 6, ENC_NA);
4841
0
  offset += 6;
4842
4843
0
  proto_tree_add_item(tree, hf_artnet_spare, tvb,
4844
0
                        offset, 1, ENC_NA);
4845
0
  offset += 1;
4846
4847
0
  cc = tvb_get_uint8(tvb, offset);
4848
0
  proto_tree_add_item(tree, hf_artnet_rdm_sub_command_class, tvb,
4849
0
                      offset, 1, ENC_BIG_ENDIAN);
4850
0
  offset += 1;
4851
4852
0
  proto_tree_add_item(tree, hf_artnet_rdm_sub_pid, tvb,
4853
0
                      offset, 2, ENC_BIG_ENDIAN);
4854
0
  offset += 2;
4855
4856
0
  proto_tree_add_item(tree, hf_artnet_rdm_sub_sub_device, tvb,
4857
0
                      offset, 2, ENC_BIG_ENDIAN);
4858
0
  offset += 2;
4859
4860
0
  proto_tree_add_item(tree, hf_artnet_rdm_sub_sub_count, tvb,
4861
0
                      offset, 2, ENC_BIG_ENDIAN);
4862
0
  offset += 2;
4863
4864
0
  proto_tree_add_item(tree, hf_artnet_spare, tvb,
4865
0
                        offset, 4, ENC_NA);
4866
0
  offset += 4;
4867
4868
0
  switch (cc) {
4869
0
    case ARTNET_CC_SET_COMMAND:
4870
0
    case ARTNET_CC_GET_COMMAND_RESPONSE:
4871
0
      size = tvb_reported_length_remaining(tvb, offset);
4872
0
      proto_tree_add_item(tree, hf_artnet_rdm_sub_data, tvb,
4873
0
                          offset, size, ENC_NA);
4874
0
      offset += size;
4875
0
      break;
4876
4877
0
  case ARTNET_CC_DISCOVERY_COMMAND:
4878
0
  case ARTNET_CC_DISCOVERY_COMMAND_RESPONSE:
4879
0
  case ARTNET_CC_GET_COMMAND:
4880
0
  case ARTNET_CC_SET_COMMAND_RESPONSE:
4881
0
  default:
4882
0
    break;
4883
0
  }
4884
4885
0
  return offset;
4886
0
}
4887
4888
static unsigned
4889
dissect_artnet_ip_prog(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
4890
0
{
4891
0
  proto_tree_add_item(tree, hf_artnet_filler, tvb,
4892
0
                      offset, 2, ENC_NA);
4893
0
  offset += 2;
4894
4895
0
  proto_tree_add_bitmask(tree, tvb, offset, hf_artnet_ip_prog_command,
4896
0
                         ett_artnet_ip_prog_command,
4897
0
                         artnet_ip_prog_command_fields,
4898
0
                         ENC_BIG_ENDIAN);
4899
0
  offset += 1;
4900
4901
0
  proto_tree_add_item(tree, hf_artnet_filler, tvb,
4902
0
                      offset, 1, ENC_NA);
4903
0
  offset += 1;
4904
4905
0
  proto_tree_add_item(tree, hf_artnet_ip_prog_ip, tvb,
4906
0
                      offset, 4, ENC_BIG_ENDIAN);
4907
0
  offset += 4;
4908
4909
0
  proto_tree_add_item(tree, hf_artnet_ip_prog_sm, tvb,
4910
0
                      offset, 4, ENC_BIG_ENDIAN);
4911
0
  offset += 4;
4912
4913
0
  proto_tree_add_item(tree, hf_artnet_ip_prog_port, tvb,
4914
0
                      offset, 2, ENC_BIG_ENDIAN);
4915
0
  offset += 2;
4916
4917
0
  proto_tree_add_item(tree, hf_artnet_ip_prog_gw, tvb,
4918
0
                      offset, 4, ENC_BIG_ENDIAN);
4919
0
  offset += 4;
4920
4921
0
  proto_tree_add_item(tree, hf_artnet_spare, tvb,
4922
0
                      offset, 4, ENC_NA);
4923
0
  offset += 4;
4924
4925
0
  return offset;
4926
0
}
4927
4928
static unsigned
4929
dissect_artnet_ip_prog_reply(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
4930
0
{
4931
0
  proto_tree_add_item(tree, hf_artnet_filler, tvb,
4932
0
                      offset, 4, ENC_NA);
4933
0
  offset += 4;
4934
4935
0
  proto_tree_add_item(tree, hf_artnet_ip_prog_reply_ip, tvb,
4936
0
                      offset, 4, ENC_BIG_ENDIAN);
4937
0
  offset += 4;
4938
4939
0
  proto_tree_add_item(tree, hf_artnet_ip_prog_reply_sm, tvb,
4940
0
                      offset, 4, ENC_BIG_ENDIAN);
4941
0
  offset += 4;
4942
4943
0
  proto_tree_add_item(tree, hf_artnet_ip_prog_reply_port, tvb,
4944
0
                      offset, 2, ENC_BIG_ENDIAN);
4945
0
  offset += 2;
4946
4947
0
  proto_tree_add_bitmask(tree, tvb, offset, hf_artnet_ip_prog_reply_status,
4948
0
                         ett_artnet_ip_prog_reply_status,
4949
0
                         artnet_ip_prog_reply_status_fields,
4950
0
                         ENC_BIG_ENDIAN);
4951
0
  offset += 1;
4952
4953
0
  proto_tree_add_item(tree, hf_artnet_spare, tvb,
4954
0
                      offset, 1, ENC_NA);
4955
0
  offset += 1;
4956
4957
0
  proto_tree_add_item(tree, hf_artnet_ip_prog_reply_gw, tvb,
4958
0
                      offset, 4, ENC_BIG_ENDIAN);
4959
0
  offset += 4;
4960
4961
0
  proto_tree_add_item(tree, hf_artnet_spare, tvb,
4962
0
                      offset, 2, ENC_NA);
4963
0
  offset += 2;
4964
4965
0
  return offset;
4966
0
}
4967
4968
static unsigned
4969
dissect_artnet_poll_fp_reply(tvbuff_t *tvb _U_, unsigned offset, proto_tree *tree _U_)
4970
0
{
4971
0
  return offset;
4972
0
}
4973
4974
4975
/* ArtDiagData */
4976
static unsigned
4977
dissect_artnet_diag_data(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
4978
0
{
4979
0
  uint16_t length;
4980
4981
0
  proto_tree_add_item(tree, hf_artnet_filler, tvb,
4982
0
                      offset, 1, ENC_NA);
4983
0
  offset += 1;
4984
4985
0
  proto_tree_add_item(tree, hf_artnet_diag_data_priority, tvb,
4986
0
                      offset, 1, ENC_NA);
4987
0
  offset += 1;
4988
4989
0
  proto_tree_add_item(tree, hf_artnet_diag_data_port, tvb,
4990
0
                      offset, 1, ENC_BIG_ENDIAN);
4991
0
  offset += 1;
4992
4993
0
  proto_tree_add_item(tree, hf_artnet_filler, tvb,
4994
0
                      offset, 1, ENC_NA);
4995
0
  offset += 1;
4996
4997
0
  proto_tree_add_item_ret_uint16(tree, hf_artnet_diag_data_length, tvb,
4998
0
                                 offset, 2, ENC_BIG_ENDIAN, &length);
4999
0
  offset+=2;
5000
5001
0
  proto_tree_add_item(tree, hf_artnet_diag_data_data, tvb,
5002
0
                      offset, length, ENC_ASCII);
5003
0
  offset += length;
5004
5005
0
  return offset;
5006
0
}
5007
5008
/* ArtCommand */
5009
static unsigned
5010
dissect_artnet_command(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
5011
0
{
5012
0
  uint16_t length;
5013
5014
0
  proto_tree_add_item(tree, hf_artnet_command_esta_man, tvb,
5015
0
                      offset, 2, ENC_BIG_ENDIAN);
5016
0
  offset += 2;
5017
5018
0
  length = tvb_get_ntohs(tvb, offset);
5019
0
  proto_tree_add_item(tree, hf_artnet_command_length, tvb,
5020
0
                      offset, 2, ENC_BIG_ENDIAN);
5021
0
  offset+=2;
5022
5023
0
  proto_tree_add_item(tree, hf_artnet_command_data, tvb,
5024
0
                      offset, length, ENC_ASCII);
5025
0
  offset += length;
5026
5027
0
  return offset;
5028
0
}
5029
5030
/* ArtDataRequest */
5031
static unsigned
5032
dissect_artnet_data_request(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
5033
0
{
5034
0
  proto_tree_add_item(tree, hf_artnet_data_request_esta_man, tvb,
5035
0
                      offset, 2, ENC_BIG_ENDIAN);
5036
0
  offset += 2;
5037
5038
0
  proto_tree_add_item(tree, hf_artnet_data_request_oem, tvb,
5039
0
                      offset, 2, ENC_BIG_ENDIAN);
5040
0
  offset += 2;
5041
5042
0
  proto_tree_add_item(tree, hf_artnet_data_request_request, tvb,
5043
0
                      offset, 2, ENC_BIG_ENDIAN);
5044
0
  offset += 2;
5045
5046
0
  proto_tree_add_item(tree, hf_artnet_data_request_spare, tvb,
5047
0
                      offset, 22, ENC_NA);
5048
0
  offset += 22;
5049
5050
0
  return offset;
5051
0
}
5052
5053
/* ArtDataReply */
5054
static unsigned
5055
dissect_artnet_data_reply(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
5056
0
{
5057
0
  uint16_t payload_length;
5058
5059
0
  proto_tree_add_item(tree, hf_artnet_data_reply_esta_man, tvb,
5060
0
                      offset, 2, ENC_BIG_ENDIAN);
5061
0
  offset += 2;
5062
5063
0
  proto_tree_add_item(tree, hf_artnet_data_reply_oem, tvb,
5064
0
                      offset, 2, ENC_BIG_ENDIAN);
5065
0
  offset += 2;
5066
5067
0
  proto_tree_add_item(tree, hf_artnet_data_reply_request, tvb,
5068
0
                      offset, 2, ENC_BIG_ENDIAN);
5069
0
  offset += 2;
5070
5071
0
  payload_length = tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN);
5072
0
  proto_tree_add_item(tree, hf_artnet_data_reply_payload_length, tvb,
5073
0
                      offset, 2, ENC_BIG_ENDIAN);
5074
0
  offset += 2;
5075
5076
0
  if(payload_length == 0) {
5077
0
    return offset;
5078
0
  }
5079
5080
0
  proto_tree_add_item(tree, hf_artnet_data_reply_payload, tvb,
5081
0
                      offset, payload_length, ENC_ASCII);
5082
5083
0
  offset += payload_length;
5084
5085
0
  return offset;
5086
0
}
5087
5088
/* ArtMedia */
5089
static unsigned
5090
dissect_artnet_media(tvbuff_t *tvb _U_, unsigned offset, proto_tree *tree _U_)
5091
0
{
5092
0
  return offset;
5093
0
}
5094
5095
/* ArtMediaPatch */
5096
static unsigned
5097
dissect_artnet_media_patch(tvbuff_t *tvb _U_, unsigned offset, proto_tree *tree _U_)
5098
0
{
5099
0
  return offset;
5100
0
}
5101
5102
/* ArtMediaControl */
5103
static unsigned
5104
dissect_artnet_media_control(tvbuff_t *tvb _U_, unsigned offset, proto_tree *tree _U_)
5105
0
{
5106
0
  return offset;
5107
0
}
5108
5109
/* ArtMediaControlReply */
5110
static unsigned
5111
dissect_artnet_media_control_reply(tvbuff_t *tvb _U_, unsigned offset, proto_tree *tree _U_)
5112
0
{
5113
0
  return offset;
5114
0
}
5115
5116
/* ArtTimeCode */
5117
static unsigned
5118
dissect_artnet_time_code(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
5119
0
{
5120
0
  proto_tree_add_item(tree, hf_artnet_filler, tvb,
5121
0
                      offset, 1, ENC_NA);
5122
0
  offset += 1;
5123
5124
0
  proto_tree_add_item(tree, hf_artnet_time_code_stream_id, tvb,
5125
0
                      offset, 1, ENC_BIG_ENDIAN);
5126
0
  offset += 1;
5127
5128
0
  proto_tree_add_item(tree, hf_artnet_time_code_frames, tvb,
5129
0
                      offset, 1, ENC_BIG_ENDIAN);
5130
0
  offset += 1;
5131
5132
0
  proto_tree_add_item(tree, hf_artnet_time_code_seconds, tvb,
5133
0
                      offset, 1, ENC_BIG_ENDIAN);
5134
0
  offset += 1;
5135
5136
0
  proto_tree_add_item(tree, hf_artnet_time_code_minutes, tvb,
5137
0
                      offset, 1, ENC_BIG_ENDIAN);
5138
0
  offset += 1;
5139
5140
0
  proto_tree_add_item(tree, hf_artnet_time_code_hours, tvb,
5141
0
                      offset, 1, ENC_BIG_ENDIAN);
5142
0
  offset += 1;
5143
5144
0
  proto_tree_add_item(tree, hf_artnet_time_code_type, tvb,
5145
0
                      offset, 1, ENC_BIG_ENDIAN);
5146
0
  offset += 1;
5147
5148
0
  return offset;
5149
0
}
5150
5151
/* ArtTimeSync */
5152
static unsigned
5153
dissect_artnet_time_sync(tvbuff_t *tvb _U_, unsigned offset, proto_tree *tree _U_)
5154
0
{
5155
0
  return offset;
5156
0
}
5157
5158
/* ArtTrigger */
5159
static unsigned
5160
dissect_artnet_trigger(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
5161
0
{
5162
0
  uint16_t oem;
5163
0
  proto_item *pi;
5164
5165
0
  proto_tree_add_item(tree, hf_artnet_filler, tvb,
5166
0
                      offset, 2, ENC_NA);
5167
0
  offset += 2;
5168
5169
0
  oem = tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN);
5170
0
  proto_tree_add_item(tree, hf_artnet_trigger_oem, tvb,
5171
0
                      offset, 2, ENC_BIG_ENDIAN);
5172
0
  offset += 2;
5173
5174
0
  proto_tree_add_item(tree, hf_artnet_trigger_key, tvb,
5175
0
                      offset, 1, ENC_BIG_ENDIAN);
5176
5177
0
  if(oem == ARTNET_TRIGGER_NOT_OEM_SPECIFIC) {
5178
0
    pi = proto_tree_add_item(tree, hf_artnet_trigger_key_unspecific, tvb,
5179
0
                      offset, 1, ENC_BIG_ENDIAN);
5180
0
    proto_item_set_generated(pi);
5181
0
  }
5182
0
  offset += 1;
5183
5184
0
  proto_tree_add_item(tree, hf_artnet_trigger_subkey, tvb,
5185
0
                      offset, 1, ENC_BIG_ENDIAN);
5186
0
  offset += 1;
5187
5188
0
  proto_tree_add_item(tree, hf_artnet_trigger_data, tvb,
5189
0
                      offset, 512, ENC_NA);
5190
0
  offset += 512;
5191
5192
0
  return offset;
5193
0
}
5194
5195
/* ArtDirectory */
5196
static unsigned
5197
dissect_artnet_directory(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
5198
0
{
5199
0
  proto_tree_add_item(tree, hf_artnet_directory_filler, tvb,
5200
0
                      offset, 2, ENC_NA);
5201
0
  offset += 2;
5202
5203
0
  proto_tree_add_item(tree, hf_artnet_directory_cmd, tvb,
5204
0
                      offset, 1, ENC_NA);
5205
0
  offset += 1;
5206
5207
0
  proto_tree_add_item(tree, hf_artnet_directory_file, tvb,
5208
0
                      offset, 2, ENC_BIG_ENDIAN);
5209
0
  offset += 2;
5210
5211
0
  return offset;
5212
0
}
5213
5214
/* ArtDirectoryReply */
5215
static unsigned
5216
dissect_artnet_directory_reply(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
5217
0
{
5218
0
  proto_tree_add_item(tree, hf_artnet_directory_reply_filler, tvb,
5219
0
                      offset, 2, ENC_NA);
5220
0
  offset += 2;
5221
5222
0
  proto_tree_add_item(tree, hf_artnet_directory_reply_flags, tvb,
5223
0
                      offset, 1, ENC_NA);
5224
0
  offset += 1;
5225
5226
0
  proto_tree_add_item(tree, hf_artnet_directory_reply_file, tvb,
5227
0
                      offset, 2, ENC_BIG_ENDIAN);
5228
0
  offset += 2;
5229
5230
0
  proto_tree_add_item(tree, hf_artnet_directory_reply_name, tvb,
5231
0
                      offset, 16, ENC_ASCII);
5232
0
  offset += 16;
5233
5234
0
  proto_tree_add_item(tree, hf_artnet_directory_reply_desc, tvb,
5235
0
                      offset, 64, ENC_ASCII);
5236
0
  offset += 64;
5237
5238
0
  proto_tree_add_item(tree, hf_artnet_directory_reply_length, tvb,
5239
0
                      offset, 8, ENC_BIG_ENDIAN);
5240
0
  offset += 8;
5241
5242
0
  proto_tree_add_item(tree, hf_artnet_directory_reply_data, tvb,
5243
0
                      offset, 64, ENC_NA);
5244
0
  offset += 64;
5245
5246
0
  return offset;
5247
0
}
5248
5249
/* ArtMacMaster */
5250
static unsigned
5251
dissect_artnet_mac_master(tvbuff_t *tvb _U_, unsigned offset, proto_tree *tree _U_)
5252
0
{
5253
0
  return offset;
5254
0
}
5255
5256
/* ArtMacSlave */
5257
static unsigned
5258
dissect_artnet_mac_slave(tvbuff_t *tvb _U_, unsigned offset, proto_tree *tree _U_)
5259
0
{
5260
0
  return offset;
5261
0
}
5262
5263
/* ArtFileTnMaster */
5264
static unsigned
5265
dissect_artnet_file_tn_master(tvbuff_t *tvb, unsigned offset, proto_tree *tree)
5266
0
{
5267
0
  proto_tree_add_item(tree, hf_artnet_file_tn_master_filler, tvb,
5268
0
                      offset, 2, ENC_NA);
5269
0
  offset += 2;
5270
5271
0
  proto_tree_add_item(tree, hf_artnet_file_tn_master_type, tvb,
5272
0
                      offset, 1, ENC_NA);
5273
0
  offset += 1;
5274
5275
0
  proto_tree_add_item(tree, hf_artnet_file_tn_master_block_id, tvb,
5276
0
                      offset, 1, ENC_NA);
5277
0
  offset += 1;
5278
5279
0
  proto_tree_add_item(tree, hf_artnet_file_tn_master_length, tvb,
5280
0
                      offset, 4, ENC_BIG_ENDIAN);
5281
0
  offset += 4;
5282
5283
0
  proto_tree_add_item(tree, hf_artnet_file_tn_master_name, tvb,
5284
0
                      offset, 14, ENC_ASCII);
5285
0
  offset += 14;
5286
5287
0
  proto_tree_add_checksum(tree, tvb, offset, hf_artnet_file_tn_master_checksum, -1, NULL, NULL, 0, ENC_BIG_ENDIAN, PROTO_CHECKSUM_NO_FLAGS);
5288
0
  offset += 2;
5289
5290
0
  proto_tree_add_item(tree, hf_artnet_file_tn_master_spare, tvb,
5291
0
                      offset, 4, ENC_NA);
5292
0
  offset += 4;
5293
5294
0
  proto_tree_add_item(tree, hf_artnet_file_tn_master_data, tvb,
5295
0
                      offset, 512, ENC_NA);
5296
0
  offset += 512;
5297
5298
0
  return offset;
5299
0
}
5300
5301
/* ArtFileFnMaster */
5302
static unsigned
5303
dissect_artnet_file_fn_master(tvbuff_t *tvb _U_, unsigned offset, proto_tree *tree _U_)
5304
0
{
5305
0
  return offset;
5306
0
}
5307
5308
/* ArtFileFnReply */
5309
static unsigned
5310
dissect_artnet_file_fn_reply(tvbuff_t *tvb _U_, unsigned offset, proto_tree *tree _U_)
5311
0
{
5312
0
  return offset;
5313
0
}
5314
5315
static int
5316
9
dissect_artnet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) {
5317
9
  int           offset = 0;
5318
9
  unsigned      size;
5319
9
  uint16_t      opcode;
5320
9
  const uint8_t *header;
5321
9
  proto_tree   *ti, *hi, *si = NULL, *artnet_tree, *artnet_header_tree;
5322
5323
9
  col_set_str(pinfo->cinfo, COL_PROTOCOL, "ARTNET");
5324
9
  col_clear(pinfo->cinfo, COL_INFO);
5325
5326
9
  ti = proto_tree_add_item(tree, proto_artnet, tvb, offset, -1, ENC_NA);
5327
9
  artnet_tree = proto_item_add_subtree(ti, ett_artnet);
5328
5329
9
  hi = proto_tree_add_item(artnet_tree, hf_artnet_header, tvb,
5330
9
                             offset, ARTNET_HEADER_LENGTH, ENC_NA);
5331
9
  artnet_header_tree = proto_item_add_subtree(hi, ett_artnet_header);
5332
5333
9
  proto_tree_add_item_ret_string(artnet_header_tree, hf_artnet_header_id,
5334
9
                        tvb, offset, 8, ENC_ASCII|ENC_NA, pinfo->pool, &header);
5335
9
  offset += 8;
5336
5337
9
  opcode = tvb_get_letohs(tvb, offset);
5338
5339
9
  col_set_str(pinfo->cinfo, COL_INFO,
5340
9
    val_to_str_ext_const(opcode, &artnet_opcode_vals_ext, "Unknown"));
5341
5342
5343
9
  proto_tree_add_uint(artnet_header_tree, hf_artnet_header_opcode, tvb,
5344
9
                      offset, 2, opcode);
5345
5346
9
  proto_item_append_text(ti, ", Opcode: %s (0x%04x)", val_to_str_ext_const(opcode, &artnet_opcode_vals_ext, "Unknown"), opcode);
5347
5348
9
  offset += 2;
5349
5350
9
  if (opcode != ARTNET_OP_POLL_REPLY && opcode != ARTNET_OP_POLL_FP_REPLY) {
5351
5352
5
    proto_tree_add_item(artnet_header_tree, hf_artnet_header_protver, tvb,
5353
5
                        offset, 2, ENC_BIG_ENDIAN);
5354
5355
5
    proto_item_set_len(artnet_header_tree, ARTNET_HEADER_LENGTH+2 );
5356
5357
5
    offset += 2;
5358
5
  }
5359
5360
9
  switch (opcode) {
5361
5362
0
    case ARTNET_OP_POLL:
5363
5364
0
      hi = proto_tree_add_item(artnet_tree,
5365
0
                                hf_artnet_poll,
5366
0
                                tvb,
5367
0
                                offset,
5368
0
                                0,
5369
0
                                ENC_NA);
5370
5371
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5372
5373
0
      size  = dissect_artnet_poll( tvb, offset, si, pinfo );
5374
0
      size -= offset;
5375
5376
0
      proto_item_set_len(si, size);
5377
0
      offset += size;
5378
5379
0
      break;
5380
5381
3
    case ARTNET_OP_POLL_REPLY:
5382
5383
3
      hi = proto_tree_add_item(artnet_tree,
5384
3
                                hf_artnet_poll_reply,
5385
3
                                tvb,
5386
3
                                offset,
5387
3
                                0,
5388
3
                                ENC_NA);
5389
5390
3
      si = proto_item_add_subtree(hi, ett_artnet_data);
5391
5392
3
      size  = dissect_artnet_poll_reply( tvb, offset, si, pinfo);
5393
3
      size -= offset;
5394
5395
3
      proto_item_set_len(si, size);
5396
3
      offset += size;
5397
5398
3
      break;
5399
5400
0
    case ARTNET_OP_POLL_FP_REPLY:
5401
5402
0
      hi = proto_tree_add_item(artnet_tree,
5403
0
                                hf_artnet_poll_fp_reply,
5404
0
                                tvb,
5405
0
                                offset,
5406
0
                                0,
5407
0
                                ENC_NA );
5408
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5409
5410
0
      size  = dissect_artnet_poll_fp_reply( tvb, offset, si );
5411
0
      size -= offset;
5412
5413
0
      proto_item_set_len(si, size );
5414
0
      offset += size;
5415
5416
0
      break;
5417
5418
0
    case ARTNET_OP_DIAG_DATA:
5419
5420
0
      hi = proto_tree_add_item(artnet_tree,
5421
0
                                hf_artnet_diag_data,
5422
0
                                tvb,
5423
0
                                offset,
5424
0
                                0,
5425
0
                                ENC_NA );
5426
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5427
5428
0
      size  = dissect_artnet_diag_data( tvb, offset, si );
5429
0
      size -= offset;
5430
5431
0
      proto_item_set_len(si, size );
5432
0
      offset += size;
5433
5434
0
      break;
5435
5436
0
    case ARTNET_OP_COMMAND:
5437
5438
0
      hi = proto_tree_add_item(artnet_tree,
5439
0
                                hf_artnet_command,
5440
0
                                tvb,
5441
0
                                offset,
5442
0
                                0,
5443
0
                                ENC_NA );
5444
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5445
5446
0
      size  = dissect_artnet_command( tvb, offset, si );
5447
0
      size -= offset;
5448
5449
0
      proto_item_set_len(si, size );
5450
0
      offset += size;
5451
5452
0
      break;
5453
5454
0
    case ARTNET_OP_DATA_REQUEST:
5455
5456
0
      hi = proto_tree_add_item(artnet_tree,
5457
0
                                hf_artnet_data_request,
5458
0
                                tvb,
5459
0
                                offset,
5460
0
                                0,
5461
0
                                ENC_NA );
5462
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5463
5464
0
      size  = dissect_artnet_data_request( tvb, offset, si );
5465
0
      size -= offset;
5466
5467
0
      proto_item_set_len(si, size );
5468
0
      offset += size;
5469
5470
0
      break;
5471
5472
0
    case ARTNET_OP_DATA_REPLY:
5473
5474
0
      hi = proto_tree_add_item(artnet_tree,
5475
0
                                hf_artnet_data_reply,
5476
0
                                tvb,
5477
0
                                offset,
5478
0
                                0,
5479
0
                                ENC_NA );
5480
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5481
5482
0
      size  = dissect_artnet_data_reply( tvb, offset, si );
5483
0
      size -= offset;
5484
5485
0
      proto_item_set_len(si, size );
5486
0
      offset += size;
5487
5488
0
      break;
5489
5490
0
    case ARTNET_OP_OUTPUT:
5491
0
        hi = proto_tree_add_item(artnet_tree,
5492
0
                                 hf_artnet_output,
5493
0
                                 tvb,
5494
0
                                 offset,
5495
0
                                 0,
5496
0
                                 ENC_NA);
5497
5498
0
        si = proto_item_add_subtree(hi, ett_artnet_data);
5499
5500
0
        size  = dissect_artnet_output( tvb, offset, si, pinfo, tree);
5501
0
        size -= offset;
5502
0
        proto_item_set_len(si, size );
5503
0
        offset += size;
5504
0
      break;
5505
5506
5507
0
    case ARTNET_OP_SYNC:
5508
5509
0
      hi = proto_tree_add_item(artnet_tree,
5510
0
                                hf_artnet_sync,
5511
0
                                tvb,
5512
0
                                offset,
5513
0
                                0,
5514
0
                                ENC_NA);
5515
5516
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5517
5518
0
      size  = dissect_artnet_sync( tvb, offset, si );
5519
0
      size -= offset;
5520
5521
0
      proto_item_set_len(si, size);
5522
0
      offset += size;
5523
5524
0
      break;
5525
5526
5527
0
      case ARTNET_OP_ADDRESS:
5528
5529
0
      hi = proto_tree_add_item(artnet_tree,
5530
0
                                hf_artnet_address,
5531
0
                                tvb,
5532
0
                                offset,
5533
0
                                0,
5534
0
                                ENC_NA);
5535
5536
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5537
5538
0
      size  = dissect_artnet_address( tvb, offset, si, pinfo );
5539
0
      size -= offset;
5540
5541
0
      proto_item_set_len(si, size);
5542
0
      offset += size;
5543
5544
0
      break;
5545
5546
0
    case ARTNET_OP_INPUT:
5547
5548
0
      hi = proto_tree_add_item(artnet_tree,
5549
0
                                hf_artnet_input,
5550
0
                                tvb,
5551
0
                                offset,
5552
0
                                0,
5553
0
                                ENC_NA);
5554
5555
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5556
5557
0
      size  = dissect_artnet_input( tvb, offset, si, pinfo );
5558
0
      size -= offset;
5559
5560
0
      proto_item_set_len(si, size);
5561
0
      offset += size;
5562
5563
0
      break;
5564
5565
0
    case ARTNET_OP_TOD_REQUEST:
5566
5567
0
      hi = proto_tree_add_item(artnet_tree,
5568
0
                                hf_artnet_tod_request,
5569
0
                                tvb,
5570
0
                                offset,
5571
0
                                0,
5572
0
                                ENC_NA);
5573
5574
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5575
5576
0
      size  = dissect_artnet_tod_request( tvb, offset, si, pinfo );
5577
0
      size -= offset;
5578
5579
0
      proto_item_set_len(si, size);
5580
0
      offset += size;
5581
5582
0
      break;
5583
5584
0
    case ARTNET_OP_TOD_DATA:
5585
5586
0
      hi = proto_tree_add_item(artnet_tree,
5587
0
                                hf_artnet_tod_data,
5588
0
                                tvb,
5589
0
                                offset,
5590
0
                                0,
5591
0
                                ENC_NA);
5592
5593
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5594
5595
0
      size  = dissect_artnet_tod_data( tvb, offset, si, pinfo );
5596
0
      size -= offset;
5597
5598
0
      proto_item_set_len(si, size );
5599
0
      offset += size;
5600
5601
0
      break;
5602
5603
1
    case ARTNET_OP_TOD_CONTROL:
5604
5605
1
      hi = proto_tree_add_item(artnet_tree,
5606
1
                                hf_artnet_tod_control,
5607
1
                                tvb,
5608
1
                                offset,
5609
1
                                0,
5610
1
                                ENC_NA );
5611
1
      si = proto_item_add_subtree(hi, ett_artnet_data);
5612
5613
1
      size  = dissect_artnet_tod_control( tvb, offset, si, pinfo );
5614
1
      size -= offset;
5615
5616
1
      proto_item_set_len(si, size );
5617
1
      offset += size;
5618
5619
1
      break;
5620
5621
0
    case ARTNET_OP_RDM:
5622
0
        hi = proto_tree_add_item(artnet_tree,
5623
0
                                 hf_artnet_rdm,
5624
0
                                 tvb,
5625
0
                                 offset,
5626
0
                                 0,
5627
0
                                 ENC_NA);
5628
0
        si = proto_item_add_subtree(hi, ett_artnet_data);
5629
0
        size  = dissect_artnet_rdm(tvb, offset, si, pinfo, tree);
5630
0
        size -= offset;
5631
5632
0
        proto_item_set_len( si, size );
5633
0
        offset += size;
5634
0
      break;
5635
5636
0
    case ARTNET_OP_RDM_SUB:
5637
5638
0
      hi = proto_tree_add_item(artnet_tree,
5639
0
                                hf_artnet_rdm_sub,
5640
0
                                tvb,
5641
0
                                offset,
5642
0
                                0,
5643
0
                                ENC_NA);
5644
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5645
5646
0
      size  = dissect_artnet_rdm_sub( tvb, offset, si, pinfo );
5647
0
      size -= offset;
5648
5649
0
      proto_item_set_len( si, size );
5650
0
      offset += size;
5651
5652
0
      break;
5653
5654
0
    case ARTNET_OP_MEDIA:
5655
5656
0
      hi = proto_tree_add_item(artnet_tree,
5657
0
                                hf_artnet_media,
5658
0
                                tvb,
5659
0
                                offset,
5660
0
                                0,
5661
0
                                ENC_NA);
5662
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5663
5664
0
      size  = dissect_artnet_media( tvb, offset, si);
5665
0
      size -= offset;
5666
5667
0
      proto_item_set_len( si, size );
5668
0
      offset += size;
5669
5670
0
      break;
5671
5672
0
    case ARTNET_OP_MEDIA_PATCH:
5673
5674
0
      hi = proto_tree_add_item(artnet_tree,
5675
0
                                hf_artnet_media_patch,
5676
0
                                tvb,
5677
0
                                offset,
5678
0
                                0,
5679
0
                                ENC_NA);
5680
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5681
5682
0
      size  = dissect_artnet_media_patch( tvb, offset, si);
5683
0
      size -= offset;
5684
5685
0
      proto_item_set_len( si, size );
5686
0
      offset += size;
5687
5688
0
      break;
5689
5690
0
    case ARTNET_OP_MEDIA_CONTROL:
5691
5692
0
      hi = proto_tree_add_item(artnet_tree,
5693
0
                                hf_artnet_media_control,
5694
0
                                tvb,
5695
0
                                offset,
5696
0
                                0,
5697
0
                                ENC_NA);
5698
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5699
5700
0
      size  = dissect_artnet_media_control( tvb, offset, si);
5701
0
      size -= offset;
5702
5703
0
      proto_item_set_len( si, size );
5704
0
      offset += size;
5705
5706
0
      break;
5707
5708
0
    case ARTNET_OP_MEDIA_CONTRL_REPLY:
5709
5710
0
      hi = proto_tree_add_item(artnet_tree,
5711
0
                                hf_artnet_media_control_reply,
5712
0
                                tvb,
5713
0
                                offset,
5714
0
                                0,
5715
0
                                ENC_NA);
5716
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5717
5718
0
      size  = dissect_artnet_media_control_reply( tvb, offset, si);
5719
0
      size -= offset;
5720
5721
0
      proto_item_set_len( si, size );
5722
0
      offset += size;
5723
5724
0
      break;
5725
5726
0
    case ARTNET_OP_TIME_CODE:
5727
5728
0
      hi = proto_tree_add_item(artnet_tree,
5729
0
                                hf_artnet_time_code,
5730
0
                                tvb,
5731
0
                                offset,
5732
0
                                0,
5733
0
                                ENC_NA);
5734
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5735
5736
0
      size  = dissect_artnet_time_code( tvb, offset, si);
5737
0
      size -= offset;
5738
5739
0
      proto_item_set_len( si, size );
5740
0
      offset += size;
5741
5742
0
      break;
5743
5744
0
    case ARTNET_OP_TIME_SYNC:
5745
5746
0
      hi = proto_tree_add_item(artnet_tree,
5747
0
                                hf_artnet_time_sync,
5748
0
                                tvb,
5749
0
                                offset,
5750
0
                                0,
5751
0
                                ENC_NA);
5752
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5753
5754
0
      size  = dissect_artnet_time_sync( tvb, offset, si);
5755
0
      size -= offset;
5756
5757
0
      proto_item_set_len( si, size );
5758
0
      offset += size;
5759
5760
0
      break;
5761
5762
2
    case ARTNET_OP_NZS:
5763
5764
2
      hi = proto_tree_add_item(artnet_tree,
5765
2
                                hf_artnet_nzs,
5766
2
                                tvb,
5767
2
                                offset,
5768
2
                                0,
5769
2
                                ENC_NA);
5770
2
      si = proto_item_add_subtree(hi, ett_artnet_data);
5771
5772
2
      size  = dissect_artnet_nzs( tvb, offset, si, pinfo, tree);
5773
2
      size -= offset;
5774
5775
2
      proto_item_set_len( si, size );
5776
2
      offset += size;
5777
5778
2
      break;
5779
5780
0
    case ARTNET_OP_TRIGGER:
5781
5782
0
      hi = proto_tree_add_item(artnet_tree,
5783
0
                                hf_artnet_trigger,
5784
0
                                tvb,
5785
0
                                offset,
5786
0
                                0,
5787
0
                                ENC_NA);
5788
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5789
5790
0
      size  = dissect_artnet_trigger( tvb, offset, si);
5791
0
      size -= offset;
5792
5793
0
      proto_item_set_len( si, size );
5794
0
      offset += size;
5795
5796
0
      break;
5797
5798
0
    case ARTNET_OP_DIRECTORY:
5799
5800
0
      hi = proto_tree_add_item(artnet_tree,
5801
0
                                hf_artnet_directory,
5802
0
                                tvb,
5803
0
                                offset,
5804
0
                                0,
5805
0
                                ENC_NA);
5806
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5807
5808
0
      size  = dissect_artnet_directory( tvb, offset, si);
5809
0
      size -= offset;
5810
5811
0
      proto_item_set_len( si, size );
5812
0
      offset += size;
5813
5814
0
      break;
5815
5816
0
    case ARTNET_OP_DIRECTORY_REPLY:
5817
5818
0
      hi = proto_tree_add_item(artnet_tree,
5819
0
                                hf_artnet_directory_reply,
5820
0
                                tvb,
5821
0
                                offset,
5822
0
                                0,
5823
0
                                ENC_NA);
5824
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5825
5826
0
      size  = dissect_artnet_directory_reply( tvb, offset, si);
5827
0
      size -= offset;
5828
5829
0
      proto_item_set_len( si, size );
5830
0
      offset += size;
5831
5832
0
      break;
5833
5834
5835
0
    case ARTNET_OP_VIDEO_SETUP:
5836
5837
0
      hi = proto_tree_add_item(artnet_tree,
5838
0
                                hf_artnet_input,
5839
0
                                tvb,
5840
0
                                offset,
5841
0
                                0,
5842
0
                                ENC_NA);
5843
5844
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5845
5846
0
      size  = dissect_artnet_video_setup( tvb, offset, si );
5847
0
      size -= offset;
5848
5849
0
      proto_item_set_len(si, size);
5850
0
      offset += size;
5851
5852
0
      break;
5853
5854
0
    case ARTNET_OP_VIDEO_PALETTE:
5855
5856
0
      hi = proto_tree_add_item(artnet_tree,
5857
0
                                hf_artnet_input,
5858
0
                                tvb,
5859
0
                                offset,
5860
0
                                0,
5861
0
                                ENC_NA);
5862
5863
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5864
5865
0
      size  = dissect_artnet_video_palette( tvb, offset, si );
5866
0
      size -= offset;
5867
5868
0
      proto_item_set_len(si, size);
5869
0
      offset += size;
5870
5871
0
      break;
5872
5873
0
    case ARTNET_OP_VIDEO_DATA:
5874
5875
0
      hi = proto_tree_add_item(artnet_tree,
5876
0
                                hf_artnet_input,
5877
0
                                tvb,
5878
0
                                offset,
5879
0
                                0,
5880
0
                                ENC_NA);
5881
5882
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5883
5884
0
      size  = dissect_artnet_video_data( tvb, offset, si );
5885
0
      size -= offset;
5886
5887
0
      proto_item_set_len(si, size);
5888
0
      offset += size;
5889
5890
0
      break;
5891
5892
0
    case ARTNET_OP_MAC_MASTER:
5893
5894
0
      hi = proto_tree_add_item(artnet_tree,
5895
0
                                hf_artnet_mac_master,
5896
0
                                tvb,
5897
0
                                offset,
5898
0
                                0,
5899
0
                                ENC_NA);
5900
5901
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5902
5903
0
      size  = dissect_artnet_mac_master( tvb, offset, si );
5904
0
      size -= offset;
5905
5906
0
      proto_item_set_len(si, size);
5907
0
      offset += size;
5908
5909
0
      break;
5910
5911
0
    case ARTNET_OP_MAC_SLAVE:
5912
5913
0
      hi = proto_tree_add_item(artnet_tree,
5914
0
                                hf_artnet_mac_slave,
5915
0
                                tvb,
5916
0
                                offset,
5917
0
                                0,
5918
0
                                ENC_NA);
5919
5920
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5921
5922
0
      size  = dissect_artnet_mac_slave( tvb, offset, si );
5923
0
      size -= offset;
5924
5925
0
      proto_item_set_len(si, size);
5926
0
      offset += size;
5927
5928
0
      break;
5929
5930
0
    case ARTNET_OP_FIRMWARE_MASTER:
5931
5932
0
      hi = proto_tree_add_item(artnet_tree,
5933
0
                                hf_artnet_firmware_master,
5934
0
                                tvb,
5935
0
                                offset,
5936
0
                                0,
5937
0
                                ENC_NA);
5938
5939
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5940
5941
0
      size  = dissect_artnet_firmware_master( tvb, offset, si );
5942
0
      size -= offset;
5943
5944
0
      proto_item_set_len(si, size);
5945
0
      offset += size;
5946
5947
0
      break;
5948
5949
0
    case ARTNET_OP_FIRMWARE_REPLY:
5950
5951
0
      hi = proto_tree_add_item(artnet_tree,
5952
0
                                hf_artnet_firmware_reply,
5953
0
                                tvb,
5954
0
                                offset,
5955
0
                                0,
5956
0
                                ENC_NA);
5957
5958
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5959
5960
0
      size  = dissect_artnet_firmware_reply( tvb, offset, si );
5961
0
      size -= offset;
5962
5963
0
      proto_item_set_len(si, size);
5964
0
      offset += size;
5965
5966
0
      break;
5967
5968
0
    case ARTNET_OP_FILE_TN_MASTER:
5969
5970
0
      hi = proto_tree_add_item(artnet_tree,
5971
0
                                hf_artnet_file_tn_master,
5972
0
                                tvb,
5973
0
                                offset,
5974
0
                                0,
5975
0
                                ENC_NA);
5976
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5977
5978
0
      size  = dissect_artnet_file_tn_master( tvb, offset, si);
5979
0
      size -= offset;
5980
5981
0
      proto_item_set_len(si, size );
5982
0
      offset += size;
5983
5984
0
      break;
5985
5986
0
    case ARTNET_OP_FILE_FN_MASTER:
5987
5988
0
      hi = proto_tree_add_item(artnet_tree,
5989
0
                                hf_artnet_file_fn_master,
5990
0
                                tvb,
5991
0
                                offset,
5992
0
                                0,
5993
0
                                ENC_NA);
5994
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
5995
5996
0
      size  = dissect_artnet_file_fn_master( tvb, offset, si);
5997
0
      size -= offset;
5998
5999
0
      proto_item_set_len(si, size );
6000
0
      offset += size;
6001
6002
0
      break;
6003
6004
0
    case ARTNET_OP_FILE_FN_REPLY:
6005
6006
0
      hi = proto_tree_add_item(artnet_tree,
6007
0
                                hf_artnet_file_fn_reply,
6008
0
                                tvb,
6009
0
                                offset,
6010
0
                                0,
6011
0
                                ENC_NA);
6012
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
6013
6014
0
      size  = dissect_artnet_file_fn_reply( tvb, offset, si);
6015
0
      size -= offset;
6016
6017
0
      proto_item_set_len(si, size );
6018
0
      offset += size;
6019
6020
0
      break;
6021
6022
0
    case ARTNET_OP_IP_PROG:
6023
6024
0
      hi = proto_tree_add_item(artnet_tree,
6025
0
                                hf_artnet_ip_prog,
6026
0
                                tvb,
6027
0
                                offset,
6028
0
                                0,
6029
0
                                ENC_NA);
6030
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
6031
6032
0
      size  = dissect_artnet_ip_prog( tvb,offset, si);
6033
0
      size -= offset;
6034
6035
0
      proto_item_set_len(si, size );
6036
0
      offset += size;
6037
6038
0
      break;
6039
6040
0
    case ARTNET_OP_IP_PROG_REPLY:
6041
6042
0
      hi = proto_tree_add_item(artnet_tree,
6043
0
                                hf_artnet_ip_prog_reply,
6044
0
                                tvb,
6045
0
                                offset,
6046
0
                                0,
6047
0
                                ENC_NA);
6048
0
      si = proto_item_add_subtree(hi, ett_artnet_data);
6049
6050
0
      size  = dissect_artnet_ip_prog_reply( tvb, offset, si );
6051
0
      size -= offset;
6052
6053
0
      proto_item_set_len(si, size );
6054
0
      offset += size;
6055
6056
0
      break;
6057
6058
6059
1
    default:
6060
1
      if (tvb_reported_length_remaining(tvb, offset) > 0) {
6061
1
        proto_tree_add_item(artnet_tree, hf_artnet_data, tvb, offset, -1, ENC_NA);
6062
1
      }
6063
1
      return tvb_captured_length(tvb);
6064
9
  }
6065
6066
1
  if (tvb_reported_length_remaining(tvb, offset) > 0) {
6067
0
    proto_tree_add_item(artnet_tree, hf_artnet_excess_bytes, tvb,
6068
0
      offset, -1, ENC_NA);
6069
0
  }
6070
1
  return tvb_captured_length(tvb);
6071
9
}
6072
6073
/* Heuristic dissector */
6074
static bool
6075
dissect_artnet_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
6076
1.18k
{
6077
1.18k
  uint64_t    qword;
6078
6079
  /* check if we at least have the 8 byte header */
6080
1.18k
  if (tvb_captured_length(tvb) < 8)
6081
284
    return false;
6082
6083
  /* Check the 8 byte header "Art-Net\0" = 0x4172742d4e657400*/
6084
896
  qword = tvb_get_ntoh64(tvb,0);
6085
896
  if(qword != UINT64_C (0x4172742d4e657400))
6086
887
    return false;
6087
6088
  /* if the header matches, dissect it */
6089
9
  dissect_artnet(tvb, pinfo, tree, data);
6090
6091
9
  return true;
6092
896
}
6093
6094
void
6095
14
proto_register_artnet(void) {
6096
6097
14
  expert_module_t* expert_artnet;
6098
6099
14
  static hf_register_info hf[] = {
6100
6101
    /* General */
6102
6103
14
    { &hf_artnet_excess_bytes,
6104
14
      { "Excess Bytes",
6105
14
        "artnet.excess_bytes",
6106
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
6107
14
        NULL, HFILL }},
6108
6109
14
    { &hf_artnet_data,
6110
14
      { "Data",
6111
14
        "artnet.data",
6112
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
6113
14
        NULL, HFILL }},
6114
6115
14
    { &hf_artnet_filler,
6116
14
      { "filler",
6117
14
        "artnet.filler",
6118
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
6119
14
        NULL, HFILL }},
6120
6121
14
    { &hf_artnet_spare,
6122
14
      { "spare",
6123
14
        "artnet.spare",
6124
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
6125
14
        NULL, HFILL }},
6126
6127
    /* Header */
6128
6129
14
    { &hf_artnet_header,
6130
14
      { "Descriptor Header",
6131
14
        "artnet.header",
6132
14
        FT_NONE, BASE_NONE, NULL, 0,
6133
14
        "Art-Net Descriptor Header", HFILL }},
6134
6135
14
    { &hf_artnet_header_id,
6136
14
      { "ID",
6137
14
        "artnet.header.id",
6138
14
        FT_STRINGZ, BASE_NONE, NULL, 0x0,
6139
14
        "ArtNET ID", HFILL }},
6140
6141
14
    { &hf_artnet_header_opcode,
6142
14
      { "OpCode",
6143
14
        "artnet.header.opcode",
6144
14
        FT_UINT16, BASE_HEX | BASE_EXT_STRING, &artnet_opcode_vals_ext, 0x0,
6145
14
        "Art-Net message type", HFILL }},
6146
6147
14
    { &hf_artnet_header_protver,
6148
14
      { "ProtVer",
6149
14
        "artnet.header.protver",
6150
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
6151
14
        "Protocol revision number", HFILL }},
6152
6153
    /* ArtPoll */
6154
6155
14
    { &hf_artnet_poll,
6156
14
      { "ArtPoll packet",
6157
14
        "artnet.poll",
6158
14
        FT_NONE, BASE_NONE, NULL, 0,
6159
14
        "Art-Net ArtPoll packet", HFILL }},
6160
6161
14
    { &hf_artnet_poll_talktome,
6162
14
      { "TalkToMe",
6163
14
        "artnet.poll.talktome",
6164
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6165
14
        NULL, HFILL }},
6166
6167
14
    { &hf_artnet_poll_talktome_reply_change,
6168
14
      { "Send me ArtPollReply on change",
6169
14
        "artnet.poll.talktome_reply_change",
6170
14
        FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02,
6171
14
        NULL, HFILL }},
6172
6173
14
    { &hf_artnet_poll_talktome_diag,
6174
14
      { "Send diagnostics messages",
6175
14
        "artnet.poll.talktome_diag",
6176
14
        FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04,
6177
14
        NULL, HFILL }},
6178
6179
14
    { &hf_artnet_poll_talktome_diag_unicast,
6180
14
      { "Send diagnostics unicast",
6181
14
        "artnet.poll.talktome_diag_unicast",
6182
14
        FT_BOOLEAN, 8, TFS(&tfs_artnet_talktome_diag_unicast), 0x08,
6183
14
        NULL, HFILL }},
6184
6185
14
    { &hf_artnet_poll_talktome_vlc,
6186
14
      { "VLC transmission",
6187
14
        "artnet.poll.talktome_vlc",
6188
14
        FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled), 0x10,
6189
14
        NULL, HFILL }},
6190
6191
14
    { &hf_artnet_poll_talktome_targeted,
6192
14
      { "Targeted mode",
6193
14
        "artnet.poll.talktome_targeted",
6194
14
        FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20,
6195
14
        NULL, HFILL }},
6196
6197
14
    { &hf_artnet_poll_diag_priority,
6198
14
      { "Priority",
6199
14
        "artnet.poll.diag_priority",
6200
14
        FT_UINT8, BASE_DEC, VALS(artnet_talktome_diag_priority_vals), 0x0,
6201
14
        "Minimum diagnostics message priority", HFILL }},
6202
6203
14
    { &hf_artnet_poll_target_port_top,
6204
14
      { "Target Port Top",
6205
14
        "artnet.poll.target_port_top",
6206
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
6207
14
        "Top of the port range", HFILL }},
6208
6209
14
    { &hf_artnet_poll_target_port_bottom,
6210
14
      { "Target Port Bottom",
6211
14
        "artnet.poll.target_port_bottom",
6212
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
6213
14
        "Bottom of the port range", HFILL }},
6214
6215
14
    { &hf_artnet_poll_esta_man,
6216
14
      { "ESTA Code",
6217
14
        "artnet.poll.esta_man",
6218
14
        FT_UINT16, BASE_HEX|BASE_EXT_STRING, &dmx_esta_manfid_vals_ext, 0x0,
6219
14
        NULL, HFILL }},
6220
6221
14
    { &hf_artnet_poll_oem,
6222
14
      { "OEM",
6223
14
        "artnet.poll.oem",
6224
14
        FT_UINT16, BASE_HEX|BASE_EXT_STRING, &artnet_oem_code_vals_ext, 0x0,
6225
14
        NULL, HFILL }},
6226
6227
6228
    /* ArtPollReply */
6229
6230
14
    { &hf_artnet_poll_reply,
6231
14
      { "ArtPollReply packet",
6232
14
        "artnet.poll_reply",
6233
14
        FT_NONE, BASE_NONE, NULL, 0,
6234
14
        "Art-Net ArtPollReply packet", HFILL }},
6235
6236
14
    { &hf_artnet_poll_reply_ip_address,
6237
14
      { "IP Address",
6238
14
        "artnet.poll_reply.ip_address",
6239
14
        FT_IPv4, BASE_NONE, NULL, 0x0,
6240
14
        NULL, HFILL }},
6241
6242
14
    { &hf_artnet_poll_reply_port_nr,
6243
14
      { "Port number",
6244
14
        "artnet.poll_reply.port_nr",
6245
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
6246
14
        NULL, HFILL }},
6247
6248
14
    { &hf_artnet_poll_reply_versinfo,
6249
14
      { "Version Info",
6250
14
        "artnet.poll_reply.versinfo",
6251
14
        FT_UINT16, BASE_HEX, NULL, 0x0,
6252
14
        NULL, HFILL }},
6253
6254
14
    { &hf_artnet_poll_reply_netswitch,
6255
14
      { "NetSwitch",
6256
14
        "artnet.poll_reply.netswitch",
6257
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6258
14
        "Bits 14-8 of port address", HFILL }},
6259
6260
14
    { &hf_artnet_poll_reply_subswitch,
6261
14
      { "SubSwitch",
6262
14
        "artnet.poll_reply.subswitch",
6263
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6264
14
        "Bits 7-4 of port address", HFILL }},
6265
6266
14
    { &hf_artnet_poll_reply_oem,
6267
14
      { "OEM",
6268
14
        "artnet.poll_reply.oem",
6269
14
        FT_UINT16, BASE_HEX|BASE_EXT_STRING, &artnet_oem_code_vals_ext, 0x0,
6270
14
        NULL, HFILL }},
6271
6272
14
    { &hf_artnet_poll_reply_ubea_version,
6273
14
      { "UBEA Version",
6274
14
        "artnet.poll_reply.ubea_version",
6275
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
6276
14
        "UBEA version number", HFILL }},
6277
6278
14
    { &hf_artnet_poll_reply_status,
6279
14
      { "Status",
6280
14
        "artnet.poll_reply.status",
6281
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6282
14
        NULL, HFILL }},
6283
6284
14
    { &hf_artnet_poll_reply_status_ubea_present,
6285
14
      { "UBEA Present",
6286
14
        "artnet.poll_reply.ubea_present",
6287
14
        FT_BOOLEAN, 8, TFS(&tfs_present_absent), 0x01,
6288
14
        NULL, HFILL }},
6289
6290
14
    { &hf_artnet_poll_reply_status_rdm_supported,
6291
14
      { "RDM Supported",
6292
14
        "artnet.poll_reply.rdm_supported",
6293
14
        FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
6294
14
        NULL, HFILL }},
6295
6296
14
    { &hf_artnet_poll_reply_status_rom_booted,
6297
14
      { "ROM Booted",
6298
14
        "artnet.poll_reply.rom_booted",
6299
14
        FT_BOOLEAN, 8, TFS(&tfs_artnet_rom_booted), 0x04,
6300
14
        NULL, HFILL }},
6301
6302
14
    { &hf_artnet_poll_reply_status_port_prog,
6303
14
      { "Port Address Programming Authority",
6304
14
        "artnet.poll_reply.port_prog",
6305
14
        FT_UINT8, BASE_HEX, VALS(artnet_port_prog_auth_vals), 0x30,
6306
14
        NULL, HFILL }},
6307
6308
14
    { &hf_artnet_poll_reply_status_indicator,
6309
14
      { "Indicator State",
6310
14
        "artnet.poll_reply.indicator",
6311
14
        FT_UINT8, BASE_HEX, VALS(artnet_indicator_state_vals), 0xC0,
6312
14
        NULL, HFILL }},
6313
6314
14
    { &hf_artnet_poll_reply_esta_man,
6315
14
      { "ESTA Code",
6316
14
        "artnet.poll_reply.esta_man",
6317
14
        FT_UINT16, BASE_HEX|BASE_EXT_STRING, &dmx_esta_manfid_vals_ext, 0x0,
6318
14
        NULL, HFILL }},
6319
6320
14
    { &hf_artnet_poll_reply_short_name,
6321
14
      { "Short Name",
6322
14
        "artnet.poll_reply.short_name",
6323
14
        FT_STRINGZ, BASE_NONE, NULL, 0x0,
6324
14
        NULL, HFILL }},
6325
6326
14
    { &hf_artnet_poll_reply_long_name,
6327
14
      { "Long Name",
6328
14
        "artnet.poll_reply.long_name",
6329
14
        FT_STRINGZ, BASE_NONE, NULL, 0x0,
6330
14
        NULL, HFILL }},
6331
6332
14
    { &hf_artnet_poll_reply_node_report,
6333
14
      { "Node Report",
6334
14
        "artnet.poll_reply.node_report",
6335
14
        FT_STRINGZ, BASE_NONE, NULL, 0x0,
6336
14
        NULL, HFILL }},
6337
6338
14
    { &hf_artnet_poll_reply_port_info,
6339
14
      { "Port Info",
6340
14
        "artnet.poll_reply.port_info",
6341
14
        FT_NONE, BASE_NONE, NULL, 0,
6342
14
        NULL, HFILL }},
6343
6344
14
    { &hf_artnet_poll_reply_num_ports,
6345
14
      { "Number of Ports",
6346
14
        "artnet.poll_reply.num_ports",
6347
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
6348
14
        NULL, HFILL }},
6349
6350
14
    { &hf_artnet_poll_reply_port_types,
6351
14
      { "Port Types",
6352
14
        "artnet.poll_reply.port_types",
6353
14
        FT_NONE, BASE_NONE, NULL, 0,
6354
14
        NULL, HFILL }},
6355
6356
14
    { &hf_artnet_poll_reply_port_types_1,
6357
14
      { "Type of Port 1",
6358
14
        "artnet.poll_reply.port_types_1",
6359
14
        FT_UINT8, BASE_HEX, VALS(artnet_port_type_vals), 0x0,
6360
14
        NULL, HFILL }},
6361
6362
14
    { &hf_artnet_poll_reply_port_types_2,
6363
14
      { "Type of Port 2",
6364
14
        "artnet.poll_reply.port_types_2",
6365
14
        FT_UINT8, BASE_HEX, VALS(artnet_port_type_vals), 0x0,
6366
14
        NULL, HFILL }},
6367
6368
14
    { &hf_artnet_poll_reply_port_types_3,
6369
14
      { "Type of Port 3",
6370
14
        "artnet.poll_reply.port_types_3",
6371
14
        FT_UINT8, BASE_HEX, VALS(artnet_port_type_vals), 0x0,
6372
14
        NULL, HFILL }},
6373
6374
14
    { &hf_artnet_poll_reply_port_types_4,
6375
14
      { "Type of Port 4",
6376
14
        "artnet.poll_reply.port_types_4",
6377
14
        FT_UINT8, BASE_HEX, VALS(artnet_port_type_vals), 0x0,
6378
14
        NULL, HFILL }},
6379
6380
14
    { &hf_artnet_poll_reply_good_input,
6381
14
      { "Input Status",
6382
14
        "artnet.poll_reply.good_input",
6383
14
        FT_NONE, BASE_NONE, NULL, 0,
6384
14
        NULL, HFILL }},
6385
6386
14
    { &hf_artnet_poll_reply_good_input_1,
6387
14
      { "Input status of Port 1",
6388
14
        "artnet.poll_reply.good_input_1",
6389
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6390
14
        NULL, HFILL }},
6391
6392
14
    { &hf_artnet_poll_reply_good_input_converts_to,
6393
14
      { "Input converts to",
6394
14
        "artnet.poll_reply.good_input_converts_to",
6395
14
        FT_BOOLEAN, 8, TFS(&tfs_artnet_poll_reply_tx_and_conversion_proto), 0x01,
6396
14
        NULL, HFILL }},
6397
6398
14
    { &hf_artnet_poll_reply_good_input_recv_error,
6399
14
      { "Receive errors detected",
6400
14
        "artnet.poll_reply.good_input_recv_error",
6401
14
        FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
6402
14
        NULL, HFILL }},
6403
6404
14
    { &hf_artnet_poll_reply_good_input_disabled,
6405
14
      { "Input is disabled",
6406
14
        "artnet.poll_reply.good_input_disabled",
6407
14
        FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
6408
14
        NULL, HFILL }},
6409
6410
14
    { &hf_artnet_poll_reply_good_input_dmx_text,
6411
14
      { "DMX text packets supported",
6412
14
        "artnet.poll_reply.good_input_dmx_text",
6413
14
        FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
6414
14
        NULL, HFILL }},
6415
6416
14
    { &hf_artnet_poll_reply_good_input_dmx_sip,
6417
14
      { "DMX SIPs supported",
6418
14
        "artnet.poll_reply.good_input_dmx_sip",
6419
14
        FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20,
6420
14
        NULL, HFILL }},
6421
6422
14
    { &hf_artnet_poll_reply_good_input_dmx_test,
6423
14
      { "DMX test packets supported",
6424
14
        "artnet.poll_reply.good_input_dmx_test",
6425
14
        FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40,
6426
14
        NULL, HFILL }},
6427
6428
14
    { &hf_artnet_poll_reply_good_input_data,
6429
14
      { "Data received",
6430
14
        "artnet.poll_reply.good_input_data",
6431
14
        FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
6432
14
        NULL, HFILL }},
6433
6434
14
    { &hf_artnet_poll_reply_good_input_2,
6435
14
      { "Input status of Port 2",
6436
14
        "artnet.poll_reply.good_input_2",
6437
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6438
14
        NULL, HFILL }},
6439
6440
14
    { &hf_artnet_poll_reply_good_input_3,
6441
14
      { "Input status of Port 3",
6442
14
        "artnet.poll_reply.good_input_3",
6443
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6444
14
        NULL, HFILL }},
6445
6446
14
    { &hf_artnet_poll_reply_good_input_4,
6447
14
      { "Input status of Port 4",
6448
14
        "artnet.poll_reply.good_input_4",
6449
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6450
14
        NULL, HFILL }},
6451
6452
14
    { &hf_artnet_poll_reply_good_output,
6453
14
      { "Output Status",
6454
14
        "artnet.poll_reply.good_output",
6455
14
        FT_NONE, BASE_NONE, NULL, 0,
6456
14
        "Port output status", HFILL }},
6457
6458
14
    { &hf_artnet_poll_reply_good_output_b,
6459
14
      { "Output Status (B)",
6460
14
        "artnet.poll_reply.good_output_b",
6461
14
        FT_NONE, BASE_NONE, NULL, 0,
6462
14
        "Port output status (B)", HFILL }},
6463
6464
14
    { &hf_artnet_poll_reply_good_output_1,
6465
14
      { "Output status of Port 1",
6466
14
        "artnet.poll_reply.good_output_1",
6467
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6468
14
        NULL, HFILL }},
6469
6470
14
    { &hf_artnet_poll_reply_good_output_2,
6471
14
      { "Output status of Port 2",
6472
14
        "artnet.poll_reply.good_output_2",
6473
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6474
14
        NULL, HFILL }},
6475
6476
14
    { &hf_artnet_poll_reply_good_output_3,
6477
14
      { "Output status of Port 3",
6478
14
        "artnet.poll_reply.good_output_3",
6479
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6480
14
        NULL, HFILL }},
6481
6482
14
    { &hf_artnet_poll_reply_good_output_4,
6483
14
      { "Output status of Port 4",
6484
14
        "artnet.poll_reply.good_output_4",
6485
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6486
14
        NULL, HFILL }},
6487
6488
14
    { &hf_artnet_poll_reply_good_output_b_1,
6489
14
      { "Output status (B) of Port 1",
6490
14
        "artnet.poll_reply.good_output_b_1",
6491
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6492
14
        NULL, HFILL }},
6493
6494
14
    { &hf_artnet_poll_reply_good_output_b_2,
6495
14
      { "Output status (B) of Port 2",
6496
14
        "artnet.poll_reply.good_output_b_2",
6497
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6498
14
        NULL, HFILL }},
6499
6500
14
    { &hf_artnet_poll_reply_good_output_b_3,
6501
14
      { "Output status (B) of Port 3",
6502
14
        "artnet.poll_reply.good_output_b_3",
6503
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6504
14
        NULL, HFILL }},
6505
6506
14
    { &hf_artnet_poll_reply_good_output_b_4,
6507
14
      { "Output status (B) of Port 4",
6508
14
        "artnet.poll_reply.good_output_b_4",
6509
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6510
14
        NULL, HFILL }},
6511
6512
14
    { &hf_artnet_poll_reply_good_output_tx_proto,
6513
14
      { "Transmit protocol",
6514
14
        "artnet.poll_reply.good_output_tx_proto",
6515
14
        FT_BOOLEAN, 8, TFS(&tfs_artnet_poll_reply_tx_and_conversion_proto), 0x01,
6516
14
        NULL, HFILL }},
6517
6518
14
    { &hf_artnet_poll_reply_good_output_merge_ltp,
6519
14
      { "Merge mode is LTP",
6520
14
        "artnet.poll_reply.good_output_merge_ltp",
6521
14
        FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
6522
14
        NULL, HFILL }},
6523
6524
14
    { &hf_artnet_poll_reply_good_output_short,
6525
14
      { "DMX output short circuit",
6526
14
        "artnet.poll_reply.good_output_short",
6527
14
        FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04,
6528
14
        NULL, HFILL }},
6529
6530
14
    { &hf_artnet_poll_reply_good_output_merge_artnet,
6531
14
      { "Merging Art-Net data",
6532
14
        "artnet.poll_reply.good_output_merge_artnet",
6533
14
        FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08,
6534
14
        NULL, HFILL }},
6535
6536
14
    { &hf_artnet_poll_reply_good_output_dmx_text,
6537
14
      { "DMX text packets supported",
6538
14
        "artnet.poll_reply.good_output_dmx_text",
6539
14
        FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x10,
6540
14
        NULL, HFILL }},
6541
6542
14
    { &hf_artnet_poll_reply_good_output_dmx_sip,
6543
14
      { "DMX SIPs supported",
6544
14
        "artnet.poll_reply.good_output_dmx_sip",
6545
14
        FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20,
6546
14
        NULL, HFILL }},
6547
6548
14
    { &hf_artnet_poll_reply_good_output_dmx_test,
6549
14
      { "DMX test packets supported",
6550
14
        "artnet.poll_reply.good_output_dmx_test",
6551
14
        FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40,
6552
14
        NULL, HFILL }},
6553
6554
14
    { &hf_artnet_poll_reply_good_output_data,
6555
14
      { "Data transmitted",
6556
14
        "artnet.poll_reply.good_output_data",
6557
14
        FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x80,
6558
14
        NULL, HFILL }},
6559
6560
14
    { &hf_artnet_poll_reply_good_output_bg_discovery,
6561
14
      { "Background Discovery",
6562
14
        "artnet.poll_reply.good_output_bg_discovery",
6563
14
        FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled), 0x10,
6564
14
        NULL, HFILL }},
6565
6566
14
    { &hf_artnet_poll_reply_good_output_discovery,
6567
14
      { "Discovery",
6568
14
        "artnet.poll_reply.good_output_discovery",
6569
14
        FT_BOOLEAN, 8, TFS(&tfs_artnet_poll_reply_output_discovery), 0x20,
6570
14
        NULL, HFILL }},
6571
6572
14
    { &hf_artnet_poll_reply_good_output_style,
6573
14
      { "Output Style",
6574
14
        "artnet.poll_reply.good_output_style",
6575
14
        FT_BOOLEAN, 8, TFS(&tfs_artnet_poll_reply_output_style), 0x40,
6576
14
        NULL, HFILL }},
6577
6578
14
    { &hf_artnet_poll_reply_good_output_rdm,
6579
14
      { "RDM",
6580
14
        "artnet.poll_reply.good_output_rdm",
6581
14
        FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled), 0x80,
6582
14
        NULL, HFILL }},
6583
6584
14
    { &hf_artnet_poll_reply_swin,
6585
14
      { "Input Subswitch",
6586
14
        "artnet.poll_reply.swin",
6587
14
        FT_NONE, BASE_NONE, NULL, 0,
6588
14
        NULL, HFILL }},
6589
6590
14
    { &hf_artnet_poll_reply_swin_1,
6591
14
      { "Input Subswitch of Port 1",
6592
14
        "artnet.poll_reply.swin_1",
6593
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6594
14
        NULL, HFILL }},
6595
6596
14
    { &hf_artnet_poll_reply_swin_2,
6597
14
      { "Input Subswitch of Port 2",
6598
14
        "artnet.poll_reply.swin_2",
6599
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6600
14
        NULL, HFILL }},
6601
6602
14
    { &hf_artnet_poll_reply_swin_3,
6603
14
      { "Input Subswitch of Port 3",
6604
14
        "artnet.poll_reply.swin_3",
6605
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6606
14
        NULL, HFILL }},
6607
6608
14
    { &hf_artnet_poll_reply_swin_4,
6609
14
      { "Input Subswitch of Port 4",
6610
14
        "artnet.poll_reply.swin_4",
6611
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6612
14
        NULL, HFILL }},
6613
6614
14
    { &hf_artnet_poll_reply_swin_1_universe,
6615
14
      { "Universe of input port 1",
6616
14
        "artnet.poll_reply.swin_1_universe",
6617
14
        FT_UINT16, BASE_DEC,NULL, 0x0,
6618
14
        NULL,HFILL }},
6619
14
    { &hf_artnet_poll_reply_swin_2_universe,
6620
14
      { "Universe of input port 2",
6621
14
        "artnet.poll_reply.swin_2_universe",
6622
14
        FT_UINT16, BASE_DEC,NULL, 0x0,
6623
14
        NULL,HFILL }},
6624
14
    { &hf_artnet_poll_reply_swin_3_universe,
6625
14
      { "Universe of input port 3",
6626
14
        "artnet.poll_reply.swin_3_universe",
6627
14
        FT_UINT16, BASE_DEC,NULL, 0x0,
6628
14
        NULL,HFILL }},
6629
14
    { &hf_artnet_poll_reply_swin_4_universe,
6630
14
      { "Universe of input port 4",
6631
14
        "artnet.poll_reply.swin_4_universe",
6632
14
        FT_UINT16, BASE_DEC,NULL, 0x0,
6633
14
        NULL,HFILL }},
6634
6635
14
    { &hf_artnet_poll_reply_swout,
6636
14
      { "Output Subswitch",
6637
14
        "artnet.poll_reply.swout",
6638
14
        FT_NONE, BASE_NONE, NULL, 0,
6639
14
        NULL, HFILL }},
6640
6641
14
    { &hf_artnet_poll_reply_swout_1,
6642
14
      { "Output Subswitch of Port 1",
6643
14
        "artnet.poll_reply.swout_1",
6644
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6645
14
        NULL, HFILL }},
6646
6647
14
    { &hf_artnet_poll_reply_swout_2,
6648
14
      { "Output Subswitch of Port 2",
6649
14
        "artnet.poll_reply.swout_2",
6650
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6651
14
        NULL, HFILL }},
6652
6653
14
    { &hf_artnet_poll_reply_swout_3,
6654
14
      { "Output Subswitch of Port 3",
6655
14
        "artnet.poll_reply.swout_3",
6656
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6657
14
        NULL, HFILL }},
6658
6659
14
    { &hf_artnet_poll_reply_swout_4,
6660
14
      { "Output Subswitch of Port 4",
6661
14
        "artnet.poll_reply.swout_4",
6662
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6663
14
        NULL, HFILL }},
6664
6665
14
    { &hf_artnet_poll_reply_swout_1_universe,
6666
14
      { "Universe of output port 1",
6667
14
        "artnet.poll_reply.swout_1_universe",
6668
14
        FT_UINT16, BASE_DEC,NULL, 0x0,
6669
14
        NULL,HFILL }},
6670
14
    { &hf_artnet_poll_reply_swout_2_universe,
6671
14
      { "Universe of output port 2",
6672
14
        "artnet.poll_reply.swout_2_universe",
6673
14
        FT_UINT16, BASE_DEC,NULL, 0x0,
6674
14
        NULL,HFILL }},
6675
14
    { &hf_artnet_poll_reply_swout_3_universe,
6676
14
      { "Universe of output port 3",
6677
14
        "artnet.poll_reply.swout_3_universe",
6678
14
        FT_UINT16, BASE_DEC,NULL, 0x0,
6679
14
        NULL,HFILL }},
6680
14
    { &hf_artnet_poll_reply_swout_4_universe,
6681
14
      { "Universe of output port 4",
6682
14
        "artnet.poll_reply.swout_4_universe",
6683
14
        FT_UINT16, BASE_DEC,NULL, 0x0,
6684
14
        NULL,HFILL }},
6685
6686
14
    { &hf_artnet_poll_reply_sacnprio,
6687
14
      { "sACN Priority",
6688
14
        "artnet.poll_reply.sacnprio",
6689
14
        FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
6690
14
        NULL, HFILL }},
6691
6692
14
    { &hf_artnet_poll_reply_swmacro,
6693
14
      { "SwMacro",
6694
14
        "artnet.poll_reply.swmacro",
6695
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6696
14
        "Macro key inputs", HFILL }},
6697
6698
14
    { &hf_artnet_poll_reply_swmacro_1,
6699
14
      { "Macro 1",
6700
14
        "artnet.poll_reply.swmacro_1",
6701
14
        FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x01,
6702
14
        NULL, HFILL }},
6703
6704
14
    { &hf_artnet_poll_reply_swmacro_2,
6705
14
      { "Macro 2",
6706
14
        "artnet.poll_reply.swmacro_2",
6707
14
        FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x02,
6708
14
        NULL, HFILL }},
6709
6710
14
    { &hf_artnet_poll_reply_swmacro_3,
6711
14
      { "Macro 3",
6712
14
        "artnet.poll_reply.swmacro_3",
6713
14
        FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x04,
6714
14
        NULL, HFILL }},
6715
6716
14
    { &hf_artnet_poll_reply_swmacro_4,
6717
14
      { "Macro 4",
6718
14
        "artnet.poll_reply.swmacro_4",
6719
14
        FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x08,
6720
14
        NULL, HFILL }},
6721
6722
14
    { &hf_artnet_poll_reply_swmacro_5,
6723
14
      { "Macro 5",
6724
14
        "artnet.poll_reply.swmacro_5",
6725
14
        FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x10,
6726
14
        NULL, HFILL }},
6727
6728
14
    { &hf_artnet_poll_reply_swmacro_6,
6729
14
      { "Macro 6",
6730
14
        "artnet.poll_reply.swmacro_6",
6731
14
        FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x20,
6732
14
        NULL, HFILL }},
6733
6734
14
    { &hf_artnet_poll_reply_swmacro_7,
6735
14
      { "Macro 7",
6736
14
        "artnet.poll_reply.swmacro_7",
6737
14
        FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x40,
6738
14
        NULL, HFILL }},
6739
6740
14
    { &hf_artnet_poll_reply_swmacro_8,
6741
14
      { "Macro 8",
6742
14
        "artnet.poll_reply.swmacro_8",
6743
14
        FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x80,
6744
14
        NULL, HFILL }},
6745
6746
14
    { &hf_artnet_poll_reply_swremote,
6747
14
      { "SwRemote",
6748
14
        "artnet.poll_reply.swremote",
6749
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6750
14
        "Remote trigger", HFILL }},
6751
6752
14
    { &hf_artnet_poll_reply_swremote_1,
6753
14
      { "Remote 1",
6754
14
        "artnet.poll_reply.swremote_1",
6755
14
        FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x01,
6756
14
        NULL, HFILL }},
6757
6758
14
    { &hf_artnet_poll_reply_swremote_2,
6759
14
      { "Remote 2",
6760
14
        "artnet.poll_reply.swremote_2",
6761
14
        FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x02,
6762
14
        NULL, HFILL }},
6763
6764
14
    { &hf_artnet_poll_reply_swremote_3,
6765
14
      { "Remote 3",
6766
14
        "artnet.poll_reply.swremote_3",
6767
14
        FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x04,
6768
14
        NULL, HFILL }},
6769
6770
14
    { &hf_artnet_poll_reply_swremote_4,
6771
14
      { "Remote 4",
6772
14
        "artnet.poll_reply.swremote_4",
6773
14
        FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x08,
6774
14
        NULL, HFILL }},
6775
6776
14
    { &hf_artnet_poll_reply_swremote_5,
6777
14
      { "Remote 5",
6778
14
        "artnet.poll_reply.swremote_5",
6779
14
        FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x10,
6780
14
        NULL, HFILL }},
6781
6782
14
    { &hf_artnet_poll_reply_swremote_6,
6783
14
      { "Remote 6",
6784
14
        "artnet.poll_reply.swremote_6",
6785
14
        FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x20,
6786
14
        NULL, HFILL }},
6787
6788
14
    { &hf_artnet_poll_reply_swremote_7,
6789
14
      { "Remote 7",
6790
14
        "artnet.poll_reply.swremote_7",
6791
14
        FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x40,
6792
14
        NULL, HFILL }},
6793
6794
14
    { &hf_artnet_poll_reply_swremote_8,
6795
14
      { "Remote 8",
6796
14
        "artnet.poll_reply.swremote_8",
6797
14
        FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x80,
6798
14
        NULL, HFILL }},
6799
6800
14
    { &hf_artnet_poll_reply_style,
6801
14
      { "Style",
6802
14
        "artnet.poll_reply.style",
6803
14
        FT_UINT8, BASE_HEX, VALS(vals_artnet_poll_reply_style), 0x0,
6804
14
        "Equipment style", HFILL }},
6805
6806
14
    { &hf_artnet_poll_reply_mac,
6807
14
      { "MAC",
6808
14
        "artnet.poll_reply.mac",
6809
14
        FT_ETHER, BASE_NONE, NULL, 0x0,
6810
14
        NULL, HFILL }},
6811
6812
14
    { &hf_artnet_poll_reply_bind_ip_address,
6813
14
      { "Bind IP Address",
6814
14
        "artnet.poll_reply.bind_ip_address",
6815
14
        FT_IPv4, BASE_NONE, NULL, 0x0,
6816
14
        "IP address of root device", HFILL }},
6817
6818
14
    { &hf_artnet_poll_reply_bind_index,
6819
14
      { "Bind Index",
6820
14
        "artnet.poll_reply.bind_index",
6821
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6822
14
        NULL, HFILL }},
6823
6824
14
    { &hf_artnet_poll_reply_status2,
6825
14
      { "Status2",
6826
14
        "artnet.poll_reply.status2",
6827
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6828
14
        NULL, HFILL }},
6829
6830
14
    { &hf_artnet_poll_reply_status2_web_supported,
6831
14
      { "Web configuration supported",
6832
14
        "artnet.poll_reply.websupport",
6833
14
        FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
6834
14
        NULL, HFILL }},
6835
6836
14
    { &hf_artnet_poll_reply_status2_dhcp_used,
6837
14
      { "DHCP configuration used",
6838
14
        "artnet.poll_reply.dhcpused",
6839
14
        FT_BOOLEAN, 8, TFS(&tfs_used_notused), 0x02,
6840
14
        NULL, HFILL }},
6841
6842
14
    { &hf_artnet_poll_reply_status2_dhcp_supported,
6843
14
      { "DHCP configuration supported",
6844
14
        "artnet.poll_reply.dhcpsupport",
6845
14
        FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
6846
14
        NULL, HFILL }},
6847
6848
14
    { &hf_artnet_poll_reply_status2_bigaddr_supported,
6849
14
      { "Port-Address size",
6850
14
        "artnet.poll_reply.addrsupport",
6851
14
        FT_BOOLEAN, 8, TFS(&tfs_artnet_poll_reply_status2_bigaddr_supported), 0x08,
6852
14
        NULL, HFILL }},
6853
6854
14
    { &hf_artnet_poll_reply_status2_sacn_supported,
6855
14
      { "sACN supported",
6856
14
        "artnet.poll_reply.sacnsupport",
6857
14
        FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
6858
14
        "Switch between Art-Net and sACN (E1.31)", HFILL }},
6859
6860
14
    { &hf_artnet_poll_reply_status2_squawking,
6861
14
      { "Squawking",
6862
14
        "artnet.poll_reply.squawking",
6863
14
        FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20,
6864
14
        NULL, HFILL }},
6865
6866
14
    { &hf_artnet_poll_reply_status2_output_switching_supported,
6867
14
      { "Switch output style",
6868
14
        "artnet.poll_reply.switch_output_style",
6869
14
        FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
6870
14
        "Switch output style using ArtCommand", HFILL }},
6871
6872
14
    { &hf_artnet_poll_reply_status2_control_rdm_supported,
6873
14
      { "Control RDM",
6874
14
        "artnet.poll_reply.control_rdm",
6875
14
        FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
6876
14
        "Control RDM using ArtCommand", HFILL }},
6877
6878
14
    { &hf_artnet_poll_reply_status3,
6879
14
      { "Status3",
6880
14
        "artnet.poll_reply.status3",
6881
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
6882
14
        NULL, HFILL }},
6883
6884
14
    { &hf_artnet_poll_reply_status3_prog_bg_discovery_supported,
6885
14
      { "Programmable background discovery",
6886
14
        "artnet.poll_reply.bgdiscovery",
6887
14
        FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
6888
14
        NULL, HFILL }},
6889
6890
14
    { &hf_artnet_poll_reply_status3_bg_queue_supported,
6891
14
      { "Background Queue",
6892
14
        "artnet.poll_reply.bg_queue",
6893
14
        FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
6894
14
        NULL, HFILL }},
6895
6896
14
    { &hf_artnet_poll_reply_status3_rdmnet_supported,
6897
14
      { "RDMnet",
6898
14
        "artnet.poll_reply.rdmnet",
6899
14
        FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
6900
14
        NULL, HFILL }},
6901
6902
14
    { &hf_artnet_poll_reply_status3_switching_port_supported,
6903
14
      { "Input/Output switching",
6904
14
        "artnet.poll_reply.switch_ports",
6905
14
        FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
6906
14
        "Switch ports between input/output", HFILL }},
6907
6908
14
    { &hf_artnet_poll_reply_status3_llrp_supported,
6909
14
      { "LLRP",
6910
14
        "artnet.poll_reply.llrp",
6911
14
        FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
6912
14
        NULL, HFILL }},
6913
6914
14
    { &hf_artnet_poll_reply_status3_failover_supported,
6915
14
      { "Fail-over",
6916
14
        "artnet.poll_reply.failover",
6917
14
        FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
6918
14
        NULL, HFILL }},
6919
6920
14
    { &hf_artnet_poll_reply_status3_failsafe_state,
6921
14
      { "Failsafe state",
6922
14
        "artnet.poll_reply.failsafe_state",
6923
14
        FT_UINT8, BASE_HEX, VALS(vals_artnet_poll_reply_status3_failsafe_state), 0xC0,
6924
14
        NULL, HFILL }},
6925
6926
14
    { &hf_artnet_poll_reply_default_responder_uid,
6927
14
      { "Default Responder UID",
6928
14
        "artnet.poll_reply.default_responder_uid",
6929
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
6930
14
        "RDMnet & LLRP Default Responder UID", HFILL }},
6931
6932
14
    { &hf_artnet_poll_reply_node_report_status_code,
6933
14
      { "Node Report Status Code",
6934
14
        "artnet.poll_reply.node_report_status_code",
6935
14
        FT_UINT16, BASE_HEX, VALS(vals_artnet_poll_reply_node_report_status_code), 0x0,
6936
14
        NULL, HFILL }},
6937
6938
14
    { &hf_artnet_poll_reply_node_report_response_counter,
6939
14
      { "Node Report Response Counter",
6940
14
        "artnet.poll_reply.node_report_response_counter",
6941
14
        FT_UINT32, BASE_DEC, NULL, 0x0,
6942
14
        NULL, HFILL }},
6943
6944
14
    { &hf_artnet_poll_reply_node_report_status_string,
6945
14
      { "Node Report Status String",
6946
14
        "artnet.poll_reply.node_report_status_string",
6947
14
        FT_STRING, BASE_NONE, NULL, 0x0,
6948
14
        NULL, HFILL }},
6949
6950
14
    { &hf_artnet_poll_reply_user,
6951
14
      { "User specific data",
6952
14
        "artnet.poll_reply.user",
6953
14
        FT_UINT16, BASE_HEX, NULL, 0x0,
6954
14
        NULL, HFILL }},
6955
6956
14
    { &hf_artnet_poll_reply_refreshrate,
6957
14
      { "Refresh rate",
6958
14
        "artnet.poll_reply.refreshrate",
6959
14
        FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_hz), 0,
6960
14
        NULL, HFILL }},
6961
6962
14
    { &hf_artnet_poll_reply_bg_queue_policy,
6963
14
      { "Background Queue Policy",
6964
14
        "artnet.poll_reply.bg_queue_policy",
6965
14
        FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(vals_artnet_poll_reply_bg_queue_policy), 0x0,
6966
14
        NULL, HFILL }},
6967
6968
    /* ArtOutput */
6969
6970
14
    { &hf_artnet_output,
6971
14
      { "ArtDMX packet",
6972
14
        "artnet.output",
6973
14
        FT_NONE, BASE_NONE, NULL, 0,
6974
14
        "Art-Net ArtDMX packet", HFILL }},
6975
6976
14
    { &hf_artnet_output_sequence,
6977
14
      { "Sequence",
6978
14
        "artnet.output.sequence",
6979
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
6980
14
        NULL, HFILL }},
6981
6982
14
    { &hf_artnet_output_physical,
6983
14
      { "Physical",
6984
14
        "artnet.output.physical",
6985
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
6986
14
        NULL, HFILL }},
6987
6988
14
    { &hf_artnet_output_universe,
6989
14
      { "Universe",
6990
14
        "artnet.output.universe",
6991
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
6992
14
        NULL, HFILL }},
6993
6994
14
    { &hf_artnet_output_length,
6995
14
      { "Length",
6996
14
        "artnet.output.length",
6997
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
6998
14
        NULL, HFILL }},
6999
7000
7001
    /* ArtSync */
7002
7003
14
    { &hf_artnet_sync,
7004
14
      { "ArtSync packet",
7005
14
        "artnet.sync",
7006
14
        FT_NONE, BASE_NONE, NULL, 0,
7007
14
        "Art-Net ArtSync packet", HFILL }},
7008
7009
14
    { &hf_artnet_sync_aux,
7010
14
      { "Aux",
7011
14
        "artnet.sync.aux",
7012
14
        FT_UINT16, BASE_HEX, NULL, 0x0,
7013
14
        NULL, HFILL }},
7014
7015
7016
    /* ArtNzs */
7017
7018
14
    { &hf_artnet_nzs,
7019
14
      { "ArtNZS packet",
7020
14
        "artnet.nzs",
7021
14
        FT_NONE, BASE_NONE, NULL, 0,
7022
14
        "Art-Net ArtNZS packet", HFILL }},
7023
7024
14
    { &hf_artnet_nzs_sequence,
7025
14
      { "Sequence",
7026
14
        "artnet.nzs.sequence",
7027
14
        FT_UINT8, BASE_DEC, NULL, 0,
7028
14
        NULL, HFILL }},
7029
7030
14
    { &hf_artnet_nzs_start_code,
7031
14
      { "Start Code",
7032
14
        "artnet.nzs.start_code",
7033
14
        FT_UINT8, BASE_DEC_HEX, NULL, 0,
7034
14
        NULL, HFILL }},
7035
7036
14
    { &hf_artnet_nzs_subuni,
7037
14
      { "Sub Universe",
7038
14
        "artnet.nzs.subuni",
7039
14
        FT_UINT8, BASE_DEC_HEX, NULL, 0,
7040
14
        NULL, HFILL }},
7041
7042
14
    { &hf_artnet_nzs_net,
7043
14
      { "Net",
7044
14
        "artnet.nzs.net",
7045
14
        FT_UINT8, BASE_DEC_HEX, NULL, 0,
7046
14
        NULL, HFILL }},
7047
7048
14
    { &hf_artnet_nzs_length,
7049
14
      { "Length",
7050
14
        "artnet.nzs.length",
7051
14
        FT_UINT16, BASE_DEC, NULL, 0,
7052
14
        NULL, HFILL }},
7053
7054
14
    { &hf_artnet_nzs_vlc_man_id,
7055
14
      { "ESTA Code",
7056
14
        "artnet.nzs.vlc_esta_man_id",
7057
14
        FT_UINT16, BASE_HEX|BASE_EXT_STRING, &dmx_esta_manfid_vals_ext, 0,
7058
14
        NULL, HFILL }},
7059
7060
14
    { &hf_artnet_nzs_vlc_sub_code,
7061
14
      { "VLC Sub Code",
7062
14
        "artnet.nzs.vlc_sub_code",
7063
14
        FT_UINT8, BASE_HEX, NULL, 0,
7064
14
        NULL, HFILL }},
7065
7066
14
    { &hf_artnet_nzs_vlc_flags,
7067
14
      { "VLC Flags",
7068
14
        "artnet.nzs.vlc_flags",
7069
14
        FT_UINT8, BASE_HEX, NULL, 0,
7070
14
        NULL, HFILL }},
7071
7072
14
    { &hf_artnet_nzs_vlc_flags_beacon,
7073
14
      { "Beacon",
7074
14
        "artnet.nzs.vlc_beacon",
7075
14
        FT_BOOLEAN, 8, TFS(&tfs_artnet_nzs_vlc_beacon), 0x20,
7076
14
        NULL, HFILL }},
7077
7078
14
    { &hf_artnet_nzs_vlc_flags_reply,
7079
14
      { "Reply",
7080
14
        "artnet.nzs.vlc_reply",
7081
14
        FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40,
7082
14
        NULL, HFILL }},
7083
7084
14
    { &hf_artnet_nzs_vlc_flags_ieee,
7085
14
      { "IEEE",
7086
14
        "artnet.nzs.vlc_ieee",
7087
14
        FT_BOOLEAN, 8, TFS(&tfs_artnet_nzs_vlc_ieee), 0x80,
7088
14
        NULL, HFILL }},
7089
7090
14
    { &hf_artnet_nzs_vlc_transaction,
7091
14
      { "VLC Transaction",
7092
14
        "artnet.nzs.vlc_transaction",
7093
14
        FT_UINT16, BASE_HEX, NULL, 0,
7094
14
        NULL, HFILL }},
7095
7096
14
    { &hf_artnet_nzs_vlc_slot_addr,
7097
14
      { "VLC Slot Address",
7098
14
        "artnet.nzs.vlc_slot_addr",
7099
14
        FT_UINT16, BASE_HEX, NULL, 0,
7100
14
        NULL, HFILL }},
7101
7102
14
    { &hf_artnet_nzs_vlc_payload_size,
7103
14
      { "VLC Payload Size",
7104
14
        "artnet.nzs.vlc_payload_size",
7105
14
        FT_UINT16, BASE_HEX, NULL, 0,
7106
14
        NULL, HFILL }},
7107
7108
14
    { &hf_artnet_nzs_vlc_payload_checksum,
7109
14
      { "VLC Payload Checksum",
7110
14
        "artnet.nzs.vlc_payload_checksum",
7111
14
        FT_UINT16, BASE_HEX, NULL, 0,
7112
14
        NULL, HFILL }},
7113
7114
14
    { &hf_artnet_nzs_vlc_mod_depth,
7115
14
      { "VLC Modulation Depth",
7116
14
        "artnet.nzs.vlc_mod_depth",
7117
14
        FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_percent), 0,
7118
14
        NULL, HFILL }},
7119
7120
14
    { &hf_artnet_nzs_vlc_mod_freq,
7121
14
      { "VLC Modulation Frequency",
7122
14
        "artnet.nzs.vlc_mod_freq",
7123
14
        FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_hz), 0,
7124
14
        NULL, HFILL }},
7125
7126
14
    { &hf_artnet_nzs_vlc_mod_type,
7127
14
      { "VLC Modulation Type",
7128
14
        "artnet.nzs.vlc_mod_type",
7129
14
        FT_UINT16, BASE_HEX, NULL, 0,
7130
14
        NULL, HFILL }},
7131
7132
14
    { &hf_artnet_nzs_vlc_lang_code,
7133
14
      { "VLC Payload Language Code",
7134
14
        "artnet.nzs.vlc_lang_code",
7135
14
        FT_UINT16, BASE_HEX, VALS(vals_artnet_nzs_vlc_lang_code), 0,
7136
14
        NULL, HFILL }},
7137
7138
14
    { &hf_artnet_nzs_vlc_beacon_repeat,
7139
14
      { "VLC Beacon Repeat Frequency",
7140
14
        "artnet.nzs.vlc_beacon_freq",
7141
14
        FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_hz), 0,
7142
14
        NULL, HFILL }},
7143
7144
14
    { &hf_artnet_nzs_vlc_payload,
7145
14
      { "VLC Payload",
7146
14
        "artnet.nzs.vlc_payload",
7147
14
        FT_BYTES, BASE_NONE, NULL, 0,
7148
14
        NULL, HFILL }},
7149
7150
14
    { &hf_artnet_nzs_vlc_payload_beacon_url,
7151
14
      { "VLC Payload (Beacon URL)",
7152
14
        "artnet.nzs.vlc_payload_beacon_url",
7153
14
        FT_STRING, BASE_NONE, NULL, 0,
7154
14
        NULL, HFILL }},
7155
7156
14
    { &hf_artnet_nzs_vlc_payload_beacon_text,
7157
14
      { "VLC Payload (Beacon Text)",
7158
14
        "artnet.nzs.vlc_payload_beacon_text",
7159
14
        FT_STRING, BASE_NONE, NULL, 0,
7160
14
        NULL, HFILL }},
7161
7162
14
    { &hf_artnet_nzs_vlc_payload_beacon_location_id,
7163
14
      { "VLC Payload (Beacon Location ID)",
7164
14
        "artnet.nzs.vlc_payload_beacon_location_id",
7165
14
        FT_UINT16, BASE_DEC_HEX, NULL, 0,
7166
14
        NULL, HFILL }},
7167
7168
    /* ArtAddress */
7169
7170
14
    { &hf_artnet_address,
7171
14
      { "ArtAddress packet",
7172
14
        "artnet.address",
7173
14
        FT_NONE, BASE_NONE, NULL, 0,
7174
14
        "Art-Net ArtAddress packet", HFILL }},
7175
7176
14
    { &hf_artnet_address_netswitch_special,
7177
14
      { "NetSwitch",
7178
14
      "artnet.address.netswitch_special",
7179
14
      FT_UINT8, BASE_HEX, VALS(artnet_address_switch_vals), 0,
7180
14
      NULL, HFILL }},
7181
7182
14
    { &hf_artnet_address_netswitch_net,
7183
14
      { "Net",
7184
14
      "artnet.address.netswitch_net",
7185
14
      FT_UINT8, BASE_DEC, NULL, 0x7F,
7186
14
      NULL, HFILL }},
7187
7188
14
    { &hf_artnet_address_netswitch_write,
7189
14
      { "Write Net",
7190
14
      "artnet.address.netswitch_write",
7191
14
      FT_BOOLEAN, 8, NULL, 0x80,
7192
14
      NULL, HFILL }},
7193
7194
14
    { &hf_artnet_address_bind_index,
7195
14
      { "Bind Index",
7196
14
        "artnet.address.bind_index",
7197
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7198
14
        NULL, HFILL }},
7199
7200
14
    { &hf_artnet_address_short_name,
7201
14
      { "Short Name",
7202
14
        "artnet.address.short_name",
7203
14
        FT_STRINGZ, BASE_NONE, NULL, 0x0,
7204
14
        NULL, HFILL }},
7205
7206
14
    { &hf_artnet_address_long_name,
7207
14
      { "Long Name",
7208
14
        "artnet.address.long_name",
7209
14
        FT_STRINGZ, BASE_NONE, NULL, 0x0,
7210
14
        NULL, HFILL }},
7211
7212
14
    { &hf_artnet_address_swin,
7213
14
      { "Input Subswitch",
7214
14
        "artnet.address.swin",
7215
14
        FT_NONE, BASE_NONE, NULL, 0,
7216
14
        NULL, HFILL }},
7217
7218
14
    { &hf_artnet_address_swin_1,
7219
14
      { "Input Subswitch of Port 1",
7220
14
        "artnet.address.swin_1",
7221
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7222
14
        NULL, HFILL }},
7223
7224
14
    { &hf_artnet_address_swin_2,
7225
14
      { "Input Subswitch of Port 2",
7226
14
        "artnet.address.swin_2",
7227
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7228
14
        NULL, HFILL }},
7229
7230
14
    { &hf_artnet_address_swin_3,
7231
14
      { "Input Subswitch of Port 3",
7232
14
        "artnet.address.swin_3",
7233
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7234
14
        NULL, HFILL }},
7235
7236
14
    { &hf_artnet_address_swin_4,
7237
14
      { "Input Subswitch of Port 4",
7238
14
        "artnet.address.swin_4",
7239
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7240
14
        NULL, HFILL }},
7241
7242
14
    { &hf_artnet_address_swout,
7243
14
      { "Output Subswitch",
7244
14
        "artnet.address.swout",
7245
14
        FT_NONE, BASE_NONE, NULL, 0,
7246
14
        NULL, HFILL }},
7247
7248
14
    { &hf_artnet_address_swout_1,
7249
14
      { "Output Subswitch of Port 1",
7250
14
        "artnet.address.swout_1",
7251
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7252
14
        NULL, HFILL }},
7253
7254
14
    { &hf_artnet_address_swout_2,
7255
14
      { "Output Subswitch of Port 2",
7256
14
        "artnet.address.swout_2",
7257
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7258
14
        NULL, HFILL }},
7259
7260
14
    { &hf_artnet_address_swout_3,
7261
14
      { "Output Subswitch of Port 3",
7262
14
        "artnet.address.swout_3",
7263
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7264
14
        NULL, HFILL }},
7265
7266
14
    { &hf_artnet_address_swout_4,
7267
14
      { "Output Subswitch of Port 4",
7268
14
        "artnet.address.swout_4",
7269
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7270
14
        NULL, HFILL }},
7271
7272
14
    { &hf_artnet_address_subswitch_special,
7273
14
      { "NetSwitch",
7274
14
      "artnet.address.subswitch_special",
7275
14
      FT_UINT8, BASE_HEX, VALS(artnet_address_switch_vals), 0,
7276
14
      NULL, HFILL }},
7277
7278
14
    { &hf_artnet_address_subswitch_sub,
7279
14
      { "Sub-Net",
7280
14
      "artnet.address.subswitch_sub",
7281
14
      FT_UINT8, BASE_DEC, NULL, 0x0F,
7282
14
      NULL, HFILL }},
7283
7284
14
    { &hf_artnet_address_subswitch_write,
7285
14
      { "Write Sub-Net",
7286
14
      "artnet.address.subswitch_write",
7287
14
      FT_BOOLEAN, 8, NULL, 0x80,
7288
14
      NULL, HFILL }},
7289
7290
14
    { &hf_artnet_address_sacnprio,
7291
14
      { "sACN Priority",
7292
14
        "artnet.address.sacnprio",
7293
14
        FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7294
14
        NULL, HFILL }},
7295
7296
14
    { &hf_artnet_address_command,
7297
14
      { "Command",
7298
14
        "artnet.address.command",
7299
14
        FT_UINT8, BASE_HEX, VALS(artnet_address_command_vals), 0x0,
7300
14
        NULL, HFILL }},
7301
7302
    /* ArtInput */
7303
7304
14
    { &hf_artnet_input,
7305
14
      { "ArtInput packet",
7306
14
        "artnet.input",
7307
14
        FT_NONE, BASE_NONE, NULL, 0,
7308
14
        "Art-Net ArtInput packet", HFILL }},
7309
7310
14
    { &hf_artnet_input_bind_index,
7311
14
      { "Bind Index",
7312
14
        "artnet.input.bind_index",
7313
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7314
14
        NULL, HFILL }},
7315
7316
14
    { &hf_artnet_input_num_ports,
7317
14
      { "Number of Ports",
7318
14
        "artnet.input.num_ports",
7319
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
7320
14
        NULL, HFILL }},
7321
7322
14
    { &hf_artnet_input_input,
7323
14
      { "Port Status",
7324
14
        "artnet.input.input",
7325
14
        FT_NONE, BASE_NONE, NULL, 0,
7326
14
        NULL, HFILL }},
7327
7328
14
    { &hf_artnet_input_input_1,
7329
14
      { "Status of Port 1",
7330
14
        "artnet.input.input_1",
7331
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7332
14
        NULL, HFILL }},
7333
7334
14
    { &hf_artnet_input_input_2,
7335
14
      { "Status of Port 2",
7336
14
        "artnet.input.input_2",
7337
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7338
14
        NULL, HFILL }},
7339
7340
14
    { &hf_artnet_input_input_3,
7341
14
      { "Status of Port 3",
7342
14
        "artnet.input.input_3",
7343
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7344
14
        NULL, HFILL }},
7345
7346
14
    { &hf_artnet_input_input_4,
7347
14
      { "Status of Port 4",
7348
14
        "artnet.input.input_4",
7349
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7350
14
        NULL, HFILL }},
7351
7352
14
    { &hf_artnet_input_input_disabled,
7353
14
      { "Disabled",
7354
14
      "artnet.input.disabled",
7355
14
      FT_BOOLEAN, 8, NULL, 0xff,
7356
14
      NULL, HFILL }},
7357
7358
    /* ArtFirmwareMaster */
7359
7360
14
    { &hf_artnet_firmware_master,
7361
14
      { "ArtFirmwareMaster packet",
7362
14
        "artnet.firmware_master",
7363
14
        FT_NONE, BASE_NONE, NULL, 0,
7364
14
        "Art-Net ArtFirmwareMaster packet", HFILL }},
7365
7366
14
    { &hf_artnet_firmware_master_type,
7367
14
      { "Type",
7368
14
        "artnet.firmware_master.type",
7369
14
        FT_UINT8, BASE_HEX, VALS(artnet_firmware_master_type_vals), 0x0,
7370
14
        "Number of Ports", HFILL }},
7371
7372
14
    { &hf_artnet_firmware_master_block_id,
7373
14
      { "Block ID",
7374
14
        "artnet.firmware_master.block_id",
7375
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
7376
14
        NULL, HFILL }},
7377
7378
14
    { &hf_artnet_firmware_master_length,
7379
14
      { "Length",
7380
14
        "artnet.firmware_master.length",
7381
14
        FT_UINT32, BASE_DEC, NULL, 0x0,
7382
14
        NULL, HFILL }},
7383
7384
14
    { &hf_artnet_firmware_master_data,
7385
14
      { "data",
7386
14
        "artnet.firmware_master.data",
7387
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
7388
14
        NULL, HFILL }},
7389
7390
    /* ArtFirmwareReply */
7391
7392
14
    { &hf_artnet_firmware_reply,
7393
14
      { "ArtFirmwareReply packet",
7394
14
        "artnet.firmware_reply",
7395
14
        FT_NONE, BASE_NONE, NULL, 0,
7396
14
        "Art-Net ArtFirmwareReply packet", HFILL }},
7397
7398
14
    { &hf_artnet_firmware_reply_type,
7399
14
      { "Type",
7400
14
        "artnet.firmware_reply.type",
7401
14
        FT_UINT8, BASE_HEX, VALS(artnet_firmware_reply_type_vals), 0x0,
7402
14
        "Number of Ports", HFILL }},
7403
7404
    /* ArtVideoSetup */
7405
7406
14
    { &hf_artnet_video_setup_control,
7407
14
      { "control",
7408
14
        "artnet.video_setup.control",
7409
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7410
14
        NULL, HFILL }},
7411
7412
14
    { &hf_artnet_video_setup_font_height,
7413
14
      { "Font Height",
7414
14
        "artnet.video_setup.font_height",
7415
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
7416
14
        NULL, HFILL }},
7417
7418
14
    { &hf_artnet_video_setup_first_font,
7419
14
      { "First Font",
7420
14
        "artnet.video_setup.first_font",
7421
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
7422
14
        NULL, HFILL }},
7423
7424
14
    { &hf_artnet_video_setup_last_font,
7425
14
      { "Last Font",
7426
14
        "artnet.video_setup.last_font",
7427
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
7428
14
        NULL, HFILL }},
7429
7430
14
    { &hf_artnet_video_setup_win_font_name,
7431
14
      { "Windows Font Name",
7432
14
        "artnet.video_setup.win_font_name",
7433
14
        FT_STRING, BASE_NONE, NULL, 0x0,
7434
14
        NULL, HFILL }},
7435
7436
14
    { &hf_artnet_video_setup_font_data,
7437
14
      { "Font data",
7438
14
        "artnet.video_setup.font_data",
7439
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
7440
14
        "Font Date", HFILL }},
7441
7442
    /* ArtVideoPalette */
7443
7444
14
    { &hf_artnet_video_palette_colour_red,
7445
14
      { "Colour Red",
7446
14
        "artnet.video_palette.colour_red",
7447
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
7448
14
        NULL, HFILL }},
7449
7450
14
    { &hf_artnet_video_palette_colour_green,
7451
14
      { "Colour Green",
7452
14
        "artnet.video_palette.colour_green",
7453
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
7454
14
        NULL, HFILL }},
7455
7456
14
    { &hf_artnet_video_palette_colour_blue,
7457
14
      { "Colour Blue",
7458
14
        "artnet.video_palette.colour_blue",
7459
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
7460
14
        NULL, HFILL }},
7461
7462
    /* ArtVideoData */
7463
7464
14
    { &hf_artnet_video_data_pos_x,
7465
14
      { "PosX",
7466
14
        "artnet.video_data.pos_x",
7467
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
7468
14
        NULL, HFILL }},
7469
7470
14
    { &hf_artnet_video_data_pos_y,
7471
14
      { "PosY",
7472
14
        "artnet.video_data.pos_y",
7473
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
7474
14
        NULL, HFILL }},
7475
7476
14
    { &hf_artnet_video_data_len_x,
7477
14
      { "LenX",
7478
14
        "artnet.video_data.len_x",
7479
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
7480
14
        NULL, HFILL }},
7481
7482
14
    { &hf_artnet_video_data_len_y,
7483
14
      { "LenY",
7484
14
        "artnet.video_data.len_y",
7485
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
7486
14
        NULL, HFILL }},
7487
7488
14
    { &hf_artnet_video_data_data,
7489
14
      { "Video Data",
7490
14
        "artnet.video_data.data",
7491
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
7492
14
        NULL, HFILL }},
7493
7494
    /* ArtTodRequest */
7495
7496
14
    { &hf_artnet_tod_request,
7497
14
      { "ArtTodRequest packet",
7498
14
        "artnet.tod_request",
7499
14
        FT_NONE, BASE_NONE, NULL, 0,
7500
14
        "Art-Net ArtTodRequest packet", HFILL }},
7501
7502
14
    { &hf_artnet_tod_request_net,
7503
14
      { "Net",
7504
14
        "artnet.tod_request.net",
7505
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7506
14
        NULL, HFILL }},
7507
7508
14
    { &hf_artnet_tod_request_command,
7509
14
      { "Command",
7510
14
        "artnet.tod_request.command",
7511
14
        FT_UINT8, BASE_HEX, VALS(artnet_tod_request_command_vals), 0x0,
7512
14
        NULL, HFILL }},
7513
7514
14
    { &hf_artnet_tod_request_ad_count,
7515
14
      { "Address Count",
7516
14
        "artnet.tod_request.ad_count",
7517
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
7518
14
        NULL, HFILL }},
7519
7520
14
    { &hf_artnet_tod_request_address,
7521
14
      { "Address",
7522
14
        "artnet.tod_request.address",
7523
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
7524
14
        NULL, HFILL }},
7525
7526
    /* ArtTodData */
7527
7528
14
    { &hf_artnet_tod_data,
7529
14
      { "ArtTodData packet",
7530
14
        "artnet.tod_data",
7531
14
        FT_NONE, BASE_NONE, NULL, 0,
7532
14
        "Art-Net ArtTodData packet", HFILL }},
7533
7534
14
    { &hf_artnet_tod_data_rdm_ver,
7535
14
      { "RDM Version",
7536
14
        "artnet.tod_data.rdm_ver",
7537
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7538
14
        NULL, HFILL }},
7539
7540
14
    { &hf_artnet_tod_data_port,
7541
14
      { "Port",
7542
14
        "artnet.tod_data.port",
7543
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
7544
14
        NULL, HFILL }},
7545
7546
14
    { &hf_artnet_tod_data_bind_index,
7547
14
      { "Bind Index",
7548
14
        "artnet.tod_data.bind_index",
7549
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7550
14
        NULL, HFILL }},
7551
7552
14
    { &hf_artnet_tod_data_net,
7553
14
      { "Net",
7554
14
        "artnet.tod_data.net",
7555
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7556
14
        NULL, HFILL }},
7557
7558
14
    { &hf_artnet_tod_data_command_response,
7559
14
      { "Command Response",
7560
14
        "artnet.tod_data.command_response",
7561
14
        FT_UINT8, BASE_HEX, VALS(artnet_tod_data_command_vals), 0x0,
7562
14
        NULL, HFILL }},
7563
7564
14
    { &hf_artnet_tod_data_address,
7565
14
      { "Address",
7566
14
        "artnet.tod_data.address",
7567
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7568
14
        NULL, HFILL }},
7569
7570
14
    { &hf_artnet_tod_data_uid_total,
7571
14
      { "UID Total",
7572
14
        "artnet.tod_data.uid_total",
7573
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
7574
14
        NULL, HFILL }},
7575
7576
14
    { &hf_artnet_tod_data_block_count,
7577
14
      { "Block Count",
7578
14
        "artnet.tod_data.block_count",
7579
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
7580
14
        NULL, HFILL }},
7581
7582
14
    { &hf_artnet_tod_data_uid_count,
7583
14
      { "UID Count",
7584
14
        "artnet.tod_data.uid_count",
7585
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
7586
14
        NULL, HFILL }},
7587
7588
14
    { &hf_artnet_tod_data_tod,
7589
14
      { "TOD",
7590
14
        "artnet.tod_data.tod",
7591
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
7592
14
        NULL, HFILL }},
7593
7594
14
    { &hf_artnet_tod_data_tod_manf,
7595
14
      { "Manufacturer ID",
7596
14
        "artnet.tod_data.tod.manf",
7597
14
        FT_UINT16, BASE_HEX|BASE_EXT_STRING, &dmx_esta_manfid_vals_ext, 0x0,
7598
14
        NULL, HFILL }},
7599
7600
14
    { &hf_artnet_tod_data_tod_dev,
7601
14
      { "Device ID",
7602
14
        "artnet.tod_data.tod.dev",
7603
14
        FT_UINT32, BASE_HEX, NULL, 0x0,
7604
14
        NULL, HFILL }},
7605
7606
    /* ArtTodControl */
7607
7608
14
    { &hf_artnet_tod_control,
7609
14
      { "ArtTodControl packet",
7610
14
        "artnet.tod_control",
7611
14
        FT_NONE, BASE_NONE, NULL, 0,
7612
14
        "Art-Net ArtTodControl packet", HFILL }},
7613
7614
14
    { &hf_artnet_tod_control_net,
7615
14
      { "Net",
7616
14
        "artnet.tod_control.net",
7617
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7618
14
        "Top 7 bits of the port address", HFILL }},
7619
7620
14
    { &hf_artnet_tod_control_command,
7621
14
      { "Command",
7622
14
        "artnet.tod_control.command",
7623
14
        FT_UINT8, BASE_HEX, VALS(artnet_tod_control_command_vals), 0x0,
7624
14
        NULL, HFILL }},
7625
7626
14
    { &hf_artnet_tod_control_address,
7627
14
      { "Address",
7628
14
        "artnet.tod_control.address",
7629
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7630
14
        "Lower byte of the port address", HFILL }},
7631
7632
14
    { &hf_artnet_tod_control_universe,
7633
14
        { "Universe",
7634
14
        "artnet.tod_control.universe",
7635
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
7636
14
        NULL, HFILL }},
7637
7638
    /* ArtRdm */
7639
7640
14
    { &hf_artnet_rdm,
7641
14
      { "ArtRdm packet",
7642
14
        "artnet.rdm",
7643
14
        FT_NONE, BASE_NONE, NULL, 0,
7644
14
        "Art-Net ArtRdm packet", HFILL }},
7645
7646
14
    { &hf_artnet_rdm_command,
7647
14
      { "Command",
7648
14
        "artnet.rdm.command",
7649
14
        FT_UINT8, BASE_HEX, VALS(artnet_rdm_command_vals), 0x0,
7650
14
        NULL, HFILL }},
7651
7652
14
    { &hf_artnet_rdm_address,
7653
14
      { "Address",
7654
14
        "artnet.rdm.address",
7655
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7656
14
        NULL, HFILL }},
7657
7658
14
    { &hf_artnet_rdm_sc,
7659
14
      { "Startcode",
7660
14
        "artnet.rdm.sc",
7661
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7662
14
        NULL, HFILL }},
7663
7664
14
    { &hf_artnet_rdm_rdmver,
7665
14
      { "RDM Version",
7666
14
        "artnet.rdm.rdmver",
7667
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7668
14
        NULL, HFILL }},
7669
7670
14
    { &hf_artnet_rdm_fifo_avail,
7671
14
      { "Transmit Queue Available",
7672
14
        "artnet.rdm.fifo_avail",
7673
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
7674
14
        NULL, HFILL }},
7675
7676
14
    { &hf_artnet_rdm_fifo_max,
7677
14
      { "Transmit Queue Maximum",
7678
14
        "artnet.rdm.fifo_max",
7679
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
7680
14
        NULL, HFILL }},
7681
7682
14
    { &hf_artnet_rdm_net,
7683
14
      { "Address High",
7684
14
        "artnet.rdm.net",
7685
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7686
14
        NULL, HFILL }},
7687
7688
    /* ArtRdmSub */
7689
7690
14
    { &hf_artnet_rdm_sub,
7691
14
      { "ArtRdmSub packet",
7692
14
        "artnet.rdm_sub",
7693
14
        FT_NONE, BASE_NONE, NULL, 0,
7694
14
        "Art-Net ArtRdmSub packet", HFILL }},
7695
7696
14
    { &hf_artnet_rdm_sub_uid,
7697
14
      { "UID",
7698
14
        "artnet.rdm_sub.uid",
7699
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
7700
14
        NULL, HFILL }},
7701
7702
14
    { &hf_artnet_rdm_sub_command_class,
7703
14
      { "Command Class",
7704
14
        "artnet.rdm_sub.command_class",
7705
14
        FT_UINT8, BASE_HEX, VALS(artnet_cc_vals), 0x0,
7706
14
        NULL, HFILL }},
7707
7708
14
    { &hf_artnet_rdm_sub_pid,
7709
14
      { "Parameter ID",
7710
14
        "artnet.rdm_sub.param_id",
7711
14
        FT_UINT16, BASE_HEX | BASE_EXT_STRING, &rdm_param_id_vals_ext, 0x0,
7712
14
        NULL, HFILL }},
7713
7714
14
    { &hf_artnet_rdm_sub_sub_device,
7715
14
      { "Sub Device",
7716
14
        "artnet.rdm_sub.sub_device",
7717
14
        FT_UINT16, BASE_HEX, NULL, 0x0,
7718
14
        NULL, HFILL }},
7719
7720
14
    { &hf_artnet_rdm_sub_sub_count,
7721
14
      { "Sub Count",
7722
14
        "artnet.rdm_sub.sub_count",
7723
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
7724
14
        NULL, HFILL }},
7725
7726
14
    { &hf_artnet_rdm_sub_data,
7727
14
      { "Data",
7728
14
        "artnet.rdm_sub.data",
7729
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
7730
14
        NULL, HFILL }},
7731
7732
    /* ArtIpProg */
7733
7734
14
    { &hf_artnet_ip_prog,
7735
14
      { "ArtIpProg packet",
7736
14
        "artnet.ip_prog",
7737
14
        FT_NONE, BASE_NONE, NULL, 0,
7738
14
        "ArtNET ArtIpProg packet", HFILL }},
7739
7740
14
    { &hf_artnet_ip_prog_command,
7741
14
      { "Command",
7742
14
        "artnet.ip_prog.command",
7743
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7744
14
        NULL, HFILL }},
7745
7746
14
    { &hf_artnet_ip_prog_command_prog_port,
7747
14
      { "Program Port",
7748
14
        "artnet.ip_prog.command_prog_port",
7749
14
        FT_BOOLEAN, 8, NULL, 0x01,
7750
14
        NULL, HFILL }},
7751
7752
14
    { &hf_artnet_ip_prog_command_prog_sm,
7753
14
      { "Program Subnet Mask",
7754
14
        "artnet.ip_prog.command_prog_sm",
7755
14
        FT_BOOLEAN, 8, NULL, 0x02,
7756
14
        NULL, HFILL }},
7757
7758
14
    { &hf_artnet_ip_prog_command_prog_ip,
7759
14
      { "Program IP",
7760
14
        "artnet.ip_prog.command_prog_ip",
7761
14
        FT_BOOLEAN, 8, NULL, 0x04,
7762
14
        NULL, HFILL }},
7763
7764
14
    { &hf_artnet_ip_prog_command_reset,
7765
14
      { "Reset Parameters",
7766
14
        "artnet.ip_prog.command_reset",
7767
14
        FT_BOOLEAN, 8, NULL, 0x08,
7768
14
        NULL, HFILL }},
7769
7770
14
    { &hf_artnet_ip_prog_command_gw,
7771
14
      { "Program Default Gateway",
7772
14
        "artnet.ip_prog.command_prog_gw",
7773
14
        FT_BOOLEAN, 8, NULL, 0x10,
7774
14
        NULL, HFILL }},
7775
7776
14
    { &hf_artnet_ip_prog_command_unused,
7777
14
      { "Unused",
7778
14
        "artnet.ip_prog.command_unused",
7779
14
        FT_UINT8, BASE_HEX, NULL, 0x20,
7780
14
        NULL, HFILL }},
7781
7782
14
    { &hf_artnet_ip_prog_command_dhcp_enable,
7783
14
      { "Enable DHCP",
7784
14
        "artnet.ip_prog.command_dhcp_enable",
7785
14
        FT_BOOLEAN, 8, NULL, 0x40,
7786
14
        NULL, HFILL }},
7787
7788
14
    { &hf_artnet_ip_prog_command_prog_enable,
7789
14
      { "Enable Programming",
7790
14
        "artnet.ip_prog.command_prog_enable",
7791
14
        FT_BOOLEAN, 8, NULL, 0x80,
7792
14
        NULL, HFILL }},
7793
7794
14
    { &hf_artnet_ip_prog_ip,
7795
14
      { "IP Address",
7796
14
        "artnet.ip_prog.ip",
7797
14
        FT_IPv4, BASE_NONE, NULL, 0x0,
7798
14
        NULL, HFILL }},
7799
7800
14
    { &hf_artnet_ip_prog_sm,
7801
14
      { "Subnet Mask",
7802
14
        "artnet.ip_prog.sm",
7803
14
        FT_IPv4, BASE_NONE, NULL, 0x0,
7804
14
        "IP Subnet mask", HFILL }},
7805
7806
14
    { &hf_artnet_ip_prog_port,
7807
14
      { "Port",
7808
14
        "artnet.ip_prog.port",
7809
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
7810
14
        NULL, HFILL }},
7811
7812
14
    { &hf_artnet_ip_prog_gw,
7813
14
      { "Default Gateway",
7814
14
        "artnet.ip_prog.gw",
7815
14
        FT_IPv4, BASE_NONE, NULL, 0x0,
7816
14
        NULL, HFILL }},
7817
7818
7819
    /* ArtIpProgReply */
7820
7821
14
    { &hf_artnet_ip_prog_reply,
7822
14
      { "ArtIpProgReply packet",
7823
14
        "artnet.ip_prog_reply",
7824
14
        FT_NONE, BASE_NONE, NULL, 0,
7825
14
        "Art-Net ArtIpProgReply packet", HFILL }},
7826
7827
14
    { &hf_artnet_ip_prog_reply_ip,
7828
14
      { "IP Address",
7829
14
        "artnet.ip_prog_reply.ip",
7830
14
        FT_IPv4, BASE_NONE, NULL, 0x0,
7831
14
        NULL, HFILL }},
7832
7833
14
    { &hf_artnet_ip_prog_reply_sm,
7834
14
      { "Subnet mask",
7835
14
        "artnet.ip_prog_reply.sm",
7836
14
        FT_IPv4, BASE_NONE, NULL, 0x0,
7837
14
        "IP Subnet mask", HFILL }},
7838
7839
14
    { &hf_artnet_ip_prog_reply_port,
7840
14
      { "Port",
7841
14
        "artnet.ip_prog_reply.port",
7842
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
7843
14
        NULL, HFILL }},
7844
7845
14
    { &hf_artnet_ip_prog_reply_gw,
7846
14
      { "Default Gateway",
7847
14
        "artnet.ip_prog_reply.gw",
7848
14
        FT_IPv4, BASE_NONE, NULL, 0x0,
7849
14
        NULL, HFILL }},
7850
7851
14
    { &hf_artnet_ip_prog_reply_status,
7852
14
      { "Status",
7853
14
        "artnet.ip_prog_reply.status",
7854
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
7855
14
        NULL, HFILL }},
7856
7857
14
    { &hf_artnet_ip_prog_reply_status_unused,
7858
14
      { "Unused",
7859
14
        "artnet.ip_prog_reply.unused",
7860
14
        FT_UINT8, BASE_HEX, NULL, 0xbf,
7861
14
        NULL, HFILL }},
7862
7863
14
    { &hf_artnet_ip_prog_reply_status_dhcp_enable,
7864
14
      { "DHCP Enabled",
7865
14
        "artnet.ip_prog_reply.status_dhcp_enable",
7866
14
        FT_BOOLEAN, 8, NULL, 0x40,
7867
14
        NULL, HFILL }},
7868
7869
    /* ArtPollServerReply */
7870
7871
14
    { &hf_artnet_poll_fp_reply,
7872
14
      { "ArtPollFpReply packet",
7873
14
        "artnet.poll_fp_reply",
7874
14
        FT_NONE, BASE_NONE, NULL, 0,
7875
14
        "Art-Net ArtPollFpReply packet", HFILL }},
7876
7877
    /* ArtDiagData */
7878
7879
14
    { &hf_artnet_diag_data,
7880
14
      { "ArtDiagData packet",
7881
14
        "artnet.diag_data",
7882
14
        FT_NONE, BASE_NONE, NULL, 0,
7883
14
        "Art-Net ArtDiagData packet", HFILL }},
7884
7885
14
    { &hf_artnet_diag_data_priority,
7886
14
      { "Priority",
7887
14
        "artnet.diag_data.priority",
7888
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
7889
14
        NULL, HFILL }},
7890
7891
14
    { &hf_artnet_diag_data_port,
7892
14
      { "Logical port",
7893
14
        "artnet.diag_data.port",
7894
14
        FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
7895
14
        NULL, HFILL }},
7896
7897
14
    { &hf_artnet_diag_data_length,
7898
14
      { "Length",
7899
14
        "artnet.diag_data.length",
7900
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
7901
14
        NULL, HFILL }},
7902
7903
14
    { &hf_artnet_diag_data_data,
7904
14
      { "Data",
7905
14
        "artnet.diag_data.data",
7906
14
        FT_STRINGZ, BASE_NONE, NULL, 0x0,
7907
14
        NULL, HFILL }},
7908
7909
    /* ArtCommand */
7910
7911
14
    { &hf_artnet_command,
7912
14
      { "ArtCommand packet",
7913
14
        "artnet.command",
7914
14
        FT_NONE, BASE_NONE, NULL, 0,
7915
14
        "Art-Net ArtCommand packet", HFILL }},
7916
7917
14
    { &hf_artnet_command_esta_man,
7918
14
      { "ESTA Code",
7919
14
        "artnet.command.esta_man",
7920
14
        FT_UINT16, BASE_HEX|BASE_EXT_STRING, &dmx_esta_manfid_vals_ext, 0x0,
7921
14
        NULL, HFILL }},
7922
7923
14
    { &hf_artnet_command_length,
7924
14
      { "Length",
7925
14
        "artnet.command.length",
7926
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
7927
14
        NULL, HFILL }},
7928
7929
14
    { &hf_artnet_command_data,
7930
14
      { "Data",
7931
14
        "artnet.command_data.data",
7932
14
        FT_STRINGZ, BASE_NONE, NULL, 0x0,
7933
14
        NULL, HFILL }},
7934
7935
    /* ArtDataRequest */
7936
7937
14
    { &hf_artnet_data_request,
7938
14
      { "ArtDataRequest packet",
7939
14
        "artnet.data_request",
7940
14
        FT_NONE, BASE_NONE, NULL, 0,
7941
14
        "Art-Net ArtDataRequest packet", HFILL }},
7942
7943
14
    { &hf_artnet_data_request_esta_man,
7944
14
      { "ESTA Code",
7945
14
        "artnet.data_request.esta_man",
7946
14
        FT_UINT16, BASE_HEX|BASE_EXT_STRING, &dmx_esta_manfid_vals_ext, 0x0,
7947
14
        NULL, HFILL }},
7948
7949
14
    { &hf_artnet_data_request_oem,
7950
14
      { "OEM",
7951
14
        "artnet.data_request.oem",
7952
14
        FT_UINT16, BASE_HEX|BASE_EXT_STRING, &artnet_oem_code_vals_ext, 0x0,
7953
14
        NULL, HFILL }},
7954
7955
14
    { &hf_artnet_data_request_request,
7956
14
      { "Request",
7957
14
        "artnet.data_request.request",
7958
14
        FT_UINT16, BASE_HEX|BASE_RANGE_STRING, RVALS(artnet_data_request_vals), 0x0,
7959
14
        NULL, HFILL }},
7960
7961
14
    { &hf_artnet_data_request_spare,
7962
14
      { "Spare",
7963
14
        "artnet.data_request.spare",
7964
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
7965
14
        NULL, HFILL }},
7966
7967
    /* ArtDataReply */
7968
7969
14
    { &hf_artnet_data_reply,
7970
14
      { "ArtDataReply packet",
7971
14
        "artnet.data_reply",
7972
14
        FT_NONE, BASE_NONE, NULL, 0,
7973
14
        "Art-Net ArtDataReply packet", HFILL }},
7974
7975
14
    { &hf_artnet_data_reply_esta_man,
7976
14
      { "ESTA Code",
7977
14
        "artnet.data_reply.esta_man",
7978
14
        FT_UINT16, BASE_HEX|BASE_EXT_STRING, &dmx_esta_manfid_vals_ext, 0x0,
7979
14
        NULL, HFILL }},
7980
7981
14
    { &hf_artnet_data_reply_oem,
7982
14
      { "OEM",
7983
14
        "artnet.data_reply.oem",
7984
14
        FT_UINT16, BASE_HEX|BASE_EXT_STRING, &artnet_oem_code_vals_ext, 0x0,
7985
14
        NULL, HFILL }},
7986
7987
14
    { &hf_artnet_data_reply_request,
7988
14
      { "Request",
7989
14
        "artnet.data_reply.request",
7990
14
        FT_UINT16, BASE_HEX|BASE_RANGE_STRING, RVALS(artnet_data_request_vals), 0x0,
7991
14
        NULL, HFILL }},
7992
7993
14
    { &hf_artnet_data_reply_payload_length,
7994
14
      { "Payload length",
7995
14
        "artnet.data_reply.payload_length",
7996
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
7997
14
        NULL, HFILL }},
7998
7999
14
    { &hf_artnet_data_reply_payload,
8000
14
      { "Payload",
8001
14
        "artnet.data_reply.payload",
8002
14
        FT_STRINGZ, BASE_NONE, NULL, 0x0,
8003
14
        NULL, HFILL }},
8004
8005
    /* ArtMedia */
8006
14
    { &hf_artnet_media,
8007
14
      { "ArtMedia packet",
8008
14
        "artnet.media",
8009
14
        FT_NONE, BASE_NONE, NULL, 0,
8010
14
        "Art-Net ArtMedia packet", HFILL }},
8011
8012
    /* ArtMediaPatch */
8013
14
    { &hf_artnet_media_patch,
8014
14
      { "ArtMediaPatch packet",
8015
14
        "artnet.media_patch",
8016
14
        FT_NONE, BASE_NONE, NULL, 0,
8017
14
        "Art-Net ArtMediaPatch packet", HFILL }},
8018
8019
    /* ArtMediaControl */
8020
14
    { &hf_artnet_media_control,
8021
14
      { "ArtMediaControl packet",
8022
14
        "artnet.media_control",
8023
14
        FT_NONE, BASE_NONE, NULL, 0,
8024
14
        "Art-Net ArtMediaControl packet", HFILL }},
8025
8026
    /* ArtMediaControlReply */
8027
14
    { &hf_artnet_media_control_reply,
8028
14
      { "ArtMediaControlReply packet",
8029
14
        "artnet.media_control_reply",
8030
14
        FT_NONE, BASE_NONE, NULL, 0,
8031
14
        "Art-Net ArtMediaControlReply packet", HFILL }},
8032
8033
    /* ArtTimeCode */
8034
14
    { &hf_artnet_time_code,
8035
14
      { "ArtTimeCode packet",
8036
14
        "artnet.time_code",
8037
14
        FT_NONE, BASE_NONE, NULL, 0,
8038
14
        "Art-Net ArtTimeCode packet", HFILL }},
8039
8040
14
    { &hf_artnet_time_code_stream_id,
8041
14
      { "Stream ID",
8042
14
        "artnet.time_code.stream_id",
8043
14
        FT_UINT8, BASE_DEC_HEX, NULL, 0,
8044
14
        NULL, HFILL }},
8045
8046
14
    { &hf_artnet_time_code_frames,
8047
14
      { "Frames",
8048
14
        "artnet.time_code.frames",
8049
14
        FT_UINT8, BASE_DEC, NULL, 0,
8050
14
        NULL, HFILL }},
8051
8052
14
    { &hf_artnet_time_code_seconds,
8053
14
      { "Seconds",
8054
14
        "artnet.time_code.seconds",
8055
14
        FT_UINT8, BASE_DEC, NULL, 0,
8056
14
        NULL, HFILL }},
8057
8058
14
    { &hf_artnet_time_code_minutes,
8059
14
      { "Minutes",
8060
14
        "artnet.time_code.minutes",
8061
14
        FT_UINT8, BASE_DEC, NULL, 0,
8062
14
        NULL, HFILL }},
8063
8064
14
    { &hf_artnet_time_code_hours,
8065
14
      { "Hours",
8066
14
        "artnet.time_code.hours",
8067
14
        FT_UINT8, BASE_DEC, NULL, 0,
8068
14
        NULL, HFILL }},
8069
8070
14
    { &hf_artnet_time_code_type,
8071
14
      { "Type",
8072
14
        "artnet.time_code.type",
8073
14
        FT_UINT8, BASE_DEC, VALS(artnet_time_code_vals), 0,
8074
14
        NULL, HFILL }},
8075
8076
    /* ArtTimeSync */
8077
14
    { &hf_artnet_time_sync,
8078
14
      { "ArtTimeSync packet",
8079
14
        "artnet.time_sync",
8080
14
        FT_NONE, BASE_NONE, NULL, 0,
8081
14
        "Art-Net ArtTimeSync packet", HFILL }},
8082
8083
    /* ArtTrigger */
8084
14
    { &hf_artnet_trigger,
8085
14
      { "ArtTrigger packet",
8086
14
        "artnet.trigger",
8087
14
        FT_NONE, BASE_NONE, NULL, 0,
8088
14
        "Art-Net ArtTrigger packet", HFILL }},
8089
8090
14
    { &hf_artnet_trigger_oem,
8091
14
      { "OEM",
8092
14
        "artnet.trigger.oem",
8093
14
        FT_UINT16, BASE_HEX|BASE_EXT_STRING, &artnet_oem_code_vals_ext, 0x0,
8094
14
        NULL, HFILL }},
8095
8096
14
    { &hf_artnet_trigger_key,
8097
14
      { "Key",
8098
14
        "artnet.trigger.key",
8099
14
        FT_UINT8, BASE_HEX_DEC, 0, 0x0,
8100
14
        NULL, HFILL }},
8101
8102
14
    { &hf_artnet_trigger_key_unspecific,
8103
14
      { "Key (unspecific)",
8104
14
        "artnet.trigger.key_unspecific",
8105
14
        FT_UINT8, BASE_HEX, VALS(artnet_trigger_key_vals), 0x0,
8106
14
        "Key (not specific to manufacturer)", HFILL }},
8107
8108
14
    { &hf_artnet_trigger_subkey,
8109
14
      { "SubKey",
8110
14
        "artnet.trigger.subkey",
8111
14
        FT_UINT8, BASE_HEX_DEC, 0, 0x0,
8112
14
        NULL, HFILL }},
8113
8114
14
    { &hf_artnet_trigger_data,
8115
14
      { "Data",
8116
14
        "artnet.trigger.data",
8117
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
8118
14
        NULL, HFILL }},
8119
8120
    /* ArtDirectory */
8121
14
    { &hf_artnet_directory,
8122
14
      { "ArtDirectory packet",
8123
14
        "artnet.directory",
8124
14
        FT_NONE, BASE_NONE, NULL, 0,
8125
14
        "Art-Net ArtDirectory packet", HFILL }},
8126
8127
14
    { &hf_artnet_directory_filler,
8128
14
      { "Filler",
8129
14
        "artnet.directory.filler",
8130
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
8131
14
        NULL, HFILL }},
8132
8133
14
    { &hf_artnet_directory_cmd,
8134
14
      { "Command",
8135
14
        "artnet.directory.cmd",
8136
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
8137
14
        NULL, HFILL }},
8138
8139
14
    { &hf_artnet_directory_file,
8140
14
      { "File Nr.",
8141
14
        "artnet.directory.file",
8142
14
        FT_UINT16, BASE_DEC, NULL, 0x0,
8143
14
        NULL, HFILL }},
8144
8145
    /* ArtDirectoryReply */
8146
14
    { &hf_artnet_directory_reply,
8147
14
      { "ArtDirectoryReply packet",
8148
14
        "artnet.directory_reply",
8149
14
        FT_NONE, BASE_NONE, NULL, 0,
8150
14
        "Art-Net ArtDirectoryReply packet", HFILL }},
8151
8152
14
    { &hf_artnet_directory_reply_filler,
8153
14
      { "Filler",
8154
14
        "artnet.directory_reply.filler",
8155
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
8156
14
        NULL, HFILL }},
8157
8158
14
    { &hf_artnet_directory_reply_flags,
8159
14
      { "Flags",
8160
14
        "artnet.directory_reply.flags",
8161
14
        FT_UINT8, BASE_HEX, NULL, 0x0,
8162
14
        NULL, HFILL }},
8163
8164
14
    { &hf_artnet_directory_reply_file,
8165
14
      { "File",
8166
14
        "artnet.directory_reply.file",
8167
14
        FT_UINT16, BASE_HEX, NULL, 0x0,
8168
14
        NULL, HFILL }},
8169
8170
14
    { &hf_artnet_directory_reply_name,
8171
14
      { "Name",
8172
14
        "artnet.directory_reply.name",
8173
14
        FT_STRING, BASE_NONE, NULL, 0x0,
8174
14
        NULL, HFILL }},
8175
8176
14
    { &hf_artnet_directory_reply_desc,
8177
14
      { "Description",
8178
14
        "artnet.directory_reply.desc",
8179
14
        FT_STRING, BASE_NONE, NULL, 0x0,
8180
14
        NULL, HFILL }},
8181
8182
14
    { &hf_artnet_directory_reply_length,
8183
14
      { "Length",
8184
14
        "artnet.directory_reply.length",
8185
14
        FT_UINT64, BASE_DEC, NULL, 0x0,
8186
14
        NULL, HFILL }},
8187
8188
14
    { &hf_artnet_directory_reply_data,
8189
14
      { "Data",
8190
14
        "artnet.directory_reply.data",
8191
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
8192
14
        NULL, HFILL }},
8193
8194
    /* ArtMacMaster */
8195
14
    { &hf_artnet_mac_master,
8196
14
      { "ArtMacMaster packet",
8197
14
        "artnet.mac_master",
8198
14
        FT_NONE, BASE_NONE, NULL, 0,
8199
14
        "Art-Net ArtMacMaster packet", HFILL }},
8200
8201
    /* ArtMacSlave */
8202
14
    { &hf_artnet_mac_slave,
8203
14
      { "ArtMacSlave packet",
8204
14
        "artnet.mac_slave",
8205
14
        FT_NONE, BASE_NONE, NULL, 0,
8206
14
        "Art-Net ArtMacSlave packet", HFILL }},
8207
8208
    /* ArtFileTnMaster */
8209
14
    { &hf_artnet_file_tn_master,
8210
14
      { "ArtFileTnMaster packet",
8211
14
        "artnet.file_tn_master",
8212
14
        FT_NONE, BASE_NONE, NULL, 0,
8213
14
        "Art-Net ArtFileTnMaster packet", HFILL }},
8214
8215
14
    { &hf_artnet_file_tn_master_filler,
8216
14
      { "Filler",
8217
14
        "artnet.file_tn_master.filler",
8218
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
8219
14
        NULL, HFILL }},
8220
8221
14
    { &hf_artnet_file_tn_master_type,
8222
14
      { "Type",
8223
14
        "artnet.file_tn_master.type",
8224
14
        FT_UINT8, BASE_HEX,  VALS(artnet_file_type_vals), 0x0,
8225
14
        NULL, HFILL }},
8226
8227
14
    { &hf_artnet_file_tn_master_block_id,
8228
14
      { "Block ID",
8229
14
        "artnet.file_tn_master.block_id",
8230
14
        FT_UINT8, BASE_DEC, NULL, 0x0,
8231
14
        NULL, HFILL }},
8232
8233
14
    { &hf_artnet_file_tn_master_length,
8234
14
      { "Length",
8235
14
        "artnet.file_tn_master.length",
8236
14
        FT_UINT32, BASE_DEC, NULL, 0x0,
8237
14
        NULL, HFILL }},
8238
8239
14
    { &hf_artnet_file_tn_master_name,
8240
14
      { "Name",
8241
14
        "artnet.file_tn_master.name",
8242
14
        FT_STRINGZ, BASE_NONE, NULL, 0x0,
8243
14
        NULL, HFILL }},
8244
8245
14
    { &hf_artnet_file_tn_master_checksum,
8246
14
      { "Checksum",
8247
14
        "artnet.file_tn_master.checksum",
8248
14
        FT_UINT16, BASE_HEX, NULL, 0x0,
8249
14
        NULL, HFILL }},
8250
8251
14
    { &hf_artnet_file_tn_master_spare,
8252
14
      { "Spare",
8253
14
        "artnet.file_tn_master.spare",
8254
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
8255
14
        NULL, HFILL }},
8256
8257
14
    { &hf_artnet_file_tn_master_data,
8258
14
      { "Data",
8259
14
        "artnet.file_tn_master.data",
8260
14
        FT_BYTES, BASE_NONE, NULL, 0x0,
8261
14
        NULL, HFILL }},
8262
8263
    /* ArtFileFnMaster */
8264
14
    { &hf_artnet_file_fn_master,
8265
14
      { "ArtFileFnMaster packet",
8266
14
        "artnet.file_fn_master",
8267
14
        FT_NONE, BASE_NONE, NULL, 0,
8268
14
        "Art-Net ArtFileFnMaster packet", HFILL }},
8269
8270
    /* ArtFileFnReply */
8271
14
    { &hf_artnet_file_fn_reply,
8272
14
      { "ArtFileFnReply packet",
8273
14
        "artnet.file_fn_reply",
8274
14
        FT_NONE, BASE_NONE, NULL, 0,
8275
14
        "Art-Net ArtFileFnReply packet", HFILL }}
8276
8277
14
  };
8278
8279
14
  static ei_register_info ei[] = {
8280
14
    { &ei_artnet_poll_reply_bind_ip_without_index,
8281
14
      { "artnet.poll_reply.bind_ip_without_index", PI_MALFORMED, PI_WARN,
8282
14
          "Bind IP address set without bind index", EXPFILL }
8283
14
    },
8284
14
    { &ei_artnet_poll_reply_bind_index_without_ip,
8285
14
      { "artnet.poll_reply.bind_index_without_ip", PI_MALFORMED, PI_WARN,
8286
14
          "Bind index set without bind IP address", EXPFILL }
8287
14
    },
8288
14
    { &ei_artnet_poll_reply_node_report_invalid_format,
8289
14
      { "artnet.poll_reply.node_report_format_invalid", PI_MALFORMED, PI_WARN,
8290
14
          "Node report has invalid format.", EXPFILL }
8291
14
    }
8292
14
  };
8293
8294
14
  static int *ett[] = {
8295
14
    &ett_artnet,
8296
14
    &ett_artnet_header,
8297
14
    &ett_artnet_data,
8298
14
    &ett_artnet_poll_talktome,
8299
14
    &ett_artnet_poll_reply_status,
8300
14
    &ett_artnet_poll_reply_port_info,
8301
14
    &ett_artnet_poll_reply_port_types,
8302
14
    &ett_artnet_poll_reply_good_input,
8303
14
    &ett_artnet_poll_reply_good_input_1,
8304
14
    &ett_artnet_poll_reply_good_input_2,
8305
14
    &ett_artnet_poll_reply_good_input_3,
8306
14
    &ett_artnet_poll_reply_good_input_4,
8307
14
    &ett_artnet_poll_reply_good_output,
8308
14
    &ett_artnet_poll_reply_good_output_1,
8309
14
    &ett_artnet_poll_reply_good_output_2,
8310
14
    &ett_artnet_poll_reply_good_output_3,
8311
14
    &ett_artnet_poll_reply_good_output_4,
8312
14
    &ett_artnet_poll_reply_good_output_b,
8313
14
    &ett_artnet_poll_reply_good_output_b_1,
8314
14
    &ett_artnet_poll_reply_good_output_b_2,
8315
14
    &ett_artnet_poll_reply_good_output_b_3,
8316
14
    &ett_artnet_poll_reply_good_output_b_4,
8317
14
    &ett_artnet_poll_reply_swin,
8318
14
    &ett_artnet_poll_reply_swout,
8319
14
    &ett_artnet_poll_reply_swmacro,
8320
14
    &ett_artnet_poll_reply_swremote,
8321
14
    &ett_artnet_poll_reply_status2,
8322
14
    &ett_artnet_poll_reply_status3,
8323
14
    &ett_artnet_ip_prog_command,
8324
14
    &ett_artnet_ip_prog_reply_status,
8325
14
    &ett_artnet_address_netswitch,
8326
14
    &ett_artnet_address_swin,
8327
14
    &ett_artnet_address_swout,
8328
14
    &ett_artnet_address_subswitch,
8329
14
    &ett_artnet_input_input,
8330
14
    &ett_artnet_input_input_1,
8331
14
    &ett_artnet_input_input_2,
8332
14
    &ett_artnet_input_input_3,
8333
14
    &ett_artnet_input_input_4,
8334
14
    &ett_artnet_nzs_vlc_flags,
8335
14
    &ett_artnet_tod_data_tod
8336
14
  };
8337
8338
14
  proto_artnet = proto_register_protocol("Art-Net", "Art-Net", "artnet");
8339
14
  proto_register_field_array(proto_artnet, hf, array_length(hf));
8340
14
  proto_register_subtree_array(ett, array_length(ett));
8341
8342
14
  expert_artnet = expert_register_protocol(proto_artnet);
8343
14
  expert_register_field_array(expert_artnet, ei, array_length(ei));
8344
8345
14
  artnet_handle  = register_dissector("artnet", dissect_artnet, proto_artnet);
8346
14
}
8347
8348
void
8349
14
proto_reg_handoff_artnet(void) {
8350
14
  dissector_add_for_decode_as_with_preference("udp.port", artnet_handle);
8351
14
  rdm_handle      = find_dissector_add_dependency("rdm", proto_artnet);
8352
14
  dmx_chan_handle = find_dissector_add_dependency("dmx-chan", proto_artnet);
8353
8354
14
  heur_dissector_add("udp", dissect_artnet_heur, "ARTNET over UDP", "artnet_udp", proto_artnet, HEURISTIC_ENABLE);
8355
14
}
8356
8357
/*
8358
 * Editor modelines
8359
 *
8360
 * Local Variables:
8361
 * c-basic-offset: 2
8362
 * tab-width: 8
8363
 * indent-tabs-mode: nil
8364
 * End:
8365
 *
8366
 * ex: set shiftwidth=2 tabstop=8 expandtab:
8367
 * :indentSize=2:tabSize=8:noTabs=true:
8368
 */