Modification into 17th July New display demo code

Dependencies:   SDFileSystem ds3231 eeprom_Nikita mbed testUniGraphic_150217

Fork of Ext_Demo_17July2017_newdis by SenseSemi

bt.cpp

Committer:
nikitateggi
Date:
2017-06-09
Revision:
19:1650bbc923cc
Child:
22:ffa88619551d

File content as of revision 19:1650bbc923cc:

#include "mbed.h"
#include "sdcard.h"
#include "struct.h"

BLEMsg_info *bt_file;              //pointer to structure 
Point *myBleMsg;                   // pointer to bluetooth structure
//bt_st *as;
Serial mc(USBTX,USBRX);            // serial terminal
Serial blue(PTC4,PTC3);            // bluetooth serial terminal
                  
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 file_start=0;                   // variable for 'for loop'
uint32_t j=0;
uint8_t k=0; 
uint32_t file_pointer_position=0;




uint8_t bt_send(uint8_t state_tx)
{
  uint32_t v1[150]; 
  blue.baud(115200);                  // baud rate of bluetooth
  bt_file=&bt_file1;                      
  myBleMsg=&b; 
  static  uint8_t state_rx =0;
//t.start();                             // timer start
  

    switch(state_tx)
          {
 
       case 1:   sendinit();  
                 sd_open_read(1);                       // open the file for read
                 total_file_size=file_size() ;             // determined the file size  
                // mc.printf("filesize=%d",total_file_size);              
                 state_rx =1;
                 state_tx =0;                
                 break;
               
                   
       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;
                 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("fileread=%d",total_file_read);
                 //mc.printf("pointer=%d\n",file_pointer_position);
                 break;                 
 
 
       case 3:      
                 //mc.printf("kkkk=%d\n",k);     
                 //mc.printf("samples=%d", total_samples);            // send the raw data
                if(k<(total_samples/150))
                  {
                    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++)
                         {     
                       
                             blue.printf("%08x", v1[file_start]);
                            
                         }
                            //  blue.printf("\n");
                       // mc.printf("iiii,hjjjj=%d %d\n",file_start,j);   
                    state_tx =0;
                    state_rx =3;
                    send_data_str2();
                  
                   }
               
               else 
                     {
                        for(int l=0;l<150;l++)
                          {    
                            v1[l]=NULL;
                           }
                        
                           send_data_str1();
                           sd_read(v1,(total_samples-(150*k)));
                        for(file_start=j;file_start<(total_samples-(150*k));file_start++)
                          {     
                             blue.printf("%08x", v1[file_start]);
                           }
                           
                          // blue.printf("\n");
                          state_tx=0;
                          state_rx=4;
                          send_data_str2();
                    }   
                     
                       total_file_read=file_size1();
                   //   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);
                 if(total_file_read==total_file_size)
                     {
                    
                        state_rx=6;
                        sd_close();
                      //  mc.printf("exit");
                     }
                else   
                       {
                         state_rx=5;
                         total_file_read=file_size1();
                      //   mc.printf("fileread=%d",total_file_read );
                        //mc.printf("pointer=%d\n",file_pointer_position);
                         
                        }   
                       
   
//t.stop();

         }
//mc.printf("time=%d\n",t.read_ms());
   return state_rx;     
        
  }           
 
 
 
 
uint8_t bt_receive (uint8_t state_rx)
{
       
static unsigned char state_tx =1;      //state for transmitting 
            
Timer t;                               // timer 
uint8_t ack_rx;                        // varibale to receive ack from the bluetooth 
//Point b;                               // structure copy                     
//myBleMsg=&b;
t.start();                             // timer start

     switch(state_rx)
         {
                
          case 1:                                       // wait for the ack
                      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
                     {
                       
                       state_tx=2;
                      }
                    
                    else                                // its a nack
                    
                      { 
                       
                        state_tx=1;
                        sd_close();
                      }
                   break;                 
 
         case 2:      state_rx =0;                        //wait for the ack
                      myBleMsg->proto=ACK;
                
                      scanf("%02x", &ack_rx);
                     if (ack_rx==myBleMsg->proto)
                        {
                
                          state_tx=3;
                          file_pointer_position=total_file_read;
                        }
                    
                    else 
                    
                        { 
                      
                        state_tx=2;
                        setpos1(file_pointer_position);          // set the file pointer to send the previous data
                     //   mc.printf("pointer=%d\n",file_pointer_position);
                        }
            
                    break;

                
     case 3:       
                   state_rx =0;
                   myBleMsg->proto=ACK;
                   scanf("%02x", &ack_rx);
                 if (ack_rx==myBleMsg->proto)
                      {
                     
                        state_tx=3;
                         k=k+1;
                       file_pointer_position=total_file_read;
                      }
                    
                  else 
                    
                      { 
                       
                        state_tx=3;
                      //  mc.printf("j=%d\n",j);
                        file_start=file_start-150;
                        //mc.printf("j=%d\n",j); 
                       // mc.printf("file_pointer_position=%d\n",file_pointer_position);
                        setpos1(file_pointer_position);
                      }
               
                   break;    
                                            
     case 4:       
                   state_rx =0;
                   myBleMsg->proto=ACK;
                   scanf("%02x", &ack_rx);
                   if (ack_rx==myBleMsg->proto)
                      {
                       // bt_r.printf("sent");
                        state_tx=4;
                         k=k+1;
                        file_pointer_position=total_file_read;
                      }
                    
                  else 
                    
                      { 
                        //bt_r.printf("no-ack");
                        state_tx=3;
                        file_start=file_start-150;
                        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;
   
   
                
//t.stop();

  }
//bt_r.printf("time=%d\n",t.read_ms());
   return state_tx;          
  }           
   
 
 
 
 
 
             
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);
                mc.printf("%02x",myBleMsg->proto);
                mc.printf("%08x",myBleMsg->bt_msg.length); 
                mc.printf("%02x",myBleMsg->bt_msg.device_id); 
                mc.printf("%08x",myBleMsg->bt_msg.patient_id);    
                mc.printf("%02x",myBleMsg->bt_msg.date_time.date);     
                mc.printf("%02x",myBleMsg->bt_msg.date_time.month);  
                mc.printf("%02x",myBleMsg->bt_msg.date_time.year);  
                mc.printf("%02x",myBleMsg->bt_msg.date_time.hour);      
                mc.printf("%02x",myBleMsg->bt_msg.date_time.mins);  
                mc.printf("%02x",myBleMsg->bt_msg.date_time.sec);  
                mc.printf("%02x",myBleMsg->bt_msg.test_type);   
                mc.printf("%04x",myBleMsg->bt_msg.sampling_freq); 
                mc.printf("%04x",myBleMsg->bt_msg.num_samples. num_sample_ppg_dummy); 
                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);
                mc.printf("%02x",myBleMsg->chk_sum);
    
    }
    
void sendinit()
{
                myBleMsg->start_end_of_string=sos;
                myBleMsg->length_file=3;
                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);
                mc.printf("%02x",myBleMsg->chk_sum);
    
    }
    
    
    
 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()
    {          
                myBleMsg->chk_sum=3;
                myBleMsg->start_end_of_string=eos;  
                mc.printf("%02x",myBleMsg->start_end_of_string);
                mc.printf("%02x",myBleMsg->chk_sum);
    }