Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FreescaleIAP mbed-rtos mbed
Fork of workinQM_5thJan_azad by
Diff: TCTM.cpp
- 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