Clean up autostart handling
This commit is contained in:
@ -62,15 +62,13 @@ CardReader::CardReader() {
|
||||
workDirDepth = 0;
|
||||
ZERO(workDirParents);
|
||||
|
||||
autostart_stilltocheck = true; //the SD start is delayed, because otherwise the serial cannot answer fast enough to make contact with the host software.
|
||||
autostart_index = 0;
|
||||
// Disable autostart until card is initialized
|
||||
autostart_index = -1;
|
||||
|
||||
//power to SD reader
|
||||
#if SDPOWER > -1
|
||||
OUT_WRITE(SDPOWER, HIGH);
|
||||
#endif // SDPOWER
|
||||
|
||||
next_autostart_ms = millis() + 5000;
|
||||
#endif
|
||||
}
|
||||
|
||||
char *createFilename(char *buffer, const dir_t &p) { //buffer > 12characters
|
||||
@ -607,40 +605,42 @@ void CardReader::write_command(char *buf) {
|
||||
}
|
||||
}
|
||||
|
||||
void CardReader::checkautostart(bool force) {
|
||||
if (!force && (!autostart_stilltocheck || PENDING(millis(), next_autostart_ms)))
|
||||
return;
|
||||
//
|
||||
// Run the next autostart file. Called:
|
||||
// - On boot after successful card init
|
||||
// - After finishing the previous autostart file
|
||||
// - From the LCD command to run the autostart file
|
||||
//
|
||||
|
||||
autostart_stilltocheck = false;
|
||||
void CardReader::checkautostart() {
|
||||
|
||||
if (!cardOK) {
|
||||
initsd();
|
||||
if (!cardOK) return; // fail
|
||||
}
|
||||
if (autostart_index < 0 || sdprinting) return;
|
||||
|
||||
char autoname[10];
|
||||
sprintf_P(autoname, PSTR("auto%i.g"), autostart_index);
|
||||
for (int8_t i = 0; i < (int8_t)strlen(autoname); i++) autoname[i] = tolower(autoname[i]);
|
||||
if (!cardOK) initsd();
|
||||
|
||||
dir_t p;
|
||||
|
||||
root.rewind();
|
||||
|
||||
bool found = false;
|
||||
while (root.readDir(p, NULL) > 0) {
|
||||
for (int8_t i = (int8_t)strlen((char*)p.name); i--;) p.name[i] = tolower(p.name[i]);
|
||||
if (p.name[9] != '~' && strncmp((char*)p.name, autoname, 5) == 0) {
|
||||
openAndPrintFile(autoname);
|
||||
found = true;
|
||||
if (cardOK) {
|
||||
char autoname[10];
|
||||
sprintf_P(autoname, PSTR("auto%i.g"), autostart_index);
|
||||
dir_t p;
|
||||
root.rewind();
|
||||
while (root.readDir(p, NULL) > 0) {
|
||||
for (int8_t i = (int8_t)strlen((char*)p.name); i--;) p.name[i] = tolower(p.name[i]);
|
||||
if (p.name[9] != '~' && strncmp((char*)p.name, autoname, 5) == 0) {
|
||||
openAndPrintFile(autoname);
|
||||
autostart_index++;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
autostart_index = -1;
|
||||
else
|
||||
autostart_index++;
|
||||
autostart_index = -1;
|
||||
}
|
||||
|
||||
void CardReader::closefile(bool store_location) {
|
||||
void CardReader::beginautostart() {
|
||||
autostart_index = 0;
|
||||
setroot();
|
||||
}
|
||||
|
||||
void CardReader::closefile(const bool store_location) {
|
||||
file.sync();
|
||||
file.close();
|
||||
saving = logging = false;
|
||||
|
Reference in New Issue
Block a user