add sd card read and delete commands
This commit is contained in:
parent
841ab4f7e9
commit
ff8c11eb1b
|
@ -10,9 +10,16 @@
|
||||||
boolean datalogging=true;
|
boolean datalogging=true;
|
||||||
String datalogging_filename="UNKNOWN.txt";
|
String datalogging_filename="UNKNOWN.txt";
|
||||||
|
|
||||||
|
bool serialCommandEcho_Enabled=true;
|
||||||
|
|
||||||
bool initLogging();
|
bool initLogging();
|
||||||
void loggingLoop(unsigned long loopmillis,ESCSerialComm& escFront, ESCSerialComm& escRear);
|
void loggingLoop(unsigned long loopmillis,ESCSerialComm& escFront, ESCSerialComm& escRear);
|
||||||
void writeLogComment(unsigned long time, String msg);
|
void writeLogComment(unsigned long time, String msg);
|
||||||
|
void printFileListing();
|
||||||
|
void printDirectory(File dir, int numTabs,String parent);
|
||||||
|
void printFile(String filename);
|
||||||
|
void removeFile(String filename);
|
||||||
|
void serialCommandLoop();
|
||||||
|
|
||||||
|
|
||||||
bool initLogging() {
|
bool initLogging() {
|
||||||
|
@ -33,7 +40,7 @@ bool initLogging() {
|
||||||
sprintf(buffer, "%04d", filenumber);
|
sprintf(buffer, "%04d", filenumber);
|
||||||
datalogging_filename="LOG_"+String(buffer)+".TXT";
|
datalogging_filename="LOG_"+String(buffer)+".TXT";
|
||||||
while(SD.exists(datalogging_filename.c_str()) && filenumber<10000) {
|
while(SD.exists(datalogging_filename.c_str()) && filenumber<10000) {
|
||||||
Serial.print(datalogging_filename); Serial.println(" exists");
|
//Serial.print(datalogging_filename); Serial.println(" exists");
|
||||||
filenumber++;
|
filenumber++;
|
||||||
sprintf(buffer, "%04d", filenumber);
|
sprintf(buffer, "%04d", filenumber);
|
||||||
datalogging_filename="LOG_"+String(buffer)+".TXT";
|
datalogging_filename="LOG_"+String(buffer)+".TXT";
|
||||||
|
@ -227,4 +234,152 @@ void resetTrip() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void serialCommandLoop() {
|
||||||
|
#define MAX_MESSAGE_LENGTH 80
|
||||||
|
|
||||||
|
uint8_t timeoutcounter=MAX_MESSAGE_LENGTH;
|
||||||
|
|
||||||
|
while (Serial.available() > 0 && timeoutcounter>0)
|
||||||
|
{
|
||||||
|
timeoutcounter--;
|
||||||
|
|
||||||
|
static char message[MAX_MESSAGE_LENGTH];
|
||||||
|
static unsigned int message_pos = 0;
|
||||||
|
|
||||||
|
char inByte = Serial.read();
|
||||||
|
if (inByte == '\r') {
|
||||||
|
break; //ignore CR
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ( inByte != '\n' && (message_pos < MAX_MESSAGE_LENGTH - 1) )
|
||||||
|
{
|
||||||
|
|
||||||
|
message[message_pos] = inByte;
|
||||||
|
message_pos++;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
message[message_pos] = '\0';
|
||||||
|
|
||||||
|
|
||||||
|
String smessage=String(message);
|
||||||
|
|
||||||
|
if(smessage.equals("echo off")) {
|
||||||
|
serialCommandEcho_Enabled=false;
|
||||||
|
}else if(smessage.equals("echo on")) {
|
||||||
|
serialCommandEcho_Enabled=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (serialCommandEcho_Enabled) { //Echo Command
|
||||||
|
Serial.print("$"); Serial.println(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Handle Commands
|
||||||
|
if(smessage.equals("test")) {
|
||||||
|
Serial.println("OK");
|
||||||
|
}else if(smessage.equals("ls")) {
|
||||||
|
printFileListing();
|
||||||
|
}else if(smessage.startsWith("cat")) {
|
||||||
|
printFile(smessage.substring(4));
|
||||||
|
}else if(smessage.startsWith("rm")) {
|
||||||
|
removeFile(smessage.substring(3));
|
||||||
|
}else if(smessage.equals("log off")) {
|
||||||
|
datalogging=false;
|
||||||
|
Serial.print("Log disabled: "); Serial.println(datalogging_filename);
|
||||||
|
}else if(smessage.equals("log on")) {
|
||||||
|
datalogging=true;
|
||||||
|
Serial.print("Log enabled: "); Serial.println(datalogging_filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
message_pos = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void printFileListing() {
|
||||||
|
File root;
|
||||||
|
root = SD.open("/");
|
||||||
|
|
||||||
|
printDirectory(root, 0,"");
|
||||||
|
}
|
||||||
|
|
||||||
|
void printDirectory(File dir, int numTabs,String parent) {
|
||||||
|
bool printSize=false;
|
||||||
|
bool printFullDirectoryNames=true;
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
|
||||||
|
File entry = dir.openNextFile();
|
||||||
|
if (! entry) {
|
||||||
|
// no more files
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!printFullDirectoryNames) {
|
||||||
|
for (uint8_t i = 0; i < numTabs; i++) {
|
||||||
|
Serial.print('\t');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!entry.isDirectory() || !printFullDirectoryNames) {
|
||||||
|
Serial.print(parent+entry.name());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entry.isDirectory()) {
|
||||||
|
if (!printFullDirectoryNames) {
|
||||||
|
Serial.println("/");
|
||||||
|
}
|
||||||
|
printDirectory(entry, numTabs + 1,parent+entry.name()+"/");
|
||||||
|
} else {
|
||||||
|
if (printSize) {
|
||||||
|
// files have sizes, directories do not
|
||||||
|
Serial.print("\t\t");
|
||||||
|
Serial.print(entry.size(), DEC);
|
||||||
|
}
|
||||||
|
Serial.println();
|
||||||
|
}
|
||||||
|
entry.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void printFile(String filename) {
|
||||||
|
|
||||||
|
File dataFile = SD.open(filename.c_str(), FILE_READ);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// if the file is available, write to it:
|
||||||
|
if (dataFile) {
|
||||||
|
while (dataFile.available()) {
|
||||||
|
Serial.write(dataFile.read());
|
||||||
|
}
|
||||||
|
dataFile.close();
|
||||||
|
}
|
||||||
|
// if the file isn't open, pop up an error:
|
||||||
|
else {
|
||||||
|
Serial.print("error opening "); Serial.println(filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void removeFile(String filename) {
|
||||||
|
|
||||||
|
SD.remove(filename.c_str());
|
||||||
|
if (SD.exists(filename.c_str())) {
|
||||||
|
Serial.println("File still exists");
|
||||||
|
} else {
|
||||||
|
Serial.println("OK");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -163,6 +163,8 @@ void setup()
|
||||||
led_simpeProgress(15,true);
|
led_simpeProgress(15,true);
|
||||||
|
|
||||||
led_simpleProgressWait(); //wait longer if any errors were displayed with led_simpeProgress()
|
led_simpleProgressWait(); //wait longer if any errors were displayed with led_simpeProgress()
|
||||||
|
|
||||||
|
Serial.println("Ready");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -360,6 +362,10 @@ void loop() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
serialCommandLoop();
|
||||||
|
|
||||||
|
|
||||||
looptime_duration=max(looptime_duration,millis()-loopmillis);
|
looptime_duration=max(looptime_duration,millis()-loopmillis);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,111 @@
|
||||||
|
|
||||||
|
import serial
|
||||||
|
import os
|
||||||
|
|
||||||
|
serialport = serial.Serial(port='/dev/ttyACM0', baudrate=115200, timeout=0.1)
|
||||||
|
|
||||||
|
def establish_connection():
|
||||||
|
|
||||||
|
serialport.write("\n".encode())
|
||||||
|
|
||||||
|
|
||||||
|
serialport.write("echo off\n".encode())
|
||||||
|
while len(serialport.readline())>0:
|
||||||
|
continue
|
||||||
|
|
||||||
|
|
||||||
|
serialport.write("test\n".encode())
|
||||||
|
response = serialport.readline()
|
||||||
|
hrresponse=response.rstrip().decode('ascii')
|
||||||
|
if hrresponse != "OK":
|
||||||
|
print("Unexpected test response:"+str(response))
|
||||||
|
exit()
|
||||||
|
|
||||||
|
def get_filenames():
|
||||||
|
|
||||||
|
filenames=[]
|
||||||
|
|
||||||
|
serialport.write("ls\n".encode())
|
||||||
|
while True:
|
||||||
|
response = serialport.readline()
|
||||||
|
hrresponse=response.rstrip().decode('ascii')
|
||||||
|
if(len(response))>0:
|
||||||
|
#print(hrresponse)
|
||||||
|
filenames.append(hrresponse)
|
||||||
|
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
|
return filenames
|
||||||
|
|
||||||
|
|
||||||
|
def copy_file(source,destination):
|
||||||
|
os.makedirs(os.path.dirname(writefilename), exist_ok=True)
|
||||||
|
|
||||||
|
with open(writefilename, 'wb') as writer:
|
||||||
|
serialport.write(("cat "+filename+"\n").encode())
|
||||||
|
|
||||||
|
while True:
|
||||||
|
|
||||||
|
response = serialport.readline()
|
||||||
|
hrresponse=response.rstrip().decode('ascii')
|
||||||
|
if(len(response))>0:
|
||||||
|
#print(hrresponse)
|
||||||
|
writer.write(response)
|
||||||
|
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
def log_off():
|
||||||
|
serialport.write(("log off\n").encode())
|
||||||
|
response = serialport.readline()
|
||||||
|
hrresponse=response.rstrip().decode('ascii')
|
||||||
|
if (not hrresponse.startswith("Log disabled")):
|
||||||
|
print("Unexpected response:"+str(response))
|
||||||
|
exit()
|
||||||
|
|
||||||
|
def delete_file(filename):
|
||||||
|
|
||||||
|
|
||||||
|
serialport.write(("rm "+filename+"\n").encode())
|
||||||
|
response = serialport.readline()
|
||||||
|
hrresponse=response.rstrip().decode('ascii')
|
||||||
|
if hrresponse != "OK":
|
||||||
|
print("Unexpected response:"+str(response))
|
||||||
|
exit()
|
||||||
|
|
||||||
|
|
||||||
|
if serialport.isOpen():
|
||||||
|
|
||||||
|
establish_connection()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#Get File List
|
||||||
|
filenames=get_filenames()
|
||||||
|
|
||||||
|
|
||||||
|
#Copy all Files
|
||||||
|
for filename in filenames:
|
||||||
|
print("Reading file "+filename)
|
||||||
|
writefilename='sdcard/'+filename
|
||||||
|
copy_file(filename,writefilename)
|
||||||
|
|
||||||
|
|
||||||
|
#Delete all files
|
||||||
|
'''
|
||||||
|
log_off()
|
||||||
|
for filename in filenames:
|
||||||
|
delete_file(filename)
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
serialport.write("echo on\n".encode())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
serialport.close()
|
Loading…
Reference in New Issue