#if !defined(__RPI_ARTNET_OP_CODES_H__)
#define __RPI_ARTNET_OP_CODES_H__

/* List of hex values and discriptions of Opcodes */

/* This is an ArtPoll packet, no other data is contained in this UDP packet */
#define OpPoll 0x2000

/* This is an ArtPollReply Packet. It contains device status information. */
#define OpPollReply 0x2100

/* Diagnostics and data logging packet. */
#define OpDiagData 0x2300

/* Used to send text based parameter commands. */
#define OpCommand 0x2400

/* This is an ArtDmx data packet. It contains zero start code DMX512 information for a single
 * Universe. */
#define OpOutput 0x5000

/* This is an ArtDmx data packet. It contains zero start code DMX512 information for a single
 * Universe. */
#define OpDmx 0x5000

/* This is an ArtNzs data packet. It contains non-zero start code (except RDM) DMX512 information
 * for a single Universe. */
#define OpNzs 0x5100

/* This is an ArtAddress packet. It contains remote programming information for a Node. */
#define OpAddress 0x6000

/* This is an ArtInput packet. It contains enable – disable data for DMX inputs. */
#define OpInput 0x7000

/* This is an ArtTodRequest packet. It is used to request a Table of Devices (ToD) for RDM
 * discovery. */
#define OpTodRequest 0x8000

/* This is an ArtTodData packet. It is used to send a Table of Devices (ToD) for RDM discovery. */
#define OpTodData 0x8100

/* This is an ArtTodControl packet. It is used to send RDM discovery control messages. */
#define OpTodControl 0x8200

/* This is an ArtRdm packet. It is used to send all non discovery RDM messages. */
#define OpRdm 0x8300

/* This is an ArtRdmSub packet. It is used to send compressed, RDM Sub-Device data. */
#define OpRdmSub 0x8400

/* This is an ArtVideoSetup packet. It contains video screen setup information for nodes that
 * implement the extended video features. */
#define OpVideoSetup 0xa010

/* This is an ArtVideoPalette packet. It contains colour palette setup information for nodes that
 * implement the extended video features. */
#define OpVideoPalette 0xa020

/* This is an ArtVideoData packet. It contains display data for nodes that implement the extended
 * video features. */
#define OpVideoData 0xa040

/* This is an ArtMacMaster packet. It is used to program the Node’s MAC address, Oem device type and
 * ESTA manufacturer code. This is for factory initialisation of a Node. It is not to be used by
 * applications. */
#define OpMacMaster 0xf000

/* This is an ArtMacSlave packet. It is returned by the node to acknowledge receipt of an
 * ArtMacMaster packet. */
#define OpMacSlave 0xf100

/* This is an ArtFirmwareMaster packet. It is used to upload new firmware or firmware extensions to
 * the Node. */
#define OpFirmwareMaster 0xf200

/* This is an ArtFirmwareReply packet. It is returned by the node to acknowledge receipt of an
 * ArtFirmwareMaster packet or ArtFileTnMaster packet. */
#define OpFirmwareReply 0xf300

/* Uploads user file to node. */
#define OpFileTnMaster 0xf400

/* Downloads user file from node. */
#define OpFileFnMaster 0xf500

/* Node acknowledge for downloads. */
#define OpFileFnReply 0xf600

/* This is an ArtIpProg packet. It is used to reprogramme the IP, Mask and Port address of the Node.
 */
#define OpIpProg 0xf800

/* This is an ArtIpProgReply packet. It is returned by the node to acknowledge receipt of an
 * ArtIpProg packet. */
#define OpIpProgReply 0xf900

/* This is an ArtMedia packet. It is Unicast by a Media Server and acted upon by a Controller. */
#define OpMedia 0x9000

/* This is an ArtMediaPatch packet. It is Unicast by a Controller and acted upon by a Media Server.
 */
#define OpMediaPatch 0x9100

/* This is an ArtMediaControl packet. It is Unicast by a Controller and acted upon by a Media
 * Server. */
#define OpMediaControl 0x9200

/* This is an ArtMediaControlReply packet. It is Unicast by a Media Server and acted upon by a
 * Controller. */
#define OpMediaContrlReply 0x9300

/* This is an ArtTimeCode packet. It is used to transport time code over the network. */
#define OpTimeCode 0x9700

/* Used to synchronise real time date and clock */
#define OpTimeSync 0x9800

/* Used to send trigger macros */
#define OpTrigger 0x9900

/* Requests a node's file list */
#define OpDirectory 0x9a00

/* Replies to OpDirectory with file list */
#define OpDirectoryReply 0x9b00

#endif // __RPI_ARTNET_OP_CODES_H__