Paparazzi UAS  v5.18.0_stable
Paparazzi is a free software Unmanned Aircraft System.
sdLog.c File Reference
#include <string.h>
#include <stdlib.h>
#include <ch.h>
#include <hal.h>
#include <ff.h>
#include "modules/loggers/sdlog_chibios/sdLog.h"
#include "printf.h"
#include "mcu_periph/sdio.h"
#include <ctype.h>
+ Include dependency graph for sdLog.c:

Go to the source code of this file.

Macros

#define likely(x)   __builtin_expect(!!(x), 1)
 
#define unlikely(x)   __builtin_expect(!!(x), 0)
 
#define MIN(x, y)   (((x) < (y)) ? (x) : (y))
 
#define MAX(x, y)   (((x) > (y)) ? (x) : (y))
 
#define IS_POWER_OF_TWO(s)   ((s) && !((s) & ((s) - 1)))
 
#define FFCONF_DEF   _FATFS
 
#define SDLOG_WRITE_BUFFER_SIZE   (SDLOG_ALL_BUFFERS_SIZE/SDLOG_NUM_FILES)
 

Functions

static IN_DMA_SECTION (FATFS fatfs)
 
static int32_t uiGetIndexOfLogFile (const char *prefix, const char *fileName)
 
static SdioError flushWriteByteBuffer (const FileDes fd)
 
SdioError sdLogInit (uint32_t *freeSpaceInKo)
 initialise sdLog More...
 
SdioError sdLogFinish (void)
 unmount filesystem More...
 
SdioError getFileName (const char *prefix, const char *directoryName, char *nextFileName, const size_t nameLength, const int indexOffset)
 get last used name for a pattern, then add offset and return valid filename More...
 
SdioError removeEmptyLogs (const char *directoryName, const char *prefix, const size_t sizeConsideredEmpty)
 remove spurious log file left on sd More...
 

Macro Definition Documentation

◆ FFCONF_DEF

#define FFCONF_DEF   _FATFS

Definition at line 55 of file sdLog.c.

◆ IS_POWER_OF_TWO

#define IS_POWER_OF_TWO (   s)    ((s) && !((s) & ((s) - 1)))

Definition at line 47 of file sdLog.c.

◆ likely

#define likely (   x)    __builtin_expect(!!(x), 1)

Definition at line 38 of file sdLog.c.

◆ MAX

#define MAX (   x,
 
)    (((x) > (y)) ? (x) : (y))

Definition at line 45 of file sdLog.c.

◆ MIN

#define MIN (   x,
 
)    (((x) < (y)) ? (x) : (y))

Definition at line 42 of file sdLog.c.

◆ SDLOG_WRITE_BUFFER_SIZE

#define SDLOG_WRITE_BUFFER_SIZE   (SDLOG_ALL_BUFFERS_SIZE/SDLOG_NUM_FILES)

Definition at line 78 of file sdLog.c.

◆ unlikely

#define unlikely (   x)    __builtin_expect(!!(x), 0)

Definition at line 39 of file sdLog.c.

Function Documentation

◆ flushWriteByteBuffer()

static SdioError flushWriteByteBuffer ( const FileDes  fd)
inlinestatic

◆ getFileName()

SdioError getFileName ( const char *  prefix,
const char *  directoryName,
char *  nextFileName,
const size_t  nameLength,
const int  indexOffset 
)

get last used name for a pattern, then add offset and return valid filename

for log file, you often have a pattern and a version. To retreive last file for reading, call function with indexOffset=0. To get next available file for writing, call function with indexOffset=1 This function is available even without thread login facility : even if SDLOG_XXX macro are zeroed

Parameters
[in]prefix: the pattern for the file : example LOG_
[in]directoryName: root directory where to find file
[out]nextFileName: file with path ready to be used for f_open system call
[in]nameLength: length of previous buffer
[in]indexOffset: use 0 to retrieve last existent filename, 1 for next filename
Returns
status (always check status)

Definition at line 730 of file sdLog.c.

References chsnprintf(), dir, MAX, MIN, NUMBERFMF, NUMBERMAX, SDLOG_FATFS_ERROR, SDLOG_LOGNUM_ERROR, SDLOG_OK, and uiGetIndexOfLogFile().

+ Here is the call graph for this function:

◆ IN_DMA_SECTION()

static IN_DMA_SECTION ( FATFS  fatfs)
static

◆ removeEmptyLogs()

SdioError removeEmptyLogs ( const char *  directoryName,
const char *  prefix,
const size_t  sizeConsideredEmpty 
)

remove spurious log file left on sd

when tuning firmware, log files are created at each tries, and we consider that empty or nearly empty log are of no value this function remove log file whose size is less than a given value

Parameters
[in]prefix: the pattern for the file : example LOG_
[in]directoryName: root directory where to find file
[in]sizeConsideredEmpty: file whose size is less or equal to that value will be removed
Returns
status (always check status)

Definition at line 791 of file sdLog.c.

References dir, SDLOG_FATFS_ERROR, SDLOG_FATFS_NOENT, and SDLOG_OK.

Referenced by thd_startlog().

+ Here is the caller graph for this function:

◆ sdLogFinish()

SdioError sdLogFinish ( void  )

unmount filesystem

unmount filesystem, free sdio peripheral This function is available even without thread login facility : even if SDLOG_XXX macro are zeroed

Returns
status (always check status)

Definition at line 262 of file sdLog.c.

References SDLOG_FATFS_ERROR, and SDLOG_OK.

Referenced by sdlog_chibios_finish().

+ Here is the caller graph for this function:

◆ sdLogInit()

SdioError sdLogInit ( uint32_t freeSpaceInKo)

initialise sdLog

init sdio peripheral, verify sdCard is inserted, check and mount filesystem, launch worker thread This function is available even without thread login facility : even if SDLOG_XXX macro are zeroed

Parameters
[out]freeSpaceInKo: if pointer in nonnull, return free space on filesystem
Returns
status (always check status)

Definition at line 202 of file sdLog.c.

References FALSE, HEAP_DEFAULT, msgqueue_init(), sdio_connect(), sdio_disconnect(), SDLOG_FATFS_ERROR, SDLOG_NOCARD, SDLOG_NUM_FILES, SDLOG_OK, SDLOG_QUEUE_BUCKETS, and SDLOG_WAS_LAUNCHED.

Referenced by thd_startlog().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ uiGetIndexOfLogFile()

int32_t uiGetIndexOfLogFile ( const char *  prefix,
const char *  fileName 
)
static

Definition at line 851 of file sdLog.c.

Referenced by getFileName().

+ Here is the caller graph for this function: