Repository for CDMS code

Dependencies:   SimpleDMA mbed-rtos mbed eeprom

Fork of COM_MNG_TMTC_SIMPLE by Shreesha S

FMS_functions.h

Committer:
chaithanyarss
Date:
2016-06-30
Revision:
206:fba4aeebf004

File content as of revision 206:fba4aeebf004:

#include "CDMS_HK.h"

uint8_t ACK_CODE;

void CDMS_standby_prcs();
void CDMS_run_prcs();
void CDMS_rst_pwr();
void CDMS_swch_pwr_on();
void CDMS_swch_pwr_off();
void CDMS_rst_hk_counter();
void CDMS_rd_rtc();
void CDMS_mng_rtc();
void CDMS_rd_sd_hk();

extern uint8_t PL_STANDBY_STATE;
extern bool STANDBY_PL;
extern uint8_t CDMS_HK_STANDBY_STATE;
extern bool STANDBY_CDMS_HK;

extern bool SD_RD_ERROR;

extern uint8_t BAE_STATUS;
extern uint8_t PL_STATUS;
extern uint8_t SD_STATUS;

// These are defined in CDMS_HK.h Please check
#define DEVICE_ENABLED 0x00;
#define DEVICE_POWERED 0x01;
#define DEVICE_OC_FAULT 0x02;
#define DEVICE_DISABLED 0x03;
DigitalOut SD_SW_EN_DS (PIN97);
DigitalOut BAE_SW_EN_DS (PIN47);


void CDMS_standby_prcs()    // FID = 0x40
{
    if(PL_STANDBY_STATE = 0x00)
        STANDBY_PL = 0;
    if(PL_STANDBY_STATE = 0x01)
        STANDBY_PL = 1;
    if(CDMS_HK_STANDBY_STATE = 0x00)
        STANDBY_CDMS_HK = 0;
    if(CDMS_HK_STANDBY_STATE = 0x01)
        STANDBY_CDMS_HK = 1;
    if(RCV_SC_STANDBY_STATE = 0x00)
        RCV_SC = 0;
    if(RCV_SC_STANDBY_STATE = 0x01)
        RCV_SC = 1;
    ACK_CODE = 0xC0;
    // Generate the TM
}

void CDMS_run_prcs()    // FID = 0x0_
{
    
}

void CDMS_rst_pwr(uint8_t FID)      // FID = 0x3_
{
    switch(FID){
        case 0x31 : //power reset SD
            SD_SW_EN_DS = 0; //switching OFF
            wait_ms(10);
            SD_SW_EN_DS = 1; //switching ON
            ACK_CODE = 0xA0;
            // Generate TM
    }
}

void CDMS_swch_pwr_on(uint8_t FID)      // FID = 0x1_
{
    if(FID = 0x14)
    {
        PL_STATUS = DEVICE_ENABLED;
        ACK_CODE = 0xA0;
        // Generate TM
    }
    else if(FID = 0x13)
    {
        BAE_STATUS = DEVICE_POWERED;
        BAE_SW_EN_DS = 1; //Power ON BAE
        ACK_CODE = 0xA0;
        // Generate TM
    }
    else if(FID = 0x11)
    {
        SD_STATUS = DEVICE_POWERED;
        SD_SW_EN_DS = 1; //Power ON SD
        FCTN_CDMS_SD_INIT();
        ACK_CODE = 0xA0;
        // Generate TM
    }
    else
    {
        ACK_CODE = 0x02;
        // Generate TM
    }
}

void CDMS_swch_pwr_off(uint8_t FID) // FID = 0x2_
{
        if(FID = 0x24)
    {
        PL_SW_EN_DS = 0; //switching OFF PL
        PL_STATUS = DEVICE_DISABLED;
        ACK_CODE = 0xA0;
        // Generate TM
    }
    else if(FID = 0x23)
    {
        BAE_SW_EN_DS = 0; //Switching OFF BAE
        BAE_STATUS = DEVICE_DISABLED;
        ACK_CODE = 0xA0;
        // Generate TM
    }
    else if(FID = 0x21)
    {
        SD_SW_EN_DS = 0; //Switching OFF SD
        SD_STATUS = DEVICE_DISABLED;
        FCTN_CDMS_SD_INIT();
        ACK_CODE = 0xA0;
        // Generate TM
    }
    else
    {
        ACK_CODE = 0x02;
        // Generate TM
    }
}

void CDMS_rst_hk_counter()      // FID = 0x41
{
    
}

void CDMS_rd_rtc()      // FID = 0xF1
{
    uint8_t time = FCTN_CDMS_RD_RTC();
    // Check if time is read properly
    if( /*if error in reading*/ )
    {
        ACK_CODE = 0x88;
        // Generate TM
    }
    else if( /*if Time is read properly*/ )
    {
        ACK_CODE = 0xA0;
        // Generate TM
    }
}

void CDMS_mng_rtc(uint64_t time)
{
    
}

void CDMS_rd_sd_hk()
{
    uint8_t sd_statusbits[64];
    uint8_t *p;
    int i;
    if(SD_SW_EN_DS != DEVICE_POWERED)
    {
        ACK_CODE = 0x89;
        SD_RD_ERROR = 1;
        //Generate TM
    }
    else
    {
        p = disk_read_statusbits();
        if(p != NULL)
        {
            for(i = 0; i<64; i++)
                sd_statusbits[i] = *(p + i);
            SD_RD_ERROR = 0;
            ACK_CODE = 0xA0;
            // Generate TM
        }
        else
        {
            ACK_CODE = 0x89;
            SD_RD_ERROR = 1;
            //Generate TM
        }
    }
}