-
Notifications
You must be signed in to change notification settings - Fork 1
/
_s_d__logger_8h_source.html
183 lines (181 loc) · 21.3 KB
/
_s_d__logger_8h_source.html
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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Speeduino: speeduino/SD_logger.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="speeduino_logo.png"/></td>
<td id="projectalign">
<div id="projectname">Speeduino
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_9dd927a2de2c3597e2b3a7dd174a4cd6.html">speeduino</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">SD_logger.h</div></div>
</div><!--header-->
<div class="contents">
<a href="_s_d__logger_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef SD_LOGGER_H</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define SD_LOGGER_H</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#ifdef SD_LOGGING</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span> </div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#ifdef __SD_H__</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor"> #include <SD.h></span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor"> #include "SdFat.h"</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include "RingBuf.h"</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> </div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#define SD_STATUS_OFF 0 </span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#define SD_STATUS_READY 1 </span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#define SD_STATUS_ACTIVE 2 </span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#define SD_STATUS_ERROR_NO_CARD 3 </span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#define SD_STATUS_ERROR_NO_FS 4 </span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#define SD_STATUS_ERROR_NO_WRITE 5 </span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#define SD_STATUS_ERROR_NO_SPACE 6 </span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#define SD_STATUS_ERROR_WRITE_FAIL 7 </span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#define SD_STATUS_ERROR_FORMAT_FAIL 8 </span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#define SD_STATUS_CARD_PRESENT 0 </span><span class="comment">//0=no card, 1=card present</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#define SD_STATUS_CARD_TYPE 1 </span><span class="comment">//0=SD, 1=SDHC</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#define SD_STATUS_CARD_READY 2 </span><span class="comment">//0=not ready, 1=ready</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#define SD_STATUS_CARD_LOGGING 3 </span><span class="comment">//0=not logging, 1=logging</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#define SD_STATUS_CARD_ERROR 4 </span><span class="comment">//0=no error, 1=error</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#define SD_STATUS_CARD_VERSION 5 </span><span class="comment">//0=1.x, 1=2.x</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#define SD_STATUS_CARD_FS 6 </span><span class="comment">//0=no FAT16, 1=FAT32</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#define SD_STATUS_CARD_UNUSED 7 </span><span class="comment">//0=normal, 1=unused</span></div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#define SD_SECTOR_SIZE 512 </span><span class="comment">// Standard SD sector size</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">#if defined CORE_TEENSY</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="preprocessor"> #define SD_CS_PIN BUILTIN_SDCARD</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#elif defined CORE_STM32</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="preprocessor"> #define SD_CS_PIN PD2 </span><span class="comment">//CS pin can be pretty much anything, but PD2 is one of the ones left unused from SDIO pins.</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor"> #define SD_CS_PIN 10 </span><span class="comment">//This is a made up value for now</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor">#define SD_LOG_NUM_FIELDS 91 </span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="preprocessor">#ifndef UNIT_TEST </span><span class="comment">// Scope guard for unit testing</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor"> #define SD_LOG_ENTRY_SIZE 127 </span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor"> #define SD_LOG_ENTRY_SIZE 1 </span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="preprocessor">#define SD_LOG_FILE_SIZE 10000000 </span><span class="comment">//Default 10mb file size</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="preprocessor">#define MAX_LOG_FILES 9999</span></div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="preprocessor">#define LOG_FILE_PREFIX "SPD_"</span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="preprocessor">#define LOG_FILE_EXTENSION "csv"</span></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="preprocessor">#define SD_LOG_ENTRY_TOTAL_BYTES (SD_LOG_ENTRY_SIZE + SD_LOG_NUM_FIELDS + 1) </span><span class="comment">//The total size of each SD log entry in bytes. This is the size of the data packet + 1 comma for each field + 1 for the newline character</span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="preprocessor">#define RING_BUF_CAPACITY (SD_LOG_ENTRY_TOTAL_BYTES * 10) </span><span class="comment">//Allow for 10 entries in the ringbuffer. Will need tuning</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="comment">/*</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment">Standard FAT16/32</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment">SdFs sd; </span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment">FsFile logFile;</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment">RingBuf<ExFile, RING_BUF_CAPACITY> rb;</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment">*/</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment">//ExFat</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="keyword">extern</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">SdExFat</a> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">sd</a>;</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="keyword">extern</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">ExFile</a> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">logFile</a>;</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="keyword">extern</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">RingBuf<ExFile, RING_BUF_CAPACITY></a> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">rb</a>;</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="keyword">extern</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">uint8_t</a> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">SD_status</a>;</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="keyword">extern</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">uint16_t</a> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">currentLogFileNumber</a>;</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="keyword">extern</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">manualLogActive</a>;</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span><span class="keywordtype">void</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">initSD</a>();</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="keywordtype">void</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">writeSDLogEntry</a>();</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="keywordtype">void</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">writetSDLogHeader</a>();</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span><span class="keywordtype">void</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">beginSDLogging</a>();</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="keywordtype">void</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">endSDLogging</a>();</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="keywordtype">void</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">syncSDLog</a>();</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="keywordtype">void</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">setTS_SD_status</a>();</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="keywordtype">void</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">formatExFat</a>();</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="keywordtype">void</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">deleteLogFile</a>(<span class="keywordtype">char</span>, <span class="keywordtype">char</span>, <span class="keywordtype">char</span>, <span class="keywordtype">char</span>);</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="keywordtype">bool</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">createLogFile</a>();</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="keywordtype">void</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">dateTime</a>(<a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">uint16_t</a>*, <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">uint16_t</a>*, <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">uint8_t</a>*); <span class="comment">//Used for timestamping with RTC</span></div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">uint16_t</a> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">getNextSDLogFileNumber</a>();</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="keywordtype">bool</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">getSDLogFileDetails</a>(<a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">uint8_t</a>* , <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">uint16_t</a>);</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="keywordtype">void</span> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">readSDSectors</a>(<a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">uint8_t</a>*, <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">uint32_t</a>, <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">uint16_t</a>);</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">uint32_t</a> <a class="code hl_function" href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">sectorCount</a>();</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="preprocessor">#endif </span><span class="comment">//SD_LOGGING</span></div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span><span class="preprocessor">#endif </span><span class="comment">//SD_LOGGER_H</span></div>
<div class="ttc" id="agroup__group-opt-shift_html_gada522535b5b26abf6eb2c7da12c71454"><div class="ttname"><a href="group__group-opt-shift.html#gada522535b5b26abf6eb2c7da12c71454">rshift</a></div><div class="ttdeci">static uint32_t rshift(uint32_t a)</div><div class="ttdoc">Bitwise right shift - generic, unoptimized, case.</div><div class="ttdef"><b>Definition</b> bit_shifts.h:349</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>