Added 4 point or 8 point averaging function .

Dependencies:   SDFileSystem ds3231 eeprom_Nikita mbed testUniGraphic_150217

Fork of merged_code2_3rd_nov_2017 by nikita teggi

Revision:
14:f5c62d30c6fc
Parent:
10:aeff3309002a
Child:
15:208b146151ba
diff -r 5d3b478ea9c7 -r f5c62d30c6fc bp.cpp
--- a/bp.cpp	Sat May 27 05:47:55 2017 +0000
+++ b/bp.cpp	Thu Jun 01 09:24:45 2017 +0000
@@ -1,17 +1,14 @@
-
-//BP Optimised Program for Averaging the received value from PPG and ECG & Check for SD card Storage//
+//-----------------------------------------------NEW BP code starts--------------------------------///
 
 
-/** ECG ADS1291 Test program.
-ADS1291 is a single channel ECG chip
-with a 24 bit Sigma-Delta ADC
- */
 
-/* 
 #include "mbed.h"
 #include "MAX30102.h" // BP ADD
 #include <string.h>
 #include <stdio.h>
+
+#include <time.h>
+//#include <iostream>
 #include "ds3231.h"
 #include "SDFileSystem.h"
 #include "rtc.h"
@@ -21,218 +18,23 @@
 #include "display_modules.h"
 
 
-Serial bc(USBTX,USBRX);
-DigitalIn INTR(PTC7);
 
- 
-    
-void bp() {
- 
-//------------------BP ADD------------------------------//{ 
-//int location; // BP ADD
-int32_t n_red_buffer_length = 1500;    //data length
-uint32_t aun_red_buffer[1500];    //Red LED sensor data, set to 500
-uint32_t red_value;
-uint32_t ecg_value;
-uint8_t uch_dummy;
-uint32_t ecg_buf[1000];
-int32_t ecg_buffer_length = 1000;
-float SBP, DBP, PWV, delta_t;
-int d = 210;
-
-uint32_t un_min, un_max, ecg_min, ecg_max ;  //variables to calculate the on-board LED brightness that reflects the heartbeats
-    //int i, j;
-    float ecg_location, ppg_location; 
-    //int32_t n_brightness;
-    
-   // n_brightness=0;
-    un_min=0x3FFFF;
-    un_max=0;
-    ecg_min = 0xFFFFFF;
-    ecg_max = 0;
- //---------------- BP ADD-----------------------------//}
- 
- 
- //time_t epoch_time;
-  //int fp;
- int concatenate_value1 = 0;
-//uint32_t ecg_buf[1500];
-//int32_t ecg_der[1500];
-//int buff1[15]= {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
-//int32_t sample_sum; // static int32_t avg[1500];
- //int32_t count = 0; int32_t fs = 500; int32_t w=0,w1=0;
-
-   unsigned char chk = 1;
-    bc.baud(baud_rate);
-   // mySpi.frequency(freq) ;
-   // mySpi.format(bits, mode) ; 
- freqset();
-  //  Ds3231 rtc(PTC11, PTC10); //sda,scl2yy
-   
-   //------------------BP ADD---------------------------// {
-    while(bc.readable()==0)
-    {
-        bc.printf("\x1B[2J");  //clear terminal program screen
-        bc.printf("Press any key to start conversion\n\r");
-        wait(1);
-    }
-  wait(5);
-  bc.printf("Start of capture, Remain CALM and Donot MOVE\n");  
-  wait(2);
-  //-------------------BP ADD---------------------------//}
-    
-  setupfunc();
-  ecgsetupfunc(); 
-  //--------------- BP ADD------------------------------------//{
-  maxim_max30102_reset();  // PPG reset
-  maxim_max30102_init(); // PPG ADC register Initialise 
-  //---------------BP ADD ----------------------------------// }  
-  
- 
-   chk = 1;
- bc.printf("rawecg......................\n");
- for(int i=0; i<N_ECG; i++)
- {
-    
-     concatenate_value1=readvalue();
-    ecg_buf[i] = concatenate_value1;
-   
-    bc.printf( "%d\n", concatenate_value1);
-    maxim_max30102_read_reg(0,&uch_dummy);
-    while(INTR.read()==1); 
-    maxim_max30102_read_fifo((aun_red_buffer+i)); 
-     //bc.printf( "%d\n", concatenate_value1);
-      // bc.printf("%d\n",aun_red_buffer[i]);
-    //sd_write(concatenate_value); - -- BP ADD commented
-    //printf( "%d\n", concatenate_value); -- BP ADD commented
-    // bc.printf("loop2");
-    }
-    
-  for (int w=1000; w < n_red_buffer_length; w++)  // for reading extra 500 PPG samples.
-  {
- //bc.printf("loop2");
-  while(INTR.read()==1);
-  maxim_max30102_read_fifo((aun_red_buffer+w));
-  } 
-
-
-   //sd_close();  -- BP ADD commented
-   
-   int32_t ecg_n_denom;
-
- // 4 pt Moving Average ECG
-    bc.printf("PRINTING ECG 4 POINT IN DECIMAL........\n");
-    for(int y=0; y<996; y++){
-        ecg_n_denom= ( ecg_buf[y]+ ecg_buf[y+1]+ ecg_buf[y+2]+ ecg_buf[y+3]);
-        ecg_buf[y]=  ecg_n_denom/(int32_t)4;
-    }
-    for( int l= 0; l<1000; l++){
-    bc.printf("%d\n",ecg_buf[l]); //PRINTING ecg AFTER AVERAGING
-    }
-bc.printf("PRINTING PPG IN DECIMAL (after averaging)........\n");
-int32_t ppg_n_denom;
-  // 4 pt Moving Average PPG
-    for(int f=0; f<1496; f++){
-        ppg_n_denom= ( aun_red_buffer[f]+aun_red_buffer[f+1]+ aun_red_buffer[f+2]+ aun_red_buffer[f+3]);
-        aun_red_buffer[f]= ppg_n_denom/(int32_t)4;
-    }
-    for( int b = 0; b<1500; b++){
-       bc.printf("%d\n",aun_red_buffer[b]);
-    }
-    
-
-for(int f=0; f<ecg_buffer_length; f++)
-   {
-       if(ecg_min > ecg_buf[f])
-           ecg_min = ecg_buf[f];    //update signal min
-        if(ecg_max < ecg_buf[f])
-        {
-            ecg_max=ecg_buf[f];    //update signal max
-            ecg_location = f+1;
-    }
-    }
-    bc.printf( "ecg_location = %f\n", ecg_location);
-
-for(int g = ecg_location;  g < (ecg_location+400); g++) // Peak detect changed to 400 samples from 500 samples
-    {
-       if(un_min>aun_red_buffer[g])
-           un_min=aun_red_buffer[g];    //update signal min
-        if(un_max<aun_red_buffer[g])
-        {
-            un_max=aun_red_buffer[g];    //update signal max
-            ppg_location = g+1;
-    }
-    }
-bc.printf( "ppg_location = %f\n", ppg_location);
-
-delta_t = (2*(ppg_location - ecg_location))/1000;
-bc.printf( "delta_t = %f\n", delta_t);
-
-PWV = d/delta_t;
-bc.printf( "PWV = %f\n", PWV);
-
-SBP = 0.0508955*PWV+62.559;
-DBP = 0.0494*PWV + 17.480;
-
-
-bc.printf( "SBP = %f\n", SBP);
-bc.printf( "DBP = %f\n", DBP);
-
-screen_bp1(SBP,DBP);
-*/
-
-//-----------------WRITE ECG &PPG
- /*  
-sd_open_BPfile(1);
-for (int w=0; w < 1000; w++)
-{
-ecg_value =  ecg_buf[w];   
-sd_write(ecg_value);
-}
-
-
-
-for (int w=0; w < n_red_buffer_length; w++)
-{
-red_value =  aun_red_buffer[w];   
-sd_write(red_value); 
-}
-sd_close();*/
-
-//----------- FINISHED WRITING ECG & PPG TO SD CARD
-
-   
-
-        
- //}    // End of main function
-
-
-//-----------------------------------------------NEW BP code starts--------------------------------///
-
-#include "mbed.h"
-#include "MAX30102.h" // BP ADD
-#include <string.h>
-#include <stdio.h>
-//#include <iostream>
-#include "ds3231.h"
-#include "SDFileSystem.h"
-#include "rtc.h"
-#include "sdcard.h"
-#include "ec_bp.h"
-#include "bp.h"
-#include "display_modules.h"
+#include "struct.h"
+#include "test_type.h"
 
 using namespace std;
 
-Serial bc(USBTX,USBRX);
+Serial bpr(USBTX,USBRX);
 DigitalIn INTR(PTC7);
 
 Timer t; 
 
+
 //FILE *ecg;
 //FILE *ppg;
     
-void bp(int pid) {
+ void bp(int pid) {
+    
     uint8_t uch_dummy;
     uint32_t ppgdata; 
 
@@ -240,8 +42,83 @@
     int concatenate_value2 = 0;
     unsigned char chk = 1;
 
-    int drum11[64];
+    uint32_t drum11[64];
     uint32_t drum21[64];
+    
+           
+    //Declaration of  Master structure
+    
+    BLEMsg_info *ptr_BLEMsg_info_bp, BLEMsg_info_bp; // A copy of master strcuture [ "BLEMsg_info" ] by name "BLEMsg_info_bp" is created
+    ptr_BLEMsg_info_bp = &BLEMsg_info_bp;            // *ptr_BLEMsg_info_bp is the pointer to local copy;
+    
+    // Declaration of Date Structure
+    DateTime_info *ptr_DateTime_info_bp, DateTime_info_bp; // A copy of Master Structure "DateTime_info" created, 
+    ptr_DateTime_info_bp = &DateTime_info_bp;             // Structure pointer points to that copy.
+    
+    
+    // RTC operations
+    time_t epoch_time_bp;           //A copy of time_t by name  epoch_time_bp is created 
+    epoch_time_bp = rtc_read();    // time is got from get epoch function.  
+    
+    struct tm * ptr_time_info_bp, time_info_bp;   // Sturucture copy of tm is created
+    ptr_time_info_bp = localtime(&epoch_time_bp); // Structure accepts the time in local format from "time_t" type.
+      
+    //BELOW LINE IS TO CHECK Date and TIME 
+    bpr.printf("Time is %d: %d: %d\n", (*ptr_time_info_bp).tm_hour, (*ptr_time_info_bp).tm_min, (*ptr_time_info_bp).tm_sec);
+    bpr.printf("Date is %d:%d:%d\n", (*ptr_time_info_bp).tm_mday, (*ptr_time_info_bp).tm_mon+1, (*ptr_time_info_bp).tm_year-100);
+    
+    //Copying from one structure to the other using variables
+    DateTime_info_bp.hour = (uint8_t)(*ptr_time_info_bp).tm_hour;
+    DateTime_info_bp.mins = (uint8_t)(*ptr_time_info_bp).tm_min;
+    DateTime_info_bp.sec =  (uint8_t)(*ptr_time_info_bp).tm_sec;
+    
+    DateTime_info_bp.date = (uint8_t) (*ptr_time_info_bp).tm_mday;
+    DateTime_info_bp.month =(uint8_t)(*ptr_time_info_bp).tm_mon+1;
+    DateTime_info_bp.year = (uint8_t)(*ptr_time_info_bp).tm_year-100;
+    
+    // Copying Time to Main structure
+    BLEMsg_info_bp.date_time.hour = DateTime_info_bp.hour;
+    BLEMsg_info_bp.date_time.mins = DateTime_info_bp.mins;
+    BLEMsg_info_bp.date_time.sec = DateTime_info_bp.sec;
+    
+    BLEMsg_info_bp.date_time.date = DateTime_info_bp.date ;
+    BLEMsg_info_bp.date_time.month = DateTime_info_bp.month ;
+    BLEMsg_info_bp.date_time.year =  DateTime_info_bp.year ;
+    
+    
+    //Checking if the structure has these values    
+    bpr.printf("Time 2 is %d:%d:%d\n", DateTime_info_bp.hour, DateTime_info_bp.mins, DateTime_info_bp.sec);
+    bpr.printf("\t Date is %d:%d:%d\n",DateTime_info_bp.date, DateTime_info_bp.month, DateTime_info_bp.year);
+    
+    
+    //Loading values to of Test type
+    test_type_info test_type_info_bp;  // copy of " test_type_info" created  
+    test_type_info_bp = BP_Test;       // Loaded value 00 to the test type 
+    
+    BLEMsg_info_bp.test_type = test_type_info_bp;
+    //Check if 00 is getting printed
+    bpr.printf("Test Type is : %d\n", test_type_info_bp);
+    
+    
+    // Loading values of Length ,  PID, DID, sampling frequency, number of samples, calculated data.
+    BLEMsg_info_bp.device_id = 01;                   // Device ID fixed
+    BLEMsg_info_bp.patient_id = (uint32_t)pid;       // Patient ID
+    BLEMsg_info_bp.sampling_freq = 500;              // sampling frrquency
+    BLEMsg_info_bp.length = 10774;                   //Total length of data in bytes  22 B+10752 B
+    
+    /*
+    //Loading number of samples
+    NumSamples_info NumSamples_info_bp;              //Copy of structure NumSamples_info
+    NumSamples_info_bp.num_ppg_sample = 1664;        // PPG & ECG Sample number loaded in structure copy
+    NumSamples_info_bp.num_ecg_sample = 1024;
+    */
+    
+    BLEMsg_info_bp.num_samples.num_sample_ppg_dummy =  1664 ;// PPG  number of samples copied to master struct 
+    BLEMsg_info_bp.num_samples.num_sample_ecg_OTtyp =  1024 ; // ECG  number of samples copied to master struct
+    
+    
+      
+    
 
     // Variables for file operations
    // uint32_t amax=0;
@@ -253,7 +130,7 @@
    //int bloc = 0;
    //int samples = 0;
 
-    bc.baud(baud_rate);
+    bpr.baud(baud_rate);
 
     freqset();               // setting the frequency
     setupfunc();              
@@ -279,48 +156,52 @@
             
     }   
 
-
+    sd_open_BPfilee(pid);
     sd_open_BP_ECGfile(pid) ; //   sd_open_BP_ECGfile(123) draft file for testing
     sd_open_BP_PPGfile(pid) ; // sd_open_BP_PPGfile(123) draft file for testing
 
     FILE *ecg = NULL;
     FILE *ppg = NULL;
-    int *drum_ecg = NULL; // pointers to ecg buffer
+    uint32_t *drum_ecg = NULL; // pointers to ecg buffer  changed to uint32_t from int
     uint32_t *drum_ppg = NULL; // pointer to ppg buffer
     
     drum_ecg = drum11;
     drum_ppg = drum21;
     
-    for(int j =0 ; j<16; j++) // changed to 16 from 8
+    for(int j =0 ; j<1; j++) // changed to 16 from 8 // Change by Nidhin 30/5/2017 Direct writing to SD card. no loop required
     {
-        for(int i=0; i<64; i++)
+        for(int i=0; i<1024; i++)
         {
             concatenate_value2 = readvalue();
-            drum11[i]=concatenate_value2;   //drum11[i]=concatenate_value2;      drum11[i]=dummyconcat;
-         
+            //drum11[i]=(uint32_t)concatenate_value2;   //drum11[i]=concatenate_value2;      drum11[i]=dummyconcat; typecasted to uint32_t
+            //Change by Nidhin 30/5/2017 Direct writing to SD card.
+            ecg = sd_BP_ecgwrite(drum_ecg);
+            
             maxim_max30102_read_reg(0,&uch_dummy);
             while(INTR.read()==1); 
             maxim_max30102_read_fifo(&ppgdata); 
-            drum21[i]=ppgdata;    
+            ppg = sd_BP_ppgwrite(&ppgdata); //Change by Nidhin 30/5/2017 Direct writing to SD card.
+            //drum21[i]=ppgdata;            //Change by Nidhin 30/5/2017 Direct writing to SD card.
         }
                            
-            ecg = sd_BP_ecgwrite(drum_ecg); //
-            ppg = sd_BP_ppgwrite(drum_ppg);
+            //ecg = sd_BP_ecgwrite(drum_ecg); // //Change by Nidhin 30/5/2017 Direct writing to SD card.
+            //ppg = sd_BP_ppgwrite(drum_ppg); // //Change by Nidhin 30/5/2017 Direct writing to SD card.
         
         
     } 
     
-    for(int j =0 ; j<10; j++) // changed to 16 from 8
+    for(int j =0 ; j<1; j++) // changed to 16 from 8
     {
-        for(int i=0; i<64; i++)
+        for(int i=0; i<640; i++)
         {
             maxim_max30102_read_reg(0,&uch_dummy);
             while(INTR.read()==1); 
             maxim_max30102_read_fifo(&ppgdata); 
-            drum21[i]=ppgdata; 
+            //drum21[i]=ppgdata; 
+            ppg = sd_BP_ppgwrite (&ppgdata);         //Change by Nidhin 30/5/2017 Direct writing to SD card.
         }
         
-         ppg = sd_BP_ppgwrite (drum_ppg);
+         
         
      }  
     fclose(ecg);
@@ -355,8 +236,24 @@
     SBP = 0.0508955*PWV+62.559;
     DBP = (0.0494*PWV + 17.480)+10;
     
+    /*
+    //Copying to Structure starts
+    CalData_info CalData_info_bp;
+    CalData_info_bp.cal_sbp = (uint16_t) SBP;
+    CalData_info_bp.cal_dbp = (uint16_t) DBP; NOT REQUIRED
+    */
+    
+    BLEMsg_info_bp.cal_data.cal_sbp_dummy = (uint16_t) SBP;
+    BLEMsg_info_bp.cal_data.cal_dbp_OTtyp = (uint16_t) DBP;
+    
+    
+    
+    create_single_BPfile(pid);                          // Copy ECG and PPG data to BP file
+    structure_file(ptr_BLEMsg_info_bp, pid);            // Copy BP structure to main file
+    bpfile_mainfile(pid);
+    
     screen_bp1(SBP,DBP);
     
-    create_single_BPfile(pid);
- 
- }
\ No newline at end of file
+    // Only for testing
+ }
+ 
\ No newline at end of file