blob: 76c5cda7c924a469f47508d187623b546fb2ff86 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
/*********************************************************************
This is an example for our nRF52 based Bluefruit LE modules
Pick one up today in the adafruit shop!
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
MIT license, check LICENSE for more information
All text above, and the splash screen below must be included in
any redistribution
*********************************************************************/
#include <bluefruit.h>
#include <Bluefruit_FileIO.h>
/* This example print out External Flash contents up to
* MAX_LEVEL level of directories (including root)
* WARNING: This example uses recursive call to print out directory tree
* be extra careful, high number of MAX_LEVEL can cause memory overflow
*/
#define MAX_LEVEL 2
// the setup function runs once when you press reset or power the board
void setup()
{
Serial.begin(115200);
while ( !Serial ) delay(10); // for nrf52840 with native usb
Serial.println("ExternalFS List Files Example");
// Initialize Internal File System
ExternalFS.begin();
// Print whole directory tree of root whose level is 0
printTreeDir("/", 0);
// Print prompt
Serial.println();
Serial.println("Enter anything to print directory tree (again):");
}
// the loop function runs over and over again forever
void loop()
{
if ( Serial.available() )
{
delay(10); // delay for all input arrived
while( Serial.available() ) Serial.read();
printTreeDir("/", 0);
// Print prompt
Serial.println();
Serial.println("Enter anything to print directory tree (again):");
}
}
/**************************************************************************/
/*!
@brief Print out whole directory tree of an folder
until the level reach MAX_LEVEL
@note Recursive call
*/
/**************************************************************************/
void printTreeDir(const char* cwd, uint8_t level)
{
// Open the input folder
File dir(cwd, FILE_READ, ExternalFS);
// Print root
if (level == 0) Serial.println("root");
// File within folder
File item(ExternalFS);
// Loop through the directory
while( (item = dir.openNextFile(FILE_READ)) )
{
// Indentation according to dir level
for(int i=0; i<level; i++) Serial.print("| ");
Serial.print("|_ ");
Serial.print( item.name() );
if ( item.isDirectory() )
{
Serial.println("/");
// ATTENTION recursive call to print sub folder with level+1 !!!!!!!!
// High number of MAX_LEVEL can cause memory overflow
if ( level < MAX_LEVEL )
{
printTreeDir( item.path(), level+1 );
}
}else
{
// Print file size starting from position 30
int pos = level*3 + 3 + strlen(item.name());
// Print padding
for (int i=pos; i<30; i++) Serial.print(' ');
// Print at least one extra space in case current position > 50
Serial.print(' ');
Serial.print( item.size() );
Serial.println( " Bytes");
}
item.close();
}
dir.close();
}
|