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 - 2008 FRESCOR consortium partners:
26 * Universidad de Cantabria, SPAIN
27 * University of York, UK
28 * Scuola Superiore Sant'Anna, ITALY
29 * Kaiserslautern University, GERMANY
30 * Univ. Politécnica 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 for a link to partners' websites
40 * 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
45 * This file is part of FRESCAN
47 * FRESCAN is free software; you can redistribute it and/or modify
48 * it under the terms of the GNU General Public License as published by
49 * the Free Software Foundation; either version 2, or (at your option)
52 * FRESCAN is distributed in the hope that it will be useful, but
53 * WITHOUT ANY WARRANTY; without even the implied warranty of
54 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
55 * General Public License for more details.
57 * You should have received a copy of the GNU General Public License
58 * distributed with FRESCAN; see file COPYING. If not, write to the
59 * Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
62 * As a special exception, including FRESCAN header files in a file,
63 * instantiating FRESCAN generics or templates, or linking other files
64 * with FRESCAN objects to produce an executable application, does not
65 * by itself cause the resulting executable application to be covered
66 * by the GNU General Public License. This exception does not
67 * however invalidate any other reasons why the executable file might be
68 * covered by the GNU Public License.
69 * -----------------------------------------------------------------------
73 #include "frescan_id.h"
76 uint32_t bit_offset; // offset of the field in the CAN id
77 uint32_t bit_mask; // the number of bits of the field in a mask
80 static frescan_field_t the_fields[] = {
81 {.bit_offset = 21, .bit_mask = 0xFF},
82 {.bit_offset = 17, .bit_mask = 0x0F},
83 {.bit_offset = 13, .bit_mask = 0x0F},
84 {.bit_offset = 9, .bit_mask = 0x0F},
85 {.bit_offset = 1, .bit_mask = 0xFF},
86 {.bit_offset = 0, .bit_mask = 0x01},
89 void frescan_id_set_field(uint32_t *id, uint32_t field, uint32_t value)
91 frescan_field_t *f = &the_fields[field];
93 *id = *id & ~(f->bit_mask << f->bit_offset);
94 *id = *id | ((value & f->bit_mask) << f->bit_offset);
97 uint32_t frescan_id_get_field(uint32_t id, uint32_t field)
99 frescan_field_t *f = &the_fields[field];
100 return ((id >> f->bit_offset) & f->bit_mask);