/*
 * 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);
}
