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];//保留 }; |
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]; //保留 }; |
返回值
类型 |
描述 |
---|---|
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 { }