Updated with option to return from BP screen to main screen, resolved screen navigation issues

Dependencies:   SDFileSystem TFTLCD_8bit ds3231 program mbed

Fork of poc_dis_5 by SenseSemi

Revision:
3:9a06c2bed650
Parent:
1:8316c23ec6b9
Child:
4:6bd81bb1790d
--- a/ecgg.cpp	Mon Jan 30 10:57:38 2017 +0000
+++ b/ecgg.cpp	Fri Feb 10 10:39:13 2017 +0000
@@ -4,7 +4,6 @@
  */
  
 #include "mbed.h"
-//#include "timer.h"
 #include <string.h>
 #include <stdio.h>
 #include "ds3231.h"
@@ -12,434 +11,37 @@
 #include "ecg_dec.h"
 #include "rtc.h"
 #include "sdcard.h"
-//#include "rtos.h"
-
-//SPI SETTINGS
-#define baud_rate 115200
-#define freq 1000000
-#define bits 8 
-#define mode 1 
-#define loop 1000000 
-
-//PIN DECLARATIONS
-Serial pc(USBTX,USBRX);
-DigitalIn DRDY_BAR(PTC8);
-DigitalOut CHIPSEL_BAR(PTD0);
-DigitalOut ADS_START(PTC16);
-DigitalOut RESET_BAR(PTC17);
-
-//FILE *fp = NULL;
-
-
-//unsigned char chk2= 0;
-float value = 0;
-unsigned int value1 = 0;
-unsigned int value2 = 0;
-unsigned int value3 = 0;
-unsigned int value4 = 0;
-unsigned int value5 = 0;
-unsigned int value6 = 0;
-unsigned int data1 = 0;
-unsigned int count = 0;
-
-//static int32_t ecg_x[500];
-SPI mySpi(PIN_MOSI, PIN_MISO, PIN_SCLK) ; /* SPI is the spi function written in mbed and mySpi is the instance name*/
-
-typedef void (*func_ptr)(void) ; /*creates typedef to function pointer, does not take any arguement and returns void*/
-
-void doHelp(void) ;
-void doStatus(void) ;
-void doFreq(void) ;
-void doMode(void) ;
-void doBit(void) ;
-void doWrite(void) ;
-void doWrite2(void) ;
-void doRead(void) ;
-void doLoop(void) ;
-void setup(void);
-void testsetup(void);
-void ecgsetup(void);
-void regWrite(int,int);
-void cmdWrite(int);
-void regRead(int);
-void lpf_coef(void);
-float lpf( float coeff[5], float);
-void drdy_int(void);
-/*FILE *sd_openfile(char *buf);
-void sd_write (FILE *n,int value);
-void sd_close(FILE *n);
-time_t rtc_read();*/
-
-typedef struct _cmd_func {
-    char *name ;
-    func_ptr func ;
-} cmd_func_type ;
+#include "ec_bp.h"
+Serial pc(USBTX,USBRX);  
 
-cmd_func_type cmd_list[] = {   /*"cmd_func_type cmd_list[]" is same as "struct cmd_list[]"*/
-    {"help", doHelp},
-    {"status", doStatus},
-    {"freq", doFreq},
-    {"mode", doMode},
-    {"bit",  doBit},
-    {"write", doWrite},
-    {"read",  doRead},
-    {"loop", doLoop},
-    { 0, 0 }
-} ;
-
-func_ptr getFunc(char *cmd)  /*here "func_ptr is same as void*/
-{
-    int i = 0 ;
-    while(cmd_list[i].name != 0) {
-        if (strcmp(cmd, cmd_list[i].name) == 0) {
-            return(cmd_list[i].func) ; ;
-        }
-        i++ ;
-    }
-    return(0) ;
-}
-
-void doHello()
-{
-    printf("=== spi test program ===\n\r") ;
-    printf("please set your terminal program\n\r") ;
-    printf("local echo on\n\r") ;
-    printf("\n\r") ; 
-}
-    
-int ecg(int pid) {
- //time_t epoch_time;
-  //int fp;
- int concatenate_value = 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];
-  count = 0; int32_t fs = 500; int32_t w=0,w1=0;
-Timer t;
-   unsigned char chk = 1;
-    pc.baud(baud_rate);
-    mySpi.frequency(freq) ;
-    mySpi.format(bits, mode) ; 
-  //  Ds3231 rtc(PTC11, PTC10); //sda,scl2yy
-   
-    
-
-   //Initialize ADS1291   
-    setup() ;  
-    
-    //Put device back in RDATAC mode
-    cmdWrite(CMD_RDATAC) ;
-//   printf("The device is in RDATAC mode\n");
-//Activate conversion, At this point DRDY should toggle
-    ADS_START = 1;
-     
-  //    printf( "ADC noise data is= \n");
-   for(int i=0;i<N_ERR;i++)
-     {
-     while(DRDY_BAR);
-    doWrite() ;
-    //printf( "ADC status is= %X %X %X\n", value1,value2,value3);
-    concatenate_value = ((value4<< LSHIFT_16)|(value5 <<LSHIFT_8) |(value6));
- //   printf( "%X\n", concatenate_value);
-    }
 
 
-   /*testsetup();    // To set the ADS1291 registers for internal test signal generation
-    wait(0.2);
-    cmdWrite(CMD_RDATAC) ;
-    //printf("The device is in RDATAC mode\n");
-   // printf("Test data is\n");
-    ADS_START = 1;
-     //printf("Test data is\n");
-     sd_open_file();
-    
-    for(int j=0;j<N_TEST;j++)
-    {
-    while(DRDY_BAR);
-    doWrite() ;
-    concatenate_value = ((value4<< LSHIFT_16)|(value5 <<LSHIFT_8) |(value6));
-   
-    sd_write(concatenate_value);
-   pc.printf("%d\n",concatenate_value);
- // fprintf(fp,"%d\n",concatenate_value) ;
-  }
-  sd_close();*/
-  
- ecgsetup();   // To set the ADS1291 registers for ECG signal generation
-//  printf("\n Reading****");
-    //DRDY_BAR1.enable_irq();
-   cmdWrite(CMD_RDATAC) ;
-//    printf("The device is in RDATAC mode\n");
-    ADS_START = 1;
-    chk = 1;
-    t.start();
-   sd_open_ECGfile(pid);
-    for(int i=0; i<N_ECG; i++)
-    {
-    while(DRDY_BAR);
-    doWrite() ;
-    concatenate_value = ((value4<< 16)|(value5 <<8) |(value6));
-    sd_write(concatenate_value);
-    //printf( "%d\n", concatenate_value);
-    }
-   sd_close();
-   t.stop();
-   printf( "%f\n", t.read());
- /* 
-  // remove DC of ecg signal    
-  uint32_t  ecg_mean=0, buf_length = 500; 
- printf("DC removed\ ECG Data\n");
-  for (int k=0 ; k<buf_length ; k++ ) 
-        {ecg_mean = ecg_mean+ ecg_buf[k] ;
-       ///  printf("ecg_mean is %d\n",ecg_mean);
-         }
-   ecg_mean =ecg_mean/buf_length ;
-    //printf("ecg_mean is %d\n",ecg_mean);
-    for (k=0 ; k<buf_length ; k++ )  
-    {
-        ecg_x[k] =  ecg_buf[k] - ecg_mean ; 
-        printf("%d\n",(ecg_x[k]));
-  }
-  */
- // 4 pt Moving Average
- /*printf("Averaged ECG Data\n");
-    for(int k=0; k<N_ECG; k++)
-    {
- //     sample_sum= ( ecg_x[k]+ecg_x[k+1]+ ecg_x[k+2]+ ecg_x[k+3]);
-        sample_sum= ( ecg_buf[k]+ecg_buf[k+1]+ ecg_buf[k+2]+ ecg_buf[k+3]);
-        ecg_buf[k]=  sample_sum/(int32_t)4; 
-      
-//        printf("%d\n",(ecg_buf[k]));
-    }
-    
-    // Derivative filtering of the averaged ECG signal
-//    printf("Derivative filtered ECG Data\n");
-    ecg_der[0]=0;
-    for(int k=0; k<N_ECG-3; k++)
-    {
-        w1= (fs*(ecg_buf[k+1]-ecg_buf[k]));
-        //w1=1;
-      //  w=0.995;
-      //  ecg_der[k]=(w+w1);
-        w=(1*ecg_der[k]); 
-        ecg_der[k+1]=(w1+w);
-         // printf("ecg_der[k+1]=%d\n",(ecg_der[k+1]));
-      //  printf("w=%f\n", w);
-      //  printf("w1=%f\n", w1);
- //       printf("%d\n",(ecg_der[k]));
-        //printf("k=%d\n", k);
-    }*/
- }    // End of main function
-
-//for initial configurations
-void setup()
-{
-   //initially make all inputs low until power is up and stabilized
-    CHIPSEL_BAR = 0;
-    ADS_START = 0;
-    RESET_BAR = 0;
-    //wait for oscillator to wake up
-    wait(1);     
-    
-    CHIPSEL_BAR = 1;
-    RESET_BAR = 1; //wait for tpor time
-    //wait for power on reset
-    wait(1);
-    RESET_BAR = 0; // send a reset pulse and wait for t_reset amount of time
-    wait(1);
-    RESET_BAR = 1;//release the reset
-    //Wait for 18 tclks = 36 us
-    wait_us(36);
-    
-    //Device wakes up in RDATAC mode so send SDATAC command to write to registers
-    cmdWrite(CMD_SDATAC) ;
-//    printf("Device is in SDATAC mode\n");
-    
-    regRead(REG_ID);
-    printf("DEVICE ID register read from ADS is= 0x%X\n",data1);
-    wait(1);
-    
-    //Since we are using internal 2.42V reference and enable clock on the CLK PIN
-    //Write 0xA8 to CONFIG2 register
-    regWrite(REG_CONFIG2,no_mode);
-       
-    //Set continuous sampling mode, 500 SPS
-    regWrite(REG_CONFIG1,sps500);
-        
-    //PGA Gain = 6, inputs shorted for noise measurements
-    regWrite(REG_CH1SET, offset_meas);
-    
-    //read data from CONFIG2 register
-    regRead(REG_CONFIG2);
-//    printf("REG_CONFIG2 register read from ADS for initial setup is= 0x%X\n",data1);
-    
-    //read data from CONFIG1 register
-    regRead(REG_CONFIG1);
-//    printf("REG_CONFIG1 register read from ADS for initial setup is= 0x%X\n",data1);
-    
-    //read data from CONFIG1 register
-    regRead(REG_CH1SET);
-//    printf("REG_CH1SET register read from ADS for initial setup is= 0x%X\n",data1);
-}   
+int ecg(int pid) 
+ {
 
-void testsetup()
-{
- //Send SDATAC command to write to registers to set test signals 
-    cmdWrite(CMD_SDATAC) ;
-    printf("Device is in SDATAC mode\n");
-            
-    //Since we are using internal 2.42V reference and enable clock on the CLK PIN
-    //Write 0xA3 to CONFIG2 register to set test signal and its freq = 1Hz
-    regWrite(REG_CONFIG2,test_mode);
-       
-    //PGA Gain = 6, test signal selected
-    regWrite(REG_CH1SET, test_inp);
-    
-    //read data from CONFIG2 register
-    regRead(REG_CONFIG2);
-   printf("REG_CONFIG2 register read from ADS for test signal setup is= 0x%X\n",data1);
-    
-    //read data from CONFIG1 register
-    regRead(REG_CH1SET);
-   printf("REG_CH1SET register read from ADS for test signal setup is= 0x%X\n",data1);  
-}
-
-void ecgsetup()
-{
-cmdWrite(CMD_SDATAC) ; //Set to SDATAC mode to set CH1SET register
-
-regWrite(REG_CONFIG1,sps500);
-regWrite(REG_CONFIG2, default_mode);//put INT_TEST and TEST_FREQ bits to default mode(set those bits to '0')
-regWrite(REG_LOFF, loff_conf);
-regWrite(REG_CH1SET, elec_inp);// Set to read normal electrode input
-regWrite(REG_RLD_SENS, rld_sens_sig);//Set RLD_SENS
-regWrite(REG_LOFF_SENS, loff_sens_sig);//Set LOFF_SENS
-regWrite(REG_MISC1, misc1_inp );//Set RESP1
-regWrite(REG_MISC2, misc2_inp );//Set RESP2
-//printf("connect ECG leads\n");
-wait(0.5);
-regRead(REG_LOFF_STAT);//Read LOFF_STAT register
-printf("REG_LOFF_STAT register read from ADS for ecg setup is= 0x%X\n",data1); 
-}
-
-void doHelp(void) 
-{
-    printf("=== spi test ===\n\r") ;
-    printf("commands available\n\r") ;
-    printf("help\n\r") ;
-    printf("status\n\r") ;
-    printf("freq freq_in_hz\n\r") ;
-    printf("mode (0 | 1 | 2 | 3)\n\r") ;
-    printf("bit (4 - 16)\n\r") ;
-    printf("write value\n\r") ;
-    printf("read\n\r") ;
-    printf("loop number (set repeat number for read/write)\n\r") ;
-}
-
-void doStatus(void)
-{
-    printf("=== Status Report ===\n\r") ;
-    printf("bits: %d\n\r", bits) ;
-    printf("mode: %d\n\r", mode) ;
-    printf("freq: %d Hz\n\r", freq) ;
-    printf("loop: %d\n\r", loop) ;
-}
-
-void doFreq(void)
-{
-  //  int freq = 0 ;
-   // scanf("%d", &freq) ;
-    printf("setting frequency to %d\n\r", freq) ;
-    mySpi.frequency(freq) ;
-}
-
-void doMode(void)
-{
-    //scanf("%d", &mode) ;
-    printf("setting format(%d, %d)\n\r",bits, mode) ;
-    mySpi.format(bits, mode) ;       
-}
-
-void doBit(void) 
-{
-   // scanf("%d", &bits) ;
-    printf("setting format(%d, %d)\n\r",bits, mode) ;
-    mySpi.format(bits, mode) ;
-}
-
-void doWrite(void) 
-{    
-       
-     //DRDY_BAR1.disable_irq();
-      
-        CHIPSEL_BAR = 0;
-       // int freq1 = 50000;
-       // mySpi.frequency(freq1) ;
-        value1 =  mySpi.write(0x00);
-        value2 =  mySpi.write(0x00);
-        value3 =  mySpi.write(0x00);
-        value4 =  mySpi.write(0x00);
-        value5 =  mySpi.write(0x00);
-        value6 =  mySpi.write(0x00);
-      
-        CHIPSEL_BAR = 0;    
-        //DRDY_BAR1.enable_irq();
-}
-
-void doRead(void) 
-{
-    int dummy = 0 ;
+    int concatenate_value2 = 0;
+    int32_t sample_sum; // static int32_t avg[1500];
+    int32_t count = 0; int32_t fs = 500; int32_t w=0,w1=0;
+    Timer t;
+    unsigned char chk = 1;
+    pc.baud(baud_rate);
+    freqset(); 
+    setupfunc();
+    ecgsetupfunc();
+    chk = 1;
+   // t.start();
+   sd_open_ECGfile(pid);
    
-    while(!DRDY_BAR)
-    ADS_START = 0;
-    
-        value = mySpi.write(dummy) ;
-         
-}
-
-void doLoop(void)
-{
-   // scanf("%d", &loop) ;
-    printf("repeat number has been set to %d\n\r", loop) ;
-}
-
-void cmdWrite(int data) 
-{
-         CHIPSEL_BAR = 0;
-         mySpi.write(data) ;
-         wait_ms(1);
-         CHIPSEL_BAR = 1;  
-}
-
-void regWrite(int address, int data) 
-{
-    int data_to_send = CMD_WREG << 5;
-    data_to_send = data_to_send | address;
-         CHIPSEL_BAR = 0;
-         mySpi.write(data_to_send);
-         wait_ms(1);
-         mySpi.write(0x00) ;
-         wait_ms(1);
-         mySpi.write(data) ;
-         wait_ms(1);
-         CHIPSEL_BAR = 1;  
-}
-
-void regRead(int address)
-{
-    int data_to_receive = CMD_RREG << 5;
-    data_to_receive = data_to_receive | address;
-         CHIPSEL_BAR = 0;
-         mySpi.write(data_to_receive);
-         wait_ms(1);
-         mySpi.write(0x00) ;
-         wait_ms(1);
-         data1 = mySpi.write(0x00) ;
-                  
-         //printf("DEVICE ID register read from ADS is= 0x%X\n",data1);
-         
-         //wait_ms(1);
-         CHIPSEL_BAR = 1;       
-}
\ No newline at end of file
+ for(int i=0; i<N_ECG; i++)
+   {
+     concatenate_value2= readvalue();
+     sd_write(concatenate_value2);
+     pc.printf( "%d\n", concatenate_value2);
+   } 
+   
+   sd_close();
+  // t.stop();
+  // printf( "%f\n", t.read());
+ 
+ 
+ }    // End of main function