v2.0 working

Dependencies:   mbed

Committer:
krishanprajapat
Date:
Thu Jul 30 12:39:50 2015 +0000
Revision:
2:2b08032d9678
Parent:
0:8ed3ad791ca2
read from sd card and send to adf working;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
krishanprajapat 0:8ed3ad791ca2 1 // It takes 276us to read from sd card and write in 112 buffer
krishanprajapat 0:8ed3ad791ca2 2
krishanprajapat 0:8ed3ad791ca2 3 //~ #include"SDcard.h"
krishanprajapat 0:8ed3ad791ca2 4 #define T_frames 39
krishanprajapat 0:8ed3ad791ca2 5 unsigned char buffer_112_counter,sent_tm = 0;
krishanprajapat 0:8ed3ad791ca2 6 int disk_read(uint8_t *, uint64_t),j;
krishanprajapat 0:8ed3ad791ca2 7 bool new_session = true;
krishanprajapat 0:8ed3ad791ca2 8 bool last_buffer = false;
krishanprajapat 0:8ed3ad791ca2 9 bool first_block = true;
krishanprajapat 0:8ed3ad791ca2 10 bool last_block =false;
krishanprajapat 0:8ed3ad791ca2 11 bool repeat_T_frame = false;
krishanprajapat 0:8ed3ad791ca2 12 unsigned int counter_in_block=0,diff_prev=0;
krishanprajapat 0:8ed3ad791ca2 13 unsigned char EOS_counter = 0;
krishanprajapat 0:8ed3ad791ca2 14 unsigned char enable_T_frame = false;
krishanprajapat 0:8ed3ad791ca2 15 unsigned long long int start_block_num ; // Read from TC
krishanprajapat 0:8ed3ad791ca2 16 unsigned long long int end_block_num ; // Read from TC
krishanprajapat 0:8ed3ad791ca2 17 unsigned long long int Number_of_blocks_to_read ;
krishanprajapat 0:8ed3ad791ca2 18 unsigned long long int block_counter = 0;
krishanprajapat 0:8ed3ad791ca2 19 unsigned char buffer_512[512], buffer_112[112],counter_in_S_frame=0,counter_in_SCH=0;
krishanprajapat 0:8ed3ad791ca2 20 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};
krishanprajapat 0:8ed3ad791ca2 21 //unsigned char SCH[40] = {0x0A,0x3F,0x46,0xB4,0x00};
krishanprajapat 0:8ed3ad791ca2 22 unsigned char EoS[120];
krishanprajapat 0:8ed3ad791ca2 23 unsigned char make_EOS_flag =true;
krishanprajapat 0:8ed3ad791ca2 24
krishanprajapat 0:8ed3ad791ca2 25 void differential_encode(unsigned char* ptr, int length){
krishanprajapat 0:8ed3ad791ca2 26
krishanprajapat 0:8ed3ad791ca2 27 for(int i=0; i<length;i++){
krishanprajapat 0:8ed3ad791ca2 28
krishanprajapat 0:8ed3ad791ca2 29 unsigned char s = ptr[i] , t;
krishanprajapat 0:8ed3ad791ca2 30 t = s ^ (s >> 1);
krishanprajapat 0:8ed3ad791ca2 31 (diff_prev == 0) ? t=t^0x00 : t=t^0x80 ;
krishanprajapat 0:8ed3ad791ca2 32 diff_prev = int(s & 0x01);
krishanprajapat 0:8ed3ad791ca2 33 ptr[i] = t;
krishanprajapat 0:8ed3ad791ca2 34 }
krishanprajapat 0:8ed3ad791ca2 35
krishanprajapat 0:8ed3ad791ca2 36 }
krishanprajapat 0:8ed3ad791ca2 37
krishanprajapat 0:8ed3ad791ca2 38 void make_EOS()
krishanprajapat 0:8ed3ad791ca2 39 {
krishanprajapat 0:8ed3ad791ca2 40
krishanprajapat 0:8ed3ad791ca2 41 for(int i = 0 ; i < 24 ; ++i){
krishanprajapat 0:8ed3ad791ca2 42 EoS[i] = 0x00;
krishanprajapat 0:8ed3ad791ca2 43 }
krishanprajapat 0:8ed3ad791ca2 44
krishanprajapat 0:8ed3ad791ca2 45 //~ S-FRAME [1]
krishanprajapat 0:8ed3ad791ca2 46 //~ first two bits of S-FRAME
krishanprajapat 0:8ed3ad791ca2 47 EoS[23] = 0x01;
krishanprajapat 0:8ed3ad791ca2 48
krishanprajapat 0:8ed3ad791ca2 49 EoS[24] = 0x1a;
krishanprajapat 0:8ed3ad791ca2 50 EoS[25] = 0x77;
krishanprajapat 0:8ed3ad791ca2 51 EoS[26] = 0xef;
krishanprajapat 0:8ed3ad791ca2 52 EoS[27] = 0xc3;
krishanprajapat 0:8ed3ad791ca2 53 EoS[28] = 0x4a;
krishanprajapat 0:8ed3ad791ca2 54 EoS[29] = 0xea;
krishanprajapat 0:8ed3ad791ca2 55 EoS[30] = 0x27;
krishanprajapat 0:8ed3ad791ca2 56 EoS[31] = 0x91;
krishanprajapat 0:8ed3ad791ca2 57 EoS[32] = 0x1a;
krishanprajapat 0:8ed3ad791ca2 58 EoS[33] = 0x77;
krishanprajapat 0:8ed3ad791ca2 59 EoS[34] = 0xef;
krishanprajapat 0:8ed3ad791ca2 60 EoS[35] = 0xc3;
krishanprajapat 0:8ed3ad791ca2 61 EoS[36] = 0x4a;
krishanprajapat 0:8ed3ad791ca2 62 EoS[37] = 0xea;
krishanprajapat 0:8ed3ad791ca2 63 EoS[38] = 0x27;
krishanprajapat 0:8ed3ad791ca2 64 EoS[39] = 0x90;
krishanprajapat 0:8ed3ad791ca2 65
krishanprajapat 0:8ed3ad791ca2 66 for(int i = 40 ; i < 72 ; ++i){
krishanprajapat 0:8ed3ad791ca2 67 EoS[i] = 0x00;
krishanprajapat 0:8ed3ad791ca2 68 }
krishanprajapat 0:8ed3ad791ca2 69
krishanprajapat 0:8ed3ad791ca2 70 //~ S-FRAME [2]
krishanprajapat 0:8ed3ad791ca2 71 //~ first two bits of S-FRAME
krishanprajapat 0:8ed3ad791ca2 72 EoS[71] = 0x01;
krishanprajapat 0:8ed3ad791ca2 73
krishanprajapat 0:8ed3ad791ca2 74 EoS[72] = 0x1a;
krishanprajapat 0:8ed3ad791ca2 75 EoS[73] = 0x77;
krishanprajapat 0:8ed3ad791ca2 76 EoS[74] = 0xef;
krishanprajapat 0:8ed3ad791ca2 77 EoS[75] = 0xc3;
krishanprajapat 0:8ed3ad791ca2 78 EoS[76] = 0x4a;
krishanprajapat 0:8ed3ad791ca2 79 EoS[77] = 0xea;
krishanprajapat 0:8ed3ad791ca2 80 EoS[78] = 0x27;
krishanprajapat 0:8ed3ad791ca2 81 EoS[79] = 0x91;
krishanprajapat 0:8ed3ad791ca2 82 EoS[80] = 0x1a;
krishanprajapat 0:8ed3ad791ca2 83 EoS[81] = 0x77;
krishanprajapat 0:8ed3ad791ca2 84 EoS[82] = 0xef;
krishanprajapat 0:8ed3ad791ca2 85 EoS[83] = 0xc3;
krishanprajapat 0:8ed3ad791ca2 86 EoS[84] = 0x4a;
krishanprajapat 0:8ed3ad791ca2 87 EoS[85] = 0xea;
krishanprajapat 0:8ed3ad791ca2 88 EoS[86] = 0x27;
krishanprajapat 0:8ed3ad791ca2 89 EoS[87] = 0x90;
krishanprajapat 0:8ed3ad791ca2 90
krishanprajapat 0:8ed3ad791ca2 91 for(int i = 88 ; i < 120 ; ++i){
krishanprajapat 0:8ed3ad791ca2 92 EoS[i] = 0x00;
krishanprajapat 0:8ed3ad791ca2 93 }
krishanprajapat 0:8ed3ad791ca2 94
krishanprajapat 0:8ed3ad791ca2 95 }
krishanprajapat 0:8ed3ad791ca2 96
krishanprajapat 0:8ed3ad791ca2 97 void send_tm_from_SD_card(){
krishanprajapat 0:8ed3ad791ca2 98
krishanprajapat 0:8ed3ad791ca2 99
krishanprajapat 0:8ed3ad791ca2 100 if(make_EOS_flag == true){
krishanprajapat 0:8ed3ad791ca2 101 make_EOS();
krishanprajapat 0:8ed3ad791ca2 102 make_EOS_flag = false;
krishanprajapat 0:8ed3ad791ca2 103 Number_of_blocks_to_read = end_block_num - start_block_num +1;
krishanprajapat 0:8ed3ad791ca2 104 }
krishanprajapat 0:8ed3ad791ca2 105
krishanprajapat 0:8ed3ad791ca2 106
krishanprajapat 0:8ed3ad791ca2 107 for(buffer_112_counter=0;buffer_112_counter<112;buffer_112_counter++){
krishanprajapat 0:8ed3ad791ca2 108
krishanprajapat 0:8ed3ad791ca2 109
krishanprajapat 0:8ed3ad791ca2 110 if(new_session == true){ //check if it is beginnig of session
krishanprajapat 0:8ed3ad791ca2 111
krishanprajapat 0:8ed3ad791ca2 112 buffer_112[buffer_112_counter]=S_frame[counter_in_S_frame++]; // sending S frame
krishanprajapat 0:8ed3ad791ca2 113
krishanprajapat 0:8ed3ad791ca2 114 if(counter_in_S_frame==48){
krishanprajapat 0:8ed3ad791ca2 115 // cout<<"new_session_over\n";
krishanprajapat 0:8ed3ad791ca2 116 counter_in_S_frame=0;
krishanprajapat 0:8ed3ad791ca2 117 new_session = false;
krishanprajapat 0:8ed3ad791ca2 118 enable_T_frame = true;
krishanprajapat 0:8ed3ad791ca2 119 // enable_SCH = true;
krishanprajapat 0:8ed3ad791ca2 120 }
krishanprajapat 0:8ed3ad791ca2 121 }
krishanprajapat 0:8ed3ad791ca2 122 else if(enable_T_frame == true){ // To send t frames
krishanprajapat 0:8ed3ad791ca2 123
krishanprajapat 0:8ed3ad791ca2 124 if(block_counter != Number_of_blocks_to_read){
krishanprajapat 0:8ed3ad791ca2 125
krishanprajapat 0:8ed3ad791ca2 126 if(first_block){ // Read first block
krishanprajapat 0:8ed3ad791ca2 127 // cout<<"brooooooo"<<start_block_num<<"yo"<<endl;
krishanprajapat 0:8ed3ad791ca2 128
krishanprajapat 0:8ed3ad791ca2 129 disk_read(buffer_512,start_block_num );
krishanprajapat 0:8ed3ad791ca2 130 counter_in_block = 0;
krishanprajapat 0:8ed3ad791ca2 131 block_counter++;
krishanprajapat 0:8ed3ad791ca2 132
krishanprajapat 0:8ed3ad791ca2 133 first_block = false;
krishanprajapat 0:8ed3ad791ca2 134 // cout<<"first block exit\n";
krishanprajapat 0:8ed3ad791ca2 135 // cout<<Number_of_blocks_to_read;
krishanprajapat 0:8ed3ad791ca2 136
krishanprajapat 0:8ed3ad791ca2 137 //printf("\n");
krishanprajapat 0:8ed3ad791ca2 138 // for(int j=0;j<512;j++){
krishanprajapat 0:8ed3ad791ca2 139 // printf("%02X ",buffer_512[j]);
krishanprajapat 0:8ed3ad791ca2 140 // }
krishanprajapat 0:8ed3ad791ca2 141 // printf("\n");
krishanprajapat 0:8ed3ad791ca2 142 // if(block_counter == Number_of_blocks_to_read){
krishanprajapat 0:8ed3ad791ca2 143 // last_block = true;
krishanprajapat 0:8ed3ad791ca2 144 // }
krishanprajapat 0:8ed3ad791ca2 145
krishanprajapat 0:8ed3ad791ca2 146
krishanprajapat 0:8ed3ad791ca2 147 }
krishanprajapat 0:8ed3ad791ca2 148 if((counter_in_block == 318 )&&(sent_tm<38)){ // Read next block
krishanprajapat 0:8ed3ad791ca2 149
krishanprajapat 0:8ed3ad791ca2 150 // cout<<"next block exit\n";
krishanprajapat 0:8ed3ad791ca2 151 disk_read(buffer_512,start_block_num + block_counter );
krishanprajapat 0:8ed3ad791ca2 152 counter_in_block = 0;
krishanprajapat 0:8ed3ad791ca2 153 block_counter++;
krishanprajapat 0:8ed3ad791ca2 154 if(block_counter == Number_of_blocks_to_read){
krishanprajapat 0:8ed3ad791ca2 155 last_block = true;
krishanprajapat 0:8ed3ad791ca2 156 }
krishanprajapat 0:8ed3ad791ca2 157 }
krishanprajapat 0:8ed3ad791ca2 158 }
krishanprajapat 0:8ed3ad791ca2 159
krishanprajapat 0:8ed3ad791ca2 160 if(!last_block){
krishanprajapat 0:8ed3ad791ca2 161
krishanprajapat 0:8ed3ad791ca2 162 // cout<<int(sent_tm)<<" ";
krishanprajapat 0:8ed3ad791ca2 163 if(sent_tm<38){
krishanprajapat 0:8ed3ad791ca2 164 buffer_112[buffer_112_counter] = buffer_512[counter_in_block++]; // sending T frames
krishanprajapat 0:8ed3ad791ca2 165 // cout<<int (counter_in_block)<<" ";
krishanprajapat 0:8ed3ad791ca2 166 if(counter_in_block == 318){
krishanprajapat 0:8ed3ad791ca2 167
krishanprajapat 0:8ed3ad791ca2 168 sent_tm = sent_tm + 2;
krishanprajapat 0:8ed3ad791ca2 169 }
krishanprajapat 0:8ed3ad791ca2 170 }
krishanprajapat 0:8ed3ad791ca2 171 else if(sent_tm == (T_frames-1)){
krishanprajapat 0:8ed3ad791ca2 172 buffer_112[buffer_112_counter] = buffer_512[(counter_in_block++ )-159];
krishanprajapat 0:8ed3ad791ca2 173 if(counter_in_block == 318){
krishanprajapat 0:8ed3ad791ca2 174 // cout<<"last block exit\n";
krishanprajapat 0:8ed3ad791ca2 175 sent_tm = T_frames;
krishanprajapat 0:8ed3ad791ca2 176 }
krishanprajapat 0:8ed3ad791ca2 177 }
krishanprajapat 0:8ed3ad791ca2 178 else if(sent_tm == T_frames){ // Give eos and start new session
krishanprajapat 0:8ed3ad791ca2 179 buffer_112[buffer_112_counter]=EoS[EOS_counter++];
krishanprajapat 0:8ed3ad791ca2 180 if(EOS_counter == 120){
krishanprajapat 0:8ed3ad791ca2 181 enable_T_frame = false;
krishanprajapat 0:8ed3ad791ca2 182 new_session = true;
krishanprajapat 0:8ed3ad791ca2 183 EOS_counter =0;
krishanprajapat 0:8ed3ad791ca2 184 sent_tm=0;
krishanprajapat 0:8ed3ad791ca2 185 repeat_T_frame = false;
krishanprajapat 0:8ed3ad791ca2 186 // cout<<"eos exit\n";
krishanprajapat 0:8ed3ad791ca2 187 }
krishanprajapat 0:8ed3ad791ca2 188 }
krishanprajapat 0:8ed3ad791ca2 189 }
krishanprajapat 0:8ed3ad791ca2 190 if(last_block){
krishanprajapat 0:8ed3ad791ca2 191 // cout<<"lb";
krishanprajapat 0:8ed3ad791ca2 192 if(sent_tm == (T_frames-1) && (repeat_T_frame == false)){
krishanprajapat 0:8ed3ad791ca2 193 buffer_112[buffer_112_counter] = buffer_512[(counter_in_block++ )-159];
krishanprajapat 0:8ed3ad791ca2 194 if(counter_in_block == 318){
krishanprajapat 0:8ed3ad791ca2 195 // cout<<"repeat block exit\n";
krishanprajapat 0:8ed3ad791ca2 196 sent_tm = T_frames;
krishanprajapat 0:8ed3ad791ca2 197 }
krishanprajapat 0:8ed3ad791ca2 198 }
krishanprajapat 0:8ed3ad791ca2 199 if((sent_tm == T_frames) && (repeat_T_frame == false)){ // Give eos and start new session
krishanprajapat 0:8ed3ad791ca2 200 buffer_112[buffer_112_counter]=EoS[EOS_counter++];
krishanprajapat 0:8ed3ad791ca2 201 if(EOS_counter == 120){
krishanprajapat 0:8ed3ad791ca2 202 // cout<<"eos exit";
krishanprajapat 0:8ed3ad791ca2 203 enable_T_frame = false;
krishanprajapat 0:8ed3ad791ca2 204 new_session = true;
krishanprajapat 0:8ed3ad791ca2 205 EOS_counter =0;
krishanprajapat 0:8ed3ad791ca2 206 sent_tm=0;
krishanprajapat 0:8ed3ad791ca2 207 }
krishanprajapat 0:8ed3ad791ca2 208 }
krishanprajapat 0:8ed3ad791ca2 209 else if((sent_tm < (T_frames-1)) && (repeat_T_frame == false)){
krishanprajapat 0:8ed3ad791ca2 210 buffer_112[buffer_112_counter] = buffer_512[counter_in_block++]; // sending last two T frames
krishanprajapat 0:8ed3ad791ca2 211 if(counter_in_block == 318){
krishanprajapat 0:8ed3ad791ca2 212 sent_tm = sent_tm + 2;
krishanprajapat 0:8ed3ad791ca2 213 repeat_T_frame= true;
krishanprajapat 0:8ed3ad791ca2 214 }
krishanprajapat 0:8ed3ad791ca2 215 }
krishanprajapat 0:8ed3ad791ca2 216 else if((sent_tm< T_frames) && (repeat_T_frame == true)){
krishanprajapat 0:8ed3ad791ca2 217 buffer_112[buffer_112_counter] = buffer_512[(counter_in_block++ )-159];
krishanprajapat 0:8ed3ad791ca2 218 if(counter_in_block == 477){
krishanprajapat 0:8ed3ad791ca2 219 sent_tm = sent_tm +1;
krishanprajapat 0:8ed3ad791ca2 220 counter_in_block = counter_in_block-159;
krishanprajapat 0:8ed3ad791ca2 221 }
krishanprajapat 0:8ed3ad791ca2 222 }
krishanprajapat 0:8ed3ad791ca2 223 else if((sent_tm == T_frames ) && (repeat_T_frame == true)){ // Give eos and start new session
krishanprajapat 0:8ed3ad791ca2 224
krishanprajapat 0:8ed3ad791ca2 225 buffer_112[buffer_112_counter]=EoS[EOS_counter++];
krishanprajapat 0:8ed3ad791ca2 226 if(EOS_counter == 120){
krishanprajapat 0:8ed3ad791ca2 227 enable_T_frame = false;
krishanprajapat 0:8ed3ad791ca2 228 new_session = true;
krishanprajapat 0:8ed3ad791ca2 229 EOS_counter =0;
krishanprajapat 0:8ed3ad791ca2 230 // printf("yoooo %d",int(sent_tm));
krishanprajapat 0:8ed3ad791ca2 231 sent_tm=0;
krishanprajapat 0:8ed3ad791ca2 232
krishanprajapat 0:8ed3ad791ca2 233 last_block = false;
krishanprajapat 0:8ed3ad791ca2 234 last_buffer = true;
krishanprajapat 0:8ed3ad791ca2 235 // printf("i m here");
krishanprajapat 0:8ed3ad791ca2 236 break;
krishanprajapat 0:8ed3ad791ca2 237 }
krishanprajapat 0:8ed3ad791ca2 238 }
krishanprajapat 0:8ed3ad791ca2 239
krishanprajapat 0:8ed3ad791ca2 240 }
krishanprajapat 0:8ed3ad791ca2 241
krishanprajapat 0:8ed3ad791ca2 242 }
krishanprajapat 0:8ed3ad791ca2 243
krishanprajapat 0:8ed3ad791ca2 244 }
krishanprajapat 0:8ed3ad791ca2 245 differential_encode(buffer_112, 112);
krishanprajapat 0:8ed3ad791ca2 246 if(last_buffer ==true){
krishanprajapat 0:8ed3ad791ca2 247 diff_prev=0;
krishanprajapat 0:8ed3ad791ca2 248 }
krishanprajapat 0:8ed3ad791ca2 249
krishanprajapat 0:8ed3ad791ca2 250 }