/* * error_handler.c * * Created on: 2026-03-04 * Author: RT-Thread * * 功能: 错误处理与恢复模块实现 * 依赖: RT-Thread Nano, osal, transaction, state_manager * 跨平台适配: 基于RT-Thread Nano,使用标准API */ #include #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; }