Move src dir to nested main dir in preparation for sister test dir and cross compiled...
[freeems-vanilla.git] / src / main / inc / generalTypes.h
blobdc69b35647ef1e72e8097c68355977329023d05c
1 /* FreeEMS - the open source engine management system
3 * Copyright 2008-2011 Fred Cooke
5 * This file is part of the FreeEMS project.
7 * FreeEMS software is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
12 * FreeEMS software is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with any FreeEMS software. If not, see http://www.gnu.org/licenses/
20 * We ask that if you make any changes to this file you email them upstream to
21 * us at admin(at)diyefi(dot)org or, even better, fork the code on github.com!
23 * Thank you for choosing FreeEMS to run your engine!
27 /** @file
29 * @ingroup allHeaders
30 * @ingroup globalHeaders
31 * @ingroup dataStructures
33 * @brief General struct typedefs
35 * This file contains all of the general purpose and smaller struct typedefs.
39 /* Header file multiple inclusion protection courtesy eclipse Header Template */
40 /* and http://gcc.gnu.org/onlinedocs/gcc-3.1.1/cpp/ C pre processor manual */
41 #ifndef FILE_GENERAL_TYPES_H_SEEN
42 #define FILE_GENERAL_TYPES_H_SEEN
45 /* block_ prefixed defines have Masks for the flag field in the blockDetails struct. */
47 /** Memory block has parent */
48 #define block_has_parent BIT0_16
49 #define block_is_in_ram BIT1_16
50 #define block_is_in_flash BIT2_16
51 #define block_is_indexable BIT3_16
52 #define block_is_read_only BIT4_16
53 #define block_gets_verified BIT5_16
54 #define block_for_backup_restore BIT6_16
55 #define block_spare_flag_7 BIT7_16
56 #define block_spare_flag_8 BIT8_16
57 #define block_spare_flag_9 BIT9_16
58 #define block_spare_flag_10 BIT10_16
59 #define block_spare_flag_11 BIT11_16
60 #define block_is_2dus_table BIT12_16
61 #define block_is_main_table BIT13_16
62 #define block_is_lookup_data BIT14_16
63 #define block_is_configuration BIT15_16
65 /** Addressable memory block description.
67 * This structure holds all details required to manipulate a particular block.
69 * It is used for passing around the details of a memory block to allow serial
70 * operations on RAM and flash data structures in a safe and protected way.
72 * block_ prefixed defines are masks for the flag field in the this struct.
74 typedef struct {
75 unsigned short flags; ///< Property flags, see flag masks above
76 unsigned short parent; ///< Location ID of parent block if sub block
77 unsigned char RAMPage; ///< RAM page number
78 unsigned char FlashPage; ///< Flash page number
79 void* RAMAddress; ///< RAM address
80 void* FlashAddress; ///< Flash address
81 unsigned short size; ///< Memory block size
82 } blockDetails;
85 #else
86 /* let us know if we are being untidy with headers */
87 #warning "Header file GENERAL_TYPES_H seen before, sort it out!"
88 /* end of the wrapper ifdef from the very top */
89 #endif