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.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 在满足项目需求的同时,还需满 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 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)
...
3.4 注意事项
上述示例仅为单路接入使用在特定硬件上的使用及注入测试,且在诊断功能已实现的前提下进行的测试示例。
对于自定义硬件及场景,则需根据实际硬件进行相应的配置,并适配相应的测试注入命令进行功能验证。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。