FM
Dependencies: SimpleDMA eeprom mbed-rtos mbed FreescaleIAP
Fork of CDMS_CODE by
Diff: OBSRS.h
- Revision:
- 142:83f48d1a1bc5
- Parent:
- 140:be4eea8275c3
- Child:
- 143:d81df402a016
--- a/OBSRS.h Sat Mar 12 14:57:36 2016 +0000 +++ b/OBSRS.h Tue Mar 29 14:22:55 2016 +0000 @@ -11,7 +11,7 @@ #define T_frames_in_segment 40 using namespace std; -Base_tc *current_obsrs_tc = NULL; +Base_tc *current_obsrs_tc = NULL; Base_tm *callsign = NULL; bool send_EoS_and_stop = false; bool adf_limit = false; @@ -68,7 +68,7 @@ uint8_t buffer_512[512]; //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}; 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}; -//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}; +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}; //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}; //const unsigned char FCCH80[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //const unsigned char SCH40[] = {0x0a,0x3f,0x46,0xb4,0x00}; @@ -87,7 +87,7 @@ }\ uint16_t crc = crc16_gen(ackl234new->TM_string, TM_SHORT_SIZE-2);\ ackl234new->TM_string[11] = (crc & 0xFF00) >> 8;\ - ackl234new->TM_string[12] = crc & 0x00FF; \ + ackl234new->TM_string[12] = crc & 0x00FF;\ } void restart_adf(){ @@ -161,6 +161,7 @@ buffer_112[counter_buffer_112] = SCH40[counter_SCH40++];\ if (counter_SCH40 == 5)\ { \ + gPC.printf("Asch40 sent\r\n");\ counter_SCH40 = 0;\ enable_SCH = false;\ enable_DS = true;\ @@ -171,6 +172,7 @@ buffer_112[counter_buffer_112] = interleave_data[half_buffer][counter_interleavedata++];\ if (counter_interleavedata == 144)\ { \ + gPC.printf("Ads sent\r\n");\ enable_DS = false;\ enable_FCCH = true;\ }\ @@ -180,6 +182,7 @@ buffer_112[counter_buffer_112] = FCCH80[counter_FCCH80++];\ if (counter_FCCH80 == 10)\ {\ + gPC.printf("Afcch80 sent\r\n");\ enable_FCCH = false;\ if(half_buffer == 0){\ enable_SCH = true;\ @@ -233,7 +236,7 @@ else if(send_EoS_and_stop){\ buffer_112[counter_buffer_112] = EoS[counter_EoS++];\ if(counter_EoS == 120){\ - /*cout<<"segments_sent = "<<segments_sent<<ENDL;*/\ + gPC.printf("A eos sent\r\n");\ /*cout<<"EoS sent"<<ENDL;*/\ counter_EoS = 0;\ enable_ackandcallsign = false;\ @@ -269,13 +272,15 @@ enable_call_sign = true;\ new_OBSRS_TC = false;\ get_call_sign(callsign);\ - snd_tm.head_pointer(callsign);\ + snd_tm.head_pointer_sdcard(callsign);\ int temp = snd_tm.make_shor_tm();\ delete callsign;\ gPC.printf("new tc\r\n");\ }\ else{\ + if(!enable_ackandcallsign){\ enable_read_block = true;\ + }\ }\ }\ } @@ -287,7 +292,7 @@ if (counter_SCH40 == 5)\ { \ counter_SCH40 = 0;\ - gPC.printf("sch40 sent\r\n");\ + gPC.printf("csch40 sent\r\n");\ enable_SCH = false;\ enable_DS = true;\ }\ @@ -295,13 +300,13 @@ else if (enable_DS)\ {\ buffer_112[counter_buffer_112] = interleave_data[half_buffer][counter_interleavedata++];\ - gPC.printf("sending ds\r\n");\ + /*gPC.printf("csending ds %d \r\n",counter_interleavedata);*/\ if (counter_interleavedata == 144)\ { \ enable_DS = false;\ enable_FCCH = true;\ - counter_interleavedata = 0;\ - gPC.printf("ds sent sent\r\n");\ + /*counter_interleavedata = 0;not required here*/\ + gPC.printf("cds sent sent \r\n");\ }\ }\ else if (enable_FCCH)\ @@ -312,14 +317,16 @@ enable_FCCH = false;\ if(half_buffer == 0){\ enable_SCH = true;\ + counter_interleavedata = 0;\ half_buffer = 1;\ counter_FCCH80 = 0;\ - gPC.printf("fcch sent\r\n");\ + gPC.printf("cfcch sent\r\n");\ }\ }\ }\ if((counter_interleavedata == 144) && (half_buffer ==1)){\ counter_interleavedata = 0;\ + gPC.printf("cfcch sent\r\n");\ half_buffer =0;\ enable_call_sign = false;\ new_session =false;\ @@ -353,6 +360,7 @@ void send_tm_from_SD_card_fun(){ + gPC.printf("\n\rsend tm sd called\r\n"); for(counter_buffer_112=0;counter_buffer_112<112;counter_buffer_112++){ if(enable_new_segment){ // starting new segment send_S_frame; @@ -369,7 +377,7 @@ buffer_112[counter_buffer_112] = SCH40[counter_SCH40++]; if (counter_SCH40 == 5) { -// cout<<"sch sent"<<ENDL; + gPC.printf("tsch40 sent\r\n");\ counter_SCH40 = 0; enable_SCH = false; enable_DS = true; @@ -380,7 +388,7 @@ buffer_112[counter_buffer_112] = buffer_512[counter_buffer_512++]; if ((counter_buffer_512 == 288) || (counter_buffer_512 == 144)) { -// cout<<"ds sent"<<ENDL; + gPC.printf("tds sent\r\n"); // counter_buffer_512 = 0; enable_DS = false; enable_FCCH = true; @@ -391,7 +399,7 @@ buffer_112[counter_buffer_112] = FCCH80[counter_FCCH80++]; if (counter_FCCH80 == 10) { -// cout<<"fcch sent"<<ENDL; + gPC.printf("tfcch80 sent\r\n"); enable_FCCH = false; if(counter_buffer_512 == 144){ enable_SCH = true; @@ -409,6 +417,7 @@ // cout<<"T_frames_sent "<<T_frames_sent<<ENDL; if(last_block){ // cout<<"last block"<<endl<<"\r"; + gPC.printf("last block\r\n"); enable_read_block = false; enable_T_frame = false; enable_ackandcallsign = true; @@ -488,18 +497,23 @@ } else if(enable_ackandcallsign){ if(create_Ack_andcallsign){ + gPC.printf("cr ack\r\n"); enable_SCH = true; create_Ack_andcallsign = false; Base_tm *ack_and_callsign = NULL; Base_tm *ack_head = NULL; get_call_sign(ack_and_callsign); + gPC.printf("test 1\r\n"); ack_head = ack_and_callsign; get_ack_l1(ack_and_callsign->next_TM); + gPC.printf("test 2\r\n"); while(ack_and_callsign->next_TM != NULL){ ack_and_callsign = ack_and_callsign->next_TM; } + gPC.printf("test 3\r\n"); get_ack_l234(ack_and_callsign->next_TM); - snd_tm.head_pointer(ack_head); + snd_tm.head_pointer_sdcard(ack_head); + gPC.printf("test 4\r\n"); T_frame_in_Ackandcallsign = 2*snd_tm.make_shor_tm(); Base_tm *ack_l234 = ack_and_callsign->next_TM; uint8_t temp2 = TC_STATE_SUCCESSFULLY_EXECUTED; // see all the possible cases @@ -522,13 +536,16 @@ gLAST_TM_SHORT_OR_LONG = LONG_TM_CODE; } } - ack_and_callsign = ack_head; + gPC.printf("test 5\r\n"); + ack_and_callsign = ack_head->next_TM; delete ack_head; + gPC.printf("test 6\r\n"); while(ack_and_callsign != NULL){ Base_tm *temp = ack_and_callsign->next_TM; delete ack_and_callsign; ack_and_callsign = temp; } + gPC.printf("ex cr ack\r\n"); } send_Ack_andcallsign; } @@ -556,9 +573,10 @@ // for(int i=0;i<512;i++){ // printf("0x%02X,",write_buffer[i]); // } - //int write_success = SD_WRITE(write_buffer,FSC + block_counter,SID); + int write_success = SD_WRITE(write_buffer,FSC + block_counter,SID); // wait_ms(8); read_success = SD_READ(buffer_512, FSC + block_counter,SID); + gPC.printf("read block %d \n\r",read_success); } else{ read_success = SD_READ(buffer_512, list_of_FSC[block_counter],SID); @@ -607,6 +625,7 @@ current_obsrs_tc = tcp; flags_init; sent_tmfrom_SDcard = true; + diff_prev = 0; if( GETshort_or_long_tc(tcp) == SHORT_TC_CODE ){ short_TC = true; gPC.printf("it is short TC\r\n");