Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SDFileSystem mbed-rtos mbed
Revision 0:8353b4dd38cc, committed 2015-01-18
- Comitter:
- pravinmagar
- Date:
- Sun Jan 18 04:58:44 2015 +0000
- Commit message:
- ftpput name array size modifed. ftpputname command time increased,few more small variations;
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SDFileSystem.lib Sun Jan 18 04:58:44 2015 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/teams/Testbed/code/SDFileSystem/#7b35d1709458
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Sun Jan 18 04:58:44 2015 +0000
@@ -0,0 +1,642 @@
+#include "mbed.h"
+#include "SDFileSystem.h"
+#include "rtos.h"
+#define freq 1
+
+
+#define dur_sec 20
+
+Serial pc(USBTX, USBRX);
+Serial gsm(D1, D0); //tx,rx
+DigitalOut dtr(D2);
+DigitalOut pwr_key(D3);
+DigitalOut gsm_rst(D7);
+SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS
+AnalogIn AC_input(A0);
+AnalogIn DC_input(A2);
+AnalogIn TC_RLY(A3);
+AnalogIn TC_50(A4);
+AnalogIn TC_33(A5);
+
+
+union Data
+ {
+ unsigned short datai[50000];
+ char datac[100000];
+ };
+union Data ACdata;
+union Data DCdata;
+
+
+unsigned short TC33temp;
+unsigned short TC50temp;
+unsigned short TCRLtemp;
+
+char sitename[100] ="MODZ";
+char filename[100] = "";
+char filepath[100] = "";
+char timestamp[100]="";
+char timestampold[100]="";
+char main_dir[100] ="";
+char hour_dir[100] ="";
+char pathAC[100] ="";
+char pathDC[100] ="";
+char pathTC[100] ="";
+char filenameAC[100] ="";
+char filenameDC[100] ="";
+char clk_response[100] ="";
+//char command[100] ="";
+//char result[100] ="";
+//char FTP_File_Name[100] ="";
+//char FTPPUT_File_Name[100] ="";
+//char FTP_Path_Name[100] ="";
+//char allfilename[100];
+//char mainfilename[100][100];
+int m=0,mfinal;
+int date, month, year, hour, minute, second, temp = 0;
+int c,i;
+int ns;
+unsigned long var = 0;
+unsigned long currentMillis = 0;
+uint8_t x=0,z=0, answer=0;
+
+time_t previous;
+float tempC;
+uint32_t dataLength = dur_sec*freq*1000;
+osThreadId tid1,tid2,tid3,tid4,tid5,tid6;
+char ftpget[100];
+//char ftpfilenameac[100];
+//char ftppathac[100];
+int reset_time=120; //mins
+int gsmerr=0;
+
+//--------------------------------------------------------------------------------------------------//
+// Module reset //
+//--------------------------------------------------------------------------------------------------//
+void reset_mod()
+{
+ //pc.printf("\r\nresetting module\n\n\n\r\n");
+ NVIC_SystemReset();
+}
+//--------------------------------------------------------------------------------------------------//
+// Send AT Command (1 response) //
+//--------------------------------------------------------------------------------------------------//
+int8_t sendATcommand(char* ATcommand, char* expected_answer, unsigned int timeout, bool clk_flag)
+{
+ uint8_t x=0,answer=0; //x=0 and answer=0, if not put, AT+CCLK?\r is not executed
+ char response[100];
+ memset(response, '\0', 100); // Initialize the string
+ wait_ms(100);
+ while( gsm.readable() > 0) gsm.getc(); // Clean the input buffer
+ gsm.printf("%s \r", ATcommand); // Send the AT command
+ x = 0;
+ previous = time(NULL);
+ do // this loop waits for the answer
+ {
+ if(gsm.readable() != 0)
+ {
+ response[x] = gsm.getc(); // if there are data in the UART input buffer, reads it and checks for the asnwer
+ pc.putc(response[x]);
+ x++;
+ if (strstr(response, expected_answer) != NULL) // check if the desired answer is in the response of the module
+ {
+ answer = 1;
+ }
+ }
+ }
+ while((answer == 0) && ((time(NULL) - previous) < timeout)); // Waits for the asnwer with time out
+ //pc.printf("%s \r\n",response);
+ if(clk_flag == 1)
+ {
+ sprintf(timestamp,response); //copies response to timestamp for further processing }
+ }
+ return answer;
+}
+//--------------------------------------------------------------------------------------------------//
+// Send AT Command (2 response) //
+//--------------------------------------------------------------------------------------------------//
+int8_t sendATcommand2(char* ATcommand, char* expected_answer1,char* expected_answer2, unsigned int timeout)
+{
+ uint8_t x=0, answer=0;
+ char response[100];
+ time_t previous;
+ memset(response, '\0', 100); // Initialize the string
+ Thread::wait(100);
+ while( gsm.readable() != 0) gsm.getc(); // Clean the input buffer
+ gsm.printf("%s \r", ATcommand); // Send the AT command
+ x = 0;
+ previous = time(NULL);
+ do // this loop waits for the answer
+ {
+ if(gsm.readable() != 0) // if there are data in the UART input buffer, reads it and checks for the asnwer
+ {
+ response[x] = gsm.getc();
+ pc.putc(response[x]);
+ sprintf(ftpget,"%s",response);
+ x++;
+ if (strstr(response, expected_answer1) != NULL) // check if the desired answer 1 is in the response of the module
+ {
+ answer = 1;
+ }
+ if (strstr(response, expected_answer2) != NULL) // check if the desired answer 2 is in the response of the module
+ {
+ answer = 2;
+ break;
+ }
+ }
+ }
+ while((answer == 0) && ((time(NULL) - previous) < timeout)); // Waits for the asnwer with time out
+ return answer;
+}
+
+//--------------------------------------------------------------------------------------------------//
+// Getting File Directories and names //
+//--------------------------------------------------------------------------------------------------//
+void GetFileDir()
+{
+ int attempt_cnt=0;
+ char month_dir[100]="";
+ char date_dir[100] ="";
+ sendATcommand("AT+CCLK?\r", "OK", 5,1);
+ //sprintf(response,timestamp);
+ x=20;
+ year = 10*(timestamp[x+1]-48) + (timestamp[x+2]-48);
+ while(year!=14&&year!=15)
+ {
+ sendATcommand("AT+CCLK?\r", "OK", 5,1);
+ //sprintf(response,timestamp);
+ year = 10*(timestamp[x+1]-48) + (timestamp[x+2]-48);
+ //pc.printf("\r\ncurrent timestamp %s\r\n",timestamp);
+ attempt_cnt++;
+ if(attempt_cnt>4) break;
+ }
+ if(year==14||year==15)
+ {
+ if(timestamp!=timestampold)
+ {
+ sprintf(timestampold,timestamp);
+ //pc.printf("\r\nold time stamp is%s\r\n",timestampold);
+ month = (timestamp[x+4]-48)*10+(timestamp[x+5]-48);
+ date = (timestamp[x+7]-48)*10+(timestamp[x+8]-48);
+ hour = (timestamp[x+10]-48)*10+(timestamp[x+11]-48);
+ minute = (timestamp[x+13]-48)*10+(timestamp[x+14]-48);
+ second = (timestamp[x+16]-48)*10+(timestamp[x+17]-48);
+
+ sprintf(main_dir,"/sd/%s",sitename);
+ sprintf(month_dir,"%s/%s%02d%02d",main_dir,sitename,year,month);
+ sprintf(date_dir,"%s/%s%02d%02d%02d",month_dir,sitename,year,month,date);
+ sprintf(hour_dir,"%s/%s%02d%02d%02d%02d",date_dir,sitename,year,month,date,hour);
+ sprintf(filepath,"%s/%s%02d%02d%02d%02d%02d%02d",hour_dir,sitename,year,month,date,hour,minute,second);
+ sprintf(filename,"%s%02d%02d%02d%02d%02d%02d",sitename,year,month,date,hour,minute,second);
+ gsmerr=0;
+ mkdir(main_dir,0777);
+ mkdir(month_dir,0777);
+ mkdir(date_dir,0777);
+ mkdir(hour_dir,0777);
+ }
+ else
+ {
+ sprintf(filepath,"%s/%s%02d%02d%02d%02d%02d%02dErr%03d",hour_dir,sitename,year,month,date,hour,minute,second,gsmerr);
+ sprintf(filename,"%s%02d%02d%02d%02d%02d%02dErr%03d",sitename,year,month,date,hour,minute,second,gsmerr);
+ gsmerr++;
+ }
+ }
+ else
+ {
+ sprintf(timestamp,timestampold);
+ sprintf(filepath,"%s/%s%02d%02d%02d%02d%02d%02dErr%03d",hour_dir,sitename,year,month,date,hour,minute,second,gsmerr);
+ sprintf(filename,"%s%02d%02d%02d%02d%02d%02dErr%03d",sitename,year,month,date,hour,minute,second,gsmerr);
+ gsmerr++;
+ }
+}
+
+//--------------------------------------------------------------------------------------------------//
+// Temperature Sampling //
+//--------------------------------------------------------------------------------------------------//
+void temp_val()
+{
+ TC33temp=TC_33.read_u16();
+ TC50temp=TC_50.read_u16();
+ TCRLtemp=TC_RLY.read_u16();
+
+}
+
+//--------------------------------------------------------------------------------------------------//
+// AC-DC Sampling //
+//--------------------------------------------------------------------------------------------------//
+void calculate_ADC()
+{
+ Timer t;
+ unsigned long j=0;
+ //pc.printf("\n\rStarting Reading \n\r");
+ t.start();
+ while(j<dataLength)
+ {
+ if((int)(t.read()*100*freq*1000)%100 == 0)
+ {
+ ACdata.datai[j] = AC_input.read_u16();
+ DCdata.datai[j] = DC_input.read_u16();
+ ++j;
+ }
+ }
+ t.stop();
+ //pc.printf("Time Taken %f \n\r", t.read());
+ t.reset();
+ //pc.printf("Total Samples %d\r\n",j);
+}
+//--------------------------------------------------------------------------------------------------//
+// Storage //
+//--------------------------------------------------------------------------------------------------//
+void store(void const *args)
+{
+ tid3 = osThreadGetId();
+ //osThreadSetPriority(tid3, osPriorityHigh);
+ while(true)
+ {
+ osSignalWait(0x1, osWaitForever);
+ //pc.printf("\r\n%d is value of ns\r\n",ns);
+ switch (ns)
+ {
+ case 0:
+ GetFileDir();
+ sprintf(filenameAC,"%sAC.txt",filename);
+ sprintf(pathAC,"%sAC.txt",filepath);
+ pc.printf("\r\nFilename-AC\t%s", pathAC);
+ FILE *fp = fopen(pathAC, "w");
+ if(fp == NULL)
+ {
+ //pc.printf("Could not open file for write\n\r");
+ reset_mod();
+ }
+ else
+ {
+ for(unsigned long k=0; k<dataLength; ++k)
+ {
+ if (k%4==0)
+ {
+ fprintf(fp,"\n\n");
+ }
+ fprintf(fp, "%c%c", ACdata.datac[2*k],ACdata.datac[2*k+1]);
+ }
+ fprintf(fp, "EOF");
+ fclose(fp);
+ }
+ sprintf(filenameDC,"%sDC.txt",filename);
+ sprintf(pathDC,"%sDC.txt",filepath);
+ pc.printf("\r\nFilename-DC\t%s", pathDC);
+ FILE *fp1 = fopen(pathDC, "w");
+ if(fp1 == NULL)
+ {
+ //pc.printf("Could not open file for write\n\r");
+ reset_mod();
+ }
+ else
+ {
+ for(unsigned long k=0; k<dataLength; ++k)
+ {
+ if (k%4==0)
+ {
+ fprintf(fp,"\n\n");
+ }
+ fprintf(fp1, "%c%c", DCdata.datac[2*k],DCdata.datac[2*k+1]);
+ }
+ fprintf(fp1, "EOF");
+ }
+ fclose(fp1);
+ sprintf(pathTC,"%sTC.txt",hour_dir);
+ //pc.printf("\r\nFilename-TC\t%s", pathTC);
+ FILE *fp2 = fopen(pathTC, "a");
+ if(fp2 == NULL)
+ {
+ //pc.printf("Could not open file for write\n\r");
+ //reset_mod();
+ }
+ else
+ {
+ for(unsigned long k=0; k<28; ++k)
+ {
+ fprintf(fp2, "\r\n3.3V-%d C",TC33temp);
+ fprintf(fp2, "\r\n5.0V-%d C",TC50temp);
+ fprintf(fp2, "\r\nRlay-%d C",TCRLtemp);
+ fprintf(fp2, ",");
+ }
+ }
+ fclose(fp2);
+ osSignalSet(tid6, 0x1);
+ break;
+
+ case 1:
+ sprintf(pathTC,"%sTC.txt",hour_dir);
+ //pc.printf("\r\nFilename-TC\t%s", pathTC);
+ FILE *fp4 = fopen(pathTC, "a");
+ if(fp4 == NULL)
+ {
+ //pc.printf("Could not open file for write\n\r");
+ //reset_mod();
+ }
+ //fprintf(fp3, "\r\n20%d/%d%d/%d%d-%d%d:%d%d:%d%d",year,montht,monthu,datet,dateu,hourt,houru,minutet,minuteu,secondt,secondu);
+ else
+ {
+ for(unsigned long k=0; k<28; ++k)
+ {
+ fprintf(fp4, "\r\n3.3V-%d C",TC33temp);
+ fprintf(fp4, "\r\n5.0V-%d C",TC50temp);
+ fprintf(fp4, "\r\nRlay-%d C",TCRLtemp);
+ fprintf(fp4, ",");
+ }
+ }
+ fclose(fp4);
+ break;
+ }
+ }
+}
+
+//--------------------------------------------------------------------------------------------------//
+// Sampling Function //
+//--------------------------------------------------------------------------------------------------//
+
+void sampling(void const *args)
+{
+ int smplngcnt=0;
+ tid1 = osThreadGetId();
+ //osThreadSetPriority(tid1, osPriorityRealtime);
+ //pc.printf("\r\nstarted sampling thread\r\n");
+ while(true)
+ {
+ if(smplngcnt%16==0)
+ {
+ pc.printf("AC sampling attempt");
+ if(smplngcnt>27) smplngcnt=0;
+ smplngcnt++;
+ ns=0;
+ calculate_ADC();
+ temp_val();
+ smplngcnt++;
+ osSignalSet(tid3, 0x1);
+ }
+ else
+ {
+ ns=1;
+ temp_val();
+ smplngcnt++;
+ }
+ Thread::wait(10000);
+
+ }
+}
+
+//--------------------------------------------------------------------------------------------------//
+// Read Filenames from SD Card //
+//--------------------------------------------------------------------------------------------------//
+/*void read_ALLFILENames(void const *args)
+{
+
+ while (true)
+ {
+
+ tid5 = osThreadGetId();
+ osSignalWait(0x1, osWaitForever);
+ //osThreadSetPriority(tid5, osPriorityBelowNormal);
+ pc.printf("\r\n reading names");
+
+ FILE *fp = fopen("/sd/AllFileName.txt", "r");
+ while(!feof(fp))
+ {
+ //pc.putc("%c", fgetc(fp));
+ fscanf(fp,"%s",allfilename);
+ //pc.printf("\r\n%s",allfilename);
+ sprintf(mainfilename[m],allfilename);
+ m++;
+ //pc.printf("\n\r value of m=%d\n\r",m);
+
+ }
+ fclose(fp);
+ mfinal=m;
+ //pc.printf("\n\rvalue of m=%d\r\n",mfinal);
+ for(m=0;m<mfinal/3;m++)
+ {
+ //pc.printf("\r\n%dpath\t%s",m,mainfilename[3*m]);
+ sprintf(ftppathac,"%s",mainfilename[3*m]);
+ //pc.printf("\r\n%dpath\t%s",m,mainfilename[3*m+1]);
+ sprintf(ftpfilenameac, "%s", filename[3*m+1]);
+ //pc.printf("\r\n%dpath\t%s",m,mainfilename[3*m+2]);
+ }
+ }
+}*/
+
+//--------------------------------------------------------------------------------------------------//
+// GSM Initialization //
+//--------------------------------------------------------------------------------------------------//
+void gsm_init()
+{
+ int cnt = 0;
+ while((sendATcommand("AT+CREG?", "+CREG: 1,1", 5, 0) || sendATcommand("AT+CREG?", "+CREG: 1,5", 5, 0)) == 0)
+ {
+ if(sendATcommand("AT+CREG=1", "+CREG:1", 5, 0))
+ {
+ pc.printf("creg is 1");
+ return;
+ }
+ else if(sendATcommand("AT+CREG=1", "+CREG:5", 5, 0))
+ {
+ pc.printf("creg is 5");
+ return;
+ }
+ //wait(2);
+ ++cnt;
+ //pc.printf("%d", cnt);
+ if(cnt == 4)
+ {
+ pc.printf("GSM registration failed");
+ return;
+ }
+ }
+}
+//--------------------------------------------------------------------------------------------------//
+// FTP Connect function //
+//--------------------------------------------------------------------------------------------------//
+bool ftp_connect()
+{
+ int ftp_connect_attempt=0;
+ int ftp_close_attempt=0;
+ // char command[50];
+ // char result[50];
+ if(sendATcommand("AT+SAPBR=2,1", "+SAPBR: 1,3,\"0.0.0.0\"", 5, 0))
+ {
+ }
+ else
+ {
+ while(!sendATcommand("AT+SAPBR=2,1", "+SAPBR: 1,3,\"0.0.0.0\"", 5, 0))
+ {
+ sendATcommand("AT+SAPBR=0,1","OK",5, 0);
+ ftp_close_attempt++;
+ if(ftp_close_attempt>3)
+ {
+ return 0;
+ }
+ }
+ }
+ while(sendATcommand("AT+SAPBR=2,1", "+SAPBR: 1,3,\"0.0.0.0\"", 5, 0))
+ {
+ sendATcommand("AT+SAPBR=1,1", "OK", 5, 0);
+ ftp_connect_attempt++;
+ if(ftp_connect_attempt>6)
+ {
+ return 0;
+ } //Connect to Bearer 1
+ }
+
+ sendATcommand("AT+FTPTYPE=\"I\"", "OK", 5, 0);
+ sendATcommand("AT+FTPSERV=\"ftp.panchsheel.biz\"", "OK", 10, 0);
+ sendATcommand("AT+FTPUN=\"hardware@panchsheel.biz\"", "OK\r", 10, 0);
+ if(sendATcommand("AT+FTPPW=\"DAStest123\"", "OK\r", 10, 0)) return 1;
+ else return 0;
+ //sprintf(command,"%s%s", "AT+FTPPUTNAME=",filename);
+ //sprintf(result,"%s", "OK");
+ //sendATcommand(command,result, 5);
+ //sendATcommand("AT+FTPPUTPATH=\"/\"", "OK", 5);
+ //if(sendATcommand("AT+FTPPUT=1\r", "+FTPPUT:1,1", 10)) return 1;
+ //else return 0;
+}
+
+//--------------------------------------------------------------------------------------------------//
+// FTP Send Function //
+//--------------------------------------------------------------------------------------------------//
+
+void ftp_put(bool ftp_type)
+{
+ char ftpfilename[30]="";
+ char ftpfilepath[100]="";
+ if (ftp_type ==0)
+ {
+ sprintf(ftpfilename,"%s",filenameAC);
+ // pc.printf("\n %s",ftpfilename);
+ // pc.printf("\n %p",ftpfilename);
+ sprintf(ftpfilepath,"%s",pathAC);
+
+ }
+ else if (ftp_type ==1)
+ {
+ sprintf(ftpfilename,"%s",filenameDC);
+ sprintf(ftpfilepath,"%s",pathDC);
+ }
+ pc.printf("\r\nftp_put attempt\n\r");
+ char command1[40];
+ char result1[20];
+ // pc.printf("\n %p",ftpfilename);
+ sprintf(command1,"%s\"%s\"", "AT+FTPPUTNAME=", ftpfilename);
+ // pc.printf("\n %p",command1);
+ sprintf(result1,"%s", "OK");
+ for(int putname_attempt=0; putname_attempt<3;putname_attempt++)
+ {
+ // pc.printf("\n %p",ftpfilename);
+ if(sendATcommand(command1,result1, 10, 0))
+ {
+ // pc.printf("\n %p",ftpfilename);
+ sendATcommand("AT+FTPPUTPATH=\"/Trial//\"", "OK", 5, 0);
+ //sendATcommand("AT+FTPPUT=1\r", "+FTPPUT:1,1", 10);
+ //pc.printf("\r\n%s\r\n",ftpfilepath);
+ //pc.printf("\r\n%s\r\n",ftpfilename);
+ // unsigned long int cnt=0;
+ if(sendATcommand("AT+FTPPUT=1", "OK", 10, 0))
+ {
+ pc.printf("in loop");
+ pc.printf("\n\r %s",ftpfilepath);
+ FILE *fp9 = fopen(ftpfilepath, "r");
+ if(fp9==NULL)return;
+ else
+ {
+ int trialcount=0;
+ int allowedtrials=5;
+ while(trialcount<allowedtrials)
+ {
+ if(sendATcommand("AT+FTPPUT=2,1000","+FTPPUT:2,1000", 10, 0))
+ {
+ trialcount=0;
+ for(int i=0; i<1000; i++)
+ {
+ gsm.printf("%c", fgetc(fp9));
+
+ }
+ break;
+ }
+ else
+ {
+ pc.printf("attempt %d failed",trialcount);
+ trialcount++;
+ }
+ }
+
+ fclose(fp9);
+ }
+
+ for(int ftp_close_attempt=0; ftp_close_attempt<5; ftp_close_attempt++)
+ {
+ if(sendATcommand("AT+FTPPUT=2,0", "OK", 5, 0))
+ {
+ ftp_close_attempt=6;
+ }
+ }
+ return;
+ //}
+
+ }
+ return;
+ }
+ }
+ pc.printf("\n\r %s\n\r","i am not able to send data");
+}
+
+//--------------------------------------------------------------------------------------------------//
+// FTP Function Thread //
+//--------------------------------------------------------------------------------------------------//
+
+void FTP_Fun(void const *args)
+{
+ tid6 = osThreadGetId();
+
+ while(true)
+ {
+ osSignalWait(0x1, osWaitForever);
+ //osThreadSetPriority(tid6, osPriorityLow);
+
+ if(ftp_connect())
+ {
+ //char ACfilename[100],DCfilename[100], TCfilename[100];
+ //sprintf(ACfilename,"%sAC",filename);
+ //sprintf(DCfilename,"%sDC",filename);
+ //sprintf(TCfilename,"%s%02d%02d%02d%03dTC.txt",sitename,year,month,date,hour);
+ ftp_put(0);
+ ftp_put(1);
+ //ftp_put(3,pathTC,TCfilename);
+ }
+ }
+}
+//--------------------------------------------------------------------------------------------------//
+// Main Function //
+//--------------------------------------------------------------------------------------------------//
+int main()
+{
+ //mkdir("/sd/strtup", 0777);
+ gsm_rst=1;
+ wait(5);
+ //pc.printf("Hello\r\n");
+ //gsm_init();
+ //wait(2);
+ gsm.baud(115200);
+ pc.baud(115200);
+ Thread thread1(sampling);
+ Thread thread3(store);
+ //Thread thread4(SDError);
+ //Thread thread5(read_ALLFILENames);
+ Thread thread6(FTP_Fun);
+ while(true)
+ {
+ for (int f=0; f<reset_time; f++)//reset after 60 min
+ {
+ Thread::wait(60000);
+ }
+ reset_mod();
+ //osSignalSet(tid2, 0x1);
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Sun Jan 18 04:58:44 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-rtos/#318e02f48146
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sun Jan 18 04:58:44 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/4fc01daae5a5 \ No newline at end of file