My Project
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
default_ICD.c
Go to the documentation of this file.
1 /*
2  * ICD.c
3  *
4  * Created on: 25/05/2012
5  * Author: ccortiz
6  */
7 
8 #include "default_ICD.h"
9 
10 #if _ALLOW_MALLOC_ == 0
11 /* Reserve maximum amount of memory allowed for ICDs. */
12 struct c_DEFAULT_ICD_Privates ICD_Instances[_MAX_ICD_INSTANCES_];
13 #else
14 #include <stdlib.h>
15 #endif
16 
17 static int searchMsg(int ICD_Descriptor, byte_ptr buffer, unsigned int length);
18 static void setICDEndianness(int ICD_Descriptor, enum endianness endianType);
19 
21 unsigned int nObjs=0;
22 
23 int new_Default_ICD(void){
24 
25  static boolean firstInstance = _FALSE_;
27 
28  if (firstInstance==_FALSE_){
29  uint16 i=0;
30  firstInstance = _TRUE_;
31 
32  for (i=0; i<_MAX_ICD_INSTANCES_; i++){
33  ICD_Objs[i] = 0;
34  }
35  }
36 
37 
38  if (nObjs>_MAX_ICD_INSTANCES_ -1){
39  /* No more instances allowed. */
40  return -1;
41  }
42 
43 
44 
45 #if _ALLOW_MALLOC_==0
46  newObj =&ICD_Instances[nObjs];
47 #else
48  newObj = (c_DEFAULT_ICD_Privates_Ptr)malloc(sizeof(struct c_DEFAULT_ICD_Privates));
49 #endif
50 
51  if (newObj==0){
52  return -1;
53  }
54  else{
55  /* Registrar en el array de objetos. */
56  ICD_Objs[nObjs] = newObj;
57 
58  /* Initializers. */
62 
65  }
66 
67  nObjs++;
68 
69  return nObjs-1;
70 }
71 
72 void setICDEndianness(int ICD_Descriptor, enum endianness endianType){
73 
74  Default_ICD.mensaje1.set_Endianness(ICD_Descriptor, endianType);
75  Default_ICD.mensaje2.set_Endianness(ICD_Descriptor, endianType);
76  Default_ICD.mensaje3.set_Endianness(ICD_Descriptor, endianType);
77 
78 }
79 
80 int searchMsg(int ICD_Descriptor, byte_ptr buffer, unsigned int length){
81  if (Default_ICD.mensaje1.deserialize(ICD_Descriptor, buffer, length, _FALSE_)==_DESERIALIZE_OK_){ return _MENSAJE1_; }
82  if (Default_ICD.mensaje2.deserialize(ICD_Descriptor, buffer, length, _FALSE_)==_DESERIALIZE_OK_){ return _MENSAJE2_; }
83  if (Default_ICD.mensaje3.deserialize(ICD_Descriptor, buffer, length, _FALSE_)==_DESERIALIZE_OK_){ return _MENSAJE3_; }
84  return -1;
85 }
86