simple FS  v0.1.0
file_format.h
Go to the documentation of this file.
1 
20 #ifndef INC_FILE_FORMAT_H_
21 #define INC_FILE_FORMAT_H_
22 
23 #include "memory_driver.h"
24 
25 #ifndef FS_SIZE_VARIANT
26  #error MEMORY VARIANT NOT DEFINED!
27 #endif
28 
29 #if FS_SIZE_VARIANT == FS_VARIANT_U
30  #define MAXIMUM_FS_FILES 1
31  #define MAXIMUM_FS_SENSORS_PER_FILE 4
32 #elif FS_SIZE_VARIANT == FS_VARIANT_X
33  #define MAXIMUM_FS_FILES 2
34  #define MAXIMUM_FS_SENSORS_PER_FILE 8
35 #elif FS_SIZE_VARIANT == FS_VARIANT_S
36  #define MAXIMUM_FS_FILES 8
37  #define MAXIMUM_FS_SENSORS_PER_FILE 16
38 #elif FS_SIZE_VARIANT == FS_VARIANT_L
39 
40  #define MAXIMUM_FS_FILES 22
41 
42  #define MAXIMUM_FS_SENSORS_PER_FILE 42
43 #endif
44 
46 #define FILENAME_LENGTH 16
47 
48 
50 #define FILE_META_SENSOR_LENGTH 12
51 
52 #define FILE_HEADER_RECORD_LENGTH 32
53 
54 #define FILE_HEADER_ADDRESS FILE_HEADER_RECORD_LENGTH
55 
56 #define FILE_HEADER_SIZE (MAXIMUM_FS_FILES * FILE_HEADER_RECORD_LENGTH)
57 
58 
60 #define FILE_META_RECORD_LENGTH (FILE_META_SENSOR_LENGTH * MAXIMUM_FS_SENSORS_PER_FILE)
61 
62 #define FILE_META_SIZE (MAXIMUM_FS_FILES * FILE_META_RECORD_LENGTH)
63 
64 #define FILE_META_ADDRESS (FILE_HEADER_ADDRESS + FILE_HEADER_SIZE)
65 
66 #define FILE_DATA_ADDRESS (FILE_HEADER_ADDRESS + FILE_HEADER_SIZE + MAXIMUM_FS_FILES*FILE_META_RECORD_LENGTH)
67 
68 
70 #define MAX_SENORS_PER_FLASH_PAGE (MEMORY_PAGE_SIZE / FILE_META_SENSOR_LENGTH)
71 
73 #define DUMMY_VALUE 0xFF
74 
76 #define NUM_DRIVERS 14
77 
83 typedef enum sensor_type {
112 } SensorType_t;
113 
118 typedef enum value_format {
119  FORMAT_META_LENGTH_1B = 0x1,
120  FORMAT_META_LENGTH_2B = 0x2,
121  FORMAT_META_LENGTH_3B = 0x3,
122  FORMAT_META_LENGTH_4B = 0x4,
123  FORMAT_META_LENGTH_5B = 0x5,
124  FORMAT_META_LENGTH_6B = 0x6,
125  FORMAT_META_LENGTH_7B = 0x7,
126  FORMAT_META_LENGTH_8B = 0x8,
127  FORMAT_META_LENGTH_9B = 0x9,
128  FORMAT_META_LENGTH_10B = 0xA,
129  FORMAT_META_LENGTH_11B = 0xB,
130  FORMAT_META_LENGTH_12B = 0xC,
131  FORMAT_META_LENGTH_13B = 0xD,
132  FORMAT_META_LENGTH_14B = 0xE,
133  FORMAT_META_LENGTH_15B = 0xF,
134  FORMAT_META_LENGTH_16B = 0x10,
135  FORMAT_META_LENGTH_24B = 0x11,
136  FORMAT_META_LENGTH_32B = 0x12,
137  FORMAT_META_LENGTH_40B = 0x13,
138  FORMAT_META_LENGTH_48B = 0x14,
139  FORMAT_META_LENGTH_56B = 0x15,
140  FORMAT_META_LENGTH_64B = 0x16,
141  FORMAT_META_LENGTH_72B = 0x17,
142  FORMAT_META_LENGTH_80B = 0x18,
143  FORMAT_META_LENGTH_88B = 0x19,
144  FORMAT_META_LENGTH_96B = 0x1A,
145  FORMAT_META_LENGTH_104B = 0x1B,
146  FORMAT_META_LENGTH_112B = 0x1C,
147  FORMAT_META_LENGTH_120B = 0x1D,
148  FORMAT_META_LENGTH_128B = 0x1E,
149 
150  FORMAT_META_NONE = 0xFF,
152 
153 #define FORMAT_META_MASK_FMT 0xE0
154 #define FORMAT_META_MASK_LENGTH 0x1F
155 
158 typedef enum meta_fmt {
162  FORMAT_META_FMT_UINT = (0x01) << 5,
164  FORMAT_META_FMT_Q = (0x02) << 5,
169  FORMAT_META_FMT_SPECIAL_FUTURE2 = (0x05) << 5,
170  FORMAT_META_FMT_SPECIAL_FUTURE3 = (0x06) << 5,
171  FORMAT_META_FMT_SPECIAL_FUTURE4 = (0x07) << 5,
173 
174 
175 #define Q_FORMAT_NONE 0xFF
176 
180 typedef struct{
181  uint8_t m, n;
182 } RecordTypeQ_t;
183 
211 typedef struct {
212 
213  ValueFormatMetaFmt_t meta_format; // FMT
214  ValueFormatMetaLength_t meta_length; // LEN
220 
222 
228 typedef struct {
230  uint8_t sensor_id[8];
236 
237 
242 typedef struct { //1B
244  uint8_t ID;
247  uint32_t meta_address; //4B
250  uint32_t data_address; //4B
253  uint8_t name[FILENAME_LENGTH]; //FILENAME_LENGTH B = 16 B
256  uint8_t num_parts; // 1B
258  RecordDescriptor_t format[MAXIMUM_FS_SENSORS_PER_FILE]; // 4B
260  uint16_t record_length; // 2B
265  uint16_t recordAddressMap[MAXIMUM_FS_SENSORS_PER_FILE];
267 
271 typedef struct {
275  uint8_t num_files;
276 } SimpleFS_t;
277 
279 typedef struct {
280  uint8_t version;
281  uint8_t manufacturer;
282  uint8_t memory_type;
283  uint8_t memory_capacity;
284  uint8_t memory_id[8];
285 } FS_Header_t;
286 
287 
288 
289 #endif /* INC_FILE_FORMAT_H_ */
290 
ValueFormatMetaFmt_t
enum meta_fmt ValueFormatMetaFmt_t
Enumeration of supported data formats.
FileDescriptor_t
Describe base structure for 1 file.
Definition: file_format.h:242
SENSOR_TYPE_PRESSURE
@ SENSOR_TYPE_PRESSURE
Atmosferic pressure, stored as Q format.
Definition: file_format.h:99
FileDescriptor_t::ID
uint8_t ID
Identifier of file.
Definition: file_format.h:244
SENSOR_TYPE_GYR
@ SENSOR_TYPE_GYR
Values from gyroscope
Definition: file_format.h:111
RecordTypeQ_t
Definition of Q format number parameters: m,n.
Definition: file_format.h:180
value_format
value_format
Definition data value lengths.
Definition: file_format.h:118
SimpleFS_t::file
FileDescriptor_t file
Detailed information about open file: FileDescriptor_t.
Definition: file_format.h:273
memory_driver.h
interface definition for specific types of memories.
SENSOR_TYPE_INTEGER
@ SENSOR_TYPE_INTEGER
Primitive data type: integer.
Definition: file_format.h:87
FORMAT_META_FMT_INT
@ FORMAT_META_FMT_INT
Format as signed integer.
Definition: file_format.h:160
RecordDescriptor_t
Describes internal structure of file.
Definition: file_format.h:228
FileDescriptor_t::meta_address
uint32_t meta_address
Address of meta-information for file.
Definition: file_format.h:247
FORMAT_META_FMT_SPECIAL_BCD
@ FORMAT_META_FMT_SPECIAL_BCD
Format as BCD value.
Definition: file_format.h:168
FORMAT_META_FMT_UINT
@ FORMAT_META_FMT_UINT
Format as unsigned integer.
Definition: file_format.h:162
SENSOR_TYPE_TEMPERATURE
@ SENSOR_TYPE_TEMPERATURE
Temperature value from DS18B20 sensors.
Definition: file_format.h:95
FILENAME_LENGTH
#define FILENAME_LENGTH
Length of file name.
Definition: file_format.h:46
RecordTypeValue_t::Q
RecordTypeQ_t Q
Specifies value of Q(m,n) parameters format of value.
Definition: file_format.h:219
meta_fmt
meta_fmt
Enumeration of supported data formats.
Definition: file_format.h:158
SENSOR_TYPE_ACC
@ SENSOR_TYPE_ACC
Acceleration from accelerometer.
Definition: file_format.h:109
SimpleFS_t::num_files
uint8_t num_files
Number existing files in sFS.
Definition: file_format.h:275
SENSOR_TYPE_HUMIDITY
@ SENSOR_TYPE_HUMIDITY
Humidity, stored as Q format.
Definition: file_format.h:97
FileDescriptor_t::record_length
uint16_t record_length
Length of one record in file in bytes.
Definition: file_format.h:260
SENSOR_TYPE_TIME
@ SENSOR_TYPE_TIME
Date/Time.
Definition: file_format.h:93
sensor_type
sensor_type
Definition of base types os supported sensors.
Definition: file_format.h:83
FileDescriptor_t::data_address
uint32_t data_address
Address of begin of data file.
Definition: file_format.h:250
SENSOR_TYPE_LIGHT_UV
@ SENSOR_TYPE_LIGHT_UV
Ultraviolet light.
Definition: file_format.h:105
SimpleFS_t
Base structure for sFS.
Definition: file_format.h:271
RecordDescriptor_t::sensor_type
SensorType_t sensor_type
Type of stored value.
Definition: file_format.h:232
SENSOR_TYPE_NONE
@ SENSOR_TYPE_NONE
Empty value.
Definition: file_format.h:85
FORMAT_META_FMT_Q
@ FORMAT_META_FMT_Q
Format float number with fixed decimal point.
Definition: file_format.h:164
ValueFormatMetaLength_t
enum value_format ValueFormatMetaLength_t
Definition data value lengths.
SENSOR_TYPE_FLOAT
@ SENSOR_TYPE_FLOAT
Primitive data type: float in fixed point notation.
Definition: file_format.h:91
RecordTypeValue_t
Base structure for description of sored value.
Definition: file_format.h:211
SENSOR_TYPE_LIGHT_VISIBLE
@ SENSOR_TYPE_LIGHT_VISIBLE
Visible light, stored as Q format.
Definition: file_format.h:101
SensorType_t
enum sensor_type SensorType_t
Definition of base types os supported sensors.
RecordDescriptor_t::value_format
RecordTypeValue_t value_format
This information contain every sensor in his driver file.
Definition: file_format.h:234
FS_Header_t
Basic information from FS start area.
Definition: file_format.h:279
FileDescriptor_t::num_parts
uint8_t num_parts
Each file can have variable count of items (or columns) in row record.
Definition: file_format.h:256
SENSOR_TYPE_CHAR
@ SENSOR_TYPE_CHAR
Primitive data type: char.
Definition: file_format.h:89
SENSOR_TYPE_ADC
@ SENSOR_TYPE_ADC
Telemetry, value from internal ACD converter.
Definition: file_format.h:107
SENSOR_TYPE_LIGHT_IR
@ SENSOR_TYPE_LIGHT_IR
Infrared light, stored as Q format.
Definition: file_format.h:103
FORMAT_META_FMT_SPECIAL_TIME
@ FORMAT_META_FMT_SPECIAL_TIME
Format as time (binary coded)
Definition: file_format.h:166