From 891e2dc07cef02a2d458451efa24746db067df51 Mon Sep 17 00:00:00 2001 From: cfif Date: Fri, 24 Jan 2025 13:22:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=BE=D1=81=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BD=D0=BE=D0=B2=D1=83=D1=8E=20=D0=BE=D1=80?= =?UTF-8?q?=D0=B3=D0=B0=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8E=20GONEC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- file_logger.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++ file_logger.h | 27 +++++++++++++ modular.json | 10 +++++ 3 files changed, 147 insertions(+) create mode 100644 file_logger.c create mode 100644 file_logger.h create mode 100644 modular.json diff --git a/file_logger.c b/file_logger.c new file mode 100644 index 0000000..fb25a72 --- /dev/null +++ b/file_logger.c @@ -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, ×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; +} diff --git a/file_logger.h b/file_logger.h new file mode 100644 index 0000000..16e5d12 --- /dev/null +++ b/file_logger.h @@ -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 + +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 diff --git a/modular.json b/modular.json new file mode 100644 index 0000000..0dd1901 --- /dev/null +++ b/modular.json @@ -0,0 +1,10 @@ +{ + "cmake": { + "inc_dirs": [ + "./" + ], + "srcs": [ + "./**.c" + ] + } +} \ No newline at end of file