You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
5.9 KiB
191 lines
5.9 KiB
6 months ago
|
#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;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|