征程 6E camera diag sample

01 功能概述

本文的 demo sample 主要描述当前 camera 相关外设诊断的当前状态,并提供自定义实现的方法及使用说明。

1.1 软件架构说明

本 sample 基于现已实现的 camera 诊断架构,libcam 内的外设诊断功能对外设硬件状态进行监测,并支持将故障状态发送给 MCU 处理,或通过事件回调方式通知应用处理。

若打开诊断功能且使能诊断报告发送时,在 libcam.so 中会引用 libdiaglib.so 中的诊断发送 API,将诊断信息发送给 MCU,再由 MCU 侧进行处理。

若应用通过 API 注册了 camera 的事件回调处理函数,则会在故障状态变化时,通过该回调通知到应用进行处理。

Camera 外设诊断数据通路,默认支持应用注册的事件回调通知,但不发送诊断报告给 MCU,此处以 sample 形式提供,用户可根据实际项目或应用需要,进行定制,本文提供相应的定制使用说明。

1.2 诊断功能说明

Camera 外设诊断在 libcam 内实现,默认已实现了部分 Sensor/Serdes/Poc 设备的诊断功能,其在内部进行了诊断功能预定义,并以 diag_id 作为唯一识别索引,由诊断功能实现及实际硬件使用情况决定其值,可描述一个指定外设硬件的相应故障,关于其定义可参见: :ref:camera diag id。

此处定义的 camera 外设诊断,在 libcam 主体库中实现了框架,具体的外设诊断则由各 Sensor/Deserial 等子库定制实现:按主体框架的要求及外设功能安全手册描述,定义诊断 node 并向主体框架注册。

用户可根据实际应用需求,进行自定义定制开发与使用:

  • 提供诊断功能的开关,默认打开状态,支持主动关闭诊断功能。
  • 内部有默认的诊断信息隐射关系,可进行诊断信息的自定义诊断信息映射。
  • 支持配置打开或关闭发送与回调功能。

1.3 代码位置与目录结构

API 流程说明

以下为 camera 诊断中相关的 API 调用流程:

此处的 :ref:hb_cam_set_event_callback 为可选调用,若应用需要处理 camera 诊断事件,可在初始化完成之后通过该 API 进行回调注册,之后在有故障发生或恢复时会通过该回调通知应用处理。

02 定制开发

本文中的 camera 外设诊断功能已在 libcam 库中实现,并默认打开编译集成,若有相应的定制需求,可参考下文进行开发。

2.1 诊断编译配置

该 camera 外设诊断功能由 libcam 中 Kconfig 的编译配置选项 HB_PKG_LIBCAM_DIAG 决定是否编译使能,其默认值为 y,集成使用,若需要关闭该功能可按下操作:

  # 在配置文件(此处为默认,请按项目实际使用选择)中:# horizon/j6/defconfig/j6e_debug_defconfig# 默认为y,可配置n关闭编译集成:export HB_PKG_LIBCAM_DIAG=n

在关闭该诊断功能之后,src/diag 目录中的代码则直接不会编译集成到 libcam 库中,关闭诊断功能不影响正常数据处理功能。

camera 的自恢复功能依赖诊断功能,若关闭诊断功能,则自恢复功能也将失效。

此处 libcam 中的诊断报告默认使用诊断 API 进行诊断状态报告,因此在应用集成时若编译报错,需注意对该 libdiaglib 库的引用。

LIBS += -ldiaglib

上述诊断报告的发送,可通过配置头文件 src/inc/private/cam_config.h 中的宏 CAM_CONFIG_LIBDIAG_EN 关闭:

/* #define CAM_CONFIG_LIBDIAG_EN */

注释该宏 CAM_CONFIG_LIBDIAG_EN 的定义即可关闭诊断发送功能,关闭后将不会发送诊断信息到 MCU,而由一行打印替代。

2.2 诊断信息映射

camera 诊断内部由 diag_id 唯一定义,在报告给 MCU 或用户时,可根据实际需要进行映射,将其转换为 module_id/event_id 进行报告。

目前内默认有一组映射关系,详见: :ref:诊断报告映射关系说明 。

该组默认的映射关系由 2 部分组成,用户可根据实际需要进行修改:按诊断类型定义了 module_id 的 BASE 值,定义在 src/diag/report/report.h 内:

#define CAM_DIAG_SERDES_BASE      0xC010u
#define CAM_DIAG_SENSOR_BASE      0xC000u
#define CAM_DIAG_POC_BASE        0xC020u

若要完全修改映射的对应关系,也可以直接修改 src/diag/report/report.c 内的 cam_diag_mapping() 函数实现,目前默认为:

int32_t cam_diag_mapping(uint32_t diag_id, cam_diag_map_s *map_info, void *spec_mapping)
{
uint16_t base_id = 0;
if (spec_mapping != NULL) {
vin_info("use spec mapping function\n");
return RET_OK;
}
/* modify those mapping code if need /
*      /* user-defined mapping start /
*      /* here is default camera diag mapping: diag_id -> module_id / event_id /if (DIAG_DEVTYPE(diag_id) == (uint32_t)CAM_DES) {base_id = CAM_DIAG_SERDES_BASE;} else if (DIAG_DEVTYPE(diag_id) == (uint32_t)CAM_SNR) {base_id = CAM_DIAG_SENSOR_BASE;} else if (DIAG_DEVTYPE(diag_id) == (uint32_t)CAM_POC) {base_id = CAM_DIAG_POC_BASE;} else {vin_err("invalid devtype %d, diag_id 0x%x\n",DIAG_DEVTYPE(diag_id), diag_id);return -HBN_STATUS_CAM_NOT_SUPPORT;}//coverity[misra_c_2012_rule_10_3_violation:SUPPRESS], ## violation reason SYSSW_V_10.3.01map_info->module_id = base_id + DIAG_SUBTYPE(diag_id);//coverity[misra_c_2012_rule_10_3_violation:SUPPRESS], ## violation reason SYSSW_V_10.3.01map_info->event_id = DIAG_DEVINDEX(diag_id);
*      /* user-defined mapping end */
vin_info("mapping: diag_id 0x%x -> module_id 0x%04x, event_id 0x%04x\n",
diag_id, map_info->module_id, map_info->event_id);
return RET_OK;
}

此处只需要按需要重新定义 diag_id 与 module_id/event_id 的映射关系,并在上述函数中实现 该转换即可,之后的诊断发送与回调则会使用转换后的 module_id/event_id进行处理。

此处自定义并转换的 module_id 及 event_id 在满足项目需求的同时,还需满 J6X FUSA 错误集成策略的要求,本文中的 camera 外设诊断在错误等级定义上都属于 NCF 错误。

2.3 诊断信息处理

默认支持诊断事件回调通知功能,若有处理需要,应用可通过 :ref:hb_cam_set_event_callback 注册回调函数之后即可在诊断故障或恢复时进行相应的处理,示例如下:该回调函数是按 port 注册的,支持对不同通路使用不同的回调处理函数,若通路不注册该回调,则不会收到处理通知。

static void camera_diag_event_callback(cam_event_t* fault_info)
{
if (fault_info == NULL) {
pr_err("** camera event cb: fault_info NULL\n");
return;
}
pr_info("** p%d %s event: module_id=0x%04x event_id=0x%04x status=%d\n",
fault_info->port, (fault_info->event_type == HB_CAM_EVENT_DIAG) ? "diag" : "unknown",
fault_info->module_id, fault_info->event_id, fault_info->status);
}
static int32_t camera_diag_event_cb_init(void)
{
int32_t ret;
uint32_t i;
if (!cam_diag_event)
return 0;
pr_info("hb_cam_set_event_callback() ...\n");
for (i = 0; i < HB_VIO_PIPELINE_MAX; i++) {
if (!vflow_pipe_isvalid(i))
continue;
ret = hb_cam_set_event_callback(i, camera_diag_event_callback);
if (ret < 0) {
pr_err("hb_cam_set_event_callback(%d) error %d\n", i, ret);
return ret;
}
}
return ret;
}

若打开诊断发送功能,在出现故障时,该诊断信息会被发送到 MCU 侧,由 MCU 侧进行处理,此处在发送的信息中已将 module_id 与 event_id 分别按 2 字节(LSB)信息填充在 payload 中,处理时可用。

static Std_ReturnType Call_CustomSelfFaultHandle(uint16 ModuleId, uint16 EventId, uint16 EventLevel, uint16 EventState, uint8 *Payload, uint16 PayloadLen)
{
Std_ReturnType RetVal = (Std_ReturnType)E_OK;
/* Here, the user parses the payload information */
return RetVal;
}

上为 MCU 侧的处理实现示例。

03 测试使用

3.1 诊断开关

若在编译集成时集成了诊断功能,则默认该诊断功能处于打开状态,若想在运行时也可以主动关闭诊断功能,有以下方式可关闭:

  • 配置方式
  {"global": {"diag_disable": 1}}
  • 配置环境变量方式
  {"global": {"env": {"CAM_DIAG_DISABLE": "1"}}}
  • 直接环境变量方式
  # 运行前执行,诊断功能: 0-默认开,1-关export CAM_DIAG_DISABLE=1

上述方式都可以关闭诊断功能,其中配置方式多用于集成固化,环境变量方式多用于临时调试,请根据需要使用。

3.2 诊断报告与回调开关

在已打开诊断功能的前提下,对诊断报告的处理,支持报告给 MCU 与回调通知应用,默认为不报 MCU 但通知回调,若想修改该开关,有以下方式:

  • 配置环境变量方式
  {"global": {"env": {"CAM_DIAG_REPORT": "1"}}}
  • 直接环境变量方式
  # 运行前执行,选择诊断报告模式: 数字,默认0-不发送可回调,1-发送可回调,2-不发送不可回调,3-发送不可回调export CAM_DIAG_REPORT=1  

3.3 测试示例

此处以 1V 测试场景 1V_OVX8B_RX0 示例,使用 E 参数打开回调测试。

 # 根据需要开关相应的报告模式,如 1-发送可回调:export CAM_DIAG_REPORT=1# 之后运行测试case:/app/sample/S83_Sample/S83E04_Module/camera_sample/scripts/camera_sample.sh matrix 1V_OVX8B_RX0 E r100# 或直接命令行:/app/sample/S83_Sample/S83E04_Module/camera_sample/bin/camera_sample -c /app/sample/S83_Sample/S83E04_Module/camera_sample/cfg/case_matrix/1V_OVX8B_RX0/hb_j6dev.json -v /app/sample/S83_Sample/S83E04_Module/camera_sample/cfg/case_matrix/1V_OVX8B_RX0/vpm_config.json -E -r 100

在上述 case 运行过程中,可操作寄存器进行错误注入及清除,此处仅为一种方式的示例,更多错误注入方式请参考外设手册:

# 错误注入:i2ctransfer -y -f 0 w3@0x40 0x00 0x29 0x10# 延时:sleep 1# 错误恢复:i2ctransfer -y -f 0 w3@0x40 0x00 0x29 0x08

测试有 log 如下,可看到有几个诊断事件的错误及恢复信息报出:

  [camera_sample]:cam_cfg_file = /app/sample/S83_Sample/S83E04_Module/camera_sample/cfg/case_matrix/1V_OVX8B_RX0/hb_j6dev.json[camera_sample]:vio_cfg_file = /app/sample/S83_Sample/S83E04_Module/camera_sample/cfg/case_matrix/1V_OVX8B_RX0/vpm_config.json[camera_sample]:vflow_type = 0x1000000[camera_sample]:cam_diag_event = 1[camera_sample]:run_time = 100[camera_sample]:camera_sample start[camera_sample]:hb_vio_init(/app/sample/S83_Sample/S83E04_Module/camera_sample/cfg/case_matrix/1V_OVX8B_RX0/vpm_config.json) ...[camera_sample]:hb_cam_init(0, /app/sample/S83_Sample/S83E04_Module/camera_sample/cfg/case_matrix/1V_OVX8B_RX0/hb_j6dev.json) ...[camera_sample]: auto get 1 pipe mask 0x1 good 0xffffffff[camera_sample]:hb_cam_set_event_callback() ...[camera_sample]:hb_vio_start_pipeline(0) ...[camera_sample]:thread cam0:CIM_RAW work[camera_sample]:camera flow0:t24-CIM_RAW frame 25: fps 25.00[camera_sample]:camera flow0:t24-CIM_RAW frame 50: fps 25.00[camera_sample]:camera flow0:t24-CIM_RAW frame 75: fps 25.00[camera_sample]:** p0 diag event: module_id=0xc015 event_id=0x0001 status=1[camera_sample]:** p0 diag event: module_id=0xc019 event_id=0x000f status=1[camera_sample]:** p0 diag event: module_id=0xc012 event_id=0x0001 status=1[camera_sample]:** p0 diag event: module_id=0xc011 event_id=0x0001 status=1[camera_sample]:camera flow0:t24-CIM_RAW frame 99: fps 24.00[camera_sample]:** p0 diag event: module_id=0xc015 event_id=0x0001 status=0[camera_sample]:** p0 diag event: module_id=0xc019 event_id=0x000f status=0[camera_sample]:** p0 diag event: module_id=0xc012 event_id=0x0001 status=0[camera_sample]:** p0 diag event: module_id=0xc011 event_id=0x0001 status=0[camera_sample]:camera flow0:t24-CIM_RAW frame 123: fps 24.00[camera_sample]:camera flow0:t24-CIM_RAW frame 148: fps 25.00[camera_sample]:camera flow0:t24-CIM_RAW frame 173: fps 25.00[camera_sample]:camera flow0:t24-CIM_RAW frame 198: fps 25.00...

同时 logcat 中也有相关的诊断与报告等信息(此处仅为示例展示,若中间有 log 打印信息变化不一定严格对应):

  I/    (234391): [158931.593750][camera_diag_gpioe]:[gpioe_epoll_thread][285] egpio 479 status is 0I/    (234391): [158931.593750][camera_diag_mon]:[mon_report_status_changed][239] status_changed diag_id 0x10f0ff, status 1,gpio 479, value 0x0I/    (234391): [158932.156250][vin.c]:[vin_entity_put_buf][476]pipe 0, vin put buf vin hw id = 0I/    (234391): [158932.187500][vin.c]:[vin_entity_put_buf][476]pipe 0, vin put buf vin hw id = 0I/    (234391): [158932.234375][vin.c]:[vin_entity_put_buf][476]pipe 0, vin put buf vin hw id = 0I/    (234391): [158931.703125][camera_diag_mon]:[mon_report_status_changed][230] status_changed diag_id 0x101055, status 32,bus 0, dev 0x29, reg 0x45, value 0x1I/    (234391): [158931.703125][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101055 -> module_id 0xc015, event_id 0x0001I/    (234391): [158931.703125][camera_diag_report]:[report_thread][189] > module_id: 0xc015, event_id: 0x0001, status: 1 send callW/    (234391): [A][time_3 :158931 s, 691 ms] [U] stl_service Rcv_Occur_msg: 49173-1-NCF-Occur (65535, 65535, 65535) I/    (234391): [158931.703125][camera_diag_mon]:[mon_report_status_changed][230] status_changed diag_id 0x10f099, status 512,bus 0, dev 0x29, reg 0x2a, value 0xaI/    (234391): [158931.703125][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x10f099 -> module_id 0xc019, event_id 0x000fI/    (234391): [158931.703125][camera_diag_report]:[report_thread][189] > module_id: 0xc019, event_id: 0x000f, status: 1 send callW/    (234391): [A][time_3 :158931 s, 691 ms] [U] stl_service Rcv_Occur_msg: 49177-15-NCF-Occur (65535, 65535, 65535) I/    (234391): [158931.703125][camera_diag_mon]:[mon_report_status_changed][230] status_changed diag_id 0x101022, status 4,bus 0, dev 0x29, reg 0x2c, value 0x1I/    (234391): [158931.703125][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101022 -> module_id 0xc012, event_id 0x0001I/    (234391): [158931.703125][camera_diag_report]:[report_thread][189] > module_id: 0xc012, event_id: 0x0001, status: 1 send callW/    (234391): [A][time_3 :158931 s, 693 ms] [U] stl_service Rcv_Occur_msg: 49170-1-NCF-Occur (65535, 65535, 65535) I/    (234391): [158931.703125][camera_diag_mon]:[mon_report_status_changed][230] status_changed diag_id 0x101011, status 2,bus 0, dev 0x29, reg 0x26, value 0x1I/    (234391): [158931.703125][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101011 -> module_id 0xc011, event_id 0x0001I/    (234391): [158931.703125][camera_diag_report]:[report_thread][189] > module_id: 0xc011, event_id: 0x0001, status: 1 send callW/    (234391): [A][time_3 :158931 s, 694 ms] [U] stl_service Rcv_Occur_msg: 49169-1-NCF-Occur (65535, 65535, 65535) I/    (234391): [158931.703125][camera_diag_gpioe]:[gpioe_epoll_thread][285] egpio 479 status is 0...I/    (234391): [158940.906250][camera_diag_gpioe]:[gpioe_epoll_thread][285] egpio 479 status is 1I/    (234391): [158940.906250][camera_diag_mon]:[mon_report_status_changed][239] status_changed diag_id 0x10f0ff, status 0,gpio 479, value 0x1I/    (234391): [158940.906250][camera_diag_mon]:[mon_report_status_changed][230] status_changed diag_id 0x101055, status 0,bus 0, dev 0x29, reg 0x45, value 0x0I/    (234391): [158940.906250][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101055 -> module_id 0xc015, event_id 0x0001I/    (234391): [158940.906250][camera_diag_report]:[report_thread][189] > module_id: 0xc015, event_id: 0x0001, status: 0 send callW/    (234391): [A][time_7 :158940 s, 901 ms] [U] stl_service Rcv_Fixed_msg: 49173-1-NCF-Fixed (65535, 65535, 65535) I/    (234391): [158940.906250][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x10f099 -> module_id 0xc019, event_id 0x000fI/    (234391): [158940.906250][camera_diag_mon]:[mon_report_status_changed][230] status_changed diag_id 0x10f099, status 0,bus 0, dev 0x29, reg 0x2a, value 0x2I/    (234391): [158940.906250][camera_diag_report]:[report_thread][189] > module_id: 0xc019, event_id: 0x000f, status: 0 send callW/    (234391): [A][time_7 :158940 s, 901 ms] [U] stl_service Rcv_Fixed_msg: 49177-15-NCF-Fixed (65535, 65535, 65535) I/    (234391): [158940.906250][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101022 -> module_id 0xc012, event_id 0x0001I/    (234391): [158940.906250][camera_diag_mon]:[mon_report_status_changed][230] status_changed diag_id 0x101022, status 0,bus 0, dev 0x29, reg 0x2c, value 0x0I/    (234391): [158940.906250][camera_diag_report]:[report_thread][189] > module_id: 0xc012, event_id: 0x0001, status: 0 send callW/    (234391): [A][time_7 :158940 s, 901 ms] [U] stl_service Rcv_Fixed_msg: 49170-1-NCF-Fixed (65535, 65535, 65535) I/    (234391): [158940.906250][camera_diag_mon]:[mon_report_status_changed][230] status_changed diag_id 0x101011, status 0,bus 0, dev 0x29, reg 0x26, value 0x0I/    (234391): [158940.906250][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101011 -> module_id 0xc011, event_id 0x0001I/    (234391): [158940.906250][camera_diag_report]:[report_thread][189] > module_id: 0xc011, event_id: 0x0001, status: 0 send callW/    (234391): [A][time_7 :158940 s, 902 ms] [U] stl_service Rcv_Fixed_msg: 49169-1-NCF-Fixed (65535, 65535, 65535) ...

并在 dmesg 中收到相应的诊断信息(此处仅为示例展示,若中间有 log 打印信息变化不一定严格对应):

  [159372.279022] [A][time_2 :159371 s, 700 ms] [K] Rcv_Occur_msg: 49173-1-NCF-Occur (65535, 65535, 65535)payload(21 192 1 0 0 0 0 0 0 0 0 0 0 0 0 0)[159372.279085] [A][time_6 :159371 s, 700 ms] [U] Ack from Rcore recv_Occur_msg: 49173-1-NCF-Occur (65535, 65535, 65535)[159372.279099] [diag_ncf_event_ipc_send:444]hb_ipc_send succ! moduleid:49173, eventid:1[159372.279834] [A][time_2 :159371 s, 701 ms] [K] Rcv_Occur_msg: 49177-15-NCF-Occur (65535, 65535, 65535)payload(25 192 15 0 0 0 0 0 0 0 0 0 0 0 0 0)[159372.279889] [A][time_6 :159371 s, 701 ms] [U] Ack from Rcore recv_Occur_msg: 49177-15-NCF-Occur (65535, 65535, 65535)[159372.279899] [diag_ncf_event_ipc_send:444]hb_ipc_send succ! moduleid:49177, eventid:15[159372.281743] [A][time_2 :159371 s, 703 ms] [K] Rcv_Occur_msg: 49170-1-NCF-Occur (65535, 65535, 65535)payload(18 192 1 0 0 0 0 0 0 0 0 0 0 0 0 0)[159372.281800] [A][time_6 :159371 s, 703 ms] [U] Ack from Rcore recv_Occur_msg: 49170-1-NCF-Occur (65535, 65535, 65535)[159372.281811] [diag_ncf_event_ipc_send:444]hb_ipc_send succ! moduleid:49170, eventid:1[159372.282172] [A][time_2 :159371 s, 703 ms] [K] Rcv_Occur_msg: 49169-1-NCF-Occur (65535, 65535, 65535)payload(17 192 1 0 0 0 0 0 0 0 0 0 0 0 0 0)[159372.282235] [A][time_6 :159371 s, 704 ms] [U] Ack from Rcore recv_Occur_msg: 49169-1-NCF-Occur (65535, 65535, 65535)[159372.282247] [diag_ncf_event_ipc_send:444]hb_ipc_send succ! moduleid:49169, eventid:1...[159373.286246] [A][time_5 :159372 s, 708 ms] [K] Rcv_Fixed_msg: 49173-1-NCF-Fixed (65535, 65535, 65535)payload(21 192 1 0 0 0 0 0 0 0 0 0 0 0 0 0)[159373.286322] [A][time_10 :159372 s, 708 ms] [U] Ack from Rcore recv_Fixed_msg: 49173-1-NCF-Fixed (65535, 65535, 65535)[159373.286336] [diag_ncf_event_ipc_send:444]hb_ipc_send succ! moduleid:49173, eventid:1[159373.286689] [A][time_5 :159372 s, 708 ms] [K] Rcv_Fixed_msg: 49177-15-NCF-Fixed (65535, 65535, 65535)payload(25 192 15 0 0 0 0 0 0 0 0 0 0 0 0 0)[159373.286748] [A][time_10 :159372 s, 708 ms] [U] Ack from Rcore recv_Fixed_msg: 49177-15-NCF-Fixed (65535, 65535, 65535)[159373.286758] [diag_ncf_event_ipc_send:444]hb_ipc_send succ! moduleid:49177, eventid:15[159373.286910] [A][time_5 :159372 s, 708 ms] [K] Rcv_Fixed_msg: 49170-1-NCF-Fixed (65535, 65535, 65535)payload(18 192 1 0 0 0 0 0 0 0 0 0 0 0 0 0)[159373.286971] [A][time_10 :159372 s, 708 ms] [U] Ack from Rcore recv_Fixed_msg: 49170-1-NCF-Fixed (65535, 65535, 65535)[159373.286982] [diag_ncf_event_ipc_send:444]hb_ipc_send succ! moduleid:49170, eventid:1[159373.287136] [A][time_5 :159372 s, 708 ms] [K] Rcv_Fixed_msg: 49169-1-NCF-Fixed (65535, 65535, 65535)payload(17 192 1 0 0 0 0 0 0 0 0 0 0 0 0 0)[159373.287190] [A][time_10 :159372 s, 708 ms] [U] Ack from Rcore recv_Fixed_msg: 49169-1-NCF-Fixed (65535, 65535, 65535)[159373.287202] [diag_ncf_event_ipc_send:444]hb_ipc_send succ! moduleid:49169, eventid:1....

同时 MCU 侧会收到相应的诊断报告信息(此处仅为示例展示,若中间有log打印信息变化不一定严格对应):

  [0159375.392403 0][M][time_5: 159371 s, 700 ms] Recv user ncf event: 49173-1-Occur (65535, 65535, 65535), Payload(21-192-01-00 00-00-00-00 00-00-00-00 00-00-00-00)[0159375.394013 0][M][time_5: 159371 s, 701 ms] Recv user ncf event: 49177-15-Occur (65535, 65535, 65535), Payload(25-192-15-00 00-00-00-00 00-00-00-00 00-00-00-00)[0159375.395815 0][M][time_5: 159371 s, 703 ms] Recv user ncf event: 49170-1-Occur (65535, 65535, 65535), Payload(18-192-01-00 00-00-00-00 00-00-00-00 00-00-00-00)[0159375.412514 0][M][time_5: 159371 s, 703 ms] Recv user ncf event: 49169-1-Occur (65535, 65535, 65535), Payload(17-192-01-00 00-00-00-00 00-00-00-00 00-00-00-00)...[0159376.398015 0][M][time_9: 159372 s, 708 ms] Recv user ncf event: 49173-1-Fixed (65535, 65535, 65535), Payload(21-192-01-00 00-00-00-00 00-00-00-00 00-00-00-00)[0159376.399626 0][M][time_9: 159372 s, 708 ms] Recv user ncf event: 49177-15-Fixed (65535, 65535, 65535), Payload(25-192-15-00 00-00-00-00 00-00-00-00 00-00-00-00)[0159376.401427 0][M][time_9: 159372 s, 708 ms] Recv user ncf event: 49170-1-Fixed (65535, 65535, 65535), Payload(18-192-01-00 00-00-00-00 00-00-00-00 00-00-00-00)[0159376.418117 0][M][time_9: 159372 s, 708 ms] Recv user ncf event: 49169-1-Fixed (65535, 65535, 65535), Payload(17-192-01-00 00-00-00-00 00-00-00-00 00-00-00-00)...

3.4 注意事项

上述示例仅为单路接入使用在特定硬件上的使用及注入测试,且在诊断功能已实现的前提下进行的测试示例。

对于自定义硬件及场景,则需根据实际硬件进行相应的配置,并适配相应的测试注入命令进行功能验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/827094.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实时数仓及olap可视化构建(基于mysql,将maxwell改成seatunnel可以快速达成异构数据源实时同步)

1. OLAP可视化实现(需要提前整合版本)Linux121 Linux122 Linux123jupyter✔spark ✔ ✔ ✔python3+SuperSet3.0✔hive✔ClinckHouse✔Kafka ✔ ✔ ✔Phoenix ✔DataX ✔maxwell✔Hadoop ✔ ✔ ✔MySQL✔ZK ✔ ✔ ✔HBASE ✔ ✔ ✔1.1 安装Vmware,安装虚拟机集群 1.1.1 安装 …

AI运动小程序开发常见问题集锦二

截止到现在写博文时,我们的AI运动识别小程序插件已经迭代了23个版本,成功应用于健身、体育、体测、AR互动等场景;为了让正在集成或者计划进行功能扩展优化的用户,少走弯路、投入更少的开发资源,针对近期的咨询问题,我们又归集了一些常见问题,供大家参考。一、计时、计数…

synchronized的monitor监视器

public class T {@SneakyThrowspublic static void main(String[] args) {System.out.println("此行后加锁 monitorenter");synchronized (T.class){System.out.println("hello monitor");}System.out.println("此行前释放锁 monitorexit");}}反…

31 计算机安全

计算机安全是保护系统和数据的,完整,保密,可用 保密:有权限的人才能读取数据;泄露信息就是攻击保密性(看不看得到)---窃取信息 完整性:能够修改数据,知道密码进入操作-----------------------------------获取权限 可用性:有权限的人应该能随时访问,黑客发大量请求到…

大话USB PD快充电源功率“协商”

啥叫USB PD快充技术? USB PD快充技术就是通过USB接口对对USB设备进行快速充电的一项技术。 由于USB技术的发展,特别的USB TYPE-C接口的广泛应用,基于USB TYPE-C接口的USB PD快充技术越来越成为主流。 使用USB TYPE-C接口的技术可以给谁充电?可以给我们的手机充电 可以给笔记…

瑞芯微RK3568开发板Linux编译报错404怎么办触觉智能教你轻松解决

本文介绍瑞芯微RK3568主板/开发板SDK编译流程和编译报错的解决方法,使用触觉智能EVB3568鸿蒙开发板演示,具有丰富的视频输入输出接口(HDMI/eDP/MIPI/LVDS) 与多种高速接口(千兆网口/PCIe/SATA/CAN等)。近期,触觉智能即将发布RK3568系列开源鸿蒙OpenHarmony5.0系统固件,敬…

网络流建图汇总

Dining G 一个点有两重限制,将点放中间,两边分别放两个限制,中间点点拆点连 1 表示限制 CTSC1999 家园 / 星际转移问题 时间限制可以分层图,分层图不需二分,直接一层层建即可 企鹅游行 这种有限制的拆点就完了。 猪 时序问题按照时间建即可。 一般出现调整的可以考虑把调整…

UE中基于FluidFlux插件实现洪水数据接入的一种思路

这是FluidFlux插件文档链接: http://imaginaryblend.com/2021/09/26/fluid-flux/ FluidFlux插件原本可以在编辑器模式下,通过右键SimulationDomain保存模拟状态,这个模拟状态保存后是一个资产文件以及三张纹理图Ground,Height,Velocity。SimulationDomain中有一个俯视的场景…

3 有限体积法:推导方程

3 有限体积法:推导方程 基本原理和目标 (注意:这一节看不懂没关系,在后面的推导中会慢慢用到)质量、动量和能量的守恒流体的质量守恒 动量改变的速度 = 一个流体粒子上受到的力的总和(牛顿第二定律) 能量改变的速度 = 一个流体粒子吸收的热量,和作用在其上的功的总和(…

安全通道占用识别

安全通道占用识别系统利用现场已有的监控摄像头,安全通道占用识别通过先进的AI算法,对消防通道/安全通道进行实时监测。一旦监测到通道被占用、堵塞的情况,系统会立即发出告警,并通过多种方式将告警信息迅速推送给相关管理人员。这不仅极大提升了监控区域的管控效率,更为重…

【征程 6 工具链性能分析与优化-2】模型性能优化建议

01 引言为了应对低、中、高阶智驾场景,以及当前 AI 模型在工业界的应用趋势,地平线推出了征程 6 系列芯片。 在软硬件架构方面,征程 6 不仅保持了对传统 CNN 网络的高效支持能力,还强化了对 Transformer 类型网络的支持,主要表现为大幅强化了对逐点计算、数据搬运的能力。…

工人安全绳穿戴识别系统

工人安全绳穿戴识别系统采用视频图像自动识别的形式,工人安全绳穿戴识别系统通过安装在作业区域的监控摄像头,一旦发现工人高空作业未佩戴安全带的情况,系统可以立即发出告警,相关人员可以迅速采取措施,防止事故的发生。工人安全绳穿戴识别系统的应用还构成了对作业人员的…