# 6 错误码介绍 ## 6.1 概述 `ag_driver` 在内部发生某些事件时,会通过回调函数通知调用者。 这些事件定义在 `ag_driver` 工程文件 `common/error_code.hpp` 中。 这些事件有三个级别:通知、警告和错误。每个事件有一个错误码,这里介绍错误码的含义。 ## 6.2 错误码 + **ERRCODE_SUCCESS** 正常状态。`ag_driver` 不会通知这个事件。 + **ERRCODE_PCAPEXIT** 播放 PCAP 文件时,`ag_driver` 在每次解析到文件结束时,通知调用者。 通过选项 `AGInputParam.pcap_repeat`,可以指定是否循环播放文件。如果是循环播放,`ag_driver` 报告事件 ERRCODE_PCAPREPEAT;如果不是,则报告事件 ERRCODE_PCAPEXIT。 + **ERRCODE_PCAPREPEAT** 请参考 ERRCODE_PCAPEXIT 的说明。 + **ERRCODE_MSOPTIMEOUT** `ag_driver` 持续等待和接收 MSOP Packet,如果在 1 秒内没有收到 MSOP Packet,`ag_driver` 报告事件 ERRCODE_MSOPTIMEOUT。 + **ERRCODE_NODIFOPRECV** 收到 MSOP Packet 时,会检查这些参数是否可用。如果在 1 秒内不可用,`ag_driver` 报告事件 ERRCODE_NODIFOPRECV。 对于 MEMS 雷达,标定工作在雷达内部已经完成,DIFOP Packet 不是必要的,所以 `ag_driver` 不会报告这个事件。 + **ERRCODE_WRONGMSOPLEN** 每一种雷达的 MSOP Packet 的包长是确定的,且包头开始位置包括若干标志字节。 `ag_driver` 接收到 MSOP Packet 后,先检查包长是否匹配,如果不匹配,则报告错误 ERRCODE_WRONGMSOPLEN,然后再检查标志字节,如果不匹配,则报告错误 ERRCODE_MSOPID。 + **ERRCODE_WRONGMSOPID** 请参考 ERRCODE_WRONGMSOPLEN 的说明。 + **ERRCODE_WRONGDIFOPLEN** 每一种雷达的 DIFOP Packet 的包长是确定的,且包头的开始位置包括若干标志字节。 `ag_driver` 接收到 DIFOP Packet 后,会先检查包长是否匹配,如果不匹配,则报告错误 ERRCODE_WRONGDIFOPLEN,然后再检查标志字节,如果不匹配,则报告错误 ERRCODE_DIFOPID。 + **ERRCODE_WRONGDIFOPID** 请参考 ERRCODE_WRONGDIFOPLEN 的说明。 + **ERRCODE_ZEROPOINTS** `ag_driver` 构建好点云后,通过回调函数返还给调用者。返还前,它检查点云是否为空(即一个点都没有),如果为空,则报告错误 ERRCODE_ZEROPOINTS。 + **ERRCODE_PKTBUFOVERFLOW** `ag_driver` 有两个线程:接收线程和处理线程。为了让接收线程尽快接收,防止丢包,两个线程之间有一个 MSOP/DIFOP Packet 队列,接收线程将 Packet 放入队列,处理线程从队列中取出 Packet。 如果处理线程太忙,来不及读出 Packet,则这个队列的长度会超过指定的阈值,这时`ag_driver` 会清空队列,并报告错误 ERRCODE_PKTBUFOVERFLOW。 + **ERRCODE_CLOUDOVERFLOW** `ag_driver` 从 MSOP Packet 解析点,并将它们分割成点云帧。 对于 MEMS 雷达,根据 Packet 的序列号分帧。 如果 Packet 中的数据有问题,不能触发分帧,则 `ag_driver` 将在当前点云实例中持续累积点,并持续消耗内存。为了避免这个问题,`ag_driver` 在收到解析 MSOP Packet 时,检查当前点云实例中点的数量,如果超过了指定的阈值,则报告错误 ERRCODE_CLOUDOVERFLOW。 + **ERRCODE_STARTBEFOREINIT** 使用 `ag_driver` 包括三个步骤:创建实例、初始化 Init() 和启动 Start()。使用者调用 Start() 之前必须先调用 Init(),如果没有遵循这个次序,则 `ag_driver` 报告错误 ERRCODE_STARTBEFOREINIT。 + **ERRCODE_PCAPWRONGPATH** 解析 PCAP 文件时,`ag_driver` 从读取 AGInputParam.pcap_path 指定的文件路径读取 PCAP 数据。如果这个文件打开失败,则 ag_driver 报告错误 ERRCODE_PCAPWRONGPATH。 + **ERRCODE_POINTCLOUDNULL** `ag_driver` 不负责分配点云实例,它通过回调函数从调用者获得空闲的点云实例,填充它,然后通过回调函数返还给调用者。 如果从调用者获得的点云实例无效,则 `ag_driver` 报告错误 ERRCODE_POINTCLOUDNULL。