Dummy program to demonstrate problems: working code

Dependencies:   SLCD mbed-rtos mbed

Fork of MNG_TC by Shreesha S

Structures.h

Committer:
shreeshas95
Date:
2015-09-17
Revision:
15:cc266eccf327
Parent:
13:7b27a8e9cbb4

File content as of revision 15:cc266eccf327:

// TELECOMMAND CLASS :

typedef struct TC_list{
    // received from the RCV_TC
    unsigned char *TC_string;
    bool short_or_long; //'true' for short
    bool crc_pass;
 
    // updated info - updated in MNG_TC
    unsigned char packet_seq_count;
    unsigned char apid;
    bool abort_on_nack;
    bool enabled;
//    bool valid_execution;
    unsigned char exec_status;
 
    struct TC_list *next_TC;
    
    ~TC_list(){}
}TC_list;
 
typedef struct TM_list{
 
    unsigned char *TM_string;
    // bool short_or_long; // true for short
    // pass while calling the function
    unsigned char tmid;
    struct TM_list *next_TM;
    
    ~TM_list(){}
}TM_List;





/*//NEW CODE: UNDER CONSTRUCTION
//SIZE
#define TC_SHORT_SIZE 11
#define TC_LONG_SIZE 135
#define TM_LONG_SIZE 134
#define TM_SHORT_SIZE 13

//TELECOMMAND CLASS:

//MASKS
#define SHORT_LONG_TC_MASK 0x4000
#define CRC_MASK 0x2000
#define ABORT_ON_NACK_MASK 0x1000
#define APID_MASK 0x0C00
#define EXEC_STATUS_MASK 0x0300
#define PACKET_SEQ_COUNT_MASK 0x00FF

//x should be fields defined variable in the Base_tc
#define GETshort_or_long(x) ((x & SHORT_LONG_TC_MASK) >> 14)
#define GETcrc_pass(x) ((x & CRC_MASK) >> 13)
#define GETabort_on_nack(x) ((x & ABORT_ON_NACK_MASK) >> 12)
#define GETapid(x) ((x & APID_MASK) >> 10)
#define GETexec_status(x) ((x & EXEC_STATUS_MASK) >> 8)
#define GETpacket_seq_count(x) (x & PACKET_SEQ_COUNT_MASK)

//x should be fields defined variable in the Base_tc
//y should be a 16 bit number Eg: 0xFFFF, or 0x0000
//use in a seperate line
#define PUTshort_or_long(x,y) fields = (fields & ~(SHORT_OR_LONG_MASK)) | (y & SHORT_OR_LONG_MASK)
#define PUTcrc_pass(x,y) fields = (fields & ~(CRC_MASK)) | (y & CRC_MASK)
#define PUTabort_on_nack(x,y) fields = (fields & ~(ABORT_ON_NACK_MASK)) | (y & ABORT_ON_NACK_MASK)
#define PUTapid(x,y) fields = (fields & ~(APID_MASK)) | (y & APID_MASK)
//#define PUTexec_status(x,y) fields = 

//PARENT CLASS
class Base_tc{
public:
    uint16_t fields;
    uint8_t *TC_string;
    Base_tc *next_node;
    
    virtual ~Base_tc(){}
};

//DERIVED CLASS - SHORT TC
class Short_tc : public Base_tc{
private:
    uint8_t fix_str[TC_SHORT_SIZE];
public:
    Short_tc(){
        TC_string = fix_str;
        fields = 0;
    }
    
    ~Short_tc(){}
};

//DERIVED CLASS - LONG TC
class Long_tc : public Base_tc{
private:
    uint8_t fix_str[TC_LONG_SIZE];
public:
    Long_tc(){
        TC_string = fix_str;
        fields = 0;
    }
    
    ~Long_tc(){}
};

// TELEMETRY CLASS :

// MASKS
#define SHORT_LONG_TM_MASK 0x10
#define TMID_MASK 0x0F

// PARENT CLASS
class Base_tm{
protected:
    uint8_t fields;
public:
    uint8_t *TM_string;
    Base_tm *next_node;
    
    virtual ~Base_tm(){}
};

// DERIVED CLASS : Long tc [type 0]
// type 0
class Long_tm : public Base_tm{
private:
    uint8_t fix_str[TM_LONG_SIZE];
public:
    Long_tm(){
        TM_string = fix_str;
        // type 0
        fields = 0;
    }
    
    ~Long_tm(){}
};

// DERIVED CLASS : Short tc [type 1]
// type 1
class Short_tm : public Base_tm{
private:
    uint8_t fix_str[TM_SHORT_SIZE];
public:
    Short_tm(){
        TM_string = fix_str;
        // type 1
        fields = 0x10;
    }
    
    ~Short_tm(){}
};

//END*/

























////PARENT CLASS
//class Base_tc{
//public:
//    uint16_t fields;
//    uint8_t *TC_string;
//    Base_tc *next_node;
    
//    short = 0, long = 1
//    bool GETshort_or_long(void){
//        return (fields & SHORT_LONG_TC_MASK);
//    }
//    void PUTshort_or_long(bool input){
//        if(input){
//            fields |= SHORT_LONG_TC_MASK;
//        }
//        else{
//            fields &= ~(SHORT_LONG_TC_MASK);
//        }
//    }
//    
//    bool inline GETcrc_pass(){
//        return (fields & CRC_MASK);
//    }
//    void inline PUTcrc_pass(bool input){
//        if(input){
//            fields |= CRC_MASK;
//        }
//        else{
//            fields &= ~(CRC_MASK);
//        }
//    }
//        
//    bool inline GETabort_on_nack(){
//        return (fields & ABORT_ON_NACK_MASK);
//    }
//    void inline PUTabort_on_nack(bool input){
//        if(input){
//            fields |= ABORT_ON_NACK_MASK;
//        }
//        else{
//            fields &= ~(ABORT_ON_NACK_MASK);
//        }
//    }
//    
//    uint8_t inline GETapid(){
//        uint16_t temp = fields & APID_MASK;
//        temp = temp >> 10;
//        return (temp & 0xFF);
//    }
//    void inline PUTapid(uint8_t input){
//        uint16_t temp = input;
//        temp = temp << 10;
//        fields &= ~(APID_MASK);
//        fields |= (temp & APID_MASK);
//    }
//    
//    uint8_t inline GETexec_status(){
//        uint16_t temp = fields & EXEC_STATUS_MASK;
//        temp = temp >> 8;
//        return (temp & 0xFF);
//    }
//    void inline PUTexec_status(uint8_t input){
//        uint16_t temp = input;
//        temp = temp << 8;
//        fields &= ~(EXEC_STATUS_MASK);
//        fields |= (temp & EXEC_STATUS_MASK);
//    }
//    
//    uint8_t inline GETpacket_seq_count(){
//        uint16_t temp = fields & PACKET_SEQ_COUNT_MASK;
//        return (temp & 0xFF);
//    }
//    void inline PUTpacket_seq_count(uint8_t input){
//        uint16_t temp = input;
//        fields &= ~(PACKET_SEQ_COUNT_MASK);
//        fields |= (temp & PACKET_SEQ_COUNT_MASK);
//    }
//    
////    update everything other than short_or_long, and crc_pass from TC_string
//    void update_fields(){
////        abort on nack
//        uint8_t temp = TC_string[1];
//        uint16_t t16 = 0;
//        if(temp & 0x10){
//            fields |= ABORT_ON_NACK_MASK;
//        }
//        else{
//            fields &= ~(ABORT_ON_NACK_MASK);
//        }
//        
//        // apid
//        t16 = temp;
//        t16 = t16 << 4;
//        fields &= ~(APID_MASK);
//        fields |= (t16 & APID_MASK);
//        
//        // exec_status : default value of exec status
//        fields &= ~(EXEC_STATUS_MASK);
//        
//        // packet seq count
//        temp = TC_string[0];
//        t16 = temp;
//        fields &= ~(PACKET_SEQ_COUNT_MASK);
//        fields |= (t16 & PACKET_SEQ_COUNT_MASK);
//    }
//    
//    virtual ~Base_tc(){}
//};

////DERIVED CLASS - SHORT TC
//class Short_tc : public Base_tc{
//private:
//    uint8_t fix_str[TC_SHORT_SIZE];
//public:
//    Short_tc(){
//        TC_string = fix_str;
//        fields = 0;
//    }
//    
//    ~Short_tc(){}
//};
//
////DERIVED CLASS - LONG TC
//class Long_tc : public Base_tc{
//private:
//    uint8_t fix_str[TC_LONG_SIZE];
//public:
//    Long_tc(){
//        TC_string = fix_str;
//        fields = 0;
//    }
//    
//    ~Long_tc(){}
//};

//// TELEMETRY CLASS :
//
//// MASKS
//#define SHORT_LONG_TM_MASK 0x10
//#define TMID_MASK 0x0F
//
//// PARENT CLASS
//class Base_tm{
//protected:
//    uint8_t fields;
//public:
//    uint8_t *TM_string;
//    Base_tm *next_node;
//    
    // short = 0, long = 1
//    bool GETshort_or_long(){
//        return (fields & SHORT_LONG_TM_MASK);
//    }
//    void PUTshort_or_long(bool input){
//        if(input){
//            fields |= SHORT_LONG_TM_MASK;
//        }
//        else{
//            fields &= ~(SHORT_LONG_TM_MASK);
//        }
//    }
//    
//    uint8_t GETtmid(){
//        return (fields & TMID_MASK);
//    }
//    void PUTtmid(uint8_t input){
//        fields &= ~(TMID_MASK);
//        fields |= (input & TMID_MASK);
//    }
//    
//    virtual ~Base_tm(){}
//};


//// DERIVED CLASS : Long tc [type 0]
//// type 0
//class Long_tm : public Base_tm{
//private:
//    uint8_t fix_str[TM_LONG_SIZE];
//public:
//    Long_tm(){
//        TM_string = fix_str;
//        // type 0
//        fields = 0;
//    }
//    
//    ~Long_tm(){}
//};
//
//// DERIVED CLASS : Short tc [type 1]
//// type 1
//class Short_tm : public Base_tm{
//private:
//    uint8_t fix_str[TM_SHORT_SIZE];
//public:
//    Short_tm(){
//        TM_string = fix_str;
//        // type 1
//        fields = 0x10;
//    }
//    
//    ~Short_tm(){}
//};