Beispiel #1
0
void cmd_tree(BaseSequentialStream *chp, int argc, char *argv[]) {
    FRESULT err;
    unsigned long clusters;
    unsigned long long total = 0;
    FATFS *fsp;

    (void)argv;
    if (argc > 0) {
            SHELLDBG("Usage: tree\r\n");
            return;
    }
    if (!fs_ready) {
            SHELLDBG("File System not mounted\r\n");
            return;
    }
    err = f_getfree("/", &clusters, &fsp);
    if (err != FR_OK) {
            err = f_getfree("/", &clusters, &fsp);
            if (err != FR_OK) {
                    SHELLDBG("FS: f_getfree() failed. FRESULT: %d\r\n", err);
                    return;
            }
    }
    SHELLDBG("FS: %lu free clusters, %lu sectors per cluster, %lu bytes free.\r\n",
            clusters, (uint32_t)SDC_FS.csize,
            total);
    fbuff[0] = 0;
    sdc_scan_files(chp, (char *)fbuff);
}
Beispiel #2
0
/*! \brief used in cmd_tree function
 *
 * Find files on sd card.
 */
FRESULT sdc_scan_files(BaseSequentialStream *chp, char *path) {
    FRESULT res;
    FILINFO fno;
    DIR dir;
    int i;
    char *fn;

#if _USE_LFN
    fno.lfname = 0;
    fno.lfsize = 0;
#endif
    res = f_opendir(&dir, path);
    if (res == FR_OK) {
        i = strlen(path);
        for (;;) {
            res = f_readdir(&dir, &fno);
            if (res != FR_OK || fno.fname[0] == 0)
                break;
            if (fno.fname[0] == '.')
                continue;
            fn = fno.fname;
            if (fno.fattrib & AM_DIR) {
                path[i++] = '/';
                strcpy(&path[i], fn);
                res = sdc_scan_files(chp, path);
                if (res != FR_OK)
                    break;
                path[--i] = 0;
            }
            else {
                SDCDEBUG("%s/%s\r\n", path, fn);
            }
        }
    }
    return res;
}