This commit is contained in:
cfif 2025-05-26 14:41:45 +03:00
commit 15e150904a
3 changed files with 147 additions and 0 deletions

110
file_logger.c Normal file
View File

@ -0,0 +1,110 @@
//
// 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, &timestamp);
timestamp += gr * 3600;
struct tm timestampTM;
localtime_r(&timestamp, &timestampTM);
return strftime(buf, len, "%d-%m-%y.LOG", &timestampTM);
}
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;
}

27
file_logger.h Normal file
View File

@ -0,0 +1,27 @@
//
// Created by cfif on 14.02.23.
//
#ifndef GONEC_GSM_FILE_LOGGER_H
#define GONEC_GSM_FILE_LOGGER_H
#include "fs_interface.h"
#include "file_logger.h"
#include <DeviceStorageIni.h>
typedef struct {
tFs *fs;
tDeviceStorageIni *store;
char dirlog[64];
char filename[64];
char filename2[64];
osMutexId_t access;
tRtcIO *rtcIo;
time_t timestampWriteFileLogger;
} tFileLogger;
void FileLogger_Init(tFileLogger *env, tDeviceStorageIni *store, tFs *fs, tRtcIO *rtc, osMutexId_t access_log, char *dirlog);
tSerialPortIO FileLogger_GetSerialIo(tFileLogger *env);
uint32_t getStateWriteFileLogger(tFileLogger *env);
#endif //GONEC_GSM_FILE_LOGGER_H

10
modular.json Normal file
View File

@ -0,0 +1,10 @@
{
"cmake": {
"inc_dirs": [
"./"
],
"srcs": [
"./**.c"
]
}
}