Host CPU SDK Programmer's Guide AUD MAN Programmers V1.0
AUD-MAN-Host_CPU_SDK_Programmers_Guide-v1.0
User Manual: Pdf
Open the PDF directly: View PDF .
Page Count: 77
Download | ![]() |
Open PDF In Browser | View PDF |
Host CPU SDK Programmer's Guide For Brooklyn II Firmware v3.10.x | Ultimo Application Software v3.10.x | Host CPU SDK v2.0.x Document version: 1.0 Document name: AUD-MAN-Host_CPU_SDK_Programmers_Guide-v1.0.pdf Published: 6th July 2016 Please see Audinate OEM Home for change history. Feedback: if you would like to suggest improvements to this information, please feel free to email us at documentation@audinate.com. Host CPU SDK Programmer's Guide Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. Audinate®, the Audinate logo and Dante are trademarks of Audinate Pty Ltd. All other trademarks are the property of their respective owners. Audinate products are protected by one or more of US Patents 7747725, 8005939, 7978696, 8171152, and other patents pending or issued. See www.audinate.com/patents. Legal Notice and Disclaimer Audinate retains ownership of all intellectual property in this document. The information and materials presented in this document are provided as an information source only. While effort has been made to ensure the accuracy and completeness of the information, no guarantee is given nor responsibility taken by Audinate for errors or omissions in the data. Audinate is not liable for any loss or damage that may be suffered or incurred in any way as a result of acting on information in this document. The information is provided solely on the basis that readers will be responsible for making their own assessment, and are advised to verify all relevant representation, statements and information with their own professional advisers. Software Licensing Notice Audinate distributes products which are covered by Audinate license agreements and third-party license agreements. For further information and to access copies of each of these licenses, please visit our website: www.audinate.com/software-licensing-notice CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -1- Host CPU SDK Programmer's Guide Contacts Audinate Pty Ltd Audinate Inc Level 1, 458 Wattle Street 1732 NW Quimby Street Ultimo NSW 2007 Suite 215 Australia Portland, OR 97209 Tel. +61 2 8090 1000 USA Tel: +1.503.224.2998 Postal address Fax. +1.503.360.1155 Audinate Pty Ltd info@audinate.com PO Box 855 www.audinate.com Broadway NSW 2007 Australia European Office Asia Pacific Office Audinate Ltd Audinate Limited Suite 303 Suite 1106-08, 11/F Tai Yau Building Brighton Media Centre No 181 Johnston Road Friese-Greene House Wanchai, Hong Kong 15-17 Middle St 澳迪耐特有限公司 Brighton, BN1 1AL 香 港 灣 仔 莊 士 敦 道 181號 United Kingdom 大 有 大 廈 11樓 1106-8室 Tel. +44 (0) 1273 921695 Tel. +(852)-3588 0030 +(852)-3588 0031 Fax. +(852)-2975 8042 CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -2- Host CPU SDK Programmer's Guide Contents Copyright 1 European Office 2 Asia Pacific Office 2 About Audinate 8 About Dante 8 Introduction Hardware Requirements of a Host CPU Communicating with a Brooklyn II 9 10 10 SPI 10 UART 11 Communicating with an Ultimo 11 SPI 12 UART 13 Host CPU Architecture 15 Key Features and Specifications 15 Host CPU and Brooklyn II 15 Framing and Padding Mechanisms 16 Flow Control Mechanisms 16 Interaction Diagrams 16 Resynchronization Mechanisms 17 Host CPU and Ultimo 17 Framing and Padding Mechanisms 17 Flow Control Mechanisms 18 Interaction Diagrams 18 Normal Acknowledgement 18 Error Timeout (No Response from Host CPU) 19 Error Timeout (No Response from Ultimo) 20 Timing and Resynchronization Mechanisms 21 Packet Bridge 22 Key Features and Specifications 22 Overall Architecture 22 ConMon Packet Bridge 23 UDP Sockets Packet Bridge 24 Comparison of ConMon and UDP Sockets Packet Bridge 24 Communication with a Dante Device Packet Bridge Endpoint from PC / Brooklyn II Devices 24 Message Format 24 ConMon Mode 24 CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -3- Host CPU SDK Programmer's Guide UDP Mode Discovering Packet Bridge Endpoints 25 25 ConMon Mode 25 UDP Mode 25 ConMon Control Channel Usage 26 ConMon Status Channel Usage 26 ConMon Vendor Broadcast Channel Usage 26 Example Use Cases and Recommended ConMon Configurations 27 Host CPU Firmware Update by a PC Controller 27 Control of Host CPU by a Brooklyn II Based Controller 27 Status Reporting by Host CPU to PC Controllers 28 Host CPU to Host CPU Communications 28 Recommendations for OEM Protocol Design 29 Managing Device State 29 Self-Description 29 Bulk State Summary 29 Small State Changes 29 Groups of Changes 29 Stateless Protocol Design 30 Avoiding Synchronization 30 Byte Ordering 30 Byte Alignment 30 Detecting Message Loss 30 Power-On Events 31 Interaction Diagrams 31 Transmit a Packet from a Host CPU to the Network [Successful] 31 Brooklyn II 31 Ultimo 32 Transmit a Packet from a Host CPU to the Network [Failure – No Network Connection] 32 Brooklyn II 32 Ultimo 33 Transmit a Packet from a Host CPU to the Network [Failure – Message Malformed] 33 Brooklyn II 33 Ultimo 34 Receive a Packet from the Network and Forward to Host CPU [Successful] 34 Brooklyn II 34 Ultimo 35 Dante Device Configuration Dante Events 35 36 Interaction Diagrams 36 Ultimo Configuration 36 CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -4- Host CPU SDK Programmer's Guide Dante Device Protocol 37 Message Classes 37 Protocol Functionality 37 Basic Information 37 Manufacturer Information 37 Upgrade 38 Erase Configuration 38 Device Reboot 38 Identity 38 Device Lock Information 38 AES67 (Brooklyn II Only) 39 VLANs 39 Metering (Brooklyn II Only) 39 UART Configuration (Brooklyn II Only) 39 Network 39 Clocking / PTP 40 Audio 40 Routing 40 Interaction Diagrams Sending a DDP Command/Query Message and Receiving a DDP Response Message 41 41 Brooklyn II 42 Ultimo 43 Receiving a DDP Event Message 44 Brooklyn II 44 Ultimo 44 Sending a Command to a Locked Dante Device 45 Brooklyn II 45 Ultimo 46 Protocol Messages 46 Device Basic Information 46 Device Manufacturer Information 47 Device Upgrade 47 Device Erase Configuration 47 Device Reboot 48 Device Identity 48 Device Identify 48 Device GPIO 49 Device Switch LED 49 Device Lock/Unlock 49 Device Switch Redundancy 49 Device UART Configuration 50 CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -5- Host CPU SDK Programmer's Guide Device AES67 50 Device VLAN Configuration 50 Device Meter Configuration 51 Network Basic 51 Network Configuration 51 Clock Basic Legacy 52 Clock Basic 2 52 Clock Configuration 52 Clock Pull-up 53 Audio Basic 53 Audio Sample Rate Configuration 53 Audio Encoding Configuration 54 Audio Interface 54 Audio Signal Presence Configuration 54 Audio Signal Presence Data 55 Routing Basic 55 Routing Ready 55 Routing Performance Configuration 56 Routing Rx Channel Configuration State 56 Routing Tx Channel Configuration State 56 Routing Rx Channel Status 57 Routing Rx Flow Configuration State 57 Routing Tx Flow Configuration State 57 Routing Rx Flow Status 58 Routing Rx Channel Label Set 58 Routing Tx Channel Label Set 59 Routing RX Subscribe 59 Routing RX Unsubscribe 59 Routing Multicast TX Flow Configuration 59 Routing Flow Delete 60 Host CPU SDK Package 61 Data Types 61 Provided Functionality 61 Porting the Host CPU SDK Package 63 Project Setup 63 Implement the RX Timer interface 63 Implement the TX Timer interface 64 Implement the Host CPU Transport Interface 64 BHIP Host CPU SPI Interface 64 UHIP Host CPU SPI Interface 64 Add required RX message handling 64 CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -6- Host CPU SDK Programmer's Guide Add required TX message handling 64 Modify aud_platform.h 65 Modify or Implement a Main Loop 65 Host CPU SDK Library API Functions 65 UHIP ConMon Packet Bridge Functions 65 BHIP ConMon Packet Bridge Functions 65 UHIP UDP Packet Bridge Functions 65 BHIP UDP Packet Bridge Functions 65 Dante Events Functions 66 Dante Device Protocol (DDP) Functions 66 Getting Started 72 Index 74 CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -7- Host CPU SDK Programmer's Guide About Audinate Founded in 2006, Audinate revolutionizes how AV systems are connected so customers can thrive in a networked world. Audinate's Dante audio networking technology has been adopted by the professional audio industry's leading manufacturers. Dante is used extensively for live performance events, commercial installations, broadcast, recording and production, and communications systems. Audinate offices are located in US, United Kingdom, Hong Kong and Australia. About Dante Dante audio networking utilizes standard IP networks to transmit high-quality, uncompressed audio with near-zero latency. It's the most economical, versatile, and easy-to-use audio networking solution, and is scalable from simple installations to large-capacity networks running thousands of audio channels. Dante can replace multiple analog or multicore cables with a single affordable Ethernet cable to transmit highquality multi-channel audio safely and reliably. With Dante software, the network can be easily expanded and reconfigured with just a few mouse clicks. Dante is the audio networking choice of nearly all professional audio manufacturers, with hundreds of Dante-enabled audio products now available. For more information, please visit the Audinate website at www.audinate.com. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -8- Host CPU SDK Programmer's Guide Introduction This document is intended for OEMs that wish to interface an external processor to a Dante device module via a serial peripheral. The external processor can configure and monitor Dante over the serial interface as well as utilise the network interface of the Dante module to bridge network traffic to the external processor. The supported Dante devices are the Brooklyn II and Ultimo, and the supported serial interfaces are SPI and UART. This document refers only to the built in functionality that can be enabled on the modules via the capability file - on the Brooklyn II it is also possible to communicate with a host CPU by implementing a custom OEM application running from the user partition. The external processor which communicates with a Dante device over a serial link is referred to as the Host CPU throughout this document. High level physical information about interfacing a Dante device to a Host CPU is provided in Hardware Requirements of a Host CPU. Additional information about physical I/O interfaces on the Dante device should be obtained from the Brooklyn II Technical Datasheet and Ultimo Technical Datasheet. An overall description about the software features of the Brooklyn II is available in the Brooklyn II Programmer’s Guide, and the software features of the Ultimo are available in the Ultimo Programmer’s Guide. The Host CPU SDK package provides a messaging API for communication between the Dante device and the Host CPU. The SDK implements functionality to process and prepare messages that are received or sent from the Dante device. Information on the Host CPU SDK package is described in Host CPU SDK Package. The Brooklyn II Host Interface Protocol (BHIP) is used to carry the following types of messages: n Packet Bridge (PB) messages n Dante Device Protocol (DDP) messages The Ultimo Host Interface Protocol (UHIP) is used to carry the following types of messages: n Packet Bridge (PB) messages n Dante Device Protocol (DDP) messages n Dante Event messages The Packet Bridge, Dante Event and DDP protocols are described in Packet Bridge, Dante Events and Dante Device Protocol. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -9- Host CPU SDK Programmer's Guide Hardware Requirements of a Host CPU This section describes the hardware requirements of a host CPU that communicates with a Brooklyn II or Ultimo Dante device. Communicating with a Brooklyn II Regardless of the communication method, 3.3V I/O signalling levels must be used. For in-depth information about the Brooklyn II I/O pins, signal timing, signal characteristics and pin muxes please refer to the relevant sections of the Brooklyn II Technical Datasheet. SPI Communication using SPI requires one SPI master peripheral on the Host CPU. This SPI peripheral will connect to the SPI slave on the Brooklyn II SPI slave interface. Data over SPI is transferred as full duplex. Please refer to the Brooklyn II Programmer’s Guidefor more information about the SPI slave protocol. Figure 1 shows the hardware connection to realize communication over SPI between the Brooklyn II and the Host CPU. There is a pin called DATA_AVAILABLE on the Brooklyn II which the SPI slave module uses to signal the availability of data to be transmitted to an external SPI master. A Host CPU must utilise the DATA_AVAILABLE line to as an interrupt source or poll it on a periodic basis. The Host CPU must have 3x 1508 bytes of RAM to send one maximum sized frame and receive up to two maximum sized frames. Figure 1 - Host CPU and Brooklyn II SPI communication Table 1 shows the pin mapping between the Brooklyn II SPI slave and Host CPU SPI master. Table 1 - Brooklyn II SPI slave and host CPU SPI master pins Brooklyn II Pin (SPI Slave) Host CPU Pin (SPI Master) Usage SPI_CLK_A / SPI CLK SPI Clock SPI_CLK_B CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -10- Host CPU SDK Programmer's Guide Brooklyn II Pin (SPI Slave) Host CPU Pin (SPI Master) Usage SPI_MOSI_A / SPI_ MOSI_B SPI MOSI SPI Master Out / Slave In SPI_MISO_A / SPI_ MISO_B SPI MISO SPI Master In / Slave Out DATA_AVAILABLE (GPIO) GPIO Data is available to be read from Brooklyn II SPI slave UART A single UART peripheral is required to communicate with the Brooklyn II over a UART serial link. Data transferred over UART is full duplex. Figure 2 illustrates the hardware connections required to support communication over UART between the Brooklyn II and the host CPU. The Host CPU must have 2x 1500 bytes of RAM to send and receive one max sized frame. Figure 2 - Host CPU and Brooklyn II UART communication Table 2 shows the pin mapping between the Brooklyn II UART and Host CPU UART. Table 2 - Brooklyn II and host CPU UART pins Brooklyn II Pin (UART) Host CPU Pin (UART) Usage CMOS_RS_232_RX_A / CMOS_RS_ 232_RX_B UART TX Brooklyn-II receive, host transmit CMOS_RS_232_TX_A / CMOS_RS_ 232_TX_B UART RX Brooklyn-II transmit, host receive Communicating with an Ultimo Regardless of the serial peripheral used for the communication the following requirements should be satisfied: CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -11- Host CPU SDK Programmer's Guide n 3.3V I/O signalling levels n 2x 576 bytes RAM to send and receive a max sized packet over the serial link SPI Communication using SPI requires two SPI peripherals. One peripheral is a SPI master and the other peripheral is the SPI slave. The SPI master on Ultimo must be connected to the SPI slave port on the host CPU. This unidirectional / simplex interface is used to send UHIP packets to / from the host CPU. The SPI slave on Ultimo must be connected to the SPI master port on the Host CPU. This unidirectional / simplex interface is used to send UHIP packets to / from the host CPU. Figure 3 illustrates the hardware connections needed to support the SPI interface between Ultimo and a host CPU. Figure 3 - Host CPU and Ultimo SPI communication Table 3 - Ultimo SPI master and host CPU SPI slave pins Ultimo Pin (SPI Master) Host CPU Pin (SPI Slave) Usage SPI_CLK_A SPI CLK SPI Clock SPI_MOSI_A SPI MOSI SPI Master Out / Slave In SPI_MISO_A SPI MISO SPI Master In / Slave Out nSPI_SEL0_A or nSPI_SEL1_A or nSPI_SEL2_A or nSPI_SEL3_A SPI SELECT SPI chip select CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -12- Host CPU SDK Programmer's Guide Table 4 - Ultimo SPI slave and host CPU SPI master pins Ultimo Pin (SPI Slave) Host CPU Pin (SPI Master) Usage SPI_CLK_B SPI CLK SPI Clock SPI_MOSI_B SPI MOSI SPI Master Out / Slave In SPI_MISO_B SPI MISO SPI Master In / Slave Out nSPI_SEL_B SPI SELECT SPI chip select For more details about the I/O pins, I/O characteristics, SPI master timing characteristics, SPI slave timing characteristics and supported SPI modes, please see the relevant sections of the Ultimo Technical Datasheet. UART Serial communication between an Ultimo and the host CPU requires one UART port. The UART on Ultimo is a bi-directional full duplex interface used for sending UHIP datagrams to / from the host CPU. Figure 4 illustrates the hardware connections needed to support the UART interface between Ultimo and the host CPU. Figure 4 - Host CPU and Ultimo UART communication Table 5 - Ultimo and host CPU UART pins Ultimo Pin (UART) Host CPU Pin (UART) Usage UART_RX_B UART TX Ultimo receive, host transmit UART_TX_B UART RX Ultimo transmit, host receive CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -13- Host CPU SDK Programmer's Guide Ultimo Pin (UART) Host CPU Pin (UART) Usage UART_CTS_B [optional] UART RTS Ultimo input / host output H = disable transmission from Ultimo L = enable transmission from Ultimo UART_RTS_B [optional] UART CTS Ultimo output / host input H = disable transmission on host L = enable transmission on host CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -14- Host CPU SDK Programmer's Guide Host CPU Architecture This section describes the architecture of the Host CPU and Dante device communication using a serial peripheral. All functionality described in this section is fully implemented in the provided Host CPU SDK. The information contained in this section is for informational purposes only, and does not need to be implemented by the OEM. The data transferred over the serial link is encoded using Consistent Overhead Byte stuffing (COBS) which provides packet framing. Framing ensures reliable resynchronisation after transmission or reception errors. For more details about COBS see Cheshire, S; Baker, M, Sept 1997, “Consistent Overhead Byte Stuffing”, ACM All multi-byte values used for the protocols between the Host CPU and Brooklyn II or Ultimo are represented in network byte order. For example a 32-bit integer containing the value 305,419,896 (decimal) or 0x12345678 (hex) is sent as [0x12] followed by [0x34] followed by [0x56] followed by [0x78]. Key Features and Specifications A very high level overview of the key features and specifications for serial communication between a Host CPU and a Brooklyn II or Ultimo is provided in Table 6. The protocols mentioned in Table 6 are discussed in the remaining sections of this document. Table 6 - Host CPU to Dante device communication key features and specifications Feature Brooklyn II Ultimo Supported serial peripherals SPI slave, UART SPI master + SPI slave, UART Supported high level protocols DDP, Packet Bridge DDP, Dante Events, Packet Bridge Transport protocol BHIP UHIP Maximum serial frame size 1508 bytes (SPI), 1500 bytes (UART) 576 bytes Maximum transport protocol payload size 1484 bytes (for DDP), 1448 (for Packet Bridge) 500 bytes Host CPU and Brooklyn II Brooklyn II Host Interface Protocol (BHIP) is the protocol used to transport Dante Device Protocol (DDP) and Packet Bridge. The BHIP protocol does not have acknowledgements. Therefore, it will be up to clients of the DDP and/or Packet Bridge on the Host CPU retry if a response message was not received. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -15- Host CPU SDK Programmer's Guide In typical deployments both DDP and Packet bridge will operate over the same serial peripheral. However it is also possible to configure the Brooklyn II to use one peripheral (e.g. SPI) for DDP and the other peripheral (e.g. UART) for the packet bridge. The intended use case for this is to connect two Host CPUs. Framing and Padding Mechanisms The framing of data differs when using SPI or UART. Figure 5 shows a single frame transferred on a SPI serial link and Figure 6 shows a single frame transferred on a UART serial link. The pipe number in the SPI header used for BHIP data is 0. Pipes 0-7 are reserved for Audinate use. If you wish to multiplex non-BHIP data over the SPI interface at the same time you may use any of pipes 8-15. Figure 5 - Serial frame transferred between a host CPU and Brooklyn II over SPI The frame transferred over a UART serial link does not use any padding so a Host CPU must not make any assumptions on the size of the frame. Figure 6 - Serial frame transferred between a host CPU and Brooklyn II over UART Flow Control Mechanisms Flow control is not provided by the BHIP protocol. However, the SPI slave on the Brooklyn II can be configured to provide flow control at the hardware level. The SPI slave on the Brooklyn II provides a flow control GPIO pin. This GPIO pin can be enabled via the module configuration tool. The flow control pin is asserted when the SPI slave buffer reaches the high water mark. For more information about the flow control pin please refer to the Brooklyn II Programmer’s Guide. For UART mode there is no hardware level flow control from the Brooklyn II device. Interaction Diagrams Figure 7 shows a normal flow for BHIP regardless of the protocol that is being transported and the serial peripheral used for the communication. This interaction also applies when the Host CPU transmits a BHIP packet to the Brooklyn II. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -16- Host CPU SDK Programmer's Guide Figure 7 - Normal flow behaviour for BHIP Resynchronization Mechanisms In rare situations where synchronization is lost on the receive path, the method to regain synchronization is based on the serial peripheral used for communication. In SPI mode, data is transferred in data blocks which are a multiple of 4 bytes (minimum is 4 bytes). In addition, the SPI slave protocol has 4 sentinel bytes which always occur at the start of a 4 byte data block. Therefore, these sentinel bytes are used to re-acquire synchronisation. If UART is used as the serial peripheral, data reception does not assume a data block size. Therefore, the COBS delimiters [0x00] are sufficient to regain synchronization. Host CPU and Ultimo Ultimo Host Interface Protocol (UHIP) is the protocol that is used to transport Dante Device Protocol (DDP), Dante Events and Packet Bridge packets. Each UHIP packet is encoded using Consistent Overhead Byte Stuffing (COBS). The UHIP protocol uses acknowledgements for flow control. When the Ultimo is configured to communicate with a Host CPU all protocols transported by UHIP can only be transferred over a single serial peripheral. The Ultimo does not have the capability to transfer different UHIP protocols over different serial peripherals. Framing and Padding Mechanisms COBS is used to frame packets transferred over a serial link. A single frame sent over the serial link is shown in Figure 8. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -17- Host CPU SDK Programmer's Guide Figure 8 - Serial frame transferred between a host CPU and an Ultimo over SPI or UART All packets transferred over the serial link are padded with [0xFF] bytes so that the packet size is a multiple of 32 bytes. This simplifies DMA driver implementations on the Ultimo and the host CPUs. Flow Control Mechanisms UHIP utilises a Stop-and-Wait mechanism for flow control on a per message basis. After a message has been sent, the sender must wait until either of the following occurs before sending another message: 1. A PROTOCOL_CONTROL acknowledgment has been received 2. No response is received for 1 second Important: Due to limited RAM on the Ultimo, if a host CPU does not process UHIP messages quickly enough, UHIP messages will be dropped. As such it is important that received UHIP messages are processed in a timely manner. Interaction Diagrams Normal Acknowledgement The interaction diagram shown in Figure 9 depicts a normal flow control behaviour when packets are acknowledged. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -18- Host CPU SDK Programmer's Guide Figure 9 - UHIP normal acknowledgement Error Timeout (No Response from Host CPU) The interaction diagram shown in Figure 10 depicts what occurs if a packet is transmitted from the Ultimo to the host CPU, but no acknowledgment is received. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -19- Host CPU SDK Programmer's Guide Figure 10 - UHIP timeout error due to no response from host CPU Error Timeout (No Response from Ultimo) The interaction diagram shown in Figure 11 depicts what occurs if a packet is transmitted from the host CPU to the Ultimo, but no acknowledgment is received. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -20- Host CPU SDK Programmer's Guide Figure 11 - UHIP timeout error due to no response from the Ultimo Timing and Resynchronization Mechanisms UHIP uses the following strategies to regain synchronisation after communication errors. n Receive Path for COBS encoded, 32 byte padded packets: 1. Start/reset a 1 second timer every time a 32 byte chunk is received 2. If a full COBS encoded message is received, stop the timer 3. If the timer expires (1 second without receiving the end of a COBS packet), reset the receive buffer and/or DMA controller n Transmit Path for COBS encoded, 32 byte padded packets: 1. When transmitting a UHIP message to the Host CPU. 2. Start a 1 second timer when the message is transmitted. 3. If the timer expires without a response (i.e. PROTOCOL_CONTROL) packet being received. 4. Wait another 1 second before sending another UHIP message to the Host CPU. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -21- Host CPU SDK Programmer's Guide Packet Bridge The Packet Bridge protocol allows a Host CPU to send and receive UDP/ IP network datagrams via the IP stack on a Brooklyn II or Ultimo device. This functionality will allow OEMs to quickly and easily implement custom network control, status and monitoring functionality on their Brooklyn II or Ultimo reference design product and PC software. The Packet Bridge should only be used for applications that have a low throughput and packet rate. Key Features and Specifications Table 7 summarizes the main features related to Packet Bridge for the Brooklyn II and the Ultimo. Table 7 - Packet Bridge key features for Brooklyn II and Ultimo Feature Brooklyn II Ultimo Supported modes Dante Control and Monitoring (ConMon: control and status) or standard UDP sockets Dante Control and Monitoring (ConMon: control, status, and vendor broadcast) or standard UDP sockets Maximum message payload 1448 bytes 500 bytes ConMon Unicast subscriptions limit 16 5 Overall Architecture The Packet Bridge uses UDP/IP messages to communicate across the network. The Packet Bridge can be configured in one of two modes – ConMon or UDP sockets; and can be enabled on the Dante device using the module configuration tool. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -22- Host CPU SDK Programmer's Guide Figure 12 - Packet Bridge architecture applicable for a Brooklyn II or an Ultimo ConMon Packet Bridge When the Packet Bridge is configured in ConMon mode, packets are forwarded to devices as vendor specific ConMon messages. ConMon includes infrastructure that enables discovery of Brooklyn II or Ultimo Packet Bridge endpoints. Please refer to the Dante API Programmer’s Guide for further details on ConMon. The Packet Bridge endpoint forwards received messages to the Host CPU. Responses from the Host CPU forward back to the sending device. The Ultimo or Brooklyn II running the Packet Bridge cannot initiate messages. The Ultimo supports a limited method for transmitting message from the Packet Bridge endpoint using multicast. Equivalent functionality is not implemented Brooklyn II, however it is possible to build a custom user application that is able to communicate using unicast messages with up to 16 devices. Please refer to the Brooklyn II Programmer’s Guide on information how to build a custom user application. The ConMon vendor ID in the ConMon header is the manufacturer-specific ID assigned to each OEM by Audinate. The ConMon packet bridge filters incoming packets based on this vendor ID to ensure that only the messages tagged with the specific vendor ID are sent over the packet bridge. If more precise filtering is required it is the responsibility of the vendor to implement this on the host processor. The Brooklyn II Packet Bridge supports the control channel and status channel. The Ultimo Packet Bridge supports the control channel, status channel and vendor broadcast channel. n Control Channel – unicast receive channel. This channel is used to send control or query packets from a PC or Brooklyn-II based controller to a Brooklyn II or Ultimo packet bridge endpoint. n Status Channel – multicast and unicast transmit channel. This channel is used to send status messages or query responses from a Brooklyn II or Ultimo packet bridge endpoint to PC or Brooklyn II based controllers. Remote devices subscribed to the Ultimo may receive messages via unicast. The maximum number of active unicast subscriptions supported by Brooklyn II is 16 whereas Ultimo is 5. n Vendor Broadcast Channel – multicast transmit channel from the Ultimo, optional multicast receive channel from a remote device. This channel is typically used for Ultimo-to-Ultimo communication in small networks that don’t have a larger “controller” device such as a Brooklyn-II or PC. Note: Unicast Ultimo to Ultimo ConMon Packet Bridge messages are not supported. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -23- Host CPU SDK Programmer's Guide UDP Sockets Packet Bridge When the Packet Bridge is configured in UDP mode, the Dante device allows for UDP datagrams to be sent/received by the Host CPU via the Packet Bridge. Note: If the Brooklyn II is configured in redundant mode, Packet Bridge in UDP sockets mode only operates over the primary interface. The following types of channels are supported in UDP socket Packet Bridge mode: n Unicast Channel – unicast receive and transmit channel. This channel is typically used to send control or query packets from a PC or Brooklyn-II based controller to Brooklyn II or Ultimo Packet Bridge endpoints. It is also used to send status messages or query responses from a Brooklyn II or Ultimo packet bridge endpoint to PC or Brooklyn-II based controllers. n Multicast Channel - multicast transmit channel from the Brooklyn II or Ultimo Packet Bridge endpoint and optional multicast receive channel from a remote device. This channel should only be used in small networks. It is preferable to use a Brooklyn II or PC running a custom application as a controller. Comparison of ConMon and UDP Sockets Packet Bridge Table 8 - Comparing Features of ConMon and UDP Sockets Packet Bridge Modes Feature ConMon Packet Bridge UDP Sockets Packet Bridge Device Discovery Automatic Manual (OEM implemented) Handling IP address change Automatic Manual (OEM implemented) Packet Filtering Automatic Manual (OEM implemented) Unicast Subscriptions Yes (up to 16 for Brooklyn II and up to 5 for Ultimo) Manual (OEM implemented) Redundancy (Brooklyn II only) Yes No Communication with a Dante Device Packet Bridge Endpoint from PC / Brooklyn II Devices Message Format ConMon Mode All the messages to and from the Brooklyn II or Ultimo Packet Bridge endpoint are encapsulated in a ConMon message header. The ConMon vendor ID will be set to the manufacturer specific vendor ID CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -24- Host CPU SDK Programmer's Guide assigned by Audinate. The Dante device Packet Bridge endpoint compares this ID to the manufacturer ID set in the capability and forwards the packets over the packet bridge if they match. UDP Mode When configured in UDP Packet Bridge mode, it is the responsibility of the OEM to add any necessary OEM message headers to the UDP payload. In UDP mode, the Brooklyn II or Ultimo Packet Bridge endpoint forwards the received UDP payload over the serial interface to the Host CPU. Messages received from the Host CPU are sent onto the network as UDP packets. Discovering Packet Bridge Endpoints ConMon Mode A ConMon “controller” application on a Brooklyn II or PC can use the ConMon Manufacturer Versions message to identify devices matching a particular vendor ID. The Dante browsing API provides the following additional device information: n Vendor ID - vid, allows the controlling application to select a device matching a particular vendor n Vendor broadcast address – vba, The multicast address used by the device for the Vendor Broadcast Channel. The vendor broadcast address is only applicable for Ultimo Packet Bridge endpoints Any ConMon messages with a matching Vendor ID will be forwarded over the Brooklyn II or Ultimo Packet Bridge. Audinate Vendor ID tagged messages will be handled by Dante application threads inside Brooklyn II or Ultimo as usual. UDP Mode When the Packet Bridge is configured in UDP mode, mDNS is used to discover the UDP Packet Bridge endpoints. The Brooklyn II and Ultimo provides configurable SRV, TXT and PTR mDNS records for use by the OEM and it is configurable via the module configuration tool. A mDNS advert consists of a PTR, SRV, and TXT record. It allows for a “named service” on a particular port to be advertised and discovered. It consists of: n PTR or Pointer Record - to enables the discovery of the “named” service on a particular device n SRV or Service Record - to provide information about the “host” and “port” for the service n TXT or Text Record - to provide additional information about the service In the module configuration tool the OEM can set the “service name” and “port” as well as multiple keys in the Text Record. n The “service name” is the OEM assigned name for the UDP packet bridge service n The “port” is the OEM assigned listening UDP port for the unicast channel n The “text keys” are extra information that the OEM wants to provide about the UDP packet bridge service on the Ultimo. For example it may be useful to provide protocol versions, multicast IP addresses or multicast port information in the Text Record For example: n UDP Packet Bridge service is called “oem-pb” n The Unicast receive socket is bound to port “39030” n The Multicast receive socket is bound to 239.254.50.123 / port 9000 n The protocol version is 1.2.3.4 n An Ultimo device is used and it is called Ultimo-0712b3 This will result in the following mDNS records: CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -25- Host CPU SDK Programmer's Guide n Ultimo-0712b3._oempb._udp.local. 120 IN SRV 0 0 39030 Ultimo-0712b3.local. n _oempb._udp.local. 4500 IN PTR Ultimo-0712b3._oempb._udp.local. n Ultimo-0712b3._oembp._udp.local. 4500 IN TXT ver=1.2.3.4 mc_ ip=239.254.50.123 mc_port=9000 Please refer to Dante API Programmer’s Guide – DNS Service Discovery API section for information on how to discover the packet bridge endpoint via mDNS. For further information about mDNS please refer to http://www.multicastdns.org/ For an Apple implementation of mDNS that is commonly used on both OS X and Windows please refer to http://www.apple.com/au/support/bonjour/ ConMon Control Channel Usage The Control Channel carries control and query messages inbound to the Host CPU . The controller application on a PC or Brooklyn- II can use this channel to send control or query messages to the host CPU via the Packet Bridge. The Brooklyn II or Ultimo packet bridge endpoint cannot send messages using this channel. ConMon Status Channel Usage The Status Channel is designed for one-to-many communication. This channel type is always a multicast channel, with support for unicast transmission to a limited list of subscribed devices. Any message received from the Packet Bridge tagged as a ConMon status message is multicast on the Status Channel. A PC can use a ‘global’ subscription to receive multicast status messages. A Brooklyn II controller can use unicast to subscribe to up to 32 devices. A Brooklyn II packet bridge endpoint can support up to 16 remote “controllers” subscribed via unicast. An Ultimo endpoint can support 5 remote subscribers. ConMon Vendor Broadcast Channel Usage The Vendor Broadcast channel is typically used for Ultimo-to-Ultimo communication. It is designed for one-to-many communication. This channel type is enabled/configured locally on each device that transmits or receives on this channel. The ConMon advertisement can be used to discover devices with a specified vendor ID and Vendor Broadcast Channel multicast address. This channel can be used to both transmit and receive messages. Care must be taken by the vendor to select multicast IP addresses that are not currently assigned. The range recommended by Audinate is 239.254.0.0/16. For more information about multicast IP address assignment see RFC5771 & RFC2365. Important: When opening a multicast receive channel on an Ultimo, all packets sent by other devices will be received and must be processed by both the Ultimo and the host processor. Care must be taken in designing the transmission side of the vendor protocol (specifically the number of devices and how often they transmit) not to overwhelm or overburden the Ultimo and host processor with receive packets! Note: Because multicast is a one-to-many communication medium, it is the responsibility of the vendor to add information identifying the sender to the transmitted packets. A MAC address or other unique device identifier may be appropriate. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -26- Host CPU SDK Programmer's Guide Example Use Cases and Recommended ConMon Configurations This section describes Packet Bridge use cases and appropriate ConMon channel type selection. Host CPU Firmware Update by a PC Controller Figure 13 shows a PC controller being used to update the firmware on the host processor via the Packet Bridge. Figure 13 - Host CPU firmware upgrade by a PC controller In this example, the PC controller sends vendor defined firmware update packets via the unicast ConMon Control Channel to the Brooklyn II or Ultimo which are forwarded to the host CPU according to the packet bridge configuration. The host CPU (via the Brooklyn II or Ultimo) then sends back status update and response messages via the multicast ConMon Status Channel to the PC. Control of Host CPU by a Brooklyn II Based Controller Figure 14 shows a Brooklyn II based controller sending commands and/or queries to the host processor via Packet Bridge. Figure 14 - Host CPU controlled by Brooklyn II controller In this example, the Brooklyn II based controller sends control packets via the unicast Control Channel to the Ultimo, which is configured as a Packet Bridge to the host CPU. The Brooklyn II based controller also CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -27- Host CPU SDK Programmer's Guide opens a remote subscription to the Status Channel on the Ultimo, which causes Ultimo to transmit unicast ConMon Status Channel messages from the host CPU to the Brooklyn II controller. The host CPU sends status messages and responses to the Brooklyn II controller via the Ultimo Packet Bridge and the unicast subscription to the Status Channel. Status Reporting by Host CPU to PC Controllers Figure 15 shows multiple host CPUs reporting status information to one or more PC controllers via Packet Bridge. Figure 15 - Host CPU status reporting to PC controllers In this example, all Ultimo and host CPUs transmit status information packets via the multicast Status Channel to one or more PC based controller applications. The host CPU on each Ultimo device sends periodic and/or event driven status messages via Packet Bridge to the multicast ConMon Status Channel. The PC controller listens to these status messages using the multicast ConMon Status Channel. Host CPU to Host CPU Communications Note: This use case can only be realized with Ultimo packet bridge endpoints. Figure 16 shows inter-device communication between host processors connected via Packet Bridge. Figure 16 - Host CPU to host CPU communications In this example, each Ultimo has been configured with the same Vendor Broadcast Channel using the same multicast IP address, which is used to transmit messages from the host CPU to the network. Each Ultimo has also been configured to receive messages for the Packet Bridge from the Vendor Broadcast Channel. This allows the Vendor Broadcast Channel to be bridged from the network to the host CPU. Hosts CPUs can transmit messages to other host CPUs via the Ultimo Packet Bridge and the multicast ConMon Vendor Broadcast Channel. Ultimo devices configured with the same vendor allocated multicast address will receive messages. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -28- Host CPU SDK Programmer's Guide Important: When opening a multicast receive channel on an Ultimo, all packets sent by other devices will be received and must be processed by both the Ultimo and the host CPU. Care must be taken in designing the transmission side of the vendor protocol (specifically the number of devices and how often they transmit) not to overwhelm or overburden the Ultimo and host CPU with receive packets! Important: Because multicast is a one-to-many communication medium, it is the responsibility of the vendor to add information identifying the sender to the transmitted packets. A MAC address or other unique device identifier may be appropriate. Recommendations for OEM Protocol Design Managing Device State A device designed to control other devices typically needs to track the state of the devices it manages. To track device state, a controller subscribes to Status Channels and receives messages as parameters change or events occur. There may also be multiple controllers for a given device. How should device state and control messages be structured? The paragraphs below discuss various possibilities open to the designer. Self-Description Devices that can describe their own features and capabilities can greatly simplify the task of writing general-purpose control software. The simplest approach is to define a single message type supported by all devices that describes the capabilities of the device. Controllers can use this information to determine which behaviours and features are applicable for the device. For example, the ConMon VERSIONS_STATUS message provides a range of information about the types of ConMon messages available for a given Dante device. Bulk State Summary When a controller starts up, it does not know the state of the devices it is controlling. In combination with a control channel message to trigger it, a bulk state summary message provides an efficient means of bootstrapping the controller. When sent on the Status Channel, all other controllers will receive this message. The bulk state summary may also be used as a control message for restoring a device to a particular configuration. Small State Changes Generally, a human can adjust one or only a small number of parameters at once. Therefore, support for small, single parameter state change messages appears sensible. Groups of Changes Metering information is a classic example of status information that ought to be collected together for transmission. Meter values change periodically and grouping several meter values together will result in more efficient network transmission. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -29- Host CPU SDK Programmer's Guide If several configuration or status parameters always change together, they should be transmitted together. If parameters are transmitted in different messages, there is the chance that one of the messages will not be successfully received. Grouping parameters together results in a set of parameter changes to be received or lost as a group. Stateless Protocol Design In general, control or monitoring messages should be understandable on their own. If message can be interpreted properly without additional state, there is no burden on the receiver to track any extra state. As an example, a control or status message that indicates: PhantomPower = On or PreampGain = -17.1dB Is better than a message like: PhantomPower = Toggle or PreampGain += 5.6dB If the second style of message is retransmitted, or received more than once because of redundancy, there is potential confusion about the final device state, which can only be resolved by accurately tracking every change. Stateless messages have a well-defined meaning or result. With care, a stateless protocol design can be robust against retransmission and loss without requiring complex state tracking. Avoiding Synchronization A network containing devices that periodically send messages can self-synchronise, resulting in large periodic bursts of network traffic. Consider randomly jittering the time at which periodic messages are sent using the techniques described in Sally Floyd, Van Jacobson, “The synchronization of periodic routing messages in Computer Networks”, 1994, IEEE/ACM Transactions on Networking. Byte Ordering Processors can arrange bytes in memory in different ways and this must be considered when copying data (e.g. a 32 bit integer) into a buffer for transmission. A control protocol should clearly define the transmission order of bytes to avoid confusion. It is strongly recommended that you use “network byte order” or “big endian” transmission, as it is commonly used for protocols. Byte Alignment Processing misaligned data is inefficient on some processors and not supported on others. Ensuring that all 16 and 32 bit message fields are correctly aligned with the start of the message makes it easier to process a message once it has been copied into application memory. Detecting Message Loss Incrementing sequence numbers on status and metering messages allow the receiver to tell if it has missed a message. In the case of metering, missing the odd message may be unimportant. For Status Channels, recovery may involve provoking the transmission of a full or partial state summary. A periodic, low rate, keepalive status message can be used to bound the time taken to detect that an infrequent status messages is missing. A keepalive may also be useful if a controller is required to detect device disappearance in a timely manner - however, but note that the regular transmission of keepalives consumes network bandwidth. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -30- Host CPU SDK Programmer's Guide Control messages may be acknowledged using a status message. Again, stateless protocol design pays off, as an acknowledgement may be lost even when the original message has been successfully received. Power-On Events Protocol designers must carefully consider the behaviour of many devices powering on at the same (or nearly the same) time. If several control devices start up at the same time and all want to acquire the current state for the devices on the network, this can result in a flood of network traffic. To mitigate the effects of power-on events, consider the following strategies. Note: It is assumed there are vendor defined control messages describing the “device state summary” and for triggering its transmission on the Status Channel. Status channel receiver behaviour: 1. Subscribe to Status Channel for the device. 2. Randomly wait (e.g. uniformly distributed between 0 and 3 seconds) whilst receiving Status Channel messages. If a full “device state summary” is received before timeout, another device requested the same information, and there is no need to request it again. If a full “device state summary” is not received before timeout, send a control message to trigger the “device state summary” transmission on the Status Channel. Status channel sender behaviour: n Rate limit “status summary” messages. Is sending more than one per second worthwhile? Interaction Diagrams Transmit a Packet from a Host CPU to the Network [Successful] Brooklyn II Figure 17 - BHIP ConMon/UDP packet bridge transmit success CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -31- Host CPU SDK Programmer's Guide Ultimo Figure 18 - UHIP ConMon/UDP packet bridge transmit success Transmit a Packet from a Host CPU to the Network [Failure – No Network Connection] Brooklyn II Figure 19 - BHIP ConMon/UDP packet bridge transmit failure due to no network connection CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -32- Host CPU SDK Programmer's Guide Ultimo Figure 20 - UHIP ConMon/UDP packet bridge no network connection transmit failure Transmit a Packet from a Host CPU to the Network [Failure – Message Malformed] Brooklyn II Figure 21 - BHIP ConMon/UDP packet bridge transmit failure due to malformed message CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -33- Host CPU SDK Programmer's Guide Ultimo Figure 22 - UHIP ConMon/UDP packet bridge transmit failure due to malformed message Receive a Packet from the Network and Forward to Host CPU [Successful] Brooklyn II Figure 23 - BHIP ConMon/UDP packet bridge receive success CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -34- Host CPU SDK Programmer's Guide Ultimo Figure 24 - UHIP ConMon/UDP packet bridge receive success Dante Device Configuration SPI and UART port parameters including baud rates, clock polarity, etc. for Brooklyn II and Ultimo are configured using the module configuration tool. Configuration and selection of the ConMon channels used with Packet Bridge or UDP sockets is also specified using the module configuration tool. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -35- Host CPU SDK Programmer's Guide Dante Events The Dante Event messages are sent by the Ultimo processor when the sample rate or pull up is changed. The Brooklyn II does not support Dante Events. These events are used to inform the Host CPU that the codec(s) need to be reconfigured for the new sample rate / pull-up. For more information see Sample Rate Changes and Pull-Up / Down Changes sections in the Ultimo Programmer’s Guide. Interaction Diagrams Figure 25 - Dante Events sent as a result of sample rate or pullup changes Ultimo Configuration To enable Dante Events on the Ultimo the following options should be configured in module config web Host CPU section: 1. Host CPU checkbox should be ticked 2. Mode should be selected as either set to SPI or UART. Based on the selection the serial peripheral should be configured as appropriate CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -36- Host CPU SDK Programmer's Guide Dante Device Protocol The Dante Device Protocol (DDP) allows a Host CPU to control and monitor the Dante functionality on a Dante device. This functionality will allow OEMs to provide Dante status information or control the Dante device via a user interface locally on the device. Message Classes There are several classes of messages used by the Dante Device Protocol: 1. Request messages - Request messages are sent to a Dante device and are used to either query for information from a device or to control or change parameters on a device. Every request message has: n A message opcode n A sequence number used to identify the request. This must be a non-zero value. The reply to this request will always use the sequence number from the request. This allows for a request/response pair to be linked. 2. Response messages - Response messages are sent from a Dante device in response to a request. Every response message has: n An opcode that is the same as the corresponding request opcode n A non-zero sequence number matching the request sequence number n A status that indicates whether the request was successful or an error occurred 3. Event messages - Event messages are pushed or sent gratuitously from a Dante device when there is a change in status. Event messages are identical in format and opcode to a response event with the following key differences: n A zero sequence number Protocol Functionality This section provides a summary of the functionality provided by Dante Device Protocol. Basic Information Mechanisms: Query/Response & Asynchronous Notification (on power on) n Model ID n Model ID string n Software Version & Build n Firmware Version & Build n Bootloader Version & Build n Configuration & Memory Error flags (capability partition error / user partition error / configuration store error) Manufacturer Information Mechanisms: Query/Response & Asynchronous Notification (on power on) CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -37- Host CPU SDK Programmer's Guide n Manufacturer ID n Manufacturer Name n Model ID n Model Name n Model Version n Software Version & Build n Firmware Version & Build n Bootloader Version & Build n Configuration & Memory Error flags (capability partition error / user partition error / configuration store error) Upgrade Mechanisms: Command/Response & Asynchronous Notification (after an upgrade) n Start an upgrade via TFTP n Start an upgrade via XMODEM via SPI/UART (Ultimo only) n Receive progress notifications after the upgrade has completed Erase Configuration Mechanisms: Command/Response & Asynchronous Notification (during an erase) n Erase to factory defaults n Erase to factory defaults but keep static IP information n Receive a notification when a erase is externally triggered Device Reboot Mechanisms: Command/Response & Asynchronous Notification (before reboot) n Trigger a software reset n Receive a notification when a reboot is externally triggered Identity Mechanisms: Command/Query/Response & Asynchronous Notification (on name changes) n Device ID & Process ID (uniquely identify a device) n Default name n Friendly name n Advertised name n Change the friendly name of the device n Receive a notification on a name change Device Lock Information Mechanisms: Query/Response & Asynchronous Notification (on lock/unlock state changes) CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -38- Host CPU SDK Programmer's Guide n Device lock/unlock state n Receive a notification on lock/unlock state change AES67 (Brooklyn II Only) Mechanisms: Command/Query/Response & Asynchronous Notification (on AES67 enable/disable changes) n Current AES67 enable/disable state n Enable/disable AES67 n Receive a notification on enable/disable changes VLANs Mechanisms: Command/Query/Response & Asynchronous Notification (on VLAN configuration selection changes) n Simple mode: Change between switched and redundant modes (Brooklyn II Only) n Custom VLANs: Change between different custom VLAN configurations set in the device capability n Receive a notification on selecting a different VLAN configuration Metering (Brooklyn II Only) Mechanisms: Command/Query/Response & Asynchronous Notification (on metering update rate changes) n Current metering update rate n Set the metering update rate to 10Hz or 30Hz n Receive a notification on changes to the metering rate UART Configuration (Brooklyn II Only) Mechanisms: Command/Query/Response & Asynchronous Notification (on changes to configuration changes to a UART port) n Current configuration parameters of a UART port: number of bits, stop bits, parity, baud rate, mode of the port, and whether the port can be configured n Configure parameters (number of bits, stop bits, parity, and baud rate) of a UART port only if the port is marked as configurable in the capability n Receive a notification on configuration changes to a UART port Network Mechanisms: Command/Query/Response & Asynchronous Notification (on network changes) n MAC address n Current Interface state (Link up or down) n Current Link Speed n Current IP Address / Netmask / Gateway n Set Static IP Address / Netmask / Gateway n Receive a notification if the network state changes CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -39- Host CPU SDK Programmer's Guide Clocking / PTP Mechanisms: Command/Query/Response & Asynchronous Notification (on clock changes) n Current clock state (master / slave / etc) n Current mute state n Current preferred state n Current frequency offset n PTP logging state n Current pullup n Current subdomain n Set preferred state n Enable / disable PTP logging n Set clock pullup mode & subdomain n Enable / disable unicast delay requests for PTP v1 and/or v2 protocols n Enable / disable multicast n Enable / disable slave only n Enable / disable PTP ports n Enable / disable PTP v1 and v2 protocols n Receive a notification on any clock state changes Audio Mechanisms: Command/Query/Response & Asynchronous Notification (on audio changes) n Default sample rate n Current & Reboot sample rate n Supported sample rates n Default encoding n Current & Reboot encoding n Supported encodings n Number of RX channels n Number of TX channels n Change audio sample rate n Change audio encoding n TDM interface information (Brooklyn II only) n Receive a notification on any audio sample rate change n Receive a notification on any audio encoding change n Receive signal presence over DDP (Ultimo only) Routing Mechanisms: Command/Query/Response & Asynchronous Notification (on changes) CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -40- Host CPU SDK Programmer's Guide n Routing ready state n Max Rx & Tx flows n Max Rx & Tx slots per flow n Min & max latency n Min & max FPP n Rx port range n Channel Labels n Set latency & FPP n RX & TX Flow state and status n RX & TX Channel state and status n RX & TX channel labels n Subscribe & unsubscribe RX channels n Create and delete multicast TX flows n Set channel labels n Receive a notification on any flow state or status change n Receive a notification on any channel state or status change n Receive a notification on any channel label change Interaction Diagrams Sending a DDP Command/Query Message and Receiving a DDP Response Message Interaction diagrams shown in Figure 26 and Figure 27 depict a Host CPU sending a DDP control message either to change (i.e. control) parameters on the Brooklyn II and Ultimo or to send a query for the current state of the Brooklyn II and Ultimo respectively. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -41- Host CPU SDK Programmer's Guide Brooklyn II Figure 26 - BHIP DDP command/query response CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -42- Host CPU SDK Programmer's Guide Ultimo Figure 27 - UHIP DDP command/query response message CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -43- Host CPU SDK Programmer's Guide Receiving a DDP Event Message Brooklyn II Figure 28 - BHIP DDP event message Ultimo Figure 29 - UHIP DDP event message CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -44- Host CPU SDK Programmer's Guide Sending a Command to a Locked Dante Device Brooklyn II Figure 30 - BHIP DDP command send to a locked Brooklyn II CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -45- Host CPU SDK Programmer's Guide Ultimo Figure 31 - UHIP DDP command send to a locked Ultimo Protocol Messages Device Basic Information Summary: Provides basic device information such as model, software version and device errors. Mechanisms: Query → Response; Asynchronous Notification (on power on) CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -46- Host CPU SDK Programmer's Guide Message OPCODE / Type: DDP_DEVICE_GENERAL API Functions: Device General Provided Functionality / Information: n Model ID n Model ID string n Software Version & Build n Firmware Version & Build n Bootloader Version & Build n Configuration & Memory Error flags (capability partition error / user partition error / configuration store error) Device Manufacturer Information Summary: Provides manufacturer specified device information such as name, model, model versions, etc. Mechanisms: Query → Response; Asynchronous Notification (on power on) Message OPCODE / Type: DDP_DEVICE_MANUFACTURER API Functions: Device Manufacturer Provided Functionality / Information: n Manufacturer ID n Manufacturer Name n Model ID & Model ID string n Model Name n Model Version n Software Version & Build n Firmware Version & Build n Model Version & Model Version string Device Upgrade Summary: Start a TFTP or XMODEM upgrade, and receive notifications when an upgrade is externally started Note: XMODEM via SPI/UART is only supported by the Ultimo Mechanisms: Query/Command → Response; Asynchronous Notification (after an upgrade) Message OPCODE / Type: DDP_DEVICE_UPRGADE API Functions: Device Upgrade Provided Functionality / Information: n Start an upgrade via TFTP or XMODEM via SPI/UART n Receive progress notifications after the upgrade has started Device Erase Configuration Summary: Erase all Dante configuration data from the device; receive a notification if an erase occurs CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -47- Host CPU SDK Programmer's Guide Mechanisms: Command → Response; Asynchronous Notification (during an erase) Message OPCODE / Type: DDP_DEVICE_ERASE_CONFIG API Functions: Device Erase Configuration Provided Functionality / Information: n Erase to factory defaults n Erase to factory defaults but keep static IP information n Receive a notification when a erase is externally triggered Device Reboot Summary: Reboot the device; receive a notification if a reboot is triggered Mechanisms: Command → Response; Asynchronous Notification (before reboot) Message OPCODE / Type: DDP_DEVICE_REBOOT API Functions: Device Reboot Provided Functionality / Information: n Trigger a software reset n Receive a notification when a reboot is externally triggered before the reboot occurs Device Identity Summary: Provide friendly / default name and unique ID information; notify on name changes Mechanisms: Query/Command → Response; Asynchronous Notification (on name changes) Message OPCODE / Type: DDP_DEVICE_IDENTITY API Functions: Device Identity Provided Functionality / Information: n Device ID & Process ID (uniquely identify a device) n Default name n Friendly name n Advertised name n Change the friendly name of the device n Receive a notification on a name change Device Identify Summary: Notify when a ConMon identify message is received Mechanisms: Asynchronous Notification (on ConMon identify messages) Message OPCODE / Type: DDP_DEVICE_IDENTIFY API Functions: Device Identify Provided Functionality / Information: n Receive a notification when the device receives a valid ConMon identify message CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -48- Host CPU SDK Programmer's Guide Device GPIO Note: This message is only supported on Ultimo Summary: Control and Query for GPIO state; notify on GPIO state changes Mechanisms: Query/Command → Response; Asynchronous Notification (on GPIO state changes) Message OPCODE / Type: DDP_DEVICE_GPIO API Functions: Device GPIO Provided Functionality / Information: n Control GPIO output state n Query for current GPIO input or output state n Receive a notification when the GPIO input or output value changes Device Switch LED Note: This message is only supported on Ultimo Summary: Control the external RJ45 LEDs on a switch Mechanisms: Command → Response Message OPCODE / Type: DDP_DEVICE_SWITCH_LED API Functions: Device Switch LED Provided Functionality / Information: n Control LEDs on the switch Device Lock/Unlock Summary: Provide the current lock/unlock state of the device; notify on device lock state changes Mechanisms: Query → Response; Asynchronous Notification (on device lock state changes) Message OPCODE / Type: DDP_DEVICE_TYPE_LOCK_UNLOCK API Functions: Device Lock/Unlock Provided Functionality / Information: n Query current lock/unlock state n Receive a notification when the lock/unlock state changes Device Switch Redundancy Note: This message is only supported on Brooklyn II Summary: Change the device VLAN configuration between switched and redundant; notify on switch redundancy changes Mechanisms: Query/Command → Response; Asynchronous Notification (on switch redundancy changes) Message OPCODE / Type: DDP_DEVICE_TYPE_SWITCH_REDUNDANCY API Functions: Device Switch Redundancy CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -49- Host CPU SDK Programmer's Guide Provided Functionality / Information: n Change between switched and redundant VLAN configurations n Receive a notification when the current VLAN configuration has been changed to a different state Device UART Configuration Note: This message is only supported on Brooklyn II Summary: Change UART port parameters for UART ports designated as being configurable in the capability Mechanisms: Query/Command → Response; Asynchronous Notification (on UART port parameter changes) Message OPCODE / Type: DDP_DEVICE_TYPE_UART_CONFIG API Functions: Device UART Configuration Provided Functionality / Information: n Change the number of bits, stop bits, baud rate, parity of a UART which can be configured n Receive a notification when the configuration of a configurable UART port changes Device AES67 Note: This message is only supported on Brooklyn II Summary: Enable / disable AES67 Mechanisms: Query/Command → Response; Asynchronous Notification (on AES67 enable/disable state changes) Message OPCODE / Type: DDP_DEVICE_TYPE_AES67 API Functions: Device AES67 Provided Functionality / Information: n Change the AES67 enable/disable state n Receive a notification when the AES67 enable/disable state changes Device VLAN Configuration Summary: Change between one of the custom VLAN configurations set in the capability Mechanisms: Query/Command → Response; Asynchronous Notification (on changing to a different VLAN configuration) Message OPCODE / Type: DDP_DEVICE_TYPE_VLAN_CONFIG API Functions: Device VLAN Configuration Provided Functionality / Information: n Switch between up to four different custom VLAN configurations set in the capability n Receive a notification when changing to a different VLAN configuration CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -50- Host CPU SDK Programmer's Guide Device Meter Configuration Note: This message is only supported on Brooklyn II Summary: Change the metering update rate Mechanisms: Query/Command → Response; Asynchronous Notification (on metering update rate changes) Message OPCODE / Type: DDP_DEVICE_TYPE_METER_CONFIG API Functions: Device Meter Configuration Provided Functionality / Information: n Change the metering update rate between 10Hz and 30Hz n Receive a notification when the meter update rate has changed Network Basic Summary: Provides basic network information such as MAC address, IP address, link state, etc. Notify on network state changes Mechanisms: Query → Response; Asynchronous Notification (on network state changes) Message OPCODE / Type: DDP_DEVICE_NETWORK_BASIC API Functions: Network Basic Provided Functionality / Information: n MAC address n Current Interface state (Link up or down) n Current Link Speed n Current IP Address / Netmask / Gateway n Receive a notification if the network state changes Network Configuration Summary: Change between DHCP+LinkLocal and static IP address configurations. Notify on network configuration changes Mechanisms: Command/Query → Response; Asynchronous Notification (on network configuration changes) Message OPCODE / Type: DDP_DEVICE_NETWORK_CONFIG API Functions: Network Configuration Provided Functionality / Information: n Change between static IP address and DHCP / LinkLocal network configurations n Set a static IP Address / Netmask / Gateway address configuration n Receive a notification if the network configuration changes CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -51- Host CPU SDK Programmer's Guide Clock Basic Legacy Note: This message was formerly known as Clock Basic and it is now deprecated. It is only supported on Ultimo. Please migrate to Clock Basic 2. Summary: Provides legacy basic clock information; notify on clock state changes Mechanisms: Query → Response; Asynchronous Notification (on clock changes) Message OPCODE / Type: DDP_CLOCK_BASIC API Functions: Clock Basic Legacy Provided Functionality / Information: n Current clock state (master / slave / etc) n Current mute state n Current preferred state n Current frequency offset n Receive a notification on any clock state changes Clock Basic 2 Summary: Provides basic clock information; notify on clock state changes Mechanisms: Query → Response; Asynchronous Notification (on clocking related changes) Message OPCODE / Type: DDP_CLOCK_TYPE_BASIC2 API Functions: Clock Basic 2 Provided Functionality / Information: n Current clock source n Current clock state (master / slave / etc) n Current mute state n Current preferred state n Current frequency offset n Current external word clock state n Current clock stratum n Current UUID, master UUID, and grand master UUID n PTP port parameters such as ID, protocol supported, state, unicast/multicast, interface index n Receive a notification on any clock state changes Clock Configuration Summary: Change clock configuration parameters; notify on clock configuration changes Mechanisms: Command/Query → Response; Asynchronous Notification (on clock configuration changes) Message OPCODE / Type: DDP_CLOCK_CONFIG API Functions: Clock Configuration Provided Functionality / Information: CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -52- Host CPU SDK Programmer's Guide n PTP logging state n Set preferred state n Enable / disable PTP logging n Enable / disable unicast delay requests for PTP v1 and/or v2 protocols n Enable / disable multicast n Enable / disable slave only n Enable / disable PTP V1 and V2 protocols n Enable / disable PTP ports n Receive a notification on any clock configuration changes Clock Pull-up Summary: Change clock pull-up or clock subdomain configurations; notify on clock pull-up or subdomain changes Mechanisms: Command/Query → Response; Asynchronous Notification (on clock pullup changes) Message OPCODE / Type: DDP_CLOCK_PULLUP API Functions: Clock Pullup Provided Functionality / Information: n Current pullup n Current subdomain n List of supported pullups n Set clock pullup mode & subdomain n Receive a notification on any clock pullup / subdomain changes Audio Basic Summary: Provides basic audio information such as number of RX and TX channels, default sample rate and default encoding Mechanisms: Query → Response; Asynchronous Notification (on Rx and Tx channel count changes due to setting a sample rate which causes this condition) Message OPCODE / Type: DDP_AUDIO_BASIC API Functions: Audio Basic Provided Functionality / Information: n Default sample rate n Default encoding n Number of RX channels n Number of TX channels Audio Sample Rate Configuration Summary: Change audio sample rate configuration and query for supported sample rates. Notify on audio sample rate changes. Mechanisms: Command/Query → Response; Asynchronous Notification (on audio sample rate changes) Message OPCODE / Type: DDP_SRATE_CONFIG CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -53- Host CPU SDK Programmer's Guide API Functions: Audio Sample Rate Configuration Provided Functionality / Information: n Current & Reboot sample rate n Supported sample rates n Change audio sample rate n Receive a notification on any audio sample rate change Audio Encoding Configuration Summary: Change audio encoding configuration and query for supported encodings. Notify on audio encoding changes. Mechanisms: Command/Query → Response; Asynchronous Notification (on audio encoding changes) Message OPCODE / Type: DDP_AUDIO_ENC_CONFIG API Functions: Audio Encoding Configuration Provided Functionality / Information: n Current & Reboot encoding n Supported encoding n Change audio encoding n Receive a notification on any audio encoding change Audio Interface Note: This message is only supported on Brooklyn II Summary: Provides information about the audio TDM interface of the Dante device Mechanisms: Query → Response; Asynchronous Notification (on boot up) Message OPCODE / Type: DDP_AUDIO_TYPE_INTERFACE API Functions: Audio Interface Provided Functionality / Information: n Audio channels per TDM interface n TDM clock framing type n TDM sample alignment type n Alignment of first channel on a TDM line with respect to the LRCLK n A notification is sent during boot up of the Dante device Audio Signal Presence Configuration Note: This message is only supported on Ultimo Summary: Enable/disable the Ultimo from pushing signal presence data over DDP periodically Mechanisms: Command → Response Message OPCODE / Type: DDP_AUDIO_TYPE_SIGNAL_PRESENCE_CONFIG API Functions: Audio Signal Presence Configuration CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -54- Host CPU SDK Programmer's Guide Provided Functionality / Information: n Enable/disable the Ultimo from sending signal presence over DDP Audio Signal Presence Data Note: This message is only supported on Ultimo Summary: Signal presence information both Rx and Tx channels Mechanisms: Asynchronous Notification (on availability of new signal presence data) Message OPCODE / Type: DDP_AUDIO_TYPE_SIGNAL_PRESENCE_DATA API Functions: Audio Signal Presence Data Provided Functionality / Information: n Number of Rx and Tx channels that have signal presence information n The signal presence which indicates audio clip, audio signal, and no audio signal Routing Basic Summary: Provides basic routing information Mechanisms: Query → Response Message OPCODE / Type: DDP_ROUTING_BASIC API Functions: Routing Basic Provided Functionality / Information: n Max Rx & Tx flows n Max Rx & Tx slots per flow n Min & max latency n Min & max FPP n Rx port range n Number of Rx/Tx channels contained in a single Rx/Tx channel config state DDP message n Number of Rx/Tx flows contained in a single Rx/Tx flow config state DDP message n Number of Rx channels/flows contained in a single Rx channel/flow status DDP message Routing Ready Summary: Provides status information on whether the Dante device is ready to support routing commands. Mechanisms: Query → Response; Asynchronous Notification (on routing ready state changes) Message OPCODE / Type: DDP_ROUTING_READY_STATE API Functions: Routing Ready State Provided Functionality / Information: n Routing ready state n Receive a notification when the routing ready state changes CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -55- Host CPU SDK Programmer's Guide Routing Performance Configuration Summary: Provides current latency/FPP configuration, change current latency/FPP settings, notification on latency/FPP changes. Mechanisms: Command/Query → Response; Asynchronous Notification (on changes) Message OPCODE / Type: DDP_ROUTING_PERFORMANCE_CONFIG API Functions: Routing Performance Config Provided Functionality / Information: n Set latency & FPP n Receive a notification on routing performance configuration changes Routing Rx Channel Configuration State Summary: Provides RX channel configuration information such as labels, encodings, current subscriptions; Notification on RX channel configuration changes. Note: The number of Rx channels contained in a single message is limited, and this number can be obtained from the Routing Basic DDP message Mechanisms: Query → Response; Asynchronous Notification (on changes) Message OPCODE / Type: DDP_ROUTING_RX_CHAN_CONFIG_STATE API Functions: Routing RX Channel Configuration State Provided Functionality / Information: n Default Channel Label n Current Channel Label n Channel Encoding n Channel Sample Rate n Channel Supported PCM encodings n Channel Supported custom encodings n Subscriptions (subscribed device channel) and Subscription status n Receive a notification on any channel state change n Receive a notification on any channel label change Routing Tx Channel Configuration State Summary: Provides TX channel configuration information such as labels, encodings, etc; Notification on TX channel configuration changes. Note: The number of Tx channels contained in a single message is limited, and this number can be obtained from the Routing Basic DDP message Mechanisms: Query → Response; Asynchronous Notification (on changes) Message OPCODE / Type: DDP_ROUTING_TX_CHAN_CONFIG_STATE API Functions: Routing TX Channel Configuration State CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -56- Host CPU SDK Programmer's Guide Provided Functionality / Information: n Default Channel Label n Current Channel Label n Channel Encoding n Channel Sample Rate n Channel Supported PCM encodings n Channel Supported custom encodings n Receive a notification on any channel state change n Receive a notification on any channel label change Routing Rx Channel Status Summary: Provides a query mechanism for the current RX channel status (i.e. unresolved / dynamic) Note: The number of Rx channels contained in a single message is limited, and this number can be obtained from the Routing Basic DDP message Mechanisms: Query → Response Message OPCODE / Type: DDP_ROUTING_RX_CHAN_STATUS API Functions: Routing RX Channel Status Provided Functionality / Information: n Channel Status – this is the audio subscription status of this channel, for example DDP_RX_CHAN_ STATUS_UNRESOLVED or DDP_RX_CHAN_STATUS_DYNAMIC Routing Rx Flow Configuration State Summary: Provides RX flow configuration information such as status, slots, channels, etc; Notification on RX flow configuration changes. Note: The number of Rx flows contained in a single message is limited, and this number can be obtained from the Routing Basic DDP message Mechanisms: Query → Response; Asynchronous Notification (on changes) Message OPCODE / Type: DDP_ROUTING_RX_FLOW_CONFIG_STATE API Functions: Routing RX Flow Configuration State Provided Functionality / Information: n Flow status – for example FLOW_STATUS_ACTIVE or FLOW_STATUS_BAD_ADDRESS n Flow configuration – e.g. number of slots, flow IP address and port, RX channels, encoding, sample rate, latency, FPP n Receive a notification on any flow configuration change (except flow status changes for flow status changes the “Rx Flow Status” notification will occur) Routing Tx Flow Configuration State Summary: Provides TX flow configuration information such as status, slots, channels, etc; Notification on TX flow configuration changes. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -57- Host CPU SDK Programmer's Guide Note: The number of Tx flows contained in a single message is limited, and this number can be obtained from the Routing Basic DDP message Mechanisms: Query → Response; Asynchronous Notification (on changes) Message OPCODE / Type: DDP_ROUTING_TX_FLOW_CONFIG_STATE API Functions: Routing TX Flow Configuration State Provided Functionality / Information: n Flow status – for example FLOW_STATUS_ACTIVE or FLOW_STATUS_BAD_ADDRESS n Flow configuration – e.g. number of slots, flow IP address and port, TX channels, encoding, sample rate, latency, FPP n Receive a notification on any flow configuration change Routing Rx Flow Status Summary: Provides a query mechanism for the current RX flow status (i.e. active) Note: The number of Rx flows contained in a single message is limited, and this number can be obtained from the Routing Basic DDP message Mechanisms: Query → Response Message OPCODE / Type: DDP_ROUTING_RX_FLOW_STATUS API Functions: Routing RX Flow Status Provided Functionality / Information: n Flow available – whether the flow is available on any interface n Flow active – whether the flow is actively receiving audio n Receive a notification on any flow status change Routing Rx Channel Label Set Summary: Set / change an RX channel label Note: The number of Rx channels that can have their labels updated by a single message is limited, and this number can be obtained from the Rx channel config state per DDP message field in the Routing Basic DDP message Mechanisms: Command → Response Message OPCODE / Type: DDP_ROUTING_RX_CHAN_LABEL_SET API Functions: Routing RX Channel Label Set Provided Functionality / Information: n Change / Set the RX Channel Label on 1 or more channels n Note: The response to a RX Channel Label Set message contains the same payload as a Rx Routing Channel Configuration State message CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -58- Host CPU SDK Programmer's Guide Routing Tx Channel Label Set Summary: Set / change a TX channel label Note: The number of Tx channels that can have their labels updated by a single message is limited, and this number can be obtained from the Tx channel config state per DDP message field in the Routing Basic DDP message Mechanisms: Command → Response; Message OPCODE / Type: DDP_ROUTING_TX_CHAN_LABEL_SET API Functions: Routing TX Channel Label Set Provided Functionality / Information: n Change / Set the TX Channel Label on 1 or more channels n Note: The response to a TX Channel Label Set message contains the same payload as a Tx Routing Channel Configuration State message Routing RX Subscribe Summary: Create a label based RX subscription on the Dante device Note: The number of Rx channels subscribed using a single message is limited, and this number can be obtained from the Rx channel config state per DDP message field in the Routing Basic DDP message Mechanisms: Command → Response; Message OPCODE / Type: DDP_ROUTING_RX_SUBSCRIBE_SET API Functions: Routing RX Subscribe Provided Functionality / Information: n Create RX subscriptions n Note: The response to a RX Subscribe Set message contains the same payload as a RX Channel Configuration State message Routing RX Unsubscribe Summary: Remove RX subscriptions on the Dante device Mechanisms: Command → Response; Message OPCODE / Type: DDP_ROUTING_RX_UNSUB_CHAN API Functions: Routing RX Unsubscribe Provided Functionality / Information: n Delete RX subscriptions Routing Multicast TX Flow Configuration Summary: Create a multicast TX flow Mechanisms: Command → Response; Message OPCODE / Type: DDP_ROUTING_MCAST_TX_FLOW_CONFIG_SET CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -59- Host CPU SDK Programmer's Guide API Functions: Routing TX Multicast Flow Configuration Provided Functionality / Information: n Create Multicast TX flows Routing Flow Delete Summary: Remove flows on the Ultimo Mechanisms: Command → Response; Message OPCODE / Type: DDP_ROUTING_FLOW_DELETE API Functions: Routing Flow Delete Provided Functionality / Information: n Delete an existing flow, this command can be used to delete a Tx multicast flow CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -60- Host CPU SDK Programmer's Guide Host CPU SDK Package The Host CPU SDK package can be integrated into an existing software project which enables communication between a Host CPU and a Dante device. It provides the core functionality required to implement the software for a Host CPU to communicate with a Brooklyn II or Ultimo. The core functionality is exposed via an API. The package also includes an example application for Windows that uses the UART and SPI transport. The SPI transport in example Windows application uses the API from Total Phase Inc. and will work with their Aardvark Host Adapters. The implementer should add platform-specific code as required to port the functionality to their platform of choice. Data Types The data types used throughout the Host CPU SDK is specified in Table 9. These data type definitions are specified in the stdint.h C header file. Table 9 - Host CPU SDK data types Data Type Description uint8_t Unsigned 8-bit integer int8_t Signed 8-bit integer uint16_t Unsigned 16-bit short integer int16_t Signed 16-bit short integer uint32_t Unsigned 32-bit long integer int32_t Signed 32-bit long integer Provided Functionality The Host CPU SDK package contains the following (organised by folder): n docs - Doxygen documentation for the core functionality API. Open the docs.html to access the Doxygen documentation n src/common - Dante types & helpers n src/libs - Host CPU core functionality library o src/libs/lib_cobs – COBS encoding / decoding library used for BHIP and UHIP packet framing CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -61- Host CPU SDK Programmer's Guide o src/libs/lib_bhip – Brooklyn II Host Interface Protocol packet read / write library to create and parse BHIP messages o src/libs/lib_uhip – Ultimo Host Interface Protocol packet read / write library to create and parse UHIP messages o src/libs/lib_ddp – Dante Device Protocol packet read /write library to create and parse DDP messages o src/libs/interface – Interface to UHIP API library n src/libs/interface/uhip_hostcpu_rx_timer.h – UHIP RX timer interface o n n src/libs/interface/uhip_hostcpu_tx_timer.h – UHIP TX timer interface n src/libs/interface/hostcpu_transport.h – Raw data (SPI / UART) transport layer interface src/libs/lib_serial – Utility functions to prepare and extract COBS encoded serial frames for Brooklyn II and Ultimo src/app – Example implementation of a Host CPU to Brooklyn II or Ultimo interface application o o o src/app/example_bhip: n src/app/example_bhip/example_bhip_main.[c|h] – “Core” state machine implementing BHIP protocol n src/app/example_bhip/example_bhip_common.[c|h] – Common functionality used across the BHIP HostCPU examples n src/app/example_bhip/example_rx_bhip_[spi|uart].[c|h] – BHIP Receive functionality specific to a serial peripheral n src/app/example_bhip/example_tx_bhip.[c|h] – Examples to handle transmitting BHIP packets n src/app/example_bhip/example_tx_bhip_pb.[c|h] – Examples to create and send ConMon and UDP mode BHIP packet bridge packets src/app/example_uhip: n src/app/example_uhip/example_uhip_main.[c|h] – “Core” state machine implementing UHIP protocol n src/app/example_uhip/example_uhip_common.[c|h] – Common functionality used across the UHIP HostCPU examples n src/app/example_uhip/example_rx_uhip.[c|h] – UHIP Receive functionality n src/app/example_uhip/example_tx_uhip.[c|h] – Examples to handle transmitting UHIP packets n src/app/example_uhip/example_tx_pb.[c|h] – Examples to create and send ConMon and UDP mode UHIP packet bridge packets src/app/example_ddp: n src/app/example_ddp/example_rx_ddp.[c|h] – Examples to handle received DDP and Dante Event messages n n src/app/example_ddp/example_tx_ddp.[c|h] – Examples to create and send DDP messages src/app/win – A sample Windows implementation of the interface in src/libs/lib_interface o src/app/win/bhip/aud_platform.h – Global header file for BHIP Host CPU API o src/app/win/uhip/aud_platform.h – Global header file for UHIP Host CPU API CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -62- Host CPU SDK Programmer's Guide n o src/app/win/uhip/rx_timer.c, src/app/win/uhip/tx_timer.c, src/app/win/uhip/timer_common.c – Implementation of timers conforming to timer interface for UHIP o src/app/win/bhip_uart_transport.c – Implementation of UART transport conforming to transport interface for BHIP communication. In this file the user must specify the COM port number by changing the PC_COM_PORT manifest constant. The UART baud rate used for the communication is 115200. o src/app/win/bhip_spi_transport.c – Implementation of SPI transport conforming to transport interface for BHIP communication. The SPI clock speed used for the communication is 4MHz. o src/app/win/uhip_spi_transport.c – Implementation of SPI transport conforming to transport interface for UHIP communication. In this file the user must specify the TotalPhase Inc. Aardvark SPI host adapter SPI master and SPI slave serial numbers by changing the AARDVARK_SPI_MASTER_SERIAL and AARDVARK_SPI_SLAVE_SERIAL manifest constants. The SPI clock speed used for the communication is 4MHz. o src/app/win/uart_transport.c – Implementation of UART transport conforming to transport interface for UHIP communication. In this file the user must specify the COM port number by changing PC_COM_PORT manifest constant. The UART baud rate used for the communication is 115200. vs_project – Windows Visual Studio project files for each serial peripheral for BHIP and UHIP and a solution file which groups the project files. Minimum supported version of Visual Studio is 2013. Porting the Host CPU SDK Package This section details how to port the Host CPU SDK package to your host CPU. Doing a trial build and run on the existing example platforms before starting implementation is strongly recommended. Project Setup The package will compile as-is as a Windows application. The first step in porting to a different platform will be to execute the create_ultimo_hostcpu.bat or create_brooklyn-ii_hostcpu.bat to get the source files to communicate with a specific Dante device. The next step is to create platform specific build files (i.e. Makefiles) or add the source code to an existing build project. The implementer will also need to add folders for platform-specific code similar to src/win The following header search paths should be included for the C compiler: n (lib includes) n Platform specific header file location Implement the RX Timer interface The RX timer interface specified in uhip_hostcpu_rx_timer.h needs to be implemented and this is only required for host CPUs interfacing with an Ultimo. This is a polled one-shot timer that is used for the UHIP protocol RX timeouts. The implementation requirements are: n A timer with a resolution and accuracy of approximately 100ms CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -63- Host CPU SDK Programmer's Guide Implement the TX Timer interface The TX timer interface specified in uhip_hostcpu_tx_timer.h needs to be implemented and this is only required for host CPUs interfacing with an Ultimo. This is a polled one-shot timer that is used for the UHIP protocol TX timeouts. The implementation requirements are: n A timer with a resolution and accuracy of approximately 100ms Implement the Host CPU Transport Interface The Host CPU Transport interface specified in hostcpu_transport.h needs to be implemented. This is the platform specific SPI or UART driver for the Host CPU. This is used by the API to send / receive data to the Brooklyn II or Ultimo. The following sub-sections specify the requirements for each interface for each type of host CPU protocol. BHIP Host CPU SPI Interface n The SPI master is used to send data and while sending data, the Host CPU SPI master must receive data from the Brooklyn II SPI slave. The send data functionality should be implemented by the hostcpu_transport_write() function n Receiving data can be performed while sending data, but if there is no data to be sent the SPI master should sent dummy data. The receive data functionality should be implemented by the hostcpu_ transport_read() function. The host CPU should make use of the DATA_AVAILABLE line from the Brooklyn II which signals the availability of data to be read by the host CPU. See Communicating with a Brooklyn II for information about the DATA_AVAILABLE line. UHIP Host CPU SPI Interface n A SPI master peripheral driver used for sending data only (any RX data from the SPI master should be dropped). This should be implemented by the hostcpu_transport_write() function n A SPI slave peripheral driver used for receiving data only (TX dummy bytes may need to be sent at the peripheral driver layer). This should be implemented by the hostcpu_transport_read() function. This implementation must use either DMA or interrupt driven I/O as the driver must be able to buffer up to 576 bytes of received data Implementation requirements for a UART Host CPU interface: n A UART TX driver used for sending data only. This should be implemented by the hostcpu_transport_write() function. n A UART RX driver used for receiving data only. This should be implemented by the hostcpu_ transport_read() function. This implementation must use either DMA or interrupt driven I/O as the driver must be able to buffer up to 576 bytes of received data. Add required RX message handling Some example stub functions for receiving different message types are implemented in the example_ rx_bhip.c/h, example_rx_uhip.c/h, example_rx_ddp.c/h files. The customer will need to modify these stub functions and add additional receive functions as required for their application. Add required TX message handling Some example stub functions for building and transmitting different message types are implemented in the example_tx_bhip.c/h, example_tx_uhip.c/h, example_tx_ddp.c/h files. The customer CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -64- Host CPU SDK Programmer's Guide will need to modify these stub functions and add additional transmit functions as required for their application. Modify aud_platform.h uhip/aud_platform.h and bhip/aud_platform.h include platform specific defines and includes, modify these to suit your platform. Modify or Implement a Main Loop example_uhip_main.c and example_bhip_main.c contain a simple implementation of a main loop that does not assume any special platform functionality. It is assumed that the sending of Tx messages from this application needs to be driven off a timer or via integration of an external trigger such as a push button press. Alternatively a more sophisticated main loop using select() and callbacks may be used. Host CPU SDK Library API Functions UHIP ConMon Packet Bridge Functions Message Type Build Function (for TX) Parse Function (for RX) UHIP ConMon Packet Bridge uhip_packet_write_cmc_ packet_bridge() uhip_packet_read_cmc_ packet_bridge() BHIP ConMon Packet Bridge Functions Message Type Build Function (for TX) Parse Function (for RX) BHIP ConMon Packet Bridge bhip_packet_write_cmc_ packet_bridge() bhip_packet_read_cmc_ packet_bridge() UHIP UDP Packet Bridge Functions Message Type Build Function (for TX) Parse Function (for RX) UHIP UDP Packet Bridge uhip_packet_write_udp_ packet_bridge() uhip_packet_read_udp_ packet_bridge() BHIP UDP Packet Bridge Functions Message Type Build Function (for TX) Parse Function (for RX) BHIP UDP Packet Bridge bhip_packet_write_udp_ packet_bridge() bhip_packet_read_udp_ packet_bridge() CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -65- Host CPU SDK Programmer's Guide Dante Events Functions Message Type Build Function (for TX) Parse Function (for RX) Audio Format Change (sample rate) N/A ddp_read_local_audio_ format() Clock Pullup Change N/A ddp_read_local_clock_ pullup() Dante Device Protocol (DDP) Functions Message Type Build Function Parse Function (for TX query/command) (for RX response/event) Device General ddp_read_device_ general_request() ddp_read_device_general_ response() Device Manufacturer ddp_add_device_ manufacturer_ request() ddp_read_device_manufacturer_ response() Device Upgrade ddp_add_device_ upgrade_xmodem_ request() ddp_read_device_upgrade_ response() ddp_add_device_ upgrade_tftp_ request() Device Erase Configuration ddp_add_device_ erase_request() ddp_read_device_erase_response () Device Reboot ddp_add_device_ reboot_request() ddp_read_device_reboot_response () Device Identity ddp_add_device_ identity_request() ddp_read_device_identity_ response() ddp_read_device_identify_ response() [event only] Device Identify Device GPIO ddp_add_device_ gpio_request() ddp_read_device_gpio_response() Device Switch LED ddp_add_device_ switch_led_request () ddp_read_device_switch_led_ response() CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -66- Host CPU SDK Programmer's Guide Message Type Build Function Parse Function (for TX query/command) (for RX response/event) Device Lock/Unlock ddp_add_device_ lock_unlock_request () ddp_read_device_lock_unlock_ response() Device Switch Redundancy ddp_add_device_ switch_redundancy_ request() ddp_read_device_switch_ redundancy_response() Device UART Configuration ddp_add_device_ uart_config_request () ddp_read_uart_config_response_ header() Device AES67 ddp_add_device_ aes67_request() ddp_read_device_aes67_response () Device VLAN Configuration ddp_add_device_ vlan_config_request () ddp_read_device_vlan_config_ response_header() ddp_read_uart_config_response_ uart_st_array() ddp_read_device_vlan_config_ response_vlan_st_array() ddp_read_device_vlan_config_ response_name_string() Device Meter Configuration ddp_add_device_ meter_config_ request() ddp_read_device_meter_config_ response() Network Basic ddp_add_network_ basic_request() ddp_read_network_basic_ response_header() ddp_read_network_basic_ response_interface() ddp_read_network_basic_ response_interface_address() ddp_read_network_basic_ response_dns() ddp_read_network_basic_ response_domain() Network Configuration ddp_add_network_ config_request() ddp_read_network_config_ response() Clock Basic Legacy ddp_add_clock_ basic_legacy_ request() ddp_read_clock_basic_legacy_ response() CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -67- Host CPU SDK Programmer's Guide Message Type Build Function Parse Function (for TX query/command) (for RX response/event) Clock Configuration ddp_add_clock_ config_request() ddp_read_clock_config_response () ddp_read_clock_config_response_ port() Clock Pullup ddp_add_clock_ pullup_request() ddp_read_clock_pullup_response () Clock Basic 2 ddp_add_clock_ basic2_request() ddp_read_clock_basic2_response_ header() ddp_read_clock_basic2_response_ port() Audio Basic ddp_add_audio_ basic_request() ddp_read_audio_basic_response() Audio Sample Rate Configuration ddp_add_audio_ sample_rate_config_ request() ddp_read_audio_sample_rate_ config_response() Audio Encoding Configuration ddp_add_audio_ encoding_config_ request() ddp_read_audio_encoding_config_ response() Audio Interface ddp_add_audio_ interface_request() ddp_read_audio_interface_ response() Audio Signal Presence Configuration ddp_add_audio_ signal_presence_ config_request() ddp_read_audio_signal_presence_ config_response() Audio Signal Presence Data ddp_read_audio_sample_rate_ config_supported_srate() ddp_read_audio_encoding_config_ supported_encoding() ddp_read_audio_signal_presence_ data_response() ddp_read_audio_signal_presence_ data_tx_chan_value() ddp_read_audio_signal_presence_ data_rx_chan_value() Routing Basic ddp_add_routing_ basic_request() ddp_read_routing_basic_response () Routing Ready State ddp_add_routing_ ready_state_request () ddp_read_routing_ready_state_ response() CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -68- Host CPU SDK Programmer's Guide Message Type Build Function Parse Function (for TX query/command) (for RX response/event) Routing Performance Configuration ddp_add_routing_ performance_config_ request() ddp_read_routing_performance_ config_response() Routing RX Channel Configuration State ddp_add_routing_rx_ chan_config_state_ request() ddp_read_routing_rx_chan_ config_state_response_header() ddp_read_routing_rx_chan_ config_state_response_chan_ params() ddp_read_routing_rx_chan_ config_state_response_custom_ encoding() Routing TX Channel Configuration State ddp_add_routing_tx_ chan_config_state_ request() ddp_read_routing_tx_chan_ config_state_response_header() ddp_read_routing_tx_chan_ config_state_response_chan_ params() ddp_read_routing_tx_chan_ config_state_response_custom_ encoding() Routing RX Flow Configuration State ddp_add_routing_rx_ flow_config_state_ request() ddp_read_routing_rx_flow_ config_state_response_header() ddp_read_routing_rx_flow_ config_state_response_flow_ params() ddp_read_routing_rx_flow_ config_state_response_flow_slot () ddp_read_routing_rx_flow_ config_state_response_flow_ slot_chans() ddp_read_routing_rx_flow_ config_state_response_flow_ address_nw_ip() CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -69- Host CPU SDK Programmer's Guide Message Type Build Function Parse Function (for TX query/command) (for RX response/event) Routing TX Flow Configuration State ddp_add_routing_tx_ flow_config_state_ request() ddp_read_routing_tx_flow_ config_state_response_header() ddp_read_routing_tx_flow_ config_state_response_flow_ params() ddp_read_routing_tx_flow_ config_state_response_flow_ slots() ddp_read_routing_tx_flow_ config_state_response_flow_ address_nw_ip() Routing RX Channel Status ddp_add_routing_rx_ chan_status_request () ddp_read_routing_rx_chan_ status_response_header() Routing RX Flow Status ddp_add_routing_rx_ flow_status_request () ddp_read_routing_rx_flow_ status_response_header() ddp_add_routing_rx_ sub_set_request() ddp_read_routing_rx_sub_set_ response_header() Routing RX Subscribe ddp_read_routing_rx_chan_ status_response_chan_params() ddp_read_routing_rx_flow_ status_response_flow_params() ddp_read_routing_rx_sub_set_ response_chan_params() ddp_read_routing_rx_sub_set_ response_custom_encoding() Routing RX Unsubscribe ddp_add_routing_rx_ unsub_chan_request () ddp_read_routing_rx_unsub_chan_ response() Routing RX Channel Label Set ddp_add_routing_rx_ chan_label_set_ request() ddp_read_routing_rx_chan_label_ set_response_header() ddp_read_routing_rx_chan_label_ set_response_chan_params() ddp_read_routing_rx_chan_label_ set_response_custom_encoding() CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -70- Host CPU SDK Programmer's Guide Message Type Build Function Parse Function (for TX query/command) (for RX response/event) Routing TX Channel Label Set ddp_add_routing_tx_ chan_label_set_ request() ddp_read_routing_tx_chan_label_ set_response_header() ddp_read_routing_tx_chan_label_ set_response_chan_params() ddp_read_routing_tx_chan_label_ set_response_custom_encoding() Routing Multicast TX Flow Configuration ddp_add_routing_ multicast_tx_flow_ config_request() ddp_read_routing_multicast_tx_ flow_config_response_header() ddp_read_routing_multicast_tx_ flow_config_response_flow_ params() ddp_read_routing_multicast_tx_ flow_config_response_flow_slots () ddp_read_routing_multicast_tx_ flow_config_state_response_ flow_address_nw_ip() ddp_routing_multicast_tx_flow_ config_add_slot_params() Routing Flow Delete ddp_add_routing_ flow_delete_request () ddp_read_routing_flow_delete_ response() CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -71- Host CPU SDK Programmer's Guide Getting Started The purpose of this section is to provide information on how to get stared with the Host CPU SDK package. 1. Configure the Dante device: The initial step should be to configure the Brooklyn II or the Ultimo for communication with a host CPU. Refer to Packet Bridge, Dante Events (Ultimo only), and Dante Device Protocol. 2. Connect the Dante device to the computer: o If a Brooklyn II PDK is available then connect a UART cable (e.g. FTDI serial to USB cable) to the UART port configured for host CPU communication. o If an Ultimo PDK is available then connect a UART cable to UARTB. Alternatively, if TotalPhase Inc. Aardvark host adapters are available then connect them as appropriate. o Use Table 10 when connecting an Aardvark SPI master to a Brooklyn II SPI slave on port B. Use Table 11 and Table 12 when connecting an Aardvark SPI slave and Aardvark SPI master respectively to an Ultimo SPI master + SPI slave. Table 10 - Brooklyn II PDK SPI slave to Aardvark SPI master pin mapping SPI Function Aardvark SPI Master Header Brooklyn II PDK SPI Port B Header Clock SCK – Pin 7 CLK – Pin 3 Slave Select SS – Pin 9 SEL – Pin 1 Ground GND – Pin 2 GND – Pin 8 Master in Slave out MISO – Pin 5 MISO – Pin 7 Master out Slave in MOSI – Pin 8 MOSI – Pin 5 Data Available GPIO – Pin 1 Data Available – Pin 2 Table 11 - Ultimo PDK SPI master to Aardvark SPI slave pin mapping SPI Function Aardvark SPI Slave Header Ultimo PDK SPI Master Header Clock SCK – Pin 7 CKA – Pin 3 Slave Select SS – Pin 9 S0A – Pin 1 Ground GND – Pin 2 GND – Pin 8 Master in Slave out MISO – Pin 5 DIA – Pin 7 CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -72- Host CPU SDK Programmer's Guide SPI Function Aardvark SPI Slave Header Ultimo PDK SPI Master Header Master out Slave in MOSI – Pin 8 DOA – Pin 5 Table 12 - Ultimo PDK SPI slave to Aardvark SPI master pin mapping SPI Function Aardvark SPI Master Header Ultimo PDK SPI Slave Header Clock SCK – Pin 7 CKB – Pin 18 Slave Select SS – Pin 9 SLB – Pin 20 Ground GND – Pin 2 GND – Pin 13 Master in Slave out MISO – Pin 5 DOB – Pin 14 Master out Slave in MOSI – Pin 8 DIB – Pin 16 3. Open the Visual solution file: Use Microsoft Visual Studio (currently 2015 known as Visual Studio Community, it can be obtained from Microsoft’s website - minimum supported version is 2013) to open the vs_project/hostcpu_api.sln solution file. Build the example project of interest which is based on the transport protocol (BHIP or UHIP) and the serial peripheral. 4. Run the examples: Open a command line window and simply execute the executable built by Visual Studio. There are no command line options. Alternatively, the example can be run by Visual Studio. 5. Test receiving DDP events: If the Brooklyn II or Ultimo is configured for DDP, the reboot the Dante device to view boot up events. Otherwise, use Dante Controller, to change sample rate, encoding, etc. and view the corresponding DDP event. 6. Test sending DDP messages: Uncomment one of the hostcpu_bhip_set_tx_flag() function calls of interest in src/app/example/example_bhip/example_bhip_main.c, or hostcpu_uhip_set_tx_flag() in src/app/example/example_bhip/example_uhip_ main.c, re-build the Visual Studio project and run the executable. After running the executable the DDP response can be viewed. 7. Port the examples projects to a target platform: The steps involved in porting the example code and library code contained in the Host CPU SDK package are discussed in detail in Porting the Host CPU SDK Package. To get started execute the create_brooklyn-ii_hostcpu.bat for a host CPU targeting communication with a Brooklyn II or execute create_ultimo_hostcpu.bat for a host CPU targeting communication with an Ultimo. These batch files will group the relevant source files without Visual Studio project files into a separate directory. 8. Read the API documentation: Doxygen-styled documentation is provided for low level functionality to process and build packets for the various serial protocols covered in this document. These docs can be accessed by opening the docs/docs.html file. CONFIDENTIAL. Copyright © 2016 Audinate Pty Ltd. All Rights Reserved. -73- Host CPU SDK Programmer's Guide Index ConMon Packet Bridge 23 ConMon Status Channel Usage 26 A ConMon Vendor Broadcast Channel Usage 26 AES67 39, 50 Control Channel 23, 26 API Functions 65 Control of Host CPU 27 Architecture 22 D Audio 40 Dante Device Configuration 35 Audio Basic 53 Dante Device Protocol 37 Audio Encoding Configuration 54 Audio Interface 54 Dante Device Protocol (DDP) Functions 66 Dante Events 36 Audio Sample Rate Configuration 53 Audio Signal Presence Configuration 54 Audio Signal Presence Data 55 B Dante Events Functions 66 Data Types 61 Device Basic Information 46 Device Discovery 24 Basic Information 37, 46 Device Erase Configuration 47 BHIP 15 Device Identify 48 BHIP ConMon Packet Bridge Functions 65 Device Identity 48 BHIP Host CPU SPI Interface 64 Device Lock Information 38 BHIP UDP Packet Bridge Functions 65 Device Manufacturer Information 47 Brooklyn II Host Interface Protocol 15 Device Reboot 38, 48 Bulk State Summary 29 Device State 29 Byte Alignment 30 Device Upgrade 47 Byte Ordering 30 Discovering Packet Bridge Endpoints 25 E C Clock 52 Encoding 54 Clock Basic 2 52 Erase Configuration 38, 47 Clock Basic Legacy 52 Error Timeout 19-20 Clock Configuration 52 Event messages 37 Clock Pull-up 53 Example Use Cases 27 Clocking / PTP 40 Communicating with a Brooklyn II 10 Communicating with an Ultimo 11 F Firmware Update 27 Flow Control 16, 18 Communication with a Dante Device Packet Bridge Endpoint 24 Flow Delete 60 Comparison of ConMon and UDP Sockets Packet Bridge 24 Functionality 61 Framing and Padding Mechanisms 16-17 ConMon Configurations 27 G ConMon Control Channel Usage 26 GPIO 49 ConMon Mode 25 Groups of Changes 29 Copyright © 2016 Audinate Pty Ltd. All rights reserved. -74- Host CPU SDK Programmer's Guide H Handling IP address change 24 Hardware Requirements 10 Host CPU and Brooklyn II 15 Host CPU and Ultimo 17 Host CPU Architecture 15 Host CPU Firmware Update 27 Host CPU SDK Package 61 Host CPU to Host CPU Communications 28 Packet Filtering 24 Porting 63 Porting the Host CPU SDK Package 63 Power-On Events 31 Project Setup 63 Protocol Design 29 Protocol Functionality 37 Protocol Messages 46 Pull-up 53 R Host CPU Transport Interface 64 I Reboot 48 Receive a Packet from the Network and Forward 34 I/O signalling levels 10 Identify 48 Receiving a DDP Event Message 44 Identity 38, 48 Redundancy 24, 49 Interface 54 Request messages 37 K Response messages 37 Resynchronization 17, 21 Key Features 15, 22 L Routing 40, 55 Routing Performance 56 LED 49 Routing Ready 55 Lock/Unlock 49 Routing Rx Channel Configuration State 56 M Routing Tx Channel Configuration State 56 Main Loop 65 Rx Channel Configuration State 56 Manufacturer Information 37, 47 Rx Channel Label Set 58 Message Classes 37 Rx Channel Status 57 Message Format 24 Rx Flow Configuration State 57 Message Loss 30 Rx Flow Status 58 Meter Configuration 51 RX message handling 64 Metering 39 RX Subscribe 59 Multicast 59 RX Timer interface 63 Multicast TX Flow Configuration 59 RX Unsubscribe 59 S N Network 39 Sample Rate 53 Network Basic 51 Self-Description 29 Network Configuration 51 Sending a Command to a Locked Dante Device 45 Normal Acknowledgement 18 P Packet Bridge 22-23 Copyright © 2016 Audinate Pty Ltd. All rights reserved. Sending a DDP Command/Query Message 41 Signal Presence 54-55 -75- Host CPU SDK Programmer's Guide Small State Changes 29 Specifications 15, 22 SPI 10, 12, 35 Stateless Protocol Design 30 Status Channel 23, 26 Status Reporting 28 Subscribe 59 Switch LED 49 Synchronization 30 T Timing 21 Transmit a Packet from a Host CPU 31-33 Tx Channel Configuration State 56 Tx Channel Label Set 59 Tx Flow Configuration State 57 TX message handling 64 TX Timer interface 64 U UART 11, 13, 35 UART Configuration 39, 50 UDP Mode 25 UDP Sockets Packet Bridge 24 UHIP 17 UHIP ConMon Packet Bridge Functions 65 UHIP Host CPU SPI Interface 64 UHIP UDP Packet Bridge Functions 65 Ultimo Configuration 36 Ultimo Host Interface Protocol 17 Unicast Subscriptions 24 Unsubscribe 59 Upgrade 38, 47 V Vendor Broadcast channel 26 Vendor Broadcast Channel 23 VLAN Configuration 50 VLANs 39 Copyright © 2016 Audinate Pty Ltd. All rights reserved. -76-
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.4 Linearized : No Page Count : 77 Page Mode : UseOutlines Language : en-us Producer : madbuild Create Date : 2016:06:29 15:31:59+10:00 Modify Date : 2016:06:29 15:31:59+10:00 Title : Host CPU SDK Programmer's Guide Author : Audinate Subject :EXIF Metadata provided by EXIF.tools