diff src/gpf/inc/tdc_msg.h @ 0:4e78acac3d88

src/{condat,cs,gpf,nucleus}: import from Selenite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:23:26 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/gpf/inc/tdc_msg.h	Fri Oct 16 06:23:26 2020 +0000
@@ -0,0 +1,357 @@
+/* 
++----------------------------------------------------------------------------- 
+|  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