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-02 14:08:33
- 链接: https://paw5zx.github.io/aravis-GVCP-packets/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
推荐阅读
评论