Repository for CDMS code

Dependencies:   SimpleDMA mbed-rtos mbed eeprom

Fork of COM_MNG_TMTC_SIMPLE by Shreesha S

Files at this revision

API Documentation at this revision

Comitter:
krishanprajapat
Date:
Tue Jan 19 10:30:46 2016 +0000
Parent:
58:5c59f28620bc
Child:
72:9eea047ebd0c
Commit message:
Modification of CDMS_sd.h required

Changed in this revision

COM_MNG_TMTC.h Show annotated file Show diff for this revision Revisions of this file
DefinitionsAndGlobals.h Show annotated file Show diff for this revision Revisions of this file
OBSRS.h Show annotated file Show diff for this revision Revisions of this file
SDC_init.h Show diff for this revision Revisions of this file
SDCread.h Show diff for this revision Revisions of this file
adf.h Show annotated file Show diff for this revision Revisions of this file
cdms_sd.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/COM_MNG_TMTC.h	Fri Jan 15 12:02:12 2016 +0000
+++ b/COM_MNG_TMTC.h	Tue Jan 19 10:30:46 2016 +0000
@@ -1411,13 +1411,14 @@
                             delete_all_tm(tm_ptr_head);\
                         }\
                         else{\
-                            /*gPC.printf("sd card at %u\r\n", execute_psc);*/\
+                            gPC.printf("sd card at %u\r\n", execute_psc);\
                             /*EXECUTION OF SD-CARD DATA SENDING (OBSRS)*/\
                             Base_tm *tm_ptr_head = NULL;\
                             get_call_sign(tm_ptr_head);\
                             Base_tm *put_tm_here = NULL;\
                             /*execute_obsrs(current_TC, put_tm_here)*/\
-                            /*read_TC(current_TC);*/\
+                            execute_OBSRS_TC(current_TC);\
+                            /*adf_SND_SDCard;*/\
                             uint8_t tempExec = TC_STATE_SUCCESSFULLY_EXECUTED;\
                             PUTexec_status(current_TC, tempExec);\
                             /*PENDING: ABORT ON NACK CHECK, gMASTER_STATE VERIFICATION WITH SD CARD,PA hot and session timeout, last executed ack l234*/\
--- a/DefinitionsAndGlobals.h	Fri Jan 15 12:02:12 2016 +0000
+++ b/DefinitionsAndGlobals.h	Tue Jan 19 10:30:46 2016 +0000
@@ -1,12 +1,12 @@
 // **************DEFINITIONS*********************
 // COM_RX
     #define RX_TIMEOUT_LIMIT 0.5
-    #define COM_RX_UART_TX PTE20
-    #define COM_RX_UART_RX PTE21
+//    #define COM_RX_UART_TX PTE20
+//    #define COM_RX_UART_RX PTE21
     
 // For serial port printing(SET BAUD RATE 1200)
-//    #define COM_RX_UART_TX USBTX
-//    #define COM_RX_UART_RX USBRX
+    #define COM_RX_UART_TX USBTX
+    #define COM_RX_UART_RX USBRX
 
 // COMMON SPI
     #define SPI_MOSI PTE1
@@ -124,7 +124,7 @@
 uint16_t gTOTAL_REPEATED_TC = 0x00;
 
 // COMMON SPI
-SPI spi( SPI_MOSI, SPI_MISO, SPI_CLK );
+//SPI spi( SPI_MOSI, SPI_MISO, SPI_CLK );
 DigitalOut gCS_ADF(SPI_CS_ADF);
 DigitalOut gCS_SDC(SPI_CS_SDC);
 DigitalOut gCS_RTC(SPI_CS_RTC);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/OBSRS.h	Tue Jan 19 10:30:46 2016 +0000
@@ -0,0 +1,538 @@
+// problem in check pa and valid sid not sending anything in one for loop
+
+
+
+// no error            case 2 ackl234new->TM_string[2] = (101_0000) = 0x_0;     spare = 0  10100000 =  0xA0
+// Hardware failure    Case 4 ackl234new->TM_string[2] = (100_0101) = 0x_5;     spare = 0  10000101 =  0x85 comes from cdms ask pradeep
+// Invalid FSC         Case 4 ackl234new->TM_string[2] = (100_0110) = 0x_6;     spare = 0  10000110 =  0x86 Invalid FSC
+// Illegal TC          Case 3 ackl234new->TM_string[2] = (000_0010) = 0x_2;     spare = 0  00000010 =  0x02 invalid SID
+
+
+
+#define TMID_ACK_L234 0xB
+#define T_frames_in_segment 10
+
+using namespace std;
+Serial pc(USBTX, USBRX); // tx, rx
+
+DigitalOut gpo(D0);
+DigitalOut led(LED_RED);
+
+bool send_EoS_and_stop = false;
+bool adf_limit = false;
+bool stop = false;
+bool check_PA = true;
+bool PA_HOT=0;
+bool short_TC;
+bool valid_SID = true;
+bool enable_call_sign = true;
+bool enable_new_segment=true;
+bool enable_S_frame = true;
+bool enable_read_block = false;
+bool enable_T_frame = false;
+bool enable_Ack_andcallsign = false;
+bool enable_ackandcallsign = false;
+bool new_session =true;
+bool enable_EoS=false;
+bool create_Ack_andcallsign = true;
+bool Ack_andcallsign_over = false;
+bool repeat_last_2T_frames = false;
+bool last_block = false;
+bool last_buffer = false;
+bool new_OBSRS_TC = true;
+bool enable_SCH = true;
+bool enable_FCCH = false;
+bool enable_DS = false;
+
+uint8_t SID ;
+unsigned char buffer_112[112];
+uint32_t FSC;
+uint16_t read_success = false;
+uint16_t counter_buffer_112=0, counter_EoS=0,T_frames_sent=0;
+uint16_t counter_call_sign_buffer=0;
+uint16_t counter_buffer_512=0;
+uint16_t counter_Ack_andcallsign = 0;
+uint16_t max_segments  =  65415/(48+T_frames_in_segment*159);
+uint16_t ack_code = 0xA0;
+uint16_t segments_sent = 0;
+uint8_t counter_SCH40 = 0;
+uint8_t counter_FCCH80 = 0;
+uint8_t counter_S_frame = 0;
+uint16_t T_frame_Ack_andcallsign_sent = 0; 
+uint16_t T_frame_in_Ackandcallsign = 4;                        // needs to get from sukhdeep depends on size of Ack_L1
+uint64_t start_block_num ;
+uint32_t block_counter = 0;
+uint32_t no_of_frames =0;                             
+int Ack_L1; // should be always even
+
+//#define max_segments = 65415/(48+T_frames_in_segment*159)
+// 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
+// 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,
+//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};
+//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};
+uint16_t counter=0;
+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};
+    //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};
+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};
+//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};
+
+
+
+
+#define create_Ack_L234 {\
+    Base_tm *ackl234new = new Short_tm;\
+    ackl234new->next_TM = NULL;\
+    /*return telemetry pointer here*/\
+    uint8_t temp8;\
+    temp8 = SHORT_TM_CODE;\
+    PUTshort_or_long_tm(ackl234new->fields, temp8);\
+    temp8 = TMID_ACK_L234;\
+    PUTtmid((ackl234new->fields), temp8);\
+    ackl234new->TM_string[0] = TMID_ACK_L234 << 4;\
+    ackl234new->TM_string[1] = 0x12;\
+    ackl234new->TM_string[2] = ack_code;         /* Ack code ....to be chnaged accordind to situation */\
+    for(int i = 3; i < 11; ++i){\
+        ackl234new->TM_string[i] = 0x00;\
+    }\
+    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;    \
+}
+
+#define make_T_frame_Ack_andcallsign {\             
+}
+
+void restart_adf(){
+    
+    }
+    
+int diff_prev;
+void differential_encode(unsigned char* ptr, int length){
+        for(int i=0; i<length;i++){
+            unsigned char s = ptr[i] , t;
+            t = s ^ (s >> 1);
+            (diff_prev == 0) ? t=t^0x00 : t=t^0x80 ;
+            diff_prev = int(s & 0x01);
+            ptr[i] = t;
+        }
+}
+
+#define check_PA_temp {\
+/*    return 0 or 1*/\
+    PA_HOT=0;\
+}
+
+int get_Ack_L1(){
+    for(int i=0;i<288;i++){
+//        Ack_andcallsign[i] = 0xff;
+    }
+    //cout<<"in side get_Ack_L1"<<endl<<"\r";
+    return 1;
+}
+
+#define send_Ack_andcallsign{\                                                    
+    if(T_frames_sent < T_frames_in_segment){\
+        buffer_112[counter_buffer_112] = Ack_andcallsign[counter_Ack_andcallsign++];          /* to be changed sukhdeep should write in buffer_112*/\
+        if(counter_Ack_andcallsign == 318){\
+            counter_Ack_andcallsign = 0;\
+            T_frames_sent = T_frames_sent +2;\
+            if(repeat_last_2T_frames){\
+                /*cout<<"repeated last two T frames"<<" ";*/\
+                /*cout<<"T_frames_sent = "<<T_frames_sent<<ENDL;*/\
+            }\
+            else{\
+                /*cout<<"Ackandcallsign sent"<<" ";*/\
+                /*cout<<"T_frames_sent = "<<T_frames_sent<<ENDL;*/\
+                T_frame_Ack_andcallsign_sent = T_frame_Ack_andcallsign_sent + 2;\
+                if(T_frame_Ack_andcallsign_sent == T_frame_in_Ackandcallsign ){\
+                    repeat_last_2T_frames = true;\
+                }\
+                else if(T_frame_Ack_andcallsign_sent < T_frame_in_Ackandcallsign){\
+                    make_T_frame_Ack_andcallsign;\
+                }\
+                else{\
+                    /*cout<<"error in send_Ack_andcallsign if T_frames_sent < T_frames_in_segment"<<ENDL;*/\  
+                }\
+            }\
+            if(T_frames_sent == T_frames_in_segment){\
+                if(T_frame_Ack_andcallsign_sent < T_frame_in_Ackandcallsign){\
+                    if(segments_sent + 1>= max_segments){\
+                        adf_limit = true;\
+                        segments_sent = 0;\
+                        /*cout<<"adf limit reached"<<ENDL;*/\
+                    }\
+                    else{\
+                        enable_new_segment = true;\
+                        /*cout<<"new segment"<<ENDL;*/\
+                    }\
+                }\
+                else{\
+                    send_EoS_and_stop = true; \  
+                }   \
+            }\
+        }\
+    }\
+    else if(send_EoS_and_stop){\
+        buffer_112[counter_buffer_112] = EoS[counter_EoS++];\
+        if(counter_EoS == 120){\
+            /*cout<<"segments_sent = "<<segments_sent<<ENDL;*/\
+            /*cout<<"EoS sent"<<ENDL;*/\
+            counter_EoS = 0;\
+            enable_ackandcallsign = false;\
+            stop =true;\
+            last_buffer = true;\
+        }\
+    }\
+    else if(adf_limit){\
+        buffer_112[counter_buffer_112] = EoS[counter_EoS++];\
+        if(counter_EoS == 120){\
+            counter_EoS = 0;\
+            /*cout<<"EoS sent"<<ENDL;*/\
+            restart_adf();\
+            enable_new_segment = true;\
+            /*cout<<"new session"<<ENDL;*/\
+            /*cout<<"new segment"<<ENDL;*/\
+            T_frames_sent = 0;\
+            segments_sent = 0; \
+            adf_limit = false;\
+        }\
+    }\
+    else{\
+        gPC.printf("error in send_Ack_andcallsign()");\
+    }\
+}
+#define send_S_frame {\
+        buffer_112[counter_buffer_112] = S_frame[counter_S_frame++];\
+        if(counter_S_frame == 48){\
+               enable_new_segment=false;\
+               counter_S_frame = 0;\
+               /*cout<<"S_frame_sent"<<ENDL;*/\
+               if(new_OBSRS_TC){\
+                    enable_call_sign = true;\
+                    new_OBSRS_TC = false;\
+               }\
+               else{\
+                   enable_read_block = true;\
+                }\
+        }\
+}
+
+#define send_call_sign {\
+        buffer_112[counter_buffer_112] = call_sign_buffer[counter_call_sign_buffer++];\
+        if(counter_call_sign_buffer == 318){\
+            counter_call_sign_buffer = 0;\
+            enable_call_sign = false;\
+            new_session =false;\
+            /*cout<<"call_sign_sent"<<" ";*/\
+            T_frames_sent = T_frames_sent+2;\
+            if(SID==0x0 || SID==0x2 || SID==0x3 || SID==0x4 || SID==0x5){\
+                valid_SID=true;\
+                /*cout<<"valid SID"<<ENDL;*/\
+            }\
+            else{\
+                valid_SID=false;\
+                gPC.printf("invalid SID");\
+                enable_ackandcallsign = true;\
+                create_Ack_andcallsign = true;\
+                ack_code = 0x02;\
+            }\
+            check_PA_temp;\
+            /*cout<<"pa_hot = "<<PA_HOT<<ENDL;*/\
+            if(PA_HOT){\
+                enable_ackandcallsign = true;\
+                create_Ack_andcallsign = true;\
+                enable_read_block = false;\
+            }\
+            else{\
+                enable_read_block = true;\
+                enable_ackandcallsign = false;\
+            }\
+        }\
+}
+
+//uint16_t SD_READ(uint64_t block_to_read){
+//    for(int i=0;i<318;i++){
+//        buffer_512[counter_buffer_512++] = 0xff;
+//    }
+//    for(int i=319;i<512;i++){
+//        buffer_512[counter_buffer_512++] = 0x00;
+//    }
+//    counter_buffer_512 = 0;
+//    return 0xA0; // if success
+////    return 0x85; // Hardware failure
+//   // return 0x86; // invalid TC
+//}
+
+void send_tm_from_SD_card(){
+    for(counter_buffer_112=0;counter_buffer_112<112;counter_buffer_112++){
+        if(enable_new_segment){                     // starting new segment
+            send_S_frame;
+            T_frames_sent=0;
+        }
+        else if(enable_call_sign){                   // sending call sign
+            send_call_sign ;
+        }
+        else if(enable_T_frame){
+            if(read_success == 0){
+                if(T_frames_sent < T_frames_in_segment){
+                    if (enable_SCH)
+                    {
+                        buffer_112[counter_buffer_112] = SCH40[counter_SCH40++];
+                        if (counter_SCH40 == 5)
+                        {   
+//                            cout<<"sch sent"<<ENDL;
+                            counter_SCH40 = 0;
+                            enable_SCH = false;
+                            enable_DS = true;
+                        }
+                    }
+                    else if (enable_DS)
+                    {
+                        buffer_112[counter_buffer_112] = buffer_512[counter_buffer_512++];
+                        if ((counter_buffer_512 == 288) || (counter_buffer_512 == 144))
+                        {   
+//                            cout<<"ds sent"<<ENDL;
+//                            counter_buffer_512 = 0;
+                            enable_DS = false;
+                            enable_FCCH = true;
+                        }
+                    }
+                    else if (enable_FCCH)
+                    {
+                        buffer_112[counter_buffer_112] = FCCH80[counter_FCCH80++];
+                        if (counter_FCCH80 == 10)
+                        {
+//                            cout<<"fcch sent"<<ENDL;
+                            enable_FCCH = false;
+                            if(counter_buffer_512 == 144){
+                                enable_SCH = true;
+                                counter_FCCH80 = 0;
+                            }
+                            else{
+                                    
+                            }
+                        }
+                    }
+                    if((counter_FCCH80 == 10)&&(counter_buffer_512 == 288)){
+                        counter_FCCH80 = 0;
+                        counter_buffer_512 = 0;
+                        T_frames_sent = T_frames_sent+2;
+//                        cout<<"T_frames_sent "<<T_frames_sent<<ENDL;
+                        if(last_block){
+//                            cout<<"last block"<<endl<<"\r";
+                            enable_read_block = false;
+                            enable_T_frame = false;
+                            enable_ackandcallsign = true;
+                            create_Ack_andcallsign = true;
+                            if(T_frames_sent == T_frames_in_segment){
+                                if(segments_sent + 1>= max_segments){
+                                    adf_limit = true;
+                                    segments_sent = 0;
+                                    gPC.printf("adf limit reached here");
+                                }
+                                else{
+                                    enable_new_segment = true;
+//                                    cout<<"new segment"<<ENDL;
+                                }
+                            }
+                            continue;
+                        }
+                        else{
+                            check_PA_temp;
+//                            cout<<"pa_hot = "<<PA_HOT<<" ";
+                            if(PA_HOT){
+                                enable_T_frame = false;
+                                enable_read_block = false;
+                                enable_ackandcallsign = true;
+                                create_Ack_andcallsign = true;
+                             }
+                             else{
+                                 enable_read_block = true;
+                             }
+                        }
+                        if(T_frames_sent == T_frames_in_segment){
+                            enable_read_block = false;
+                            enable_T_frame = false;
+                            if((segments_sent + 1) >= max_segments){
+                                adf_limit = true;
+                                segments_sent++;
+//                                gPC.printf("segments_sent = "<<segments_sent<<ENDL;
+                                gPC.printf("in for adf limit reached");
+                            }
+                            else{
+                                enable_new_segment = true;
+                                gPC.printf("data in next segment");
+                                segments_sent++;
+//                                cout<<"segments_sent = "<<segments_sent<<ENDL;
+                            }
+                        }
+                        else if(T_frames_sent > T_frames_in_segment){
+                            gPC.printf("error in enable T_frame");
+                        }
+                    }
+                }
+                else if(T_frames_sent > T_frames_in_segment){
+                    gPC.printf("error in if(read_success)");        
+                }
+            }
+            else{
+                gPC.printf("error in enable T_frame");
+            }
+        }
+        else if(adf_limit){
+            buffer_112[counter_buffer_112] = EoS[counter_EoS++];
+            if(counter_EoS == 120){
+//                cout<<"EoS sent"<<ENDL;
+                restart_adf();
+                enable_new_segment = true;
+                counter_EoS = 0;
+//                cout<<"new session"<<ENDL;
+//                cout<<"new segment"<<ENDL;
+                T_frames_sent = 0;
+                segments_sent = 0; 
+                adf_limit = false;
+            }
+        }
+        else if(stop){
+//                cout<<"Done bro"<<ENDL;
+                break;
+        }
+        else if(enable_ackandcallsign){
+            if(create_Ack_andcallsign){
+                create_Ack_L234;
+                Ack_L1 = get_Ack_L1();
+                make_T_frame_Ack_andcallsign;
+                create_Ack_andcallsign = false;
+            }    
+            send_Ack_andcallsign;
+        }
+
+        else if(enable_EoS){
+//            send_EoS();
+            buffer_112[counter_buffer_112] = EoS[counter_EoS++];
+            if(counter_EoS == 120){
+//                cout<<"segments_sent = "<<segments_sent<<ENDL;
+//                cout<<"EoS sent"<<ENDL;
+                counter_EoS = 0;
+                enable_EoS=false;
+                enable_new_segment = true;
+                break;
+            }    
+            else{
+                gPC.printf("Error in enable EoS");
+                }
+        }
+        else{
+            gPC.printf("error in for loop");    
+        }
+        if(enable_read_block && (!last_block)){
+               if(short_TC){
+                   /*cout<<"reading"<<int(FSC)<<" "<<int(SID)<<ENDL;*/
+//                        for(int i=0;i<512;i++){
+//                        printf("0x%02X,",write_buffer[i]);
+//                        }
+                   int write_success = SD_WRITE(write_buffer,FSC + block_counter,SID);
+//                   wait_ms(8);
+                   read_success = SD_READ(buffer_512, FSC + block_counter,SID);
+//                   wait_ms(8);
+//                   cout<<"read_success = "<<read_success<<ENDL<<"\r\n";
+//                   cout<<"write_success = "<<write_success<<ENDL;
+//                    for(int i=0;i<512;i++){
+//                        printf("0x%02X,",buffer_512[i]);
+//                        }
+               }
+               else{
+                   read_success = SD_READ(buffer_512, list_of_FSC[block_counter],SID);
+                   }
+               ack_code = read_success;
+               block_counter++;
+               if(block_counter == no_of_frames){
+                       last_block=true;
+               }
+               enable_read_block = false;
+               if(read_success == 0){
+//                   cout<<"read one block successfully"<<" ";
+                   enable_T_frame = true;
+                   enable_SCH = true;
+                }
+                else if(ack_code == 0x85){
+                    gPC.printf("Hardware failure");
+                    enable_T_frame = false;
+                }
+                else if(ack_code == 0x86){
+                    gPC.printf("Invalid FSC");
+                    enable_T_frame = false;
+                }
+                else{
+                    gPC.printf("error Invalid ack code");
+                    enable_T_frame = false;
+                    stop = true;
+                }
+        }
+        if((PA_HOT || (!valid_SID)|| (read_success != 0))&&(!enable_ackandcallsign)){
+            enable_ackandcallsign = true;
+            create_Ack_andcallsign = true;
+            enable_T_frame = false;
+        }
+    }
+//    for(int i=0;i<112;i++){
+//        printf("0x%02X,",buffer_112[i]);
+//    }
+    differential_encode(buffer_112, 112);
+    if(last_buffer ==true){
+    diff_prev=0;
+    }
+}
+
+void execute_OBSRS_TC(Base_tc *tcp){
+    short_TC = true;
+    pc.printf("WELCOME\n\r");
+    FCTN_CDMS_SD_INIT();/* sd card initialization*/
+//    SID = 0x0;
+//    FSC =10;
+//    no_of_frames =1;
+//    short_TC = true;
+//    adf_SND_SDCard;
+
+    if( GETshort_or_long_tc(tcp) == SHORT_TC_CODE ){
+        short_TC = true;
+    }
+    else{
+        short_TC = false;    
+    }
+    /*  reading SID from TC  */
+    SID = (tcp->TC_string[2]) & 0x0f;
+    /*  reading FSC and no. of frames from TC  */
+    if(short_TC){
+    FSC  = tcp->TC_string[3] << 24;
+    FSC += tcp->TC_string[4] << 16;
+    FSC += tcp->TC_string[5] << 8;
+    FSC += tcp->TC_string[6];
+    no_of_frames = tcp->TC_string[7] << 8;
+    no_of_frames += tcp->TC_string[8];
+    }
+    else{
+        no_of_frames = tcp->TC_string[3];
+        for(int i=0 ;i<no_of_frames ; i++){
+            list_of_FSC[i] = tcp->TC_string[4+i];
+        }
+    }
+    gPC.printf("sid = %u \r\n",SID);
+    gPC.printf("FSC = %u\r\n",FSC);
+//    cout<<"max_segments = "<<max_segments<<ENDL;
+    //while(0){
+//    while(!stop){
+//      //  send_call_sign();
+//        if(short_TC){
+//            send_tm_from_SD_card();
+//        }
+//        else{
+//            send_tm_from_SD_card();
+//        }
+//    }
+}
\ No newline at end of file
--- a/SDC_init.h	Fri Jan 15 12:02:12 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,427 +0,0 @@
-//Serial PC(USBTX, USBRX);
-//DigitalOut cs_SDCard(PTE22);
-DigitalOut cs_SDCard(PTB1);
-
-#define SD_COMMAND_TIMEOUT 5000
-
-#define SD_DBG             0
-
-#define R1_IDLE_STATE           (1 << 0)
-#define R1_ERASE_RESET          (1 << 1)
-#define R1_ILLEGAL_COMMAND      (1 << 2)
-#define R1_COM_CRC_ERROR        (1 << 3)
-#define R1_ERASE_SEQUENCE_ERROR (1 << 4)
-#define R1_ADDRESS_ERROR        (1 << 5)
-#define R1_PARAMETER_ERROR      (1 << 6)
-//SPI spi(PTA16, PTA17, PTA15); // mosi, miso, sclk
-
-
-int initialise_card();
-int initialise_card_v1();
-int initialise_card_v2();
-int disk_initialize();
-//int disk_write(const uint8_t *, uint64_t);
-
-int disk_erase(int,int);
-
-uint64_t sd_sectors();
-uint64_t sectors;
-
-int cmd(int, int);
-int cmd58();
-int cmdx(int, int);
-int cmd8();
-int read(uint8_t*, uint32_t );
-int write(const uint8_t*, uint32_t );
-static uint32_t ext_bits(unsigned char *, int , int );
-
-int cdv;
-
-#define SDCARD_FAIL 0
-#define SDCARD_V1   1
-#define SDCARD_V2   2
-#define SDCARD_V2HC 3
-
-int count_bro;
-int i;
-int random[1000];
-
-
-void initialisation_SDCard(){ 
-//*******************************
-
-//    cs_adf =1;
-    
-//**************************
-    
-//    start_block_num =10 ;           // Read from TC
-//    end_block_num =Science_TMframe::SDC_address ;            // Read from TC    
-//    printf("welcome\n");
-    initialise_card();
-    int result= initialise_card();
-//    printf("initialise card result=%d\n",result);
-    disk_initialize();
-}
-
-
-
-
-int initialise_card()
-{
-    // Set to 100kHz for initialisation, and clock card with cs_SDCard = 1
-    spi.frequency(100000);
-    cs_SDCard = 1;
-    for (int i = 0; i < 16; i++) {
-        spi.write(0xFF);
-    }
-
-    // send CMD0, should return with all zeros except IDLE STATE set (bit 0)
-    if (cmd(0, 0) != R1_IDLE_STATE) {
-        debug("No disk, or could not put SD card in to SPI idle state\n");
-        return SDCARD_FAIL;
-    }
-
-// send CMD8 to determine whther it is ver 2.x
-    int r = cmd8();
-    if (r == R1_IDLE_STATE) {
-//        printf("Entering v2 bro\n");
-        return initialise_card_v2();
-
-    } else if (r == (R1_IDLE_STATE | R1_ILLEGAL_COMMAND)) {
-        printf("Entering v1 bro\n");
-        return initialise_card_v1();
-
-    } else {
-        debug("Not in idle state after sending CMD8 (not an SD card?)\n");
-        return SDCARD_FAIL;
-    }
-}
-
-int initialise_card_v1()
-{
-    for (int i = 0; i < SD_COMMAND_TIMEOUT; i++) {
-        cmd(55, 0);
-        if (cmd(41, 0) == 0) {
- //           printf("Yuppie v1 successful\n");
-            cdv = 512;
-            debug_if(SD_DBG, "\n\rInit: SEDCARD_V1\n\r");
-
-            return SDCARD_V1;
-        }
-    }
-
-    debug("Timeout waiting for v1.x card\n");
-    return SDCARD_FAIL;
-}
-
-
-int initialise_card_v2()
-{
-    for (int i = 0; i < SD_COMMAND_TIMEOUT; i++) {
-        wait_ms(50);
-        cmd58();
-        cmd(55, 0);
-        if (cmd(41, 0x40000000) == 0) {
-  //          printf("Yuppie,v2 successful\n");
-            cmd58();
-            debug_if(SD_DBG, "\n\rInit: SDCARD_V2\n\r");
-            cdv = 1;
-
-            return SDCARD_V2;
-        }
-    }
-
-    debug("Timeout waiting for v2.x card\n");
-    return SDCARD_FAIL;
-}
-
-int cmd(int cmd, int arg)
-{
-    cs_SDCard = 0;
-
-    // send a command
-    spi.write(0x40 | cmd);
-    spi.write(arg >> 24);
-    spi.write(arg >> 16);
-    spi.write(arg >> 8);
-    spi.write(arg >> 0);
-    spi.write(0x95);
-
-    // wait for the repsonse (response[7] == 0)
-    for (int i = 0; i < SD_COMMAND_TIMEOUT; i++) {
-        int response = spi.write(0xFF);
-        if (!(response & 0x80)) {
-            cs_SDCard = 1;
-            spi.write(0xFF);
-            return response;
-        }
-    }
-    cs_SDCard = 1;
-    spi.write(0xFF);
-    return -1; // timeout
-}
-
-
-int cmd58()
-{
-    cs_SDCard = 0;
-    int arg = 0;
-
-    // send a command
-    spi.write(0x40 | 58);
-    spi.write(arg >> 24);
-    spi.write(arg >> 16);
-    spi.write(arg >> 8);
-    spi.write(arg >> 0);
-    spi.write(0x95);
-
-    // wait for the repsonse (response[7] == 0)
-    for (int i = 0; i < SD_COMMAND_TIMEOUT; i++) {
-        int response = spi.write(0xFF);
-        if (!(response & 0x80)) {
-            int ocr = spi.write(0xFF) << 24;
-            ocr |= spi.write(0xFF) << 16;
-            ocr |= spi.write(0xFF) << 8;
-            ocr |= spi.write(0xFF) << 0;
-            cs_SDCard = 1;
-            spi.write(0xFF);
-            return response;
-        }
-    }
-    cs_SDCard = 1;
-    spi.write(0xFF);
-    return -1; // timeout
-}
-
-
-int cmd8()
-{
-    cs_SDCard = 0;
-
-    // send a command
-    spi.write(0x40 | 8); // CMD8
-    spi.write(0x00);     // reserved
-    spi.write(0x00);     // reserved
-    spi.write(0x01);     // 3.3v
-    spi.write(0xAA);     // check pattern
-    spi.write(0x87);     // crc
-
-    // wait for the repsonse (response[7] == 0)
-    for (int i = 0; i < SD_COMMAND_TIMEOUT * 1000; i++) {
-        char response[5];
-        response[0] = spi.write(0xFF);
-        if (!(response[0] & 0x80)) {
-            for (int j = 1; j < 5; j++) {
-                response[i] = spi.write(0xFF);
-            }
-            cs_SDCard = 1;
-            spi.write(0xFF);
-            return response[0];
-        }
-    }
-    cs_SDCard = 1;
-    spi.write(0xFF);
-    return -1; // timeout
-}
-
-uint64_t sd_sectors()
-{
-    uint32_t c_size, c_size_mult, read_bl_len;
-    uint32_t block_len, mult, blocknr, capacity;
-    uint32_t hc_c_size;
-    uint64_t blocks;
-
-    // CMD9, Response R2 (R1 byte + 16-byte block read)
-    if (cmdx(9, 0) != 0) {
-        debug("Didn't get a response from the disk\n");
-        return 0;
-    }
-
-    uint8_t csd[16];
-    if (read(csd, 16) != 0) {
-        debug("Couldn't read csd response from disk\n");
-        return 0;
-    }
-
-    // csd_structure : csd[127:126]
-    // c_size        : csd[73:62]
-    // c_size_mult   : csd[49:47]
-    // read_bl_len   : csd[83:80] - the *maximum* read block length
-
-    int csd_structure = ext_bits(csd, 127, 126);
-
-    switch (csd_structure) {
-        case 0:
-            cdv = 512;
-            c_size = ext_bits(csd, 73, 62);
-            c_size_mult = ext_bits(csd, 49, 47);
-            read_bl_len = ext_bits(csd, 83, 80);
-
-            block_len = 1 << read_bl_len;
-            mult = 1 << (c_size_mult + 2);
-            blocknr = (c_size + 1) * mult;
-            capacity = blocknr * block_len;
-            blocks = capacity / 512;
-            debug_if(SD_DBG, "\n\rSDCard\n\rc_size: %d \n\rcapacity: %ld \n\rsectors: %lld\n\r", c_size, capacity, blocks);
-            break;
-
-        case 1:
-            cdv = 1;
-            hc_c_size = ext_bits(csd, 63, 48);
-            blocks = (hc_c_size+1)*1024;
-            debug_if(SD_DBG, "\n\rSDHC Card \n\rhc_c_size: %d\n\rcapacity: %lld \n\rsectors: %lld\n\r", hc_c_size, blocks*512, blocks);
-            break;
-
-        default:
-            debug("CSD struct unsupported\r\n");
-            return 0;
-    };
-    return blocks;
-}
-
-int cmdx(int cmd, int arg)
-{
-    cs_SDCard = 0;
-
-    // send a command
-    spi.write(0x40 | cmd);
-    spi.write(arg >> 24);
-    spi.write(arg >> 16);
-    spi.write(arg >> 8);
-    spi.write(arg >> 0);
-    spi.write(0x95);
-
-    // wait for the repsonse (response[7] == 0)
-    for (int i = 0; i < SD_COMMAND_TIMEOUT; i++) {
-        int response = spi.write(0xFF);
-        if (!(response & 0x80)) {
-            return response;
-        }
-    }
-    cs_SDCard = 1;
-    spi.write(0xFF);
-    return -1; // timeout
-}
-
-static uint32_t ext_bits(unsigned char *data, int msb, int lsb)
-{
-    uint32_t bits = 0;
-    uint32_t size = 1 + msb - lsb;
-    for (int i = 0; i < size; i++) {
-        uint32_t position = lsb + i;
-        uint32_t byte = 15 - (position >> 3);
-        uint32_t bit = position & 0x7;
-        uint32_t value = (data[byte] >> bit) & 1;
-        bits |= value << i;
-    }
-    return bits;
-}
-
-int disk_initialize()
-{
-    int i = initialise_card();
-    debug_if(SD_DBG, "init card = %d\n", i);
-    sectors = sd_sectors();
-
-    // Set block length to 512 (CMD16)
-    if (cmd(16, 512) != 0) {
-        debug("Set 512-byte block timed out\n");
-        return 1;
-    } else {
- //       printf("Hey,block init succesful\n");
-    }
-
-    spi.frequency(1000000); // Set to 1MHz for data transfer
-    return 0;
-}
-
-int disk_write(const uint8_t *buffer, uint64_t block_number)
-
-{
-    // set write address for single block (CMD24)
-    if (cmd(24, block_number * cdv) != 0) {
-        return 1;
-    }
-
-    // send the data block
-    write(buffer, 512);
-    //printf("Written Successfully bro \n");
-    return 0;
-}
-
-int write(const uint8_t*buffer, uint32_t length)
-{
-    cs_SDCard = 0;
-
-    // indicate start of block
-    spi.write(0xFE);
-
-    // write the data
-    for (int i = 0; i < length; i++) {
-        spi.write(buffer[i]);
-    }
-
-    // write the checksum
-    spi.write(0xFF);
-    spi.write(0xFF);
-
-    // check the response token
-    if ((spi.write(0xFF) & 0x1F) != 0x05) {
-        cs_SDCard = 1;
-        spi.write(0xFF);
-        return 1;
-    }
-
-    // wait for write to finish
-    while (spi.write(0xFF) == 0);
-
-    cs_SDCard = 1;
-    spi.write(0xFF);
-    return 0;
-}
-
-int disk_read(uint8_t *buffer, uint64_t block_number)
-{
-    // set read address for single block (CMD17)
-    if (cmd(17, block_number * cdv) != 0) {
-        return 1;
-    }
-
-    // receive the data
-    read(buffer, 512);
-    return 0;
-}
-
-int read(uint8_t *buffer, uint32_t length)
-{
-    cs_SDCard = 0;
-
-    // read until start byte (0xFF)
-    while (spi.write(0xFF) != 0xFE);
-
-    // read data
-    for (int i = 0; i < length; i++) {
-        buffer[i] = spi.write(0xFF);
-    }
-    spi.write(0xFF); // checksum
-    spi.write(0xFF);
-
-    cs_SDCard = 1;
-    spi.write(0xFF);
-    return 0;
-}
-
-int disk_erase(int startBlock, int totalBlocks)
-{
-    if(cmd(32, startBlock * cdv) != 0) {
-        return 1;
-    }
-    if (cmd(33, (startBlock+totalBlocks-1) * cdv) != 0) {
-        return 1;
-    }
-    if (cmd(38,0) != 0) {
-        return 1;
-    }
-    
-    return 0; //normal return
-}
\ No newline at end of file
--- a/SDCread.h	Fri Jan 15 12:02:12 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,190 +0,0 @@
-// It takes 276us to read from sd card and write in 112 buffer
- 
-//~ #include"SDcard.h"
-#define T_frames 30
-unsigned char buffer_112_counter,sent_tm = 0;
-int disk_read(uint8_t *, uint64_t),j;
-bool new_session = true;
-bool last_buffer = false;
-bool first_block = true;
-bool last_block =false;
-bool repeat_T_frame = false;
-unsigned int counter_in_block=0,diff_prev=0;
-unsigned char  EOS_counter = 0;
-unsigned char enable_T_frame = false;
-uint64_t  start_block_num ;           // Read from TC
-uint64_t  end_block_num ;            // Read from TC
-uint64_t  Number_of_blocks_to_read ;
-uint64_t  block_counter = 0;
-unsigned char buffer_512[512], buffer_112[112],counter_in_S_frame=0,counter_in_SCH=0;
-unsigned char make_EOS_flag = true;
-bool reset = false;
- 
-void differential_encode(unsigned char* ptr, int length){
-    
-        for(int i=0; i<length;i++){
-        
-            unsigned char s = ptr[i] , t;
-            t = s ^ (s >> 1);
-            (diff_prev == 0) ? t=t^0x00 : t=t^0x80 ;
-            diff_prev = int(s & 0x01);
-            ptr[i] = t;
-        }
-        
-    } 
- 
-void send_tm_from_SD_card(){
-    
-    if(make_EOS_flag == true){
-        make_EOS_flag = false;
-        Number_of_blocks_to_read = end_block_num - start_block_num +1;
-    }
-    
-    
-    for(buffer_112_counter=0;buffer_112_counter<112;buffer_112_counter++){
-      
- 
-        if(new_session == true){          //check if it is beginnig of session  
- 
-            buffer_112[buffer_112_counter]=S_frame[counter_in_S_frame++];  // sending S frame 
-            
-            if(counter_in_S_frame==48){
-//                cout<<"new_session_over\n";
-                counter_in_S_frame=0;
-                new_session = false;
-                enable_T_frame = true;
-//              enable_SCH = true;
-            }
-        }
-        else if(enable_T_frame == true){             // To send t frames
- 
-            if(block_counter != Number_of_blocks_to_read){                  
-                
-                if(first_block){                            // Read first block
-//                    cout<<"brooooooo"<<start_block_num<<"yo"<<endl;   
-                    SPI_mutex.lock();     
-                    disk_read(buffer_512,start_block_num );
-                    SPI_mutex.unlock();
-                    counter_in_block = 0;
-                    block_counter++;
-                    
-                    first_block = false;
-//                    cout<<"first block exit\n";
-//                   cout<<Number_of_blocks_to_read;
-                   
-                   //printf("\n");
-//                    for(int j=0;j<512;j++){
-//                    printf("%02X ",buffer_512[j]);
-//                    }
-//                    printf("\n");
-//                    if(block_counter == Number_of_blocks_to_read){
-//                        last_block = true;
-//                    }
-                    
-                    
-                }
-                if((counter_in_block == 318 )&&(sent_tm<38)){                 // Read next block
- 
-//                    cout<<"next block exit\n";
-                    SPI_mutex.lock();
-                    disk_read(buffer_512,start_block_num + block_counter );
-                    SPI_mutex.unlock();
-                    counter_in_block = 0;
-                    block_counter++;
-                    if(block_counter == Number_of_blocks_to_read){
-                        last_block = true;
-                    }
-                }
-            }
-                        
-            if(!last_block){  
-              
- //                 cout<<int(sent_tm)<<" ";
-                if(sent_tm<38){
-                    buffer_112[buffer_112_counter] = buffer_512[counter_in_block++];    // sending T frames
-//                  cout<<int (counter_in_block)<<" ";
-                    if(counter_in_block == 318){
-                       
-                        sent_tm = sent_tm + 2;
-                    }   
-                }
-                else if(sent_tm == (T_frames-1)){
-                    buffer_112[buffer_112_counter] = buffer_512[(counter_in_block++ )-159];
-                    if(counter_in_block == 318){
-//                        cout<<"last block exit\n";
-                        sent_tm = T_frames;
-                    }
-                }
-                else if(sent_tm == T_frames){       // Give eos and start new session         
-                    buffer_112[buffer_112_counter]=EoS[EOS_counter++];
-                        if(EOS_counter == 120){
-                            enable_T_frame = false;
-                            new_session = true;
-                            EOS_counter =0;
-                            sent_tm=0;
-                            repeat_T_frame = false;
-//                          cout<<"eos exit\n";
-                        }
-                }
-            }
-            if(last_block){
-//                cout<<"lb";
-                if(sent_tm == (T_frames-1) && (repeat_T_frame == false)){
-                    buffer_112[buffer_112_counter] = buffer_512[(counter_in_block++ )-159];
-                    if(counter_in_block == 318){
-//                      cout<<"repeat block exit\n";
-                        sent_tm = T_frames;
-                    }
-                }
-                 if((sent_tm == T_frames) && (repeat_T_frame == false)){       // Give eos and start new session         
-                    buffer_112[buffer_112_counter]=EoS[EOS_counter++];
-                       if(EOS_counter == 120){
-//                        cout<<"eos exit";
-                        enable_T_frame = false;
-                        new_session = true;
-                        EOS_counter =0;
-                        sent_tm=0;
-                    }
-                }
-                else if((sent_tm < (T_frames-1)) && (repeat_T_frame == false)){
-                    buffer_112[buffer_112_counter] = buffer_512[counter_in_block++];    // sending last two T frames    
-                    if(counter_in_block == 318){
-                        sent_tm = sent_tm + 2;
-                        repeat_T_frame= true;
-                    }
-                }
-                else if((sent_tm< T_frames) && (repeat_T_frame == true)){
-                    buffer_112[buffer_112_counter] = buffer_512[(counter_in_block++ )-159];
-                    if(counter_in_block == 477){
-                        sent_tm = sent_tm +1;
-                        counter_in_block = counter_in_block-159;
-                    }
-                }
-                else if((sent_tm == T_frames ) && (repeat_T_frame == true)){       // Give eos and start new session         
-                   
-                    buffer_112[buffer_112_counter]=EoS[EOS_counter++];
-                        if(EOS_counter == 120){
-                        enable_T_frame = false;
-                        new_session = true;
-                        EOS_counter =0;
-//                    printf("yoooo %d",int(sent_tm));    
-                        sent_tm=0;
-                    
-                        last_block = false;
-                        last_buffer = true;
-                        printf("?\r\n");
-                        break;
-                    }
-                }
-                
-            }   
-        
-        }
-                    
-    }
-    differential_encode(buffer_112, 112);
-    if(last_buffer ==true){
-    diff_prev=0;
-    }
-    
-}
\ No newline at end of file
--- a/adf.h	Fri Jan 15 12:02:12 2016 +0000
+++ b/adf.h	Tue Jan 19 10:30:46 2016 +0000
@@ -3,7 +3,7 @@
 //Ticker ticker;
  
 bool sent_tmfrom_SDcard;
-bool loop_on;
+//bool loop_on;
 bool ADF_off;
 bool buffer_state;
 bool finish_write_data;
@@ -286,50 +286,49 @@
     
     
 #define adf_SND_SDCard {\
-    buffer_state = true;\
-    last_buffer = false;\
-    loop_on = true;\
-    ADF_off = false;\
     sent_tmfrom_SDcard = true;\
+    configure_adf;\
     signal = COM_MNG_TMTC_SIGNAL_ADF_SD;\
-    start_block_num = starting_add;\
-    end_block_num = ending_add;\
-    initial_adf_check;\
-    initiate;\
     send_data;\
     while(loop_on){\
         /*led2=!led2;*/\
-        gCOM_MNG_TMTC_THREAD->signal_wait(COM_MNG_TMTC_SIGNAL_ADF_SD);\
-        if(ADF_off){\
-            SPI_mutex.lock();\
-            /*ticker.detach();*/\
-            gCS_ADF=0;\
-            spi.write(0xB1);\
-            gCS_ADF=1;\
-            SPI_mutex.unlock();\
-            gPC.puts("transmission done\r\n");\
-            loop_on = false;\
-        }else{\
-            write_data;\
-            if(!last_buffer)\
-            send_tm_from_SD_card();\
+        /*gCOM_MNG_TMTC_THREAD->signal_wait(COM_MNG_TMTC_SIGNAL_ADF_SD);*/\
+        wait_ms(COM_TX_TICKER_LIMIT);\
+        if(IRQ){\
+            if(finish_write_data){\
+                if(ADF_off){\
+                    SPI_mutex.lock();\ 
+                    gCS_ADF=0;\
+                    spi.write(0xB1);\
+                    gCS_ADF=1;\
+                    SPI_mutex.unlock();\
+                    loop_on = false;\
+                    gPC.puts("Transmission done\r\n");\
+                }\
+                else{\
+                    ADF_off = true;\
+                }\
+            }else{\   
+                write_data;\
+                send_tm_from_SD_card();\
+            }\
         }\
     }\
 }
     
-void read_TC(Base_tc* TC_ptr){
-    gPC.puts("Inside sd card sending\r\n");
-    unsigned char service_subtype = 0;
-    uint64_t starting_add  = 0, ending_add = 0;
-    service_subtype = (TC_ptr->TC_string[2])&0x0f;
-    starting_add =  (TC_ptr->TC_string[5]) +  ( (TC_ptr->TC_string[4])<<8 ) + ( (TC_ptr->TC_string[3]) <<16);
-    ending_add =  (TC_ptr->TC_string[8]) +  ( (TC_ptr->TC_string[7])<<8 ) + ( (TC_ptr->TC_string[6]) <<16);
-    starting_add = 10; // for now
-    ending_add = 20;
-//    adf_SND_SDCard(starting_add , ending_add);
-    gPC.puts("sending from sd card\r\n");
-    adf_SND_SDCard;
-}
+//void read_TC(Base_tc* TC_ptr){
+//    gPC.puts("Inside sd card sending\r\n");
+//    unsigned char service_subtype = 0;
+//    uint64_t starting_add  = 0, ending_add = 0;
+//    service_subtype = (TC_ptr->TC_string[2])&0x0f;
+//    starting_add =  (TC_ptr->TC_string[5]) +  ( (TC_ptr->TC_string[4])<<8 ) + ( (TC_ptr->TC_string[3]) <<16);
+//    ending_add =  (TC_ptr->TC_string[8]) +  ( (TC_ptr->TC_string[7])<<8 ) + ( (TC_ptr->TC_string[6]) <<16);
+//    starting_add = 10; // for now
+//    ending_add = 20;
+////    adf_SND_SDCard(starting_add , ending_add);
+//    gPC.puts("sending from sd card\r\n");
+//    adf_SND_SDCard;
+//}
  
 #define configure_adf {\
     finish_write_data = false;\
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cdms_sd.h	Tue Jan 19 10:30:46 2016 +0000
@@ -0,0 +1,598 @@
+
+
+
+SPI spi(PTE1, PTE3, PTE2);      // MOSI,MISO, CLOCK microcontroller(in order)     
+DigitalOut cs_sd(PTE22);
+
+Serial sd1(USBTX,USBRX);
+
+
+#define SD_COMMAND_TIMEOUT 5000
+
+#define SD_DBG             0
+
+#define R1_IDLE_STATE           (1 << 0)
+#define R1_ERASE_RESET          (1 << 1)
+#define R1_ILLEGAL_COMMAND      (1 << 2)
+#define R1_COM_CRC_ERROR        (1 << 3)
+#define R1_ERASE_SEQUENCE_ERROR (1 << 4)
+#define R1_ADDRESS_ERROR        (1 << 5)
+#define R1_PARAMETER_ERROR      (1 << 6)
+
+
+
+#define SD_MAX_CYCLES 10000
+
+extern uint8_t SD_INIT_FLAGS;
+
+
+
+int initialise_card();
+int initialise_card_v1();
+int initialise_card_v2();
+int disk_write(const uint8_t *, uint64_t);
+int disk_read(uint8_t *, uint64_t);
+int disk_initialize();
+int disk_erase(int,int);
+
+//void FCTN_CDMS_INIT_SD();
+//int FCTN_CDMS_WR_SD(const uint8_t *, uint64_t);
+//int FCTN_CDMS_RD_SD(uint8_t *, uint64_t);
+uint8_t FCTN_SD_MNGR(uint8_t);
+
+
+int cmd(int, int);
+int cmd58();
+int cmdx(int, int);
+int cmd8();
+int read(uint8_t*, uint32_t );
+int write(const uint8_t*, uint32_t );
+static uint32_t ext_bits(unsigned char *, int , int );
+int SD_WRITE(uint8_t*,uint8_t,uint8_t);
+void FCTN_CDMS_SD_INIT();
+int SD_READ(uint8_t*,uint8_t,uint8_t);
+#define SDCARD_FAIL 0
+#define SDCARD_V1   1
+#define SDCARD_V2   2
+#define SDCARD_V2HC 3
+
+
+
+
+
+
+
+
+
+
+
+int cdv;
+uint64_t sd_sectors();
+uint64_t sectors;
+
+void FCTN_CDMS_SD_INIT()
+{
+   
+    initialise_card();
+    
+    disk_initialize();
+         
+}
+
+    
+
+uint8_t  FCTN_SD_MNGR(uint8_t sid)
+
+{
+    
+    uint32_t SD_MNG_SECT=7000;
+    uint32_t block_number;
+    uint8_t fsc;
+    uint8_t *buffer;
+    uint32_t i=0;
+    disk_read(buffer, SD_MNG_SECT);
+   
+    if(sid==0x0)
+    {
+        fsc=buffer[0];
+        buffer[0]++;
+        buffer[511]+=2;
+        disk_write(buffer,SD_MNG_SECT);
+    }
+    if(sid==0x1)
+    {
+        fsc=buffer[1];
+        buffer[1]++;
+        buffer[511]+=2;
+        disk_write(buffer,SD_MNG_SECT);
+    }
+    if(sid==0x2)
+    {
+        fsc=buffer[2];
+        buffer[2]++;
+        buffer[511]+=2;
+        disk_write(buffer,SD_MNG_SECT);
+    }
+     if(sid==0x3)
+    {
+        fsc=buffer[30];
+        printf("Hey buffer[300] pre-increment is %d\r\n",buffer[300]);
+        buffer[300]+=1;
+        printf("Hey buffer[300] post-increment is %d\r\n",buffer[300]);
+        buffer[511]+=2;
+        disk_write(buffer,SD_MNG_SECT);
+        disk_read(buffer, SD_MNG_SECT);
+        printf("Hey buffer[300] post writing is %d\r\n",buffer[300]);
+         printf("Hey buffer[511] post writing is %d\r\n",buffer[511]);
+    }
+     if(sid==0x4)
+    {
+        fsc=buffer[4];
+        buffer[4]++;
+        buffer[511]+=2;
+        disk_write(buffer,SD_MNG_SECT);
+    }
+    return fsc;
+}
+
+
+int SD_WRITE(uint8_t* buffer,uint8_t fsc,uint8_t sid)
+{
+   
+    uint32_t SD_SCP_FIRST=1001;
+    uint32_t SD_SCP_LAST=2000;
+    uint32_t SD_SFF_AT_FIRST=2001;
+    uint32_t SD_SFF_AT_LAST = 3000;
+    uint32_t SD_SFF_BT_FIRST =3001;
+    uint32_t SD_SFF_BT_LAST=4000;
+    uint32_t SD_HK_ARCH_FIRST=4001;
+    uint32_t SD_HK_ARCH_LAST= 5000;
+    uint32_t LOG_FIRST =5001;
+    uint32_t LOG_LAST=6000;
+    uint32_t SD_MNG_SECT=7000;
+    uint32_t block_number;
+    int result;
+    if(sid==0x0)
+    {
+        block_number=SD_SCP_FIRST+uint32_t(fsc);
+//        printf("write_block_number=%d\r\n",block_number);
+        result= disk_write(buffer,block_number);
+        return result;
+    }
+   if(sid==0x1)
+    {
+        block_number=SD_SFF_AT_FIRST + fsc;
+        result= disk_write(buffer,block_number);
+        return result;
+    }
+     if(sid==0x2)
+    {
+        block_number=SD_SFF_BT_FIRST + fsc;
+        result= disk_write(buffer,block_number);
+        return result;
+    }
+     if(sid==0x3)
+    {
+        block_number=SD_HK_ARCH_FIRST+fsc;
+//        sd1.printf("Block number is %d \r\n",block_number);
+        result= disk_write(buffer,block_number);
+        return result;
+    }
+     if(sid==0x4)
+    {
+        block_number=LOG_FIRST +fsc;
+        result= disk_write(buffer,block_number);
+        return result;
+    }
+    return 1;
+}
+
+int SD_READ(uint8_t* buffer,uint8_t fsc,uint8_t sid)
+{
+   
+    uint32_t SD_SCP_FIRST=1001;
+    uint32_t SD_SCP_LAST=2000;
+    uint32_t SD_SFF_AT_FIRST=2001;
+    uint32_t SD_SFF_AT_LAST = 3000;
+    uint32_t SD_SFF_BT_FIRST =3001;
+    uint32_t SD_SFF_BT_LAST=4000;
+    uint32_t SD_HK_ARCH_FIRST=4001;
+    uint32_t SD_HK_ARCH_LAST= 5000;
+    uint32_t LOG_FIRST =5001;
+    uint32_t LOG_LAST=6000;
+    uint32_t SD_MNG_SECT=7000;
+    uint32_t block_number;
+    int result;
+    if(sid==0x0)
+    {
+        block_number=SD_SCP_FIRST + uint32_t(fsc);
+//        sd1.printf("read_block_number=%d\r\n",block_number);
+        result= disk_read(buffer,block_number);
+    }
+   else if(sid==0x1)
+    {
+        block_number=SD_SFF_AT_FIRST + fsc;
+        result= disk_read(buffer,block_number);
+    }
+    else if(sid==0x2)
+    {
+        block_number=SD_SFF_BT_FIRST + fsc;
+        result= disk_read(buffer,block_number);
+    }
+    else if(sid==0x3)
+    {
+        block_number=SD_HK_ARCH_FIRST + fsc;
+        result= disk_read(buffer,block_number);
+    }
+    else if(sid==0x4)
+    {
+        block_number=LOG_FIRST +fsc;
+        result= disk_read(buffer,block_number);
+    }
+    else
+    {
+        return 1;
+    }
+    return result;
+}
+
+
+int initialise_card()
+{
+    // Set to 100kHz for initialisation, and clock card with cs_sd = 1
+    spi.frequency(100000);           // changed on 31 12 2015 to 1 MHz 
+    cs_sd = 1;
+    for (int i = 0; i < 16; i++) {
+        spi.write(0xFF);
+    }
+
+    // send CMD0, should return with all zeros except IDLE STATE set (bit 0)
+    if (cmd(0, 0) != R1_IDLE_STATE) {
+        debug("No disk, or could not put SD card in to spi idle state\r\n");
+        return SDCARD_FAIL;
+    }
+
+// send CMD8 to determine whther it is ver 2.x
+    int r = cmd8();
+    if (r == R1_IDLE_STATE) {
+        printf("\rEntering v2\r\n");
+        return initialise_card_v2();
+
+    } else if (r == (R1_IDLE_STATE | R1_ILLEGAL_COMMAND)) {
+        printf("\rEntering v1\r\n");
+        return initialise_card_v1();
+
+    } else {
+        debug("\rNot in idle state after sending CMD8 (not an SD card?)\r\n");
+        return SDCARD_FAIL;
+    }
+}
+
+int initialise_card_v1()
+{
+    for (int i = 0; i < SD_COMMAND_TIMEOUT; i++) {
+        cmd(55, 0);
+        if (cmd(41, 0) == 0) {
+            printf("\rv1 initialization successfull\r\n");
+            cdv = 512;
+            debug_if(SD_DBG, "\n\rInit: SEDCARD_V1\n\r");
+
+            return SDCARD_V1;
+        }
+    }
+
+    debug("\rTimeout waiting for v1.x card\r\n");
+    return SDCARD_FAIL;
+}
+
+
+int initialise_card_v2()
+{
+    for (int i = 0; i < SD_COMMAND_TIMEOUT; i++) {
+        wait_ms(50);
+        cmd58();
+        cmd(55, 0);
+        if (cmd(41, 0x40000000) == 0) {
+            printf("\rv2 initialization successfull\r\n");
+            cmd58();
+            debug_if(SD_DBG, "\n\rInit: SDCARD_V2\n\r");
+            cdv = 1;
+
+            return SDCARD_V2;
+        }
+    }
+
+    debug("\rTimeout waiting for v2.x card\r\n");
+    return SDCARD_FAIL;
+}
+
+int cmd(int cmd, int arg)
+{
+    cs_sd = 0;
+
+    // send a command
+    spi.write(0x40 | cmd);
+    spi.write(arg >> 24);
+    spi.write(arg >> 16);
+    spi.write(arg >> 8);
+    spi.write(arg >> 0);
+    spi.write(0x95);
+
+    // wait for the repsonse (response[7] == 0)
+    for (int i = 0; i < SD_COMMAND_TIMEOUT; i++) {
+        int response = spi.write(0xFF);
+        if (!(response & 0x80)) {
+            cs_sd = 1;
+            spi.write(0xFF);
+            return response;
+        }
+    }
+    cs_sd = 1;
+    spi.write(0xFF);
+    return -1; // timeout
+}
+
+
+int cmd58()
+{
+    cs_sd = 0;
+    int arg = 0;
+
+    // send a command
+    spi.write(0x40 | 58);
+    spi.write(arg >> 24);
+    spi.write(arg >> 16);
+    spi.write(arg >> 8);
+    spi.write(arg >> 0);
+    spi.write(0x95);
+
+    // wait for the repsonse (response[7] == 0)
+    for (int i = 0; i < SD_COMMAND_TIMEOUT; i++) {
+        int response = spi.write(0xFF);
+        if (!(response & 0x80)) {
+            int ocr = spi.write(0xFF) << 24;
+            ocr |= spi.write(0xFF) << 16;
+            ocr |= spi.write(0xFF) << 8;
+            ocr |= spi.write(0xFF) << 0;
+            cs_sd = 1;
+            spi.write(0xFF);
+            return response;
+        }
+    }
+    cs_sd = 1;
+    spi.write(0xFF);
+    return -1; // timeout
+}
+
+
+int cmd8()
+{
+    cs_sd = 0;
+
+    // send a command
+    spi.write(0x40 | 8); // CMD8
+    spi.write(0x00);     // reserved
+    spi.write(0x00);     // reserved
+    spi.write(0x01);     // 3.3v
+    spi.write(0xAA);     // check pattern
+    spi.write(0x87);     // crc
+
+    // wait for the repsonse (response[7] == 0)
+    for (int i = 0; i < SD_COMMAND_TIMEOUT * 1000; i++) {
+        char response[5];
+        response[0] = spi.write(0xFF);
+        if (!(response[0] & 0x80)) {
+            for (int j = 1; j < 5; j++) {
+                response[i] = spi.write(0xFF);
+            }
+            cs_sd = 1;
+            spi.write(0xFF);
+            return response[0];
+        }
+    }
+    cs_sd = 1;
+    spi.write(0xFF);
+    return -1; // timeout
+}
+
+uint64_t sd_sectors()
+{
+    uint32_t c_size, c_size_mult, read_bl_len;
+    uint32_t block_len, mult, blocknr, capacity;
+    uint32_t hc_c_size;
+    uint64_t blocks;
+
+    // CMD9, Response R2 (R1 byte + 16-byte block read)
+    if (cmdx(9, 0) != 0) {
+        debug("\rDidn't get a response from the disk\n");
+        return 0;
+    }
+
+    uint8_t cs_sdd[16];
+    if (read(cs_sdd, 16) != 0) {
+        debug("\rCouldn't read cs_sdd response from disk\n");
+        return 0;
+    }
+
+    // cs_sdd_structure : cs_sdd[127:126]
+    // c_size        : cs_sdd[73:62]
+    // c_size_mult   : cs_sdd[49:47]
+    // read_bl_len   : cs_sdd[83:80] - the *maximum* read block length
+
+    int cs_sdd_structure = ext_bits(cs_sdd, 127, 126);
+
+    switch (cs_sdd_structure) {
+        case 0:
+            cdv = 512;
+            c_size = ext_bits(cs_sdd, 73, 62);
+            c_size_mult = ext_bits(cs_sdd, 49, 47);
+            read_bl_len = ext_bits(cs_sdd, 83, 80);
+
+            block_len = 1 << read_bl_len;
+            mult = 1 << (c_size_mult + 2);
+            blocknr = (c_size + 1) * mult;
+            capacity = blocknr * block_len;
+            blocks = capacity / 512;
+            debug_if(SD_DBG, "\n\rSDCard\n\rc_size: %d \n\rcapacity: %ld \n\rsectors: %lld\n\r", c_size, capacity, blocks);
+            break;
+
+        case 1:
+            cdv = 1;
+            hc_c_size = ext_bits(cs_sdd, 63, 48);
+            blocks = (hc_c_size+1)*1024;
+            debug_if(SD_DBG, "\n\rSDHC Card \n\rhc_c_size: %d\n\rcapacity: %lld \n\rsectors: %lld\n\r", hc_c_size, blocks*512, blocks);
+            break;
+
+        default:
+            debug("cs_sdD struct unsupported\r\n");
+            return 0;
+    };
+    return blocks;
+}
+
+int cmdx(int cmd, int arg)
+{
+    cs_sd = 0;
+
+    // send a command
+    spi.write(0x40 | cmd);
+    spi.write(arg >> 24);
+    spi.write(arg >> 16);
+    spi.write(arg >> 8);
+    spi.write(arg >> 0);
+    spi.write(0x95);
+
+    // wait for the repsonse (response[7] == 0)
+    for (int i = 0; i < SD_COMMAND_TIMEOUT; i++) {
+        int response = spi.write(0xFF);
+        if (!(response & 0x80)) {
+            return response;
+        }
+    }
+    cs_sd = 1;
+    spi.write(0xFF);
+    return -1; // timeout
+}
+
+static uint32_t ext_bits(unsigned char *data, int msb, int lsb)
+{
+    uint32_t bits = 0;
+    uint32_t size = 1 + msb - lsb;
+    for (int i = 0; i < size; i++) {
+        uint32_t position = lsb + i;
+        uint32_t byte = 15 - (position >> 3);
+        uint32_t bit = position & 0x7;
+        uint32_t value = (data[byte] >> bit) & 1;
+        bits |= value << i;
+    }
+    return bits;
+}
+
+int disk_initialize()
+{
+    int i = initialise_card();
+    debug_if(SD_DBG, "init card = %d\n", i);
+    sectors = sd_sectors();
+
+    // Set block length to 512 (CMD16)
+    if (cmd(16, 512) != 0) {
+        debug("\rSet 512-byte block timed out\r\n");
+        return 1;
+    } else {
+        printf("\rDisk initialization successfull\r\n");
+    }
+
+    spi.frequency(1000000); // Set to 1MHz for data transfer
+    return 0;
+}
+
+int disk_write(const uint8_t *buffer, uint64_t block_number)
+
+{
+    // set write address for single block (CMD24)
+    if (cmd(24, block_number * cdv) != 0) {
+        return 1;
+    }
+
+    // send the data block
+    write(buffer, 512);
+    //printf("Written Successfully bro \n");
+    return 0;
+}
+
+int write(const uint8_t*buffer, uint32_t length)
+{
+    cs_sd = 0;
+
+    // indicate start of block
+    spi.write(0xFE);
+
+    // write the data
+    for (int i = 0; i < length; i++) {
+        spi.write(buffer[i]);
+    }
+
+    // write the checksum
+    spi.write(0xFF);
+    spi.write(0xFF);
+
+    // check the response token
+    if ((spi.write(0xFF) & 0x1F) != 0x05) {
+        cs_sd = 1;
+        spi.write(0xFF);
+        return 1;
+    }
+
+    // wait for write to finish
+    while (spi.write(0xFF) == 0);
+
+    cs_sd = 1;
+    spi.write(0xFF);
+    return 0;
+}
+
+int disk_read(uint8_t *buffer, uint64_t block_number)
+{
+    // set read address for single block (CMD17)
+    if (cmd(17, block_number * cdv) != 0) {
+        return 1;
+    }
+
+    // receive the data
+    read(buffer, 512);
+    return 0;
+}
+
+int read(uint8_t *buffer, uint32_t length)
+{
+    cs_sd = 0;
+
+    // read until start byte (0xFF)
+    while (spi.write(0xFF) != 0xFE);
+
+    // read data
+    for (int i = 0; i < length; i++) {
+        buffer[i] = spi.write(0xFF);
+    }
+    spi.write(0xFF); // checksum
+    spi.write(0xFF);
+
+    cs_sd = 1;
+    spi.write(0xFF);
+    return 0;
+}
+
+int disk_erase(int startBlock, int totalBlocks)
+{
+    if(cmd(32, startBlock * cdv) != 0) {
+        return 1;
+    }
+    if (cmd(33, (startBlock+totalBlocks-1) * cdv) != 0) {
+        return 1;
+    }
+    if (cmd(38,0) != 0) {
+        return 1;
+    }
+    
+    return 0; //normal return
+}
--- a/main.cpp	Fri Jan 15 12:02:12 2016 +0000
+++ b/main.cpp	Tue Jan 19 10:30:46 2016 +0000
@@ -1,24 +1,26 @@
 // TESTING PUSH PULL IN MAIN CPP
+bool loop_on;
+#define ENDL "\r" << endl
 
 #include "mbed.h"
 #include "rtos.h"
 #include "mbed_debug.h"
-
+#include "cdms_sd.h"
 #include "Structures.h"
 #include "DefinitionsAndGlobals.h"
 #include "crc.h"
 #include "COM_SND_TM_functions.h"
 #include "COM_SND_TM.h"
-#include "SDCread.h"
+#include "Compression.h"
+#include "COM_RCV_TC.h"
+#include "OBSRS.h"
 #include "adf.h"
-#include "Compression.h"
-#include "SDC_init.h"
-#include "COM_RCV_TC.h"
 #include "COM_MNG_TMTC.h"
 #include "COM_POWER_ON_TX.h"
 #include "COM_POWER_OFF_TX.h"
 #include "ThreadsAndFunctions.h"
 
+
 int main()
 {
     // ******************INITIALISATIONS START******************