#include "save_file.h" #include "fatfs.h" #include "spi10.h" #include "rtc_process.h" #include "action_process.h" typedef enum { SAVE_STEP_INIT, SAVE_STEP_POWER_ON_WAIT, SAVE_STEP_SAVE_TIME_CHECK, SAVE_STEP_SAVE_MOUNT, SAVE_STEP_SAVE_FILE_OPEN, SAVE_STEP_SAVE_FILE_LSEEK, SAVE_STEP_SAVE_FILE_WRITE, SAVE_STEP_SAVE_FILE_CLOSE, SAVE_STEP_SAVE_ERROR, }SAVE_STEP; static SAVE_STEP SaveStep = SAVE_STEP_INIT; static uint32_t SaveFileTickCount; static uint8_t SaveMin; static FATFS FatFs; //Fatfs handle static FIL fil; //File handle static FRESULT fres; //Result after operations uint8_t FileBuffer[512]; uint32_t WriteDataSize; static bool isGuidePrint; static bool isPowerOn; bool Save_SensorData_SDCard(void) { #if 0 RTC_TIME rtc_time; SENSOR_SAVE_DATA SaveSensorData; uint32_t writeByte; rtc_time = RTC_Get_Time(); MX_FATFS_Init(); fres = f_mount(&FatFs, "", 1); //1=mount now if(fres == FR_DISK_ERR) { FATFS_UnLinkDriver("0:/"); MX_FATFS_Init(); fres = f_mount(&FatFs, "", 1); //1=mount now } if(fres != FR_OK) { return false; } sprintf((char *)FileBuffer, "%d_%d_%d.csv", rtc_time.rtc_Year, rtc_time.rtc_Month, rtc_time.rtc_Date); if(f_open(&fil, FileBuffer, FA_WRITE | FA_READ) != FR_OK) { if (f_open(&fil, FileBuffer, FA_CREATE_ALWAYS | FA_WRITE) != FR_OK) { return false; } else { isGuidePrint = true; } } else { isGuidePrint = false; } fres = f_lseek(&fil, f_size(&fil)); if(fres != FR_OK) { f_close(&fil); return false; } if(isGuidePrint == true) { sprintf((char *)FileBuffer, "Time,In_PM10.0,In_PM4.0,In_PM2.5,In_PM1.0,In_Humidity,In_Temp,In_Voc,Out_PM10.0,Out_PM4.0,Out_PM2.5,Out_PM1.0,Out_Humidity,Out_Temp,Out_Voc\r\n"); fres = f_write(&fil, FileBuffer, strlen(FileBuffer), &writeByte); if(fres != FR_OK) { f_close(&fil); return false; } } while(Sensor_RingBuffer_Get_DataSize(&Sensor_RingBuffer_Info) != 0) { if(Sensor_RingBuffer_Dequeue(&Sensor_RingBuffer_Info, &SaveSensorData) == true) { sprintf((char *)FileBuffer, "%d:%d:%d,", SaveSensorData.rtc_time.rtc_Hour, SaveSensorData.rtc_time.rtc_Min, SaveSensorData.rtc_time.rtc_Sec); fres = f_write(&fil, FileBuffer, strlen(FileBuffer), &writeByte); if(fres != FR_OK) { f_close(&fil); return false; } if(SaveSensorData.dust_sensor_In_info.isSensorMount == true) { sprintf((char *)FileBuffer, "%d,%d,%d,%d,%d,%d,%d,", SaveSensorData.dust_sensor_In_info.Dust_PM10p0, SaveSensorData.dust_sensor_In_info.Dust_PM4p0, SaveSensorData.dust_sensor_In_info.Dust_PM2p5, SaveSensorData.dust_sensor_In_info.Dust_PM1p0, SaveSensorData.dust_sensor_In_info.Dust_Humidity, SaveSensorData.dust_sensor_In_info.Dust_Temperature, SaveSensorData.dust_sensor_In_info.Dust_VOC_Index); fres = f_write(&fil, FileBuffer, strlen(FileBuffer), &writeByte); if(fres != FR_OK) { f_close(&fil); return false; } #if 0 printf("In, #endif } else { sprintf((char *)FileBuffer, "-,-,-,-,-,-,-,"); fres = f_write(&fil, FileBuffer, strlen(FileBuffer), &writeByte); if(fres != FR_OK) { f_close(&fil); return false; } } if(SaveSensorData.dust_sensor_Out_info.isSensorMount == true) { sprintf((char *)FileBuffer, "%d,%d,%d,%d,%d,%d,%d\r\n", SaveSensorData.dust_sensor_Out_info.Dust_PM10p0, SaveSensorData.dust_sensor_Out_info.Dust_PM4p0, SaveSensorData.dust_sensor_Out_info.Dust_PM2p5, SaveSensorData.dust_sensor_Out_info.Dust_PM1p0, SaveSensorData.dust_sensor_Out_info.Dust_Humidity, SaveSensorData.dust_sensor_Out_info.Dust_Temperature, SaveSensorData.dust_sensor_Out_info.Dust_VOC_Index); fres = f_write(&fil, FileBuffer, strlen(FileBuffer), &writeByte); if(fres != FR_OK) { f_close(&fil); return false; } } else { sprintf((char *)FileBuffer, "-,-,-,-,-,-,-\r\n"); fres = f_write(&fil, FileBuffer, strlen(FileBuffer), &writeByte); if(fres != FR_OK) { f_close(&fil); return false; } } } } f_close(&fil); #endif return true; }