created separate function for hex to char

Dependencies:   SDFileSystem ds3231 eeprom_Nikita mbed testUniGraphic_150217

Fork of SS_SensePOC2P0_11Dec2017_USERPID by rashmi v

Committer:
avp2417
Date:
Sat Jul 29 11:23:19 2017 +0000
Revision:
36:00d96aa14658
Parent:
34:8f6b0dc124e8
Child:
39:69b09bd87502
Added Suhasini's changes related to BP code and increase Bluetooth buffer from 150 samples to 600 Samples into 27th July 2017 code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nikitateggi 1:8316c23ec6b9 1 /** ECG ADS1291 Test program.
nikitateggi 1:8316c23ec6b9 2 ADS1291 is a single channel ECG chip
nikitateggi 1:8316c23ec6b9 3 with a 24 bit Sigma-Delta ADC
nikitateggi 1:8316c23ec6b9 4 */
nikitateggi 1:8316c23ec6b9 5
nikitateggi 1:8316c23ec6b9 6 #include "mbed.h"
nikitateggi 1:8316c23ec6b9 7 #include <string.h>
nikitateggi 1:8316c23ec6b9 8 #include <stdio.h>
nikitateggi 1:8316c23ec6b9 9 #include "ds3231.h"
nikitateggi 1:8316c23ec6b9 10 #include "SDFileSystem.h"
nikitateggi 1:8316c23ec6b9 11 #include "ecg_dec.h"
nikitateggi 1:8316c23ec6b9 12 #include "rtc.h"
nikitateggi 1:8316c23ec6b9 13 #include "sdcard.h"
nikitateggi 3:9a06c2bed650 14 #include "ec_bp.h"
nidhinvarghese 14:f5c62d30c6fc 15
nidhinvarghese 14:f5c62d30c6fc 16 #include "struct.h" // Added on 31/5/17_Nidhin
nikitateggi 19:1650bbc923cc 17 //#include "test_type.h" //Added on 31/5/17_Nidhin
suhasini 26:53ff13a164f3 18 FILE *fpeecg1; // FILE pointer to ECG file
nikitateggi 3:9a06c2bed650 19 Serial pc(USBTX,USBRX);
nikitateggi 1:8316c23ec6b9 20
nikitateggi 1:8316c23ec6b9 21
nikitateggi 22:ffa88619551d 22 uint16_t ecg(int32_t pid)
nikitateggi 22:ffa88619551d 23 //float ecg(int pid)
nikitateggi 3:9a06c2bed650 24 {
nikitateggi 20:7c64e6ecad76 25
nikitateggi 20:7c64e6ecad76 26 uint8_t lead_reg=0; // added on 14/06 to check lead -off
nidhinvarghese 14:f5c62d30c6fc 27 //----------------------- Structure for Bluetooth Added Nidhin 1/6/2017-------------------//
nidhinvarghese 14:f5c62d30c6fc 28
nidhinvarghese 14:f5c62d30c6fc 29 //BLUETOOTH STRUCTURE
nidhinvarghese 14:f5c62d30c6fc 30
nidhinvarghese 14:f5c62d30c6fc 31 BLEMsg_info *ptr_BLEMsg_info_ecg, BLEMsg_info_ecg; // A copy of master strcuture [ "BLEMsg_info" ] by name "BLEMsg_info_ecg" is created
nidhinvarghese 14:f5c62d30c6fc 32 ptr_BLEMsg_info_ecg = &BLEMsg_info_ecg; // *ptr_BLEMsg_info_bp is the pointer to local copy;
nidhinvarghese 14:f5c62d30c6fc 33
nidhinvarghese 14:f5c62d30c6fc 34 // Declaration of Date Structure
nidhinvarghese 14:f5c62d30c6fc 35 DateTime_info *ptr_DateTime_info_ecg, DateTime_info_ecg; // A copy of Master Structure "DateTime_info" created,
nidhinvarghese 14:f5c62d30c6fc 36 ptr_DateTime_info_ecg = &DateTime_info_ecg; // Structure pointer points to that copy.
nidhinvarghese 14:f5c62d30c6fc 37
nidhinvarghese 14:f5c62d30c6fc 38
nidhinvarghese 14:f5c62d30c6fc 39 // RTC operations
nidhinvarghese 14:f5c62d30c6fc 40 time_t epoch_time_ecg; //A copy of time_t by name epoch_time_bp is created
nidhinvarghese 14:f5c62d30c6fc 41 epoch_time_ecg = rtc_read(); // time is got from get epoch function.
nidhinvarghese 14:f5c62d30c6fc 42
nidhinvarghese 14:f5c62d30c6fc 43 struct tm * ptr_time_info_ecg, time_info_ecg; // Sturucture copy of tm is created
nidhinvarghese 14:f5c62d30c6fc 44 ptr_time_info_ecg = localtime(&epoch_time_ecg); // Structure accepts the time in local format from "time_t" type.
nidhinvarghese 14:f5c62d30c6fc 45
nidhinvarghese 14:f5c62d30c6fc 46 //BELOW LINE IS TO CHECK Date and TIME
nidhinvarghese 15:208b146151ba 47 //pc.printf("Time is %d: %d: %d\n", (*ptr_time_info_ecg).tm_hour, (*ptr_time_info_ecg).tm_min, (*ptr_time_info_ecg).tm_sec);
nidhinvarghese 15:208b146151ba 48 //pc.printf("Date is %d:%d:%d\n", (*ptr_time_info_ecg).tm_mday, (*ptr_time_info_ecg).tm_mon+1, (*ptr_time_info_ecg).tm_year-100);
nidhinvarghese 14:f5c62d30c6fc 49
nidhinvarghese 14:f5c62d30c6fc 50 //Copying from one structure to the other using variables
nidhinvarghese 14:f5c62d30c6fc 51 DateTime_info_ecg.hour = (uint8_t)(*ptr_time_info_ecg).tm_hour;
nidhinvarghese 14:f5c62d30c6fc 52 DateTime_info_ecg.mins = (uint8_t)(*ptr_time_info_ecg).tm_min;
nidhinvarghese 14:f5c62d30c6fc 53 DateTime_info_ecg.sec = (uint8_t)(*ptr_time_info_ecg).tm_sec;
nidhinvarghese 14:f5c62d30c6fc 54
nidhinvarghese 14:f5c62d30c6fc 55 DateTime_info_ecg.date = (uint8_t) (*ptr_time_info_ecg).tm_mday;
nidhinvarghese 14:f5c62d30c6fc 56 DateTime_info_ecg.month =(uint8_t)(*ptr_time_info_ecg).tm_mon+1;
nidhinvarghese 14:f5c62d30c6fc 57 DateTime_info_ecg.year = (uint8_t)(*ptr_time_info_ecg).tm_year-100;
nidhinvarghese 14:f5c62d30c6fc 58
nidhinvarghese 14:f5c62d30c6fc 59 // Copying Time to Main structure
nidhinvarghese 14:f5c62d30c6fc 60 BLEMsg_info_ecg.date_time.hour = DateTime_info_ecg.hour;
nidhinvarghese 14:f5c62d30c6fc 61 BLEMsg_info_ecg.date_time.mins = DateTime_info_ecg.mins;
nidhinvarghese 14:f5c62d30c6fc 62 BLEMsg_info_ecg.date_time.sec = DateTime_info_ecg.sec;
nidhinvarghese 14:f5c62d30c6fc 63
nidhinvarghese 14:f5c62d30c6fc 64 BLEMsg_info_ecg.date_time.date = DateTime_info_ecg.date ;
nidhinvarghese 14:f5c62d30c6fc 65 BLEMsg_info_ecg.date_time.month = DateTime_info_ecg.month ;
nidhinvarghese 14:f5c62d30c6fc 66 BLEMsg_info_ecg.date_time.year = DateTime_info_ecg.year ;
nidhinvarghese 14:f5c62d30c6fc 67
nidhinvarghese 14:f5c62d30c6fc 68
nidhinvarghese 14:f5c62d30c6fc 69 //Checking if the structure has these values
nidhinvarghese 15:208b146151ba 70 //pc.printf("Time 2 is %d:%d:%d\n", DateTime_info_ecg.hour, DateTime_info_ecg.mins, DateTime_info_ecg.sec);
nidhinvarghese 15:208b146151ba 71 //pc.printf("\t Date is %d:%d:%d\n",DateTime_info_ecg.date, DateTime_info_ecg.month, DateTime_info_ecg.year);
nidhinvarghese 14:f5c62d30c6fc 72
nidhinvarghese 14:f5c62d30c6fc 73
nidhinvarghese 14:f5c62d30c6fc 74 //Loading values to of Test type
nidhinvarghese 14:f5c62d30c6fc 75 test_type_info test_type_info_ecg; // copy of " test_type_info" created
nidhinvarghese 14:f5c62d30c6fc 76 test_type_info_ecg = ECG_Test; // Loaded value 00 to the test type
nidhinvarghese 14:f5c62d30c6fc 77
nidhinvarghese 14:f5c62d30c6fc 78 BLEMsg_info_ecg.test_type = test_type_info_ecg;
nidhinvarghese 14:f5c62d30c6fc 79 //Check if 00 is getting printed
nidhinvarghese 15:208b146151ba 80 //pc.printf("Test Type is : %d\n", test_type_info_ecg);
nidhinvarghese 14:f5c62d30c6fc 81
nidhinvarghese 14:f5c62d30c6fc 82
nidhinvarghese 14:f5c62d30c6fc 83 // Loading values of Length , PID, DID, sampling frequency, number of samples, calculated data.
nidhinvarghese 14:f5c62d30c6fc 84 BLEMsg_info_ecg.device_id = 01; // Device ID fixed
nidhinvarghese 14:f5c62d30c6fc 85 BLEMsg_info_ecg.patient_id = (uint32_t)pid; // Patient ID
nidhinvarghese 14:f5c62d30c6fc 86 BLEMsg_info_ecg.sampling_freq = 500; // sampling frrquency
nikitateggi 32:76892fdf5e4c 87 BLEMsg_info_ecg.length = 8022; //Total length of data in bytes 22 B+ 4000 data
nidhinvarghese 14:f5c62d30c6fc 88
nidhinvarghese 14:f5c62d30c6fc 89 /*
nidhinvarghese 14:f5c62d30c6fc 90 //Loading number of samples
nidhinvarghese 14:f5c62d30c6fc 91 NumSamples_info NumSamples_info_bp; //Copy of structure NumSamples_info
nidhinvarghese 14:f5c62d30c6fc 92 NumSamples_info_bp.num_ppg_sample = 1664; // PPG & ECG Sample number loaded in structure copy
nidhinvarghese 14:f5c62d30c6fc 93 NumSamples_info_bp.num_ecg_sample = 1024;
nidhinvarghese 14:f5c62d30c6fc 94 */
nidhinvarghese 14:f5c62d30c6fc 95
nidhinvarghese 14:f5c62d30c6fc 96 BLEMsg_info_ecg.num_samples.num_sample_ppg_dummy = 0 ;// PPG number of samples copied to master struct
nikitateggi 32:76892fdf5e4c 97 BLEMsg_info_ecg.num_samples.num_sample_ecg_OTtyp = 2000 ; // ECG number of samples copied to master struct
nidhinvarghese 14:f5c62d30c6fc 98
nidhinvarghese 14:f5c62d30c6fc 99 //----------------------------------------END Structure for Bluetooth - Added Nidhin 1/6/2017-------
nidhinvarghese 14:f5c62d30c6fc 100
suhasini 26:53ff13a164f3 101 uint32_t concatenate_value2 = 0; // ORG. "int concatenate_value2 = 0;" Nidhin 1/6/17
suhasini 26:53ff13a164f3 102 uint32_t *ecg_ptr; // Added 1/6/2017 Nidhin
nidhinvarghese 14:f5c62d30c6fc 103 ecg_ptr = &concatenate_value2; // Pointer to pass for ECG write into SD card Nidhin 1/6/2017
nidhinvarghese 14:f5c62d30c6fc 104
suhasini 26:53ff13a164f3 105 uint16_t count = 0;
suhasini 26:53ff13a164f3 106 uint16_t fs = 500;
suhasini 26:53ff13a164f3 107 //uint32_t ecg_buf[N_ECG];
suhasini 26:53ff13a164f3 108 Timer t;
suhasini 13:5d3b478ea9c7 109
suhasini 13:5d3b478ea9c7 110 //------------------ Declaration for Peak value detection ------------------------------------
avp2417 36:00d96aa14658 111 uint32_t ecg_samp1[1] ;
avp2417 36:00d96aa14658 112 uint32_t ecg_samp2[1];
avp2417 36:00d96aa14658 113 uint32_t ecg_samp3[1]; // to Stores sample 1, 2 & 10th sample
suhasini 26:53ff13a164f3 114 uint32_t fppos; // Variable to hold pointer position
suhasini 26:53ff13a164f3 115 uint32_t hi_val;
suhasini 26:53ff13a164f3 116 uint32_t pk_val[20];
suhasini 26:53ff13a164f3 117 uint16_t pk_pos[20]={0};
suhasini 26:53ff13a164f3 118 int32_t hi_dif = 0; //diff between high value and it's consecutive value
suhasini 26:53ff13a164f3 119 uint16_t j=0; // int count1 = N_ECG/fs, a_dif=0, fs1 = fs ,h=0;
suhasini 26:53ff13a164f3 120 int32_t m =0; // Variable to move the file pointer in fseek fun
suhasini 26:53ff13a164f3 121 int32_t samp_10 = 28; // Variable to move to 10th sampple from current
suhasini 26:53ff13a164f3 122 char buffer3[32];
suhasini 26:53ff13a164f3 123
suhasini 13:5d3b478ea9c7 124 // ------------------------- Declaration for Heart Rate calculation --------------------------
suhasini 26:53ff13a164f3 125 uint8_t n=0;
suhasini 26:53ff13a164f3 126 float pos_dif, HR[10], HR1,t_pos_dif;
suhasini 26:53ff13a164f3 127 uint8_t t_sec = 60;
suhasini 26:53ff13a164f3 128 float HR_sum = 0,HR_avg;
suhasini 13:5d3b478ea9c7 129 // -------------------------------------------------------------------------------------------
nikitateggi 3:9a06c2bed650 130 pc.baud(baud_rate);
nikitateggi 4:6bd81bb1790d 131 freqset(); // setting the frequency
nikitateggi 22:ffa88619551d 132 setupfunc();
nikitateggi 22:ffa88619551d 133 //ecgtestsetupfunc(); // For test set up of 1Hz square wave signal
nikitateggi 22:ffa88619551d 134 lead_reg= ecgsetupfunc();
avp2417 36:00d96aa14658 135
nikitateggi 22:ffa88619551d 136 //ORIGINAL sd_open_ECGfile(pid); // opening the ecg file COMMENTED Nidhin 1/6/2017
nikitateggi 20:7c64e6ecad76 137 if (lead_reg==0) // checking for proper lead contact// 14/06
nikitateggi 22:ffa88619551d 138 {
nidhinvarghese 14:f5c62d30c6fc 139 sd_open_ECGfilee(pid); // REPLACED Nidhin 1/6/2017 Nidhin
nidhinvarghese 14:f5c62d30c6fc 140
suhasini 13:5d3b478ea9c7 141 pc.printf( "Raw data is = \n");
suhasini 26:53ff13a164f3 142
nikitateggi 3:9a06c2bed650 143 for(int i=0; i<N_ECG; i++)
nikitateggi 3:9a06c2bed650 144 {
nikitateggi 3:9a06c2bed650 145 concatenate_value2= readvalue();
nikitateggi 22:ffa88619551d 146 pc.printf( "%d\n", concatenate_value2); //ADDED Nidhin 21/6/2017
nidhinvarghese 14:f5c62d30c6fc 147
nidhinvarghese 14:f5c62d30c6fc 148 sd_ecgwrite(ecg_ptr); // REPLACED Nidhin 1/6/2017
suhasini 26:53ff13a164f3 149
nikitateggi 3:9a06c2bed650 150 }
nidhinvarghese 14:f5c62d30c6fc 151
avp2417 36:00d96aa14658 152 sd_close_ecg(); // closing the ECG file REPLACED Nidhin 1/6/2017 Nidhin
nikitateggi 22:ffa88619551d 153
nikitateggi 22:ffa88619551d 154
suhasini 13:5d3b478ea9c7 155 //----------------------------- PEAK DETECTION AND HEART RATE CALCULATION ---------------------------------------------------
suhasini 26:53ff13a164f3 156
suhasini 13:5d3b478ea9c7 157 // -------------------------------------- PEAK DETECTION -------------------------------------------------------------
suhasini 26:53ff13a164f3 158 // ----------------------------------------- Main loop --------------------------------------------------
suhasini 26:53ff13a164f3 159
suhasini 26:53ff13a164f3 160 sprintf(buffer3, "/sd/%d_ECG.csv", pid); // For opening a specific file
suhasini 26:53ff13a164f3 161 fpeecg1 = fopen(buffer3, "r");
suhasini 13:5d3b478ea9c7 162
suhasini 26:53ff13a164f3 163 for(uint16_t i=0;i<(N_ECG-10);i++){
suhasini 26:53ff13a164f3 164 count++;
suhasini 26:53ff13a164f3 165 rewind(fpeecg1); // Go to start of file each time
suhasini 26:53ff13a164f3 166 fseek(fpeecg1, m, SEEK_CUR); // Update the count value according to move pointer //// after every calc. the pointer moves to 0th position, as we have used fseek, hence to make it jump to the respective position by "m" bytes this command is used
suhasini 26:53ff13a164f3 167 fread(ecg_samp1, sizeof(uint32_t), 1, fpeecg1); // Read sample 1
suhasini 26:53ff13a164f3 168 fread(ecg_samp2, sizeof(uint32_t), 1, fpeecg1); // Read Sample 2
suhasini 26:53ff13a164f3 169 fseek(fpeecg1, samp_10, SEEK_CUR); // Moving to tenth sample
suhasini 26:53ff13a164f3 170 fread(ecg_samp3, sizeof(uint32_t), 1, fpeecg1); // Read 3rd sample
suhasini 26:53ff13a164f3 171
suhasini 26:53ff13a164f3 172 if(ecg_samp1[0]>ecg_samp2[0])
suhasini 13:5d3b478ea9c7 173 {
suhasini 26:53ff13a164f3 174 hi_val = ecg_samp1[0]; //To find the high value
suhasini 26:53ff13a164f3 175 hi_dif = hi_val-ecg_samp3[0];
suhasini 13:5d3b478ea9c7 176
suhasini 26:53ff13a164f3 177 // ---------------------------- If hi_val is greater than next ten input values, then compare the hi_val with the tenth input value.
suhasini 26:53ff13a164f3 178 // If the diff is greater than 10000, then it is a valid peak (pls chk the below condition)-------------------------------------
suhasini 13:5d3b478ea9c7 179 if(hi_dif > 10000)
suhasini 13:5d3b478ea9c7 180 {
suhasini 13:5d3b478ea9c7 181 pk_val[j] = hi_val; //if condition satisfied, put the "pk" value into "pk_val" buffer
nikitateggi 22:ffa88619551d 182 pc.printf("peak value= %d\n",pk_val[j]);
suhasini 26:53ff13a164f3 183 pk_pos[j]=i; // also save the peak's position
nikitateggi 22:ffa88619551d 184 pc.printf("peak position is = %d\n",pk_pos[j]);
suhasini 26:53ff13a164f3 185 i = i+120; // once confirmed that this is the necessary peak, skip the next 120 input values
suhasini 13:5d3b478ea9c7 186 n = j; // where n is the number of peaks detected
suhasini 13:5d3b478ea9c7 187 j = j+1;
suhasini 26:53ff13a164f3 188 m = m + 480; //similar reason to considering 28, but to skip 120 samples. this cond. is satisfied only when we hit a peak - suhasini_26thjune17
suhasini 13:5d3b478ea9c7 189
avp2417 36:00d96aa14658 190 }
suhasini 26:53ff13a164f3 191
suhasini 13:5d3b478ea9c7 192 else
suhasini 13:5d3b478ea9c7 193 {
suhasini 26:53ff13a164f3 194 m = m+4; // this is when we do not hit a peak and have to continue searching thru, hence move to the next sample and not skip 120 samples- - suhasini_26thjune17
suhasini 13:5d3b478ea9c7 195 }
avp2417 36:00d96aa14658 196 }
suhasini 26:53ff13a164f3 197 else
suhasini 26:53ff13a164f3 198 {
suhasini 26:53ff13a164f3 199 m = m+4;
suhasini 13:5d3b478ea9c7 200 }
suhasini 26:53ff13a164f3 201 //pc.printf("i=%d",i);
suhasini 13:5d3b478ea9c7 202 }
suhasini 26:53ff13a164f3 203 n=n+1;
suhasini 26:53ff13a164f3 204 pc.printf("n=%d\n",n);
suhasini 26:53ff13a164f3 205
suhasini 13:5d3b478ea9c7 206 // ----------------- HEART RATE LOGIC ---------------------------
nikitateggi 3:9a06c2bed650 207
suhasini 26:53ff13a164f3 208 for(uint16_t i = 0;i < n-1;i++)
suhasini 13:5d3b478ea9c7 209 {
suhasini 13:5d3b478ea9c7 210 pos_dif = pk_pos[i+1] - pk_pos[i]; // difference between two consequtive peaks
suhasini 13:5d3b478ea9c7 211 pc.printf("peak position diff is = %f\n",pos_dif);
suhasini 13:5d3b478ea9c7 212 t_pos_dif = pos_dif/fs; // sample difference between peak positions divided by sampling frequency gives the difference value in terms of actual time
suhasini 13:5d3b478ea9c7 213 pc.printf("time in seconds is = %f\n",t_pos_dif);
suhasini 13:5d3b478ea9c7 214 HR[i] = t_sec/t_pos_dif; //HR calculation
suhasini 13:5d3b478ea9c7 215 pc.printf("Heart Rate is = %f\n",HR[i]);
suhasini 13:5d3b478ea9c7 216 HR1 = HR[0];
suhasini 26:53ff13a164f3 217 }
suhasini 13:5d3b478ea9c7 218
suhasini 26:53ff13a164f3 219
suhasini 13:5d3b478ea9c7 220 // ---------------------- To average individual HRs for higher number of samples -----------------------
suhasini 26:53ff13a164f3 221 for(uint16_t i = 0;i < n-1;i++)
suhasini 13:5d3b478ea9c7 222 {
suhasini 13:5d3b478ea9c7 223 HR_sum = HR[i]+HR_sum;
suhasini 13:5d3b478ea9c7 224 }
suhasini 26:53ff13a164f3 225 HR_avg = HR_sum/(n-1); // To find average of all the individual HRs calculated
suhasini 13:5d3b478ea9c7 226 printf("Heart Rate sum is = %f\n",HR_sum);
suhasini 26:53ff13a164f3 227 printf("Heart Rate avg is = %f\n",HR_avg);
nidhinvarghese 14:f5c62d30c6fc 228
suhasini 26:53ff13a164f3 229 fclose(fpeecg1);
suhasini 26:53ff13a164f3 230 pc.printf("temporary file closed\n");
nikitateggi 31:0f67acfc6236 231
nikitateggi 31:0f67acfc6236 232 if(HR_avg>100 || HR_avg<40)
nikitateggi 31:0f67acfc6236 233 {
nikitateggi 31:0f67acfc6236 234 return 1; // out of range condition returning 1 //nikita//10/7
nikitateggi 31:0f67acfc6236 235 }
nikitateggi 31:0f67acfc6236 236 else
nikitateggi 31:0f67acfc6236 237 {
nikitateggi 31:0f67acfc6236 238
nikitateggi 31:0f67acfc6236 239 BLEMsg_info_ecg.cal_data.cal_sbp_dummy = 0;
avp2417 36:00d96aa14658 240 BLEMsg_info_ecg.cal_data.cal_dbp_OTtyp = HR_avg; //To be modified after HR code is added.
nidhinvarghese 14:f5c62d30c6fc 241
nikitateggi 31:0f67acfc6236 242 structure_file(ptr_BLEMsg_info_ecg, pid); //copy the ECG structure to Main file //COMMENTED Nidhin 10/6/2017
nikitateggi 31:0f67acfc6236 243 ecgfile_mainfile(pid); // copy raw data to the main file and ECG file is cleared. //COMMENTED Nidhin 10/6/2017
nikitateggi 22:ffa88619551d 244
nikitateggi 31:0f67acfc6236 245 pc.printf("Closed the main file\n");
nikitateggi 31:0f67acfc6236 246 return HR_avg;
nikitateggi 31:0f67acfc6236 247 }
nikitateggi 22:ffa88619551d 248 }
nikitateggi 20:7c64e6ecad76 249 else
nikitateggi 20:7c64e6ecad76 250 {
nikitateggi 31:0f67acfc6236 251 pc.printf("improper lead connection");
avp2417 36:00d96aa14658 252 return 0;
nikitateggi 20:7c64e6ecad76 253 }
suhasini 26:53ff13a164f3 254 pc.printf("closing temporary file\n");
avp2417 34:8f6b0dc124e8 255 } // End of main function