增加事件驱动和业务回滚处理方式
This commit is contained in:
110
app/event_trigger.c
Normal file
110
app/event_trigger.c
Normal file
@ -0,0 +1,110 @@
|
||||
/*
|
||||
* event_trigger.c
|
||||
*
|
||||
* Created on: 2026-03-04
|
||||
* Author: RT-Thread
|
||||
*
|
||||
* 功能: 事件触发机制模块实现
|
||||
* 依赖: RT-Thread Nano, osal, event_queue
|
||||
* 跨平台适配: 基于RT-Thread Nano,使用标准API
|
||||
*/
|
||||
|
||||
#include <rtthread.h>
|
||||
#include "osal.h"
|
||||
#include "event_queue.h"
|
||||
|
||||
/**
|
||||
* @brief 触发事件
|
||||
* @param type 事件类型
|
||||
* @param priority 事件优先级
|
||||
* @param data 事件数据
|
||||
* @param data_size 事件数据大小
|
||||
* @return 0 成功,非0 失败
|
||||
*/
|
||||
int event_trigger(event_type_t type, event_priority_t priority, void *data, size_t data_size)
|
||||
{
|
||||
event_t event;
|
||||
|
||||
event.type = type;
|
||||
event.priority = priority;
|
||||
event.data = data;
|
||||
event.data_size = data_size;
|
||||
event.timestamp = rt_tick_get();
|
||||
|
||||
return event_queue_push(&event);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 定时器回调函数
|
||||
* @param parameter 定时器参数
|
||||
*/
|
||||
static void timer_callback(void *parameter)
|
||||
{
|
||||
event_type_t event_type = (event_type_t)parameter;
|
||||
event_trigger(event_type, EVENT_PRIORITY_NORMAL, NULL, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 创建定时器事件
|
||||
* @param type 事件类型
|
||||
* @param interval 定时器间隔,单位ms
|
||||
* @return 定时器句柄,失败返回NULL
|
||||
*/
|
||||
osal_timer_t event_timer_create(event_type_t type, int interval)
|
||||
{
|
||||
osal_timer_t timer;
|
||||
|
||||
timer = osal_timer_create("event_timer", timer_callback, (void *)type, interval, 1);
|
||||
if (timer == NULL)
|
||||
{
|
||||
osal_log_e("Failed to create event timer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return timer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 启动定时器事件
|
||||
* @param timer 定时器句柄
|
||||
* @return 0 成功,非0 失败
|
||||
*/
|
||||
int event_timer_start(osal_timer_t timer)
|
||||
{
|
||||
if (timer == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
return osal_timer_start(timer);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 停止定时器事件
|
||||
* @param timer 定时器句柄
|
||||
* @return 0 成功,非0 失败
|
||||
*/
|
||||
int event_timer_stop(osal_timer_t timer)
|
||||
{
|
||||
if (timer == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
return osal_timer_stop(timer);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 删除定时器事件
|
||||
* @param timer 定时器句柄
|
||||
* @return 0 成功,非0 失败
|
||||
*/
|
||||
int event_timer_delete(osal_timer_t timer)
|
||||
{
|
||||
if (timer == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
return osal_timer_delete(timer);
|
||||
}
|
||||
Reference in New Issue
Block a user