增加事件驱动和业务回滚处理方式

This commit is contained in:
冯佳
2026-03-04 08:50:04 +08:00
parent cc4c361df6
commit 47a9dff6ef
25 changed files with 2626 additions and 1780 deletions

166
app/error_handler.c Normal file
View File

@ -0,0 +1,166 @@
/*
* error_handler.c
*
* Created on: 2026-03-04
* Author: RT-Thread
*
* 功能: 错误处理与恢复模块实现
* 依赖: RT-Thread Nano, osal, transaction, state_manager
* 跨平台适配: 基于RT-Thread Nano使用标准API
*/
#include <rtthread.h>
#include "osal.h"
#include "transaction.h"
#include "state_manager.h"
#include "error_handler.h"
/**
* @brief 处理网络错误
* @param error 错误代码
* @param user_data 用户数据
* @return 0 成功非0 失败
*/
static int handle_network_error(error_code_t error, void *user_data)
{
osal_log_e("Network error: %d", error);
/* 设置网络状态为错误 */
state_manager_set_network_state(NETWORK_STATE_ERROR);
/* 尝试恢复网络连接 */
osal_log_i("Attempting to recover network connection...");
/* 这里可以添加具体的网络恢复逻辑,比如重新连接、重启网络接口等 */
return 0;
}
/**
* @brief 处理传感器错误
* @param error 错误代码
* @param user_data 用户数据
* @return 0 成功非0 失败
*/
static int handle_sensor_error(error_code_t error, void *user_data)
{
osal_log_e("Sensor error: %d", error);
/* 设置传感器状态为错误 */
state_manager_set_sensor_state(SENSOR_STATE_ERROR);
/* 尝试恢复传感器 */
osal_log_i("Attempting to recover sensor...");
/* 这里可以添加具体的传感器恢复逻辑,比如重新初始化传感器等 */
return 0;
}
/**
* @brief 处理TCP错误
* @param error 错误代码
* @param user_data 用户数据
* @return 0 成功非0 失败
*/
static int handle_tcp_error(error_code_t error, void *user_data)
{
osal_log_e("TCP error: %d", error);
/* 设置TCP状态为错误 */
state_manager_set_tcp_state(TCP_STATE_ERROR);
/* 尝试恢复TCP连接 */
osal_log_i("Attempting to recover TCP connection...");
/* 这里可以添加具体的TCP恢复逻辑比如重新建立连接等 */
return 0;
}
/**
* @brief 处理未知错误
* @param error 错误代码
* @param user_data 用户数据
* @return 0 成功非0 失败
*/
static int handle_unknown_error(error_code_t error, void *user_data)
{
osal_log_e("Unknown error: %d", error);
return 0;
}
/**
* @brief 初始化错误处理器
* @return 0 成功非0 失败
*/
int error_handler_init(void)
{
osal_log_i("Error handler initialized");
return 0;
}
/**
* @brief 处理错误
* @param error 错误代码
* @param user_data 用户数据
* @return 0 成功非0 失败
*/
int error_handler_process(error_code_t error, void *user_data)
{
switch (error)
{
case ERROR_NETWORK:
return handle_network_error(error, user_data);
case ERROR_SENSOR:
return handle_sensor_error(error, user_data);
case ERROR_TCP:
return handle_tcp_error(error, user_data);
case ERROR_UNKNOWN:
default:
return handle_unknown_error(error, user_data);
}
}
/**
* @brief 记录错误日志
* @param error 错误代码
* @param message 错误信息
* @return 0 成功非0 失败
*/
int error_handler_log(error_code_t error, const char *message)
{
switch (error)
{
case ERROR_NETWORK:
osal_log_e("[NETWORK ERROR] %s", message);
break;
case ERROR_SENSOR:
osal_log_e("[SENSOR ERROR] %s", message);
break;
case ERROR_TCP:
osal_log_e("[TCP ERROR] %s", message);
break;
case ERROR_UNKNOWN:
default:
osal_log_e("[UNKNOWN ERROR] %s", message);
break;
}
return 0;
}
/**
* @brief 触发错误报警
* @param error 错误代码
* @param message 错误信息
* @return 0 成功非0 失败
*/
int error_handler_alert(error_code_t error, const char *message)
{
/* 这里可以添加具体的报警逻辑比如发送通知、触发LED闪烁等 */
osal_log_e("[ALERT] %s", message);
return 0;
}