My Project
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
mensaje1.c
Go to the documentation of this file.
1 /*
2  * mensaje1.c
3  *
4  * Created on: 25/05/2012
5  * Author: ccortiz
6  */
7 
8 
9 #include "mensaje1.h"
10 #include "default_ICD.h"
11 
12 #include <stdio.h>
13 #include <stdlib.h>
14 
15 static byte_ptr serialize_Mensaje1(int ICD_Descriptor);
16 static int deserialize_Mensaje1(int ICD_Descriptor, byte_ptr dataBuffer,uint16 bufferSize, boolean decodeMessage);
17 static int get_MsgSize_Mensaje1(int ICD_Descriptor);
18 static int get_Mensaje1_Header_ID(int ICDDescriptor);
19 static int set_Mensaje1_Header_Repetitions_OPT(int ICD_Descriptor, unsigned int value, boolean useDeserializeCopy);
20 static int set_Mensaje1_Header_Repetitions(int ICD_Descriptor, unsigned int value);
21 static int get_Mensaje1_Header_Repetitions(int ICDDescriptor);
22 static int set_Mensaje1_Data_BlockSize_OPT(int ICD_Descriptor, unsigned int itemIndex, unsigned int value, boolean useDeserializeCopy);
23 static int set_Mensaje1_Data_BlockSize(int ICD_Descriptor, unsigned int itemIndex, unsigned int value);
24 static int get_Mensaje1_Data_BlockSize(int ICDDescriptor, unsigned int itemIndex);
25 static int set_Mensaje1_Data_Block(int ICD_Descriptor, unsigned int itemIndex, byte_ptr srcBuffer);
26 static int get_Mensaje1_Data_Block(int ICD_Descriptor, unsigned int itemIndex, byte_ptr destBuffer);
27 
28 
30 
31 void initialize_Mensaje1(int parentDescriptor, c_Mensaje1_Ptr classReference, c_Mensaje1_privates_Ptr privatesReference){
32 
33  int i=0;
34  int j=0;
35 
36  /* Make methods Links. */
37 
38 
39  classReference->get_ID = get_Mensaje1_Header_ID;
40 
43 
46 
47  classReference->set_Block = set_Mensaje1_Data_Block;
48  classReference->get_Block = get_Mensaje1_Data_Block;
49 
50  classReference->serialize = serialize_Mensaje1;
51  classReference->deserialize = deserialize_Mensaje1;
52  classReference->set_Endianness = set_Endianness_Mensaje1;
53  classReference->get_MsgSize = get_MsgSize_Mensaje1;
54 
55  /* Clean attributes. */
56 
57  privatesReference->msgInfo.header.ID = 0;
58  privatesReference->msgInfo.header.repetitions = 0;
59 
60  for (i=0; i<5; i++){
61  privatesReference->msgInfo.data[i].blockSize = 0;
62  for (j=0; j<16; j++){privatesReference->msgInfo.data[i].block[j] = 0;}
63  }
64 
65 
66  /* Make new instance of bitStack class. */
67  privatesReference->bitStackerDescriptor = new_bitStack();
68 
69  if (privatesReference->bitStackerDescriptor == -1){
70  _DBGMSG_("ERROR! CAN'T MAKE A NEW BITSTACK FOR 'Mensaje1'\n");
71  }
72 
73  /* Configure default endianness. */
75 
76  /* And make a first serialization to get the default message size. */
77  serialize_Mensaje1(parentDescriptor);
78 }
79 
80 byte_ptr serialize_Mensaje1(int ICD_Descriptor){
81 
82  int i = 0;
83  int itemRepetitions = 0;
84  int dataBlockSize = 0;
85 
86  int j = 0;
87 
88  int stackerDescriptor = 0;
89  c_Mensaje1_privates_Ptr privates = 0;
90  byte_ptr returnedData = 0;
91 
92  if (ICD_Descriptor<0 || ICD_Descriptor >= _MAX_ICD_INSTANCES_){
93  _DBGMSG_("ERROR!. Invalid descriptor in function 'serialize_Mensaje1'.\n");
94  return 0;
95  }
96 
97  if (ICD_Objs[ICD_Descriptor] == 0){
98  _DBGMSG_("ERROR!. Uninitialized descriptor in function 'serialize_Mensaje1'.\n");
99  return 0;
100  }
101 
102  privates = &(ICD_Objs[ICD_Descriptor]->mensaje1_Privates);
103 
104  stackerDescriptor = privates->bitStackerDescriptor;
105 
106  clearStack(stackerDescriptor);
107 
108  stackData(stackerDescriptor, (unsigned char*)&(privates->msgInfo.header.ID), 16);
109  stackData(stackerDescriptor, (unsigned char*)&(privates->msgInfo.header.repetitions), 16);
110 
111  itemRepetitions = privates->msgInfo.header.repetitions;
112 
113  if (itemRepetitions>5){
114  _DBGMSG_("ERROR!. itemRepetitions > 5. Item 'data' Out of bound in function 'serialize_Mensaje1'!\n");
115  return 0;
116  }
117 
118  for (i=0; i<itemRepetitions; i++){
119  stackData(stackerDescriptor, (unsigned char*)&(privates->msgInfo.data[i].blockSize), 16);
120 
121  dataBlockSize = privates->msgInfo.data[i].blockSize;
122  if (dataBlockSize>16){
123  _DBGMSG_("ERROR!. daBlockSize > 16. Field 'block' Out of bound in function 'serialize_Mensaje1'!\n");
124  return 0;
125  }
126 
127  for(j=0; j<dataBlockSize; j++){ stackData(stackerDescriptor, (unsigned char*)&(privates->msgInfo.data[i].block[j]), 8);}
128  }
129 
130 
131  returnedData = getDataBuffer(stackerDescriptor);
132 
133  /* Update message size. */
134  privates->msgSize = get_MsgSize_Mensaje1( ICD_Descriptor );
135 
136  return returnedData;
137 }
138 
139 int get_MsgSize_Mensaje1(int ICD_Descriptor){
140  int stackerDescriptor = 0;
141  c_Mensaje1_privates_Ptr privates = 0;
142 
143  if (ICD_Descriptor<0 || ICD_Descriptor >= _MAX_ICD_INSTANCES_){
144  _DBGMSG_("ERROR!. Invalid descriptor in function 'get_MsgSize_Mensaje1'.\n");
145  return -1;
146  }
147 
148  if (ICD_Objs[ICD_Descriptor] == 0){
149  _DBGMSG_("ERROR!. uninitialized descriptor in function 'get_MsgSize_Mensaje1'.\n");
150  return -1;
151  }
152 
153  privates = &ICD_Objs[ICD_Descriptor]->mensaje1_Privates;
154  stackerDescriptor = privates->bitStackerDescriptor;
155 
156  return getStackSize(stackerDescriptor);
157 }
158 
159 
160 int deserialize_Mensaje1(int ICD_Descriptor, byte_ptr dataBuffer,uint16 bufferSize, boolean decodeMessage){
161  int i=0;
162  int itemRepetitions=0;
163  int dataBlockSize = 0;
164  int j=0;
165 
166  c_Mensaje1_privates_Ptr privates = 0;
167  int stackerDescriptor = 0;
168 
169  boolean fixedLength = _TRUE_;
170  fixedLength = _FALSE_;
171 
172 
173  if (ICD_Descriptor<0 || ICD_Descriptor >= _MAX_ICD_INSTANCES_){
174  _DBGMSG_("ERROR!. Invalid descriptor in function 'deserialize_Mensaje1'.\n");
175  return _INVALID_DESCRIPTOR_;
176  }
177 
178  if (ICD_Objs[ICD_Descriptor] == 0){
179  _DBGMSG_("ERROR!. Uninitialized descriptor in function 'deserialize_Mensaje1'.\n");
180  return _INVALID_DESCRIPTOR_;
181  }
182 
183  privates = &ICD_Objs[ICD_Descriptor]->mensaje1_Privates;
184  stackerDescriptor = privates->bitStackerDescriptor;
185 
186  /* Check message size. */
187  if (privates->msgSize != bufferSize && fixedLength){
188  _DBGMSG_("Incorrect Msg Size. NOT Mensaje1!\n");
189  return _INCORRECT_MSG_SIZE_;
190  }
191 
192  /* Load the buffer in bitStack. */
193  clearStack(stackerDescriptor);
194 
195  if (setDataBuffer(stackerDescriptor, dataBuffer, bufferSize) < 0){
196  _DBGMSG_("ERROR!. Can't set 'databuffer' because 'bufferSize' > _MAX_DATA_STACK_SIZE_.\n");
197  return _INCORRECT_MSG_SIZE_;
198  }
199 
200  privates->msgCheckInfo.header.ID = unstackData(stackerDescriptor, 16);
201  if (privates->msgCheckInfo.header.ID != 0){
202  _DBGMSG_("Constant field 'header.ID' out of range in deserialize_Mensaje1()!\n");
204  }
205 
206  privates->msgCheckInfo.header.repetitions = unstackData(stackerDescriptor, 16);
208  _DBGMSG_("Field 'repetitions' out of range in deserialize_Mensaje1()!\n");
209  return _FIELDS_OUT_OF_RANGE_;
210  }
211 
212 
213  itemRepetitions = privates->msgInfo.header.repetitions;
214 
215  if (itemRepetitions>5){
216  _DBGMSG_("ERROR!. itemRepetitions > 5. Item 'data' Out of bound in function 'deserialize_Mensaje1'!\n");
217  return _ITEM_OUT_OF_RANGE_;
218  }
219  for (i=0; i<itemRepetitions; i++){
220  privates->msgCheckInfo.data[i].blockSize = unstackData(stackerDescriptor, 16);
221  if (set_Mensaje1_Data_BlockSize_OPT(ICD_Descriptor, i, privates->msgCheckInfo.data[i].blockSize, _TRUE_) == setterError){
222  _DBGMSG_("Field 'blockSize' out of range in deserialize_Mensaje1()!\n");
223  return _FIELDS_OUT_OF_RANGE_;
224  }
225 
226  dataBlockSize = privates->msgInfo.data[i].blockSize;
227  if (dataBlockSize>16){
228  _DBGMSG_("ERROR!. daBlockSize > 16. Field 'block' Out of bound in function 'deserialize_Mensaje1'!\n");
229  return _FIELDS_OUT_OF_RANGE_;
230  }
231 
232  for (j=0; j<dataBlockSize; j++){ privates->msgCheckInfo.data[i].block[j] = unstackData(stackerDescriptor, 8); }
233 
234  }
235 
236 
237  _DBGMSG_("--- Mensaje1 FOUND! ---\n");
238  if (decodeMessage){
239  memcpy((char*)&privates->msgInfo, (char*)&privates->msgCheckInfo, sizeof(struct c_Mensaje1_data));
240 /*
241 
242  printf("\nID: %X", privates->msgInfo.header.ID);
243 
244  printf("\nrepetitions: %X", privates->msgInfo.header.repetitions);
245 
246  itemRepetitions = privates->msgInfo.header.repetitions;
247 
248  if (itemRepetitions>5){
249  _DBGMSG_("ERROR!. itemRepetitions > 5. Item 'data' Out of bound!\n");
250  return 0;
251  }
252 
253  for (i=0; i<itemRepetitions; i++){
254 
255  printf("\nblockSize[%d]: %X", i, privates->msgInfo.data[i].blockSize);
256 
257  dataBlockSize = privates->msgInfo.data[i].blockSize;
258  if (dataBlockSize>16){
259  _DBGMSG_("ERROR!. daBlockSize > 16. Field 'block' Out of bound in function 'serialize_Mensaje1'!\n");
260  return 0;
261  }
262 
263  printf("\nblock[%d]: ",i);
264  for (j=0; j<dataBlockSize; j++){ printf("%.2X ", (uint32) (privates->msgInfo.data[i].block[j]) ); }
265  }
266 */
267  }
268 
269  return _DESERIALIZE_OK_;
270 
271 }
272 
273 void set_Endianness_Mensaje1(int ICD_Descriptor, enum endianness endianType){
274  c_Mensaje1_privates_Ptr privates= 0;
275  int stackerDescriptor;
276 
277  if (ICD_Descriptor<0 || ICD_Descriptor >= _MAX_ICD_INSTANCES_){
278  _DBGMSG_("ERROR!. Invalid descriptor in function 'set_Endianness_Mensaje1'.\n");
279  return;
280  }
281 
282  if (ICD_Objs[ICD_Descriptor] == 0){
283  _DBGMSG_("ERROR!. Uninitialized descriptor in function 'set_Endianness_Mensaje1'.\n");
284  return;
285  }
286 
287 /*
288  printf("\nConfigurando Endianness para Mensaje1, descriptor %d: ", ICD_Descriptor);
289  fflush(stdout);
290 */
291 
292  privates = &ICD_Objs[ICD_Descriptor]->mensaje1_Privates;
293  stackerDescriptor = privates->bitStackerDescriptor;
294 
295  setOutputEndianness(stackerDescriptor, endianType);
296  clearStack(stackerDescriptor);
297 }
298 
299 /* --- GETTERS & SETTERS --- */
300 int get_Mensaje1_Header_ID(int ICD_Descriptor){
301 
302  c_Mensaje1_privates_Ptr privates= 0;
303  privates = &ICD_Objs[ICD_Descriptor]->mensaje1_Privates;
304 
305  if (ICD_Descriptor<0 || ICD_Descriptor >= _MAX_ICD_INSTANCES_){
306  _DBGMSG_("ERROR!. Invalid descriptor in function 'get_Mensaje1_Header_ID'.\n");
307  return -1;
308  }
309 
310  if (ICD_Objs[ICD_Descriptor] == 0){
311  _DBGMSG_("ERROR!. Uninitialized descriptor in function 'get_Mensaje1_Header_ID'.\n");
312  return -1;
313  }
314 
315 
316  return privates->msgInfo.header.ID;
317 }
318 
319 int set_Mensaje1_Header_Repetitions_OPT(int ICD_Descriptor, unsigned int value, boolean useDeserializeCopy){
320  c_Mensaje1_privates_Ptr privates= 0;
321  privates = &ICD_Objs[ICD_Descriptor]->mensaje1_Privates;
322 
323  /*printf("Set_Mensaje1-Campo1. ICD_Descriptor=%d, value=%d, useDeserializeCopy=%d\n", ICD_Descriptor, value, useDeserializeCopy);*/
324 
325  if (ICD_Descriptor<0 || ICD_Descriptor >= _MAX_ICD_INSTANCES_){
326  _DBGMSG_("ERROR!. Invalid descriptor in function 'set_Mensaje1_Header_Repetitions_OPT'.\n");
327  return setterError;
328  }
329 
330  if (ICD_Objs[ICD_Descriptor] == 0){
331  _DBGMSG_("ERROR!. Uninitialized descriptor in function 'set_Mensaje1_Header_Repetitions_OPT'.\n");
332  return setterError;
333  }
334 
335 
336  if (value>=0 && value<=5){
337  if (!useDeserializeCopy){
338  privates->msgInfo.header.repetitions = value;
339  }
340  else{
341  privates->msgCheckInfo.header.repetitions = value;
342  }
343  return setterOK;
344  }
345  else{
346  return setterError;
347  }
348 }
349 
350 int set_Mensaje1_Header_Repetitions(int ICD_Descriptor, unsigned int value){
351  int returnState = 0;
352  returnState = set_Mensaje1_Header_Repetitions_OPT(ICD_Descriptor, value, _FALSE_);
353  if (returnState==setterError){
354  _DBGMSG_("ERROR! Can't assign value in function 'set_Mensaje1_Header_Repetitions'.\n");
355  }
356 
357  return returnState;
358 }
359 
360 int get_Mensaje1_Header_Repetitions(int ICD_Descriptor){
361 
362  c_Mensaje1_privates_Ptr privates= 0;
363  privates = &ICD_Objs[ICD_Descriptor]->mensaje1_Privates;
364 
365  if (ICD_Descriptor<0 || ICD_Descriptor >= _MAX_ICD_INSTANCES_){
366  _DBGMSG_("ERROR!. Invalid descriptor in function 'get_Mensaje1_Header_Repetitions'.\n");
367  return -1;
368  }
369 
370  if (ICD_Objs[ICD_Descriptor] == 0){
371  _DBGMSG_("ERROR!. Uninitialized descriptor in function 'get_Mensaje1_Header_Repetitions'.\n");
372  return -1;
373  }
374 
375 
376  return privates->msgInfo.header.repetitions;
377 }
378 
379 int set_Mensaje1_Data_BlockSize_OPT(int ICD_Descriptor, unsigned int itemIndex, unsigned int value, boolean useDeserializeCopy){
380  c_Mensaje1_privates_Ptr privates= 0;
381  privates = &ICD_Objs[ICD_Descriptor]->mensaje1_Privates;
382 
383  /*printf("Set_Mensaje1-Campo1. ICD_Descriptor=%d, value=%d, useDeserializeCopy=%d\n", ICD_Descriptor, value, useDeserializeCopy);*/
384 
385  if (ICD_Descriptor<0 || ICD_Descriptor >= _MAX_ICD_INSTANCES_){
386  _DBGMSG_("ERROR!. Invalid descriptor in function 'set_Mensaje1_Data_BlockSize_OPT'.\n");
387  return setterError;
388  }
389 
390  if (ICD_Objs[ICD_Descriptor] == 0){
391  _DBGMSG_("ERROR!. Uninitialized descriptor in function 'set_Mensaje1_Data_BlockSize_OPT'.\n");
392  return setterError;
393  }
394 
395  if (itemIndex>4){
396  _DBGMSG_("ERROR! itemIndex out of range.");
397  return setterError;
398  }
399 
400  if (value>=0 && value<=65535){
401  if (!useDeserializeCopy){
402  privates->msgInfo.data[itemIndex].blockSize = value;
403  }
404  else{
405  privates->msgCheckInfo.data[itemIndex].blockSize = value;
406  }
407  return setterOK;
408  }
409  else{
410  return setterError;
411  }
412 }
413 
414 int set_Mensaje1_Data_BlockSize(int ICD_Descriptor, unsigned int itemIndex, unsigned int value){
415  int returnState = 0;
416  returnState = set_Mensaje1_Data_BlockSize_OPT(ICD_Descriptor, itemIndex, value, _FALSE_);
417  if (returnState==setterError){
418  _DBGMSG_("ERROR! Can't assign value in function 'set_Mensaje1_Data_BlockSize'.\n");
419  }
420 
421  return returnState;
422 }
423 
424 int get_Mensaje1_Data_BlockSize(int ICD_Descriptor, unsigned int itemIndex){
425 
426  c_Mensaje1_privates_Ptr privates= 0;
427  privates = &ICD_Objs[ICD_Descriptor]->mensaje1_Privates;
428 
429  if (ICD_Descriptor<0 || ICD_Descriptor >= _MAX_ICD_INSTANCES_){
430  _DBGMSG_("ERROR!. Invalid descriptor in function 'get_Mensaje1_Data_BlockSize'.\n");
431  return -1;
432  }
433 
434  if (ICD_Objs[ICD_Descriptor] == 0){
435  _DBGMSG_("ERROR!. Uninitialized descriptor in function 'get_Mensaje1_Data_BlockSize'.\n");
436  return -1;
437  }
438 
439  if (itemIndex > 4){
440  _DBGMSG_("ERROR! ItemIndex out of range in function 'get_Mensaje1_Data_BlockSize'.\n");
441  return -1;
442  }
443 
444  return privates->msgInfo.data[itemIndex].blockSize;
445 }
446 
447 
448 int set_Mensaje1_Data_Block(int ICD_Descriptor, unsigned int itemIndex, byte_ptr srcBuffer){
449  int dataBlockSize = 0;
450  c_Mensaje1_privates_Ptr privates= 0;
451 
452  if (ICD_Descriptor<0 || ICD_Descriptor >= _MAX_ICD_INSTANCES_){
453  _DBGMSG_("ERROR!. Invalid descriptor in function 'set_Mensaje1_Data_Block'.\n");
454  return -1;
455  }
456 
457  if (ICD_Objs[ICD_Descriptor] == 0){
458  _DBGMSG_("ERROR!. Uninitialized descriptor in function 'set_Mensaje1_Data_Block'.\n");
459  return -1;
460  }
461 
462  if (itemIndex>4){
463  _DBGMSG_("ERROR! itemIndex out of range in function 'set_Mensaje1_Data_Block'.");
464  return -1;
465  }
466 
467  privates = &ICD_Objs[ICD_Descriptor]->mensaje1_Privates;
468 
469  dataBlockSize = privates->msgInfo.data[itemIndex].blockSize;
470  if (dataBlockSize>16){
471  _DBGMSG_("ERROR!. daBlockSize > 16. Field 'block' Out of bound in function 'set_Mensaje1_Data_Block'!\n");
472  return 0;
473  }
474 
475  memcpy(privates->msgInfo.data[itemIndex].block, srcBuffer, dataBlockSize);
476  return 16;
477 }
478 
479 int get_Mensaje1_Data_Block(int ICD_Descriptor, unsigned int itemIndex, byte_ptr destBuffer){
480  int dataBlockSize = 0;
481  c_Mensaje1_privates_Ptr privates= 0;
482 
483  if (ICD_Descriptor<0 || ICD_Descriptor >= _MAX_ICD_INSTANCES_){
484  _DBGMSG_("ERROR!. Invalid descriptor in function 'get_Mensaje1_Data_Block'.\n");
485  return -1;
486  }
487 
488  if (ICD_Objs[ICD_Descriptor] == 0){
489  _DBGMSG_("ERROR!. Uninitialized descriptor in function 'get_Mensaje1_Data_Block'.\n");
490  return -1;
491  }
492 
493  if (itemIndex>4){
494  _DBGMSG_("ERROR! itemIndex out of range in function 'get_Mensaje1_Data_Block'.");
495  return -1;
496  }
497 
498  privates = &ICD_Objs[ICD_Descriptor]->mensaje1_Privates;
499 
500  dataBlockSize = privates->msgInfo.data[itemIndex].blockSize;
501 
502  if (dataBlockSize>16){
503  _DBGMSG_("ERROR!. daBlockSize > 16. Field 'block' Out of bound in function 'get_Mensaje1_Data_Block'!\n");
504  return 0;
505  }
506 
507  memcpy(destBuffer, privates->msgInfo.data[itemIndex].block, dataBlockSize);
508  return 16;
509 }
510 
511