attempt to fix posible power issues with the sharp

Dependencies:   ADS1115 BME280 CronoDot SDFileSystem mbed

Fork of Outdoor_UPAS_v1_2_Tboard by scott kelleher

Revision:
52:95949e34b1f6
Parent:
51:feba3e2aa1a0
Child:
53:5b4991d93cb1
--- a/main.cpp	Sat May 14 00:18:34 2016 +0000
+++ b/main.cpp	Sun May 15 03:45:12 2016 +0000
@@ -13,6 +13,8 @@
 #include "MAX_M8.h" 
 //#include "DRV8830.h"
 #include "Tb_SD_Reader.h"
+#include <vector>
+#include <string>
 
 
 /////////////////////////////////////////////
@@ -91,11 +93,11 @@
 /////////////////////////////////////////////
 //SD Card
 /////////////////////////////////////////////
-char filename[] = "/sd/XXXX0000LOG000000000000---------------.txt";
+char filename[] = "/sd/MS000LOG_000000_000000_000000_000000_---------------_xxx.txt";
 SDFileSystem sd(PB_5, PB_4, PB_3, PB_6, "sd");//(D4, D5, D3, D10, "sd"); // (MOSI, MISO, SCK, SEL)
 Tb_SD_Reader sdReader;
 DigitalIn     sdCD(PA_11, PullUp);
-char fileTest[] = "test.txt";
+
 
 /////////////////////////////////////////////
 //Callbacks
@@ -204,7 +206,9 @@
 //*************************************************//
 
 void sendData(); 
-void Read_File(char[]);
+void Read_File();
+int file_copy(const char *src, const char *dst);
+//void Read_File(char[]);
 
 void pc_recv(){
     while(pc.readable()){
@@ -263,7 +267,8 @@
                     if(transmissionValue == 15){
                          if(fileTransferLock==0){
                              fileTransferLock=1;
-                             Read_File(fileTest);
+                             //Read_File(fileTest);
+                             Read_File();
                              fileTransferLock=0;
                              RGB_LED.set_led(1,1,1);
                          }
@@ -357,6 +362,7 @@
     uint8_t latLongHome2[9] = {0x0B,0x00,0x00,0x80,0x3F,0x00,0x00,0x80,0x3F};
     uint8_t cartridgeIDOriginal[4] = {0x0C,0x48,0x48,0x48};
     uint8_t dutyCycleOriginal[4] = {0x0D,0x31,0x30,0x30};
+    //uint8_t transfer_fileName[62] = {0x0E, 0x4d, 0x53, 0x30, 0x30, 0x30, 0x30, 0x4c, 0x4f, 0x47, 0x5f, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x2d, 0x30, 0x30, 0x5f, 0x30, 0x30, 0x3d, 0x30, 0x30, 0x3d, 0x30, 0x30, 0x5f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5f, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2e, 0x74, 0x78, 0x74};
     // Latitude School EEPROM = 0x50-0x53
     // Longitude School EEPROM = 0x54-0x57
     // Latitude Home EEPROM = 0x58-0x5B
@@ -434,32 +440,94 @@
 
     
 }
-void Read_File(char filename[]){
-    char new_str[] = "/sd/XXXX0000LOG000000000000---------------.txt";
+void Read_File(){
+//void Read_File(char filename[]){
+    
+    char transfer_fileName[] = "MS000LOG_000000_000000_000000_000000_---------------_xxx.txt";
+    char transfer_fileNamedir[] = "/sd/MS000LOG_000000_000000_000000_000000_---------------_xxx.txt";
+    char transfer_fileNamedirCopy[] = "/sd/c/MS000LOG_000000_000000_000000_000000_---------------_xxx.txt";
+    
 
-    sprintf(new_str, "/sd/%s", filename);
-    FILE *fp = fopen(new_str, "r");
-    if(fp == NULL) {
-        pc.printf("Could not open file, check disk.\r\n");
-        while(1) {};
-    } else {
-        pc.printf("file opened\r\n");
+    vector<string> filenames; //filenames are stored in a vector string
+    DIR *dp;
+    struct dirent *dirp;
+    dp = opendir("/sd");
+    //read all directory and file names in current directory into filename vector
+    while((dirp = readdir(dp)) != NULL) {
+        filenames.push_back(string(dirp->d_name));
     }
-    unsigned char c;
-    uint8_t sendMe[1] = {254};
-    RGB_LED.set_led(0,1,0);
-    //pc.printf("%s\r\n",fp.c_str());
-    microChannel.putc(sendMe[0]);
-    while (c != 255){                       // while not end of file or forever
-        c=fgetc(fp);                         // get a character/byte from the file
-        //printf("%c",c); // and show it in hex format
-        microChannel.putc(c);
-        //wait(0.005);
+    closedir(dp);
+    vector<string>::iterator it;
+    
+    for(it=filenames.begin(); it < filenames.end(); it++) {
+       // string str ((*it).c_str());
+        if((*it).substr((*it).length()-3) == "txt"){
+            //if(((it - filenames.begin())+1) == 1){
+                pc.printf("%d: %s\r\n", ((it - filenames.begin())+1), (*it).c_str());
+                sprintf(transfer_fileName, "%s", (*it).c_str());
+                sprintf(transfer_fileNamedir, "/sd/%s", (*it).c_str());
+                sprintf(transfer_fileNamedirCopy, "/sd/c/%s", (*it).c_str());
+                pc.printf("%s", transfer_fileNamedirCopy);
+                FILE *fp = fopen(transfer_fileNamedir, "r");
+                if(fp == NULL) {
+                    pc.printf("Could not open file, check disk.\r\n");
+                    while(1) {};
+                } else {
+                    pc.printf("file opened\r\n");
+                }
+                unsigned char c;
+                uint8_t sendMe[1] = {254};
+                RGB_LED.set_led(0,1,0);
+                //pc.printf("%s\r\n",fp.c_str());
+                microChannel.putc(sendMe[0]);
+                for(int i=0;i<65;i++){
+                    microChannel.putc(transfer_fileName[i]);
+                } 
+                while (c != 255){                       // while not end of file or forever
+                    c=fgetc(fp);                         // get a character/byte from the file
+                    //printf("%c",c); // and show it in hex format
+                    microChannel.putc(c);
+                    //wait(0.005);
+                }
+                //RGB_LED.set_led(1,0,0);
+                printf("\r\n");
+                fclose(fp); 
+    
+                int status = file_copy(transfer_fileNamedir, transfer_fileNamedirCopy);
+                remove(transfer_fileNamedir);
+                break;                              // close the file
+        }
+        
     }
-    //RGB_LED.set_led(1,0,0);
-    printf("\r\n");
-    fclose(fp);                               // close the file
+    
+   
+
+};
+
+int file_copy(const char *src, const char *dst)
+{
+    int retval = 0;
+    int ch;
+ 
+    FILE *fpsrc = fopen(src, "r");   // src file
+    FILE *fpdst = fopen(dst, "w");   // dest file
     
+    while (1) {                  // Copy src to dest
+        ch = fgetc(fpsrc);       // until src EOF read.
+        if (ch == EOF) break;
+        fputc(ch, fpdst);
+    }
+    fclose(fpsrc);
+    fclose(fpdst);
+  
+    fpdst = fopen(dst, "r");     // Reopen dest to insure
+    if (fpdst == NULL) {          // that it was created.
+        retval = -1;           // Return error.
+    } else {
+        fclose(fpdst);
+        retval = 0;              // Return success.
+    }
+    return retval;
 };
 
 //////////////////////////////////////////////////////////////
@@ -1016,21 +1084,44 @@
             wait(0.5);
             
     }
+    RTC_UPAS.get_time(); 
     
     gps.read(1);
     gpsTime = (long)gps.utc;
     gpsDate = (long)gps.date;
-
-
+    
     time_t seconds = time(NULL);
     strftime(timestr, 32, "%y-%m-%d-%H=%M=%S", localtime(&seconds));
-    RTC_UPAS.get_time(); 
+    
+    strftime(yrstr, 4, "%y", localtime(&seconds));
+    stYr = atoi(yrstr);
+    
+    strftime(mostr, 4, "%m", localtime(&seconds));
+    stMo = atoi(mostr);
+    
+    strftime(daystr, 4, "%d", localtime(&seconds));
+    stDay = atoi(daystr);
+    
+    strftime(hrstr, 4, "%H", localtime(&seconds));
+    stHr = atoi(hrstr);
+    
+    strftime(minstr, 4, "%M", localtime(&seconds));
+    stMin = atoi(minstr);
+    
+    strftime(secstr, 4, "%S", localtime(&seconds));
+    stSec = atoi(secstr);
+    
+    
+    
+    
+    
     if(tempSerialNum < 18){
-        sprintf(filename, "/sd/MS%04dLOG_%02d-%02d-%02d_%02d=%02d=%02d_%06d_%06d_%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c_%c%c%c.txt",serial_num,RTC_UPAS.year,RTC_UPAS.month,RTC_UPAS.date,RTC_UPAS.hour,RTC_UPAS.minutes,RTC_UPAS.seconds,gpsDate,gpsTime,subjectLabelOriginal[0],subjectLabelOriginal[1],subjectLabelOriginal[2],subjectLabelOriginal[3],subjectLabelOriginal[4],subjectLabelOriginal[5],subjectLabelOriginal[6],subjectLabelOriginal[7],subjectLabelOriginal[8],subjectLabelOriginal[9],subjectLabelOriginal[10],subjectLabelOriginal[11],subjectLabelOriginal[12],subjectLabelOriginal[13],subjectLabelOriginal[14],cartridgeID[0],cartridgeID[1],cartridgeID[2]);
+        sprintf(filename, "/sd/MS%03dLOG_%02d%02d%02d_%02d%02d%02d_%06d_%06d_%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c_%c%c%c.txt",serial_num,stYr,stMo,stDay,stHr,stMin,stSec,gpsDate,gpsTime,subjectLabelOriginal[0],subjectLabelOriginal[1],subjectLabelOriginal[2],subjectLabelOriginal[3],subjectLabelOriginal[4],subjectLabelOriginal[5],subjectLabelOriginal[6],subjectLabelOriginal[7],subjectLabelOriginal[8],subjectLabelOriginal[9],subjectLabelOriginal[10],subjectLabelOriginal[11],subjectLabelOriginal[12],subjectLabelOriginal[13],subjectLabelOriginal[14],cartridgeID[0],cartridgeID[1],cartridgeID[2]);
     
     }
     else{
-        sprintf(filename, "/sd/PS%04dLOG_%02d-%02d-%02d_%02d=%02d=%02d_%06d_%06d_%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c_%c%c%c.txt",serial_num,RTC_UPAS.year,RTC_UPAS.month,RTC_UPAS.date,RTC_UPAS.hour,RTC_UPAS.minutes,RTC_UPAS.seconds,gpsDate,gpsTime,subjectLabelOriginal[0],subjectLabelOriginal[1],subjectLabelOriginal[2],subjectLabelOriginal[3],subjectLabelOriginal[4],subjectLabelOriginal[5],subjectLabelOriginal[6],subjectLabelOriginal[7],subjectLabelOriginal[8],subjectLabelOriginal[9],subjectLabelOriginal[10],subjectLabelOriginal[11],subjectLabelOriginal[12],subjectLabelOriginal[13],subjectLabelOriginal[14],cartridgeID[0],cartridgeID[1],cartridgeID[2]);
+        sprintf(filename, "/sd/PS%03dLOG_%02d%02d%02d_%02d%02d%02d_%06d_%06d_%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c_%c%c%c.txt",serial_num,stYr,stMo,stDay,stHr,stMin,stSec,gpsDate,gpsTime,subjectLabelOriginal[0],subjectLabelOriginal[1],subjectLabelOriginal[2],subjectLabelOriginal[3],subjectLabelOriginal[4],subjectLabelOriginal[5],subjectLabelOriginal[6],subjectLabelOriginal[7],subjectLabelOriginal[8],subjectLabelOriginal[9],subjectLabelOriginal[10],subjectLabelOriginal[11],subjectLabelOriginal[12],subjectLabelOriginal[13],subjectLabelOriginal[14],cartridgeID[0],cartridgeID[1],cartridgeID[2]);
+        
     }
     //sprintf(filename, "/sd/UPAS_TboardtestLog_%s_%c%c%c%c%c%c%c%c.txt", timestr,subjectLabelOriginal[0],subjectLabelOriginal[1],subjectLabelOriginal[2],subjectLabelOriginal[3],subjectLabelOriginal[4],subjectLabelOriginal[5],subjectLabelOriginal[6],subjectLabelOriginal[7]);
     //sprintf(filename, "/sd/UPAS_TboardtestLog_%s.txt", timestr);