4 * @brief functions to manage the fields of the FRESCAN Identifier
15 * This file contains the functions needed to manage the fields of a
16 * FRESCAN identifier. That is, how the 29 CAN ID bits of each frame are
17 * allocated in the FRESCAN protocol. If this configuration was to
18 * be changed (for example, the bits per field or the position of the
19 * fields inside the ID), then only these functions need to be modified
23 //----------------------------------------------------------------------
24 // Copyright (C) 2006 - 2009 by the FRESCOR consortium:
26 // Universidad de Cantabria, SPAIN
27 // University of York, UK
28 // Scuola Superiore Sant'Anna, ITALY
29 // Kaiserslautern University, GERMANY
30 // Univ. Politecnica Valencia, SPAIN
31 // Czech Technical University in Prague, CZECH REPUBLIC
33 // Thales Communication S.A. FRANCE
34 // Visual Tools S.A. SPAIN
35 // Rapita Systems Ltd UK
38 // See http://www.frescor.org
40 // The FRESCOR project (FP6/2005/IST/5-034026) is funded
41 // in part by the European Union Sixth Framework Programme
42 // The European Union is not liable of any use that may be
46 // based on previous work (FSF) done in the FIRST project
48 // Copyright (C) 2005 Mälardalen University, SWEDEN
49 // Scuola Superiore S.Anna, ITALY
50 // Universidad de Cantabria, SPAIN
51 // University of York, UK
53 // This file is part of FNA (Frescor Network Adaptation)
55 // FNA is free software; you can redistribute it and/or modify it
56 // under terms of the GNU General Public License as published by the
57 // Free Software Foundation; either version 2, or (at your option) any
58 // later version. FNA is distributed in the hope that it will be
59 // useful, but WITHOUT ANY WARRANTY; without even the implied warranty
60 // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
61 // General Public License for more details. You should have received a
62 // copy of the GNU General Public License along with FNA; see file
63 // COPYING. If not, write to the Free Software Foundation, 675 Mass Ave,
64 // Cambridge, MA 02139, USA.
66 // As a special exception, including FNA header files in a file,
67 // instantiating FNA generics or templates, or linking other files
68 // with FNA objects to produce an executable application, does not
69 // by itself cause the resulting executable application to be covered
70 // by the GNU General Public License. This exception does not
71 // however invalidate any other reasons why the executable file might be
72 // covered by the GNU Public License.
73 // -----------------------------------------------------------------------
77 #include "frescan_id.h"
80 uint32_t bit_offset; // offset of the field in the CAN id
81 uint32_t bit_mask; // the number of bits of the field in a mask
84 static frescan_field_t the_fields[] = {
85 {.bit_offset = 21, .bit_mask = 0xFF},
86 {.bit_offset = 17, .bit_mask = 0x0F},
87 {.bit_offset = 13, .bit_mask = 0x0F},
88 {.bit_offset = 9, .bit_mask = 0x0F},
89 {.bit_offset = 1, .bit_mask = 0xFF},
90 {.bit_offset = 0, .bit_mask = 0x01},
93 void frescan_id_set_field(uint32_t *id, uint32_t field, uint32_t value)
95 frescan_field_t *f = &the_fields[field];
97 *id = *id & ~(f->bit_mask << f->bit_offset);
98 *id = *id | ((value & f->bit_mask) << f->bit_offset);
101 uint32_t frescan_id_get_field(uint32_t id, uint32_t field)
103 frescan_field_t *f = &the_fields[field];
104 return ((id >> f->bit_offset) & f->bit_mask);