#ifndef SYSTEM_MONITOR_H
#define SYSTEM_MONITOR_H

#include "main.h"
#include <stdint.h>

// 监控状态文件配置
#define MONITOR_STATUS_FILE         "0:/LOG.TXT"  // 监控状态存储文件

// 简化的系统监控统计信息
typedef struct {
    uint32_t total_samples;          // 总采样样点数
    uint32_t data_overflow_count;    // 数据来不及处理的次数
    
    // SD卡存储监控信息
    uint32_t sd_write_count;         // SD卡写入次数
    uint32_t sd_write_error_count;   // SD卡写入错误次数
    uint32_t sd_buffer_full_count;   // 缓冲区满次数
    uint32_t sd_total_bytes_written; // SD卡总写入字节数
    uint32_t sd_file_count;          // 创建的文件数量
    uint32_t sd_data_dropped_count;  // 未存储的数据数量（缓冲区满时丢弃）
    
    // 串口发送监控信息
    uint32_t uart_tx_count;          // 串口发送次数
    uint32_t uart_tx_bytes;          // 串口发送总字节数
    uint32_t uart_tx_error_count;    // 串口发送错误次数
} SystemMonitorStats_t;

// 函数声明
void SystemMonitor_Init(void);
void SystemMonitor_IncrementSampleCount(void);
void SystemMonitor_ReportDataOverflow(void);
void SystemMonitor_GetStats(SystemMonitorStats_t *stats);

// SD卡存储监控函数
void SystemMonitor_ReportSDWrite(uint32_t bytes_written);
void SystemMonitor_ReportSDWriteError(void);
void SystemMonitor_ReportSDBufferFull(void);
void SystemMonitor_ReportSDFileCreated(void);
void SystemMonitor_ReportDataDropped(void);

// 串口发送监控函数
void SystemMonitor_ReportUARTTx(uint32_t bytes_sent);
void SystemMonitor_ReportUARTTxError(void);

// 监控状态持久化函数
HAL_StatusTypeDef SystemMonitor_SaveStatus(void);
HAL_StatusTypeDef SystemMonitor_LoadStatus(void);

#endif // SYSTEM_MONITOR_H
