RocketLogger  2.0.2
rl_file.h
Go to the documentation of this file.
1 
32 #ifndef RL_FILE_H_
33 #define RL_FILE_H_
34 
35 #include <stdint.h>
36 #include <stdio.h>
37 
38 #include "pru.h"
39 #include "rl.h"
40 #include "util.h"
41 
43 #define RL_FILE_MAGIC 0x444C5225
44 
46 #define RL_FILE_VERSION 0x04
47 
49 #define RL_FILE_CHANNEL_NAME_LENGTH 16
50 
52 #define RL_FILE_CHANNEL_NO_LINK (UINT16_MAX)
53 
55 #define RL_FILE_COMMENT_ALIGNMENT_BYTES sizeof(uint32_t)
56 
58 #define RL_FILE_CSV_DELIMITER ","
59 
61 #define RL_FILE_AMBIENT_SUFFIX "-ambient"
62 
64 #define RL_FILE_AMBIENT_DATA_BLOCK_SIZE 1
65 
69 #define RL_SCALE_PICO -12
70 #define RL_SCALE_TEN_PICO -11
71 #define RL_SCALE_NANO -9
72 #define RL_SCALE_TEN_NANO -8
73 #define RL_SCALE_MICRO -6
74 #define RL_SCALE_MILLI -3
75 #define RL_SCALE_UNIT 0
76 #define RL_SCALE_KILO 3
77 #define RL_SCALE_MEGA 6
78 #define RL_SCALE_GIGA 9
79 #define RL_SCALE_TERA 12
80 
84 enum rl_unit {
96  RL_UNIT_UNDEFINED = (int)0xffffffff,
97 };
98 
102 typedef enum rl_unit rl_unit_t;
103 
109  uint32_t file_magic;
111  uint16_t file_version;
113  uint16_t header_length;
115  uint32_t data_block_size;
119  uint64_t sample_count;
121  uint16_t sample_rate;
127  uint32_t comment_length;
131  uint16_t channel_count;
132 };
133 
137 typedef struct rl_file_lead_in rl_file_lead_in_t;
138 
146  int32_t channel_scale;
148  uint16_t data_size;
153 };
154 
158 typedef struct rl_file_channel rl_file_channel_t;
159 
167  char const *comment;
170 };
171 
175 typedef struct rl_file_header rl_file_header_t;
176 
183 char *rl_unit_to_string(rl_unit_t unit);
184 
191 char *rl_file_get_ambient_file_name(char const *const data_file_name);
192 
200  rl_config_t const *const config);
201 
209  rl_config_t const *const config);
210 
217 void rl_file_setup_data_header(rl_file_header_t *const file_header,
218  rl_config_t const *const config);
219 
226 void rl_file_setup_ambient_header(rl_file_header_t *const file_header,
227  rl_config_t const *const config);
228 
235 void rl_file_store_header_bin(FILE *file_handle,
236  rl_file_header_t *const file_header);
237 
244 void rl_file_store_header_csv(FILE *file_handle,
245  rl_file_header_t const *const file_header);
246 
254 void rl_file_update_header_bin(FILE *file_handle,
255  rl_file_header_t const *const file_header);
256 
264 void rl_file_update_header_csv(FILE *file_handle,
265  rl_file_header_t const *const file_header);
266 
280 int rl_file_add_data_block(FILE *data_file, int32_t const *analog_buffer,
281  uint32_t const *digital_buffer, size_t buffer_size,
282  rl_timestamp_t const *const timestamp_realtime,
283  rl_timestamp_t const *const timestamp_monotonic,
284  rl_config_t const *const config);
285 
298 int rl_file_add_ambient_block(FILE *ambient_file, int32_t const *ambient_buffer,
299  size_t buffer_size,
300  rl_timestamp_t const *const timestamp_realtime,
301  rl_timestamp_t const *const timestamp_monotonic,
302  rl_config_t const *const config);
303 
304 #endif /* RL_FILE_H_ */
rl_unit
Definition: rl_file.h:84
@ RL_UNIT_VOLT
Voltage (electric)
Definition: rl_file.h:86
@ RL_UNIT_UNDEFINED
Undefined unit.
Definition: rl_file.h:96
@ RL_UNIT_LUX
Lux (illuminance)
Definition: rl_file.h:90
@ RL_UNIT_AMPERE
Current (electric)
Definition: rl_file.h:87
@ RL_UNIT_INTEGER
Integer channel (numeric)
Definition: rl_file.h:92
@ RL_UNIT_BINARY
Binary signal.
Definition: rl_file.h:88
@ RL_UNIT_PASCAL
Pascal (pressure)
Definition: rl_file.h:94
@ RL_UNIT_RANGE_VALID
Range valid information.
Definition: rl_file.h:89
@ RL_UNIT_PERCENT
Percent (numeric, humidity)
Definition: rl_file.h:93
@ RL_UNIT_SECOND
Second (time delta)
Definition: rl_file.h:95
@ RL_UNIT_UNITLESS
Unitless.
Definition: rl_file.h:85
@ RL_UNIT_DEG_C
Degree celsius (temperature)
Definition: rl_file.h:91
void rl_file_setup_ambient_header(rl_file_header_t *const file_header, rl_config_t const *const config)
Definition: rl_file.c:207
enum rl_unit rl_unit_t
Definition: rl_file.h:102
void rl_file_store_header_bin(FILE *file_handle, rl_file_header_t *const file_header)
Definition: rl_file.c:218
void rl_file_update_header_bin(FILE *file_handle, rl_file_header_t const *const file_header)
Definition: rl_file.c:325
char * rl_unit_to_string(rl_unit_t unit)
Definition: rl_file.c:86
int rl_file_add_data_block(FILE *data_file, int32_t const *analog_buffer, uint32_t const *digital_buffer, size_t buffer_size, rl_timestamp_t const *const timestamp_realtime, rl_timestamp_t const *const timestamp_monotonic, rl_config_t const *const config)
Definition: rl_file.c:351
void rl_file_store_header_csv(FILE *file_handle, rl_file_header_t const *const file_header)
Definition: rl_file.c:255
void rl_file_setup_ambient_lead_in(rl_file_lead_in_t *const lead_in, rl_config_t const *const config)
Definition: rl_file.c:161
void rl_file_setup_data_header(rl_file_header_t *const file_header, rl_config_t const *const config)
Definition: rl_file.c:196
void rl_file_update_header_csv(FILE *file_handle, rl_file_header_t const *const file_header)
Definition: rl_file.c:335
int rl_file_add_ambient_block(FILE *ambient_file, int32_t const *ambient_buffer, size_t buffer_size, rl_timestamp_t const *const timestamp_realtime, rl_timestamp_t const *const timestamp_monotonic, rl_config_t const *const config)
Definition: rl_file.c:521
#define RL_FILE_CHANNEL_NAME_LENGTH
Maximum channel description length.
Definition: rl_file.h:49
char * rl_file_get_ambient_file_name(char const *const data_file_name)
Definition: rl_file.c:95
void rl_file_setup_data_lead_in(rl_file_lead_in_t *const lead_in, rl_config_t const *const config)
Definition: rl_file.c:119
Definition: rl.h:154
char name[RL_FILE_CHANNEL_NAME_LENGTH]
Channel name/description.
Definition: rl_file.h:152
uint16_t data_size
Datum size in bytes (for voltage and current)
Definition: rl_file.h:148
rl_unit_t unit
Channel unit.
Definition: rl_file.h:144
int32_t channel_scale
Channel scale (in power of ten, for voltage and current)
Definition: rl_file.h:146
uint16_t valid_data_channel
Link to channel valid data (for low-range current channels)
Definition: rl_file.h:150
rl_file_channel_t * channel
Channels definitions (binary and normal)
Definition: rl_file.h:169
rl_file_lead_in_t lead_in
File header lead in (constant size)
Definition: rl_file.h:165
char const * comment
Comment field.
Definition: rl_file.h:167
uint32_t comment_length
Comment length.
Definition: rl_file.h:127
uint16_t sample_rate
Sampling rate of the measurement.
Definition: rl_file.h:121
uint16_t file_version
File version number.
Definition: rl_file.h:111
rl_timestamp_t start_time
Start time of the measurement in UNIX time, UTC.
Definition: rl_file.h:125
uint64_t sample_count
Total sample count.
Definition: rl_file.h:119
uint8_t mac_address[MAC_ADDRESS_LENGTH]
Instrument ID (mac address)
Definition: rl_file.h:123
uint16_t channel_count
Analog channel count.
Definition: rl_file.h:131
uint32_t data_block_count
Number of data blocks stored in the file.
Definition: rl_file.h:117
uint32_t data_block_size
Size of the data blocks in the file in rows.
Definition: rl_file.h:115
uint16_t header_length
Total size of the header in bytes.
Definition: rl_file.h:113
uint32_t file_magic
File magic constant.
Definition: rl_file.h:109
uint16_t channel_bin_count
Binary channel count.
Definition: rl_file.h:129
#define MAC_ADDRESS_LENGTH
MAC address length in bytes.
Definition: util.h:41