Deluge Firmware
Loading...
Searching...
No Matches
storagemanager.h
Go to the documentation of this file.
1/*
2 * Copyright © 2014-2023 Synthstrom Audible Limited
3 *
4 * This file is part of The Synthstrom Audible Deluge Firmware.
5 *
6 * The Synthstrom Audible Deluge Firmware is free software: you can redistribute it and/or modify it under the
7 * terms of the GNU General Public License as published by the Free Software Foundation,
8 * either version 3 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 * See the GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along with this program.
15 * If not, see <https://www.gnu.org/licenses/>.
16 */
17
18#ifndef STORAGEMANAGER_H
19#define STORAGEMANAGER_H
20
21#include "definitions.h"
22#include "r_typedefs.h"
23
24
25
26extern "C" {
27#include "fatfs/ff.h"
28}
29
30
31
33
34
36 FATFS fileSystem; /* File system object */
37 FIL currentFile; /* File object */
38};
39
41
42class Instrument;
43class PlaybackMode;
46class Song;
47class InstrumentClip;
48class ParamManagerMIDI;
49class Drum;
50class String;
52class ParamManager;
53
55{
56public:
58
59 void writeAttribute(char const* name, int32_t number, bool onNewLine = true);
60 void writeAttribute(char const* name, char const* value, bool onNewLine = true);
61 void writeAttributeHex(char const* name, int32_t number, int numChars, bool onNewLine = true);
62 void writeTag(char const* tag, int32_t number);
63 void writeTag(char const *tag, char const* contents);
64 void writeOpeningTag(char const* tag, bool startNewLineAfter = true);
65 void writeOpeningTagBeginning(char const* tag);
66 void writeOpeningTagEnd(bool startNewLineAfter = true);
67 void closeTag();
68 void writeClosingTag(char const *tag, bool shouldPrintIndents = true);
69 void printIndents();
70 char const* readNextTagOrAttributeName();
71 void exitTag(char const* exitTagName = NULL);
72 char const* readTagOrAttributeValue();
73
74 int createFile(FIL* file, char const* filePath, bool mayOverwrite);
75 int createXMLFile(char const* pathName, bool mayOverwrite = false);
76 int openXMLFile(FilePointer* filePointer, char const *firstTagName, char const* altTagName = "", bool ignoreIncorrectFirmware = false);
79 char const* readNextCharsOfTagOrAttributeValue(int numChars);
80 void readMidiCommand(uint8_t *channel, uint8_t *note = NULL);
81 int initSD();
82 bool closeFile();
83 int closeFileAfterWriting(char const* path = NULL, char const* beginningString = NULL, char const* endString = NULL);
84 uint32_t readCharXML(char* thisChar);
85 void write(char const* output);
86 bool lseek(uint32_t pos);
87 bool fileExists(char const* pathName);
88 bool fileExists(char const* pathName, FilePointer* fp);
89 int openInstrumentFile(int instrumentType, FilePointer* filePointer);
91 bool checkSDPresent();
92 bool checkSDInitialized();
93 bool readXMLFileCluster();
95 Instrument* createNewInstrument(uint8_t newInstrumentType, ParamManager* getParamManager = NULL);
96 int loadInstrumentFromFile(Song* song, InstrumentClip* clip, int instrumentType, bool mayReadSamplesFromFiles, Instrument** getInstrument, FilePointer* filePointer, String* name, String* dirPath);
97 Instrument* createNewNonAudioInstrument(int instrumentType, int slot, int subSlot);
98 void writeEarliestCompatibleFirmwareVersion(char const* versionString);
99 int readMIDIParamFromFile(int32_t readAutomationUpToPos, MIDIParamCollection* midiParamCollection, int8_t* getCC = NULL);
100 Drum* createNewDrum(int drumType);
101 void openFilePointer(FilePointer* fp);
102 int tryReadingFirmwareTagFromFile(char const* tagName, bool ignoreIncorrectFirmware = false);
104 int32_t readTagOrAttributeValueHex(int errorValue);
105
107 int checkSpaceOnCard();
108
110 void writeAbsoluteSyncLevelToFile(Song* song, char const* name, int internalValue, bool onNewLine = true);
111
113
114
116
120
122
130
131private:
132 uint8_t indentAmount;
133
134
135 uint8_t xmlArea;
136 bool xmlReachedEnd;
137 int tagDepthCaller; // How deeply indented in XML the main Deluge classes think we are, as data being read.
138 int tagDepthFile; // Will temporarily be different to the above as unwanted / unused XML tags parsed on the way to finding next useful data.
139 int xmlReadCount;
140
141 void skipUntilChar(char endChar);
142 char const* readTagName();
143 char const* readNextAttributeName();
144 char const* readUntilChar(char endChar);
145 char const* readAttributeValue();
146 int32_t readIntUntilChar(char endChar);
147 bool getIntoAttributeValue();
148 int32_t readAttributeValueInt();
149 bool readXMLFileClusterIfNecessary();
150 int readStringUntilChar(String* string, char endChar);
151 int readAttributeValueString(String* string);
152 void restoreBackedUpCharIfNecessary();
153 void xmlReadDone();
154
155
156 int writeBufferToFile();
157
158};
159
161extern FILINFO staticFNO;
162extern DIR staticDIR;
163
164#endif // STORAGEMANAGER_H
Definition: Arpeggiator.h:28
Definition: drum.h:45
Definition: InstrumentClip.h:54
Definition: instrument.h:45
Definition: MIDIParamCollection.h:27
Definition: ParamManager.h:166
Definition: ParamManager.h:50
Definition: PlaybackMode.h:31
Definition: song.h:72
Definition: storagemanager.h:55
void writeAbsoluteSyncLevelToFile(Song *song, char const *name, int internalValue, bool onNewLine=true)
Definition: storagemanager.cpp:1526
bool checkSDPresent()
Definition: storagemanager.cpp:1247
void writeOpeningTag(char const *tag, bool startNewLineAfter=true)
Definition: storagemanager.cpp:151
void readMidiCommand(uint8_t *channel, uint8_t *note=NULL)
Definition: storagemanager.cpp:898
void write(char const *output)
Definition: storagemanager.cpp:1028
bool fileExists(char const *pathName)
Definition: storagemanager.cpp:1002
char const * readTagOrAttributeValue()
Definition: storagemanager.cpp:715
void writeOpeningTagBeginning(char const *tag)
Definition: storagemanager.cpp:156
int firmwareVersionOfFileBeingRead
Definition: storagemanager.h:115
bool checkSDInitialized()
Definition: storagemanager.cpp:1253
int checkSpaceOnCard()
Definition: storagemanager.cpp:916
int devVarD
Definition: storagemanager.h:126
void openFilePointer(FilePointer *fp)
Definition: storagemanager.cpp:1260
int devVarE
Definition: storagemanager.h:127
int devVarA
Definition: storagemanager.h:123
int fileBufferCurrentPos
Definition: storagemanager.h:119
int getNumCharsRemainingInValue()
Definition: storagemanager.cpp:791
int tryReadingFirmwareTagFromFile(char const *tagName, bool ignoreIncorrectFirmware=false)
Definition: storagemanager.cpp:1168
void writeClosingTag(char const *tag, bool shouldPrintIndents=true)
Definition: storagemanager.cpp:174
char readNextCharOfTagOrAttributeValue()
Definition: storagemanager.cpp:667
UINT currentReadBufferEndPos
Definition: storagemanager.h:118
int fileTotalBytesWritten
Definition: storagemanager.h:121
void writeFirmwareVersion()
Definition: storagemanager.cpp:1216
int devVarC
Definition: storagemanager.h:125
bool readXMLFileCluster()
Definition: storagemanager.cpp:1190
int openXMLFile(FilePointer *filePointer, char const *firstTagName, char const *altTagName="", bool ignoreIncorrectFirmware=false)
Definition: storagemanager.cpp:1135
int devVarF
Definition: storagemanager.h:128
int devVarB
Definition: storagemanager.h:124
void printIndents()
Definition: storagemanager.cpp:182
bool prepareToReadTagOrAttributeValueOneCharAtATime()
Definition: storagemanager.cpp:803
void writeTag(char const *tag, int32_t number)
Definition: storagemanager.cpp:96
int createFile(FIL *file, char const *filePath, bool mayOverwrite)
Definition: storagemanager.cpp:925
uint32_t readCharXML(char *thisChar)
Definition: storagemanager.cpp:843
char const * readNextTagOrAttributeName()
Definition: storagemanager.cpp:367
bool closeFile()
Definition: storagemanager.cpp:1209
int readTagOrAttributeValueString(String *string)
Definition: storagemanager.cpp:768
bool fileAccessFailedDuring
Definition: storagemanager.h:112
void writeAttribute(char const *name, int32_t number, bool onNewLine=true)
Definition: storagemanager.cpp:114
char * fileClusterBuffer
Definition: storagemanager.h:117
void writeEarliestCompatibleFirmwareVersion(char const *versionString)
Definition: storagemanager.cpp:1220
int openInstrumentFile(int instrumentType, FilePointer *filePointer)
Definition: storagemanager.cpp:1281
Drum * createNewDrum(int drumType)
Definition: storagemanager.cpp:1457
int initSD()
Definition: storagemanager.cpp:1226
void closeTag()
Definition: storagemanager.cpp:163
int devVarG
Definition: storagemanager.h:129
int readMIDIParamFromFile(int32_t readAutomationUpToPos, MIDIParamCollection *midiParamCollection, int8_t *getCC=NULL)
Definition: storagemanager.cpp:1481
char const * readNextCharsOfTagOrAttributeValue(int numChars)
Definition: storagemanager.cpp:614
bool lseek(uint32_t pos)
Definition: storagemanager.cpp:1125
int closeFileAfterWriting(char const *path=NULL, char const *beginningString=NULL, char const *endString=NULL)
Definition: storagemanager.cpp:1080
int readAbsoluteSyncLevelFromFile(Song *song)
Definition: storagemanager.cpp:1522
void exitTag(char const *exitTagName=NULL)
Definition: storagemanager.cpp:855
void writeAttributeHex(char const *name, int32_t number, int numChars, bool onNewLine=true)
Definition: storagemanager.cpp:124
Instrument * createNewInstrument(uint8_t newInstrumentType, ParamManager *getParamManager=NULL)
Definition: storagemanager.cpp:1383
int createXMLFile(char const *pathName, bool mayOverwrite=false)
Definition: storagemanager.cpp:985
Instrument * createNewNonAudioInstrument(int instrumentType, int slot, int subSlot)
Definition: storagemanager.cpp:1436
int loadInstrumentFromFile(Song *song, InstrumentClip *clip, int instrumentType, bool mayReadSamplesFromFiles, Instrument **getInstrument, FilePointer *filePointer, String *name, String *dirPath)
Definition: storagemanager.cpp:1305
void writeOpeningTagEnd(bool startNewLineAfter=true)
Definition: storagemanager.cpp:169
int32_t readTagOrAttributeValueInt()
Definition: storagemanager.cpp:737
StorageManager()
Definition: storagemanager.cpp:82
int32_t readTagOrAttributeValueHex(int errorValue)
Definition: storagemanager.cpp:760
Definition: DString.h:25
struct FileSystemStuff fileSystemStuff
Definition: storagemanager.cpp:80
StorageManager storageManager
Definition: storagemanager.cpp:70
DIR staticDIR
Definition: storagemanager.cpp:72
void deleteOldSongBeforeLoadingNew()
Definition: Deluge.cpp:1046
FILINFO staticFNO
Definition: storagemanager.cpp:71
Definition: storagemanager.h:35
FIL currentFile
Definition: storagemanager.h:37
FATFS fileSystem
Definition: storagemanager.h:36