From a7c7fb7bf6800e6f41223ff02778ed26d29deb87 Mon Sep 17 00:00:00 2001 From: Nathan Seidle Date: Thu, 20 Aug 2015 16:24:37 -0600 Subject: [PATCH] Fixed bug 178. Log numbers should display correctly over 15 bits. --- firmware/OpenLog_v3/OpenLog_v3.ino | 64 +++++++++++++++++++----------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/firmware/OpenLog_v3/OpenLog_v3.ino b/firmware/OpenLog_v3/OpenLog_v3.ino index 927587b..de64709 100644 --- a/firmware/OpenLog_v3/OpenLog_v3.ino +++ b/firmware/OpenLog_v3/OpenLog_v3.ino @@ -173,7 +173,12 @@ Adds 80 bytes Increased escape character limits to 0 and 254. If set to zero, it will not check for escape characters. - + + 8/20/2015 + Using codebender because Arduino IDE is unusable on a laptop with a high density screen. Grrr. + Working on issue 168. + Fixed issue 178. Thanks jremington! + */ #include //We do not use the built-in SD.h file because it calls Serial.print @@ -456,7 +461,7 @@ char* newlog(void) char new_file_name[13]; while(1) { - sprintf_P(new_file_name, PSTR("LOG%05d.TXT"), new_file_number); //Splice the new file number into this file name + sprintf_P(new_file_name, PSTR("LOG%05u.TXT"), new_file_number); //Splice the new file number into this file name //Try to open file, if fail (file doesn't exist), then break if (newFile.open(¤tDirectory, new_file_name, O_CREAT | O_EXCL | O_WRITE)) break; @@ -569,14 +574,14 @@ byte append_file(char* file_name) { //Start recording incoming characters //With no escape characters, do this infinitely - while(1) { - - byte n = NewSerial.read(localBuffer, sizeof(localBuffer)); //Read characters from global buffer into the local buffer - if (n > 0) //If we have characters, check for escape characters + while(1) + { + byte charsToRecord = NewSerial.read(localBuffer, sizeof(localBuffer)); //Read characters from global buffer into the local buffer + if (charsToRecord > 0) //If we have characters, check for escape characters { - workingFile.write(localBuffer, n); //Record the buffer to the card + workingFile.write(localBuffer, charsToRecord); //Record the buffer to the card - STAT1_PORT ^= (1< MAX_TIME_BEFORE_SYNC_MSEC) //This will force a sync approximately every 5 seconds { @@ -603,18 +608,17 @@ byte append_file(char* file_name) escape_chars_received = 0; // Clear the esc flag as it has timed out lastSyncTime = millis(); //Reset the last sync time to now } - } - } //We only get this far if escape characters are more than zero //Start recording incoming characters - while(escape_chars_received < setting_max_escape_character) { + while(escape_chars_received < setting_max_escape_character) + { - byte n = NewSerial.read(localBuffer, sizeof(localBuffer)); //Read characters from global buffer into the local buffer - if (n > 0) //If we have characters, check for escape characters + byte charsToRecord = NewSerial.read(localBuffer, sizeof(localBuffer)); //Read characters from global buffer into the local buffer + if (charsToRecord > 0) //If we have characters, check for escape characters { if (localBuffer[0] == setting_escape_character) @@ -622,12 +626,16 @@ byte append_file(char* file_name) escape_chars_received++; //Scan the local buffer for esacape characters - for(checkedSpot = 1 ; checkedSpot < n ; checkedSpot++) { + for(checkedSpot = 1 ; checkedSpot < charsToRecord ; checkedSpot++) + { if(localBuffer[checkedSpot] == setting_escape_character) { escape_chars_received++; - //If n is greater than 3 there's a chance here where we receive three esc chars + //If charsToRecord is greater than 3 there's a chance here where we receive three esc chars // and then reset the variable: 26 26 26 A T + would not escape correctly - if(escape_chars_received == setting_max_escape_character) break; + if(escape_chars_received == setting_max_escape_character) + { + break; + } } else escape_chars_received = 0; @@ -636,9 +644,9 @@ byte append_file(char* file_name) else escape_chars_received = 0; - workingFile.write(localBuffer, n); //Record the buffer to the card + workingFile.write(localBuffer, charsToRecord); //Record the buffer to the card - STAT1_PORT ^= (1< MAX_TIME_BEFORE_SYNC_MSEC) //This will force a sync approximately every 5 seconds { @@ -712,12 +720,12 @@ void check_emergency_reset(void) for(byte i = 0 ; i < 40 ; i++) { delay(25); - STAT1_PORT ^= (1<