samp Srinivasan / Mbed 2 deprecated CDMS_CODE_FROM13JAN2017

Dependencies:   FreescaleIAP SimpleDMA mbed-rtos mbed

Fork of CDMS_CODE by shubham c

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers OBSRS.h Source File

OBSRS.h

00001 // problem in check pa and valid sid not sending anything in one for loop
00002 
00003 #ifndef OBSRS_H    // To make sure you don't declare the function more than once by including the header multiple times.
00004 #define OBSRS_H
00005 
00006 // no error            case 2 ackl234new->TM_string[2] = (101_0000) = 0x_0;     spare = 0  10100000 =  0xA0
00007 // Hardware failure    Case 4 ackl234new->TM_string[2] = (100_0101) = 0x_5;     spare = 0  10000101 =  0x85 comes from cdms ask pradeep
00008 // Invalid FSC         Case 4 ackl234new->TM_string[2] = (100_0110) = 0x_6;     spare = 0  10000110 =  0x86 Invalid FSC
00009 // Illegal TC          Case 3 ackl234new->TM_string[2] = (000_0010) = 0x_2;     spare = 0  00000010 =  0x02 invalid SID
00010 
00011 #define TMID_ACK_L234 0xB
00012 #define T_frames_in_segment 40
00013 
00014 using namespace std;
00015 Base_tc *current_obsrs_tc = NULL;   
00016 Base_tm *callsign = NULL;
00017 bool send_EoS_and_stop = false;
00018 bool adf_limit = false;
00019 bool stop = false;
00020 bool PA_HOT=0;
00021 bool short_TC;
00022 bool valid_SID = true;
00023 bool enable_call_sign = true;
00024 bool enable_new_segment=true;
00025 bool enable_S_frame = true;
00026 bool enable_read_block = false;
00027 bool enable_T_frame = false;
00028 bool enable_Ack_andcallsign = false;
00029 bool enable_ackandcallsign = false;
00030 bool new_session =true;
00031 bool enable_EoS=false;
00032 bool create_Ack_andcallsign = true;
00033 bool Ack_andcallsign_over = false;
00034 bool repeat_last_2T_frames = false;
00035 bool last_block = false;
00036 bool new_OBSRS_TC = true;
00037 bool enable_SCH = true;
00038 bool enable_FCCH = false;
00039 bool enable_DS = false;
00040 bool half_buffer = 0;
00041 bool TM_sent = false;
00042 //bool session_over = gFLAGS & COM_SESSION_TIMEOUT_FLAG;
00043 
00044 uint8_t SID ;
00045 uint32_t FSC;
00046 uint16_t read_success = false;
00047 uint16_t counter_buffer_112=0, counter_EoS=0,T_frames_sent=0;
00048 uint16_t counter_interleavedata=0;
00049 uint16_t counter_buffer_512=0;
00050 uint16_t max_segments  =  65415/(48+T_frames_in_segment*159);
00051 uint16_t ack_code = 0xA0;
00052 uint8_t segments_sent = 0;
00053 uint8_t counter_SCH40 = 0;
00054 uint8_t counter_FCCH80 = 0;
00055 uint8_t counter_S_frame = 0;
00056 uint8_t T_frame_Ack_andcallsign_sent = 0; 
00057 uint8_t T_frame_in_Ackandcallsign ;                        // needs to get from sukhdeep depends on size of Ack_L1
00058 uint32_t block_counter = 0;
00059 uint16_t no_of_frames =0;                             
00060 
00061 //#define max_segments = 65415/(48+T_frames_in_segment*159)
00062 // data 288 byte with convolution without xoring 0x38,0x90,0x7B,0x40,0x01,0x56,0x45,0xE0,0x3C,0xA0,0x7A,0x90,0x3D,0xE6,0x3E,0x70,0x21,0x42,0x43,0x3C,0x0C,0x20,0x00,0x4C,0x83,0x12,0x67,0xF0,0x8F,0x36,0x60,0x3C,0x86,0x24,0x06,0x80,0x20,0x54,0x22,0x9C,0x07,0x2A,0x00,0x8C,0x0F,0x7A,0x25,0x50,0x88,0x50,0x5F,0x8C,0xAB,0x0A,0x7A,0xCC,0x10,0xC4,0x25,0x10,0xB3,0xCE,0x5F,0x40,0xA1,0x8A,0x05,0xD0,0x90,0x14,0x7E,0x00,0x09,0xCA,0x7F,0xA0,0x1B,0xDE,0x00,0x70,0x12,0x14,0x7D,0x50,0x2A,0xC0,0x7D,0x20,0x14,0x30,0x04,0x4C,0x3C,0xF0,0x02,0xEC,0x28,0x60,0x45,0xA0,0x04,0x04,0x47,0x1C,0x22,0x70,0x02,0xE0,0x26,0xF4,0x41,0xFC,0x04,0x84,0x04,0x9C,0x0A,0xB0,0x41,0x40,0x25,0x0C,0xBF,0x9C,0x2F,0x3C,0xF8,0x5C,0x0A,0x18,0x4A,0xC0,0x21,0x00,0xB2,0x80,0x58,0x9C,0x8A,0x00,0x79,0xBC,0x7D,0x00,0x10,0x28,0x3E,0x3C,0x46,0x94,0x7D,0xB8,0x21,0x20,0x42,0x04,0x77,0xB4,0xB7,0x84,0x53,0x94,0x03,0xA0,0x20,0x08,0xF4,0x00,0x47,0x34,0xF7,0x60,0x63,0x3C,0x01,0xC0,0x24,0x08,0xF3,0xA0,0x11,0xA0,0xF3,0x60,0x68,0x48,0x08,0xB8,0x7D,0xE8,0x0D,0xF8,0x14,0xE0,0x83,0xC0,0x48,0x00,0x8E,0xB8,0x91,0xC8,0x05,0x40,0xD8,0xC8,0x8B,0xF8,0xC9,0x00,0x0D,0x38,0x04,0x68,0x86,0x80,0x9A,0x11,0x7B,0xB8,0x9F,0x79,0xF8,0x38,0x05,0x38,0x99,0x80,0xD2,0x01,0x69,0x80,0x24,0x71,0x14,0x80,0xF6,0x30,0xFE,0x80,0x72,0x41,0xE9,0x00,0x01,0x19,0x17,0x80,0xE6,0x81,0xEA,0x40,0x67,0xD8,0xFD,0xC0,0x81,0x48,0x1E,0xF0,0x34,0x81,0x13,0x30,0x09,0x19,0x8D,0xC8,0xBD,0x88,0x84,0xF8,0x9C,0x90,0x1C,0x00,0x00,0x41,0x8C,0x78,0x39,0xA9,0x12,0x30,0x19,0xF8,0x87,0x48
00063 // actual data 0x18,0x00,0x00,0x00,0x1C,0x44,0x10,0x04,0x01,0xE0,0x44,0x10,0x04,0x01,0xE0,0x44,0x10,0x04,0x01,0xE0,0x44,0x10,0x04,0x01,0xE0,0x44,0x10,0x04,0x01,0xE0,0x44,0x10,0x40,0x00,0x00,0x00,0x00,0x01,0x40,0x82,0x41,0x20,0x10,0x08,0x04,0x02,0x01,0xE4,0x3A,0x28,0x22,0x3A,0x28,0x22,0x3A,0x28,0x22,0x41,0x10,0x04,0x01,0xE4,0x40,0x20,0x10,0x08,0x04,0x01,0xE4,0x41,0x10,0x04,0x01,0xE4,0x41,0x10,0x04,0x01,0xE4,0x41,0x10,0x04,0x01,0xE4,0x41,0x10,0x04,0x01,0xE4,0x41,0x10,0x04,0x01,0xE4,0x41,0x10,0x40,0x00,0x00,0x00,0x00,0x01,0x48,0x82,0x41,0x20,0x10,0x08,0x04,0x02,0x01,0xE8,0x04,0x28,0x22,0x04,0x28,0x22,0x04,0x28,0x22,0x42,0x10,0x04,0x01,0xE8,0x40,0x20,0x10,0x08,0x04,0x01,0x00,0x00,
00064 //const unsigned char S_frame[] = {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};
00065 //const unsigned char EoS[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x1A,0x77,0xEF,0xC3,0x4A,0xEA,0x27,0x91,0x1A,0x77,0xEF,0xC3,0x4A,0xEA,0x27,0x90,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,0x01,0x1A,0x77,0xEF,0xC3,0x4A,0xEA,0x27,0x91,0x1A,0x77,0xEF,0xC3,0x4A,0xEA,0x27,0x90,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};
00066 //unsigned char call_sign_buffer[318]={0x0A,0x3F,0x46,0xB4,0x00,0x38,0x90,0x7B,0x40,0x01,0x56,0x45,0xE0,0x3C,0xA0,0x7A,0x90,0x3D,0xE6,0x3E,0x70,0x21,0x42,0x43,0x3C,0x0C,0x20,0x00,0x4C,0x83,0x12,0x67,0xF0,0x8F,0x36,0x60,0x3C,0x86,0x24,0x06,0x80,0x20,0x54,0x22,0x9C,0x07,0x2A,0x00,0x8C,0x0F,0x7A,0x25,0x50,0x88,0x50,0x5F,0x8C,0xAB,0x0A,0x7A,0xCC,0x10,0xC4,0x25,0x10,0xB3,0xCE,0x5F,0x40,0xA1,0x8A,0x05,0xD0,0x90,0x14,0x7E,0x00,0x09,0xCA,0x7F,0xA0,0x1B,0xDE,0x00,0x70,0x12,0x14,0x7D,0x50,0x2A,0xC0,0x7D,0x20,0x14,0x30,0x04,0x4C,0x3C,0xF0,0x02,0xEC,0x28,0x60,0x45,0xA0,0x04,0x04,0x47,0x1C,0x22,0x70,0x02,0xE0,0x26,0xF4,0x41,0xFC,0x04,0x84,0x04,0x9C,0x0A,0xB0,0x41,0x40,0x25,0x0C,0xBF,0x9C,0x2F,0x3C,0xF8,0x5C,0x0A,0x18,0x4A,0xC0,0x21,0x00,0xB2,0x80,0x58,0x9C,0x8A,0x00,0x79,0xBC,0x7D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x3F,0x46,0xB4,0x00,0x10,0x28,0x3E,0x3C,0x46,0x94,0x7D,0xB8,0x21,0x20,0x42,0x04,0x77,0xB4,0xB7,0x84,0x53,0x94,0x03,0xA0,0x20,0x08,0xF4,0x00,0x47,0x34,0xF7,0x60,0x63,0x3C,0x01,0xC0,0x24,0x08,0xF3,0xA0,0x11,0xA0,0xF3,0x60,0x68,0x48,0x08,0xB8,0x7D,0xE8,0x0D,0xF8,0x14,0xE0,0x83,0xC0,0x48,0x00,0x8E,0xB8,0x91,0xC8,0x05,0x40,0xD8,0xC8,0x8B,0xF8,0xC9,0x00,0x0D,0x38,0x04,0x68,0x86,0x80,0x9A,0x11,0x7B,0xB8,0x9F,0x79,0xF8,0x38,0x05,0x38,0x99,0x80,0xD2,0x01,0x69,0x80,0x24,0x71,0x14,0x80,0xF6,0x30,0xFE,0x80,0x72,0x41,0xE9,0x00,0x01,0x19,0x17,0x80,0xE6,0x81,0xEA,0x40,0x67,0xD8,0xFD,0xC0,0x81,0x48,0x1E,0xF0,0x34,0x81,0x13,0x30,0x09,0x19,0x8D,0xC8,0xBD,0x88,0x84,0xF8,0x9C,0x90,0x1C,0x00,0x00,0x41,0x8C,0x78,0x39,0xA9,0x12,0x30,0x19,0xF8,0x87,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
00067     //0x00,0x0A,0x3F,0x46,0xB4,0x00,0x38,0x90,0x7B,0x40,0x01,0x56,0x45,0xE0,0x3C,0xA0,0x7A,0x90,0x3D,0xE6,0x3E,0x70,0x21,0x42,0x43,0x3C,0x0C,0x20,0x00,0x4C,0x83,0x12,0x67,0xF0,0x8F,0x36,0x60,0x3C,0x86,0x24,0x06,0x80,0x20,0x54,0x22,0x9C,0x07,0x2A,0x00,0x8C,0x0F,0x7A,0x25,0x50,0x88,0x50,0x5F,0x8C,0xAB,0x0A,0x7A,0xCC,0x10,0xC4,0x25,0x10,0xB3,0xCE,0x5F,0x40,0xA1,0x8A,0x05,0xD0,0x90,0x14,0x7E,0x00,0x09,0xCA,0x7F,0xA0,0x1B,0xDE,0x00,0x70,0x12,0x14,0x7D,0x50,0x2A,0xC0,0x7D,0x20,0x14,0x30,0x04,0x4C,0x3C,0xF0,0x02,0xEC,0x28,0x60,0x45,0xA0,0x04,0x04,0x47,0x1C,0x22,0x70,0x02,0xE0,0x26,0xF4,0x41,0xFC,0x04,0x84,0x04,0x9C,0x0A,0xB0,0x41,0x40,0x25,0x0C,0xBF,0x9C,0x2F,0x3C,0xF8,0x5C,0x0A,0x18,0x4A,0xC0,0x21,0x00,0xB2,0x80,0x58,0x9C,0x8A,0x00,0x79,0xBC,0x7D,0x00,0x10,0x28,0x3E,0x3C,0x46,0x94,0x7D,0xB8,0x21,0x20,0x42,0x04,0x77,0xB4,0xB7,0x84,0x53,0x94,0x03,0xA0,0x20,0x08,0xF4,0x00,0x47,0x34,0xF7,0x60,0x63,0x3C,0x01,0xC0,0x24,0x08,0xF3,0xA0,0x11,0xA0,0xF3,0x60,0x68,0x48,0x08,0xB8,0x7D,0xE8,0x0D,0xF8,0x14,0xE0,0x83,0xC0,0x48,0x00,0x8E,0xB8,0x91,0xC8,0x05,0x40,0xD8,0xC8,0x8B,0xF8,0xC9,0x00,0x0D,0x38,0x04,0x68,0x86,0x80,0x9A,0x11,0x7B,0xB8,0x9F,0x79,0xF8,0x38,0x05,0x38,0x99,0x80,0xD2,0x01,0x69,0x80,0x24,0x71,0x14,0x80,0xF6,0x30,0xFE,0x80,0x72,0x41,0xE9,0x00,0x01,0x19,0x17,0x80,0xE6,0x81,0xEA,0x40,0x67,0xD8,0xFD,0xC0,0x81,0x48,0x1E,0xF0,0x34,0x81,0x13,0x30,0x09,0x19,0x8D,0xC8,0xBD,0x88,0x84,0xF8,0x9C,0x90,0x1C,0x00,0x00,0x41,0x8C,0x78,0x39,0xA9,0x12,0x30,0x19,0xF8,0x87,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
00068 uint8_t buffer_512[512]; 
00069 //unsigned char Ack_andcallsign[318]={0x0A,0x3F,0x46,0xB4,0x00,0x38,0x90,0x7B,0x40,0x01,0x56,0x45,0xE0,0x3C,0xA0,0x7A,0x90,0x3D,0xE6,0x3E,0x70,0x21,0x42,0x43,0x3C,0x0C,0x20,0x00,0x4C,0x83,0x12,0x67,0xF0,0x8F,0x36,0x60,0x3C,0x86,0x24,0x06,0x80,0x20,0x54,0x22,0x9C,0x07,0x2A,0x00,0x8C,0x0F,0x7A,0x25,0x50,0x88,0x50,0x5F,0x8C,0xAB,0x0A,0x7A,0xCC,0x10,0xC4,0x25,0x10,0xB3,0xCE,0x5F,0x40,0xA1,0x8A,0x05,0xD0,0x90,0x14,0x7E,0x00,0x09,0xCA,0x7F,0xA0,0x1B,0xDE,0x00,0x70,0x12,0x14,0x7D,0x50,0x2A,0xC0,0x7D,0x20,0x14,0x30,0x04,0x4C,0x3C,0xF0,0x02,0xEC,0x28,0x60,0x45,0xA0,0x04,0x04,0x47,0x1C,0x22,0x70,0x02,0xE0,0x26,0xF4,0x41,0xFC,0x04,0x84,0x04,0x9C,0x0A,0xB0,0x41,0x40,0x25,0x0C,0xBF,0x9C,0x2F,0x3C,0xF8,0x5C,0x0A,0x18,0x4A,0xC0,0x21,0x00,0xB2,0x80,0x58,0x9C,0x8A,0x00,0x79,0xBC,0x7D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x3F,0x46,0xB4,0x00,0x10,0x28,0x3E,0x3C,0x46,0x94,0x7D,0xB8,0x21,0x20,0x42,0x04,0x77,0xB4,0xB7,0x84,0x53,0x94,0x03,0xA0,0x20,0x08,0xF4,0x00,0x47,0x34,0xF7,0x60,0x63,0x3C,0x01,0xC0,0x24,0x08,0xF3,0xA0,0x11,0xA0,0xF3,0x60,0x68,0x48,0x08,0xB8,0x7D,0xE8,0x0D,0xF8,0x14,0xE0,0x83,0xC0,0x48,0x00,0x8E,0xB8,0x91,0xC8,0x05,0x40,0xD8,0xC8,0x8B,0xF8,0xC9,0x00,0x0D,0x38,0x04,0x68,0x86,0x80,0x9A,0x11,0x7B,0xB8,0x9F,0x79,0xF8,0x38,0x05,0x38,0x99,0x80,0xD2,0x01,0x69,0x80,0x24,0x71,0x14,0x80,0xF6,0x30,0xFE,0x80,0x72,0x41,0xE9,0x00,0x01,0x19,0x17,0x80,0xE6,0x81,0xEA,0x40,0x67,0xD8,0xFD,0xC0,0x81,0x48,0x1E,0xF0,0x34,0x81,0x13,0x30,0x09,0x19,0x8D,0xC8,0xBD,0x88,0x84,0xF8,0x9C,0x90,0x1C,0x00,0x00,0x41,0x8C,0x78,0x39,0xA9,0x12,0x30,0x19,0xF8,0x87,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
00070 uint32_t list_of_FSC[43]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43};
00071 uint8_t write_buffer[512] = {0x38,0x90,0x7B,0x40,0x01,0x56,0x45,0xE0,0x3C,0xA0,0x7A,0x90,0x3D,0xE6,0x3E,0x70,0x21,0x42,0x43,0x3C,0x0C,0x20,0x00,0x4C,0x83,0x12,0x67,0xF0,0x8F,0x36,0x60,0x3C,0x86,0x24,0x06,0x80,0x20,0x54,0x22,0x9C,0x07,0x2A,0x00,0x8C,0x0F,0x7A,0x25,0x50,0x88,0x50,0x5F,0x8C,0xAB,0x0A,0x7A,0xCC,0x10,0xC4,0x25,0x10,0xB3,0xCE,0x5F,0x40,0xA1,0x8A,0x05,0xD0,0x90,0x14,0x7E,0x00,0x09,0xCA,0x7F,0xA0,0x1B,0xDE,0x00,0x70,0x12,0x14,0x7D,0x50,0x2A,0xC0,0x7D,0x20,0x14,0x30,0x04,0x4C,0x3C,0xF0,0x02,0xEC,0x28,0x60,0x45,0xA0,0x04,0x04,0x47,0x1C,0x22,0x70,0x02,0xE0,0x26,0xF4,0x41,0xFC,0x04,0x84,0x04,0x9C,0x0A,0xB0,0x41,0x40,0x25,0x0C,0xBF,0x9C,0x2F,0x3C,0xF8,0x5C,0x0A,0x18,0x4A,0xC0,0x21,0x00,0xB2,0x80,0x58,0x9C,0x8A,0x00,0x79,0xBC,0x7D,0x00,0x10,0x28,0x3E,0x3C,0x46,0x94,0x7D,0xB8,0x21,0x20,0x42,0x04,0x77,0xB4,0xB7,0x84,0x53,0x94,0x03,0xA0,0x20,0x08,0xF4,0x00,0x47,0x34,0xF7,0x60,0x63,0x3C,0x01,0xC0,0x24,0x08,0xF3,0xA0,0x11,0xA0,0xF3,0x60,0x68,0x48,0x08,0xB8,0x7D,0xE8,0x0D,0xF8,0x14,0xE0,0x83,0xC0,0x48,0x00,0x8E,0xB8,0x91,0xC8,0x05,0x40,0xD8,0xC8,0x8B,0xF8,0xC9,0x00,0x0D,0x38,0x04,0x68,0x86,0x80,0x9A,0x11,0x7B,0xB8,0x9F,0x79,0xF8,0x38,0x05,0x38,0x99,0x80,0xD2,0x01,0x69,0x80,0x24,0x71,0x14,0x80,0xF6,0x30,0xFE,0x80,0x72,0x41,0xE9,0x00,0x01,0x19,0x17,0x80,0xE6,0x81,0xEA,0x40,0x67,0xD8,0xFD,0xC0,0x81,0x48,0x1E,0xF0,0x34,0x81,0x13,0x30,0x09,0x19,0x8D,0xC8,0xBD,0x88,0x84,0xF8,0x9C,0x90,0x1C,0x00,0x00,0x41,0x8C,0x78,0x39,0xA9,0x12,0x30,0x19,0xF8,0x87,0x48,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,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,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,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,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,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,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};
00072 //const unsigned char EXOR_SEQ[] = {0x55,0xF1,0x51,0x3D,0xA7,0x42,0xAE,0x2E,0x2E,0x28,0x76,0x80,0x62,0x41,0xC4,0x75,0x4D,0x87,0xDB,0xE1,0x02,0x61,0x60,0x96,0x9C,0xCB,0x8A,0xBD,0x37,0xE4,0x72,0x5D,0xF2,0x19,0x62,0x06,0x9A,0xF9,0x38,0xB0,0x49,0x75,0xD0,0x17,0x1B,0xCC,0x0B,0xEB,0x1B,0x50,0xA2,0x2A,0x8E,0xFA,0x4D,0x6F,0x1B,0xF8,0x0F,0x97,0x39,0x25,0x60,0x55,0x9A,0xDF,0x1D,0x10,0x7F,0xBD,0x3E,0xBF,0xE5,0x68,0x02,0xD1,0x99,0x0D,0xDF,0x84,0x2E,0x15,0xE3,0x08,0xD7,0x44,0x10,0x41,0xCE,0x93,0xF6,0x59,0x71,0xD2,0xF7,0x1C,0x4A,0x44,0x2D,0xA9,0x44,0x98,0x3A,0x00,0x71,0xCC,0x2A,0x35,0xC1,0x81,0xCF,0x44,0xF7,0x6A,0x0E,0xE4,0xF2,0xFC,0xD6,0x0B,0xA8,0x95,0x7B,0x86,0xB5,0xF8,0x33,0xE9,0xBF,0x6A,0x0E,0xE6,0x53,0x82};
00073 //const unsigned char FCCH80[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
00074 //const unsigned char SCH40[] = {0x0a,0x3f,0x46,0xb4,0x00};
00075 
00076 
00077 #define get_ack_l234( tm_ptr ) {\
00078     Base_tm *ackl234new = new Short_tm;\
00079     ackl234new->next_TM = NULL;\
00080     tm_ptr = ackl234new;\
00081     /*return telemetry pointer here*/\
00082     ackl234new->TM_string[0] = TMID_ACK_L234 << 4;\
00083     ackl234new->TM_string[1] = GETpacket_seq_count(current_obsrs_tc);\
00084     ackl234new->TM_string[2] = ack_code;         /* Ack code ....to be chnaged accordind to situation */\
00085     for(int i = 3; i < 11; ++i){\
00086         ackl234new->TM_string[i] = 0x00;\
00087     }\
00088     uint16_t crc = crc16_gen(ackl234new->TM_string, TM_SHORT_SIZE-2);\
00089     ackl234new->TM_string[11] = (crc & 0xFF00) >> 8;\
00090     ackl234new->TM_string[12] = crc & 0x00FF;\
00091 }
00092 
00093 void restart_adf(){
00094     /*go to phy off and and py on then phy TX again    */
00095     gCS_ADF = 0;
00096     spi.write(0xB1);/*phy_on */
00097     gCS_ADF = 1;
00098     gCS_ADF = 0;
00099     spi.write(0xB0);/*phy_off */
00100     gCS_ADF = 1;
00101     gCS_ADF = 0;
00102     spi.write(0xB1);/*phy_on */
00103     gCS_ADF = 1;
00104     gCS_ADF = 0;
00105     spi.write(0xB5);/*start transmission*/
00106     gCS_ADF = 1;
00107     }
00108     
00109 int diff_prev;
00110 void differential_encode(unsigned char* ptr, int length){
00111         for(int i=0; i<length;i++){
00112             unsigned char s = ptr[i] , t;
00113             t = s ^ (s >> 1);
00114             (diff_prev == 0) ? t=t^0x00 : t=t^0x80 ;
00115             diff_prev = int(s & 0x01);
00116             ptr[i] = t;
00117         }
00118 }
00119 
00120 #define check_PA_temp {\
00121 /* pending temperature check function*/\
00122 /*   return 0 or 1*/\
00123     PA_HOT=0;\
00124 }
00125 
00126 
00127 #define flags_init {\
00128  send_EoS_and_stop = false; \
00129  adf_limit = false;\
00130  stop = false;\
00131  PA_HOT=0;\
00132  short_TC;\
00133  valid_SID = true;\
00134  enable_call_sign = true;\
00135  enable_new_segment=true;\
00136  enable_S_frame = true;\
00137  enable_read_block = false;\
00138  enable_T_frame = false;\
00139  enable_Ack_andcallsign = false;\
00140  enable_ackandcallsign = false;\
00141  new_session =true;\
00142  enable_EoS=false;\
00143  create_Ack_andcallsign = true;\
00144  Ack_andcallsign_over = false;\
00145  repeat_last_2T_frames = false;\
00146  last_block = false;\
00147 /* last_buffer = false;*/\
00148  new_OBSRS_TC = true;\
00149  enable_SCH = true;\
00150  enable_FCCH = false;\
00151  enable_DS = false;\
00152  half_buffer = 0;\
00153  read_success = false;\
00154  counter_buffer_112=0;\
00155  counter_EoS=0;\
00156  T_frames_sent=0;\
00157  counter_interleavedata=0;\
00158  counter_buffer_512=0;\
00159  ack_code = 0xA0;\
00160  segments_sent = 0;\
00161  counter_SCH40 = 0;\
00162  counter_FCCH80 = 0;\
00163  counter_S_frame = 0;\
00164  T_frame_Ack_andcallsign_sent = 0;\
00165  T_frame_in_Ackandcallsign ;\
00166  block_counter = 0;\
00167  no_of_frames =0;\
00168 }
00169 
00170 #define send_Ack_andcallsign {\
00171     if(T_frames_sent < T_frames_in_segment){\
00172         if (enable_SCH)\
00173         {\
00174             buffer_112[counter_buffer_112] = SCH40[counter_SCH40++];\
00175             if (counter_SCH40 == 5)\
00176             {   \
00177                 counter_SCH40 = 0;\
00178                 enable_SCH = false;\
00179                 enable_DS = true;\
00180             }\
00181         }\
00182         else if (enable_DS)\
00183         {\
00184             buffer_112[counter_buffer_112] = interleave_data[half_buffer][counter_interleavedata++];\
00185             if (counter_interleavedata == 144)\
00186             {   \
00187                 /*gPC.printf("Ads sent  %d\r\n",half_buffer);*/\
00188                 enable_DS = false;\
00189                 enable_FCCH = true;\
00190                 counter_interleavedata = 0;\
00191             }\
00192         }\
00193         else if (enable_FCCH)\
00194         {\
00195             buffer_112[counter_buffer_112] = FCCH80[counter_FCCH80++];\
00196             if (counter_FCCH80 == 10)\
00197             {\
00198                 /*gPC.printf("Afcch80 sent\r\n");*/\
00199                 enable_FCCH = false;\
00200                 counter_FCCH80 = 0;\
00201                 enable_SCH = true;\
00202                 if(half_buffer == 0){\
00203                     half_buffer = 1;\
00204                 }\
00205                 else{\
00206                     half_buffer =0;\
00207                     TM_sent=true;\
00208                 }\
00209             }\
00210         }\
00211         if(TM_sent){\
00212             TM_sent =false;\
00213             T_frames_sent = T_frames_sent +2;\
00214             if(repeat_last_2T_frames){\
00215                 enable_SCH = true;\
00216                 /*cout<<"T_frames_sent = "<<T_frames_sent<<ENDL;*/\
00217             }\
00218             else{\
00219                 /*gPC.printf("Ackandcallsign sent");*/\
00220                 /*cout<<"T_frames_sent = "<<T_frames_sent<<ENDL;*/\
00221                 T_frame_Ack_andcallsign_sent = T_frame_Ack_andcallsign_sent + 2;\
00222                 if(T_frame_Ack_andcallsign_sent == T_frame_in_Ackandcallsign ){\
00223                     repeat_last_2T_frames = true;\
00224                     for(int i =0; i<144;i++)\
00225                     {interleave_data[0][i] = 0;interleave_data[1][i] = 0; }\
00226                 }\
00227                 else{\
00228                     gPC.printf("error in send ack\r\n");\
00229                 }\
00230             }\
00231             if(T_frames_sent == T_frames_in_segment){\
00232                 if(T_frame_Ack_andcallsign_sent < T_frame_in_Ackandcallsign){\
00233                         gPC.printf("error in tframes sent = in seg");\
00234                 }\
00235                 else{\
00236                     send_EoS_and_stop = true; \
00237                 }\
00238             }\
00239         }\
00240     }\
00241     else if(send_EoS_and_stop){\
00242         buffer_112[counter_buffer_112] = EoS[counter_EoS++];\
00243         if(counter_EoS == 120){\
00244             /*gPC.printf("A eos sent\r\n");*/\
00245             /*cout<<"EoS sent"<<ENDL;*/\
00246             counter_EoS = 0;\
00247             enable_ackandcallsign = false;\
00248             stop =true;\
00249             last_buffer = true;\
00250             send_EoS_and_stop = false;\
00251         }\
00252     }\
00253     else if(adf_limit){\
00254         buffer_112[counter_buffer_112] = EoS[counter_EoS++];\
00255         if(counter_EoS == 120){\
00256             counter_EoS = 0;\
00257             /*gPC.printf("EoS sent");*/\
00258             restart_adf_flag = true;\
00259             enable_new_segment = true;\
00260             /*cout<<"new session"<<ENDL;*/\
00261             /*cout<<"new segment"<<ENDL;*/\
00262             T_frames_sent = 0;\
00263             segments_sent = 0; \
00264             adf_limit = false;\
00265         }\
00266     }\
00267     else{\
00268         gPC.printf("error in send_Ack_andcallsign()");\
00269     }\
00270 }
00271 #define send_S_frame {\
00272         buffer_112[counter_buffer_112] = S_frame[counter_S_frame++];\
00273         if(counter_S_frame == 48){\
00274                enable_new_segment=false;\
00275                counter_S_frame = 0;\
00276                /*gPC.printf("S_frame_sent\r\n");*/\
00277                if(new_OBSRS_TC){\
00278                     enable_call_sign = true;\
00279                     new_OBSRS_TC = false;\                   
00280                     get_call_sign(callsign);\
00281                     snd_tm.head_pointer_sdcard(callsign);\
00282                     int temp = snd_tm.make_shor_tm();\
00283                     delete callsign;\
00284                     /*gPC.printf("new tc\r\n");*/\
00285                }\
00286                else{\
00287                    if(!enable_ackandcallsign){\
00288                    enable_read_block = true;\
00289                    }\
00290                 }\
00291         }\
00292 }
00293 
00294 #define send_call_sign {\
00295         if (enable_SCH)\
00296         {\
00297             buffer_112[counter_buffer_112] = SCH40[counter_SCH40++];\
00298             if (counter_SCH40 == 5)\
00299             {   \
00300                 counter_SCH40 = 0;\
00301                 /*gPC.printf("csch40 sent\r\n");*/\
00302                 enable_SCH = false;\
00303                 enable_DS = true;\
00304             }\
00305         }\
00306         else if (enable_DS)\
00307         {\
00308             buffer_112[counter_buffer_112] = interleave_data[half_buffer][counter_interleavedata++];\
00309             /*gPC.printf("csending ds %d \r\n",counter_interleavedata);*/\
00310             if (counter_interleavedata == 144)\
00311             {   \
00312                 enable_DS = false;\
00313                 enable_FCCH = true;\
00314                 counter_interleavedata = 0;\
00315                 /*counter_interleavedata = 0;not required here*/\
00316                 /*gPC.printf("cds sent sent \r\n");*/\
00317             }\
00318         }\
00319         else if (enable_FCCH)\
00320         {\
00321             buffer_112[counter_buffer_112] = FCCH80[counter_FCCH80++];\
00322             if (counter_FCCH80 == 10)\
00323             {\
00324                 enable_FCCH = false;\
00325                 counter_FCCH80 = 0;\
00326                 /*gPC.printf("cfcch sent\r\n");*/\
00327                 if(half_buffer == 0){\
00328                     enable_SCH = true;\
00329                     half_buffer = 1;\
00330                 }\
00331                 else{\
00332                     half_buffer = 0;\
00333                     TM_sent=true;\
00334                 }\
00335             }\
00336         }\
00337         if(TM_sent){\
00338             TM_sent= false;\
00339             enable_call_sign = false;\   
00340             new_session =false;\
00341             /*cout<<"call_sign_sent"<<" ";*/\
00342             T_frames_sent = T_frames_sent+2;\
00343             check_PA_temp;\
00344             /*cout<<"pa_hot = "<<PA_HOT<<ENDL;*/\
00345             if(PA_HOT){\
00346                 enable_ackandcallsign = true;\
00347                 create_Ack_andcallsign = true;\
00348                 enable_read_block = false;\
00349             }\
00350             else{\
00351                 enable_read_block = true;\
00352                 enable_ackandcallsign = false;\
00353             }\
00354         }\
00355 }
00356 
00357 void send_tm_from_SD_card_fun(unsigned char * buffer_112,bool & last_buffer){
00358 /*    gPC.printf("\n\rsend tm sd called\r\n");*/
00359     for(counter_buffer_112=0;counter_buffer_112<112;counter_buffer_112++){
00360         if(restart_adf_flag)
00361             buffer_112[counter_buffer_112] = 0;
00362         else if(enable_new_segment){                     // starting new segment
00363             send_S_frame;
00364             T_frames_sent=0;
00365         }
00366         else if(enable_call_sign){                   // sending call sign
00367             send_call_sign ;
00368         }
00369         else if(enable_T_frame){
00370             if(read_success == 0){
00371                 if(T_frames_sent < T_frames_in_segment){
00372                     if (enable_SCH)
00373                     {
00374                         buffer_112[counter_buffer_112] = SCH40[counter_SCH40++];
00375                         if (counter_SCH40 == 5)
00376                         {   
00377 /*                            gPC.printf("tsch40 sent\r\n");*/
00378                             counter_SCH40 = 0;
00379                             enable_SCH = false;
00380                             enable_DS = true;
00381                         }
00382                     }
00383                     else if (enable_DS)
00384                     {
00385                         buffer_112[counter_buffer_112] = buffer_512[counter_buffer_512++];
00386                         if ((counter_buffer_512 == 288) || (counter_buffer_512 == 144))
00387                         {   
00388 /*                            gPC.printf("tds sent\r\n");*/
00389 //                            counter_buffer_512 = 0;
00390                             enable_DS = false;
00391                             enable_FCCH = true;
00392                         }
00393                     }
00394                     else if (enable_FCCH)
00395                     {
00396                         buffer_112[counter_buffer_112] = FCCH80[counter_FCCH80++];
00397                         if (counter_FCCH80 == 10)
00398                         {
00399 /*                            gPC.printf("tfcch80 sent\r\n");*/
00400                             enable_FCCH = false;
00401                             if(counter_buffer_512 == 144){
00402                                 enable_SCH = true;
00403                                 counter_FCCH80 = 0;
00404                             }
00405                             else{
00406                                     
00407                             }
00408                         }
00409                     }
00410                     if((counter_FCCH80 == 10)&&(counter_buffer_512 == 288)){
00411                         counter_FCCH80 = 0;
00412                         counter_buffer_512 = 0;
00413                         T_frames_sent = T_frames_sent+2;
00414 //                        cout<<"T_frames_sent "<<T_frames_sent<<ENDL;
00415                         if(last_block){
00416 //                            cout<<"last block"<<endl<<"\r";
00417 /*                            gPC.printf("last block\r\n");*/
00418                             enable_read_block = false;
00419                             enable_T_frame = false;
00420                             enable_ackandcallsign = true;
00421                             /*putting execution status */
00422                             uint8_t temp2 = TC_STATE_SUCCESSFULLY_EXECUTED;
00423                             PUTexec_status(current_obsrs_tc, temp2);
00424                             create_Ack_andcallsign = true;
00425                             if(T_frames_sent == T_frames_in_segment){
00426                                 if(segments_sent + 1>= max_segments){
00427                                     adf_limit = true;
00428                                     segments_sent = 0;
00429 //                                    gPC.printf("adf limit reached here");
00430                                 }
00431                                 else{
00432                                     enable_new_segment = true;
00433 //                                    cout<<"new segment"<<ENDL;
00434                                 }
00435                             }
00436                             continue;
00437                         }
00438                         else{
00439                             check_PA_temp;
00440 //                            cout<<"pa_hot = "<<PA_HOT<<" ";
00441                             if(PA_HOT){
00442                                 enable_T_frame = false;
00443                                 enable_read_block = false;
00444                                 enable_ackandcallsign = true;
00445                                 create_Ack_andcallsign = true;
00446                              }
00447                              else{
00448                                  enable_read_block = true;
00449                              }
00450                         }
00451                         if(T_frames_sent == T_frames_in_segment){
00452                             enable_read_block = false;
00453                             enable_T_frame = false;
00454                             if((segments_sent + 1) >= max_segments){
00455                                 adf_limit = true;
00456                                 segments_sent++;
00457 //                                gPC.printf("segments_sent = "<<segments_sent<<ENDL;
00458 //                                gPC.printf("in for adf lim reached");
00459                             }
00460                             else{
00461                                 enable_new_segment = true;
00462 //                                gPC.printf("data in next segment");
00463                                 segments_sent++;
00464 //                                cout<<"segments_sent = "<<segments_sent<<ENDL;
00465                             }
00466                             continue;
00467                         }
00468                         else if(T_frames_sent > T_frames_in_segment){
00469                             gPC.printf("error in enable T_frame");
00470                         }
00471                     }
00472                 }
00473                 else if(T_frames_sent > T_frames_in_segment){
00474                     gPC.printf("error in if(read_success)");        
00475                 }
00476             }
00477             else{
00478                 gPC.printf("error in enable T_frame");
00479             }
00480         }
00481         else if(adf_limit){
00482             buffer_112[counter_buffer_112] = EoS[counter_EoS++];
00483             if(counter_EoS == 120){
00484 //                cout<<"EoS sent"<<ENDL;
00485                 restart_adf();
00486                 enable_new_segment = true;
00487                 counter_EoS = 0;
00488 //                cout<<"new session"<<ENDL;
00489 //                cout<<"new segment"<<ENDL;
00490                 T_frames_sent = 0;
00491                 segments_sent = 0; 
00492                 adf_limit = false;
00493             }
00494         }
00495         else if(enable_ackandcallsign){
00496             if(create_Ack_andcallsign){
00497                 /*gPC.printf("cr ack\r\n")*/;
00498                 enable_SCH = true;
00499                
00500                 if( (GETexec_status(current_obsrs_tc) == TC_STATE_EXECUTION_FAILED) && (GETabort_on_nack(current_obsrs_tc) == 1) ){
00501                                 gMASTER_STATE = TCL_STATE_ABORTED;
00502                 }
00503                 else if( GETpacket_seq_count(current_obsrs_tc) == (gTOTAL_VALID_TC-1) ){
00504                     gMASTER_STATE = TCL_STATE_COMPLETED;
00505                 }
00506                 create_Ack_andcallsign = false;
00507                 Base_tm *ack_and_callsign = NULL;
00508                 Base_tm *ack_head = NULL;
00509 //                get_call_sign(ack_and_callsign);
00510                 get_ack_l234(ack_and_callsign);
00511                 ack_head = ack_and_callsign;
00512                 get_ack_l1(ack_and_callsign->next_TM); 
00513                 while(ack_and_callsign->next_TM != NULL){
00514                     ack_and_callsign = ack_and_callsign->next_TM;
00515                 }
00516                 get_call_sign(ack_and_callsign->next_TM);
00517                 snd_tm.head_pointer_sdcard(ack_head);
00518                 T_frame_in_Ackandcallsign = (2*snd_tm.make_shor_tm());
00519 /*                gPC.printf(" T_frame_in_Ackandcallsign = %d\r\n",T_frame_in_Ackandcallsign);*/
00520                 Base_tm *ack_l234 = ack_and_callsign->next_TM;
00521                 
00522                 ack_and_callsign = ack_head->next_TM;
00523                 
00524                 if( GETshort_or_long_tm(ack_l234) == SHORT_TM_CODE ){
00525                     for(int i = 0 ; i < TM_SHORT_SIZE ; ++i){
00526                         gLAST_TM[i] = ack_l234->TM_string[i];
00527                         gLAST_TM_SHORT_OR_LONG = SHORT_TM_CODE;
00528                     }
00529                 }
00530                 else{
00531                     for( int i = 0 ; i < TM_LONG_SIZE ; ++i ){
00532                         gLAST_TM[i] = ack_l234->TM_string[i];
00533                         gLAST_TM_SHORT_OR_LONG = LONG_TM_CODE;
00534                     }
00535                 }
00536                 
00537                 /*gPC.printf("ex cr ack\r\n");*/
00538             }    
00539             send_Ack_andcallsign;
00540             if(last_buffer){
00541                 /*gPC.printf("last buffer"); */
00542  //               delete ack_head;
00543 //                while(ack_and_callsign != NULL){
00544 //                Base_tm *temp = ack_and_callsign->next_TM;
00545 //                delete ack_and_callsign;
00546 //                ack_and_callsign = temp;
00547             }
00548         }
00549         else if(last_buffer){
00550             /*gPC.printf("last buffer2");*/
00551             buffer_112[counter_buffer_112] = 0;
00552 //            delete ack_head;
00553 //            while(ack_and_callsign != NULL){
00554 //            Base_tm *temp = ack_and_callsign->next_TM;
00555 //            delete ack_and_callsign;
00556 //            ack_and_callsign = temp;
00557 //            }
00558         }
00559         else if(enable_EoS){
00560 //            send_EoS();
00561             /*gPC.printf("eos2");*/
00562             buffer_112[counter_buffer_112] = EoS[counter_EoS++];
00563             if(counter_EoS == 120){
00564 //                cout<<"segments_sent = "<<segments_sent<<ENDL;
00565 //                cout<<"EoS sent"<<ENDL;
00566                 counter_EoS = 0;
00567                 enable_EoS=false;
00568                 enable_new_segment = true;
00569                 break;
00570             }    
00571             else{
00572                 gPC.printf("Error in enable EoS");
00573                 }
00574         }
00575         else{
00576             gPC.printf("error in for loop");    
00577         }
00578         if(enable_read_block && (!last_block)){
00579                if(short_TC){
00580                    /*cout<<"reading"<<int(FSC)<<" "<<int(SID)<<ENDL;*/
00581 //                        for(int i=0;i<512;i++){
00582 //                        printf("0x%02X,",write_buffer[i]);
00583 //                        }
00584                    //int write_success = SD_WRITE(write_buffer,FSC + block_counter,SID);
00585 //                   wait_ms(8);
00586                     //gPC.printf("Reached here hey hey\n");
00587                    ack_code = SD_READ(buffer_512, FSC + block_counter,SID);
00588                     //ack_code = 0x02;
00589                }
00590                else{
00591                   // gPC.printf("Reached here hey hey\n");
00592                    ack_code = SD_READ(buffer_512, list_of_FSC[block_counter],SID);
00593                    }
00594                block_counter++;
00595                if(block_counter == no_of_frames){
00596                        last_block=true;
00597                }
00598                enable_read_block = false;
00599                if(ack_code == 0xA0){
00600                   /* gPC.puts("read one block successfully");*/
00601                    enable_T_frame = true;
00602                    enable_SCH = true;
00603                 }
00604                 else if(ack_code == 0x88 || ack_code == 0x89){
00605 
00606                     gPC.printf("Hardware failure");
00607                     enable_T_frame = false;
00608                 }
00609                 else if(ack_code == 0x02){
00610                     gPC.printf("Invalid SID");
00611                     enable_T_frame = false;
00612                 }
00613                 else if(ack_code == 0x86){
00614                     /*gPC.printf("FSC outof bounds");*/
00615                     enable_T_frame = false;
00616                 }
00617                 else{
00618                     gPC.printf("error Invalid ack code");
00619                     enable_T_frame = false;
00620                     stop = true;
00621                 }
00622         }
00623         if((PA_HOT || (gFLAGS & COM_SESSION_TIMEOUT_FLAG) ||(ack_code != 0xA0))&&(!enable_ackandcallsign)&&(!last_buffer)){
00624             /*gPC.printf("last condition");*/
00625             uint8_t temp2 = TC_STATE_EXECUTION_FAILED;
00626             PUTexec_status(current_obsrs_tc, temp2);
00627             enable_ackandcallsign = true;
00628             create_Ack_andcallsign = true;
00629             enable_T_frame = false;
00630         }
00631     }
00632 //    for(int i=0;i<112;i++){
00633 //        printf("0x%02X,",buffer_112[i]);
00634 //    }
00635     differential_encode(buffer_112, 112);
00636     if(last_buffer ==true){
00637     diff_prev=0;
00638     }
00639 }
00640 
00641 void execute_OBSRS_TC(Base_tc *tcp){
00642     current_obsrs_tc = tcp;
00643     flags_init;
00644     sent_tmfrom_SDcard = true;
00645     diff_prev = 0;
00646     if( GETshort_or_long_tc(tcp) == SHORT_TC_CODE ){
00647         short_TC = true;
00648         gPC.printf("it is short TC\r\n");
00649     }
00650     else{
00651         gPC.printf("it is long TC\r\n");
00652         short_TC = false;    
00653     }
00654     /*  reading SID from TC  */
00655     SID = (tcp->TC_string[2]) & 0x0f;
00656     /*  reading FSC and no. of frames from TC  */
00657     if(short_TC){
00658     FSC  = tcp->TC_string[3] << 24;
00659     FSC += tcp->TC_string[4] << 16;
00660     FSC += tcp->TC_string[5] << 8;
00661     FSC += tcp->TC_string[6];
00662     no_of_frames = ((uint16_t)(tcp->TC_string[7]) << 8);
00663     no_of_frames |= (uint16_t)tcp->TC_string[8];
00664     }
00665     else{
00666         no_of_frames = tcp->TC_string[3];
00667         for(int i=0 ;i<no_of_frames ; i++){
00668             list_of_FSC[i] = tcp->TC_string[4+i];
00669         }
00670     }
00671     
00672     gPC.printf("sid = %u \r\n",SID);
00673     gPC.printf("FSC = %u\r\n",FSC);
00674     gPC.printf("no_of_frames = %u\r\n",no_of_frames);
00675 //    gPC.puts("exit_sdcard");
00676     
00677 //    SID = 0x1;
00678 //    FSC = 10;
00679 //    no_of_frames = 2;
00680 //    cout<<"max_segments = "<<max_segments<<ENDL;
00681     //while(0){
00682 //    while(!stop){
00683 //      //  send_call_sign();
00684 //        if(short_TC){
00685 //            send_tm_from_SD_card();
00686 //        }
00687 //        else{
00688 //            send_tm_from_SD_card();
00689 //        }
00690 //    }
00691 }
00692 
00693 #endif