111 lines
2.8 KiB
C
111 lines
2.8 KiB
C
//
|
|
// Created by cfif on 14.02.23.
|
|
//
|
|
#include "file_logger.h"
|
|
#include "string.h"
|
|
#include "fs_base_func.h"
|
|
|
|
|
|
void FileLogger_Init(tFileLogger *env, tDeviceStorageIni *store, tFs *fs, tRtcIO *rtc, osMutexId_t access_log, char *dirlog) {
|
|
env->fs = fs;
|
|
env->dirlog[0] = '\0';
|
|
strcat(env->dirlog, dirlog);
|
|
env->store = store;
|
|
env->access = access_log;
|
|
env->rtcIo = rtc;
|
|
env->rtcIo->get(env->rtcIo, &env->timestampWriteFileLogger);
|
|
}
|
|
|
|
// Получение имени файла лога
|
|
size_t getFileNameLogger(tRtcIO *rtc, char *buf, size_t len, int32_t gr) {
|
|
|
|
time_t timestamp;
|
|
rtc->get(rtc, ×tamp);
|
|
timestamp += gr * 3600;
|
|
|
|
struct tm timestampTM;
|
|
localtime_r(×tamp, ×tampTM);
|
|
|
|
return strftime(buf, len, "%d-%m-%y.LOG", ×tampTM);
|
|
}
|
|
|
|
uint32_t getStateWriteFileLogger(tFileLogger *env) {
|
|
return env->timestampWriteFileLogger;
|
|
}
|
|
|
|
|
|
uint16_t FileLogger_Write(tFileLogger *env, uint8_t *data, uint16_t size, uint32_t timeout) {
|
|
|
|
// return 0;
|
|
|
|
FIL file;
|
|
FRESULT fr;
|
|
|
|
if (osMutexAcquire(env->access, 8000) == osOK) {
|
|
|
|
env->filename2[0] = '\0';
|
|
strcat(env->filename2, env->filename);
|
|
|
|
env->rtcIo->get(env->rtcIo, &env->timestampWriteFileLogger);
|
|
|
|
char FileNameLog[64];
|
|
FileNameLog[0] = '\0';
|
|
strcat(FileNameLog, env->dirlog);
|
|
getFileNameLogger(env->rtcIo, &FileNameLog[strlen(FileNameLog)],
|
|
sizeof(FileNameLog) - strlen(FileNameLog), env->store->nvm.Settings_General.GMTcorr_v);
|
|
|
|
env->filename[0] = '\0';
|
|
strcat(env->filename, FileNameLog);
|
|
|
|
fr = f_open_i(env->fs, &file, (TCHAR *) env->filename, FA_WRITE | FA_OPEN_APPEND);
|
|
|
|
if (fr) {
|
|
osMutexRelease(env->access);
|
|
return 0;
|
|
}
|
|
|
|
UINT bytes_written;
|
|
|
|
if (strcmp(env->filename, env->filename2) != 0) {
|
|
char str[512];
|
|
reportScan(str, env->store->nvm.Settings_General.ATnum_v);
|
|
|
|
fr = f_write_i(env->fs, &file, str, strlen(str), &bytes_written);
|
|
|
|
}
|
|
|
|
fr = f_write_i(env->fs, &file, data, size, &bytes_written);
|
|
|
|
if (fr) {
|
|
f_close_i(env->fs, &file);
|
|
osMutexRelease(env->access);
|
|
return 0;
|
|
}
|
|
|
|
fr = f_close_i(env->fs, &file);
|
|
if (fr) {
|
|
osMutexRelease(env->access);
|
|
return 0;
|
|
}
|
|
|
|
osMutexRelease(env->access);
|
|
|
|
return bytes_written;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
uint16_t FileLogger_Receive(tFileLogger *env, uint8_t *data, uint16_t size, uint32_t timeout) {
|
|
return 0;
|
|
}
|
|
|
|
tSerialPortIO FileLogger_GetSerialIo(tFileLogger *env) {
|
|
tSerialPortIO serialPortIo = {
|
|
.env = env,
|
|
.receive =(void *) FileLogger_Receive,
|
|
.transmit =(void *) FileLogger_Write,
|
|
};
|
|
|
|
return serialPortIo;
|
|
}
|