camera diag sample
功能概述
本文的demo sample主要描述当前camera相关外设诊断的当前状态,并提供自定义实现的方法及使用说明。
软件架构说明
本sample基于现已实现的camera诊断架构,libcam内的外设诊断功能对外设硬件状态进行监测,并支持将故障状态发送给MCU处理,或通过事件回调方式通知应用处理。
若打开诊断功能且使能诊断报告发送时,在libcam.so中会引用libdiaglib.so中的诊断发送API,将诊断信息发送给MCU,再由MCU侧进行处理。
若应用通过API注册了camera的事件回调处理函数,则会在故障状态变化时,通过该回调通知到应用进行处理。

camera外设诊断数据通路,默认支持应用注册的事件回调通知,但不发送诊断报告给MCU,此处以sample形式提供,用户可根据实际项目或应用需要,进行定制,本文提供相应的定制使用说明。
诊断功能说明
camera外设诊断在libcam内实现,默认已实现了部分Sensor/Serdes/Poc设备的诊断功能,其在内部进行了诊断功能预定义,并以diag_id作为唯一识别索引,由诊断功能实现及实际硬件使用情况决定其值,可描述一个指定外设硬件的相应故障,关于其定义可参见: :ref:`camera diag id `。
此处定义的camera外设诊断,在libcam主体库中实现了框架,具体的外设诊断则由各Sensor/Deserial等子库定制实现:按主体框架的要求及外设功能安全手册描述,定义诊断node并向主体框架注册,具体camera诊断的实现与开发,可参考: :doc:`Camera专题: 诊断实现与使用说明 `。
用户可根据实际应用需求,进行自定义定制开发与使用:
- 提供诊断功能的开关,默认打开状态,支持主动关闭诊断功能。
- 内部有默认的诊断信息隐射关系,可进行诊断信息的自定义诊断信息映射。
- 支持配置打开或关闭发送与回调功能。
代码位置与目录结构
本sample中的camera诊断代码位置如下:
========== ===================================================================================== ===========================================
\ 描述 备注
sample名称 camera diag
代码位置 {sdk_dir}hbre/camsys/libcam/src/diag
代码结构 diag camera诊断代码
├── cam_diag.c camera诊断主体框架
├── cam_diag_list.c 诊断链表实现
├── mon/ 诊断监测功能实现子目录
└── report/ 诊断报告功能实现子目录
========== ===================================================================================== ===========================================
API流程说明
以下为camera诊断中相关的API调用流程:

此处的 :ref:`hb_cam_set_event_callback ` 为可选调用,若应用需要处理camera诊断事件,可在初始化完成之后通过该API进行回调注册,之后在有故障发生或恢复时会通过该回调通知应用处理。
定制开发
本文中的camera外设诊断功能已在libcam库中实现,并默认打开编译集成,若有相应的定制需求,可参考下文进行开发。
诊断编译配置
该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的自恢复功能依赖诊断功能,若关闭诊断功能,则自恢复功能也将失效,更多可参见: :doc:`Camera专题: 自恢复功能使用说明 `。
此处libcam中的诊断报告默认使用诊断API进行诊断状态报告,因此在应用集成时若编译报错,需注意对该libdiaglib库的引用。
LIBS += -ldiaglib
关于诊断API的使用,更多可参考: :doc: `诊断API `。
上述诊断报告的发送,可通过配置头文件 src/inc/private/cam_config.h 中的宏 CAM_CONFIG_LIBDIAG_EN 关闭:
/* #define CAM_CONFIG_LIBDIAG_EN */
注释该宏 CAM_CONFIG_LIBDIAG_EN 的定义即可关闭诊断发送功能,关闭后将不会发送诊断信息到MCU,而由一行打印替代。
诊断信息隐射
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.01
map_info->module_id = base_id + DIAG_SUBTYPE(diag_id);
//coverity[misra_c_2012_rule_10_3_violation:SUPPRESS], ## violation reason SYSSW_V_10.3.01
map_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在满足项目需求的同时,还需满足 :doc:`J6X FUSA错误集成策略 ` 的要求,本文中的camera外设诊断在错误等级定义上都属于NCF错误。
诊断信息处理
默认支持诊断事件回调通知功能,若有处理需要,应用可通过 :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侧的处理实现示例,具体详见: :doc:`J6X FUSA错误集成策略 `。
测试使用
--------
诊断开关
若在编译集成时集成了诊断功能,则默认该诊断功能处于打开状态,若想在运行时也可以主动关闭诊断功能,有以下方式可关闭:
- 配置方式
{
"global": {
"diag_disable": 1
}
}
- 配置环境变量方式
{
"global": {
"env": {
"CAM_DIAG_DISABLE": "1"
}
}
}
- 直接环境变量方式
# 运行前执行,诊断功能: 0-默认开,1-关
export CAM_DIAG_DISABLE=1
上述方式都可以关闭诊断功能,其中配置方式多用于集成固化,环境变量方式多用于临时调试,请根据需要使用。
诊断报告与回调开关
在已打开诊断功能的前提下,对诊断报告的处理,支持报告给MCU与回调通知应用,默认为不报MCU但通知回调,若想修改该开关,有以下方式:
- 配置环境变量方式
{
"global": {
"env": {
"CAM_DIAG_REPORT": "1"
}
}
}
- 直接环境变量方式
# 运行前执行,选择诊断报告模式: 数字,默认0-不发送可回调,1-发送可回调,2-不发送不可回调,3-发送不可回调
export CAM_DIAG_REPORT=1
测试示例
此处以 1V测试场景 1V_OVX8B_RX0 示例,使用E参数打开回调测试,更多场景参见::doc:`camera sample `。
# 根据需要开关相应的报告模式,如 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 0
I/ (234391): [158931.593750][camera_diag_mon]:[mon_report_status_changed][239] status_changed diag_id 0x10f0ff, status 1,gpio 479, value 0x0
I/ (234391): [158932.156250][vin.c]:[vin_entity_put_buf][476]pipe 0, vin put buf vin hw id = 0
I/ (234391): [158932.187500][vin.c]:[vin_entity_put_buf][476]pipe 0, vin put buf vin hw id = 0
I/ (234391): [158932.234375][vin.c]:[vin_entity_put_buf][476]pipe 0, vin put buf vin hw id = 0
I/ (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 0x1
I/ (234391): [158931.703125][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101055 -> module_id 0xc015, event_id 0x0001
I/ (234391): [158931.703125][camera_diag_report]:[report_thread][189] > module_id: 0xc015, event_id: 0x0001, status: 1 send call
W/ (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 0xa
I/ (234391): [158931.703125][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x10f099 -> module_id 0xc019, event_id 0x000f
I/ (234391): [158931.703125][camera_diag_report]:[report_thread][189] > module_id: 0xc019, event_id: 0x000f, status: 1 send call
W/ (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 0x1
I/ (234391): [158931.703125][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101022 -> module_id 0xc012, event_id 0x0001
I/ (234391): [158931.703125][camera_diag_report]:[report_thread][189] > module_id: 0xc012, event_id: 0x0001, status: 1 send call
W/ (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 0x1
I/ (234391): [158931.703125][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101011 -> module_id 0xc011, event_id 0x0001
I/ (234391): [158931.703125][camera_diag_report]:[report_thread][189] > module_id: 0xc011, event_id: 0x0001, status: 1 send call
W/ (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 1
I/ (234391): [158940.906250][camera_diag_mon]:[mon_report_status_changed][239] status_changed diag_id 0x10f0ff, status 0,gpio 479, value 0x1
I/ (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 0x0
I/ (234391): [158940.906250][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101055 -> module_id 0xc015, event_id 0x0001
I/ (234391): [158940.906250][camera_diag_report]:[report_thread][189] > module_id: 0xc015, event_id: 0x0001, status: 0 send call
W/ (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 0x000f
I/ (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 0x2
I/ (234391): [158940.906250][camera_diag_report]:[report_thread][189] > module_id: 0xc019, event_id: 0x000f, status: 0 send call
W/ (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 0x0001
I/ (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 0x0
I/ (234391): [158940.906250][camera_diag_report]:[report_thread][189] > module_id: 0xc012, event_id: 0x0001, status: 0 send call
W/ (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 0x0
I/ (234391): [158940.906250][camera_diag_report]:[cam_diag_mapping][107] mapping: diag_id 0x101011 -> module_id 0xc011, event_id 0x0001
I/ (234391): [158940.906250][camera_diag_report]:[report_thread][189] > module_id: 0xc011, event_id: 0x0001, status: 0 send call
W/ (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)
...
注意事项
上述示例仅为单路接入使用在特定硬件上的使用及注入测试,且在诊断功能已实现的前提下进行的测试示例。
对于自定义硬件及场景,则需根据实际硬件进行相应的配置,并适配相应的测试注入命令进行功能验证。
