Team Fox / Mbed 2 deprecated BAE_QM_MAR9

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of workinQM_5thJan_azad by Team Fox

Revision:
19:79e69017c855
Parent:
17:fc782f7548c6
Child:
20:949d13045431
--- a/TCTM.cpp	Sat May 14 11:19:13 2016 +0000
+++ b/TCTM.cpp	Sat Jun 04 11:29:13 2016 +0000
@@ -10,6 +10,19 @@
 #include "cassert"
 #include"math.h"
 
+//**********************************STATUS_PARAMETERS*****************************************************
+uint8_t BCN_TX_SW_ENABLE=0x00;
+//extern uint8_t BCN_TX_STATUS;?? is it same??*****************************************************************************************DOUBT
+uint8_t ACS_TR_XY_SW_STATUS=0x00;
+uint8_t ACS_TR_Z_SW_STATUS=0x00;
+uint8_t ACS_ATS1_SW_STATUS=0x00;
+uint8_t ACS_ATS2_SW_STATUS=0x00;
+
+//***********************************FOR STANDBY TIMER****************************************************
+extern void BAE_STANDBY_TIMER_RESET();
+
+
+//**********************************EXTERN_PARAMETERS******************************************************
 /*define the pins for digital out*/
 
 extern DigitalOut ATS1_SW_ENABLE; // enable of att sens2 switch
@@ -21,9 +34,12 @@
 extern DigitalOut BCN_SW;      //Beacon switch
 extern uint8_t BCN_TX_STATUS;
 extern uint8_t BCN_FEN;
+extern uint8_t BCN_STANDBY;
+uint8_t BCN_TX_MAIN_STATUS; 
 extern BAE_HK_actual actual_data;
 extern BAE_HK_min_max bae_HK_minmax;
 extern uint32_t BAE_STATUS;
+extern uint8_t BAE_STANDBY;
 extern float data[6];
 extern float moment[3];
 extern uint8_t ACS_STATE;
@@ -38,7 +54,7 @@
 //extern DigitalOut ACS_ACQ_DATA_ENABLE;
 
 /*given a default value as of now shuld read value from flash and increment it write it back very time it starts(bae)*/
-extern uint8_t BAE_RESET_COUNTER=0;
+extern uint8_t BAE_RESET_COUNTER;
 
 //extern uint8_t BCN_FAIL_COUNT;
 
@@ -79,1115 +95,1463 @@
 //uint8_t tm1[134];
 
 void FCTN_BAE_TM_TC (uint8_t* tc)
-
 {
-  //  tm1[0] = 1;
-    uint8_t service_type=(tc[2]&0xF0);
+  //tm1[0] = 1;
+    //calculating crc
+    
     /*chaged*/
     uint8_t* tm; // without it some identifier error
-    uint16_t crc16;
-
-
-    switch(service_type)
-    {
-        case 0x60:
-        {
-            printf("Memory Management Service\r\n");
-            uint8_t service_subtype=(tc[2]&0x0F);
-
-            switch(service_subtype)
-            {
-                case 0x01:
-                {
-                    printf("Read from Flash\r\n");
-                    uint16_t jj; 
-                    uint16_t MID = ((uint16_t)tc[3] << 8) | tc[4];
-                    switch(MID)
-                    {case 0x1100:jj=0x00;// using uint16_t as jj typesimilarly used in FCTN_CDMS_WR_FLASH
-                                break;
-                     case 0x0100:jj=0x01;
-                                break;
-                     case 0x0101:jj=0x02;
-                                break;
-                     case 0x0102:jj=0x03;
-                                break;
-                     case 0x0107:jj=0x04;
-                                break;
-                     case 0x0103:jj=0x05;
-                                break;
-                     case 0x0104:jj=0x05;
-                                break;
-                     case 0x0105:jj=0x06;
-                                break;
-                     case 0x0106:jj=0x07;
-                            break;
-                    }
-                    /*pointer....!!!!*/
-                    uint32_t FLASH_TEMP = FCTN_CDMS_RD_FLASH(jj);
-                                        
-                           tm[0] = 0x60;
-                           tm[1] = tc[0];
-                           tm[2] = ACK_CODE;
-                           for(int i=0; i<8*4; i+=4)
-                           {
-                                  tm[4+i] =(uint8_t )(((FLASH_TEMP)>>24)&0xFF);
-                                tm[5+i] =(uint8_t ) (((FLASH_TEMP)>>16)&0xFF);
-                                tm[6+i] =(uint8_t ) (((FLASH_TEMP)>>8)&0xFF); 
-                                tm[7+i] =(uint8_t ) ((FLASH_TEMP) & 0xFF);   
-                               
-                            }
-
-                                                 
-                           for (int i=4+8*4; i<132;i++)
-                           {
-                               tm[i] = 0x00;
-                           }
-                           crc16 = CRC::crc16_gen(tm,132);
-                           tm[132] = (uint8_t)((crc16&0xFF00)>>8);
-                           tm[133] = (uint8_t)(crc16&0x00FF); 
-                    
-                    break;
-                }
-                case 0x02:
-                {
-                    printf("Read from RAM\r\n");
-                    uint16_t MID = ((uint16_t)tc[3] << 8) | tc[4];
-                    switch(MID)
-                    {
-
-                        case 0x0001:
-                        {
-                            printf("\nRead from MID 0001 hk\n");
-
-                            /*taking some varible till we find some thing more useful*/
-                            //uint8_t ref_val=0x01;
-                            telemetry[0] = 1;
-                            telemetry[1] = tc[0];
-                            telemetry[2] = ACK_CODE;
-                            /*random or with bcn_tx_sw_enable assuming it is 1 bit in length
-                            how to get that we dont know, now we just assume it to be so*/
-                            telemetry[3] = (BCN_SW);
-                            telemetry[3] = telemetry[3]|(TRXY_SW<<1);
-                            telemetry[3] = telemetry[3]|(TRZ_SW<<2);
-                            telemetry[3] = telemetry[3]|(ATS1_SW_ENABLE<<3);
-                            telemetry[3] = telemetry[3]|(ATS2_SW_ENABLE<<4);
-
-                            if(BCN_TX_STATUS==2)
-                                telemetry[3] = telemetry[3]|0x20;
-                            else
-                            telemetry[3] = telemetry[3] & 0xDF;
-
-                            telemetry[3] = telemetry[3]|(BCN_FEN<<6);
-                            uint8_t mask_val=BAE_ENABLE & 0x00000008;
-                            /*can be a problem see if any error occurs*/
-                            telemetry[3] = telemetry[3]|(mask_val<<7);
-
-                            /*not included in the code yet*/
-                            telemetry[4] = BAE_RESET_COUNTER;
-                            telemetry[5] = ACS_STATE;
-                            telemetry[5] = telemetry[5]|(EN_BTRY_HT<<3);
-                            telemetry[5] = telemetry[5]|(phase_TR_x<<4);
-                            telemetry[5] = telemetry[5]|(phase_TR_y<<5);
-                            telemetry[5] = telemetry[5]|(phase_TR_z<<6);
-                            /*spare to be fixed*/
-                            //telemetry[5] = telemetry[5]|(Spare))<<7);
-                            /**/
-                            uint8_t soc_powerlevel_2=50;
-                            uint8_t soc_powerlevel_3=65;
-
-                            telemetry[6] = soc_powerlevel_2;
-                            telemetry[7] = soc_powerlevel_3;
-
-                            /*to be fixed*/
-                            telemetry[8] = 0;
-                            telemetry[9] = 0;
-                            telemetry[10] = 0;
-                            telemetry[11] = 0;
-                            //telemetry[8] = Torque Rod X Offset;
-                            //telemetry[9] = Torque Rod Y Offset;
-                            //telemetry[10] = Torque Rod Z Offset;
-                            //telemetry[11] = ACS_DEMAG_TIME_DELAY;
-                            telemetry[12] = (BAE_STATUS>>24) & 0xFF;
-                            telemetry[13] = (BAE_STATUS>>16) & 0xFF;
-                            telemetry[14] = (BAE_STATUS>>8) & 0xFF;
-                            telemetry[15] = BAE_STATUS & 0xFF;
-
-                            /*to be fixed*/
-                            //telemetry[16] = BCN_FAIL_COUNT;
-                            telemetry[17] = actual_data.power_mode;
-                            /*to be fixed*/
-                            uint16_t P_BAE_I2CRX_COUNTER=0;
-                            uint16_t P_ACS_MAIN_COUNTER=0;
-                            uint16_t P_BCN_TX_MAIN_COUNTER=0;
-                            uint16_t P_EPS_MAIN_COUNTER=0;
-
-                            telemetry[18] = P_BAE_I2CRX_COUNTER>>8;
-                            telemetry[19] = P_BAE_I2CRX_COUNTER;
-                            telemetry[20] = P_ACS_MAIN_COUNTER>>8;
-                            telemetry[21] = P_ACS_MAIN_COUNTER;
-                            telemetry[22] = P_BCN_TX_MAIN_COUNTER>>8;
-                            telemetry[23] = P_BCN_TX_MAIN_COUNTER;
-                            telemetry[24] = P_EPS_MAIN_COUNTER>>8;
-                            telemetry[25] = P_EPS_MAIN_COUNTER;
-
-                            //actual_data.AngularSpeed_actual[0]=5.32498;
-                            for(int i=0; i<3; i++)
-                                FCTN_CONVERT_FLOAT((float)actual_data.Bvalue_actual[i],&telemetry[26+ (i*4)]);
-                            for(int i=0; i<3; i++)
-                                FCTN_CONVERT_FLOAT((float)actual_data.AngularSpeed_actual[i],&telemetry[38+(i*4)]);
-                                
-                            //printf("\n\rthe value is 38\t %x\n",telemetry[38]);
-                            //printf("\n\rthe value is 39\t%x\n",telemetry[39]);
-                             //printf("\n\rthe value is 40\t%x\n",telemetry[40]);
-                              //printf("\n\rthe value is 41\t%x\n",telemetry[41]);
-                              //printf("\n\rthe value true\t%f\n",actual_data.AngularSpeed_actual[0]);
-                            
-                              
-                              //uint32_t input_stage1=0x00000000;
-                              //uint8_t output1[4];
-    //output1[0]=(uint32_t)(telemetry[38]);
-    //output1[1]=(uint32_t)(telemetry[39]);
-    //output1[2]=(uint32_t)(telemetry[40]);
-    //output1[3]=(uint32_t)(telemetry[41]);
-    
-    //input_stage1=output[3]+(output[2]*(0x100))+(output[1]*(0x10000))+(output[0]*(0x1000000));
-    //input_stage1=(output1[0]<<24) | (output1[1]<<16) | (output1[2]<<8) | (output1[3]);
-    
-    
-    //assert(sizeof(float) == sizeof(uint32_t));
-    //float* temp1 = reinterpret_cast<float*>(&input_stage1);
+    uint16_t crc16=CRC::crc16_gen((char)tc,9); //implementing crc
     
-    //printf("\n\r the value is: %f \n",*temp1); 
-
-                            //FAULT_FLAG();
-                            telemetry[50] = actual_data.faultIr_status;
-                            telemetry[51] = actual_data.faultPoll_status;
-                            //Bdot Rotation Speed of Command  telemetry[52-53]
-                            //Bdot Output Current   telemetry[54]
-                            //float l_pmw1 = (PWM1);
-                            //float l_pmw2 = PWM2;
-                            //float l_pmw3 = PWM3;
-
-                           /*__________________________________________________________________*/
-
-                           /*change and check if changing it to PWM1 causes problem*/
-
-                           /*___________________________________________________________________*/
-
-                           float PWM_measured[3];
-
-                           PWM_measured[0] = PWM1.read();
-                           PWM_measured[1] = PWM2.read();
-                           PWM_measured[2] = PWM3.read();
-
-                           FCTN_CONVERT_FLOAT(PWM_measured[0], &telemetry[55]);
-                           FCTN_CONVERT_FLOAT(PWM_measured[1], &telemetry[59]);
-                           FCTN_CONVERT_FLOAT(PWM_measured[2], &telemetry[63]);
-                           float attitude_ang =  angle(actual_data.Bvalue_actual[0],actual_data.Bvalue_actual[1],actual_data.Bvalue_actual[2]);
-                           FCTN_CONVERT_FLOAT(attitude_ang, &telemetry[67]);
-
-                           for (int i=0; i<16; i++)
-                                telemetry[68+i] = quant_data.voltage_quant[i];
-                           for (int i=0; i<12; i++)
-                                telemetry[84+i] = quant_data.current_quant[i];
-                           //telemetry[96]
-                           //telemetry[97]
-                           //telemetry[98]
-                           //telemetry[99]
-                           telemetry[100] = quant_data.Batt_voltage_quant;
-                           telemetry[101] = quant_data.BAE_temp_quant;
-                           telemetry[102] = quant_data.Batt_gauge_quant[1];
-                           telemetry[103] = quant_data.Batt_temp_quant[0];
-                           telemetry[104] = quant_data.Batt_temp_quant[1];
-
-                           //telemetry[105] = beacon temperature;
-
-                           for (int i=105; i<132;i++)
-                           {
-                               telemetry[i] = 0x00;
-                           }
-                           crc16 = CRC::crc16_gen(telemetry,132);
-                           telemetry[132] = (uint8_t)((crc16&0xFF00)>>8);
-                           telemetry[133] = (uint8_t)(crc16&0x00FF);
-
-                           break;
-                        }
-                        case 0x0002:
+    if( ( ((uint8_t)((crc16 & 0xFF00)>>8)==tc[9]) && ((uint8_t)(crc16 & 0x00FF)==tc[10]) )== 0 )
+        {
+            telemetry[0]=0xB0;
+            telemetry[1]=0x00;//tc psc defined for this case
+            telemetry[2]=0x01;//ack code for this case
+            for(int i=3;i<11;i++)
+                {
+                    telemetry[i]=0x00;
+                }
+            //add crc
+            crc16 = CRC::crc16_gen(telemetry,11);
+            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+            telemetry[12] = (uint8_t)(crc16&0x00FF);
+            printf("\n\rincorrect crc");
+            for(int i=13;i<134;i++)
+                {
+                    telemetry[i]=0x00;
+                }
+        }
+    else
+        {
+            //check apid
+            uint8_t apid_check=((tc[1]&0xC0)>>6);
+            if(apid_check!=0x01)
+                {
+                    telemetry[0]=0xB0;
+                    telemetry[1]=tc[0];//tc psc defined for this case
+                    telemetry[2]=0x02;//ack code for this case
+                    for(int i=3;i<11;i++)
                         {
-                            printf("\r\n");
-                            telemetry[0] = 0x60;
-                            telemetry[1] = tc[0];
-                            telemetry[2] = ACK_CODE;
-
-                            for(int i;i<16;i++)
-                            telemetry[i+3] = bae_HK_minmax.voltage_max[i];
-
-                            for(int i;i<12;i++)
-                            telemetry[i+18] = bae_HK_minmax.current_max[i];
-
-                            telemetry[29] = bae_HK_minmax.Batt_voltage_max;;
-                            telemetry[30] = bae_HK_minmax.BAE_temp_max;
-
-                            /*battery soc*/
-                            //telemetry[31] = BAE_HK_min_max bae_HK_minmax.voltage_max;
-
-                            telemetry[32] = bae_HK_minmax.Batt_temp_max[0];
-                            telemetry[33] = bae_HK_minmax.Batt_temp_max[1];
-
-                            /*BCN  temp not there*/
-                            //telemetry[34] = BAE_HK_min_max bae_HK_minmax.;
-
-                            for(int i=0; i<3; i++)
-                                FCTN_CONVERT_FLOAT(bae_HK_minmax.Bvalue_max[i],&telemetry[35+(i*4)]);
-
-                            for(int i=0; i<3; i++)
-                                FCTN_CONVERT_FLOAT(bae_HK_minmax.AngularSpeed_max[i],&telemetry[47+(i*4)]);
-
-                            /*min data*/
-
-                            for(int i;i<16;i++)
-                                telemetry[i+59] = bae_HK_minmax.voltage_min[i];
-
-                            for(int i;i<12;i++)
-                                telemetry[i+74] = bae_HK_minmax.current_min[i];
-
-                            telemetry[86] = bae_HK_minmax.Batt_voltage_min;
-                            telemetry[87] = bae_HK_minmax.BAE_temp_min;
-
-                            /*battery soc*/
-                            //telemetry[88] = BAE_HK_min_max bae_HK_minmax.voltage_max;
-
-                            telemetry[89] = bae_HK_minmax.Batt_temp_min[0];
-                            telemetry[90] = bae_HK_minmax.Batt_temp_min[1];
-                            //huhu//
-
-                            /*BCN  temp not there*/
-                            //telemetry[91] = BAE_HK_min_max bae_HK_minmax.;
-
-                            for(int i=0; i<3; i++)
-                                FCTN_CONVERT_FLOAT(bae_HK_minmax.Bvalue_min[i],&telemetry[91+(i*4)]);
-
-                            for(int i=0; i<3; i++)
-                                FCTN_CONVERT_FLOAT(bae_HK_minmax.AngularSpeed_min[i],&telemetry[103+(i*4)]);
-
-
-                            for (int i=115; i<132;i++)
-                            {
-                               telemetry[i] = 0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,132);
-                            telemetry[132] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[133] = (uint8_t)(crc16&0x00FF);
-                            break;
+                            telemetry[i]=0x00;
                         }
-                    }
-                    break;
-                }
-                case 0x05:
-                {
-                    printf("\nRead from MID 0001 min max\n");
-                    /*changed*/
-                    printf("\n\rwrite on flash\n");
-                     uint32_t FLASH_DATA[8];
-                    
-                    uint16_t MID = ((uint16_t)tc[3] << 8) | tc[4];
-                    switch(MID )
-                    {
-                        
-                        case 0x0100: 
-                        {   
-                            FLASH_DATA[0] = (((uint32_t)tc[5] << 24) | ((uint32_t)tc[6] << 16) | ((uint32_t)tc[7] << 8) | (uint32_t)tc[6]);
-                            FCTN_CDMS_WR_FLASH(0x00,FLASH_DATA[0]);
-                            break;
-                        }
-                        case 0x0101: 
-                        {
-                            FLASH_DATA[1] = (((uint32_t)tc[5] << 24) | ((uint32_t)tc[6] << 16) | ((uint32_t)tc[7] << 8) | (uint32_t)tc[6]);
-                            FCTN_CDMS_WR_FLASH(0x01,FLASH_DATA[1]);
-                            break;
-                        }
-                            
-                        case 0x0102: 
-                            {
-                                FLASH_DATA[2] = (((uint32_t)tc[5] << 24) | ((uint32_t)tc[6] << 16) | ((uint32_t)tc[7] << 8) | (uint32_t)tc[6]);
-                                FCTN_CDMS_WR_FLASH(0x02,FLASH_DATA[2]);
-                                break;
-                            }
-                            
-                        case 0x0103: 
-                            {
-                                FLASH_DATA[3] = (((uint32_t)tc[5] << 24) | ((uint32_t)tc[6] << 16) | ((uint32_t)tc[7] << 8) | (uint32_t)tc[6]);
-                                FCTN_CDMS_WR_FLASH(0x03,FLASH_DATA[3]);
-                                break;                         
-                            }
-                        case 0x0104: 
-                            {
-                                FLASH_DATA[4] = (((uint32_t)tc[5] << 24) | ((uint32_t)tc[6] << 16) | ((uint32_t)tc[7] << 8) | (uint32_t)tc[6]);
-                                FCTN_CDMS_WR_FLASH(0x04,FLASH_DATA[4]);
-                                break;
-                            }
-                            
-                        case 0x0105: 
-                            {
-                                FLASH_DATA[5] = (((uint32_t)tc[5] << 24) | ((uint32_t)tc[6] << 16) | ((uint32_t)tc[7] << 8) | (uint32_t)tc[6]);
-                                FCTN_CDMS_WR_FLASH(0x05,FLASH_DATA[5]);
-                                break;
-                            }
-                        case 0x0106: 
-                            {
-                                FLASH_DATA[6] = (((uint32_t)tc[5] << 24) | ((uint32_t)tc[6] << 16) | ((uint32_t)tc[7] << 8) | (uint32_t)tc[6]);
-                                FCTN_CDMS_WR_FLASH(0x06,FLASH_DATA[6]);
-                                break;
-                            }
-                            
-                        case 0x0107: 
-                            {
-                                FLASH_DATA[7] = (((uint32_t)tc[5] << 24) | ((uint32_t)tc[6] << 16) | ((uint32_t)tc[7] << 8) | (uint32_t)tc[6]);
-                                FCTN_CDMS_WR_FLASH(0x07,FLASH_DATA[7]);
-                                break;
-                            }
-                            
-                        default:
-                        {
-                            printf("Invalid MMS\r\n");
-                        }
-                    }                       
-                
-                       
-                    for (int i=4; i<132;i++)
-                           {
-                               tm[i] = 0x00;
-                           }
-                           crc16 = CRC::crc16_gen(tm,132);
-                           tm[132] = (uint8_t)((crc16&0xFF00)>>8);
-                           tm[133] = (uint8_t)(crc16&0x00FF); 
-                           tm[0] = 0x60;
-                           tm[1] = tc[0];
-                           tm[2] = ACK_CODE;
-                    
-                    printf("Written on Flash\r\n");
-                    break;
-                }
-                default:
-                {
-                    printf("Invalid TC");
-                    //ACK_L234_telemetry
-                    telemetry[0]=0xB0;
-                    telemetry[1]=tc[0];
-                    telemetry[2]=ACK_CODE;
-                    for(uint8_t i=3;i<11;i++)
-                    {
-                        telemetry[i]=0x00;
-                    }
                     crc16 = CRC::crc16_gen(telemetry,11);
                     telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
                     telemetry[12] = (uint8_t)(crc16&0x00FF);
-                    for(uint8_t i=13;i<134;i++)
-                    {
-                        telemetry[i]=0x00;
-                    }
-                    break;
-                }
-            }
-            break;
-        }
-        case 0x80:
-        {
-            //printf("Function Management Service\r\n");
-            uint8_t service_subtype=(tc[2]&0x0F);
-            switch(service_subtype)
-            {
-                case 0x01:
-                {
-                    printf("FMS Activated\r\n");
-                    uint8_t pid=tc[3];
-                    switch(pid)
-                    {
-                        case 0xE0:
-                        {
-                            float B[3],W[3];
-                            printf("ACS_COMSN\r\n");
-                            //ACK_L234_telemetry
-
-                            uint8_t B_x[2];
-                            uint8_t B_y[2];
-                            uint8_t B_z[2];
-                            uint8_t W_x[2];
-                            uint8_t W_y[2];
-                            uint8_t W_z[2];
-
-                            B_x[0]=tc[3];
-                            B_x[1]=tc[4];
-                            B_y[0]=tc[5];
-                            B_y[1]=tc[6];
-                            B_z[0]=tc[7];
-                            B_z[1]=tc[8];
-
-                            W_x[0]=tc[9];
-                            W_x[1]=tc[10];
-                            W_y[0]=tc[11];
-                            W_y[1]=tc[12];
-                            W_z[0]=tc[13];
-                            W_z[1]=tc[14];
-
-                            FCTN_CONVERT_UINT(B_x,&B[0]);
-                            FCTN_CONVERT_UINT(B_y,&B[1]);
-                            FCTN_CONVERT_UINT(B_z,&B[2]);
-
-                            FCTN_CONVERT_UINT (W_x, &W[0]);
-                            FCTN_CONVERT_UINT (W_y, &W[1]);
-                            FCTN_CONVERT_UINT (W_z, &W[2]);
-
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=ACK_CODE;
-                            //FCTN_ATS_DATA_ACQ();  //get data
-                            printf("gyro values\n\r");
-                            for(int i=0; i<3; i++)
-                                printf("%f\n\r",W[i]);
-                            printf("mag values\n\r");
-                            for(int i=0; i<3; i++)
-                                printf("%f\n\r",B[i]);
-                   /*         FCTN_CONVERT_FLOAT(data[0],&telemetry[4]); //telemetry[4] - telemetry[7]
-                            FCTN_CONVERT_FLOAT(data[1],&telemetry[8]); //telemetry[8] - telemetry[11]
-                            FCTN_CONVERT_FLOAT(data[2],&telemetry[12]); //telemetry[12] - telemetry[15]
-                            FCTN_CONVERT_FLOAT(data[0],&telemetry[16]); //telemetry[16] - telemetry[19]
-                            FCTN_CONVERT_FLOAT(data[1],&telemetry[20]); //telemetry[20] - telemetry[23]
-                            FCTN_CONVERT_FLOAT(data[2],&telemetry[24]); //telemetry[24] - telemetry[27]
-                            if((data[0]<8) && (data[1]<8) && (data[2] <8))
-                                telemetry[28] = 1; // gyro values in correct range
-                            else
-                                telemetry[28] = 0;
-                            if ((data[3] > 20 ) && (data[4] >20) && (data[5]>20)&& (data[3] < 50 ) && (data[4] <50) && (data[5]<50))
-                                telemetry[29] = 1;   // mag values in correct range
-                            else
-                                telemetry[29] = 0;
-                     */
-                       //     float B[3],W[3];
-                       //     B[0] = B0;
-                       //     B[1] = B1;
-                       //     B[2] = B2;
-                       //     W[0] = W0;
-                       //     W[1] = W1;
-                       //     W[2] = W2;
-                            // Control algo commissioning
-                        /*    FCTN_ACS_CNTRLALGO(B,W);
-                            FCTN_CONVERT_FLOAT(moment[0],&telemetry[30]); //telemetry[30] - telemetry[33]
-                            FCTN_CONVERT_FLOAT(moment[1],&telemetry[34]); //telemetry[34] - telemetry[37]
-                            FCTN_CONVERT_FLOAT(moment[2],&telemetry[38]); //telemetry[38] - telemetry[41]
-                            // to include commission TR as well
-                            for(uint8_t i=42;i<132;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-
-                            crc16 = CRC::crc16_gen(telemetry,132);
-                            telemetry[133] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[134] = (uint8_t)(crc16&0x00FF);
-                            break;
-                         */
-
-                           // Control algo commissioning
-                            FCTN_ACS_CNTRLALGO(B,W);
-                            FCTN_CONVERT_FLOAT(moment[0],&telemetry[4]); //telemetry[4] - telemetry[7]
-                            FCTN_CONVERT_FLOAT(moment[1],&telemetry[8]); //telemetry[8] - telemetry[11]
-                            FCTN_CONVERT_FLOAT(moment[2],&telemetry[12]); //telemetry[12] - telemetry[15]
-                            // to include commission TR as well
-                            for(uint8_t i=16;i<132;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-
-                            crc16 = CRC::crc16_gen(telemetry,132);
-                            telemetry[133] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[134] = (uint8_t)(crc16&0x00FF);
-                            break;
-                        }
-                        case 0xE1:
-                        {
-                            float moment_tc[3];
-                            printf("HARDWARE_COMSN\r\n");
-                            //ACK_L234_telemetry
-                            uint8_t M0[2];
-                            uint8_t M1[2];
-                            uint8_t M2[2];
-
-                            M0[0]=tc[3];
-                            M0[1]=tc[4];
-                            M1[0]=tc[5];
-                            M1[1]=tc[6];
-                            M2[0]=tc[7];
-                            M2[1]=tc[8];
-
-
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=ACK_CODE;
-                            
-                            float PWM_measured[3];
-                            
-                            
-                            FCTN_CONVERT_UINT(M0,&moment_tc[0]);
-                            moment_tc[1] = 0;
-                            moment_tc[2] = 0;
-                            FCTN_ACS_GENPWM_MAIN(moment_tc);
-                            PWM_measured[0] = PWM1.read();
-                            FCTN_CONVERT_FLOAT(actual_data.current_actual[5],&telemetry[16 + (0*4)]);
-                            
-                            FCTN_CONVERT_UINT(M1, &moment_tc[1]);
-                            moment_tc[0] = 0;
-                            moment_tc[2] = 0;
-                            FCTN_ACS_GENPWM_MAIN(moment_tc);
-                            PWM_measured[1] = PWM2.read();
-                            FCTN_CONVERT_FLOAT(actual_data.current_actual[5],&telemetry[16 + (1*4)]);
-                            
-                            FCTN_CONVERT_UINT(M2, &moment_tc[2]);
-                            moment_tc[0] = 0;
-                            moment_tc[1] = 0;
-                            FCTN_ACS_GENPWM_MAIN(moment_tc);
-                            PWM_measured[2] = PWM3.read();
-                            FCTN_CONVERT_FLOAT(actual_data.current_actual[5],&telemetry[16 + (2*4)]);
-
-                            FCTN_CONVERT_FLOAT(PWM_measured[0],&telemetry[4]);    //4-7
-                            FCTN_CONVERT_FLOAT(PWM_measured[1],&telemetry[8]);    //8-11
-                            FCTN_CONVERT_FLOAT(PWM_measured[2],&telemetry[12]);  //12-15
-                            
-                            
-                            // for(int i=0; i<12; i++)
-                             //   FCTN_CONVERT_FLOAT(actual_data.current_actual[i],&telemetry[16 + (i*4)]);
-
-
-                           // FCTN_ATS_DATA_ACQ();  //get data
-
-
-                            // to include commission TR as well
-                            for(uint8_t i=28;i<132;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-
-                            crc16 = CRC::crc16_gen(telemetry,132);
-                            telemetry[133] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[134] = (uint8_t)(crc16&0x00FF);
-                            break;
-                        }
-                        case 0x02:
-                        {
-
-                            printf("Run P_EPS_MAIN\r\n");
-                            F_EPS();
-                            //ACK_L234_telemetry
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=ACK_CODE;
-                            for(uint8_t i=0;i<133;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,132);
-                            telemetry[132] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[133] = (uint8_t)(crc16&0x00FF);
-
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                        case 0x03:
-                        {
-                            printf("Run P_ACS_INIT\r\n");
-                            FCTN_ACS_INIT();
-                            //ACK_L234_telemetry
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=ACK_CODE;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                        case 0x04:
-                        {
-
-                            printf("Run P_ACS_ACQ_DATA\r\n");
-                            FCTN_ATS_DATA_ACQ();
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=ACK_CODE;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                        case 0x05:
-                        {
-                            printf("Run P_ACS_MAIN\r\n");
-                            F_ACS();
-                            for(int i=0; i<3; i++)
-                                FCTN_CONVERT_FLOAT(actual_data.Bvalue_actual[i],&telemetry[(i*4)]);
-                            for(int i=0; i<3; i++)
-                                FCTN_CONVERT_FLOAT(actual_data.AngularSpeed_actual[i],&telemetry[12+(i*4)]);
-
-                            telemetry[24] = ACS_STATE;
-                            telemetry[24] = telemetry[5]|(EN_BTRY_HT<<3);
-                            telemetry[24] = telemetry[5]|(phase_TR_x<<4);
-                            telemetry[24] = telemetry[5]|(phase_TR_y<<5);
-                            telemetry[24] = telemetry[5]|(phase_TR_z<<6);
-
-                           /*___________________change / check pwm working__________________________________*/
-
-                            FCTN_CONVERT_FLOAT(PWM1,&telemetry[25]);
-                            FCTN_CONVERT_FLOAT(PWM2,&telemetry[29]);
-                            FCTN_CONVERT_FLOAT(PWM3,&telemetry[33]);
-
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=ACK_CODE;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-
-                            crc16 = CRC::crc16_gen(telemetry,37);
-                            telemetry[37] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[38] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=39;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                        case 0x06:
-                        {
-                            F_BCN();
-                            printf("Run P_BCN_INIT\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=ACK_CODE;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,0);
-                            telemetry[0] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[1] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=2;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                        case 0x07:
-                        {
-                            printf("Run P_BCN_TX_MAIN\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=ACK_CODE;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                        case 0x11:
-                        {
-                            printf("SW_ON_ACS_ATS1_SW_ENABLE\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=1;
-                            ATS1_SW_ENABLE = 1;  // making sure we switch off the other
-                            ATS1_SW_ENABLE = 0;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                        case 0x12:
-                        {
-                            printf("SW_ON_ACS_ATS2_SW_ENABLE\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            ATS1_SW_ENABLE = 1; //make sure u switch off the other
-                            ATS2_SW_ENABLE = 0;
-                            telemetry[2]=1;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                        case 0x13:
-                        {
-                            printf("SW_ON_ACS_TR_XY_ENABLE\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            TRXY_SW = 1;
-                            telemetry[2]=1;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                         case 0x14:
-                        {
-                            printf("SW_ON_ACS_TR_Z_ENABLE\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=1;
-                            TRZ_SW = 1;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                        case 0x15:
-                        {
-                            printf("SW_ON_BCN_TX_SW_ENABLE\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=1;
-                            BCN_SW = 0;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                         case 0x21:
-                        {
-                            printf("SW_OFF_ACS_ATS1_SW_ENABLE\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=1;
-                            ATS1_SW_ENABLE = 1;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                        case 0x22:
-                        {
-                            printf("SW_OFF_ACS_ATS2_SW_ENABLE\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=1;
-                            ATS2_SW_ENABLE = 1;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                        case 0x23:
-                        {
-                            printf("SW_OFF_ACS_TR_XY_ENABLE\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=1;
-                            TRXY_SW= 0;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                         case 0x24:
-                        {
-                            printf("SW_OFF_ACS_TR_Z_ENABLE\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=1;
-                            TRZ_SW = 0;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                        case 0x25:
-                        {
-                            printf("SW_OFF_BCN_TX_SW_ENABLE\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=1;
-                            BCN_SW = 1;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                         case 0x31:
-                        {
-                            printf("ACS_ATS1_SW_RESET\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=1;
-                            ATS1_SW_ENABLE = 1;
-                            wait_us(1);
-                            ATS1_SW_ENABLE = 0;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                        case 0x32:
-                        {
-                            printf("BCN_SW_RESET\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=1;
-                            BCN_SW = 1;
-                            wait_us(1);
-                            BCN_SW = 0;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                        case 0x33:
-                        {
-                            printf("ACS_ATS2_SW_RESET\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=1;
-                            ATS1_SW_ENABLE = 1;
-                            wait_us(1);
-                            ATS1_SW_ENABLE = 0;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                        case 0x34:
-                        {
-                            printf("CDMS_SW_RESET\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=1;
-                            CDMS_RESET = 0;
-                            wait_us(1);
-                            CDMS_RESET = 1;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                        default:
-                        {
-                            printf("Invalid TC\r\n");
-                            //ACK_L234_TM
-                            telemetry[0]=0xB0;
-                            telemetry[1]=tc[0];
-                            telemetry[2]=ACK_CODE;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(telemetry,11);
-                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            telemetry[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                telemetry[i]=0x00;
-                            }
-                            break;
-                        }
-                    }
-                    break;
-                }
-                default:
-                {
-                        printf("Invalid TC\r\n");
-                        //ACK_L234_TM
-                        telemetry[0]=0xB0;
-                        telemetry[1]=tc[0];
-                        telemetry[2]=ACK_CODE;
-                        for(uint8_t i=3;i<11;i++)
+                    printf("\n\rillegal TC packet APID don't match");
+                    for(int i=13;i<134;i++)
                         {
                             telemetry[i]=0x00;
                         }
-                        crc16 = CRC::crc16_gen(telemetry,11);
-                        telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-                        telemetry[12] = (uint8_t)(crc16&0x00FF);
-                        for(uint8_t i=13;i<134;i++)
-                        {
-                            telemetry[i]=0x00;
-                        }
-                        break;
                 }
-            }
-            break;
+            else
+                {// all the possible cases of fms and mms
+                    uint8_t service_type=(tc[2]&0xF0);
+                    //check for fms first
+                    switch(service_type)
+                    {
+                    case 0x60:
+                            {
+                                printf("Memory Management Service\r\n");
+                                uint8_t service_subtype=(tc[2]&0x0F);
+                                switch(service_subtype)
+                                {
+                                    /* no such case exist refer tc protocol mms 0x1 exist for speed/payload only*/
+/*                                  case 0x01:
+                                            {
+                                                printf("Read from Flash\r\n");
+                                                uint16_t jj; //if no problem then change it to uint8
+                                                uint16_t MID = ((uint16_t)tc[3] << 8) | tc[4];
+                                                switch(MID)
+                                                {
+                                                    case 0x1100:jj=0x00;// using uint16_t as jj typesimilarly used in FCTN_CDMS_WR_FLASH
+                                                                break;
+                                                    case 0x0100:jj=0x01;
+                                                                break;
+                                                    case 0x0101:jj=0x02;
+                                                                break;
+                                                    case 0x0102:jj=0x03;
+                                                                break;
+                                                    case 0x0107:jj=0x04;
+                                                                break;
+                                                    case 0x0103:jj=0x05;
+                                                                break;
+                                                    case 0x0104:jj=0x05;
+                                                                break;
+                                                    case 0x0105:jj=0x06;
+                                                                break;
+                                                    case 0x0106:jj=0x07;
+                                                                break;
+                                                 }
+                                                //*pointer....!!!!
+                                                uint32_t FLASH_TEMP = FCTN_CDMS_RD_FLASH(jj);
+                                        
+                                                tm[0] = 0x60;
+                                                tm[1] = tc[0];
+                                                tm[2] = ACK_CODE;
+                                                for(int i=0; i<8*4; i+=4)
+                                                    {
+                                                        tm[4+i] =(uint8_t )(((FLASH_TEMP)>>24)&0xFF);
+                                                        tm[5+i] =(uint8_t ) (((FLASH_TEMP)>>16)&0xFF);
+                                                        tm[6+i] =(uint8_t ) (((FLASH_TEMP)>>8)&0xFF); 
+                                                        tm[7+i] =(uint8_t ) ((FLASH_TEMP) & 0xFF);   
+                               
+                                                    }
+
+                                                 
+                                                for (int i=4+8*4; i<132;i++)
+                                                    {
+                                                        tm[i] = 0x00;
+                                                    }
+                                                crc16 = CRC::crc16_gen(tm,132);
+                                                tm[132] = (uint8_t)((crc16&0xFF00)>>8);
+                                                tm[133] = (uint8_t)(crc16&0x00FF); 
+                    
+                                                break;
+                                            }
+*/
+                                    case 0x02:
+                                            {
+                                                printf("\n\rRead from RAM");
+                                                uint16_t MID = ((uint16_t)tc[3] << 8) | tc[4];
+                                                switch(MID)
+                                                {
+                                                    case 0x0000://changed from 0001
+                                                            {
+                                                                printf("\n\rRead from MID 0000 \n");
+                                                                printf("\n\rReading flash parameters");
+
+                                                                /*taking some varible till we find some thing more useful*/
+                                                                //uint8_t ref_val=0x01;
+                                                                telemetry[0] = 1;
+                                                                telemetry[1] = tc[0];
+                                                                telemetry[2] = ACK_CODE;
+                                                                /*random or with bcn_tx_sw_enable assuming it is 1 bit in length
+                                                                how to get that we dont know, now we just assume it to be so*/
+                                                                telemetry[3] = (BCN_SW);
+                                                                telemetry[3] = telemetry[3]|(TRXY_SW<<1);
+                                                                telemetry[3] = telemetry[3]|(TRZ_SW<<2);
+                                                                telemetry[3] = telemetry[3]|(ATS1_SW_ENABLE<<3);
+                                                                telemetry[3] = telemetry[3]|(ATS2_SW_ENABLE<<4);
+                                    
+                                                                if(BCN_TX_STATUS==2)
+                                                                    telemetry[3] = telemetry[3]|0x20;
+                                                                else
+                                                                telemetry[3] = telemetry[3] & 0xDF;
+                                    
+                                                                telemetry[3] = telemetry[3]|(BCN_FEN<<6);
+                                                                uint8_t mask_val=BAE_ENABLE & 0x00000008;
+                                                                /*can be a problem see if any error occurs*/
+                                                                telemetry[3] = telemetry[3]|(mask_val<<7);
+                                    
+                                                                /*not included in the code yet*/
+                                                                telemetry[4] = BAE_RESET_COUNTER;
+                                                                telemetry[5] = ACS_STATE;
+                                                                telemetry[5] = telemetry[5]|(EN_BTRY_HT<<3);
+                                                                telemetry[5] = telemetry[5]|(phase_TR_x<<4);
+                                                                telemetry[5] = telemetry[5]|(phase_TR_y<<5);
+                                                                telemetry[5] = telemetry[5]|(phase_TR_z<<6);
+                                                                /*spare to be fixed*/
+                                                                //telemetry[5] = telemetry[5]|(Spare))<<7);
+                                                                /**/
+                                                                uint8_t soc_powerlevel_2=50;
+                                                                uint8_t soc_powerlevel_3=65;
+                                    
+                                                                telemetry[6] = soc_powerlevel_2;
+                                                                telemetry[7] = soc_powerlevel_3;
+                                    
+                                                                /*to be fixed*/
+                                                                telemetry[8] = 0;
+                                                                telemetry[9] = 0;
+                                                                telemetry[10] = 0;
+                                                                telemetry[11] = 0;
+                                                                //telemetry[8] = Torque Rod X Offset;
+                                                                //telemetry[9] = Torque Rod Y Offset;
+                                                                //telemetry[10] = Torque Rod Z Offset;
+                                                                //telemetry[11] = ACS_DEMAG_TIME_DELAY;
+                                                                telemetry[12] = (BAE_STATUS>>24) & 0xFF;
+                                                                telemetry[13] = (BAE_STATUS>>16) & 0xFF;
+                                                                telemetry[14] = (BAE_STATUS>>8) & 0xFF;
+                                                                telemetry[15] = BAE_STATUS & 0xFF;
+                                    
+                                                                /*to be fixed*/
+                                                                //telemetry[16] = BCN_FAIL_COUNT;
+                                                                telemetry[17] = actual_data.power_mode;
+                                                                /*to be fixed*/
+                                                                uint16_t P_BAE_I2CRX_COUNTER=0;
+                                                                uint16_t P_ACS_MAIN_COUNTER=0;
+                                                                uint16_t P_BCN_TX_MAIN_COUNTER=0;
+                                                                uint16_t P_EPS_MAIN_COUNTER=0;
+                                    
+                                                                telemetry[18] = P_BAE_I2CRX_COUNTER>>8;
+                                                                telemetry[19] = P_BAE_I2CRX_COUNTER;
+                                                                telemetry[20] = P_ACS_MAIN_COUNTER>>8;
+                                                                telemetry[21] = P_ACS_MAIN_COUNTER;
+                                                                telemetry[22] = P_BCN_TX_MAIN_COUNTER>>8;
+                                                                telemetry[23] = P_BCN_TX_MAIN_COUNTER;
+                                                                telemetry[24] = P_EPS_MAIN_COUNTER>>8;
+                                                                telemetry[25] = P_EPS_MAIN_COUNTER;
+                                    
+                                                                //actual_data.AngularSpeed_actual[0]=5.32498;
+                                                                for(int i=0; i<3; i++)
+                                                                    FCTN_CONVERT_FLOAT((float)actual_data.Bvalue_actual[i],&telemetry[26+ (i*4)]);
+                                                                for(int i=0; i<3; i++)
+                                                                    FCTN_CONVERT_FLOAT((float)actual_data.AngularSpeed_actual[i],&telemetry[38+(i*4)]);
+                                                                    
+                                                                //printf("\n\rthe value is 38\t %x\n",telemetry[38]);
+                                                                //printf("\n\rthe value is 39\t%x\n",telemetry[39]);
+                                                                //printf("\n\rthe value is 40\t%x\n",telemetry[40]);
+                                                                //printf("\n\rthe value is 41\t%x\n",telemetry[41]);
+                                                                //printf("\n\rthe value true\t%f\n",actual_data.AngularSpeed_actual[0]);
+                                                                
+                                                                //uint32_t input_stage1=0x00000000;
+                                                                //uint8_t output1[4];
+                                                                //output1[0]=(uint32_t)(telemetry[38]);
+                                                                //output1[1]=(uint32_t)(telemetry[39]);
+                                                                //output1[2]=(uint32_t)(telemetry[40]);
+                                                                //output1[3]=(uint32_t)(telemetry[41]);
+                                        
+                                                                //input_stage1=output[3]+(output[2]*(0x100))+(output[1]*(0x10000))+(output[0]*(0x1000000));
+                                                                //input_stage1=(output1[0]<<24) | (output1[1]<<16) | (output1[2]<<8) | (output1[3]);
+                                                                               
+                                                                //assert(sizeof(float) == sizeof(uint32_t));
+                                                                //float* temp1 = reinterpret_cast<float*>(&input_stage1);
+                                        
+                                                                //printf("\n\r the value is: %f \n",*temp1); 
+                                    
+                                                                //FAULT_FLAG();
+                                                                telemetry[50] = actual_data.faultIr_status;
+                                                                telemetry[51] = actual_data.faultPoll_status;
+                                                                //Bdot Rotation Speed of Command  telemetry[52-53]
+                                                                //Bdot Output Current   telemetry[54]
+                                                                //float l_pmw1 = (PWM1);
+                                                                //float l_pmw2 = PWM2;
+                                                                //float l_pmw3 = PWM3;
+                                    
+                                                                /*__________________________________________________________________*/
+                                    
+                                                                /*change and check if changing it to PWM1 causes problem*/
+                                    
+                                                                /*___________________________________________________________________*/
+                                    
+                                                                float PWM_measured[3];
+                                    
+                                                                PWM_measured[0] = PWM1.read();
+                                                                PWM_measured[1] = PWM2.read();
+                                                                PWM_measured[2] = PWM3.read();
+                                    
+                                                                FCTN_CONVERT_FLOAT(PWM_measured[0], &telemetry[55]);
+                                                                FCTN_CONVERT_FLOAT(PWM_measured[1], &telemetry[59]);
+                                                                FCTN_CONVERT_FLOAT(PWM_measured[2], &telemetry[63]);
+                                                                float attitude_ang =  angle(actual_data.Bvalue_actual[0],actual_data.Bvalue_actual[1],actual_data.Bvalue_actual[2]);
+                                                                FCTN_CONVERT_FLOAT(attitude_ang, &telemetry[67]);
+                                    
+                                                                for (int i=0; i<16; i++)
+                                                                    telemetry[68+i] = quant_data.voltage_quant[i];
+                                                                for (int i=0; i<12; i++)
+                                                                    telemetry[84+i] = quant_data.current_quant[i];
+                                                                //telemetry[96]
+                                                                //telemetry[97]
+                                                                //telemetry[98]
+                                                                //telemetry[99]
+                                                                telemetry[100] = quant_data.Batt_voltage_quant;
+                                                                telemetry[101] = quant_data.BAE_temp_quant;
+                                                                telemetry[102] = quant_data.Batt_gauge_quant[1];
+                                                                telemetry[103] = quant_data.Batt_temp_quant[0];
+                                                                telemetry[104] = quant_data.Batt_temp_quant[1];
+                                    
+                                                                //telemetry[105] = beacon temperature;
+                                    
+                                                                for (int i=105; i<132;i++)
+                                                                    {
+                                                                        telemetry[i] = 0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,132);
+                                                                telemetry[132] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[133] = (uint8_t)(crc16&0x00FF);
+                                    
+                                                                break;
+                                                            }
+                                                    case 0x0001:
+                                                            {
+                                                                printf("\r\nhk data tm");
+                                                                telemetry[0] = 0x60;
+                                                                telemetry[1] = tc[0];
+                                                                telemetry[2] = ACK_CODE;
+
+                                                                for(int i;i<16;i++)
+                                                                telemetry[i+3] = bae_HK_minmax.voltage_max[i];
+                                    
+                                                                for(int i;i<12;i++)
+                                                                telemetry[i+18] = bae_HK_minmax.current_max[i];
+                                    
+                                                                telemetry[29] = bae_HK_minmax.Batt_voltage_max;;
+                                                                telemetry[30] = bae_HK_minmax.BAE_temp_max;
+                                    
+                                                                /*battery soc*/
+                                                                //telemetry[31] = BAE_HK_min_max bae_HK_minmax.voltage_max;
+                                    
+                                                                telemetry[32] = bae_HK_minmax.Batt_temp_max[0];
+                                                                telemetry[33] = bae_HK_minmax.Batt_temp_max[1];
+                                    
+                                                                /*BCN  temp not there*/
+                                                                //telemetry[34] = BAE_HK_min_max bae_HK_minmax.;
+                                    
+                                                                for(int i=0; i<3; i++)
+                                                                    FCTN_CONVERT_FLOAT(bae_HK_minmax.Bvalue_max[i],&telemetry[35+(i*4)]);
+                                    
+                                                                for(int i=0; i<3; i++)
+                                                                    FCTN_CONVERT_FLOAT(bae_HK_minmax.AngularSpeed_max[i],&telemetry[47+(i*4)]);
+                                    
+                                                                /*min data*/
+                                    
+                                                                for(int i;i<16;i++)
+                                                                    telemetry[i+59] = bae_HK_minmax.voltage_min[i];
+                                    
+                                                                for(int i;i<12;i++)
+                                                                    telemetry[i+74] = bae_HK_minmax.current_min[i];
+                                    
+                                                                telemetry[86] = bae_HK_minmax.Batt_voltage_min;
+                                                                telemetry[87] = bae_HK_minmax.BAE_temp_min;
+                                    
+                                                                /*battery soc*/
+                                                                //telemetry[88] = BAE_HK_min_max bae_HK_minmax.voltage_max;
+                                    
+                                                                telemetry[89] = bae_HK_minmax.Batt_temp_min[0];
+                                                                telemetry[90] = bae_HK_minmax.Batt_temp_min[1];
+                                                                //huhu//
+                                    
+                                                                /*BCN  temp not there*/
+                                                                //telemetry[91] = BAE_HK_min_max bae_HK_minmax.;
+                                    
+                                                                for(int i=0; i<3; i++)
+                                                                    FCTN_CONVERT_FLOAT(bae_HK_minmax.Bvalue_min[i],&telemetry[91+(i*4)]);
+                                    
+                                                                for(int i=0; i<3; i++)
+                                                                    FCTN_CONVERT_FLOAT(bae_HK_minmax.AngularSpeed_min[i],&telemetry[103+(i*4)]);
+                                    
+                                    
+                                                                for (int i=115; i<132;i++)
+                                                                    {
+                                                                        telemetry[i] = 0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,132);
+                                                                telemetry[132] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[133] = (uint8_t)(crc16&0x00FF);
+                                                                break;
+                                                            }
+                                                    default://invalid MID
+                                                            {
+                                                                //ACK_L234_telemetry
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                telemetry[2]=0x02;//for this case
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                {
+                                                                    telemetry[i]=0x00;
+                                                                }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                {
+                                                                    telemetry[i]=0x00;
+                                                                }
+                                                                break;
+                                                            }
+                                                 }
+                                                break;
+                                            }
+                                    case 0x05:
+                                            {
+                                                printf("\n\rdata for mms 0x05 flash");
+                                                /*changed*/
+                                                printf("\n\rwrite on flash\n");
+                                                uint32_t FLASH_DATA[8];//256 bits
+                                                
+                                                uint8_t VALID_MID;//to determine wether mid is valid or not otherwise to much repetition of code 1 meaning valid
+                                                
+                                                uint16_t MID = ((uint16_t)tc[3] << 8) | tc[4];
+                                                switch(MID )
+                                                {
+                                                    case 0x0100: 
+                                                            {   
+                                                                FLASH_DATA[0] = (((uint32_t)tc[5] << 24) | ((uint32_t)tc[6] << 16) | ((uint32_t)tc[7] << 8) | (uint32_t)tc[6]);
+                                                                FCTN_BAE_WR_FLASH(0x00,FLASH_DATA[0]);
+                                                                VALID_MID=1;
+                                                                break;
+                                                            }
+                                                    case 0x0101: 
+                                                            {
+                                                                FLASH_DATA[1] = (((uint32_t)tc[5] << 24) | ((uint32_t)tc[6] << 16) | ((uint32_t)tc[7] << 8) | (uint32_t)tc[6]);
+                                                                FCTN_BAE_WR_FLASH(0x01,FLASH_DATA[1]);
+                                                                VALID_MID=1;
+                                                                break;
+                                                            }
+                                                        
+                                                    case 0x0102: 
+                                                            {
+                                                                FLASH_DATA[2] = (((uint32_t)tc[5] << 24) | ((uint32_t)tc[6] << 16) | ((uint32_t)tc[7] << 8) | (uint32_t)tc[6]);
+                                                                FCTN_BAE_WR_FLASH(0x02,FLASH_DATA[2]);
+                                                                VALID_MID=1;
+                                                                break;
+                                                            }
+                                                        
+                                                    case 0x0103: 
+                                                            {
+                                                                FLASH_DATA[3] = (((uint32_t)tc[5] << 24) | ((uint32_t)tc[6] << 16) | ((uint32_t)tc[7] << 8) | (uint32_t)tc[6]);
+                                                                FCTN_BAE_WR_FLASH(0x03,FLASH_DATA[3]);
+                                                                VALID_MID=1;
+                                                                break;                         
+                                                            }
+                                                    case 0x0104: 
+                                                            {
+                                                                FLASH_DATA[4] = (((uint32_t)tc[5] << 24) | ((uint32_t)tc[6] << 16) | ((uint32_t)tc[7] << 8) | (uint32_t)tc[6]);
+                                                                FCTN_BAE_WR_FLASH(0x04,FLASH_DATA[4]);
+                                                                VALID_MID=1;
+                                                                break;
+                                                            }
+                                                        
+                                                    case 0x0105: 
+                                                            {
+                                                                FLASH_DATA[5] = (((uint32_t)tc[5] << 24) | ((uint32_t)tc[6] << 16) | ((uint32_t)tc[7] << 8) | (uint32_t)tc[6]);
+                                                                FCTN_BAE_WR_FLASH(0x05,FLASH_DATA[5]);
+                                                                VALID_MID=1;
+                                                                break;
+                                                            }   
+                                                    case 0x0106: 
+                                                            {
+                                                                FLASH_DATA[6] = (((uint32_t)tc[5] << 24) | ((uint32_t)tc[6] << 16) | ((uint32_t)tc[7] << 8) | (uint32_t)tc[6]);
+                                                                FCTN_BAE_WR_FLASH(0x06,FLASH_DATA[6]);
+                                                                VALID_MID=1;
+                                                                break;
+                                                            }
+                                                        
+                                                    case 0x0107: 
+                                                            {
+                                                                FLASH_DATA[7] = (((uint32_t)tc[5] << 24) | ((uint32_t)tc[6] << 16) | ((uint32_t)tc[7] << 8) | (uint32_t)tc[6]);
+                                                                FCTN_BAE_WR_FLASH(0x07,FLASH_DATA[7]);
+                                                                VALID_MID=1;
+                                                                break;
+                                                            }
+                            
+                                                    default:
+                                                            {
+                                                                printf("Invalid MMS case 0x05 invalid MID\r\n");
+                                                                VALID_MID=0;
+                                                                //ACK_L234_telemetry
+                                                                break;
+                                                                
+                                                            }
+                                                }                       
+                                                
+                                                if(VALID_MID==1)//valid MID
+                                                    {
+                                                        telemetry[0]=0xB0;//or 0x60? check
+                                                        telemetry[1]=tc[0];
+                                                        telemetry[2]=0xA0;// when valid
+                                                    }
+                                                else if(VALID_MID==0)//invalid MID
+                                                    {
+                                                        telemetry[0]=0xB0;
+                                                        telemetry[1]=tc[0];
+                                                        telemetry[2]=0x02;//for this case
+                                                    }
+                                                    
+                                                for(uint8_t i=3;i<11;i++)
+                                                    {
+                                                        telemetry[i]=0x00;
+                                                    }
+                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                for(uint8_t i=13;i<134;i++)
+                                                    {
+                                                        telemetry[i]=0x00;
+                                                    }
+                                                
+                                                printf("\n\rWritten on Flash");
+                                                break;
+                                            }
+                                    default://when invalid service subtype
+                                            {
+                                                printf("\n\r MMS invalid Service Subtype");
+                                                //ACK_L234_telemetry
+                                                telemetry[0]=0xB0;
+                                                telemetry[1]=tc[0];
+                                                telemetry[2]=0x02;//for this case
+                                                for(uint8_t i=3;i<11;i++)
+                                                {
+                                                    telemetry[i]=0x00;
+                                                }
+                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                for(uint8_t i=13;i<134;i++)
+                                                {
+                                                    telemetry[i]=0x00;
+                                                }
+                                                break;
+                                            }
+                                }
+                                break;
+                            }
+                    case 0x80:
+                            {
+                                //printf("Function Management Service\r\n");
+                                uint8_t service_subtype=(tc[2]&0x0F);
+                                switch(service_subtype)
+                                {
+                                    case 0x01:
+                                            {
+                                                printf("\n\rFMS Activated");
+                                                uint8_t fid=tc[3];//changed from pid to fid
+                                                switch(fid)
+                                                {
+                                                    case 0xE0:
+                                                            {
+                                                                float B[3],W[3];
+                                                                printf("ACS_COMSN\r\n");
+                                                                //ACK_L234_telemetry
+
+                                                                uint8_t B_x[2];
+                                                                uint8_t B_y[2];
+                                                                uint8_t B_z[2];
+                                                                uint8_t W_x[2];
+                                                                uint8_t W_y[2];
+                                                                uint8_t W_z[2];
+                                    
+                                                                B_x[0]=tc[3];
+                                                                B_x[1]=tc[4];
+                                                                B_y[0]=tc[5];
+                                                                B_y[1]=tc[6];
+                                                                B_z[0]=tc[7];
+                                                                B_z[1]=tc[8];
+                                    
+                                                                W_x[0]=tc[9];
+                                                                W_x[1]=tc[10];
+                                                                W_y[0]=tc[11];
+                                                                W_y[1]=tc[12];
+                                                                W_z[0]=tc[13];
+                                                                W_z[1]=tc[14];
+
+                                                                FCTN_CONVERT_UINT(B_x,&B[0]);
+                                                                FCTN_CONVERT_UINT(B_y,&B[1]);
+                                                                FCTN_CONVERT_UINT(B_z,&B[2]);
+                                    
+                                                                FCTN_CONVERT_UINT (W_x, &W[0]);
+                                                                FCTN_CONVERT_UINT (W_y, &W[1]);
+                                                                FCTN_CONVERT_UINT (W_z, &W[2]);
+                            
+                                                                telemetry[0]=0xF0;
+                                                                telemetry[1]=tc[0];
+                                                                telemetry[2]=ACK_CODE;
+                                                                //FCTN_ATS_DATA_ACQ();  //get data
+                                                                printf("gyro values\n\r");
+                                                                for(int i=0; i<3; i++)
+                                                                    printf("%f\n\r",W[i]);
+                                                                printf("mag values\n\r");
+                                                                for(int i=0; i<3; i++)
+                                                                    printf("%f\n\r",B[i]);
+                                                       /*       FCTN_CONVERT_FLOAT(data[0],&telemetry[4]); //telemetry[4] - telemetry[7]
+                                                                FCTN_CONVERT_FLOAT(data[1],&telemetry[8]); //telemetry[8] - telemetry[11]
+                                                                FCTN_CONVERT_FLOAT(data[2],&telemetry[12]); //telemetry[12] - telemetry[15]
+                                                                FCTN_CONVERT_FLOAT(data[0],&telemetry[16]); //telemetry[16] - telemetry[19]
+                                                                FCTN_CONVERT_FLOAT(data[1],&telemetry[20]); //telemetry[20] - telemetry[23]
+                                                                FCTN_CONVERT_FLOAT(data[2],&telemetry[24]); //telemetry[24] - telemetry[27]
+                                                                if((data[0]<8) && (data[1]<8) && (data[2] <8))
+                                                                    telemetry[28] = 1; // gyro values in correct range
+                                                                else
+                                                                    telemetry[28] = 0;
+                                                                if ((data[3] > 20 ) && (data[4] >20) && (data[5]>20)&& (data[3] < 50 ) && (data[4] <50) && (data[5]<50))
+                                                                    telemetry[29] = 1;   // mag values in correct range
+                                                                else
+                                                                    telemetry[29] = 0;
+                                                         */
+                                                        //      float B[3],W[3];
+                                                        //      B[0] = B0;
+                                                        //      B[1] = B1;
+                                                        //      B[2] = B2;
+                                                        //      W[0] = W0;
+                                                        //      W[1] = W1;
+                                                        //      W[2] = W2;
+                                                        //      Control algo commissioning
+                                                        
+                                                        /*      FCTN_ACS_CNTRLALGO(B,W);
+                                                                FCTN_CONVERT_FLOAT(moment[0],&telemetry[30]); //telemetry[30] - telemetry[33]
+                                                                FCTN_CONVERT_FLOAT(moment[1],&telemetry[34]); //telemetry[34] - telemetry[37]
+                                                                FCTN_CONVERT_FLOAT(moment[2],&telemetry[38]); //telemetry[38] - telemetry[41]
+                                                                // to include commission TR as well
+                                                                for(uint8_t i=42;i<132;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+
+                                                                crc16 = CRC::crc16_gen(telemetry,132);
+                                                                telemetry[133] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[134] = (uint8_t)(crc16&0x00FF);
+                                                                break;
+                                                        */
+
+                                                        //      Control algo commissioning
+                                                                FCTN_ACS_CNTRLALGO(B,W);
+                                                                FCTN_CONVERT_FLOAT(moment[0],&telemetry[4]); //telemetry[4] - telemetry[7]
+                                                                FCTN_CONVERT_FLOAT(moment[1],&telemetry[8]); //telemetry[8] - telemetry[11]
+                                                                FCTN_CONVERT_FLOAT(moment[2],&telemetry[12]); //telemetry[12] - telemetry[15]
+                                                                // to include commission TR as well
+                                                                for(uint8_t i=16;i<132;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+
+                                                                crc16 = CRC::crc16_gen(telemetry,132);
+                                                                telemetry[132] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[133] = (uint8_t)(crc16&0x00FF);
+                                                                break;
+                                                            }
+                                                    case 0xE1:
+                                                            {
+                                                                float moment_tc[3];
+                                                                printf("\n\rHARDWARE_COMSN");
+                                                                //ACK_L234_telemetry
+                                                                uint8_t M0[2];
+                                                                uint8_t M1[2];
+                                                                uint8_t M2[2];
+                                    
+                                                                M0[0]=tc[3];
+                                                                M0[1]=tc[4];
+                                                                M1[0]=tc[5];
+                                                                M1[1]=tc[6];
+                                                                M2[0]=tc[7];
+                                                                M2[1]=tc[8];
+                                    
+                                    
+                                                                telemetry[0]=0xF0;
+                                                                telemetry[1]=tc[0];
+                                                                telemetry[2]=ACK_CODE;
+                                                                
+                                                                float PWM_measured[3];
+                                                                          
+                                                                FCTN_CONVERT_UINT(M0,&moment_tc[0]);
+                                                                moment_tc[1] = 0;
+                                                                moment_tc[2] = 0;
+                                                                FCTN_ACS_GENPWM_MAIN(moment_tc);
+                                                                PWM_measured[0] = PWM1.read();
+                                                                FCTN_CONVERT_FLOAT(actual_data.current_actual[5],&telemetry[16 + (0*4)]);
+                                                                
+                                                                FCTN_CONVERT_UINT(M1, &moment_tc[1]);
+                                                                moment_tc[0] = 0;
+                                                                moment_tc[2] = 0;
+                                                                FCTN_ACS_GENPWM_MAIN(moment_tc);
+                                                                PWM_measured[1] = PWM2.read();
+                                                                FCTN_CONVERT_FLOAT(actual_data.current_actual[5],&telemetry[16 + (1*4)]);
+                                                                
+                                                                FCTN_CONVERT_UINT(M2, &moment_tc[2]);
+                                                                moment_tc[0] = 0;
+                                                                moment_tc[1] = 0;
+                                                                FCTN_ACS_GENPWM_MAIN(moment_tc);
+                                                                PWM_measured[2] = PWM3.read();
+                                                                FCTN_CONVERT_FLOAT(actual_data.current_actual[5],&telemetry[16 + (2*4)]);
+                                    
+                                                                FCTN_CONVERT_FLOAT(PWM_measured[0],&telemetry[4]);    //4-7
+                                                                FCTN_CONVERT_FLOAT(PWM_measured[1],&telemetry[8]);    //8-11
+                                                                FCTN_CONVERT_FLOAT(PWM_measured[2],&telemetry[12]);  //12-15
+                                                                
+                                                        //      for(int i=0; i<12; i++)
+                                                        //      FCTN_CONVERT_FLOAT(actual_data.current_actual[i],&telemetry[16 + (i*4)]);
+
+                                                        //      FCTN_ATS_DATA_ACQ();  //get data
+
+                                                        //      to include commission TR as well
+                                                                for(uint8_t i=28;i<132;i++)
+                                                                    {
+                                                                      telemetry[i]=0x00;
+                                                                    }
+                                    
+                                                                crc16 = CRC::crc16_gen(telemetry,132);
+                                                                telemetry[132] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[133] = (uint8_t)(crc16&0x00FF);
+                                                                break;
+                                                            }
+                                                    case 0xE2:
+                                                            {   
+                                                                uint8_t STANDBY_STATUS_BCN;
+                                                                STANDBY_STATUS_BCN=tc[4];
+                                                                if(STANDBY_STATUS_BCN==0x00)
+                                                                    {
+                                                                        BCN_STANDBY=0;
+                                                                        //stop BCN_STANDBY_TIMER.stop();//create
+                                                                        telemetry[2]=0xA0;   
+                                                                    }
+                                                                else if(STANDBY_STATUS_BCN==0x01)
+                                                                    {
+                                                                        BCN_STANDBY=1;
+                                                                        //stop BCN_STANDBY_TIMER.start();//create
+                                                                        if(BCN_TX_MAIN_STATUS==0)
+                                                                            {
+                                                                                telemetry[2]=0xA0;                                                                              
+                                                                            }
+                                                                        else if(BCN_TX_MAIN_STATUS==1)
+                                                                            {
+                                                                                telemetry[2]=0xC0;                                                                              
+                                                                            }  
+                                                                    }
+                                                                else
+                                                                    {
+                                                                        telemetry[2]=0x02;
+                                                                    }
+                                                                //ACK_L234_telemetry
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                //ack_code taken care above
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }    
+                                                                break;
+                                                            }
+                                                    case 0x01:
+                                                            {   if(BAE_STANDBY==0x07)
+                                                                    {
+                                                                        printf("\n\rRun P_EPS_INIT");
+                                                                        FCTN_EPS_INIT();
+                                                                        telemetry[2]=ACK_CODE;
+                                                                    }
+                                                                else
+                                                                    {
+                                                                        printf("\n\runable to Run P_EPS_INIT as BAE_STATUS not 111 ");;
+                                                                        telemetry[2]=0x87;
+                                                                    }
+                                                                    
+                                                                //ACK_L234_telemetry
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                //ACK code taken care of
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                          
+                                                                break;
+                                                            }
+                                                    case 0x02:
+                                                            {
+                                                                if(BAE_STANDBY==0x07)
+                                                                    {
+                                                                        printf("\n\rRun P_EPS_MAIN");
+                                                                        F_EPS();
+                                                                        telemetry[2]=ACK_CODE;
+                                                                    }
+                                                                else
+                                                                    {
+                                                                        printf("\n\runable to Run P_EPS_MAIN as BAE_STATUS not 111 ");;
+                                                                        telemetry[2]=0x87;
+                                                                    }
+                                                                    
+                                                                //ACK_L234_telemetry
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                //ACK code taken care of
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x03:
+                                                            {
+                                                                if(BAE_STANDBY==0x07)
+                                                                    {
+                                                                        printf("\n\rRun P_ACS_INIT");
+                                                                        FCTN_ACS_INIT();
+                                                                        telemetry[2]=ACK_CODE;
+                                                                    }
+                                                                else
+                                                                    {
+                                                                        printf("\n\runable to Run P_ACS_INIT as BAE_STATUS not 111 ");;
+                                                                        telemetry[2]=0x87;
+                                                                    }
+                                                                    
+                                                                //ACK_L234_telemetry
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                //ACK CODE TAKEN CARE OF
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x05:
+                                                            {
+                                                                if(BAE_STANDBY==0x07)
+                                                                    {
+                                                                        printf("\n\rRun P_ACS_MAIN");
+                                                                        F_ACS();
+                                                                        telemetry[2]=ACK_CODE;
+                                                                    }
+                                                                else
+                                                                    {
+                                                                        printf("\n\runable to Run P_ACS_MAIN as BAE_STATUS not 111 ");;
+                                                                        telemetry[2]=0x87;
+                                                                    }
+                                                                           
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                //ACK CODE TAKEN CARE OF
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                    
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x06:
+                                                            {
+                                                                if(BAE_STANDBY==0x07)
+                                                                    {
+                                                                        printf("\n\rRun P_BCN_INIT");
+                                                                        F_BCN();
+                                                                        telemetry[2]=ACK_CODE;
+                                                                    }
+                                                                else
+                                                                    {
+                                                                        printf("\n\runable to Run P_BCN_INIT as BAE_STATUS not 111 ");;
+                                                                        telemetry[2]=0x87;
+                                                                    }
+                                                                    
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                //ACK CODE TAKEN CARE OF
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x07:
+                                                            {
+                                                                if(BAE_STANDBY==0x07)
+                                                                    {
+                                                                        printf("\n\rRun P_BCN_TX_MAIN");
+                                                                        FCTN_BCN_TX_MAIN();//correct function check once
+                                                                        telemetry[2]=ACK_CODE;
+                                                                    }
+                                                                else
+                                                                    {
+                                                                        printf("\n\runable to Run P_BCN_TX_MAIN as BAE_STATUS not 111 ");;
+                                                                        telemetry[2]=0x87;
+                                                                    }
+                                                                
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                //ACK CODE TAKEN CARE OF
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x11:
+                                                            {
+                                                                printf("\n\rSW_ON_ACS_ATS1_SW_ENABLE");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                //____________________________________________************************************
+                                                                /*
+                                                                    ATS PIN OR STATUS YET TO BE DECIDED. DECIDED THAT IT IS PIN TC CAN SWITCH ON/OFF THE SENSOR
+                                                                */
+                                                                ATS2_SW_ENABLE = 1;  // making sure we switch off the other
+                                                                ACS_ATS2_SW_STATUS=0x00;
+                                                                ATS1_SW_ENABLE = 0;
+                                                                ACS_ATS1_SW_STATUS=0x01;
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x12:
+                                                            {
+                                                                printf("\n\rSW_ON_ACS_ATS2_SW_ENABLE");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                ATS1_SW_ENABLE = 1; //make sure u switch off the other
+                                                                ACS_ATS1_SW_STATUS=0x00;
+                                                                ATS2_SW_ENABLE = 0;
+                                                                ACS_ATS2_SW_STATUS=0x01;
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x13:
+                                                            {
+                                                                printf("\n\rSW_ON_ACS_TR_XY_ENABLE");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                TRXY_SW = 1;//1 SWITCH enable here
+                                                                ACS_TR_XY_SW_STATUS=0x01;
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x14:
+                                                            {
+                                                                printf("\n\rSW_ON_ACS_TR_Z_ENABLE");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                TRZ_SW = 1;
+                                                                ACS_TR_Z_SW_STATUS=0x01;
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x15:
+                                                            {
+                                                                printf("\n\rSW_ON_BCN_TX_SW_ENABLE");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                BCN_SW = 0;//here 0 is switch enable
+                                                                BCN_TX_SW_ENABLE=0x01;
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x21:
+                                                            {
+                                                                printf("\n\rSW_OFF_ACS_ATS1_SW_ENABLE");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                ATS1_SW_ENABLE = 1;
+                                                                ACS_ATS1_SW_STATUS=0x03;
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x22:
+                                                            {
+                                                                printf("\n\rSW_OFF_ACS_ATS2_SW_ENABLE");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                ATS2_SW_ENABLE = 1;
+                                                                ACS_ATS2_SW_STATUS=0x03;
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x23:
+                                                            {
+                                                                printf("\n\rSW_OFF_ACS_TR_XY_ENABLE");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                TRXY_SW= 0;
+                                                                ACS_TR_XY_SW_STATUS=0x03;
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x24:
+                                                            {
+                                                                printf("\n\rSW_OFF_ACS_TR_Z_ENABLE");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                TRZ_SW = 0;
+                                                                ACS_TR_Z_SW_STATUS=0x03;
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x25:
+                                                            {
+                                                                printf("\n\rSW_OFF_BCN_TX_SW_ENABLE");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                BCN_SW = 1;
+                                                                BCN_TX_SW_ENABLE=0x03;
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                {
+                                                                    telemetry[i]=0x00;
+                                                                }
+                                                                break;
+                                                            }
+                                                    case 0x31:
+                                                            {
+                                                                printf("\n\rACS_ATS1_SW_RESET");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                ATS2_SW_ENABLE = 1;//as ats switched off
+                                                                ATS1_SW_ENABLE = 1;
+                                                                wait_ms(5);
+                                                                ATS1_SW_ENABLE = 0;
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x32:
+                                                            {
+                                                                printf("\n\rACS_ATS2_SW_RESET");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                ATS1_SW_ENABLE = 1;//as ats1 switched off
+                                                                ATS2_SW_ENABLE = 1;
+                                                                wait_ms(5);
+                                                                ATS2_SW_ENABLE = 0;
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x33:
+                                                            {
+                                                                printf("\n\rACS_TR_XY_SW_RESET");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                TRXY_SW= 0;
+                                                                wait_ms(5);
+                                                                TRXY_SW= 1;
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x34:
+                                                            {
+                                                                printf("\n\rACS_TR_Z_SW_RESET");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                TRZ_SW= 0;
+                                                                wait_ms(5);
+                                                                TRZ_SW= 1;
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x35:
+                                                            {
+                                                                printf("\n\rBCN_TX_SW_RESET");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                BCN_SW = 1;
+                                                                wait_ms(5);
+                                                                BCN_SW = 0;
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x36:
+                                                            {
+                                                                printf("\n\rBAE_INTERNAL_RESET TO be done how??");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                /*
+                                                                    logic has to be done********************************************************
+                                                                */
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x37:
+                                                            {
+                                                                printf("\n\rCDMS_RESET");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                CDMS_RESET = 0;
+                                                                wait_ms(5);
+                                                                CDMS_RESET = 1;
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x38:
+                                                            {
+                                                                printf("\n\rCDMS_SW_RESET pin yet to be decided");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                /*
+                                                                    PIN to be DECIDED***************************************************************8
+                                                                */
+                                                                telemetry[2]=ACK_CODE;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                    case 0x40:
+                                                            {
+                                                                uint8_t STANDBY_DATA_TC;
+                                                                BAE_STANDBY=0x00;
+                                                                STANDBY_DATA_TC=tc[4];
+                                                                if(STANDBY_DATA_TC==0x01)
+                                                                    {
+                                                                        BAE_STANDBY |=0x04;
+                                                                        BAE_STANDBY_TIMER_RESET();
+                                                                        //BAE_STANDBY_TIMER();//to be created to make all sensor on after 20 minutes
+                                                                    }
+                                                                STANDBY_DATA_TC=tc[5];
+                                                                if(STANDBY_DATA_TC==0x01)
+                                                                    {
+                                                                        BAE_STANDBY |=0x02;
+                                                                        BAE_STANDBY_TIMER_RESET();
+                                                                        //BAE_STANDBY_TIMER();//to be created to make all sensor on after 20 minutes
+                                                                    }
+                                                                STANDBY_DATA_TC=tc[6];
+                                                                if(STANDBY_DATA_TC==0x01)
+                                                                    {
+                                                                        BAE_STANDBY |=0x01;
+                                                                        BAE_STANDBY_TIMER_RESET();
+                                                                        //BAE_STANDBY_TIMER();//to be created to make all sensor on after 20 minutes
+                                                                    }
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];    
+                                                                telemetry[2]=0xC0;//ack_code for this case
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                case 0x41:
+                                                        {
+                                                            printf("\n\rexecutng BAE reset HK counter");
+                                                            
+                                                            //what to do here??*************************************************
+                                                            //TO BE DONE
+                                                            
+                                                            //ACK_L234_TM
+                                                            telemetry[0]=0xB0;
+                                                            telemetry[1]=tc[0];
+                                                            telemetry[2]=0x02;
+                                                            for(uint8_t i=3;i<11;i++)
+                                                                {
+                                                                    telemetry[i]=0x00;
+                                                                }
+                                                            crc16 = CRC::crc16_gen(telemetry,11);
+                                                            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                            telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                            for(uint8_t i=13;i<134;i++)
+                                                                {
+                                                                    telemetry[i]=0x00;
+                                                                }
+                                                            break;                                                        
+                                                        }
+                                                    default:
+                                                            {
+                                                                printf("\n\rInvalid TC for FMS no matching FID");
+                                                                //ACK_L234_TM
+                                                                telemetry[0]=0xB0;
+                                                                telemetry[1]=tc[0];
+                                                                telemetry[2]=0x02;
+                                                                for(uint8_t i=3;i<11;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                                for(uint8_t i=13;i<134;i++)
+                                                                    {
+                                                                        telemetry[i]=0x00;
+                                                                    }
+                                                                break;
+                                                            }
+                                                }
+                                                break;
+                                            }
+                                    default:
+                                            {
+                                                printf("\n\rInvalid TC, FMS service subtype mismacth");
+                                                //ACK_L234_TM
+                                                telemetry[0]=0xB0;
+                                                telemetry[1]=tc[0];
+                                                telemetry[2]=0x02;
+                                                for(uint8_t i=3;i<11;i++)
+                                                    {
+                                                        telemetry[i]=0x00;
+                                                    }
+                                                crc16 = CRC::crc16_gen(telemetry,11);
+                                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                                for(uint8_t i=13;i<134;i++)
+                                                    {
+                                                        telemetry[i]=0x00;
+                                                    }
+                                                break;
+                                            }
+                                }
+                                break;
+                            }
+                    default:
+                            {
+                                printf("\n\rInvalid TC neither FMS nor MMS");
+                                //ACK_L234_TM
+                                telemetry[0]=0xB0;
+                                telemetry[1]=tc[0];
+                                telemetry[2]=0x02;
+                                for(uint8_t i=3;i<11;i++)
+                                {
+                                    telemetry[i]=0x00;
+                                }
+                                crc16 = CRC::crc16_gen(telemetry,11);
+                                telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
+                                telemetry[12] = (uint8_t)(crc16&0x00FF);
+                                for(uint8_t i=13;i<134;i++)
+                                {
+                                    telemetry[i]=0x00;
+                                }
+                                break;
+                            }
+                    }
+                }
         }
-        default:
-        {
-            printf("Invalid TC\r\n");
-            //ACK_L234_TM
-            telemetry[0]=0xB0;
-            telemetry[1]=tc[0];
-            telemetry[2]=ACK_CODE;
-            for(uint8_t i=3;i<11;i++)
-            {
-                telemetry[i]=0x00;
-            }
-            crc16 = CRC::crc16_gen(telemetry,11);
-            telemetry[11] = (uint8_t)((crc16&0xFF00)>>8);
-            telemetry[12] = (uint8_t)(crc16&0x00FF);
-            for(uint8_t i=13;i<134;i++)
-            {
-                telemetry[i]=0x00;
-            }
-            break;
-        }
-    }
 }
 
 
@@ -1195,10 +1559,11 @@
 
 int strt_add = flash_size() - (2*SECTOR_SIZE);
 uint32_t flasharray[8];    //256+(3*1024)
-char *nativeflash = (char*)strt_add;
+/*corrected*/
+int *nativeflash = (int*)strt_add;
 
 /*Writing to the Flash*/
-void FCTN_CDMS_WR_FLASH(uint16_t j,uint32_t fdata)  //j-position to write address  ; fdata - flash data to be written
+void FCTN_BAE_WR_FLASH(uint16_t j,uint32_t fdata)  //j-position to write address  ; fdata - flash data to be written
 {
     for(int i=0;i<8;i++)
     {
@@ -1208,17 +1573,29 @@
     erase_sector(strt_add);
     program_flash(strt_add, (char*)&flasharray,4*8);
 }
+
 /*End*/
 
 /*Reading from Flash*/
-uint32_t FCTN_CDMS_RD_FLASH(uint16_t j)
+/*return choice parameter included so that i f we want the whole 32 packet data to be sent back we can do so*/
+uint32_t FCTN_BAE_RD_FLASH_ENTITY(uint16_t entity)
 {
     for(int i=0;i<8;i++)
     {
         flasharray[i]=nativeflash[i];
     }
-    return flasharray[j];
+    return flasharray[entity];
 }
+
+uint32_t* FCTN_BAE_RD_FLASH()
+{
+    for(int i=0;i<8;i++)
+    {
+        flasharray[i]=nativeflash[i];
+    }
+    return flasharray;
+}
+
 /*End*/
 
 // Convert float to 4 uint8_t