下载
中文
注册

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

处理结果:

  • 成功:返回0。
  • 失败:返回码请参见返回码

异常处理

无。

约束说明

  • 该接口可获取故障产生时正在上报故障或恢复事件,不能获取已经产生的历史事件。
  • 该接口支持多进程不支持多线程,最大支持64个进程同时调用。
表1 部署场景

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
…