export test

Dependencies:   SDFileSystem ds3231 eeprom_Nikita mbed testUniGraphic_150217

Fork of Int_Demo_09May2017_Suhasini_HRavg_Nikita_ili9341 by nikita teggi

Revision:
22:ffa88619551d
Parent:
19:1650bbc923cc
Child:
24:d992ee8369f4
--- a/bt.cpp	Wed Jun 21 08:39:10 2017 +0000
+++ b/bt.cpp	Fri Jun 23 07:25:24 2017 +0000
@@ -1,23 +1,39 @@
+// added newline, changed the sequence of cmd and length, added send last function
+
+
+
+
+
 #include "mbed.h"
 #include "sdcard.h"
 #include "struct.h"
+#define ACK 0x00                 /// changed //16/06 #define all the values removing structure 
+#define start_of_file 0x01
+#define end_of_file 0x02
+#define data_trfr 0x03
+#define NACK 0xFF
+#define sos 0xc0
+#define eos 0xc0
+//#define len 6000
 
-BLEMsg_info *bt_file;              //pointer to structure 
-Point *myBleMsg;                   // pointer to bluetooth structure
+
+
+BLEMsg_info *bt_file;
+Point *myBleMsg;
 //bt_st *as;
-Serial mc(USBTX,USBRX);            // serial terminal
-Serial blue(PTC4,PTC3);            // bluetooth serial terminal
-                  
+Serial mc(USBTX,USBRX);
+Serial blue(PTC4,PTC3);
+                 // buffer for data
 uint32_t total_samples=0;              // variable to hold total number of samples
 //Timer t;                               // timer 
 uint8_t ack_rx;                        // varibale to receive ack from the bluetooth 
 Point b;                               // structure copy
 BLEMsg_info bt_file1;                  // structure copy
-
-uint32_t total_file_size=0;             // to determine the size of the file 
-uint32_t total_file_read=0; 
+uint32_t counter=0;
+ uint32_t total_file_size=0;        // to determine the size of the file 
+ uint32_t total_file_read=0; 
                   
-uint32_t file_start=0;                   // variable for 'for loop'
+uint32_t file_start=0;           // variable for 'for loop'
 uint32_t j=0;
 uint8_t k=0; 
 uint32_t file_pointer_position=0;
@@ -27,10 +43,11 @@
 
 uint8_t bt_send(uint8_t state_tx)
 {
-  uint32_t v1[150]; 
-  blue.baud(115200);                  // baud rate of bluetooth
+  uint32_t v1[1500];    
+  mc.baud(115200);                  // baud rate of bluetooth
   bt_file=&bt_file1;                      
   myBleMsg=&b; 
+  int8_t check_sum=0;
   static  uint8_t state_rx =0;
 //t.start();                             // timer start
   
@@ -39,9 +56,10 @@
           {
  
        case 1:   sendinit();  
-                 sd_open_read(1);                       // open the file for read
+                  mc.printf("\n");
+                 sd_open_read(66029);                       // open the file for read
                  total_file_size=file_size() ;             // determined the file size  
-                // mc.printf("filesize=%d",total_file_size);              
+              //   mc.printf("filesize=%d",total_file_size);                // TO SEND INITIAL STRING
                  state_rx =1;
                  state_tx =0;                
                  break;
@@ -50,72 +68,84 @@
        case 2:   total_samples=0;   
                  sd_read1(bt_file1);               // read the sd card file
                  myBleMsg->bt_msg=bt_file1;         //copy the contents to the structure
-                 send();                             // send the structure
-                 total_samples= myBleMsg->bt_msg.num_samples.num_sample_ppg_dummy+myBleMsg->bt_msg.num_samples.num_sample_ecg_OTtyp;
+                 send();                                // send the initial string
+                 mc.printf("\n");                       
+                 total_samples= myBleMsg->bt_msg.num_samples. num_sample_ppg_dummy+myBleMsg->bt_msg.num_samples.num_sample_ecg_OTtyp;
+                 
                  state_tx =0;
                  state_rx =2;
                  k=0;
-                 mc.printf("samples=%d", total_samples);
-                 total_file_read=file_size1();         // read the file size
+                // mc.printf("samples=%d", total_samples);
+                 total_file_read=file_size1();
                  //mc.printf("fileread=%d",total_file_read);
                  //mc.printf("pointer=%d\n",file_pointer_position);
                  break;                 
  
  
-       case 3:      
+       case 3:      counter=0;
                  //mc.printf("kkkk=%d\n",k);     
-                 //mc.printf("samples=%d", total_samples);            // send the raw data
-                if(k<(total_samples/150))
+                 //mc.printf("samples=%d", total_samples);         // send the raw data
+                if(k<(total_samples/1500))
                   {
-                    sd_read(v1,150);                                  //read 1500 samples
-                    send_data_str1();                                 // send the initial structure
-                    //mc.printf("file_start,j=%d %d\n",file_start,j);                     
-                      for(file_start=j;file_start<(j+150);file_start++)
+                    sd_read(v1,1500);      
+                     counter=j+1500;               //read 1500 samples
+                    send_data_str1(); 
+                   
+                    //mc.printf("file_start,j=%d %d\n",file_start,j);                    //send the strt of the string 
+                      for(file_start=j;file_start<(j+1500);file_start++)
                          {     
                        
-                             blue.printf("%08x", v1[file_start]);
-                            
+                             mc.printf("%08x", v1[file_start]);
+                           // counter++;
                          }
+                         
+                         
+                          check_sum=checksum(v1);               // calculating checksum
+                         
                             //  blue.printf("\n");
                        // mc.printf("iiii,hjjjj=%d %d\n",file_start,j);   
                     state_tx =0;
                     state_rx =3;
-                    send_data_str2();
+                    send_data_str2(check_sum);
                   
                    }
                
                else 
                      {
-                        for(int l=0;l<150;l++)
+                        for(int l=0;l<1500;l++)
                           {    
                             v1[l]=NULL;
                            }
-                        
+                            counter=(total_samples-(1500*k));
                            send_data_str1();
-                           sd_read(v1,(total_samples-(150*k)));
-                        for(file_start=j;file_start<(total_samples-(150*k));file_start++)
+                           sd_read(v1,(total_samples-(1500*k)));
+                        for(file_start=j;file_start<(total_samples-(1500*k));file_start++)
                           {     
-                             blue.printf("%08x", v1[file_start]);
+                             mc.printf("%08x", v1[file_start]);
+                             //counter++;
                            }
                            
                           // blue.printf("\n");
                           state_tx=0;
                           state_rx=4;
-                          send_data_str2();
+                          send_data_str2(check_sum);
                     }   
                      
                        total_file_read=file_size1();
+                        mc.printf("\n"); 
                    //   mc.printf("fileread=%d",total_file_read );
                       //  mc.printf("pointer=%d\n",file_pointer_position);
                 break;        
                
          
         case 4:   total_file_read=file_size1();
-                  mc.printf("fileread=%d",total_file_read);
+                 // mc.printf("fileread=%d",total_file_read);
                  if(total_file_read==total_file_size)
                      {
                     
                         state_rx=6;
+                        sendlast();
+                        mc.printf("\n"); 
                         sd_close();
                       //  mc.printf("exit");
                      }
@@ -147,25 +177,29 @@
             
 Timer t;                               // timer 
 uint8_t ack_rx;                        // varibale to receive ack from the bluetooth 
-//Point b;                               // structure copy                     
-//myBleMsg=&b;
+Point b;                               // structure copy                     
+myBleMsg=&b;
 t.start();                             // timer start
+int x2=0;
+int x3=0;
+int x4=0;
+int x5=0;
 
      switch(state_rx)
          {
                 
           case 1:                                       // wait for the ack
-                      state_rx=0; 
+                      state_rx=0;
                       myBleMsg->proto=ACK;
-                      scanf("%02x",&ack_rx);            // read the ack/nack from serial terminal
-                      mc.printf("%02x",ack_rx);         
-                   if (ack_rx==myBleMsg->proto)         // check for ack
+                    mc.scanf("%02x%02x%08x%02x",&x2,&ack_rx,&x3,&x4);
+                //  mc.printf("%02x%02x",ack_rx, x2); 
+                   if (ack_rx==myBleMsg->proto)
                      {
                        
                        state_tx=2;
                       }
                     
-                    else                                // its a nack
+                    else 
                     
                       { 
                        
@@ -177,7 +211,7 @@
          case 2:      state_rx =0;                        //wait for the ack
                       myBleMsg->proto=ACK;
                 
-                      scanf("%02x", &ack_rx);
+                       mc.scanf("%02x%02x%08x%02x",&x2,&ack_rx,&x3,&x4);
                      if (ack_rx==myBleMsg->proto)
                         {
                 
@@ -190,7 +224,7 @@
                         { 
                       
                         state_tx=2;
-                        setpos1(file_pointer_position);          // set the file pointer to send the previous data
+                        setpos1(file_pointer_position);
                      //   mc.printf("pointer=%d\n",file_pointer_position);
                         }
             
@@ -200,7 +234,7 @@
      case 3:       
                    state_rx =0;
                    myBleMsg->proto=ACK;
-                   scanf("%02x", &ack_rx);
+                  mc.scanf("%02x%02x%08x%02x",&x2,&ack_rx,&x3,&x4);
                  if (ack_rx==myBleMsg->proto)
                       {
                      
@@ -215,8 +249,9 @@
                        
                         state_tx=3;
                       //  mc.printf("j=%d\n",j);
-                        file_start=file_start-150;
-                        //mc.printf("j=%d\n",j); 
+                        file_start=file_start-1500;
+                        //mc.printf("j=%d\n",j);
+                      //  
                        // mc.printf("file_pointer_position=%d\n",file_pointer_position);
                         setpos1(file_pointer_position);
                       }
@@ -226,7 +261,7 @@
      case 4:       
                    state_rx =0;
                    myBleMsg->proto=ACK;
-                   scanf("%02x", &ack_rx);
+                    mc.scanf("%02x%02x%08x%02x",&x2,&ack_rx,&x3,&x4);
                    if (ack_rx==myBleMsg->proto)
                       {
                        // bt_r.printf("sent");
@@ -240,16 +275,19 @@
                       { 
                         //bt_r.printf("no-ack");
                         state_tx=3;
-                        file_start=file_start-150;
-                        mc.printf("file_pointer_position=%d\n",file_pointer_position);
+                        file_start=file_start-1500;
+                       // mc.printf("file_pointer_position=%d\n",file_pointer_position);
                         setpos1(file_pointer_position);
                       } 
                    break;                
                  
       case 5:      state_tx=2;
+                   
                    break;
                    
       case 6:      state_tx=0;
+                   
+      
                    mc.printf("out");
                    break;
    
@@ -270,13 +308,12 @@
              
 void send()
 {
-                myBleMsg->start_end_of_string=sos;
-                myBleMsg->length_file=28;
-                myBleMsg->proto=start_of_file;
-                myBleMsg->chk_sum=32;
-                mc.printf("%02x",myBleMsg->start_end_of_string); 
-                mc.printf("%08x",myBleMsg->length_file);
+                myBleMsg->start_of_string=sos;
+                myBleMsg->length_file=26;
+                myBleMsg->proto=data_trfr;                      // data transfer mode
+                mc.printf("%02x",myBleMsg->start_of_string); 
                 mc.printf("%02x",myBleMsg->proto);
+                mc.printf("%08x",myBleMsg->length_file);      //changed the sequence 
                 mc.printf("%08x",myBleMsg->bt_msg.length); 
                 mc.printf("%02x",myBleMsg->bt_msg.device_id); 
                 mc.printf("%08x",myBleMsg->bt_msg.patient_id);    
@@ -292,50 +329,119 @@
                 mc.printf("%04x",myBleMsg->bt_msg.num_samples.num_sample_ecg_OTtyp); 
                 mc.printf("%04x",myBleMsg->bt_msg.cal_data.cal_sbp_dummy);   
                 mc.printf("%04x",myBleMsg->bt_msg.cal_data.cal_dbp_OTtyp);   
-                myBleMsg->start_end_of_string=eos;  
-                mc.printf("%02x",myBleMsg->start_end_of_string);
+                myBleMsg->end_of_string=eos;  
+                myBleMsg->chk_sum=checksum_struct();
+                mc.printf("%02x",myBleMsg->end_of_string);
                 mc.printf("%02x",myBleMsg->chk_sum);
     
     }
     
 void sendinit()
-{
-                myBleMsg->start_end_of_string=sos;
-                myBleMsg->length_file=3;
+{              
+
+                uint8_t sum_init=0  ;               
+                myBleMsg->start_of_string=sos;
+                myBleMsg->length_file=0;
                 myBleMsg->proto=start_of_file;
                //  myBleMsg->bt_msg=NULL;
-                myBleMsg->chk_sum=3;
-                mc.printf("%02x",myBleMsg->start_end_of_string); 
-                mc.printf("%08x",myBleMsg->length_file);
-                mc.printf("%02x",myBleMsg->proto);
-                myBleMsg->start_end_of_string=eos;  
-                mc.printf("%02x",myBleMsg->start_end_of_string);
+                sum_init=checksum_init();
+                myBleMsg->chk_sum=sum_init;
+                mc.printf("%02x",myBleMsg->start_of_string);
+                mc.printf("%02x",myBleMsg->proto); 
+                mc.printf("%08x",myBleMsg->length_file);     // chnged
+                myBleMsg->end_of_string=eos;  
+                mc.printf("%02x",myBleMsg->end_of_string);
                 mc.printf("%02x",myBleMsg->chk_sum);
     
     }
+  
+   
+uint8_t checksum_init()
+ {
+  
+  uint32_t sum=0;
+  uint8_t chksum_init=0;
+  sum=sos+eos+start_of_file; 
+  chksum_init=sum & 0x000000FF;
+  return chksum_init;
+  }
+
+uint8_t checksum_last()
+ {
+  
+  uint32_t sum=0;
+  uint8_t chksum_last=0;
+  sum=sos+eos+end_of_file; // changed //16/06 #define all the values removing structure 
+  chksum_last=sum & 0x000000FF;
+  return chksum_last;
+  }    
+    
+ void sendlast()
+{
+                uint8_t sum_last=0;
+                myBleMsg->start_of_string=sos;
+                myBleMsg->length_file=0;
+                myBleMsg->proto=end_of_file;
+               //  myBleMsg->bt_msg=NULL;
+                sum_last=checksum_last();
+                myBleMsg->chk_sum=sum_last;
+                mc.printf("%02x",myBleMsg->start_of_string);
+                mc.printf("%02x",myBleMsg->proto); 
+                mc.printf("%08x",myBleMsg->length_file);     // chnged
+                myBleMsg->end_of_string=eos;  
+                mc.printf("%02x",myBleMsg->end_of_string);
+                mc.printf("%02x",myBleMsg->chk_sum);
+    
+    }
+       
+ void send_data_str1()
+   {
+                 myBleMsg->start_of_string=sos;
+                 myBleMsg->length_file=(counter*4);
+                 myBleMsg->proto=data_trfr;
+                 mc.printf("%02x",myBleMsg->start_of_string); 
+                 mc.printf("%02x",myBleMsg->proto);                   // chnaged
+                 mc.printf("%08x",myBleMsg->length_file);
+               
+    }
     
     
     
- void send_data_str1()
-   {
-                 myBleMsg->start_end_of_string=sos;
-                 myBleMsg->length_file=3;
-                 myBleMsg->proto=start_of_file;
-                 mc.printf("%02x",myBleMsg->start_end_of_string); 
-                 mc.printf("%08x",myBleMsg->length_file);
-                 mc.printf("%02x",myBleMsg->proto);
-    }
-    
-    
-    
- void send_data_str2()
+ void send_data_str2(uint8_t check_sum)
     {          
-                myBleMsg->chk_sum=3;
-                myBleMsg->start_end_of_string=eos;  
-                mc.printf("%02x",myBleMsg->start_end_of_string);
+                myBleMsg->chk_sum=check_sum;
+                myBleMsg->end_of_string=eos;  
+                mc.printf("%02x",myBleMsg->end_of_string);
                 mc.printf("%02x",myBleMsg->chk_sum);
     }
     
+uint8_t checksum(uint32_t  *v1)
+{
+
+uint32_t sum=0;
+uint8_t chksum_datatrfr=0;
+ 
+ for (int i=0;i<1500;i++)
+ {
+     sum=sum+v1[i];
+  }
+  
+  sum=sos+eos+sum+counter+data_trfr;
+  chksum_datatrfr=sum & 0x000000FF;
+  return chksum_datatrfr;
+}
 
 
 
+
+
+uint8_t checksum_struct()
+{
+
+ uint32_t sum=0;
+ uint8_t chksum_struct=0;
+ 
+  sum=myBleMsg->start_of_string+myBleMsg->proto+myBleMsg->bt_msg.length+myBleMsg->bt_msg.device_id+myBleMsg->bt_msg.date_time.date+myBleMsg->bt_msg.date_time.month+myBleMsg->bt_msg.date_time.year+myBleMsg->bt_msg.date_time.hour+myBleMsg->bt_msg.date_time.mins+myBleMsg->bt_msg.date_time.sec+myBleMsg->bt_msg.test_type+myBleMsg->bt_msg.sampling_freq+myBleMsg->bt_msg.num_samples.num_sample_ppg_dummy+myBleMsg->bt_msg.num_samples.num_sample_ecg_OTtyp+myBleMsg->bt_msg.cal_data.cal_sbp_dummy+myBleMsg->bt_msg.cal_data.cal_dbp_OTtyp+myBleMsg->end_of_string+myBleMsg->chk_sum;
+  chksum_struct=sum & 0x000000FF;
+  return chksum_struct;
+}