EXPERIMENT / 配套代码
ptz_ioctl.h
← 返回文章
struct ptz_axis_status {
__u32 running;
__u32 done;
__u32 remaining;
__u32 speed;
__s32 direction;
__u32 superseded; /* 此句柄保护的轴已被其他句柄发出的命令替换 */
__s64 position __attribute__((aligned(8)));
__s64 target __attribute__((aligned(8)));
__u64 generation __attribute__((aligned(8))); /* 已接受命令的序列号 */
};
struct ptz_status { struct ptz_axis_status axis[PTZ_AXES]; };
/* 位置记录的是已输出的半步数,不是传感器测得的实际轴位置。 */
struct ptz_set_position {
__u32 axis;
__s32 positive_direction; /* 位置增加对应的原始相序方向(+1/-1) */
__s64 position __attribute__((aligned(8)));
};
struct ptz_axis_position {
__s64 position __attribute__((aligned(8)));
__u32 reserved;
__s32 positive_direction;
};
struct ptz_positions { struct ptz_axis_position axis[PTZ_AXES]; };
struct ptz_travel {
__u32 axis;
__u32 max_steps; /* 范围为闭区间 [0, max_steps],上限必须非零 */
};
struct ptz_travels { __u32 max_steps[PTZ_AXES]; }; /* 零表示尚未配置 */
struct ptz_move_to {
__u32 axis;
__u32 speed; /* 单位:半步/秒;档位通过 ptz_speed_for_level() 换算 */
__s64 target __attribute__((aligned(8)));
};
/* 旧命令 1(MOVE)和 9(JOG)已移除,运动统一使用 MOVE_TO。 */
/* 内核归零状态命令 10/11 已移除。
* 可选的句柄序列保护:记录掩码指定轴的当前命令序列号。
* 其他句柄的修改仅使对应轴的保护失效。
* 修改命令涉及失效轴时,整体返回 ESTALE,不修改任何轴。
* 查询不受影响;STATUS.superseded 分别报告各轴的保护状态。
* 失效后需新建句柄重新保护,其他轴仍可使用。
* 此机制不阻止其他句柄替换运动命令或停止电机。
*/