GVCP数据包
简述
设备通过监听GVCP端口(3956)等待GVCP数据包。当客户端(如:PC设备)向设备(如:相机)发送一个GVCP命令数据包时,设备会回复一个确认数据包。每个命令/确认对(command/acknowledge pair)都使用一个16 bit的值来标识(就相当于ID),这样可以检查确认数据包是否与之前发送的命令对应。0是这个标识符的错误值。如果在给定的超时时间后没有收到确认,将再次发送命令数据包,直到达到最大重试次数。
ArvGvcp API 提供了一系列处理GVCP包的函数。
GVCP数据包的内容由一个64 bit的头部组成,头部后面可能跟着一个数据字节数组(也可能没有,具体取决于GVCP数据包的类型)。多字节值采用大端编码。
| 0 | 15 | 16 | 31 | 32 | 47 | 48 | 63 |
| ArvGvcpPacketType | ArvGvcpCommand | Data size | Packet id | ||||
| Optional data | |||||||
| ... | |||||||
1 | //version: 0.8.31 |
发现设备
设备发现机制是通过客户端向GVCP端口广播一个发现GVCP数据包来实现的。每个可用的设备都会对这个发现数据包响应一个确认数据包,其中包含了设备的描述(设备名称、型号名称、制造商名称、MAC地址等)。
设备发现命令的数据包中,data size为0(这里估计是作者写错了,data size是248也就是0xf8),packet id为0xffff。
| 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 | ||||
| 0x00c4 | ||||
| 0x00c8 | ||||
| 0x00cc | ||||
| 0x00d0 | ||||
| 0x00d4 | ||||
| 0x00d8 | User defined name | |||
| 0x00dc | ||||
| 0x00e0 | ||||
| 0x00e4 | ||||
| 0x00e8 | ||||
| 0x00ec | ||||
| 0x00f0 | ||||
| 0x00f4 | ||||
1 | //version: 0.8.31 |
读写寄存器
这些数据包用于读写32位寄存器,通过32位地址访问。对于读命令,向客户端发送一个地址列表,客户端返回一个32位值的列表。对于写命令,向客户端发送一个地址/值对(address/value pair)的列表,客户端返回一个32位值的列表。
地址和数据在数据包中以大端值的形式编码。
读写内存
写内存数据包的数据区包含一个32位地址,后跟要写入的数据。客户端返回一个带有目标地址的确认包。
对于读内存命令,发送一个地址/大小对(address/size pair)到设备,设备返回给定内存区域的内容
参考文章
- 标题: GVCP数据包
- 作者: paw5zx
- 创建于 : 2024-11-01 11:58:27
- 更新于 : 2024-11-20 15:17:19
- 链接: https://paw5zx.github.io/aravis-GVCP-packets/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论