Dummy program to demonstrate problems: working code

Dependencies:   SLCD mbed-rtos mbed

Fork of MNG_TC by Shreesha S

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers SD_read.h Source File

SD_read.h

00001 // It takes 276us to read from sd card and write in 112 buffer
00002  
00003 //~ #include"SDcard.h"
00004 #define T_frames 39
00005 unsigned char buffer_112_counter,sent_tm = 0;
00006 int disk_read(uint8_t *, uint64_t),j;
00007 bool new_session = true;
00008 bool last_buffer = false;
00009 bool first_block = true;
00010 bool last_block =false;
00011 bool repeat_T_frame = false;
00012 unsigned int counter_in_block=0,diff_prev=0;
00013 unsigned char  EOS_counter = 0;
00014 unsigned char enable_T_frame = false;
00015 uint64_t  start_block_num ;           // Read from TC
00016 uint64_t  end_block_num ;            // Read from TC
00017 uint64_t  Number_of_blocks_to_read ;
00018 uint64_t  block_counter = 0;
00019 unsigned char buffer_512[512], buffer_112[112],counter_in_S_frame=0,counter_in_SCH=0;
00020 //unsigned char S_frame[48]={0x46,0x9D,0xFB,0xF0,0xD2,0xBA,0x89,0xE4,0x46,0x9D,0xFB,0xF0,0xD2,0xBA,0x89,0xE4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
00021 //unsigned char SCH[40] = {0x0A,0x3F,0x46,0xB4,0x00};
00022 //unsigned char EoS[120];
00023 unsigned char * S_frame , *EoS;
00024 unsigned char make_EOS_flag =true;
00025  
00026 void differential_encode(unsigned char* ptr, int length){
00027     
00028         for(int i=0; i<length;i++){
00029         
00030             unsigned char s = ptr[i] , t;
00031             t = s ^ (s >> 1);
00032             (diff_prev == 0) ? t=t^0x00 : t=t^0x80 ;
00033             diff_prev = int(s & 0x01);
00034             ptr[i] = t;
00035         }
00036         
00037     } 
00038  
00039 void send_tm_from_SD_card(){
00040     
00041     
00042     if(make_EOS_flag == true){
00043         EoS = snd_tm.EoS;
00044         S_frame = snd_tm.S_frame;
00045         make_EOS_flag = false;
00046         Number_of_blocks_to_read = end_block_num - start_block_num +1;
00047     }
00048     
00049     
00050     for(buffer_112_counter=0;buffer_112_counter<112;buffer_112_counter++){
00051       
00052  
00053         if(new_session == true){          //check if it is beginnig of session  
00054  
00055             buffer_112[buffer_112_counter]=S_frame[counter_in_S_frame++];  // sending S frame 
00056             
00057             if(counter_in_S_frame==48){
00058 //                cout<<"new_session_over\n";
00059                 counter_in_S_frame=0;
00060                 new_session = false;
00061                 enable_T_frame = true;
00062 //              enable_SCH = true;
00063             }
00064         }
00065         else if(enable_T_frame == true){             // To send t frames
00066  
00067             if(block_counter != Number_of_blocks_to_read){                  
00068                 
00069                 if(first_block){                            // Read first block
00070 //                    cout<<"brooooooo"<<start_block_num<<"yo"<<endl;   
00071                     SPI_mutex.lock();     
00072                     disk_read(buffer_512,start_block_num );
00073                     SPI_mutex.unlock();
00074                     counter_in_block = 0;
00075                     block_counter++;
00076                     
00077                     first_block = false;
00078 //                    cout<<"first block exit\n";
00079 //                   cout<<Number_of_blocks_to_read;
00080                    
00081                    //printf("\n");
00082 //                    for(int j=0;j<512;j++){
00083 //                    printf("%02X ",buffer_512[j]);
00084 //                    }
00085 //                    printf("\n");
00086 //                    if(block_counter == Number_of_blocks_to_read){
00087 //                        last_block = true;
00088 //                    }
00089                     
00090                     
00091                 }
00092                 if((counter_in_block == 318 )&&(sent_tm<38)){                 // Read next block
00093  
00094 //                    cout<<"next block exit\n";
00095                     SPI_mutex.lock();
00096                     disk_read(buffer_512,start_block_num + block_counter );
00097                     SPI_mutex.unlock();
00098                     counter_in_block = 0;
00099                     block_counter++;
00100                     if(block_counter == Number_of_blocks_to_read){
00101                         last_block = true;
00102                     }
00103                 }
00104             }
00105                         
00106             if(!last_block){  
00107               
00108  //                 cout<<int(sent_tm)<<" ";
00109                 if(sent_tm<38){
00110                     buffer_112[buffer_112_counter] = buffer_512[counter_in_block++];    // sending T frames
00111 //                  cout<<int (counter_in_block)<<" ";
00112                     if(counter_in_block == 318){
00113                        
00114                         sent_tm = sent_tm + 2;
00115                     }   
00116                 }
00117                 else if(sent_tm == (T_frames-1)){
00118                     buffer_112[buffer_112_counter] = buffer_512[(counter_in_block++ )-159];
00119                     if(counter_in_block == 318){
00120 //                        cout<<"last block exit\n";
00121                         sent_tm = T_frames;
00122                     }
00123                 }
00124                 else if(sent_tm == T_frames){       // Give eos and start new session         
00125                     buffer_112[buffer_112_counter]=EoS[EOS_counter++];
00126                         if(EOS_counter == 120){
00127                             enable_T_frame = false;
00128                             new_session = true;
00129                             EOS_counter =0;
00130                             sent_tm=0;
00131                             repeat_T_frame = false;
00132 //                          cout<<"eos exit\n";
00133                         }
00134                 }
00135             }
00136             if(last_block){
00137 //                cout<<"lb";
00138                 if(sent_tm == (T_frames-1) && (repeat_T_frame == false)){
00139                     buffer_112[buffer_112_counter] = buffer_512[(counter_in_block++ )-159];
00140                     if(counter_in_block == 318){
00141 //                      cout<<"repeat block exit\n";
00142                         sent_tm = T_frames;
00143                     }
00144                 }
00145                  if((sent_tm == T_frames) && (repeat_T_frame == false)){       // Give eos and start new session         
00146                     buffer_112[buffer_112_counter]=EoS[EOS_counter++];
00147                        if(EOS_counter == 120){
00148 //                        cout<<"eos exit";
00149                         enable_T_frame = false;
00150                         new_session = true;
00151                         EOS_counter =0;
00152                         sent_tm=0;
00153                     }
00154                 }
00155                 else if((sent_tm < (T_frames-1)) && (repeat_T_frame == false)){
00156                     buffer_112[buffer_112_counter] = buffer_512[counter_in_block++];    // sending last two T frames    
00157                     if(counter_in_block == 318){
00158                         sent_tm = sent_tm + 2;
00159                         repeat_T_frame= true;
00160                     }
00161                 }
00162                 else if((sent_tm< T_frames) && (repeat_T_frame == true)){
00163                     buffer_112[buffer_112_counter] = buffer_512[(counter_in_block++ )-159];
00164                     if(counter_in_block == 477){
00165                         sent_tm = sent_tm +1;
00166                         counter_in_block = counter_in_block-159;
00167                     }
00168                 }
00169                 else if((sent_tm == T_frames ) && (repeat_T_frame == true)){       // Give eos and start new session         
00170                    
00171                     buffer_112[buffer_112_counter]=EoS[EOS_counter++];
00172                         if(EOS_counter == 120){
00173                         enable_T_frame = false;
00174                         new_session = true;
00175                         EOS_counter =0;
00176 //                    printf("yoooo %d",int(sent_tm));    
00177                         sent_tm=0;
00178                     
00179                         last_block = false;
00180                         last_buffer = true;
00181 //                        printf("i m here");
00182                         break;
00183                     }
00184                 }
00185                 
00186             }   
00187         
00188         }
00189                     
00190     }
00191     differential_encode(buffer_112, 112);
00192     if(last_buffer ==true){
00193     diff_prev=0;
00194     }
00195     
00196 }