Test

Dependencies:   mbed-dev-OS5_10_4

Committer:
kevman
Date:
Fri Aug 07 07:24:21 2020 +0000
Revision:
0:014fad4dfb9d
Test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevman 0:014fad4dfb9d 1 /*-------------------------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 2 Program Name: SDCard.cpp
kevman 0:014fad4dfb9d 3 Version: 1.x
kevman 0:014fad4dfb9d 4 Sprache: C++
kevman 0:014fad4dfb9d 5 Compiler: mbed
kevman 0:014fad4dfb9d 6 Autors: UFa/PS
kevman 0:014fad4dfb9d 7
kevman 0:014fad4dfb9d 8 Funktion: Lesen und Schreiben der SD-Card
kevman 0:014fad4dfb9d 9
kevman 0:014fad4dfb9d 10 History:
kevman 0:014fad4dfb9d 11 30.09.2019:
kevman 0:014fad4dfb9d 12 Vorsicht, es gibt zwei Dateien zum Autospeichern. Die Datei autostart.CFG, welche die Konfigurationsdaten
kevman 0:014fad4dfb9d 13 zum Handling der Autostart Messfunktion aufnimmt und die Datei(en) MW_AUTO%d, welche die Messwerte aufnimmt und
kevman 0:014fad4dfb9d 14 durchnummeriert wird. Folgende Variablen und Methoden liegen dem zugrunde:
kevman 0:014fad4dfb9d 15 autostart.cnf:
kevman 0:014fad4dfb9d 16 FileNames.AutoFileName,"/SDCard/autostart.CFG"
kevman 0:014fad4dfb9d 17 clSdCard.OpenAutoFile(FileNames.AutoFileName, FileNames.FileReadMode);
kevman 0:014fad4dfb9d 18 clSdCard.ReadAutoLine(strFileRwBuf, FILE_RW_BUF_LEN);
kevman 0:014fad4dfb9d 19 clSdCard.WriteAutoLine(); schreibt den Puffer clSdCard.cSdLine
kevman 0:014fad4dfb9d 20 clSdCard.CloseAutoFile();
kevman 0:014fad4dfb9d 21
kevman 0:014fad4dfb9d 22
kevman 0:014fad4dfb9d 23 Messdateien:
kevman 0:014fad4dfb9d 24 AutoStart.MwFileName, "/SDCard/data/MW_AUTO_%d.ASC"
kevman 0:014fad4dfb9d 25 clSdCard.OpenMwAutoFile(AutoStart.MwFileName, FileNames.FileWriteMode);
kevman 0:014fad4dfb9d 26 clSdCard.WriteMwAutoLine(); schreibt den Puffer strFileRwBuf
kevman 0:014fad4dfb9d 27
kevman 0:014fad4dfb9d 28
kevman 0:014fad4dfb9d 29 --------------------------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 30
kevman 0:014fad4dfb9d 31 #include "Headers.h"
kevman 0:014fad4dfb9d 32
kevman 0:014fad4dfb9d 33
kevman 0:014fad4dfb9d 34
kevman 0:014fad4dfb9d 35
kevman 0:014fad4dfb9d 36 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 37 Init: Initialisieren der Startwerte
kevman 0:014fad4dfb9d 38 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 39 int StorageCard::Init()
kevman 0:014fad4dfb9d 40 {
kevman 0:014fad4dfb9d 41 m_fFileIsOpen = false;
kevman 0:014fad4dfb9d 42 m_fHeaderIsOpen = false;
kevman 0:014fad4dfb9d 43 m_Fp = NULL;
kevman 0:014fad4dfb9d 44 m_FpHeader = NULL;
kevman 0:014fad4dfb9d 45 m_FpAutoFile = NULL;
kevman 0:014fad4dfb9d 46 m_fAutoFileIsOpen = false;
kevman 0:014fad4dfb9d 47 m_FpMwAutoFile = NULL;
kevman 0:014fad4dfb9d 48 m_fMwAutoFileIsOpen = false;
kevman 0:014fad4dfb9d 49 return(true);
kevman 0:014fad4dfb9d 50 }
kevman 0:014fad4dfb9d 51 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 52 OpenFile: Öffnet eine Datei über den Namen der im Aufrufparameter enthalten ist
kevman 0:014fad4dfb9d 53 Returnwert ist true bei erfolgreichem Öffnen
kevman 0:014fad4dfb9d 54 Returnwert ist false bei fehlerhaftem Öffnen
kevman 0:014fad4dfb9d 55 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 56 int StorageCard::OpenFile(char *FName, char *OpenMode)
kevman 0:014fad4dfb9d 57 {
kevman 0:014fad4dfb9d 58 if(m_fFileIsOpen == true) // eine andere Datei ist geöffnet. Sollte eigentlich nicht vorkommen,
kevman 0:014fad4dfb9d 59 {
kevman 0:014fad4dfb9d 60 sprintf(HostIf.strErrorBuf,"%c#ER#Error open file %s, another file is opened. %c\r\n", STX, FName, ETX); //
kevman 0:014fad4dfb9d 61 if(g_fOnDuringInit)
kevman 0:014fad4dfb9d 62 printf("%s",HostIf.strErrorBuf);
kevman 0:014fad4dfb9d 63 else
kevman 0:014fad4dfb9d 64 HostIf.fSendError = true;
kevman 0:014fad4dfb9d 65 return(false); // ist nur zur Sicherheit
kevman 0:014fad4dfb9d 66 }
kevman 0:014fad4dfb9d 67 m_Fp = fopen(FName, OpenMode); // Datei im OpenMode öffnen
kevman 0:014fad4dfb9d 68 if(m_Fp == NULL) // Fehler beim Öffnen der Datei, der wesentliche Grund ist, das die Datei nicht vorhanden ist.
kevman 0:014fad4dfb9d 69 // Die Konsequenz ist, daß die Quelldaten initialisiert werden müssen, eine Fehlermeldung muss nicht ausgegeben werden,
kevman 0:014fad4dfb9d 70 // es dürfen jedoch keine weiteren Daten aus der Datei gelesen werden.
kevman 0:014fad4dfb9d 71 {
kevman 0:014fad4dfb9d 72 sprintf(HostIf.strErrorBuf,"%c#ER#File could not opened: %s %c\r\n", STX, FName, ETX); //
kevman 0:014fad4dfb9d 73 if(g_fOnDuringInit)
kevman 0:014fad4dfb9d 74 printf("%s",HostIf.strErrorBuf);
kevman 0:014fad4dfb9d 75 else
kevman 0:014fad4dfb9d 76 HostIf.fSendError = true;
kevman 0:014fad4dfb9d 77 return(false);
kevman 0:014fad4dfb9d 78 }
kevman 0:014fad4dfb9d 79 m_fFileIsOpen = true;
kevman 0:014fad4dfb9d 80
kevman 0:014fad4dfb9d 81 rewind(m_Fp);
kevman 0:014fad4dfb9d 82 return(true);
kevman 0:014fad4dfb9d 83
kevman 0:014fad4dfb9d 84 }
kevman 0:014fad4dfb9d 85 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 86 OpenFile: Öffnet eine Header-Datei über den Namen der im Aufrufparameter enthalten ist
kevman 0:014fad4dfb9d 87 Returnwert ist true bei erfolgreichem Öffnen
kevman 0:014fad4dfb9d 88 Returnwert ist false bei fehlerhaftem Öffnen
kevman 0:014fad4dfb9d 89 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 90 int StorageCard::OpenHeaderFile(char *FName, char *OpenMode)
kevman 0:014fad4dfb9d 91 {
kevman 0:014fad4dfb9d 92 if(m_fHeaderIsOpen == true) // eine andere Datei ist geöffnet. Sollte eigentlich nicht vorkommen,
kevman 0:014fad4dfb9d 93 {
kevman 0:014fad4dfb9d 94 sprintf(HostIf.strErrorBuf,"%c#ER#Error open file %s, another file is opened. %c\r\n", STX, FName, ETX); //
kevman 0:014fad4dfb9d 95 if(g_fOnDuringInit)
kevman 0:014fad4dfb9d 96 printf("%s",HostIf.strErrorBuf);
kevman 0:014fad4dfb9d 97 else
kevman 0:014fad4dfb9d 98 HostIf.fSendError = true;
kevman 0:014fad4dfb9d 99 return(false); // ist nur zur Sicherheit
kevman 0:014fad4dfb9d 100 }
kevman 0:014fad4dfb9d 101
kevman 0:014fad4dfb9d 102 m_FpHeader = fopen(FName, OpenMode); // Datei im OpenMode öffnen
kevman 0:014fad4dfb9d 103 if(m_FpHeader == NULL) // Fehler beim Öffnen der Datei, der wesentliche Grund ist, das die Datei nicht vorhanden ist.
kevman 0:014fad4dfb9d 104 // Die Konsequenz ist, daß die Quelldaten initialisiert werden müssen, eine Fehlermeldung muss nicht ausgegeben werden,
kevman 0:014fad4dfb9d 105 // es dürfen jedoch keine weiteren Daten aus der Datei gelesen werden.
kevman 0:014fad4dfb9d 106 {
kevman 0:014fad4dfb9d 107 sprintf(HostIf.strErrorBuf,"%c#ER#Error open Header-File %s. %c\r\n", STX, FName, ETX); //
kevman 0:014fad4dfb9d 108 HostIf.fSendError = true;
kevman 0:014fad4dfb9d 109 return(false);
kevman 0:014fad4dfb9d 110 }
kevman 0:014fad4dfb9d 111 m_fHeaderIsOpen = true;
kevman 0:014fad4dfb9d 112
kevman 0:014fad4dfb9d 113 rewind(m_FpHeader);
kevman 0:014fad4dfb9d 114 return(true);
kevman 0:014fad4dfb9d 115 }
kevman 0:014fad4dfb9d 116
kevman 0:014fad4dfb9d 117 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 118 CloseFile: Schließt eine geöffnete Datei
kevman 0:014fad4dfb9d 119 Returnwert ist true bei erfolgreichem Schliessen
kevman 0:014fad4dfb9d 120 Returnwert ist false bei fehlerhaftem Schliessen
kevman 0:014fad4dfb9d 121 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 122 int StorageCard::CloseHeaderFile()
kevman 0:014fad4dfb9d 123 {
kevman 0:014fad4dfb9d 124 if(m_fHeaderIsOpen == true)
kevman 0:014fad4dfb9d 125 {
kevman 0:014fad4dfb9d 126 clearerr(m_FpHeader);
kevman 0:014fad4dfb9d 127 fflush(m_FpHeader);
kevman 0:014fad4dfb9d 128 fclose(m_FpHeader); // Datei zu
kevman 0:014fad4dfb9d 129 m_fHeaderIsOpen = false;
kevman 0:014fad4dfb9d 130 m_FpHeader = NULL;
kevman 0:014fad4dfb9d 131 return(true);
kevman 0:014fad4dfb9d 132 }
kevman 0:014fad4dfb9d 133 return(false);
kevman 0:014fad4dfb9d 134 }
kevman 0:014fad4dfb9d 135
kevman 0:014fad4dfb9d 136 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 137 ReadLine: Liest eine Zeile aus der geöffneten Datei
kevman 0:014fad4dfb9d 138 Wenn der Pointer von fgets nach dem Leseversuch NULL ist, dann wurde nichts mehr gelesen
kevman 0:014fad4dfb9d 139 und die Datei wird automatisch geschlossen, d.h. die lesende Funktion muss nur so lange lesen
kevman 0:014fad4dfb9d 140 bis false zurückkommt.
kevman 0:014fad4dfb9d 141 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 142 int StorageCard::ReadLine(char *Dest, int MaxLen)
kevman 0:014fad4dfb9d 143 {
kevman 0:014fad4dfb9d 144 if(m_fFileIsOpen == true)
kevman 0:014fad4dfb9d 145 {
kevman 0:014fad4dfb9d 146 if(fgets(Dest , MaxLen , m_Fp) != NULL )
kevman 0:014fad4dfb9d 147 return(strlen(Dest));
kevman 0:014fad4dfb9d 148 clearerr(m_Fp);
kevman 0:014fad4dfb9d 149 }
kevman 0:014fad4dfb9d 150 return(false);
kevman 0:014fad4dfb9d 151 }
kevman 0:014fad4dfb9d 152 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 153 WriteLine: Schreibt eine Zeile in die geöffneten Datei
kevman 0:014fad4dfb9d 154 Wenn beim Schreiben ein Fehler auftrifft, dann wird false zurückgegeben, ansonsten true.
kevman 0:014fad4dfb9d 155 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 156 int StorageCard::WriteLine()
kevman 0:014fad4dfb9d 157 {
kevman 0:014fad4dfb9d 158 if(m_fFileIsOpen == true)
kevman 0:014fad4dfb9d 159 {
kevman 0:014fad4dfb9d 160 fputs(cSdLine, m_Fp);
kevman 0:014fad4dfb9d 161 if (ferror (m_Fp))
kevman 0:014fad4dfb9d 162 {
kevman 0:014fad4dfb9d 163 clearerr(m_Fp);
kevman 0:014fad4dfb9d 164 fclose(m_Fp);
kevman 0:014fad4dfb9d 165 m_fFileIsOpen = false;
kevman 0:014fad4dfb9d 166 return(false);
kevman 0:014fad4dfb9d 167 }
kevman 0:014fad4dfb9d 168 fflush(m_Fp);
kevman 0:014fad4dfb9d 169 return(true);
kevman 0:014fad4dfb9d 170 }
kevman 0:014fad4dfb9d 171
kevman 0:014fad4dfb9d 172 return(false);
kevman 0:014fad4dfb9d 173 }
kevman 0:014fad4dfb9d 174 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 175 WriteHeaderLine: Schreibt eine Zeile in die geöffneten Datei
kevman 0:014fad4dfb9d 176 Wenn beim Schreiben ein Fehler auftrifft, dann wird false zurückgegeben, ansonsten true.
kevman 0:014fad4dfb9d 177 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 178 int StorageCard::WriteHeaderLine()
kevman 0:014fad4dfb9d 179 {
kevman 0:014fad4dfb9d 180 if(m_fHeaderIsOpen == true)
kevman 0:014fad4dfb9d 181 {
kevman 0:014fad4dfb9d 182 fputs(strFileRwBuf, m_FpHeader);
kevman 0:014fad4dfb9d 183 if (ferror (m_FpHeader))
kevman 0:014fad4dfb9d 184 {
kevman 0:014fad4dfb9d 185 clearerr(m_FpHeader);
kevman 0:014fad4dfb9d 186 fclose(m_FpHeader);
kevman 0:014fad4dfb9d 187 m_fHeaderIsOpen = false;
kevman 0:014fad4dfb9d 188 return(false);
kevman 0:014fad4dfb9d 189 }
kevman 0:014fad4dfb9d 190 return(true);
kevman 0:014fad4dfb9d 191 }
kevman 0:014fad4dfb9d 192 return(false);
kevman 0:014fad4dfb9d 193 }
kevman 0:014fad4dfb9d 194
kevman 0:014fad4dfb9d 195 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 196 CloseFile: Schließt eine geöffnete Datei
kevman 0:014fad4dfb9d 197 Returnwert ist true bei erfolgreichem Schliessen
kevman 0:014fad4dfb9d 198 Returnwert ist false bei fehlerhaftem Schliessen
kevman 0:014fad4dfb9d 199 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 200 int StorageCard::CloseFile()
kevman 0:014fad4dfb9d 201 {
kevman 0:014fad4dfb9d 202 if(m_fFileIsOpen == true)
kevman 0:014fad4dfb9d 203 {
kevman 0:014fad4dfb9d 204 clearerr(m_Fp);
kevman 0:014fad4dfb9d 205 fflush(m_Fp);
kevman 0:014fad4dfb9d 206 fclose(m_Fp); // Datei zu
kevman 0:014fad4dfb9d 207 m_fFileIsOpen = false;
kevman 0:014fad4dfb9d 208 m_Fp = NULL;
kevman 0:014fad4dfb9d 209 #ifdef TFT_DEBUG
kevman 0:014fad4dfb9d 210 printf("In CloseFile of SdCard \n");
kevman 0:014fad4dfb9d 211 #endif
kevman 0:014fad4dfb9d 212 return(true);
kevman 0:014fad4dfb9d 213 }
kevman 0:014fad4dfb9d 214 return(false);
kevman 0:014fad4dfb9d 215 }
kevman 0:014fad4dfb9d 216 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 217 ReadFile: Lesen einer kompletten Datei über Klassenmethoden
kevman 0:014fad4dfb9d 218 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 219 int StorageCard::ReadFile(char *fName, char *DestBuf, int MaxLen)
kevman 0:014fad4dfb9d 220 {
kevman 0:014fad4dfb9d 221 int Ret, Len;
kevman 0:014fad4dfb9d 222
kevman 0:014fad4dfb9d 223 if(OpenFile(fName, FileNames.FileReadMode) == false)
kevman 0:014fad4dfb9d 224 return(false);
kevman 0:014fad4dfb9d 225
kevman 0:014fad4dfb9d 226 Len = 0;
kevman 0:014fad4dfb9d 227 do
kevman 0:014fad4dfb9d 228 {
kevman 0:014fad4dfb9d 229 Ret = ReadLine(strFileRwBuf, FILE_RW_BUF_LEN);
kevman 0:014fad4dfb9d 230 if(Ret > 0) // es wurden Zeichen gelesen
kevman 0:014fad4dfb9d 231 {
kevman 0:014fad4dfb9d 232 Len += Ret;
kevman 0:014fad4dfb9d 233 if(Len < MaxLen)
kevman 0:014fad4dfb9d 234 strcat(DestBuf, strFileRwBuf);
kevman 0:014fad4dfb9d 235 }
kevman 0:014fad4dfb9d 236 }
kevman 0:014fad4dfb9d 237 while(Ret > 0);
kevman 0:014fad4dfb9d 238
kevman 0:014fad4dfb9d 239 CloseFile();
kevman 0:014fad4dfb9d 240 return true;
kevman 0:014fad4dfb9d 241
kevman 0:014fad4dfb9d 242 }
kevman 0:014fad4dfb9d 243
kevman 0:014fad4dfb9d 244 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 245 WriteFile: Schreiben einer kompletten Datei über Klassenmethoden
kevman 0:014fad4dfb9d 246 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 247 int StorageCard::WriteFile(char *fName, char *SrcBuf)
kevman 0:014fad4dfb9d 248 {
kevman 0:014fad4dfb9d 249 int Ret;
kevman 0:014fad4dfb9d 250
kevman 0:014fad4dfb9d 251 if(OpenFile(fName, FileNames.FileWriteMode) == false)
kevman 0:014fad4dfb9d 252 return(false);
kevman 0:014fad4dfb9d 253
kevman 0:014fad4dfb9d 254 Ret = fputs(SrcBuf,m_Fp);
kevman 0:014fad4dfb9d 255
kevman 0:014fad4dfb9d 256 CloseFile();
kevman 0:014fad4dfb9d 257 if(Ret == EOF)
kevman 0:014fad4dfb9d 258 return(false);
kevman 0:014fad4dfb9d 259 return true;
kevman 0:014fad4dfb9d 260 }
kevman 0:014fad4dfb9d 261 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 262 RemoveFile: Löschen einer Datei auf der SD Card
kevman 0:014fad4dfb9d 263 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 264 int StorageCard::RemoveFile(char *fName)
kevman 0:014fad4dfb9d 265 {
kevman 0:014fad4dfb9d 266 return(remove(fName));
kevman 0:014fad4dfb9d 267 }
kevman 0:014fad4dfb9d 268 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 269 AppendSdValueToLine: Löschen einer Datei auf der SD Card
kevman 0:014fad4dfb9d 270 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 271 int StorageCard::AppendSdValueToLine()
kevman 0:014fad4dfb9d 272 {
kevman 0:014fad4dfb9d 273 strcat (cSdLine, cSdValue);
kevman 0:014fad4dfb9d 274 return(true);
kevman 0:014fad4dfb9d 275 }
kevman 0:014fad4dfb9d 276 // Methoden speziell fuer die KonfigurationsDatei mit den Autostartvariablen
kevman 0:014fad4dfb9d 277 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 278 OpenAutoFile: Öffnet eine Datei fuer den AutoStart
kevman 0:014fad4dfb9d 279 Returnwert ist true bei erfolgreichem Öffnen
kevman 0:014fad4dfb9d 280 Returnwert ist false bei fehlerhaftem Öffnen
kevman 0:014fad4dfb9d 281 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 282 int StorageCard::OpenAutoFile(char *FName, char *OpenMode)
kevman 0:014fad4dfb9d 283 {
kevman 0:014fad4dfb9d 284 if(m_fAutoFileIsOpen == true) // ist bereits geoeffnet oder wurde nicht geschlossen
kevman 0:014fad4dfb9d 285 {
kevman 0:014fad4dfb9d 286 printf("AutoFileIsOpened\n");
kevman 0:014fad4dfb9d 287 return(false); // ist nur zur Sicherheit
kevman 0:014fad4dfb9d 288 }
kevman 0:014fad4dfb9d 289 /* else
kevman 0:014fad4dfb9d 290 {
kevman 0:014fad4dfb9d 291 sprintf(HostIf.strErrorBuf,"%c#ER#Error open Autofile %s. %c\r\n", STX, FName, ETX); //
kevman 0:014fad4dfb9d 292 HostIf.fSendError = true;
kevman 0:014fad4dfb9d 293 return(false); // ist nur zur Sicherheit
kevman 0:014fad4dfb9d 294 }
kevman 0:014fad4dfb9d 295 */
kevman 0:014fad4dfb9d 296 m_FpAutoFile = fopen(FName, OpenMode); // Datei im OpenMode öffnen
kevman 0:014fad4dfb9d 297 if(m_FpAutoFile == NULL) // Fehler beim Öffnen der Datei, der wesentliche Grund ist, das die Datei nicht vorhanden ist.
kevman 0:014fad4dfb9d 298 // Die Konsequenz ist, daß die Quelldaten initialisiert werden müssen, eine Fehlermeldung muss nicht ausgegeben werden,
kevman 0:014fad4dfb9d 299 // es dürfen jedoch keine weiteren Daten aus der Datei gelesen werden.
kevman 0:014fad4dfb9d 300 {
kevman 0:014fad4dfb9d 301 printf("AutoFilePointer is zero, no File with Autostart configurations\n");
kevman 0:014fad4dfb9d 302 return(false);
kevman 0:014fad4dfb9d 303 }
kevman 0:014fad4dfb9d 304 m_fAutoFileIsOpen = true;
kevman 0:014fad4dfb9d 305
kevman 0:014fad4dfb9d 306 rewind(m_FpAutoFile);
kevman 0:014fad4dfb9d 307 return(true);
kevman 0:014fad4dfb9d 308 }
kevman 0:014fad4dfb9d 309 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 310 ReadAutoLine: Liest eine Zeile aus der geöffneten AutoDatei
kevman 0:014fad4dfb9d 311 Wenn der Pointer von fgets nach dem Leseversuch NULL ist, dann wurde nichts mehr gelesen
kevman 0:014fad4dfb9d 312 und die Datei wird automatisch geschlossen, d.h. die lesende Funktion muss nur so lange lesen
kevman 0:014fad4dfb9d 313 bis false zurückkommt.
kevman 0:014fad4dfb9d 314 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 315 int StorageCard::ReadAutoLine(char *Dest, int MaxLen)
kevman 0:014fad4dfb9d 316 {
kevman 0:014fad4dfb9d 317 if(m_fAutoFileIsOpen == true)
kevman 0:014fad4dfb9d 318 {
kevman 0:014fad4dfb9d 319 if(fgets(Dest, MaxLen , m_FpAutoFile) != NULL )
kevman 0:014fad4dfb9d 320 return(strlen(Dest));
kevman 0:014fad4dfb9d 321 clearerr(m_FpAutoFile);
kevman 0:014fad4dfb9d 322 }
kevman 0:014fad4dfb9d 323 return(false);
kevman 0:014fad4dfb9d 324 }
kevman 0:014fad4dfb9d 325
kevman 0:014fad4dfb9d 326 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 327 WriteAutoLine: Schreibt eine Zeile in die geöffneten Datei
kevman 0:014fad4dfb9d 328 Wenn beim Schreiben ein Fehler auftrifft, dann wird false zurückgegeben, ansonsten true.
kevman 0:014fad4dfb9d 329 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 330 int StorageCard::WriteAutoLine()
kevman 0:014fad4dfb9d 331 {
kevman 0:014fad4dfb9d 332 if(m_fAutoFileIsOpen == true)
kevman 0:014fad4dfb9d 333 {
kevman 0:014fad4dfb9d 334 fputs(cSdLine, m_FpAutoFile);
kevman 0:014fad4dfb9d 335 if (ferror (m_FpAutoFile))
kevman 0:014fad4dfb9d 336 {
kevman 0:014fad4dfb9d 337 clearerr(m_FpAutoFile);
kevman 0:014fad4dfb9d 338 fclose(m_FpAutoFile);
kevman 0:014fad4dfb9d 339 m_fAutoFileIsOpen = false;
kevman 0:014fad4dfb9d 340 return(false);
kevman 0:014fad4dfb9d 341 }
kevman 0:014fad4dfb9d 342 fflush(m_FpAutoFile);
kevman 0:014fad4dfb9d 343 #ifdef RWFILE_DEBUG
kevman 0:014fad4dfb9d 344 printf ("%s",cSdLine);
kevman 0:014fad4dfb9d 345 #endif
kevman 0:014fad4dfb9d 346 return(true);
kevman 0:014fad4dfb9d 347 }
kevman 0:014fad4dfb9d 348
kevman 0:014fad4dfb9d 349 return(false);
kevman 0:014fad4dfb9d 350 }
kevman 0:014fad4dfb9d 351
kevman 0:014fad4dfb9d 352 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 353 CloseAutoFile: Schließt eine geöffnete Datei
kevman 0:014fad4dfb9d 354 Returnwert ist true bei erfolgreichem Schliessen
kevman 0:014fad4dfb9d 355 Returnwert ist false bei fehlerhaftem Schliessen
kevman 0:014fad4dfb9d 356 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 357 int StorageCard::CloseAutoFile()
kevman 0:014fad4dfb9d 358 {
kevman 0:014fad4dfb9d 359 if(m_fAutoFileIsOpen == true)
kevman 0:014fad4dfb9d 360 {
kevman 0:014fad4dfb9d 361 clearerr(m_FpAutoFile);
kevman 0:014fad4dfb9d 362 fflush(m_FpAutoFile);
kevman 0:014fad4dfb9d 363 fclose(m_FpAutoFile); // Datei zu
kevman 0:014fad4dfb9d 364 m_fAutoFileIsOpen = false;
kevman 0:014fad4dfb9d 365 m_FpAutoFile = NULL;
kevman 0:014fad4dfb9d 366 return(true);
kevman 0:014fad4dfb9d 367 }
kevman 0:014fad4dfb9d 368 return(false);
kevman 0:014fad4dfb9d 369 }
kevman 0:014fad4dfb9d 370
kevman 0:014fad4dfb9d 371
kevman 0:014fad4dfb9d 372 // Methoden fuer das Schreiben von Automessdaten
kevman 0:014fad4dfb9d 373 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 374 OpenAutoFile: Öffnet eine Datei fuer den AutoStart
kevman 0:014fad4dfb9d 375 Returnwert ist true bei erfolgreichem Öffnen
kevman 0:014fad4dfb9d 376 Returnwert ist false bei fehlerhaftem Öffnen
kevman 0:014fad4dfb9d 377 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 378 int StorageCard::OpenMwAutoFile(char *FName, char *OpenMode)
kevman 0:014fad4dfb9d 379 {
kevman 0:014fad4dfb9d 380 if(m_fMwAutoFileIsOpen == true) // ist bereits geoeffnet oder wurde nicht geschlossen
kevman 0:014fad4dfb9d 381 {
kevman 0:014fad4dfb9d 382 #ifdef SEND_DEBUG_TO_HOST
kevman 0:014fad4dfb9d 383 printf("MwAutoFileIsOpened\n");
kevman 0:014fad4dfb9d 384 #endif
kevman 0:014fad4dfb9d 385 return(false); // ist nur zur Sicherheit
kevman 0:014fad4dfb9d 386 }
kevman 0:014fad4dfb9d 387 m_FpMwAutoFile = fopen(FName, OpenMode); // Datei im OpenMode öffnen
kevman 0:014fad4dfb9d 388 if(m_FpMwAutoFile == NULL) // Fehler beim Öffnen der Datei, der wesentliche Grund ist, das die Datei nicht vorhanden ist.
kevman 0:014fad4dfb9d 389 // Die Konsequenz ist, daß die Quelldaten initialisiert werden müssen, eine Fehlermeldung muss nicht ausgegeben werden,
kevman 0:014fad4dfb9d 390 // es dürfen jedoch keine weiteren Daten aus der Datei gelesen werden.
kevman 0:014fad4dfb9d 391 {
kevman 0:014fad4dfb9d 392 return(false);
kevman 0:014fad4dfb9d 393 }
kevman 0:014fad4dfb9d 394 m_fMwAutoFileIsOpen = true;
kevman 0:014fad4dfb9d 395
kevman 0:014fad4dfb9d 396 rewind(m_FpMwAutoFile);
kevman 0:014fad4dfb9d 397 return(true);
kevman 0:014fad4dfb9d 398
kevman 0:014fad4dfb9d 399 }
kevman 0:014fad4dfb9d 400 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 401 WriteAutoLine: Schreibt eine Zeile in die geöffneten Auto Datei
kevman 0:014fad4dfb9d 402 Wenn beim Schreiben ein Fehler auftrifft, dann wird false zurückgegeben, ansonsten true.
kevman 0:014fad4dfb9d 403 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 404 int StorageCard::WriteMwAutoLine()
kevman 0:014fad4dfb9d 405 {
kevman 0:014fad4dfb9d 406 if(m_fMwAutoFileIsOpen == true)
kevman 0:014fad4dfb9d 407 {
kevman 0:014fad4dfb9d 408 fputs(strFileRwBuf, m_FpMwAutoFile);
kevman 0:014fad4dfb9d 409 if (ferror (m_FpMwAutoFile))
kevman 0:014fad4dfb9d 410 {
kevman 0:014fad4dfb9d 411 clearerr(m_FpMwAutoFile);
kevman 0:014fad4dfb9d 412 fclose(m_FpMwAutoFile);
kevman 0:014fad4dfb9d 413 m_fMwAutoFileIsOpen = false;
kevman 0:014fad4dfb9d 414 return(false);
kevman 0:014fad4dfb9d 415 }
kevman 0:014fad4dfb9d 416 return(true);
kevman 0:014fad4dfb9d 417 }
kevman 0:014fad4dfb9d 418 return(false);
kevman 0:014fad4dfb9d 419 }
kevman 0:014fad4dfb9d 420 /*-----------------------------------------------------------------------------------------------
kevman 0:014fad4dfb9d 421 CloseAutoFile: Schließt die Auto Datei
kevman 0:014fad4dfb9d 422 Returnwert ist true bei erfolgreichem Schliessen
kevman 0:014fad4dfb9d 423 Returnwert ist false bei fehlerhaftem Schliessen
kevman 0:014fad4dfb9d 424 -----------------------------------------------------------------------------------------------*/
kevman 0:014fad4dfb9d 425 int StorageCard::CloseMwAutoFile()
kevman 0:014fad4dfb9d 426 {
kevman 0:014fad4dfb9d 427 if(m_fMwAutoFileIsOpen == true)
kevman 0:014fad4dfb9d 428 {
kevman 0:014fad4dfb9d 429 clearerr(m_FpMwAutoFile);
kevman 0:014fad4dfb9d 430 fflush(m_FpMwAutoFile);
kevman 0:014fad4dfb9d 431 fclose(m_FpMwAutoFile); // Datei zu
kevman 0:014fad4dfb9d 432 m_fMwAutoFileIsOpen = false;
kevman 0:014fad4dfb9d 433 m_FpMwAutoFile = NULL;
kevman 0:014fad4dfb9d 434 return(true);
kevman 0:014fad4dfb9d 435 }
kevman 0:014fad4dfb9d 436 return(false);
kevman 0:014fad4dfb9d 437 }