167 lines
4.0 KiB
C
167 lines
4.0 KiB
C
/*
|
||
* 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;
|
||
}
|