ACS data acq changed completely. Tested and working. Deals all faults.

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of QM_BAE_review_1 by Team Fox

Revision:
10:f93407b97750
Parent:
9:194afacf7449
Child:
11:1fdb94ae6563
--- a/TCTM.cpp	Fri Apr 01 21:13:16 2016 +0000
+++ b/TCTM.cpp	Mon Apr 11 17:26:46 2016 +0000
@@ -8,6 +8,9 @@
 #include "iostream"
 #include "stdint.h"
 #include "cassert"
+#include"math.h"
+
+
 
 extern DigitalOut ATS1_SW_ENABLE; // enable of att sens2 switch
 extern DigitalOut ATS2_SW_ENABLE; // enable of att sens switch
@@ -16,23 +19,41 @@
 extern DigitalOut TRZ_SW;  //TR Z Switch
 extern DigitalOut CDMS_RESET; // CDMS RESET
 extern DigitalOut BCN_SW;      //Beacon switch
-
+extern uint8_t BCN_TX_STATUS;
+extern uint8_t BCN_FEN;
 extern BAE_HK_actual actual_data;
 extern BAE_HK_min_max bae_HK_minmax;
 extern uint32_t BAE_STATUS;
 extern float data[6];
 extern float moment[3];
+extern uint8_t ACS_STATE;
+extern DigitalOut EN_BTRY_HT;
+extern DigitalOut phase_TR_x;
+extern DigitalOut phase_TR_y;
+extern DigitalOut phase_TR_z;
+extern BAE_HK_actual actual_data.power_mode;
+extern BAE_HK_quant quant_data;
 
 extern void FCTN_ATS_DATA_ACQ();
 extern void FCTN_ACS_CNTRLALGO(float*,float*);
 
+float angle(float x,float y,float z)
+{
+    float mag_total=sqrt(x*x + y*y + z*z);
+    float cos_z = z/mag_total;
+    float theta_z = acosf(cos_z);
+    
+    return theta_z;
+    //printf("/n cos_zz= %f /t theta_z= %f /n",cos_z,theta_z);
+}
+
 uint8_t* FCTN_BAE_TM_TC (uint8_t* tc)
 
 {
     uint8_t service_type=(tc[2]&0xF0);
     uint8_t* tm;
     uint16_t crc16;
-    
+   
     
     switch(service_type)
     {
@@ -49,27 +70,120 @@
                 }
                 case 0x02:
                 {
+                   uint16_t MID = ((uint16_t)tc[3] << 8) | tc[4];
+                   switch(MID)
+                   {
+                   
+                        case 0x0001:
+                        {  
                    printf("Read from RAM\r\n");
                    
-                   uint16_t MID = ((uint16_t)tc[3] << 8) | tc[4];
-                   switch(MID )
-                   {
-                       case 0x0010:
-                       {
-                           printf("Read MUX DATA\r\n");
+                    /*taking some varible till we find some thing more useful*/
+                    //uint8_t ref_val=0x01;
                            tm[0] = 0x60;
                            tm[1] = tc[0];
                            tm[2] = ACK_CODE;
-                           for(int i=0; i<3; i++)
-                                FCTN_CONVERT_FLOAT(actual_data.Bvalue_actual[i],&tm[4+ (i*4)]); //tm[4] - tm[7] 
-                           for(int i=0; i<3; i++)
-                                FCTN_CONVERT_FLOAT(actual_data.AngularSpeed_actual[i],&tm[35+(i*4)]); //
+                           /*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*/
+                           tm[3] = (BCN_SW);
+                           tm[3] = tm[3]|(TRXY_SW_EN<<1);
+                           tm[3] = tm[3]|(TRZ_SW_EN<<2);
+                           tm[3] = tm[3]|(ATS1_SW_ENABLE<<3);
+                           tm[3] = tm[3]|(ATS2_SW_ENABLE<<4);
+
+                           if(BCN_TX_STATUS==2)
+                           tm[3] = tm[3]|0x20;
+                           else
+                           tm[3] = tm[3] & 0xDF;
+        
+                           tm[3] = tm[3]|(BCN_FEN<<6);
+                           tm[3] = tm[3]|(ACS_ACQ_DATA_ENABLE<<7);
+                                      
+                           /*not included in the code yet*/           
+                           tm[4] = BAE_RESET_COUNTER;
+                           
+                           tm[5] = ACS_STATE; 
+                           tm[5] = tm[5]|(EN_BTRY_HT<<3);
+                           tm[5] = tm[5]|(phase_TR_x<<4);
+                           tm[5] = tm[5]|(phase_TR_y<<5);
+                           tm[5] = tm[5]|(phase_TR_z<<6);
+                           /*spare to be fixed*/
+                           tm[5] = tm[5]|(Spare))<<7);
+                           /**/
+                           uint8_t soc_powerlevel_2=50;
+                           uint8_t soc_powerlevel_3=65;
+                           
+                           tm[6] = soc_powerlevel_2;
+                           tm[7] = soc_powerlevel_3;
+                           
+                           /*to be fixed*/
+                           tm[8] = 0;
+                           tm[9] = 0;
+                           tm[10] = 0; 
+                           tm[11] = 0;
+                           //tm[8] = Torque Rod X Offset;
+                           //tm[9] = Torque Rod Y Offset;
+                           //tm[10] = Torque Rod Z Offset;
+                           //tm[11] = ACS_DEMAG_TIME_DELAY;
+                           tm[12] = (BAE_STATUS>>24) & 0xFF;
+                           tm[13] = (BAE_STATUS>>16) & 0xFF;
+                           tm[14] = (BAE_STATUS>>8) & 0xFF;
+                           tm[15] = BAE_STATUS & 0xFF;
                            
-                           for(int i=0; i<16; i++) //16*4 = 64 bytes //tm[4] to tm[67] filled
-                                FCTN_CONVERT_FLOAT(actual_data.voltage_actual[i], &tm[4+(i*4)]); 
-                           for(int i=0; i<12; i++) //12*4 = 48       //tm[68] to tm[115] filled
-                                FCTN_CONVERT_FLOAT(actual_data.current_actual[i],&tm[68 + (i*4)]); 
-                           for (int i=116; i<132;i++)
+                           /*to be fixed*/
+                           tm[16] = BCN_FAIL_COUNT;
+                           tm[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;
+                           
+                           tm[18] = P_BAE_I2CRX_COUNTER>>8
+                           tm[19] = P_BAE_I2CRX_COUNTER;
+                           tm[20] = P_ACS_MAIN_COUNTER>>8;
+                           tm[21] = P_ACS_MAIN_COUNTER;
+                           tm[22] = P_BCN_TX_MAIN_COUNTER>>8;
+                           tm[23] = P_BCN_TX_MAIN_COUNTER;
+                           tm[24] = P_EPS_MAIN_COUNTER>>8;
+                           tm[25] = P_EPS_MAIN_COUNTER;
+                           
+                           for(int i=0; i<3; i++)
+                                FCTN_CONVERT_FLOAT(actual_data.Bvalue_actual[i],&tm[26+ (i*4)]); 
+                           for(int i=0; i<3; i++)
+                                FCTN_CONVERT_FLOAT(actual_data.AngularSpeed_actual[i],&tm[38+(i*4)]);
+                                
+                           //FAULT_FLAG();
+                           tm[50] = actual_data.faultIr_status;
+                           tm[51] = actual_data.faultPoll_status;
+                           //Bdot Rotation Speed of Command  tm[52-53]
+                           //Bdot Output Current   tm[54]
+                           float l_pmw1 = PWM1;
+                           float l_pmw2 = PWM2;
+                           float l_pmw3 = PWM3;
+                           FCTN_CONVERT_FLOAT(l_pwm1, &tm[55]);
+                           FCTN_CONVERT_FLOAT(l_pwm2, &tm[59]);
+                           FCTN_CONVERT_FLOAT(l_pwm3, &tm[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, &tm[67]);
+
+                           for (int i=0; i<16; i++)
+                                tm[68+i] = quant_data.voltage_quant[i];
+                           for (int i=0; i<12; i++)
+                                tm[84+i] = quant_data.current_quant[i];
+                           //tm[96]
+                           //tm[97]       
+                           //tm[98]
+                           //tm[99]
+                           tm[100] = quant_data.Batt_voltage_quant;
+                           tm[101] = quant_data.BAE_temp_quant;
+                           tm[102] = quant_data.Batt_gauge_quant[1];
+                           tm[103] = quant_data.Batt_temp_quant[0];
+                           tm[104] = quant_data.Batt_temp_quant[1];
+                           
+                           //tm[105] = beacon temperature;
+                           
+                           for (int i=105; i<132;i++)
                            {
                                tm[i] = 0x00;
                            }
@@ -77,9 +191,84 @@
                            tm[132] = (uint8_t)((crc16&0xFF00)>>8);
                            tm[133] = (uint8_t)(crc16&0x00FF); 
                            return tm;
-                       }
-                       //.........................
-                     /*  case 0x0010:
+                           
+                }    
+                case 0x0002:            
+                    {
+                        tm[0] = 0x60;
+                        tm[1] = tc[0];
+                        tm[2] = ACK_CODE;
+                        
+                        for(int i;i<16;i++)
+                        tm[i+3] = BAE_HK_min_max bae_HK_minmax.voltage_max[i];
+                        
+                        for(int i;i<12;i++)
+                        tm[i+18] = BAE_HK_min_max bae_HK_minmax.current_max[i];
+                        
+                        tm[29] = BAE_HK_min_max bae_HK_minmax.Batt_voltage_max;;
+                        tm[30] = BAE_HK_min_max bae_HK_minmax.BAE_temp_max;
+                        
+                        /*battery soc*/
+                        //tm[31] = BAE_HK_min_max bae_HK_minmax.voltage_max;
+                        
+                        tm[32] = BAE_HK_min_max bae_HK_minmax.Batt_temp_max[1];
+                        tm[33] = BAE_HK_min_max bae_HK_minmax.Batt_temp_max[2];
+                        
+                        /*BCN  temp not there*/
+                        //tm[34] = BAE_HK_min_max bae_HK_minmax.;
+                        
+                        for(int i=0; i<3; i++)
+                                FCTN_CONVERT_FLOAT(BAE_HK_min_max bae_HK_minmax.Bvalue_max[i],&tm[35+(i*4)]); 
+                           
+                        for(int i=0; i<3; i++)
+                                FCTN_CONVERT_FLOAT(BAE_HK_min_max bae_HK_minmax.AngularSpeed_max[i],&tm[47+(i*4)]);
+                                
+                        /*min data*/
+                        
+                        for(int i;i<16;i++)
+                        tm[i+59] = BAE_HK_min_max bae_HK_minmax.voltage_min[i];
+                        
+                        for(int i;i<12;i++)
+                        tm[i+74] = BAE_HK_min_max bae_HK_minmax.current_min[i];
+                        
+                        tm[86] = BAE_HK_min_max bae_HK_minmax.Batt_voltage_min;
+                        tm[87] = BAE_HK_min_max bae_HK_minmax.BAE_temp_min;
+                        
+                        /*battery soc*/
+                        //tm[88] = BAE_HK_min_max bae_HK_minmax.voltage_max;
+                        
+                        tm[89] = BAE_HK_min_max bae_HK_minmax.Batt_temp_min[1];
+                        tm[90] = BAE_HK_min_max bae_HK_minmax.Batt_temp_min[2];
+                        
+                        /*BCN  temp not there*/
+                        //tm[91] = BAE_HK_min_max bae_HK_minmax.;
+                        
+                        for(int i=0; i<3; i++)
+                                FCTN_CONVERT_FLOAT(BAE_HK_min_max bae_HK_minmax.Bvalue_min[i],&tm[91+(i*4)]); 
+                           
+                        for(int i=0; i<3; i++)
+                                FCTN_CONVERT_FLOAT(BAE_HK_min_max bae_HK_minmax.AngularSpeed_min[i],&tm[103+(i*4)]);
+                        
+                     
+                        for (int i=115; 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); 
+                           return tm;
+                     
+                     }
+                    
+                                
+                    }
+                    }       
+                                   
+                  /*
+                   switch(tc[3])
+                   {
+                       case 0x01:
                        {
                            printf("Read MUX DATA\r\n");
                            tm[0] = 0x60;
@@ -97,19 +286,13 @@
                            tm[132] = (uint8_t)((crc16&0xFF00)>>8);
                            tm[133] = (uint8_t)(crc16&0x00FF); 
                            return tm;
-                       }*/
-                       //..........................................
-                       case 0x2:
+                       }
+                       case 0x02:
                        {
                            printf("Read HK\r\n");
                            tm[0] = 0x60;
                            tm[1] = tc[0];
                            tm[2] = ACK_CODE;
-                           for(int i=0; i<3; i++)
-                                FCTN_CONVERT_FLOAT(actual_data.Bvalue_actual[i],&tm[4+ (i*4)]); //tm[4] - tm[7] 
-                           for(int i=0; i<3; i++)
-                                FCTN_CONVERT_FLOAT(actual_data.AngularSpeed_actual[i],&tm[35+(i*4)]); //
-                           
                            FCTN_CONVERT_FLOAT(actual_data.Batt_temp_actual[0],&tm[4]);  //tm[4]-tm[7]
                            FCTN_CONVERT_FLOAT(actual_data.Batt_temp_actual[1],&tm[8]);  //tm[8]- tm[11]
                            for(int i=0; i<4; i++)
@@ -118,6 +301,10 @@
                            tm[32] = (uint8_t)actual_data.power_mode;      
                            tm[33] = actual_data.faultPoll_status; 
                            tm[34] = actual_data.faultIr_status;
+                           for(int i=0; i<3; i++)
+                                FCTN_CONVERT_FLOAT(actual_data.AngularSpeed_actual[i],&tm[35+(i*4)]); //35 -46
+                           for(int i=0; i<3; i++)
+                                FCTN_CONVERT_FLOAT(actual_data.Bvalue_actual[i],&tm[47+(i*4)]); //47 -58 
                            FCTN_CONVERT_FLOAT(actual_data.Batt_voltage_actual,&tm[59]); //59 - 62  
                            for (int i=63; i<132;i++)
                            {
@@ -129,7 +316,7 @@
                            return tm;
                            
                        } 
-                       case 0x3:
+                       case 0x03:
                        {
                            printf("Read min max data");
                            tm[0] = 0x60;
@@ -181,7 +368,7 @@
                            tm[133] = (uint8_t)(crc16&0x00FF); 
                            return tm;
                        } 
-                       case 0x4:
+                       case 0x04:
                        {
                            printf("Read status");
                            tm[0] = 0x60;
@@ -202,7 +389,8 @@
                            
                        } 
                    }
-                }
+                   */
+                
                 case 0x05:
                 {
                     printf("Write on Flash\r\n");
@@ -246,19 +434,50 @@
                     {
                         case 0xE0:
                         {
+                            float B[3],W[3];
                             printf("ACS_COMSN\r\n");
                             //ACK_L234_TM
+                            
+                            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]);
+                                                        
                             tm[0]=0xB0;
                             tm[1]=tc[0];
                             tm[2]=ACK_CODE;
-                            FCTN_ATS_DATA_ACQ();  //get data
+                            //FCTN_ATS_DATA_ACQ();  //get data
                             printf("gyro values\n\r"); 
                             for(int i=0; i<3; i++) 
-                                printf("%f\n\r",data[i]);
+                                printf("%f\n\r",W[i]);
                             printf("mag values\n\r");
-                            for(int i=3; i<6; i++) 
-                                printf("%f\n\r",data[i]);
-                            FCTN_CONVERT_FLOAT(data[0],&tm[4]); //tm[4] - tm[7]
+                            for(int i=0; i<3; i++) 
+                                printf("%f\n\r",B[i]);
+                   /*         FCTN_CONVERT_FLOAT(data[0],&tm[4]); //tm[4] - tm[7]
                             FCTN_CONVERT_FLOAT(data[1],&tm[8]); //tm[8] - tm[11]
                             FCTN_CONVERT_FLOAT(data[2],&tm[12]); //tm[12] - tm[15]
                             FCTN_CONVERT_FLOAT(data[0],&tm[16]); //tm[16] - tm[19]
@@ -272,16 +491,16 @@
                                 tm[29] = 1;   // mag values in correct range
                             else
                                 tm[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; 
+                     */       
+                       //     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_ACS_CNTRLALGO(B,W);
                             FCTN_CONVERT_FLOAT(moment[0],&tm[30]); //tm[30] - tm[33] 
                             FCTN_CONVERT_FLOAT(moment[1],&tm[34]); //tm[34] - tm[37] 
                             FCTN_CONVERT_FLOAT(moment[2],&tm[38]); //tm[38] - tm[41] 
@@ -295,31 +514,115 @@
                             tm[133] = (uint8_t)((crc16&0xFF00)>>8);
                             tm[134] = (uint8_t)(crc16&0x00FF);
                             return tm;
+                         */ 
+                           
+                           // Control algo commissioning
+                            FCTN_ACS_CNTRLALGO(B,W);
+                            FCTN_CONVERT_FLOAT(moment[0],&tm[4]); //tm[4] - tm[7] 
+                            FCTN_CONVERT_FLOAT(moment[1],&tm[8]); //tm[8] - tm[11] 
+                            FCTN_CONVERT_FLOAT(moment[2],&tm[12]); //tm[12] - tm[15] 
+                            // to include commission TR as well
+                            for(uint8_t i=16;i<132;i++)
+                            {
+                                tm[i]=0x00;
+                            }
+                            
+                            crc16 = CRC::crc16_gen(tm,132);
+                            tm[133] = (uint8_t)((crc16&0xFF00)>>8);
+                            tm[134] = (uint8_t)(crc16&0x00FF);
+                            return tm;
                             
                         }
-                       /* case 0x02:
+                        
+                        
+                        
+                        case 0xE1:
                         {
-                            printf("Run P_EPS_MAIN\r\n");
+                            float moment_tc[3];  
+                            printf("HARDWARE_COMSN\r\n");
+                            //ACK_L234_TM
+                            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];
+                            
+                            
+                            tm[0]=0xB0;
+                            tm[1]=tc[0];
+                            tm[2]=ACK_CODE;
+                            FCTN_CONVERT_UINT (M0, &moment_tc[0]);
+                            FCTN_CONVERT_UINT (M1, &moment_tc[1]);
+                            FCTN_CONVERT_UINT (M2, &moment_tc[2]);
+                            
+                            
+                            
+                             FCTN_ACS_GENPWM_MAIN(moment_tc); 
+                             
+                             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],&tm[4]);    //4-7
+                            FCTN_CONVERT_FLOAT(PWM_measured[1],&tm[8]);    //8-11
+                            FCTN_CONVERT_FLOAT(PWM_measured[2],&tm[12]);  //12-15
+                             for(int i=0; i<12; i++) 
+                                FCTN_CONVERT_FLOAT(actual_data.current_actual[i],&tm[16 + (i*4)]); 
+                            
+
+                            FCTN_ATS_DATA_ACQ();  //get data
+                            
+
+                            // to include commission TR as well
+                            for(uint8_t i=64;i<132;i++)
+                            {
+                                tm[i]=0x00;
+                            }
+                            
+                            crc16 = CRC::crc16_gen(tm,132);
+                            tm[133] = (uint8_t)((crc16&0xFF00)>>8);
+                            tm[134] = (uint8_t)(crc16&0x00FF);
+                            return tm;
+                            
+                        }
+                       case 0x02:
+                        {
+                          F_EPS();
+                          /*  printf("Run P_EPS_MAIN\r\n");
                             //ACK_L234_TM
                             tm[0]=0xB0;
                             tm[1]=tc[0];
                             tm[2]=ACK_CODE;
-                            for(uint8_t i=3;i<11;i++)
+                        */
+                            for(uint8_t i=0;i<133;i++)
                             {
                                 tm[i]=0x00;
                             }
-                            crc16 = CRC::crc16_gen(tm,11);
-                            tm[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            tm[12] = (uint8_t)(crc16&0x00FF);
+                            crc16 = CRC::crc16_gen(tm,132);
+                            tm[132] = (uint8_t)((crc16&0xFF00)>>8);
+                            tm[133] = (uint8_t)(crc16&0x00FF);
+                            /*
                             for(uint8_t i=13;i<134;i++)
                             {
                                 tm[i]=0x00;
                             }
+                            */
+                            
                             return tm;
                         }
-                        case 0x03:
+                        
+                      /*  case 0x03:
                         {
-                            printf("Run P_ACS_INIT\r\n");
+                           
+                           /* printf("Run P_ACS_INIT\r\n");
                             //ACK_L234_TM
                             tm[0]=0xB0;
                             tm[1]=tc[0];
@@ -357,9 +660,53 @@
                             }
                             return tm;
                         }
+                        */
                         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],&tm[(i*4)]); 
+                           for(int i=0; i<3; i++)
+                                FCTN_CONVERT_FLOAT(actual_data.AngularSpeed_actual[i],&tm[12+(i*4)]);
+                                
+                           tm[24] = ACS_STATE; 
+                           tm[24] = tm[5]|(EN_BTRY_HT<<3);
+                           tm[24] = tm[5]|(phase_TR_x<<4);
+                           tm[24] = tm[5]|(phase_TR_y<<5);
+                           tm[24] = tm[5]|(phase_TR_z<<6);
+                           
+                           FCTN_CONVERT_FLOAT(l_pwm_1,&tm[25]);
+                           FCTN_CONVERT_FLOAT(l_pwm_2,&tm[29]);
+                           FCTN_CONVERT_FLOAT(l_pwm_3,&tm[33]);
+                            
+                            //ACK_L234_TM
+                           /* tm[0]=0xB0;
+                            tm[1]=tc[0];
+                            tm[2]=ACK_CODE;
+                            for(uint8_t i=3;i<11;i++)
+                            {
+                                tm[i]=0x00;
+                            }
+                            */
+                            crc16 = CRC::crc16_gen(tm,37);
+                            tm[37] = (uint8_t)((crc16&0xFF00)>>8);
+                            tm[38] = (uint8_t)(crc16&0x00FF);
+                            for(uint8_t i=39;i<134;i++)
+                            {
+                                tm[i]=0x00;
+                            }
+                            return tm;
+                        }
+                        
+                        
+                        
+                        case 0x06:
+                        {
+                            F_BCN();
+                          /*  printf("Run P_BCN_INIT\r\n");
                             //ACK_L234_TM
                             tm[0]=0xB0;
                             tm[1]=tc[0];
@@ -368,35 +715,17 @@
                             {
                                 tm[i]=0x00;
                             }
-                            crc16 = CRC::crc16_gen(tm,11);
-                            tm[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            tm[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
+                            */
+                            crc16 = CRC::crc16_gen(tm,0);
+                            tm[0] = (uint8_t)((crc16&0xFF00)>>8);
+                            tm[1] = (uint8_t)(crc16&0x00FF);
+                            for(uint8_t i=2;i<134;i++)
                             {
                                 tm[i]=0x00;
                             }
                             return tm;
                         }
-                        case 0x06:
-                        {
-                            printf("Run P_BCN_INIT\r\n");
-                            //ACK_L234_TM
-                            tm[0]=0xB0;
-                            tm[1]=tc[0];
-                            tm[2]=ACK_CODE;
-                            for(uint8_t i=3;i<11;i++)
-                            {
-                                tm[i]=0x00;
-                            }
-                            crc16 = CRC::crc16_gen(tm,11);
-                            tm[11] = (uint8_t)((crc16&0xFF00)>>8);
-                            tm[12] = (uint8_t)(crc16&0x00FF);
-                            for(uint8_t i=13;i<134;i++)
-                            {
-                                tm[i]=0x00;
-                            }
-                            return tm;
-                        }
+                        /*
                         case 0x07:
                         {
                             printf("Run P_BCN_TX_MAIN\r\n");
@@ -417,13 +746,14 @@
                             }
                             return tm;
                         }*/
-                        case 0x11:
+                         case 0x11:
                         {
                             printf("SW_ON_ACS_ATS1_SW_ENABLE\r\n");
                             //ACK_L234_TM
                             tm[0]=0xB0;
                             tm[1]=tc[0];
                             tm[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++)
                             {
@@ -444,6 +774,7 @@
                             //ACK_L234_TM
                             tm[0]=0xB0;
                             tm[1]=tc[0];
+                            ATS1_SW_ENABLE = 1; //make sure u switch off the other
                             ATS2_SW_ENABLE = 0;
                             tm[2]=1;
                             for(uint8_t i=3;i<11;i++)