dcmi_subscribe_fault_event接口原型
函数原型
int dcmi_subscribe_fault_event(int card_id, int device_id, struct dcmi_event_filter filter, dcmi_fault_event_callback handler)
功能说明
订阅设备故障或恢复事件的接口。
参数说明
参数名称 |
输入/输出 |
类型 |
描述 |
---|---|---|---|
card_id |
输入 |
int |
NPU管理单元ID,当前实际支持的ID通过dcmi_get_card_list接口获取。 |
device_id |
输入 |
int |
指定设备编号,通过dcmi_get_device_id_in_card接口获取。取值范围如下: NPU芯片:[0, device_id_max-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]; /* < reserve 32bytes */ }; |
handler |
输入 |
dcmi_fault_event_callback |
typedef void (*dcmi_fault_event_callback)(struct dcmi_event *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]; /**< reserve 32bytes */ }; |
返回值
类型 |
描述 |
---|---|
int |
处理结果:
|
异常处理
无。
约束说明
- 当card_id和device_id的取值都为-1时,支持订阅当前环境中所有设备的故障事件。
- 该接口可获取故障产生时正在上报故障或恢复事件,不能获取已经产生的历史事件。
- 该接口支持多进程不支持多线程,最大支持64个进程同时调用。同一个进程中,不能与dcmi_get_fault_event接口同时调用。
Linux物理机 |
Linux物理机容器 |
|
---|---|---|
root用户 |
运行用户组(非root用户) |
root用户 |
Y |
Y |
N |
调用示例
void event_handler(struct dcmi_event *event){ // todo } struct dcmi_event_filter filter; filter.filter_flag = DCMI_EVENT_FILTER_FLAG_SERVERITY | DCMI_EVENT_FILTER_FLAG_NODE_TYPE; filter.severity = 1; /* 只订阅2~3级别的事件 */ filter.node_type = 112; struct dcmi_event event = {0}; int dev_id, ret; …… ret = dcmi_subscribe_fault_event(card_id_list[card_id], device_id, filter, event_handler); if (ret != 0) { } else { }