dcmi_get_fault_event接口原型
函数原型
int dcmi_get_fault_event(int card_id, int device_id, int timeout, struct dcmi_event_filter filter, struct dcmi_event *event)
功能说明
订阅设备故障或恢复事件的接口。
参数说明
参数名称 |
输入/输出 |
类型 |
描述 |
---|---|---|---|
card_id |
输入 |
int |
NPU管理单元ID,当前实际支持的ID通过dcmi_get_card_num_list接口获取。 |
device_id |
输入 |
int |
指定设备编号,通过dcmi_get_device_id_in_card接口获取。取值范围如下: NPU芯片:[0, device_id_max-1]。 |
timeout |
输入 |
int |
timeout >= 0:阻塞等待timeout(ms)时间,最大阻塞时间为30000ms(30s); timeout = -1:阻塞等待永不超时。 |
filter |
输入 |
struct dcmi_event_filter |
可只订阅满足指定条件的事件,过滤条件如下: #define DCMI_EVENT_FILTER_FLAG_EVENT_ID (1UL << 0) #define DCMI_EVENT_FILTER_FLAG_SERVERITY (1UL << 1) #define DCMI_EVENT_FILTER_FLAG_NODE_TYPE (1UL << 2) #define DCMI_MAX_EVENT_RESV_LENGTH 32 struct dcmi_event_filter { unsigned long long filter_flag; //可单独使能某个过滤条件,也可将全部条件同时使能,过滤条件如下: 0: 不使能过滤条件 DCMI_EVENT_FILTER_FLAG_EVENT_ID: 只接收指定的事件 DCMI_EVENT_FILTER_FLAG_SERVERITY: 只接收指定级别及以上的事件 DCMI_EVENT_FILTER_FLAG_NODE_TYPE: 只接收指定节点类型的事件 unsigned int event_id; //接收指定的事件:参考《健康管理故障定义》 unsigned char severity; //接收指定级别及以上的事件:见struct dcmi_dms_fault_event结构体中severity定义 unsigned char node_type; //接收指定节点类型的事件:参考《健康管理故障定义》 unsigned char resv[DCMI_MAX_EVENT_RESV_LENGTH]; //保留 }; |
event |
输出 |
struct dcmi_event * |
输出事件结构体定义如下: struct dcmi_event { enum dcmi_event_type type; //事件类型 union { struct dcmi_dms_fault_event dms_event; //事件内容 } event_t; }; type: 当前支持DCMI_DMS_FAULT_EVENT类型,枚举定义如下: enum dcmi_event_type { DCMI_DMS_FAULT_EVENT = 0, DCMI_EVENT_TYPE_MAX }; dms_event: DCMI_DMS_FAULT_EVENT类型对应的事件内容定义如下: #define DCMI_MAX_EVENT_NAME_LENGTH 256 #define DCMI_MAX_EVENT_DATA_LENGTH 32 #define DCMI_MAX_EVENT_RESV_LENGTH 32 struct dcmi_dms_fault_event { unsigned int event_id; //事件id unsigned short deviceid; //设备号 unsigned char node_type; //节点类型 unsigned char node_id; //节点id unsigned char sub_node_type; //子节点类型 unsigned char sub_node_id; //子节点id unsigned char severity; //事件级别 0:提示,1:次要,2:重要,3:紧急 unsigned char assertion; //事件类型 0:故障恢复,1:故障产生,2:一次性事件 int event_serial_num; //告警序列号 int notify_serial_num; //通知序列号 unsigned long long alarm_raised_time; //事件产生时间:自1970年1月1日0点0分0秒开始至今的毫秒数 char event_name[DCMI_MAX_EVENT_NAME_LENGTH]; //事件描述信息 char additional_info[DCMI_MAX_EVENT_DATA_LENGTH]; // 事件附加信息 unsigned char resv[DCMI_MAX_EVENT_RESV_LENGTH]; //保留 }; |
返回值
类型 |
描述 |
---|---|
int |
处理结果:
|
异常处理
无。
约束说明
- 该接口可获取故障产生时正在上报故障或恢复事件,不能获取已经产生的历史事件。
- 该接口支持多进程不支持多线程,最大支持64个进程同时调用。
Linux物理机 |
Linux物理机容器 |
|
root用户 |
运行用户组(非root用户) |
root用户 |
Y |
Y |
Y |
调用示例
… int ret = 0; int card_id = 0; int device_id = 0; int timeout = 1000; struct dcmi_event_filter filter = {0}; struct dcmi_event event = {0}; filter.filter_flag = DCMI_EVENT_FILTER_FLAG_SERVERITY | DCMI_EVENT_FILTER_FLAG_NODE_TYPE; filter.severity = 2; /* 只订阅2~3级别的事件 */ filter.node_type = 0x40; /* 只订阅模块ID为SOC类型的事件 */ ret = dcmi_get_fault_event(card_id, device_id, timeout, filter, &event); if (ret != DCMI_OK) { printf("dcmi_get_fault_event failed. err is %d\n", ret); } // todo …