Updated EPS code with flowchart v2.3 (CDMS and HW faults)

Dependencies:   FreescaleIAP mbed-rtos mbed

Fork of QM_BAE_review_1_EPS_faults by Mohamed Azad

TCTM.cpp

Committer:
sakthipriya
Date:
2015-12-30
Revision:
4:39a4ae8c7ecd
Parent:
3:07e15677a75c
Child:
5:bb592f3185cc

File content as of revision 4:39a4ae8c7ecd:

#include "mbed.h"
#include "TCTM.h"
#include "crc.h"
#include "EPS.h"

#include "FreescaleIAP.h"

extern BAE_HK_actual actual_data;
extern BAE_HK_min_max bae_HK_minmax;
extern uint32_t BAE_STATUS;

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)
    {
        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");
                }
                case 0x02:
                {
                   printf("Read from RAM\r\n");
                   switch(tc[3])
                   {
                       case 0x00:
                       {
                           printf("Read HK\r\n");
                           tm[0] = 0x60;
                           tm[1] = tc[0];
                           tm[2] = ACK_CODE;
                           for (int i=4; i<132;i++)
                           {
                               
                           }
                           crc16 = CRC::crc16_gen(tm,132);
                           tm[132] = (uint8_t)((crc16&0xFF00)>>8);
                           tm[133] = (uint8_t)(crc16&0x00FF); 
                           
                           
                       }
                       case 0x01:
                       {
                           printf("Read min max data");
                       } 
                       case 0x02:
                       {
                           printf("Read status");
                           
                       } 
                   }
                }
                case 0x05:
                {
                    printf("Write on Flash\r\n");
                }
                default:
                {
                    printf("Invalid TC");
                    //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 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 0x01:
                        {
                            printf("Run P_EPS_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 0x02:
                        {
                            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++)
                            {
                                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 0x03:
                        {
                            printf("Run P_ACS_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 0x04:
                        {
                            printf("Run P_ACS_ACQ_DATA\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 0x05:
                        {
                            printf("Run P_ACS_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++)
                            {
                                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 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");
                            //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 0x11:
                        {
                            printf("SW_ON_ACS_ATS1_SW_ENABLE\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 0x12:
                        {
                            printf("SW_ON_ACS_ATS2_SW_ENABLE\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 0x13:
                        {
                            printf("SW_ON_ACS_TR_XY_ENABLE\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 0x14:
                        {
                            printf("SW_ON_ACS_TR_Z_ENABLE\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 0x15:
                        {
                            printf("SW_ON_BCN_TX_SW_ENABLE\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 0x21:
                        {
                            printf("SW_OFF_ACS_ATS1_SW_ENABLE\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 0x22:
                        {
                            printf("SW_OFF_ACS_ATS2_SW_ENABLE\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 0x23:
                        {
                            printf("SW_OFF_ACS_TR_XY_ENABLE\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 0x24:
                        {
                            printf("SW_OFF_ACS_TR_Z_ENABLE\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 0x25:
                        {
                            printf("SW_OFF_BCN_TX_SW_ENABLE\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 0x31:
                        {
                            printf("ACS_ATS_SW_RESET\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 0x32:
                        {
                            printf("BCN_SW_RESET\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 0x33:
                        {
                            printf("BAE_RESET\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 0x34:
                        {
                            printf("CDMS_SW_RESET\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 0xE0:
                        {
                            printf("CMSN_ACS_ALGO\r\n");
                            //FMS_TM
                            tm[0]=0xF0;
                            tm[1]=tc[0];
                            tm[2]=ACK_CODE;
                            for(uint8_t i=3;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;
                        }
                        case 0xE1:
                        {
                            printf("CMSN_ACS_HW\r\n");
                            //FMS_TM
                            tm[0]=0xF0;
                            tm[1]=tc[0];
                            tm[2]=ACK_CODE;
                            for(uint8_t i=3;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;
                        }
                        case 0xC1:
                        {
                            printf("Reset HK_Counter\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;
                        }
                        default:
                        {   
                            printf("Invalid TC\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;
                        }
                    }
                    
                default:
                {   
                    printf("Invalid TC\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;
                }
                }
            }
        }
    }
}            




int strt_add = flash_size() - (2*SECTOR_SIZE);  
uint32_t flasharray[8];    //256+(3*1024)
char *nativeflash = (char*)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
{
    for(int i=0;i<8;i++)  
    {
        flasharray[i]=nativeflash[i];
    }
    flasharray[j]=fdata;
    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)
{
    for(int i=0;i<8;i++)
    {
        flasharray[i]=nativeflash[i];
    }
    return flasharray[j];
}
/*End*/