FreeCalypso > hg > fc-magnetite
view src/gpf3/inc/tdc_msg.h @ 179:338bf7edbd47
src/g23m-fad/rlp/rlp_kers.c: workaround for TI's compiler BUG
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 13 Oct 2016 03:14:28 +0000 |
parents | c41a534f33c6 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : | Modul : TDC +----------------------------------------------------------------------------- | Copyright 2002 Texas Instruments Berlin, AG | All rights reserved. | | This file is confidential and a trade secret of Texas | Instruments Berlin, AG | The receipt of or possession of this file does not convey | any rights to reproduce or disclose its contents or to | manufacture, use, or sell anything it may describe, in | whole, or in part, without the specific written consent of | Texas Instruments Berlin, AG. +----------------------------------------------------------------------------- | Purpose : +----------------------------------------------------------------------------- */ #ifdef TDC_H #error "TDC.H already included, TDC.H must come after all primitives and messages" #endif #ifndef TDC_MSG_H #define TDC_MSG_H #if DOT_COMPLETE_DEFINES //---------------------------------------------------------------------------- // macros to repeat stuff that is similar in many interface classes //---------------------------------------------------------------------------- #define M_TDC_INTERFACE_PRIM_ADDITIONAL(SHORT_NAME) #define M_TDC_INTERFACE_PSTRUCT_ADDITIONAL(SHORT_NAME) #define M_TDC_INTERFACE_PUNION_ADDITIONAL(SHORT_NAME) #define M_TDC_INTERFACE_SDU_ADDITIONAL(SHORT_NAME) #define M_TDC_INTERFACE_PENUM_ADDITIONAL(SHORT_NAME) #define M_TDC_INTERFACE_PINT_ADDITIONAL(INT_NAME, SHORT_NAME) //----- #define M_TDC_INTERFACE_MSG_ADDITIONAL(SHORT_NAME) #define M_TDC_INTERFACE_MSTRUCT_ADDITIONAL(SHORT_NAME) #define M_TDC_INTERFACE_MUNION_ADDITIONAL(SHORT_NAME) #define M_TDC_INTERFACE_MENUM_ADDITIONAL(SHORT_NAME) #define M_TDC_INTERFACE_MINT_ADDITIONAL(INT_NAME, SHORT_NAME) //----- #define M_TDC_INTERFACE_INT_ADDITIONAL(SHORT_NAME) #define M_TDC_INTERFACE_XXX_PRIMITIVE_UNION_ADDITIONAL(SAP) #define M_TDC_INTERFACE_XXX_MESSAGE_UNION_ADDITIONAL(MSG) #define M_TDC_CREATE_DEFAULT_PRIMITIVE_INTERFACE_CLASS(SAP) #define M_TDC_INTERFACE_PRIMITIVE_ADDITIONAL() #define M_TDC_INTERFACE_PRIMITIVE_ELEMENT_ADDITIONAL(SAP) #define M_TDC_CREATE_DEFAULT_MESSAGE_INTERFACE_CLASS(MSG) #define M_TDC_INTERFACE_MESSAGE_ADDITIONAL() #define M_TDC_INTERFACE_MESSAGE_ELEMENT_ADDITIONAL(MSG) #else #endif #include "tdc_base.h" #ifndef TDC_DESCRIPTOR #include "message.h" #include "primitive.h" #else #include "message_dsc.h" #include "primitive_dsc.h" #endif struct T_TDC_INTERFACE_U8; //TODO: eliminate need for these types used by M_RR (this is a bug work around) typedef T_TDC_HANDLE_U8 T_TDC_HANDLE_AVG_W; typedef T_TDC_HANDLE_U8 T_TDC_HANDLE_AVG_T; typedef T_TDC_INTERFACE_U8 T_TDC_INTERFACE_AVG_W; typedef T_TDC_INTERFACE_U8 T_TDC_INTERFACE_AVG_T; //TODO: eliminate need for these types used by M_GRR (this is a bug work around) typedef T_TDC_HANDLE_U8 T_TDC_HANDLE_RESEL; typedef T_TDC_INTERFACE_U8 T_TDC_INTERFACE_RESEL; typedef struct T_TDC_HANDLE_TEST_var4 T_TDC_HANDLE_TEST_var4T; typedef struct T_TDC_HANDLE_TEST_enum4 T_TDC_HANDLE_TEST_enum4T; M_TDC_FORWARD_SDU (sdu) struct T_TDC_DESCRIPTOR_sdu; struct T_TDC_HANDLE_sdu; struct T_TDC_INTERFACE_sdu; struct T_sdu; typedef T_TDC_HANDLE_sdu T_TDC_HANDLE_SDU; typedef T_TDC_DESCRIPTOR_sdu T_TDC_DESCRIPTOR_SDU; typedef T_TDC_INTERFACE_sdu T_TDC_INTERFACE_SDU; typedef T_sdu T_TDC_INSTANCE_SDU; ///\todo make some sencible stuff here struct T_TDC_HANDLE_desc_list { int dummy_to_keep_doxygen_happy; }; ///\todo make some sencible stuff here struct T_TDC_HANDLE_desc { int dummy_to_keep_doxygen_happy; }; ///\todo make some sencible stuff here struct T_TDC_INTERFACE_desc_list { int dummy_to_keep_doxygen_happy; }; ///\todo make some sencible stuff here struct T_TDC_INTERFACE_desc { int dummy_to_keep_doxygen_happy; }; #ifdef TDC_DESCRIPTOR /*M_TDC_FORWARD_PSTRUCT(raw) M_TDC_FORWARD_PSTRUCT(aim) M_TDC_FORWARD_PSTRUCT(sdu)*/ struct T_TDC_DESCRIPTOR_aim:T_TDC_DESCRIPTOR_PSTRUCT_BASE { M_TDC_DESCRIPTOR_PSTRUCT_ADDITIONAL (aim) T_TDC_HANDLE_U8 ti; T_TDC_HANDLE_U8 tie; T_TDC_HANDLE_U8 nsd; T_TDC_HANDLE_MESSAGE_UNION entity; }; struct T_TDC_DESCRIPTOR_sdu:T_TDC_DESCRIPTOR_SDU_BASE { M_TDC_DESCRIPTOR_SDU_ADDITIONAL (sdu) T_TDC_HANDLE_raw raw; //manual sdu T_TDC_HANDLE_aim aim; //coded sdu }; #endif #if !defined TDC_DESCRIPTOR || defined TDC_PRECOMPILE struct T_aim:T_TDC_INSTANCE_PSTRUCT_BASE { M_TDC_INSTANCE_PSTRUCT_ADDITIONAL (aim,aim) T_TDC_INTERFACE_aim* operator-> (); }; struct T_TDC_INTERFACE_aim:T_TDC_INTERFACE_PSTRUCT_BASE { M_TDC_INTERFACE_PSTRUCT_ADDITIONAL (aim,aim) T_TDC_INTERFACE_U8 ti; T_TDC_INTERFACE_U8 tie; T_TDC_INTERFACE_U8 nsd; T_TDC_INTERFACE_MESSAGE_UNION entity; #ifdef TDC_TYPE_NAME_COMPLETE struct { char T_aim, ___ti___tie___nsd___entiy; } _type_name (); #endif }; struct T_sdu:T_TDC_INSTANCE_SDU_BASE { M_TDC_INSTANCE_SDU_ADDITIONAL (sdu) T_sdu(const T_MESSAGE_UNION& msg); T_sdu(const T_TDC_INSTANCE_MSG_BASE& msg); T_TDC_INTERFACE_sdu* operator-> (); }; struct T_TDC_INTERFACE_sdu:T_TDC_INTERFACE_SDU_BASE { M_TDC_INTERFACE_PSTRUCT_ADDITIONAL (sdu,sdu) T_TDC_INTERFACE_raw raw; //manual sdu T_TDC_INTERFACE_aim aim; //coded sdu #ifdef TDC_TYPE_NAME_COMPLETE struct { char T_sdu, ___raw___aim; } _type_name (); #endif }; inline T_sdu::T_sdu(const T_MESSAGE_UNION& msg) { construct(); (*this)->aim.entity=msg; } inline T_sdu::T_sdu(const T_TDC_INSTANCE_MSG_BASE& msg) { construct(); (*this)->aim.entity=msg; } #endif //!defined TDC_DESCRIPTOR || defined TDC_PRECOMPILE //============================================================================ template <class T> T_sdu tds_array_to_sdu(const T& U8array) //This function is a temporary solution to help the convertion from TDS U8 arrays to TDC SDU's. { T_sdu sdu; sdu->raw.l_buf = U8array[0] + U8array[1] * 256; sdu->raw.o_buf = U8array[2] + U8array[3] * 256; if (sizeof(U8array)>4) { for (int i = 4; i < sizeof(U8array);i++) { sdu->raw.buf[i-4] = U8array[i]; } } else { sdu->raw.buf = T_ARRAY<U8>(); } return sdu; } //============================================================================ template <class T> T_sdu BIN(const T& U8array) { T_sdu sdu; int i=0,bit=0,l_buf=0; U8 temp=0; while(U8array[i] != '\0') { if(U8array[i] == 0x20) //(0x20 is space) { if(bit != 0) tdc_user_error("BIN(): There is not 8 bits between spaces!"); } else { switch(U8array[i]) { case 0x31: //(0x31 ascii code for 1) temp += 1<<(7-bit); break; case 0x30: //(0x30 ascii code for 0) break; default: tdc_user_error("BIN(): string character neither '0' or '1': %c",U8array[i]); break; } bit ++; if(bit == 8) { sdu->raw.buf[l_buf/8] = temp; temp = 0; bit=0; } l_buf++; } i++; } if(bit != 0) //if the number of bits is not a multiplum of 8 the last few bits will be assigned here { sdu->raw.buf[l_buf/8] = temp; } sdu->raw.l_buf=l_buf; sdu->raw.o_buf=0; return sdu; } template <class T> T_sdu HEX(const T& U8array) { T_sdu sdu; int i = 0, nibble = 0, l_buf = 0; U8 temp = 0; while(U8array[i] != '\0') { if(U8array[i] == 0x20) //(0x20 is space) { if(nibble != 0) tdc_user_error("HEX(): There is not 2 nibbles between spaces!"); } else { if(('0' <= U8array[i]) && (U8array[i] <= '9')) { temp += (U8array[i] - 0x30) << (4*(1-nibble)); } else if(('A' <= U8array[i]) && (U8array[i] <= 'F')) { temp += (U8array[i] - 0x37) << (4*(1-nibble)); } else if(('a' <= U8array[i]) && (U8array[i] <= 'f')) { temp += (U8array[i] - 0x57) << (4*(1-nibble)); } else { tdc_user_error("HEX(): String character not a HEX number: %c",U8array[i]); } nibble ++; if(nibble == 2) { sdu->raw.buf[l_buf/8] = temp; temp = 0; nibble = 0; } l_buf += 4; } i++; } if(nibble != 0) //checks whether the number of nibbles are odd. IF THIS SHOULD BE MADE LEGAL { //remove the '//' in front of the line above and comment out the error function call! tdc_user_error("HEX(): Odd number of nibbles (hex numbers)"); //sdu->raw.buf[l_buf/8]=temp; } sdu->raw.l_buf = l_buf; sdu->raw.o_buf = 0; return sdu; } template <class T> T_sdu CHR(const T& U8array) { T_sdu sdu; int i=0; while(U8array[i] != '\0') { sdu->raw.buf[i]= (U8)U8array[i]; i++; } sdu->raw.l_buf=8*i; sdu->raw.o_buf=0; return sdu; } #endif //TDC_MSG_H