lele

Dependencies:   mbed

Committer:
krishanprajapat
Date:
Fri Jul 31 12:52:23 2015 +0000
Revision:
1:90fd52655154
Parent:
0:984643af7d81
bro working fine and Sframe and EoS is also done , so put peace;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
krishanprajapat 0:984643af7d81 1 //without warning
krishanprajapat 0:984643af7d81 2 void adf_not_SDcard();
krishanprajapat 0:984643af7d81 3
krishanprajapat 0:984643af7d81 4 #define S_FRAME_SIZE 48
krishanprajapat 0:984643af7d81 5 #define EoS_SIZE 120
krishanprajapat 0:984643af7d81 6 #define SEGMENT_SIZE 40
krishanprajapat 0:984643af7d81 7 #define TM_FRAME_SIZE 134
krishanprajapat 0:984643af7d81 8
krishanprajapat 0:984643af7d81 9 class SND_TM{
krishanprajapat 0:984643af7d81 10
krishanprajapat 0:984643af7d81 11 int diff_prev;
krishanprajapat 0:984643af7d81 12 int type0_no; //number of type zero frames
krishanprajapat 0:984643af7d81 13 int type1_no;
krishanprajapat 0:984643af7d81 14 int total_frames; //number of type one packe (TMP)
krishanprajapat 0:984643af7d81 15 int segment_no; //number of type one packe (TMP)
krishanprajapat 0:984643af7d81 16 TM_list * list_ptr;
krishanprajapat 0:984643af7d81 17 unsigned char SCH40[5];
krishanprajapat 0:984643af7d81 18 unsigned char FCCH80[10];
krishanprajapat 0:984643af7d81 19 bool reset_flag; //for reseting all the static variables when new list is given.
krishanprajapat 0:984643af7d81 20
krishanprajapat 0:984643af7d81 21 void differential_encode(unsigned char* ptr, int length){
krishanprajapat 0:984643af7d81 22
krishanprajapat 0:984643af7d81 23 for(int i=0; i<length;i++){
krishanprajapat 0:984643af7d81 24
krishanprajapat 0:984643af7d81 25 unsigned char s = ptr[i] , t;
krishanprajapat 0:984643af7d81 26 t = s ^ (s >> 1);
krishanprajapat 0:984643af7d81 27 (diff_prev == 0) ? t=t^0x00 : t=t^0x80 ;
krishanprajapat 0:984643af7d81 28 diff_prev = int(s & 0x01);
krishanprajapat 0:984643af7d81 29 ptr[i] = t;
krishanprajapat 0:984643af7d81 30 }
krishanprajapat 0:984643af7d81 31
krishanprajapat 0:984643af7d81 32 }
krishanprajapat 0:984643af7d81 33
krishanprajapat 0:984643af7d81 34 int decide_type(unsigned char tmid){
krishanprajapat 0:984643af7d81 35 int type = 0;
krishanprajapat 0:984643af7d81 36
krishanprajapat 0:984643af7d81 37 switch(tmid){
krishanprajapat 0:984643af7d81 38 case 0x1:
krishanprajapat 0:984643af7d81 39 case 0x2:
krishanprajapat 0:984643af7d81 40 case 0x3:
krishanprajapat 0:984643af7d81 41 case 0x4:
krishanprajapat 0:984643af7d81 42 case 0x5:
krishanprajapat 0:984643af7d81 43 case 0x6:
krishanprajapat 0:984643af7d81 44 case 0x7:
krishanprajapat 0:984643af7d81 45 case 0x8:
krishanprajapat 0:984643af7d81 46 type = 0;
krishanprajapat 0:984643af7d81 47 break;
krishanprajapat 0:984643af7d81 48 case 0xA:
krishanprajapat 0:984643af7d81 49 case 0xB:
krishanprajapat 0:984643af7d81 50 case 0xC:
krishanprajapat 0:984643af7d81 51 case 0xD:
krishanprajapat 0:984643af7d81 52 case 0xE:
krishanprajapat 0:984643af7d81 53 type = 1;
krishanprajapat 0:984643af7d81 54 break;
krishanprajapat 0:984643af7d81 55 }
krishanprajapat 0:984643af7d81 56
krishanprajapat 0:984643af7d81 57 return type;
krishanprajapat 0:984643af7d81 58 }
krishanprajapat 0:984643af7d81 59
krishanprajapat 0:984643af7d81 60 void data_number(){
krishanprajapat 0:984643af7d81 61
krishanprajapat 0:984643af7d81 62 int type1_frame_no;
krishanprajapat 0:984643af7d81 63 TM_list *head = list_ptr;
krishanprajapat 0:984643af7d81 64
krishanprajapat 0:984643af7d81 65 type0_no = 0;
krishanprajapat 0:984643af7d81 66 type1_no = 0;
krishanprajapat 0:984643af7d81 67
krishanprajapat 0:984643af7d81 68 do{
krishanprajapat 0:984643af7d81 69
krishanprajapat 0:984643af7d81 70 switch( decide_type(head->tmid) ){
krishanprajapat 0:984643af7d81 71 case 0:
krishanprajapat 0:984643af7d81 72 type0_no++;
krishanprajapat 0:984643af7d81 73 break;
krishanprajapat 0:984643af7d81 74 case 1:
krishanprajapat 0:984643af7d81 75 type1_no++;
krishanprajapat 0:984643af7d81 76
krishanprajapat 0:984643af7d81 77 }
krishanprajapat 0:984643af7d81 78
krishanprajapat 0:984643af7d81 79 head=head->next_TM;
krishanprajapat 0:984643af7d81 80
krishanprajapat 0:984643af7d81 81 }
krishanprajapat 0:984643af7d81 82 while(head->next_TM != NULL);
krishanprajapat 0:984643af7d81 83
krishanprajapat 0:984643af7d81 84 type1_frame_no = ( type1_no % 10 == 0 )? (type1_no / 10) : ( (type1_no / 10) + 1);
krishanprajapat 0:984643af7d81 85 total_frames = type0_no + type1_frame_no ;
krishanprajapat 0:984643af7d81 86 segment_no = (total_frames*2 % (SEGMENT_SIZE-1) == 0) ? ( total_frames*2/(SEGMENT_SIZE-1) ) : (total_frames*2/(SEGMENT_SIZE-1) + 1); //subtracting 1 since the last Tframe is not detected
krishanprajapat 0:984643af7d81 87
krishanprajapat 0:984643af7d81 88 }
krishanprajapat 0:984643af7d81 89
krishanprajapat 0:984643af7d81 90
krishanprajapat 0:984643af7d81 91 TM_list* next_type_structure(TM_list *ptr){
krishanprajapat 0:984643af7d81 92
krishanprajapat 0:984643af7d81 93 if(ptr == NULL){
krishanprajapat 0:984643af7d81 94 return NULL;
krishanprajapat 0:984643af7d81 95 }
krishanprajapat 0:984643af7d81 96
krishanprajapat 0:984643af7d81 97 int temp = decide_type(ptr->tmid);
krishanprajapat 0:984643af7d81 98
krishanprajapat 0:984643af7d81 99 if((temp == 0) && (ptr->next_TM != NULL) ){
krishanprajapat 0:984643af7d81 100
krishanprajapat 0:984643af7d81 101 do{
krishanprajapat 0:984643af7d81 102 ptr = ptr->next_TM;
krishanprajapat 0:984643af7d81 103 temp = decide_type(ptr->tmid);
krishanprajapat 0:984643af7d81 104 }
krishanprajapat 0:984643af7d81 105 while(temp == 1 && ptr->next_TM != NULL);
krishanprajapat 0:984643af7d81 106
krishanprajapat 0:984643af7d81 107 if(temp == 1){
krishanprajapat 0:984643af7d81 108 return NULL;
krishanprajapat 0:984643af7d81 109 }
krishanprajapat 0:984643af7d81 110
krishanprajapat 0:984643af7d81 111 }
krishanprajapat 0:984643af7d81 112
krishanprajapat 0:984643af7d81 113 else if((temp == 1) && (ptr->next_TM != NULL)){
krishanprajapat 0:984643af7d81 114
krishanprajapat 0:984643af7d81 115 do{
krishanprajapat 0:984643af7d81 116 ptr = ptr->next_TM;
krishanprajapat 0:984643af7d81 117 temp = decide_type(ptr->tmid);
krishanprajapat 0:984643af7d81 118 }
krishanprajapat 0:984643af7d81 119 while(temp == 0 && ptr->next_TM != NULL);
krishanprajapat 0:984643af7d81 120
krishanprajapat 0:984643af7d81 121 if(temp == 0){
krishanprajapat 0:984643af7d81 122 return NULL;
krishanprajapat 0:984643af7d81 123 }
krishanprajapat 0:984643af7d81 124
krishanprajapat 0:984643af7d81 125
krishanprajapat 0:984643af7d81 126 }
krishanprajapat 0:984643af7d81 127
krishanprajapat 0:984643af7d81 128 else{
krishanprajapat 0:984643af7d81 129
krishanprajapat 0:984643af7d81 130 // cout<<"\nNULL returned by next_type_structure\n";
krishanprajapat 0:984643af7d81 131 return NULL;
krishanprajapat 0:984643af7d81 132
krishanprajapat 0:984643af7d81 133 }
krishanprajapat 0:984643af7d81 134 return ptr;
krishanprajapat 0:984643af7d81 135 }
krishanprajapat 0:984643af7d81 136
krishanprajapat 0:984643af7d81 137 /*
krishanprajapat 0:984643af7d81 138 brief: take input type 0 or 1 and return the address of the first node in the list that have that type
krishanprajapat 0:984643af7d81 139 parameter: type 0 or 1
krishanprajapat 0:984643af7d81 140 return: pointer of the first node having same type
krishanprajapat 0:984643af7d81 141 */
krishanprajapat 0:984643af7d81 142 TM_list* first_type_structure(int type){
krishanprajapat 0:984643af7d81 143 TM_list* temp_ptr = list_ptr;
krishanprajapat 0:984643af7d81 144
krishanprajapat 0:984643af7d81 145 if(type == 0){
krishanprajapat 0:984643af7d81 146 while((decide_type(temp_ptr->tmid) == 1)){
krishanprajapat 0:984643af7d81 147 temp_ptr = temp_ptr->next_TM;
krishanprajapat 0:984643af7d81 148
krishanprajapat 0:984643af7d81 149 if(temp_ptr == NULL){
krishanprajapat 0:984643af7d81 150 return NULL ;
krishanprajapat 0:984643af7d81 151 }
krishanprajapat 0:984643af7d81 152 }
krishanprajapat 0:984643af7d81 153 }
krishanprajapat 0:984643af7d81 154
krishanprajapat 0:984643af7d81 155 else if(type == 1){
krishanprajapat 0:984643af7d81 156 while((decide_type(temp_ptr->tmid) == 0) ){
krishanprajapat 0:984643af7d81 157 temp_ptr = temp_ptr->next_TM;
krishanprajapat 0:984643af7d81 158
krishanprajapat 0:984643af7d81 159 if(temp_ptr == NULL){
krishanprajapat 0:984643af7d81 160 return NULL;
krishanprajapat 0:984643af7d81 161 }
krishanprajapat 0:984643af7d81 162 }
krishanprajapat 0:984643af7d81 163 }
krishanprajapat 0:984643af7d81 164 return temp_ptr;
krishanprajapat 0:984643af7d81 165 }
krishanprajapat 0:984643af7d81 166
krishanprajapat 0:984643af7d81 167 unsigned char TMframe_type1[TM_FRAME_SIZE];
krishanprajapat 0:984643af7d81 168 bool type1_frame_flag; //should be true for every new list
krishanprajapat 0:984643af7d81 169
krishanprajapat 0:984643af7d81 170 unsigned char * type1_frame(){
krishanprajapat 0:984643af7d81 171
krishanprajapat 0:984643af7d81 172 int i;
krishanprajapat 0:984643af7d81 173 static TM_list *pointer ;
krishanprajapat 0:984643af7d81 174 static int counter = 0;
krishanprajapat 0:984643af7d81 175
krishanprajapat 0:984643af7d81 176 if(type1_frame_flag){
krishanprajapat 0:984643af7d81 177 pointer = first_type_structure(1);
krishanprajapat 0:984643af7d81 178 counter = 0;
krishanprajapat 0:984643af7d81 179 type1_frame_flag = false;
krishanprajapat 0:984643af7d81 180 }
krishanprajapat 0:984643af7d81 181
krishanprajapat 0:984643af7d81 182
krishanprajapat 0:984643af7d81 183
krishanprajapat 0:984643af7d81 184 for(i = 4 ; (i < 134) && (pointer != NULL) ; i++){
krishanprajapat 0:984643af7d81 185 TMframe_type1[i] = pointer->TM_string[counter];
krishanprajapat 0:984643af7d81 186
krishanprajapat 0:984643af7d81 187 if(counter++ == 12){
krishanprajapat 0:984643af7d81 188 counter = 0;
krishanprajapat 0:984643af7d81 189 pointer = next_type_structure(pointer);
krishanprajapat 0:984643af7d81 190 }
krishanprajapat 0:984643af7d81 191 }
krishanprajapat 0:984643af7d81 192
krishanprajapat 0:984643af7d81 193 // header
krishanprajapat 0:984643af7d81 194 TMframe_type1[0] = 1<<7 + ( (i-4)/10 )<<3; //( (i-4)/10 ) gives number of packets in the frame
krishanprajapat 0:984643af7d81 195 //insert time ;
krishanprajapat 0:984643af7d81 196 TMframe_type1[3] = CRC::crc16_gen(TMframe_type1,3);
krishanprajapat 0:984643af7d81 197 //end header
krishanprajapat 0:984643af7d81 198
krishanprajapat 0:984643af7d81 199 if(pointer == NULL){
krishanprajapat 0:984643af7d81 200 for( ; i < 134 ; i++){ //repeating ;ast packet to fill up the extra space
krishanprajapat 0:984643af7d81 201 TMframe_type1[i] = TMframe_type1[i-13];
krishanprajapat 0:984643af7d81 202 }
krishanprajapat 0:984643af7d81 203
krishanprajapat 0:984643af7d81 204 }
krishanprajapat 0:984643af7d81 205 return TMframe_type1;
krishanprajapat 0:984643af7d81 206
krishanprajapat 0:984643af7d81 207 }
krishanprajapat 0:984643af7d81 208
krishanprajapat 0:984643af7d81 209 bool type0_frame_flag;
krishanprajapat 0:984643af7d81 210
krishanprajapat 0:984643af7d81 211 unsigned char* type0_frame(){
krishanprajapat 0:984643af7d81 212 static TM_list *pointer ;
krishanprajapat 0:984643af7d81 213
krishanprajapat 0:984643af7d81 214 if(type0_frame_flag){
krishanprajapat 0:984643af7d81 215 pointer = first_type_structure(0);
krishanprajapat 0:984643af7d81 216 type0_frame_flag = false;
krishanprajapat 0:984643af7d81 217 }
krishanprajapat 0:984643af7d81 218
krishanprajapat 0:984643af7d81 219 else {
krishanprajapat 0:984643af7d81 220 pointer = next_type_structure(pointer);
krishanprajapat 0:984643af7d81 221
krishanprajapat 0:984643af7d81 222 }
krishanprajapat 0:984643af7d81 223 return pointer->TM_string;
krishanprajapat 0:984643af7d81 224 }
krishanprajapat 0:984643af7d81 225
krishanprajapat 0:984643af7d81 226
krishanprajapat 0:984643af7d81 227
krishanprajapat 0:984643af7d81 228 void interleave( unsigned char *input, unsigned char *output ){
krishanprajapat 0:984643af7d81 229
krishanprajapat 0:984643af7d81 230 unsigned int outState = 0;
krishanprajapat 0:984643af7d81 231 unsigned int outByte = 0;
krishanprajapat 0:984643af7d81 232
krishanprajapat 0:984643af7d81 233 for( unsigned int i = 0 ; i < 36 ; ++i ){
krishanprajapat 0:984643af7d81 234 for(unsigned int j = 0 ; j < 30 ; ++j){
krishanprajapat 0:984643af7d81 235 unsigned int x = j*36+i;
krishanprajapat 0:984643af7d81 236 unsigned char tempBit = ((input[x >> 3]) >> (7-(x % 8))) & 1;
krishanprajapat 0:984643af7d81 237 switch(outState){
krishanprajapat 0:984643af7d81 238 case 0:
krishanprajapat 0:984643af7d81 239 outState = 1;
krishanprajapat 0:984643af7d81 240 output[outByte] = tempBit << 7;
krishanprajapat 0:984643af7d81 241 break;
krishanprajapat 0:984643af7d81 242 case 1:
krishanprajapat 0:984643af7d81 243 outState = 2;
krishanprajapat 0:984643af7d81 244 output[outByte] += tempBit << 6;
krishanprajapat 0:984643af7d81 245 break;
krishanprajapat 0:984643af7d81 246 case 2:
krishanprajapat 0:984643af7d81 247 outState = 3;
krishanprajapat 0:984643af7d81 248 output[outByte] += tempBit << 5;
krishanprajapat 0:984643af7d81 249 break;
krishanprajapat 0:984643af7d81 250 case 3:
krishanprajapat 0:984643af7d81 251 outState = 4;
krishanprajapat 0:984643af7d81 252 output[outByte] += tempBit << 4;
krishanprajapat 0:984643af7d81 253 break;
krishanprajapat 0:984643af7d81 254 case 4:
krishanprajapat 0:984643af7d81 255 outState = 5;
krishanprajapat 0:984643af7d81 256 output[outByte] += tempBit << 3;
krishanprajapat 0:984643af7d81 257 break;
krishanprajapat 0:984643af7d81 258 case 5:
krishanprajapat 0:984643af7d81 259 outState = 6;
krishanprajapat 0:984643af7d81 260 output[outByte] += tempBit << 2;
krishanprajapat 0:984643af7d81 261 break;
krishanprajapat 0:984643af7d81 262 case 6:
krishanprajapat 0:984643af7d81 263 outState = 7;
krishanprajapat 0:984643af7d81 264 output[outByte] += tempBit << 1;
krishanprajapat 0:984643af7d81 265 break;
krishanprajapat 0:984643af7d81 266 case 7:
krishanprajapat 0:984643af7d81 267 outState = 0;
krishanprajapat 0:984643af7d81 268 output[outByte] += tempBit;
krishanprajapat 0:984643af7d81 269 ++outByte;
krishanprajapat 0:984643af7d81 270 break;
krishanprajapat 0:984643af7d81 271 }
krishanprajapat 0:984643af7d81 272 }
krishanprajapat 0:984643af7d81 273 for(unsigned int j = 0 ; j < 2 ; ++j){
krishanprajapat 0:984643af7d81 274 switch(outState){
krishanprajapat 0:984643af7d81 275 case 0:
krishanprajapat 0:984643af7d81 276 output[outByte] = 0;
krishanprajapat 0:984643af7d81 277 outState = 1;
krishanprajapat 0:984643af7d81 278 break;
krishanprajapat 0:984643af7d81 279 case 1:
krishanprajapat 0:984643af7d81 280 outState = 2;
krishanprajapat 0:984643af7d81 281 break;
krishanprajapat 0:984643af7d81 282 case 2:
krishanprajapat 0:984643af7d81 283 outState = 3;
krishanprajapat 0:984643af7d81 284 break;
krishanprajapat 0:984643af7d81 285 case 3:
krishanprajapat 0:984643af7d81 286 outState = 4;
krishanprajapat 0:984643af7d81 287 break;
krishanprajapat 0:984643af7d81 288 case 4:
krishanprajapat 0:984643af7d81 289 outState = 5;
krishanprajapat 0:984643af7d81 290 break;
krishanprajapat 0:984643af7d81 291 case 5:
krishanprajapat 0:984643af7d81 292 outState = 6;
krishanprajapat 0:984643af7d81 293 break;
krishanprajapat 0:984643af7d81 294 case 6:
krishanprajapat 0:984643af7d81 295 outState = 7;
krishanprajapat 0:984643af7d81 296 break;
krishanprajapat 0:984643af7d81 297 case 7:
krishanprajapat 0:984643af7d81 298 outState = 0;
krishanprajapat 0:984643af7d81 299 ++outByte;
krishanprajapat 0:984643af7d81 300 break;
krishanprajapat 0:984643af7d81 301 }
krishanprajapat 0:984643af7d81 302 }
krishanprajapat 0:984643af7d81 303 }
krishanprajapat 0:984643af7d81 304 }
krishanprajapat 0:984643af7d81 305
krishanprajapat 0:984643af7d81 306
krishanprajapat 0:984643af7d81 307
krishanprajapat 0:984643af7d81 308 public:
krishanprajapat 0:984643af7d81 309
krishanprajapat 0:984643af7d81 310 bool give_buffer ;
krishanprajapat 0:984643af7d81 311 bool transmission_done;
krishanprajapat 0:984643af7d81 312 unsigned char S_frame[S_FRAME_SIZE];
krishanprajapat 0:984643af7d81 313 unsigned char EoS[EoS_SIZE];
krishanprajapat 0:984643af7d81 314 SND_TM(){
krishanprajapat 0:984643af7d81 315
krishanprajapat 0:984643af7d81 316 // list_ptr = x;
krishanprajapat 0:984643af7d81 317
krishanprajapat 0:984643af7d81 318 diff_prev = 0;
krishanprajapat 0:984643af7d81 319
krishanprajapat 0:984643af7d81 320 type0_no= 0;
krishanprajapat 0:984643af7d81 321 type1_no= 0;
krishanprajapat 0:984643af7d81 322 //~ S-FRAME
krishanprajapat 0:984643af7d81 323 //~ SCH_64 * 2
krishanprajapat 0:984643af7d81 324 S_frame[0] = 0x46;
krishanprajapat 0:984643af7d81 325 S_frame[1] = 0x9d;
krishanprajapat 0:984643af7d81 326 S_frame[2] = 0xfb;
krishanprajapat 0:984643af7d81 327 S_frame[3] = 0xf0;
krishanprajapat 0:984643af7d81 328 S_frame[4] = 0xd2;
krishanprajapat 0:984643af7d81 329 S_frame[5] = 0xba;
krishanprajapat 0:984643af7d81 330 S_frame[6] = 0x89;
krishanprajapat 0:984643af7d81 331 S_frame[7] = 0xe4;
krishanprajapat 0:984643af7d81 332
krishanprajapat 0:984643af7d81 333 S_frame[8] = 0x46;
krishanprajapat 0:984643af7d81 334 S_frame[9] = 0x9d;
krishanprajapat 0:984643af7d81 335 S_frame[10] = 0xfb;
krishanprajapat 0:984643af7d81 336 S_frame[11] = 0xf0;
krishanprajapat 0:984643af7d81 337 S_frame[12] = 0xd2;
krishanprajapat 0:984643af7d81 338 S_frame[13] = 0xba;
krishanprajapat 0:984643af7d81 339 S_frame[14] = 0x89;
krishanprajapat 0:984643af7d81 340 S_frame[15] = 0xe4;
krishanprajapat 0:984643af7d81 341
krishanprajapat 0:984643af7d81 342 //~ FCCH
krishanprajapat 0:984643af7d81 343 for(int i = 16 ; i < 48 ; ++i ){
krishanprajapat 0:984643af7d81 344 S_frame[i] = 0x00;
krishanprajapat 0:984643af7d81 345 }
krishanprajapat 0:984643af7d81 346
krishanprajapat 0:984643af7d81 347
krishanprajapat 0:984643af7d81 348 for(int i = 0 ; i < 24 ; ++i){
krishanprajapat 0:984643af7d81 349 EoS[i] = 0x00;
krishanprajapat 0:984643af7d81 350 }
krishanprajapat 0:984643af7d81 351
krishanprajapat 0:984643af7d81 352 //~ S-FRAME [1]
krishanprajapat 0:984643af7d81 353 //~ first two bits of S-FRAME
krishanprajapat 0:984643af7d81 354 EoS[23] = 0x01;
krishanprajapat 0:984643af7d81 355
krishanprajapat 0:984643af7d81 356 EoS[24] = 0x1a;
krishanprajapat 0:984643af7d81 357 EoS[25] = 0x77;
krishanprajapat 0:984643af7d81 358 EoS[26] = 0xef;
krishanprajapat 0:984643af7d81 359 EoS[27] = 0xc3;
krishanprajapat 0:984643af7d81 360 EoS[28] = 0x4a;
krishanprajapat 0:984643af7d81 361 EoS[29] = 0xea;
krishanprajapat 0:984643af7d81 362 EoS[30] = 0x27;
krishanprajapat 0:984643af7d81 363 EoS[31] = 0x91;
krishanprajapat 0:984643af7d81 364 EoS[32] = 0x1a;
krishanprajapat 0:984643af7d81 365 EoS[33] = 0x77;
krishanprajapat 0:984643af7d81 366 EoS[34] = 0xef;
krishanprajapat 0:984643af7d81 367 EoS[35] = 0xc3;
krishanprajapat 0:984643af7d81 368 EoS[36] = 0x4a;
krishanprajapat 0:984643af7d81 369 EoS[37] = 0xea;
krishanprajapat 0:984643af7d81 370 EoS[38] = 0x27;
krishanprajapat 0:984643af7d81 371 EoS[39] = 0x90;
krishanprajapat 0:984643af7d81 372
krishanprajapat 0:984643af7d81 373 for(int i = 40 ; i < 72 ; ++i){
krishanprajapat 0:984643af7d81 374 EoS[i] = 0x00;
krishanprajapat 0:984643af7d81 375 }
krishanprajapat 0:984643af7d81 376
krishanprajapat 0:984643af7d81 377 //~ S-FRAME [2]
krishanprajapat 0:984643af7d81 378 //~ first two bits of S-FRAME
krishanprajapat 0:984643af7d81 379 EoS[71] = 0x01;
krishanprajapat 0:984643af7d81 380
krishanprajapat 0:984643af7d81 381 EoS[72] = 0x1a;
krishanprajapat 0:984643af7d81 382 EoS[73] = 0x77;
krishanprajapat 0:984643af7d81 383 EoS[74] = 0xef;
krishanprajapat 0:984643af7d81 384 EoS[75] = 0xc3;
krishanprajapat 0:984643af7d81 385 EoS[76] = 0x4a;
krishanprajapat 0:984643af7d81 386 EoS[77] = 0xea;
krishanprajapat 0:984643af7d81 387 EoS[78] = 0x27;
krishanprajapat 0:984643af7d81 388 EoS[79] = 0x91;
krishanprajapat 0:984643af7d81 389 EoS[80] = 0x1a;
krishanprajapat 0:984643af7d81 390 EoS[81] = 0x77;
krishanprajapat 0:984643af7d81 391 EoS[82] = 0xef;
krishanprajapat 0:984643af7d81 392 EoS[83] = 0xc3;
krishanprajapat 0:984643af7d81 393 EoS[84] = 0x4a;
krishanprajapat 0:984643af7d81 394 EoS[85] = 0xea;
krishanprajapat 0:984643af7d81 395 EoS[86] = 0x27;
krishanprajapat 0:984643af7d81 396 EoS[87] = 0x90;
krishanprajapat 0:984643af7d81 397
krishanprajapat 0:984643af7d81 398 for(int i = 88 ; i < 120 ; ++i){
krishanprajapat 0:984643af7d81 399 EoS[i] = 0x00;
krishanprajapat 0:984643af7d81 400 }
krishanprajapat 0:984643af7d81 401
krishanprajapat 0:984643af7d81 402 for(int i = 0 ; i < 10 ; ++i){
krishanprajapat 0:984643af7d81 403 FCCH80[i] = 0x00;
krishanprajapat 0:984643af7d81 404 }
krishanprajapat 0:984643af7d81 405
krishanprajapat 0:984643af7d81 406 SCH40[0] = 0x0a;
krishanprajapat 0:984643af7d81 407 SCH40[1] = 0x3f;
krishanprajapat 0:984643af7d81 408 SCH40[2] = 0x46;
krishanprajapat 0:984643af7d81 409 SCH40[3] = 0xb4;
krishanprajapat 0:984643af7d81 410 SCH40[4] = 0x00;
krishanprajapat 0:984643af7d81 411
krishanprajapat 0:984643af7d81 412 // give_buffer = false;
krishanprajapat 0:984643af7d81 413 transmission_done=false;
krishanprajapat 0:984643af7d81 414
krishanprajapat 0:984643af7d81 415 }
krishanprajapat 0:984643af7d81 416
krishanprajapat 0:984643af7d81 417 void head_pointer(TM_list * ptr){
krishanprajapat 0:984643af7d81 418 list_ptr = ptr ;
krishanprajapat 0:984643af7d81 419 type1_frame_flag = true;
krishanprajapat 0:984643af7d81 420 type0_frame_flag = true;
krishanprajapat 0:984643af7d81 421 make_DataStream_flag = true;
krishanprajapat 0:984643af7d81 422 transmit_data_flag = true;
krishanprajapat 0:984643af7d81 423 transmission_done=false;
krishanprajapat 0:984643af7d81 424 adf_not_SDcard();
krishanprajapat 0:984643af7d81 425 }
krishanprajapat 0:984643af7d81 426
krishanprajapat 0:984643af7d81 427 unsigned char convoluted_frame[270];
krishanprajapat 0:984643af7d81 428
krishanprajapat 0:984643af7d81 429 Convolution ConvObj;
krishanprajapat 0:984643af7d81 430
krishanprajapat 0:984643af7d81 431 void convolution (unsigned char * ptr){
krishanprajapat 0:984643af7d81 432
krishanprajapat 0:984643af7d81 433 ConvObj.convolutionEncode(ptr, convoluted_frame);
krishanprajapat 0:984643af7d81 434 ConvObj.convolutionEncode(ptr + 67, convoluted_frame + 135);
krishanprajapat 0:984643af7d81 435 }
krishanprajapat 0:984643af7d81 436
krishanprajapat 0:984643af7d81 437 unsigned char interleave_data[2][144]; //initialize to zero how;
krishanprajapat 0:984643af7d81 438
krishanprajapat 0:984643af7d81 439 bool make_DataStream_flag;
krishanprajapat 0:984643af7d81 440
krishanprajapat 0:984643af7d81 441 int make_DataStream(){
krishanprajapat 0:984643af7d81 442 static bool state = true;
krishanprajapat 0:984643af7d81 443 static int counter = 0;
krishanprajapat 0:984643af7d81 444 static unsigned char * ptr;
krishanprajapat 0:984643af7d81 445 static bool flag = false;
krishanprajapat 0:984643af7d81 446
krishanprajapat 0:984643af7d81 447 if(make_DataStream_flag){
krishanprajapat 0:984643af7d81 448 data_number();
krishanprajapat 0:984643af7d81 449 state = true;
krishanprajapat 0:984643af7d81 450 counter = 0;
krishanprajapat 0:984643af7d81 451 flag = false;
krishanprajapat 0:984643af7d81 452 make_DataStream_flag = false;
krishanprajapat 0:984643af7d81 453 }
krishanprajapat 0:984643af7d81 454
krishanprajapat 0:984643af7d81 455 if(state){
krishanprajapat 0:984643af7d81 456
krishanprajapat 0:984643af7d81 457 if(counter < type0_no){
krishanprajapat 0:984643af7d81 458 ptr = type0_frame();
krishanprajapat 0:984643af7d81 459 flag = true;
krishanprajapat 0:984643af7d81 460
krishanprajapat 0:984643af7d81 461 }
krishanprajapat 0:984643af7d81 462
krishanprajapat 0:984643af7d81 463 else if(counter < total_frames ){
krishanprajapat 0:984643af7d81 464 ptr = type1_frame();
krishanprajapat 0:984643af7d81 465 flag = true;
krishanprajapat 0:984643af7d81 466 }
krishanprajapat 0:984643af7d81 467
krishanprajapat 0:984643af7d81 468 counter++;
krishanprajapat 0:984643af7d81 469
krishanprajapat 0:984643af7d81 470 }
krishanprajapat 0:984643af7d81 471
krishanprajapat 0:984643af7d81 472 state = !state;
krishanprajapat 0:984643af7d81 473
krishanprajapat 0:984643af7d81 474 if (flag){
krishanprajapat 0:984643af7d81 475 // cout<<"i m here";
krishanprajapat 0:984643af7d81 476
krishanprajapat 0:984643af7d81 477 // printf("------inside convolution\r\n");
krishanprajapat 0:984643af7d81 478 convolution(ptr);
krishanprajapat 0:984643af7d81 479 // printf("-------out of convolution\n");
krishanprajapat 0:984643af7d81 480 interleave(convoluted_frame,interleave_data[0]);
krishanprajapat 0:984643af7d81 481 interleave(convoluted_frame+ 135,interleave_data[1]);
krishanprajapat 0:984643af7d81 482 // printf("completed intrleave\n");
krishanprajapat 0:984643af7d81 483 flag = false;
krishanprajapat 0:984643af7d81 484
krishanprajapat 0:984643af7d81 485 }
krishanprajapat 0:984643af7d81 486
krishanprajapat 0:984643af7d81 487
krishanprajapat 0:984643af7d81 488 int temp = (state == false) ? 0 : 1 ;
krishanprajapat 0:984643af7d81 489
krishanprajapat 0:984643af7d81 490 return temp;
krishanprajapat 0:984643af7d81 491
krishanprajapat 0:984643af7d81 492 }
krishanprajapat 0:984643af7d81 493
krishanprajapat 0:984643af7d81 494 //112 bytes - half rolling buffer
krishanprajapat 0:984643af7d81 495 bool transmit_data_flag;
krishanprajapat 0:984643af7d81 496
krishanprajapat 0:984643af7d81 497 void transmit_data(unsigned char * transmit , bool * last_buffer){
krishanprajapat 0:984643af7d81 498 static int Tframe_counter = 0; //contains the number of Tframes in a segment had been written
krishanprajapat 0:984643af7d81 499 static int EOS_counter = 0; //count no of byres of eos have been weitten in the buffer
krishanprajapat 0:984643af7d81 500 static int Sframe_Counter = 0;
krishanprajapat 0:984643af7d81 501 static int SCH40_counter = 0;
krishanprajapat 0:984643af7d81 502 static int string_space_counter = 0;
krishanprajapat 0:984643af7d81 503 static int FCCH80_counter = 0;
krishanprajapat 0:984643af7d81 504 int rolling_buffer_counter = 0; //maximum it can be 1152 bits
krishanprajapat 0:984643af7d81 505 static bool Sframe_flag = true;
krishanprajapat 0:984643af7d81 506 static bool new_Tframe_flag = false;
krishanprajapat 0:984643af7d81 507 static bool FCCH80_flag = false;
krishanprajapat 0:984643af7d81 508 static bool data_flag = false;
krishanprajapat 0:984643af7d81 509 static int i;
krishanprajapat 0:984643af7d81 510 static bool repete_data_flag = false;
krishanprajapat 0:984643af7d81 511 static int segment_counter = 0;
krishanprajapat 0:984643af7d81 512 static bool diff_enc_flag = false;
krishanprajapat 0:984643af7d81 513
krishanprajapat 0:984643af7d81 514 if(transmit_data_flag){
krishanprajapat 0:984643af7d81 515 rolling_buffer_counter = 0;
krishanprajapat 0:984643af7d81 516 Sframe_Counter = 0;
krishanprajapat 0:984643af7d81 517 SCH40_counter = 0;
krishanprajapat 0:984643af7d81 518 FCCH80_counter = 0;
krishanprajapat 0:984643af7d81 519 Tframe_counter = 0;
krishanprajapat 0:984643af7d81 520 EOS_counter = 0;
krishanprajapat 0:984643af7d81 521 segment_counter = 0;
krishanprajapat 0:984643af7d81 522 string_space_counter = 0;
krishanprajapat 0:984643af7d81 523
krishanprajapat 0:984643af7d81 524 Sframe_flag = true;
krishanprajapat 0:984643af7d81 525 new_Tframe_flag = false;
krishanprajapat 0:984643af7d81 526 repete_data_flag = false;
krishanprajapat 0:984643af7d81 527 data_flag = false;
krishanprajapat 0:984643af7d81 528 FCCH80_flag = false;
krishanprajapat 0:984643af7d81 529 transmit_data_flag = false;
krishanprajapat 0:984643af7d81 530 diff_enc_flag = false;
krishanprajapat 0:984643af7d81 531 }
krishanprajapat 0:984643af7d81 532
krishanprajapat 0:984643af7d81 533 for(rolling_buffer_counter = 0 ; rolling_buffer_counter<112 ; rolling_buffer_counter++){
krishanprajapat 0:984643af7d81 534
krishanprajapat 0:984643af7d81 535 if(diff_enc_flag){
krishanprajapat 0:984643af7d81 536 transmit[rolling_buffer_counter] = 0;
krishanprajapat 0:984643af7d81 537 continue;
krishanprajapat 0:984643af7d81 538 }
krishanprajapat 0:984643af7d81 539
krishanprajapat 0:984643af7d81 540 if(Sframe_flag){
krishanprajapat 0:984643af7d81 541 transmit[rolling_buffer_counter] = S_frame[Sframe_Counter++];
krishanprajapat 0:984643af7d81 542
krishanprajapat 0:984643af7d81 543 if(Sframe_Counter == 48){
krishanprajapat 0:984643af7d81 544 // printf("sframe quit\n");
krishanprajapat 0:984643af7d81 545 Sframe_Counter = 0;
krishanprajapat 0:984643af7d81 546 Sframe_flag = false;
krishanprajapat 0:984643af7d81 547 new_Tframe_flag =true;
krishanprajapat 0:984643af7d81 548 }
krishanprajapat 0:984643af7d81 549
krishanprajapat 0:984643af7d81 550 }
krishanprajapat 0:984643af7d81 551
krishanprajapat 0:984643af7d81 552 else if(new_Tframe_flag){
krishanprajapat 0:984643af7d81 553 transmit[rolling_buffer_counter] = SCH40[SCH40_counter++];
krishanprajapat 0:984643af7d81 554
krishanprajapat 0:984643af7d81 555 if(SCH40_counter == 5 ){
krishanprajapat 0:984643af7d81 556 SCH40_counter = 0;
krishanprajapat 0:984643af7d81 557 new_Tframe_flag = false;
krishanprajapat 0:984643af7d81 558 // printf("new Tframe flag quit\n");
krishanprajapat 0:984643af7d81 559 // data_flag = (Tframe_counter == 38)? false : true;
krishanprajapat 0:984643af7d81 560 // put_F = !data_flag;
krishanprajapat 0:984643af7d81 561
krishanprajapat 0:984643af7d81 562 repete_data_flag = (Tframe_counter == SEGMENT_SIZE -1)?true:false;
krishanprajapat 0:984643af7d81 563 data_flag = !repete_data_flag;
krishanprajapat 0:984643af7d81 564
krishanprajapat 0:984643af7d81 565 }
krishanprajapat 0:984643af7d81 566
krishanprajapat 0:984643af7d81 567 }
krishanprajapat 0:984643af7d81 568
krishanprajapat 0:984643af7d81 569 else if(data_flag){
krishanprajapat 0:984643af7d81 570
krishanprajapat 0:984643af7d81 571 if(!string_space_counter ){
krishanprajapat 0:984643af7d81 572 i = make_DataStream();
krishanprajapat 0:984643af7d81 573 }
krishanprajapat 0:984643af7d81 574
krishanprajapat 0:984643af7d81 575 transmit[rolling_buffer_counter] = interleave_data[i][string_space_counter++];
krishanprajapat 0:984643af7d81 576 if(string_space_counter == 144){
krishanprajapat 0:984643af7d81 577 // printf("data_flag quit\n");
krishanprajapat 0:984643af7d81 578 string_space_counter = 0;
krishanprajapat 0:984643af7d81 579 FCCH80_flag = true;
krishanprajapat 0:984643af7d81 580 data_flag = false;
krishanprajapat 0:984643af7d81 581 }
krishanprajapat 0:984643af7d81 582
krishanprajapat 0:984643af7d81 583 }
krishanprajapat 0:984643af7d81 584
krishanprajapat 0:984643af7d81 585 else if(repete_data_flag){
krishanprajapat 0:984643af7d81 586 transmit[rolling_buffer_counter] = interleave_data[i][string_space_counter];;
krishanprajapat 0:984643af7d81 587 if(++string_space_counter == 144){
krishanprajapat 0:984643af7d81 588 repete_data_flag = false;
krishanprajapat 0:984643af7d81 589 FCCH80_flag = true;
krishanprajapat 0:984643af7d81 590 string_space_counter = 0;
krishanprajapat 0:984643af7d81 591 // cout<<"repete_data_flag quit\n";
krishanprajapat 0:984643af7d81 592 }
krishanprajapat 0:984643af7d81 593 }
krishanprajapat 0:984643af7d81 594
krishanprajapat 0:984643af7d81 595 else if(FCCH80_flag){
krishanprajapat 0:984643af7d81 596
krishanprajapat 0:984643af7d81 597 transmit[rolling_buffer_counter] = FCCH80[FCCH80_counter++];
krishanprajapat 0:984643af7d81 598 // cout<<FCCH80_counter;
krishanprajapat 0:984643af7d81 599 if(FCCH80_counter == 10){
krishanprajapat 0:984643af7d81 600 // printf("FCCH80 quit\n");
krishanprajapat 0:984643af7d81 601 FCCH80_counter = 0;
krishanprajapat 0:984643af7d81 602 FCCH80_flag = false;
krishanprajapat 0:984643af7d81 603
krishanprajapat 0:984643af7d81 604 if(++Tframe_counter != SEGMENT_SIZE)
krishanprajapat 0:984643af7d81 605 new_Tframe_flag = true;
krishanprajapat 0:984643af7d81 606
krishanprajapat 0:984643af7d81 607 }
krishanprajapat 0:984643af7d81 608
krishanprajapat 0:984643af7d81 609 }
krishanprajapat 0:984643af7d81 610
krishanprajapat 0:984643af7d81 611
krishanprajapat 0:984643af7d81 612
krishanprajapat 0:984643af7d81 613 else if(Tframe_counter == SEGMENT_SIZE){
krishanprajapat 0:984643af7d81 614
krishanprajapat 0:984643af7d81 615 transmit[rolling_buffer_counter] = EoS[EOS_counter++];
krishanprajapat 0:984643af7d81 616
krishanprajapat 0:984643af7d81 617 if(EOS_counter == 120){
krishanprajapat 0:984643af7d81 618 diff_enc_flag = true;
krishanprajapat 0:984643af7d81 619 Tframe_counter = 0;
krishanprajapat 0:984643af7d81 620 EOS_counter = 0;
krishanprajapat 0:984643af7d81 621
krishanprajapat 0:984643af7d81 622 if(++segment_counter == segment_no){
krishanprajapat 0:984643af7d81 623 // cout<<"transmit_counter = "<<++transmit_counter;
krishanprajapat 0:984643af7d81 624 *last_buffer = true;
krishanprajapat 0:984643af7d81 625 break;
krishanprajapat 0:984643af7d81 626
krishanprajapat 0:984643af7d81 627 }
krishanprajapat 0:984643af7d81 628 else{
krishanprajapat 0:984643af7d81 629 Sframe_flag = true;
krishanprajapat 0:984643af7d81 630 continue;
krishanprajapat 0:984643af7d81 631 }
krishanprajapat 0:984643af7d81 632
krishanprajapat 0:984643af7d81 633 }
krishanprajapat 0:984643af7d81 634 continue;
krishanprajapat 0:984643af7d81 635 }
krishanprajapat 0:984643af7d81 636
krishanprajapat 0:984643af7d81 637 }
krishanprajapat 0:984643af7d81 638
krishanprajapat 0:984643af7d81 639
krishanprajapat 0:984643af7d81 640
krishanprajapat 0:984643af7d81 641 differential_encode(transmit,112);
krishanprajapat 0:984643af7d81 642
krishanprajapat 0:984643af7d81 643 if(diff_enc_flag){
krishanprajapat 0:984643af7d81 644 diff_prev = 0;
krishanprajapat 0:984643af7d81 645 diff_enc_flag = false;
krishanprajapat 0:984643af7d81 646 Sframe_flag = true;
krishanprajapat 0:984643af7d81 647
krishanprajapat 0:984643af7d81 648 }
krishanprajapat 0:984643af7d81 649
krishanprajapat 0:984643af7d81 650 }
krishanprajapat 0:984643af7d81 651
krishanprajapat 0:984643af7d81 652 }snd_tm;