summaryrefslogtreecommitdiff
path: root/include/dlt/dlt_offline_trace.h
blob: 6f6d8a68caaaef7ba9d379421de8deed88b98935 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/*
 * @licence app begin@
 * SPDX license identifier: MPL-2.0
 *
 * Copyright (C) 2011-2015, BMW AG
 *
 * This file is part of GENIVI Project DLT - Diagnostic Log and Trace.
 *
 * This Source Code Form is subject to the terms of the
 * Mozilla Public License (MPL), v. 2.0.
 * If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * For further information see http://www.genivi.org/.
 * @licence end@
 */

/*!
 * \author Alexander Wenzel <alexander.aw.wenzel@bmw.de>
 *
 * \copyright Copyright © 2011-2015 BMW AG. \n
 * License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/.
 *
 * \file dlt_offline_trace.h
 */


/*******************************************************************************
**                                                                            **
**  SRC-MODULE: dlt_offline_trace.h                                           **
**                                                                            **
**  TARGET    : linux                                                         **
**                                                                            **
**  PROJECT   : DLT                                                           **
**                                                                            **
**  AUTHOR    : Alexander Wenzel Alexander.AW.Wenzel@bmw.de                   **
**                                                                            **
**  PURPOSE   :                                                               **
**                                                                            **
**  REMARKS   :                                                               **
**                                                                            **
**  PLATFORM DEPENDANT [yes/no]: yes                                          **
**                                                                            **
**  TO BE CHANGED BY USER [yes/no]: no                                        **
**                                                                            **
*******************************************************************************/

/*******************************************************************************
**                      Author Identity                                       **
********************************************************************************
**                                                                            **
** Initials     Name                       Company                            **
** --------     -------------------------  ---------------------------------- **
**  aw          Alexander Wenzel           BMW                                **
*******************************************************************************/

#ifndef DLT_OFFLINE_TRACE_H
#define DLT_OFFLINE_TRACE_H

#include <limits.h>

#include "dlt_types.h"

#define DLT_OFFLINETRACE_FILENAME_BASE "dlt_offlinetrace"
#define DLT_OFFLINETRACE_FILENAME_DELI "."
#define DLT_OFFLINETRACE_FILENAME_EXT  ".dlt"
#define DLT_OFFLINETRACE_INDEX_MAX_SIZE 10
#define DLT_OFFLINETRACE_FILENAME_TO_COMPARE "dlt_offlinetrace_"
/* "dlt_offlinetrace.4294967295.dlt" -> MAX 32byte include NULL terminate */
#define DLT_OFFLINETRACE_FILENAME_MAX_SIZE   (sizeof(DLT_OFFLINETRACE_FILENAME_BASE) + \
                                              sizeof(DLT_OFFLINETRACE_FILENAME_DELI) + \
                                              DLT_OFFLINETRACE_INDEX_MAX_SIZE + \
                                              sizeof(DLT_OFFLINETRACE_FILENAME_EXT) + 1)

typedef struct
{
    char directory[NAME_MAX + 1];/**< (String) Store DLT messages to local directory */
    char filename[NAME_MAX + 1]; /**< (String) Filename of currently used log file */
    int fileSize;                /**< (int) Maximum size in bytes of one trace file (Default: 1000000) */
    int maxSize;                 /**< (int) Maximum size of all trace files (Default: 4000000) */
    int filenameTimestampBased;  /**< (int) timestamp based or index based (Default: 1 Timestamp based) */
    int ohandle;
} DltOfflineTrace;

/**
 * Initialise the offline trace
 * This function call opens the currently used log file.
 * A check of the complete size of the offline trace is done during startup.
 * Old files are deleted, if there is not enough space left to create new file.
 * This function must be called before using further offline trace functions.
 * @param trace pointer to offline trace structure
 * @param directory directory where to store offline trace files
 * @param fileSize maximum size of one offline trace file.
 * @param maxSize maximum size of complete offline trace in bytes.
 *.@param filenameTimestampBased filename to be created on timestamp based or index based
 * @return negative value if there was an error
 */
extern DltReturnValue dlt_offline_trace_init(DltOfflineTrace *trace,
                                             const char *directory,
                                             int fileSize,
                                             int maxSize,
                                             int filenameTimestampBased);

/**
 * Uninitialise the offline trace
 * This function call closes currently used log file.
 * This function must be called after usage of offline trace
 * @param buf pointer to offline trace structure
 * @return negative value if there was an error
 */
extern DltReturnValue dlt_offline_trace_free(DltOfflineTrace *buf);

/**
 * Write data into offline trace
 * If the current used log file exceeds the max file size, new log file is created.
 * A check of the complete size of the offline trace is done before new file is created.
 * Old files are deleted, if there is not enough space left to create new file.
 * @param trace pointer to offline trace structure
 * @param data1 pointer to first data block to be written, null if not used
 * @param size1 size in bytes of first data block to be written, 0 if not used
 * @param data2 pointer to second data block to be written, null if not used
 * @param size2 size in bytes of second data block to be written, 0 if not used
 * @param data3 pointer to third data block to be written, null if not used
 * @param size3 size in bytes of third data block to be written, 0 if not used
 * @return negative value if there was an error
 */
extern DltReturnValue dlt_offline_trace_write(DltOfflineTrace *trace,
                                              unsigned char *data1,
                                              int size1,
                                              unsigned char *data2,
                                              int size2,
                                              unsigned char *data3,
                                              int size3);

/**
 * Get size of currently used offline trace buffer
 * @return size in bytes
 */
extern unsigned long dlt_offline_trace_get_total_size(DltOfflineTrace *trace);

/**
 * Provides info about the offline logs storage directory
 * @param path path of the storage directory
 * @param file_name filename to search for
 * @param newest pointer to store newest filename
 * @param oldest pointer to store oldest filename
 * @return num of files in the directory
 */
unsigned int dlt_offline_trace_storage_dir_info(char *path, char *file_name, char *newest, char *oldest);

/**
 * creates filename with index
 * @param log_file_name file name created with index
 * @param name filename base
 * @param idx index to be used for file name creation
 */
void dlt_offline_trace_file_name(char *log_file_name, char *name, unsigned int idx);

/**
 * generates index for log file name
 * @param file filename supplied to create index
 * @return the index to be used for log file name
 */
unsigned int dlt_offline_trace_get_idx_of_log_file(char *file);


#endif /* DLT_OFFLINE_TRACE_H */