Dummy program to demonstrate problems: working code
Dependencies: SLCD mbed-rtos mbed
Fork of MNG_TC by
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 }
Generated on Thu Jul 21 2022 03:45:37 by 1.7.2