Dummy program to demonstrate problems: working code

Dependencies:   SLCD mbed-rtos mbed

Fork of MNG_TC by Shreesha S

SD_read.h

Committer:
shreeshas95
Date:
2015-09-17
Revision:
17:2b04e53f3b1d
Parent:
13:7b27a8e9cbb4

File content as of revision 17:2b04e53f3b1d:

// It takes 276us to read from sd card and write in 112 buffer
 
//~ #include"SDcard.h"
#define T_frames 39
unsigned char buffer_112_counter,sent_tm = 0;
int disk_read(uint8_t *, uint64_t),j;
bool new_session = true;
bool last_buffer = false;
bool first_block = true;
bool last_block =false;
bool repeat_T_frame = false;
unsigned int counter_in_block=0,diff_prev=0;
unsigned char  EOS_counter = 0;
unsigned char enable_T_frame = false;
uint64_t  start_block_num ;           // Read from TC
uint64_t  end_block_num ;            // Read from TC
uint64_t  Number_of_blocks_to_read ;
uint64_t  block_counter = 0;
unsigned char buffer_512[512], buffer_112[112],counter_in_S_frame=0,counter_in_SCH=0;
//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};
//unsigned char SCH[40] = {0x0A,0x3F,0x46,0xB4,0x00};
//unsigned char EoS[120];
unsigned char * S_frame , *EoS;
unsigned char make_EOS_flag =true;
 
void differential_encode(unsigned char* ptr, int length){
    
        for(int i=0; i<length;i++){
        
            unsigned char s = ptr[i] , t;
            t = s ^ (s >> 1);
            (diff_prev == 0) ? t=t^0x00 : t=t^0x80 ;
            diff_prev = int(s & 0x01);
            ptr[i] = t;
        }
        
    } 
 
void send_tm_from_SD_card(){
    
    
    if(make_EOS_flag == true){
        EoS = snd_tm.EoS;
        S_frame = snd_tm.S_frame;
        make_EOS_flag = false;
        Number_of_blocks_to_read = end_block_num - start_block_num +1;
    }
    
    
    for(buffer_112_counter=0;buffer_112_counter<112;buffer_112_counter++){
      
 
        if(new_session == true){          //check if it is beginnig of session  
 
            buffer_112[buffer_112_counter]=S_frame[counter_in_S_frame++];  // sending S frame 
            
            if(counter_in_S_frame==48){
//                cout<<"new_session_over\n";
                counter_in_S_frame=0;
                new_session = false;
                enable_T_frame = true;
//              enable_SCH = true;
            }
        }
        else if(enable_T_frame == true){             // To send t frames
 
            if(block_counter != Number_of_blocks_to_read){                  
                
                if(first_block){                            // Read first block
//                    cout<<"brooooooo"<<start_block_num<<"yo"<<endl;   
                    SPI_mutex.lock();     
                    disk_read(buffer_512,start_block_num );
                    SPI_mutex.unlock();
                    counter_in_block = 0;
                    block_counter++;
                    
                    first_block = false;
//                    cout<<"first block exit\n";
//                   cout<<Number_of_blocks_to_read;
                   
                   //printf("\n");
//                    for(int j=0;j<512;j++){
//                    printf("%02X ",buffer_512[j]);
//                    }
//                    printf("\n");
//                    if(block_counter == Number_of_blocks_to_read){
//                        last_block = true;
//                    }
                    
                    
                }
                if((counter_in_block == 318 )&&(sent_tm<38)){                 // Read next block
 
//                    cout<<"next block exit\n";
                    SPI_mutex.lock();
                    disk_read(buffer_512,start_block_num + block_counter );
                    SPI_mutex.unlock();
                    counter_in_block = 0;
                    block_counter++;
                    if(block_counter == Number_of_blocks_to_read){
                        last_block = true;
                    }
                }
            }
                        
            if(!last_block){  
              
 //                 cout<<int(sent_tm)<<" ";
                if(sent_tm<38){
                    buffer_112[buffer_112_counter] = buffer_512[counter_in_block++];    // sending T frames
//                  cout<<int (counter_in_block)<<" ";
                    if(counter_in_block == 318){
                       
                        sent_tm = sent_tm + 2;
                    }   
                }
                else if(sent_tm == (T_frames-1)){
                    buffer_112[buffer_112_counter] = buffer_512[(counter_in_block++ )-159];
                    if(counter_in_block == 318){
//                        cout<<"last block exit\n";
                        sent_tm = T_frames;
                    }
                }
                else if(sent_tm == T_frames){       // Give eos and start new session         
                    buffer_112[buffer_112_counter]=EoS[EOS_counter++];
                        if(EOS_counter == 120){
                            enable_T_frame = false;
                            new_session = true;
                            EOS_counter =0;
                            sent_tm=0;
                            repeat_T_frame = false;
//                          cout<<"eos exit\n";
                        }
                }
            }
            if(last_block){
//                cout<<"lb";
                if(sent_tm == (T_frames-1) && (repeat_T_frame == false)){
                    buffer_112[buffer_112_counter] = buffer_512[(counter_in_block++ )-159];
                    if(counter_in_block == 318){
//                      cout<<"repeat block exit\n";
                        sent_tm = T_frames;
                    }
                }
                 if((sent_tm == T_frames) && (repeat_T_frame == false)){       // Give eos and start new session         
                    buffer_112[buffer_112_counter]=EoS[EOS_counter++];
                       if(EOS_counter == 120){
//                        cout<<"eos exit";
                        enable_T_frame = false;
                        new_session = true;
                        EOS_counter =0;
                        sent_tm=0;
                    }
                }
                else if((sent_tm < (T_frames-1)) && (repeat_T_frame == false)){
                    buffer_112[buffer_112_counter] = buffer_512[counter_in_block++];    // sending last two T frames    
                    if(counter_in_block == 318){
                        sent_tm = sent_tm + 2;
                        repeat_T_frame= true;
                    }
                }
                else if((sent_tm< T_frames) && (repeat_T_frame == true)){
                    buffer_112[buffer_112_counter] = buffer_512[(counter_in_block++ )-159];
                    if(counter_in_block == 477){
                        sent_tm = sent_tm +1;
                        counter_in_block = counter_in_block-159;
                    }
                }
                else if((sent_tm == T_frames ) && (repeat_T_frame == true)){       // Give eos and start new session         
                   
                    buffer_112[buffer_112_counter]=EoS[EOS_counter++];
                        if(EOS_counter == 120){
                        enable_T_frame = false;
                        new_session = true;
                        EOS_counter =0;
//                    printf("yoooo %d",int(sent_tm));    
                        sent_tm=0;
                    
                        last_block = false;
                        last_buffer = true;
//                        printf("i m here");
                        break;
                    }
                }
                
            }   
        
        }
                    
    }
    differential_encode(buffer_112, 112);
    if(last_buffer ==true){
    diff_prev=0;
    }
    
}