void matrix_3x3::debug(const char title[]) { ECHO_LT(DB, title); int count = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (matrix[count] >= 0.0) ECHO_C('+'); ECHO_V(matrix[count], 6); ECHO_C(' '); count++; } ECHO_E; } }
void CardReader::removeFile(char* name) { if (!cardOK) return; file.close(); sdprinting = false; SdFile myDir; curDir = &root; char *fname = name; char *dirname_start, *dirname_end; if (name[0] == '/') { dirname_start = strchr(name, '/') + 1; while (dirname_start > 0) { dirname_end = strchr(dirname_start, '/'); if (dirname_end > 0 && dirname_end > dirname_start) { char subdirname[FILENAME_LENGTH]; strncpy(subdirname, dirname_start, dirname_end - dirname_start); subdirname[dirname_end - dirname_start] = 0; ECHO_EV(subdirname); if (!myDir.open(curDir, subdirname, O_READ)) { ECHO_MV(MSG_SD_OPEN_FILE_FAIL, subdirname); ECHO_C('.'); return; } curDir = &myDir; dirname_start = dirname_end + 1; } else { // the remainder after all /fsa/fdsa/ is the filename fname = dirname_start; break; } } } else { // relative path curDir = &workDir; } if (file.remove(curDir, fname)) { ECHO_EMV(MSG_SD_FILE_DELETED, fname); sdpos = 0; } else { ECHO_MV(MSG_SD_FILE_DELETION_ERR, fname); ECHO_C('.'); } }
/** * Get a long pretty path based on a DOS 8.3 path */ void CardReader::printLongPath(char *path) { lsAction = LS_GetFilename; int i, pathLen = strlen(path); // ECHO_M("Full Path: "); ECHO_EV(path); // Zero out slashes to make segments for (i = 0; i < pathLen; i++) if (path[i] == '/') path[i] = '\0'; SdFile diveDir = root; // start from the root for segment 1 for (i = 0; i < pathLen;) { if (path[i] == '\0') i++; // move past a single nul char *segment = &path[i]; // The segment after most slashes // If a segment is empty (extra-slash) then exit if (!*segment) break; // Go to the next segment while (path[++i]) { } // ECHO_M("Looking for segment: "); ECHO_EV(segment); // Find the item, setting the long filename diveDir.rewind(); lsDive("", diveDir, segment); // Print /LongNamePart to serial output ECHO_C('/'); ECHO_V(longFilename[0] ? longFilename : "???"); // If the filename was printed then that's it if (!filenameIsDir) break; // ECHO_M("Opening dir: "); ECHO_EV(segment); // Open the sub-item as the new dive parent SdFile dir; if (!dir.open(diveDir, segment, O_READ)) { ECHO_E; ECHO_SMV(DB, MSG_SD_CANT_OPEN_SUBDIR, segment); break; } diveDir.close(); diveDir = dir; } // while i<pathLen ECHO_E; }
void CardReader::openFile(char* name, bool read, bool replace_current/*=true*/, bool lcd_status/*=true*/) { if (!cardOK) return; if (file.isOpen()) { //replacing current file by new file, or subfile call if (!replace_current) { if (file_subcall_ctr > SD_PROCEDURE_DEPTH - 1) { ECHO_LMV(ER, MSG_SD_MAX_DEPTH, SD_PROCEDURE_DEPTH); kill(PSTR(MSG_KILLED)); return; } ECHO_SMV(DB, "SUBROUTINE CALL target:\"", name); ECHO_M("\" parent:\""); //store current filename and position getAbsFilename(filenames[file_subcall_ctr]); ECHO_V(filenames[file_subcall_ctr]); ECHO_EMV("\" pos", sdpos); filespos[file_subcall_ctr] = sdpos; file_subcall_ctr++; } else { ECHO_LMV(DB, "Now doing file: ", name); } file.close(); } else { // opening fresh file file_subcall_ctr = 0; // resetting procedure depth in case user cancels print while in procedure ECHO_LMV(DB, "Now fresh file: ", name); } sdprinting = false; SdFile myDir; curDir = &root; char *fname = name; char *dirname_start, *dirname_end; if (name[0] == '/') { dirname_start = &name[1]; while (dirname_start > 0) { dirname_end = strchr(dirname_start, '/'); if (dirname_end > 0 && dirname_end > dirname_start) { char subdirname[FILENAME_LENGTH]; strncpy(subdirname, dirname_start, dirname_end - dirname_start); subdirname[dirname_end - dirname_start] = 0; ECHO_EV(subdirname); if (!myDir.open(curDir, subdirname, O_READ)) { ECHO_MV(MSG_SD_OPEN_FILE_FAIL, subdirname); ECHO_C('.'); return; } else { //ECHO_EM("dive ok"); } curDir = &myDir; dirname_start = dirname_end + 1; } else { // the remainder after all /fsa/fdsa/ is the filename fname = dirname_start; //ECHO_EM("remainder"); //ECHO_EV(fname); break; } } } else { //relative path curDir = &workDir; } if (read) { if (file.open(curDir, fname, O_READ)) { filesize = file.fileSize(); ECHO_MV(MSG_SD_FILE_OPENED, fname); ECHO_EMV(MSG_SD_SIZE, filesize); sdpos = 0; ECHO_EM(MSG_SD_FILE_SELECTED); getfilename(0, fname); if(lcd_status) lcd_setstatus(longFilename[0] ? longFilename : fname); } else { ECHO_MV(MSG_SD_OPEN_FILE_FAIL, fname); ECHO_PGM(".\n"); } } else { //write if (!file.open(curDir, fname, O_CREAT | O_APPEND | O_WRITE | O_TRUNC)) { ECHO_MV(MSG_SD_OPEN_FILE_FAIL, fname); ECHO_PGM(".\n"); } else { saving = true; ECHO_EMV(MSG_SD_WRITE_TO_FILE, name); if(lcd_status) lcd_setstatus(fname); } } }