GVCP packets

Devices are waiting for GVCP packets listening to the GVCP port (3956). When the client sends a command GVCP packet to the device, the device sends back an acknowledge packets in return. Each command/acknowledge pair is identified by a 16 bit value, which allows to check if an acknowledge packet corresponds to the previsoulsy sent command. 0 is an error value for this identifier. If an acknowledge is not received after a given timeout period, another command packet is sent, until a maximum number of retries is reached.

The ArvGvcp API offers a set of function for handling of GVCP packets.

The content of a GVCP packet is composed by a 64 bit headers, followed or not by a data byte array, depending on the GVCP packet type. Multibyte values are in big endian encoding.

Table 1. GVCP packet

0 15 16 31 32 47 48 63
#ArvGvcpPacketType #ArvGvcpCommand Data size Packet id
Optional data
...

Discovery

A device discovery mechanism is implemented using a discovery GVCP packet, broadcasted by the client to the GVCP port. Each available device responds to this discovery packet with an acknowledge packet, containing a description of the device (device name, model name, manufacturer name, MAC Address...).

In the discovery command packet, data size is set to 0 and packet id is equal to 0xffff.

Table 2. Discovery acknowledge packet

Address 0 15 16 31
  0x0000 0x0003
  0x00f8 0xffff
0x0000 Version major Version minor
0x0004 Endianness Character set
0x0008 MAC address high
0x000c MAC address low
0x0010 Supported IP configuration
0x0014 Current IP configuration
0x0018  
0x001c
0x0020
0x0024 Current IP address
0x0028  
0x002c
0x0030
0x0034 Current subnet mask
0x0038  
0x003c
0x0040
0x0044 Current gateway
0x0048 Manufacturer name
0x004c
0x0050
0x0054
0x0058
0x005c
0x0060
0x0064
0x0068 Model name
0x006c
0x0070
0x0074
0x0078
0x007c
0x0080
0x0084
0x0088 Device version
0x008c
0x0090
0x0094
0x0098
0x009c
0x00a0
0x00a4
0x00a8 Manufacturer informations
0x00ac
0x00b0
0x00b4
0x00b8
0x00bc
0x00c0
0x00c0
0x00c4
0x00cc
0x00d0
0x00d4
0x00d8 User defined name
0x00dc
0x00e0
0x00e4
0x00e8
0x00ec
0x00f0
0x00f4

Read and write register

These packets are used for the read and write of 32 bit registers, accessed using 32 bit adresses. For the read command, a list of addresses is sent ot the client, which returns a list of 32 bit values. For the write command, a list of address/value pairs is sent to the client, which returns a list of 32 bit values.

Address and data are encoded in the packet as big endian values.

Read and write memory

Write memory packet data area consists in a 32 bit address, followed by the data to write. Client returns an acknowledge packet with the target address.

For read memory command, an address/size pair is sent to the device, which returns the content of the given memory area.