mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2024-11-24 04:29:34 +00:00
1532200435
One array was too short. This had nothing to do with long filenames, other than if they were 12 characters exactly, which could only happen if the extension and the text before were filled completely
76 lines
2.1 KiB
C++
76 lines
2.1 KiB
C++
#ifndef __CARDREADERH
|
|
#define __CARDREADERH
|
|
|
|
#ifdef SDSUPPORT
|
|
|
|
#include "SdFile.h"
|
|
enum LsAction {LS_SerialPrint,LS_Count,LS_GetFilename};
|
|
class CardReader
|
|
{
|
|
public:
|
|
CardReader();
|
|
|
|
void initsd();
|
|
void write_command(char *buf);
|
|
//files auto[0-9].g on the sd card are performed in a row
|
|
//this is to delay autostart and hence the initialisaiton of the sd card to some seconds after the normal init, so the device is available quick after a reset
|
|
|
|
void checkautostart(bool x);
|
|
void openFile(char* name,bool read);
|
|
void removeFile(char* name);
|
|
void closefile();
|
|
void release();
|
|
void startFileprint();
|
|
void pauseSDPrint();
|
|
void getStatus();
|
|
void printingHasFinished();
|
|
|
|
void getfilename(const uint8_t nr);
|
|
uint16_t getnrfilenames();
|
|
|
|
|
|
void ls();
|
|
void chdir(const char * relpath);
|
|
void updir();
|
|
void setroot();
|
|
|
|
|
|
FORCE_INLINE bool eof() { return sdpos>=filesize ;};
|
|
FORCE_INLINE int16_t get() { sdpos = file.curPosition();return (int16_t)file.read();};
|
|
FORCE_INLINE void setIndex(long index) {sdpos = index;file.seekSet(index);};
|
|
FORCE_INLINE uint8_t percentDone(){if(!sdprinting) return 0; if(filesize) return sdpos*100/filesize; else return 0;};
|
|
FORCE_INLINE char* getWorkDirName(){workDir.getFilename(filename);return filename;};
|
|
|
|
public:
|
|
bool saving;
|
|
bool sdprinting ;
|
|
bool cardOK ;
|
|
char filename[12];
|
|
bool filenameIsDir;
|
|
int lastnr; //last number of the autostart;
|
|
private:
|
|
SdFile root,*curDir,workDir,workDirParent,workDirParentParent;
|
|
Sd2Card card;
|
|
SdVolume volume;
|
|
SdFile file;
|
|
uint32_t filesize;
|
|
//int16_t n;
|
|
unsigned long autostart_atmillis;
|
|
uint32_t sdpos ;
|
|
|
|
bool autostart_stilltocheck; //the sd start is delayed, because otherwise the serial cannot answer fast enought to make contact with the hostsoftware.
|
|
|
|
LsAction lsAction; //stored for recursion.
|
|
int16_t nrFiles; //counter for the files in the current directory and recycled as position counter for getting the nrFiles'th name in the directory.
|
|
char* diveDirName;
|
|
void lsDive(const char *prepend,SdFile parent);
|
|
};
|
|
#define IS_SD_PRINTING (card.sdprinting)
|
|
|
|
#else
|
|
|
|
#define IS_SD_PRINTING (false)
|
|
|
|
#endif //SDSUPPORT
|
|
#endif
|