Dummy program to demonstrate problems: working code
Dependencies: SLCD mbed-rtos mbed
Fork of MNG_TC by
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(){} //};