ftp

Dependencies:   SDFileSystem mbed-rtos mbed

Committer:
pravinmagar
Date:
Mon Jan 19 11:48:57 2015 +0000
Revision:
1:8dd592e91577
Parent:
0:001407b7f10c
1 kb file send along with ftpget file and send same file again after every 1 hour properly fitted into code. to send multiple files through ftpget small change required in getftp function.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pravinmagar 0:001407b7f10c 1 #include "mbed.h"
pravinmagar 0:001407b7f10c 2 #include "SDFileSystem.h"
pravinmagar 0:001407b7f10c 3 #include "rtos.h"
pravinmagar 0:001407b7f10c 4 #define freq 1
pravinmagar 0:001407b7f10c 5
pravinmagar 0:001407b7f10c 6
pravinmagar 1:8dd592e91577 7 #define dur_sec 1
pravinmagar 0:001407b7f10c 8
pravinmagar 0:001407b7f10c 9 Serial pc(USBTX, USBRX);
pravinmagar 0:001407b7f10c 10 Serial gsm(D1, D0); //tx,rx
pravinmagar 0:001407b7f10c 11 DigitalOut dtr(D2);
pravinmagar 0:001407b7f10c 12 DigitalOut pwr_key(D3);
pravinmagar 0:001407b7f10c 13 DigitalOut gsm_rst(D7);
pravinmagar 0:001407b7f10c 14 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS
pravinmagar 0:001407b7f10c 15 AnalogIn AC_input(A0);
pravinmagar 0:001407b7f10c 16 AnalogIn AC2_input(A1);
pravinmagar 0:001407b7f10c 17 AnalogIn DC_input(A2);
pravinmagar 0:001407b7f10c 18 AnalogIn DC_Detect(A3);
pravinmagar 0:001407b7f10c 19 AnalogIn TC1(A4);
pravinmagar 0:001407b7f10c 20 AnalogIn TC2(A5);
pravinmagar 0:001407b7f10c 21
pravinmagar 0:001407b7f10c 22
pravinmagar 0:001407b7f10c 23 unsigned short ACdata[20000];
pravinmagar 0:001407b7f10c 24 unsigned short DCdata[20000];
pravinmagar 0:001407b7f10c 25 unsigned short DC_Detect_data[10];
pravinmagar 0:001407b7f10c 26
pravinmagar 1:8dd592e91577 27 //unsigned short TC33temp;
pravinmagar 1:8dd592e91577 28 //unsigned short TC50temp;
pravinmagar 1:8dd592e91577 29 //unsigned short TCRLtemp;
pravinmagar 0:001407b7f10c 30
pravinmagar 0:001407b7f10c 31 char sitename[100] ="MODZ";
pravinmagar 0:001407b7f10c 32 char filename[100] = "";
pravinmagar 0:001407b7f10c 33 char filepath[100] = "";
pravinmagar 0:001407b7f10c 34 char timestamp[100]="";
pravinmagar 0:001407b7f10c 35 char timestampold[100]="";
pravinmagar 0:001407b7f10c 36 char main_dir[100] ="";
pravinmagar 0:001407b7f10c 37 char hour_dir[100] ="";
pravinmagar 0:001407b7f10c 38 char pathAC[100] ="";
pravinmagar 0:001407b7f10c 39 char pathDC[100] ="";
pravinmagar 0:001407b7f10c 40 char pathTC[100] ="";
pravinmagar 0:001407b7f10c 41 char filenameAC[100] ="";
pravinmagar 0:001407b7f10c 42 char filenameDC[100] ="";
pravinmagar 0:001407b7f10c 43 char clk_response[100] ="";
pravinmagar 0:001407b7f10c 44 int m=0,mfinal;
pravinmagar 0:001407b7f10c 45 int date, month, year, hour, minute, second, temp = 0;
pravinmagar 0:001407b7f10c 46 int c,i;
pravinmagar 0:001407b7f10c 47 int ns;
pravinmagar 0:001407b7f10c 48 unsigned long var = 0;
pravinmagar 0:001407b7f10c 49 unsigned long currentMillis = 0;
pravinmagar 0:001407b7f10c 50 uint8_t x=0,z=0, answer=0;
pravinmagar 0:001407b7f10c 51
pravinmagar 0:001407b7f10c 52 time_t previous;
pravinmagar 0:001407b7f10c 53 float tempC;
pravinmagar 0:001407b7f10c 54 uint32_t dataLength = dur_sec*freq*1000;
pravinmagar 0:001407b7f10c 55 osThreadId tid1,tid2,tid3,tid4,tid5,tid6;
pravinmagar 0:001407b7f10c 56 char ftpget[100];
pravinmagar 0:001407b7f10c 57 int reset_time=120; //mins
pravinmagar 0:001407b7f10c 58 int gsmerr=0;
pravinmagar 1:8dd592e91577 59 int count1=0;
pravinmagar 0:001407b7f10c 60 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 61 // Module reset //
pravinmagar 0:001407b7f10c 62 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 63 void reset_mod()
pravinmagar 0:001407b7f10c 64 {
pravinmagar 0:001407b7f10c 65 NVIC_SystemReset();
pravinmagar 0:001407b7f10c 66 }
pravinmagar 0:001407b7f10c 67 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 68 // Send AT Command (1 response) //
pravinmagar 0:001407b7f10c 69 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 70 int8_t sendATcommand(char* ATcommand, char* expected_answer, unsigned int timeout, bool clk_flag)
pravinmagar 0:001407b7f10c 71 {
pravinmagar 0:001407b7f10c 72 uint8_t x=0,answer=0; //x=0 and answer=0, if not put, AT+CCLK?\r is not executed
pravinmagar 0:001407b7f10c 73 char response[100];
pravinmagar 0:001407b7f10c 74 memset(response, '\0', 100); // Initialize the string
pravinmagar 0:001407b7f10c 75 wait_ms(100);
pravinmagar 0:001407b7f10c 76 while( gsm.readable() > 0) gsm.getc(); // Clean the input buffer
pravinmagar 0:001407b7f10c 77 gsm.printf("%s \r", ATcommand); // Send the AT command
pravinmagar 0:001407b7f10c 78 x = 0;
pravinmagar 0:001407b7f10c 79 previous = time(NULL);
pravinmagar 0:001407b7f10c 80 do // this loop waits for the answer
pravinmagar 0:001407b7f10c 81 {
pravinmagar 0:001407b7f10c 82 if(gsm.readable() != 0)
pravinmagar 0:001407b7f10c 83 {
pravinmagar 0:001407b7f10c 84 response[x] = gsm.getc(); // if there are data in the UART input buffer, reads it and checks for the asnwer
pravinmagar 0:001407b7f10c 85 pc.putc(response[x]);
pravinmagar 0:001407b7f10c 86 x++;
pravinmagar 0:001407b7f10c 87 if (strstr(response, expected_answer) != NULL) // check if the desired answer is in the response of the module
pravinmagar 0:001407b7f10c 88 {
pravinmagar 0:001407b7f10c 89 answer = 1;
pravinmagar 0:001407b7f10c 90 }
pravinmagar 0:001407b7f10c 91 }
pravinmagar 0:001407b7f10c 92 }
pravinmagar 0:001407b7f10c 93 while((answer == 0) && ((time(NULL) - previous) < timeout)); // Waits for the asnwer with time out
pravinmagar 0:001407b7f10c 94 if(clk_flag == 1)
pravinmagar 0:001407b7f10c 95 {
pravinmagar 0:001407b7f10c 96 sprintf(timestamp,response); //copies response to timestamp for further processing }
pravinmagar 0:001407b7f10c 97 }
pravinmagar 0:001407b7f10c 98 return answer;
pravinmagar 0:001407b7f10c 99 }
pravinmagar 0:001407b7f10c 100
pravinmagar 0:001407b7f10c 101 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 102 // Send AT Command (2 response) //
pravinmagar 0:001407b7f10c 103 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 104 int8_t sendATcommand2(char* ATcommand, char* expected_answer1,char* expected_answer2, unsigned int timeout)
pravinmagar 0:001407b7f10c 105 {
pravinmagar 0:001407b7f10c 106 uint8_t x=0, answer=0;
pravinmagar 0:001407b7f10c 107 char response[100];
pravinmagar 0:001407b7f10c 108 time_t previous;
pravinmagar 0:001407b7f10c 109 memset(response, '\0', 100); // Initialize the string
pravinmagar 0:001407b7f10c 110 //Thread::wait(100);
pravinmagar 0:001407b7f10c 111 wait_ms(100);
pravinmagar 0:001407b7f10c 112 while( gsm.readable() != 0) gsm.getc(); // Clean the input buffer
pravinmagar 0:001407b7f10c 113 gsm.printf("%s \r", ATcommand); // Send the AT command
pravinmagar 0:001407b7f10c 114 x = 0;
pravinmagar 0:001407b7f10c 115 previous = time(NULL);
pravinmagar 0:001407b7f10c 116 do // this loop waits for the answer
pravinmagar 0:001407b7f10c 117 {
pravinmagar 0:001407b7f10c 118 if(gsm.readable() != 0) // if there are data in the UART input buffer, reads it and checks for the asnwer
pravinmagar 0:001407b7f10c 119 {
pravinmagar 0:001407b7f10c 120 response[x] = gsm.getc();
pravinmagar 0:001407b7f10c 121 pc.putc(response[x]);
pravinmagar 0:001407b7f10c 122 // sprintf(ftpget,"%s",response);
pravinmagar 0:001407b7f10c 123 x++;
pravinmagar 0:001407b7f10c 124 if (strstr(response, expected_answer1) != NULL) // check if the desired answer 1 is in the response of the module
pravinmagar 0:001407b7f10c 125 {
pravinmagar 0:001407b7f10c 126 answer = 1;
pravinmagar 0:001407b7f10c 127 }
pravinmagar 0:001407b7f10c 128 if (strstr(response, expected_answer2) != NULL) // check if the desired answer 2 is in the response of the module
pravinmagar 0:001407b7f10c 129 {
pravinmagar 0:001407b7f10c 130 answer = 2;
pravinmagar 0:001407b7f10c 131 break;
pravinmagar 0:001407b7f10c 132 }
pravinmagar 0:001407b7f10c 133 }
pravinmagar 0:001407b7f10c 134 }
pravinmagar 0:001407b7f10c 135 while((answer == 0) && ((time(NULL) - previous) < timeout)); // Waits for the asnwer with time out
pravinmagar 0:001407b7f10c 136 return answer;
pravinmagar 0:001407b7f10c 137 }
pravinmagar 0:001407b7f10c 138
pravinmagar 0:001407b7f10c 139 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 140 // Getting File Directories and names //
pravinmagar 0:001407b7f10c 141 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 142 void GetFileDir()
pravinmagar 0:001407b7f10c 143 {
pravinmagar 0:001407b7f10c 144 int attempt_cnt=0;
pravinmagar 0:001407b7f10c 145 char month_dir[100]="";
pravinmagar 0:001407b7f10c 146 char date_dir[100] ="";
pravinmagar 0:001407b7f10c 147 sendATcommand("AT+CCLK?\r", "OK", 5,1);
pravinmagar 0:001407b7f10c 148 //sprintf(response,timestamp);
pravinmagar 0:001407b7f10c 149 x=20;
pravinmagar 0:001407b7f10c 150 year = 10*(timestamp[x+1]-48) + (timestamp[x+2]-48);
pravinmagar 0:001407b7f10c 151 while(year!=14&&year!=15)
pravinmagar 0:001407b7f10c 152 {
pravinmagar 0:001407b7f10c 153 sendATcommand("AT+CCLK?\r", "OK", 5,0);
pravinmagar 0:001407b7f10c 154 year = 10*(timestamp[x+1]-48) + (timestamp[x+2]-48);
pravinmagar 0:001407b7f10c 155 attempt_cnt++;
pravinmagar 0:001407b7f10c 156 if(attempt_cnt>4) break;
pravinmagar 0:001407b7f10c 157 }
pravinmagar 0:001407b7f10c 158 if(year==14||year==15)
pravinmagar 0:001407b7f10c 159 {
pravinmagar 0:001407b7f10c 160 if(timestamp!=timestampold)
pravinmagar 0:001407b7f10c 161 {
pravinmagar 0:001407b7f10c 162 sprintf(timestampold,timestamp);
pravinmagar 0:001407b7f10c 163 //pc.printf("\r\nold time stamp is%s\r\n",timestampold);
pravinmagar 0:001407b7f10c 164 month = (timestamp[x+4]-48)*10+(timestamp[x+5]-48);
pravinmagar 0:001407b7f10c 165 date = (timestamp[x+7]-48)*10+(timestamp[x+8]-48);
pravinmagar 0:001407b7f10c 166 hour = (timestamp[x+10]-48)*10+(timestamp[x+11]-48);
pravinmagar 0:001407b7f10c 167 minute = (timestamp[x+13]-48)*10+(timestamp[x+14]-48);
pravinmagar 0:001407b7f10c 168 second = (timestamp[x+16]-48)*10+(timestamp[x+17]-48);
pravinmagar 0:001407b7f10c 169
pravinmagar 0:001407b7f10c 170 sprintf(main_dir,"/sd/%s",sitename);
pravinmagar 0:001407b7f10c 171 sprintf(month_dir,"%s/%s%02d%02d",main_dir,sitename,year,month);
pravinmagar 0:001407b7f10c 172 sprintf(date_dir,"%s/%s%02d%02d%02d",month_dir,sitename,year,month,date);
pravinmagar 0:001407b7f10c 173 sprintf(hour_dir,"%s/%s%02d%02d%02d%02d",date_dir,sitename,year,month,date,hour);
pravinmagar 0:001407b7f10c 174 sprintf(filepath,"%s/%s%02d%02d%02d%02d%02d%02d",hour_dir,sitename,year,month,date,hour,minute,second);
pravinmagar 0:001407b7f10c 175 sprintf(filename,"%s%02d%02d%02d%02d%02d%02d",sitename,year,month,date,hour,minute,second);
pravinmagar 0:001407b7f10c 176 gsmerr=0;
pravinmagar 0:001407b7f10c 177 mkdir(main_dir,0777);
pravinmagar 0:001407b7f10c 178 mkdir(month_dir,0777);
pravinmagar 0:001407b7f10c 179 mkdir(date_dir,0777);
pravinmagar 0:001407b7f10c 180 mkdir(hour_dir,0777);
pravinmagar 0:001407b7f10c 181 }
pravinmagar 0:001407b7f10c 182 else
pravinmagar 0:001407b7f10c 183 {
pravinmagar 0:001407b7f10c 184 sprintf(filepath,"%s/%s%02d%02d%02d%02d%02d%02dErr%03d",hour_dir,sitename,year,month,date,hour,minute,second,gsmerr);
pravinmagar 0:001407b7f10c 185 sprintf(filename,"%s%02d%02d%02d%02d%02d%02dErr%03d",sitename,year,month,date,hour,minute,second,gsmerr);
pravinmagar 0:001407b7f10c 186 gsmerr++;
pravinmagar 0:001407b7f10c 187 }
pravinmagar 0:001407b7f10c 188 }
pravinmagar 0:001407b7f10c 189 else
pravinmagar 0:001407b7f10c 190 {
pravinmagar 0:001407b7f10c 191 sprintf(timestamp,timestampold);
pravinmagar 0:001407b7f10c 192 sprintf(filepath,"%s/%s%02d%02d%02d%02d%02d%02dErr%03d",hour_dir,sitename,year,month,date,hour,minute,second,gsmerr);
pravinmagar 0:001407b7f10c 193 sprintf(filename,"%s%02d%02d%02d%02d%02d%02dErr%03d",sitename,year,month,date,hour,minute,second,gsmerr);
pravinmagar 0:001407b7f10c 194 gsmerr++;
pravinmagar 0:001407b7f10c 195 }
pravinmagar 0:001407b7f10c 196 }
pravinmagar 0:001407b7f10c 197 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 198 // DC Detect //
pravinmagar 0:001407b7f10c 199 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 200 void DC_Detection()
pravinmagar 0:001407b7f10c 201 {
pravinmagar 0:001407b7f10c 202 Timer t;
pravinmagar 0:001407b7f10c 203 unsigned long j=0;
pravinmagar 0:001407b7f10c 204
pravinmagar 0:001407b7f10c 205 t.start();
pravinmagar 0:001407b7f10c 206 while(j<10)
pravinmagar 0:001407b7f10c 207 {
pravinmagar 0:001407b7f10c 208 if((int)(t.read()*50*freq*1000)%100 == 0)
pravinmagar 0:001407b7f10c 209 {
pravinmagar 0:001407b7f10c 210 DC_Detect_data[j] = DC_Detect.read_u16();
pravinmagar 0:001407b7f10c 211 ++j;
pravinmagar 0:001407b7f10c 212 }
pravinmagar 0:001407b7f10c 213 }
pravinmagar 0:001407b7f10c 214 t.stop();
pravinmagar 0:001407b7f10c 215 // pc.printf("\r\nTemp Time Taken %f \n\r", t.read());
pravinmagar 0:001407b7f10c 216 t.reset();
pravinmagar 0:001407b7f10c 217 // pc.printf("Total Samples %d\r\n",j);
pravinmagar 0:001407b7f10c 218 osSignalSet(tid3, 0x1);
pravinmagar 0:001407b7f10c 219 }
pravinmagar 0:001407b7f10c 220 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 221 // AC-DC Sampling //
pravinmagar 0:001407b7f10c 222 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 223 void calculate_ADC()
pravinmagar 0:001407b7f10c 224 {
pravinmagar 0:001407b7f10c 225 Timer t;
pravinmagar 0:001407b7f10c 226 unsigned long j=0;
pravinmagar 0:001407b7f10c 227 //pc.printf("\n\rStarting Reading \n\r");
pravinmagar 0:001407b7f10c 228 t.start();
pravinmagar 0:001407b7f10c 229 while(j<dataLength)
pravinmagar 0:001407b7f10c 230 {
pravinmagar 0:001407b7f10c 231 if((int)(t.read()*100*freq*1000)%100 == 0)
pravinmagar 0:001407b7f10c 232 {
pravinmagar 0:001407b7f10c 233 ACdata[j] = AC_input.read_u16();
pravinmagar 0:001407b7f10c 234 DCdata[j] = DC_input.read_u16();
pravinmagar 0:001407b7f10c 235 ++j;
pravinmagar 0:001407b7f10c 236 }
pravinmagar 0:001407b7f10c 237 }
pravinmagar 0:001407b7f10c 238 t.stop();
pravinmagar 0:001407b7f10c 239 //pc.printf("Time Taken %f \n\r", t.read());
pravinmagar 0:001407b7f10c 240 t.reset();
pravinmagar 0:001407b7f10c 241 //pc.printf("Total Samples %d\r\n",j);
pravinmagar 0:001407b7f10c 242 }
pravinmagar 0:001407b7f10c 243 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 244 // Storage //
pravinmagar 0:001407b7f10c 245 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 246 void store(void const *args)
pravinmagar 0:001407b7f10c 247 {
pravinmagar 0:001407b7f10c 248 tid3 = osThreadGetId();
pravinmagar 0:001407b7f10c 249 while(true)
pravinmagar 0:001407b7f10c 250 {
pravinmagar 0:001407b7f10c 251 osSignalWait(0x1, osWaitForever);
pravinmagar 0:001407b7f10c 252 GetFileDir();
pravinmagar 0:001407b7f10c 253 sprintf(filenameAC,"%sAC.txt",filename);
pravinmagar 0:001407b7f10c 254 sprintf(pathAC,"%sAC.txt",filepath);
pravinmagar 0:001407b7f10c 255 // pc.printf("\r\nFilename-AC\t%s", pathAC);
pravinmagar 0:001407b7f10c 256 FILE *fp = fopen(pathAC, "w");
pravinmagar 0:001407b7f10c 257 if(fp == NULL)
pravinmagar 0:001407b7f10c 258 {
pravinmagar 0:001407b7f10c 259 //pc.printf("Could not open file for write\n\r");
pravinmagar 0:001407b7f10c 260 reset_mod();
pravinmagar 0:001407b7f10c 261 }
pravinmagar 0:001407b7f10c 262 else
pravinmagar 0:001407b7f10c 263 {
pravinmagar 0:001407b7f10c 264 for(unsigned long k=0; k<dataLength; ++k)
pravinmagar 0:001407b7f10c 265 {
pravinmagar 0:001407b7f10c 266 fprintf(fp, "%d.", ACdata[k]);
pravinmagar 0:001407b7f10c 267 }
pravinmagar 0:001407b7f10c 268 fprintf(fp, "EOF");
pravinmagar 0:001407b7f10c 269
pravinmagar 0:001407b7f10c 270 }
pravinmagar 0:001407b7f10c 271 fclose(fp);
pravinmagar 0:001407b7f10c 272 sprintf(filenameDC,"%sDC.txt",filename);
pravinmagar 0:001407b7f10c 273 sprintf(pathDC,"%sDC.txt",filepath);
pravinmagar 0:001407b7f10c 274 // pc.printf("\r\nFilename-DC\t%s", pathDC);
pravinmagar 0:001407b7f10c 275 FILE *fp1 = fopen(pathDC, "w");
pravinmagar 0:001407b7f10c 276 if(fp1 == NULL)
pravinmagar 0:001407b7f10c 277 {
pravinmagar 0:001407b7f10c 278
pravinmagar 0:001407b7f10c 279 //reset_mod();
pravinmagar 0:001407b7f10c 280 }
pravinmagar 0:001407b7f10c 281 else
pravinmagar 0:001407b7f10c 282 {
pravinmagar 0:001407b7f10c 283 for(unsigned long k=0; k<dataLength; ++k)
pravinmagar 0:001407b7f10c 284 {
pravinmagar 0:001407b7f10c 285 fprintf(fp1, "%d.", DCdata[k]);
pravinmagar 0:001407b7f10c 286 }
pravinmagar 0:001407b7f10c 287 fprintf(fp1, "EOF");
pravinmagar 0:001407b7f10c 288 }
pravinmagar 0:001407b7f10c 289 fclose(fp1);
pravinmagar 0:001407b7f10c 290 sprintf(pathTC,"%sData.txt",hour_dir);
pravinmagar 0:001407b7f10c 291 //pc.printf("\r\nFilename-TC\t%s", pathTC);
pravinmagar 0:001407b7f10c 292 FILE *fp2 = fopen(pathTC, "a");
pravinmagar 0:001407b7f10c 293 if(fp2 == NULL)
pravinmagar 0:001407b7f10c 294 {
pravinmagar 0:001407b7f10c 295 //pc.printf("Could not open file for write\n\r");
pravinmagar 0:001407b7f10c 296 //reset_mod();
pravinmagar 0:001407b7f10c 297 }
pravinmagar 0:001407b7f10c 298 else
pravinmagar 0:001407b7f10c 299 {
pravinmagar 0:001407b7f10c 300 fprintf(fp2, "\r\n%s",timestamp);
pravinmagar 0:001407b7f10c 301 for(unsigned long k=0; k<10; ++k)
pravinmagar 0:001407b7f10c 302 {
pravinmagar 0:001407b7f10c 303 fprintf(fp2, "\r\nDC-%d",DC_Detect_data[k]);
pravinmagar 0:001407b7f10c 304 }
pravinmagar 0:001407b7f10c 305 }
pravinmagar 0:001407b7f10c 306 fclose(fp2);
pravinmagar 1:8dd592e91577 307 pc.printf("\n\r storage done \n\r");
pravinmagar 0:001407b7f10c 308 osSignalSet(tid6, 0x1);
pravinmagar 0:001407b7f10c 309
pravinmagar 0:001407b7f10c 310 }
pravinmagar 0:001407b7f10c 311 }
pravinmagar 0:001407b7f10c 312
pravinmagar 0:001407b7f10c 313 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 314 // Sampling Function //
pravinmagar 0:001407b7f10c 315 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 316
pravinmagar 0:001407b7f10c 317 void sampling(void const *args)
pravinmagar 0:001407b7f10c 318 {
pravinmagar 0:001407b7f10c 319 //int smplngcnt=0;
pravinmagar 0:001407b7f10c 320 tid1 = osThreadGetId();
pravinmagar 0:001407b7f10c 321 while(true)
pravinmagar 0:001407b7f10c 322 {
pravinmagar 0:001407b7f10c 323 pc.printf("AC sampling attempt");
pravinmagar 0:001407b7f10c 324 calculate_ADC();
pravinmagar 0:001407b7f10c 325 DC_Detection();
pravinmagar 0:001407b7f10c 326 for(int i=0;i<3; i++)
pravinmagar 0:001407b7f10c 327 {
pravinmagar 0:001407b7f10c 328 Thread::wait(60000);
pravinmagar 0:001407b7f10c 329 }
pravinmagar 0:001407b7f10c 330 }
pravinmagar 0:001407b7f10c 331 }
pravinmagar 0:001407b7f10c 332 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 333 // GSM Initialization //
pravinmagar 0:001407b7f10c 334 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 335 void gsm_init()
pravinmagar 0:001407b7f10c 336 {
pravinmagar 0:001407b7f10c 337 int cnt = 0;
pravinmagar 0:001407b7f10c 338 while((sendATcommand("AT+CREG?", "+CREG: 1,1", 5,0) || sendATcommand("AT+CREG?", "+CREG: 1,5", 5,0)) == 0)
pravinmagar 0:001407b7f10c 339 {
pravinmagar 0:001407b7f10c 340 if(sendATcommand("AT+CREG=1", "+CREG:1", 5,0))
pravinmagar 0:001407b7f10c 341 {
pravinmagar 0:001407b7f10c 342 pc.printf("creg is 1");
pravinmagar 0:001407b7f10c 343 return;
pravinmagar 0:001407b7f10c 344 }
pravinmagar 0:001407b7f10c 345 else if(sendATcommand("AT+CREG=1", "+CREG:5", 5,0))
pravinmagar 0:001407b7f10c 346 {
pravinmagar 0:001407b7f10c 347 pc.printf("creg is 5");
pravinmagar 0:001407b7f10c 348 return;
pravinmagar 0:001407b7f10c 349 }
pravinmagar 0:001407b7f10c 350 ++cnt;
pravinmagar 0:001407b7f10c 351 if(cnt == 4)
pravinmagar 0:001407b7f10c 352 {
pravinmagar 0:001407b7f10c 353 pc.printf("GSM registration failed");
pravinmagar 0:001407b7f10c 354 return;
pravinmagar 0:001407b7f10c 355 }
pravinmagar 0:001407b7f10c 356 }
pravinmagar 0:001407b7f10c 357 }
pravinmagar 0:001407b7f10c 358 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 359 // FTP Connect function //
pravinmagar 0:001407b7f10c 360 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 361 bool ftp_connect()
pravinmagar 0:001407b7f10c 362 {
pravinmagar 0:001407b7f10c 363 int ftp_connect_attempt=0;
pravinmagar 0:001407b7f10c 364 int ftp_close_attempt=0;
pravinmagar 0:001407b7f10c 365 if(sendATcommand("AT+SAPBR=2,1", "+SAPBR: 1,3,\"0.0.0.0\"", 5,0))
pravinmagar 0:001407b7f10c 366 {
pravinmagar 0:001407b7f10c 367 }
pravinmagar 0:001407b7f10c 368 else
pravinmagar 0:001407b7f10c 369 {
pravinmagar 0:001407b7f10c 370 while(!sendATcommand("AT+SAPBR=2,1", "+SAPBR: 1,3,\"0.0.0.0\"", 5,0))
pravinmagar 0:001407b7f10c 371 {
pravinmagar 0:001407b7f10c 372 sendATcommand("AT+SAPBR=0,1","OK",5,0);
pravinmagar 0:001407b7f10c 373 ftp_close_attempt++;
pravinmagar 0:001407b7f10c 374 if(ftp_close_attempt>3)
pravinmagar 0:001407b7f10c 375 {
pravinmagar 0:001407b7f10c 376 return 0;
pravinmagar 0:001407b7f10c 377 }
pravinmagar 0:001407b7f10c 378 }
pravinmagar 0:001407b7f10c 379 }
pravinmagar 0:001407b7f10c 380 while(sendATcommand("AT+SAPBR=2,1", "+SAPBR: 1,3,\"0.0.0.0\"", 5,0))
pravinmagar 0:001407b7f10c 381 {
pravinmagar 0:001407b7f10c 382 sendATcommand("AT+SAPBR=1,1", "OK", 10,0);
pravinmagar 0:001407b7f10c 383 ftp_connect_attempt++;
pravinmagar 0:001407b7f10c 384 if(ftp_connect_attempt>6)
pravinmagar 0:001407b7f10c 385 {
pravinmagar 0:001407b7f10c 386 return 0;
pravinmagar 0:001407b7f10c 387 }
pravinmagar 0:001407b7f10c 388 }
pravinmagar 0:001407b7f10c 389 sendATcommand("AT+FTPTYPE=\"I\"", "OK", 5,0);
pravinmagar 0:001407b7f10c 390 sendATcommand("AT+FTPSERV=\"ftp.panchsheel.biz\"", "OK", 10,0);
pravinmagar 0:001407b7f10c 391 sendATcommand("AT+FTPUN=\"hardware@panchsheel.biz\"", "OK\r", 10,0);
pravinmagar 0:001407b7f10c 392 if(sendATcommand("AT+FTPPW=\"DAStest123\"", "OK\r", 10,0)) return 1;
pravinmagar 0:001407b7f10c 393 else return 0;
pravinmagar 0:001407b7f10c 394 }
pravinmagar 0:001407b7f10c 395
pravinmagar 0:001407b7f10c 396 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 397 // FTP Send Function //
pravinmagar 0:001407b7f10c 398 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 399
pravinmagar 1:8dd592e91577 400 void ftp_put(bool ftp_type,int a)
pravinmagar 0:001407b7f10c 401 {
pravinmagar 0:001407b7f10c 402 char ftpfilename[30]="";
pravinmagar 1:8dd592e91577 403 char ftpfilepath[100]="";
pravinmagar 1:8dd592e91577 404
pravinmagar 1:8dd592e91577 405 if(((ftp_type==0) || (ftp_type==1)) && (a==0));
pravinmagar 1:8dd592e91577 406 {
pravinmagar 1:8dd592e91577 407 if ((ftp_type ==0)&&(a==0))
pravinmagar 1:8dd592e91577 408 {
pravinmagar 1:8dd592e91577 409 pc.printf("@@@@");
pravinmagar 1:8dd592e91577 410 sprintf(ftpfilename,"%s",filenameAC);
pravinmagar 1:8dd592e91577 411 sprintf(ftpfilepath,"%s",pathAC);
pravinmagar 1:8dd592e91577 412 }
pravinmagar 1:8dd592e91577 413 else if((ftp_type==1) && (a==0))
pravinmagar 1:8dd592e91577 414 {
pravinmagar 1:8dd592e91577 415 pc.printf("###");
pravinmagar 1:8dd592e91577 416 sprintf(ftpfilename,"%s",filenameDC);
pravinmagar 1:8dd592e91577 417 sprintf(ftpfilepath,"%s",pathDC);
pravinmagar 1:8dd592e91577 418 }
pravinmagar 1:8dd592e91577 419 }
pravinmagar 1:8dd592e91577 420 while(((ftp_type==0) && (a==1)))
pravinmagar 1:8dd592e91577 421 {
pravinmagar 1:8dd592e91577 422 pc.printf("\r\n##\r\n");
pravinmagar 1:8dd592e91577 423 sprintf(ftpfilename,"%s","MODZ150119112458AC.txt");
pravinmagar 1:8dd592e91577 424 sprintf(ftpfilepath,"%s",ftpget);
pravinmagar 1:8dd592e91577 425 pc.printf("\r\n@@@\r\n");
pravinmagar 1:8dd592e91577 426 break;
pravinmagar 1:8dd592e91577 427 }
pravinmagar 0:001407b7f10c 428 pc.printf("\r\nftp_put attempt\n\r");
pravinmagar 0:001407b7f10c 429 char command1[40];
pravinmagar 0:001407b7f10c 430 char result1[20];
pravinmagar 1:8dd592e91577 431 pc.printf("\r\r--%s--",ftpfilename);
pravinmagar 0:001407b7f10c 432 sprintf(command1,"%s\"%s\"", "AT+FTPPUTNAME=", ftpfilename);
pravinmagar 0:001407b7f10c 433 sprintf(result1,"%s", "OK");
pravinmagar 0:001407b7f10c 434 for(int putname_attempt=0; putname_attempt<3;putname_attempt++)
pravinmagar 0:001407b7f10c 435 {
pravinmagar 0:001407b7f10c 436 if(sendATcommand(command1,result1, 10,0))
pravinmagar 0:001407b7f10c 437 {
pravinmagar 0:001407b7f10c 438 // pc.printf("\n %p",ftpfilename);
pravinmagar 1:8dd592e91577 439 sendATcommand("AT+FTPPUTPATH=\"/Trial/\"", "OK", 5,0);
pravinmagar 0:001407b7f10c 440 if(sendATcommand("AT+FTPPUT=1", "OK", 10,0))
pravinmagar 0:001407b7f10c 441 {
pravinmagar 0:001407b7f10c 442 // pc.printf("in loop");
pravinmagar 0:001407b7f10c 443 // pc.printf("\n\r %s",ftpfilepath);
pravinmagar 0:001407b7f10c 444 FILE *fp9 = fopen(ftpfilepath, "r");
pravinmagar 0:001407b7f10c 445 if(fp9==NULL)return;
pravinmagar 0:001407b7f10c 446 else
pravinmagar 0:001407b7f10c 447 {
pravinmagar 0:001407b7f10c 448 int trialcount=0;
pravinmagar 0:001407b7f10c 449 int allowedtrials=5;
pravinmagar 0:001407b7f10c 450 while(trialcount<allowedtrials)
pravinmagar 0:001407b7f10c 451 {
pravinmagar 0:001407b7f10c 452 if(sendATcommand("AT+FTPPUT=2,1000","+FTPPUT:2,1000", 10,0))
pravinmagar 0:001407b7f10c 453 {
pravinmagar 0:001407b7f10c 454 trialcount=0;
pravinmagar 0:001407b7f10c 455 for(int i=0; i<1000; i++)
pravinmagar 0:001407b7f10c 456 {
pravinmagar 0:001407b7f10c 457 gsm.printf("%c", fgetc(fp9));
pravinmagar 0:001407b7f10c 458
pravinmagar 0:001407b7f10c 459 }
pravinmagar 1:8dd592e91577 460 pc.printf("file transfered succesfully");
pravinmagar 0:001407b7f10c 461 break;
pravinmagar 0:001407b7f10c 462 }
pravinmagar 0:001407b7f10c 463 else
pravinmagar 0:001407b7f10c 464 {
pravinmagar 0:001407b7f10c 465 // pc.printf("attempt %d failed",trialcount);
pravinmagar 0:001407b7f10c 466 trialcount++;
pravinmagar 0:001407b7f10c 467 }
pravinmagar 0:001407b7f10c 468 }
pravinmagar 0:001407b7f10c 469
pravinmagar 0:001407b7f10c 470 fclose(fp9);
pravinmagar 0:001407b7f10c 471 }
pravinmagar 0:001407b7f10c 472
pravinmagar 0:001407b7f10c 473 for(int ftp_close_attempt=0; ftp_close_attempt<5; ftp_close_attempt++)
pravinmagar 0:001407b7f10c 474 {
pravinmagar 0:001407b7f10c 475 if(sendATcommand("AT+FTPPUT=2,0", "OK", 5,0))
pravinmagar 0:001407b7f10c 476 {
pravinmagar 0:001407b7f10c 477 ftp_close_attempt=6;
pravinmagar 0:001407b7f10c 478 }
pravinmagar 0:001407b7f10c 479 }
pravinmagar 0:001407b7f10c 480 return;
pravinmagar 0:001407b7f10c 481 //}
pravinmagar 0:001407b7f10c 482
pravinmagar 0:001407b7f10c 483 }
pravinmagar 0:001407b7f10c 484 return;
pravinmagar 0:001407b7f10c 485 }
pravinmagar 0:001407b7f10c 486 }
pravinmagar 0:001407b7f10c 487 // pc.printf("\n\r %s\n\r","i am not able to send data");
pravinmagar 0:001407b7f10c 488 }
pravinmagar 1:8dd592e91577 489
pravinmagar 0:001407b7f10c 490 //-----------------------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 491 // FTP Get
pravinmagar 0:001407b7f10c 492 //----------------------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 493 void downloadFTP()
pravinmagar 0:001407b7f10c 494
pravinmagar 0:001407b7f10c 495 {
pravinmagar 1:8dd592e91577 496 Timer t;
pravinmagar 1:8dd592e91577 497 char incoming_data[100]="";
pravinmagar 0:001407b7f10c 498 //int data_size, aux;
pravinmagar 0:001407b7f10c 499 int x = 0;
pravinmagar 0:001407b7f10c 500 int attempt=0;
pravinmagar 0:001407b7f10c 501 int allowed_attempt=4;
pravinmagar 1:8dd592e91577 502 sendATcommand("AT+FTPGETNAME=\"abc.txt\"", "OK", 5,0);
pravinmagar 1:8dd592e91577 503 sendATcommand("AT+FTPGETPATH=\"/\"", "OK", 5,0);
pravinmagar 0:001407b7f10c 504 while(attempt<allowed_attempt)
pravinmagar 0:001407b7f10c 505 {
pravinmagar 1:8dd592e91577 506 if (sendATcommand("AT+FTPGET=1", "+FTPGET:1,1",20,0)==1)
pravinmagar 0:001407b7f10c 507 {
pravinmagar 1:8dd592e91577 508 for(int i=0; i<4;i++)
pravinmagar 0:001407b7f10c 509 {
pravinmagar 0:001407b7f10c 510 if (sendATcommand2("AT+FTPGET=2,70","+FTPGET:2,","+FTPGET:1,",10) == 1)
pravinmagar 1:8dd592e91577 511 {
pravinmagar 0:001407b7f10c 512 //data_size = 0;
pravinmagar 0:001407b7f10c 513 int previous = time(NULL);
pravinmagar 1:8dd592e91577 514 do{
pravinmagar 1:8dd592e91577 515 if(gsm.readable() == 1)
pravinmagar 1:8dd592e91577 516 {
pravinmagar 0:001407b7f10c 517 incoming_data[x] = gsm.getc();
pravinmagar 0:001407b7f10c 518 x++;
pravinmagar 1:8dd592e91577 519 }
pravinmagar 0:001407b7f10c 520 }while((time(NULL) - previous) < 5);
pravinmagar 1:8dd592e91577 521
pravinmagar 0:001407b7f10c 522 pc.printf("Data is %s\r\n",incoming_data);
pravinmagar 1:8dd592e91577 523 const char s[2] = "\n";
pravinmagar 1:8dd592e91577 524 char *token;
pravinmagar 1:8dd592e91577 525 token = strtok(incoming_data, s);
pravinmagar 1:8dd592e91577 526 token= strtok(NULL,s);
pravinmagar 0:001407b7f10c 527 //len = atoi(token);
pravinmagar 1:8dd592e91577 528 //strncpy(ftpget,incoming_data+3,51);
pravinmagar 1:8dd592e91577 529 sprintf(ftpget,token);
pravinmagar 0:001407b7f10c 530 pc.printf("Data is %s",ftpget);
pravinmagar 0:001407b7f10c 531 FILE *fp1 = fopen("/sd/Query.txt","w");
pravinmagar 0:001407b7f10c 532 fprintf(fp1,"%s",ftpget);
pravinmagar 0:001407b7f10c 533 fclose(fp1);
pravinmagar 0:001407b7f10c 534 pc.printf("\r\n Download finished");
pravinmagar 0:001407b7f10c 535
pravinmagar 0:001407b7f10c 536 break;
pravinmagar 0:001407b7f10c 537 }
pravinmagar 0:001407b7f10c 538
pravinmagar 0:001407b7f10c 539 }
pravinmagar 0:001407b7f10c 540
pravinmagar 0:001407b7f10c 541 break;
pravinmagar 0:001407b7f10c 542 }
pravinmagar 0:001407b7f10c 543
pravinmagar 0:001407b7f10c 544 else
pravinmagar 0:001407b7f10c 545 {
pravinmagar 0:001407b7f10c 546 attempt++;
pravinmagar 0:001407b7f10c 547 }
pravinmagar 0:001407b7f10c 548 }
pravinmagar 1:8dd592e91577 549
pravinmagar 1:8dd592e91577 550 }
pravinmagar 0:001407b7f10c 551
pravinmagar 1:8dd592e91577 552
pravinmagar 0:001407b7f10c 553 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 554 // FTP Function Thread //
pravinmagar 0:001407b7f10c 555 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 556
pravinmagar 0:001407b7f10c 557 void FTP_Fun(void const *args)
pravinmagar 0:001407b7f10c 558 {
pravinmagar 0:001407b7f10c 559 tid6 = osThreadGetId();
pravinmagar 0:001407b7f10c 560
pravinmagar 0:001407b7f10c 561 while(true)
pravinmagar 0:001407b7f10c 562 {
pravinmagar 1:8dd592e91577 563
pravinmagar 0:001407b7f10c 564 osSignalWait(0x1, osWaitForever);
pravinmagar 1:8dd592e91577 565
pravinmagar 0:001407b7f10c 566 if(ftp_connect())
pravinmagar 1:8dd592e91577 567 {
pravinmagar 1:8dd592e91577 568 // Timer t;
pravinmagar 1:8dd592e91577 569 // t.start();
pravinmagar 1:8dd592e91577 570 // ftp_put(0,0);
pravinmagar 1:8dd592e91577 571 //ftp_put(1,0);
pravinmagar 1:8dd592e91577 572 // t.stop();
pravinmagar 1:8dd592e91577 573 // pc.printf("\n\r Time=%f",t.read());
pravinmagar 1:8dd592e91577 574 if (count1==0)
pravinmagar 1:8dd592e91577 575 { downloadFTP();
pravinmagar 1:8dd592e91577 576 ftp_put(0,1);
pravinmagar 1:8dd592e91577 577 int count1=0;
pravinmagar 1:8dd592e91577 578 break;
pravinmagar 1:8dd592e91577 579 }
pravinmagar 1:8dd592e91577 580 count1++;
pravinmagar 1:8dd592e91577 581 }
pravinmagar 0:001407b7f10c 582 }
pravinmagar 0:001407b7f10c 583 }
pravinmagar 0:001407b7f10c 584 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 585 // Main Function //
pravinmagar 0:001407b7f10c 586 //--------------------------------------------------------------------------------------------------//
pravinmagar 0:001407b7f10c 587 int main()
pravinmagar 0:001407b7f10c 588 {
pravinmagar 0:001407b7f10c 589 gsm_rst=1;
pravinmagar 0:001407b7f10c 590 wait(5);
pravinmagar 0:001407b7f10c 591 gsm.baud(115200);
pravinmagar 0:001407b7f10c 592 pc.baud(115200);
pravinmagar 0:001407b7f10c 593 pc.printf("\r\nHello");
pravinmagar 0:001407b7f10c 594 sendATcommand("AT+CLTS=1\r", "OK", 5,0);
pravinmagar 0:001407b7f10c 595 wait(2);
pravinmagar 0:001407b7f10c 596 sendATcommand("AT+CCLK?\r", "OK", 5,1);
pravinmagar 0:001407b7f10c 597
pravinmagar 0:001407b7f10c 598 //pc.printf("\r\n%s",timestamp);
pravinmagar 0:001407b7f10c 599 FILE *fp = fopen("/sd/SiteInfo.txt","a");
pravinmagar 0:001407b7f10c 600 if(fp == NULL)
pravinmagar 0:001407b7f10c 601 {
pravinmagar 0:001407b7f10c 602 FILE *fp = fopen("/sd/SiteInfo.txt","w");
pravinmagar 0:001407b7f10c 603 fprintf(fp, "\r\n%s",timestamp);
pravinmagar 0:001407b7f10c 604 }
pravinmagar 0:001407b7f10c 605 else
pravinmagar 0:001407b7f10c 606 {
pravinmagar 0:001407b7f10c 607 fprintf(fp, "\r\n%s",timestamp);
pravinmagar 0:001407b7f10c 608 //pc.printf("\r\n%s",timestamp);
pravinmagar 0:001407b7f10c 609 fclose(fp);
pravinmagar 0:001407b7f10c 610 }
pravinmagar 1:8dd592e91577 611
pravinmagar 0:001407b7f10c 612 Thread thread1(sampling);
pravinmagar 0:001407b7f10c 613 Thread thread3(store);
pravinmagar 0:001407b7f10c 614 Thread thread6(FTP_Fun);
pravinmagar 0:001407b7f10c 615
pravinmagar 0:001407b7f10c 616 while(true)
pravinmagar 0:001407b7f10c 617 {
pravinmagar 0:001407b7f10c 618 for (int f=0; f<reset_time; f++)//reset after 60 min
pravinmagar 0:001407b7f10c 619 {
pravinmagar 0:001407b7f10c 620 Thread::wait(60000);
pravinmagar 0:001407b7f10c 621 }
pravinmagar 0:001407b7f10c 622 //pc.printf("\r\n---MODULE RESET---\r\n");
pravinmagar 0:001407b7f10c 623 //reset_mod();
pravinmagar 0:001407b7f10c 624 }
pravinmagar 0:001407b7f10c 625 }