RocketLogger  2.0.0
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 "rl_file.h"
41 #include "util.h"
42 
44 #define RL_FILE_MAGIC 0x444C5225
45 
47 #define RL_FILE_VERSION 0x04
48 
50 #define RL_FILE_CHANNEL_NAME_LENGTH 16
51 
53 #define RL_FILE_CHANNEL_NO_LINK (UINT16_MAX)
54 
56 #define RL_FILE_COMMENT_ALIGNMENT_BYTES sizeof(uint32_t)
57 
59 #define RL_FILE_CSV_DELIMITER ","
60 
62 #define RL_FILE_AMBIENT_SUFFIX "-ambient"
63 
65 #define RL_FILE_AMBIENT_DATA_BLOCK_SIZE 1
66 
70 #define RL_SCALE_PICO -12
71 #define RL_SCALE_TEN_PICO -11
72 #define RL_SCALE_NANO -9
73 #define RL_SCALE_TEN_NANO -8
74 #define RL_SCALE_MICRO -6
75 #define RL_SCALE_MILLI -3
76 #define RL_SCALE_UNIT 0
77 #define RL_SCALE_KILO 3
78 #define RL_SCALE_MEGA 6
79 #define RL_SCALE_GIGA 9
80 #define RL_SCALE_TERA 12
81 
85 enum rl_unit {
97  RL_UNIT_UNDEFINED = (int)0xffffffff,
98 };
99 
103 typedef enum rl_unit rl_unit_t;
104 
110  uint32_t file_magic;
112  uint16_t file_version;
114  uint16_t header_length;
116  uint32_t data_block_size;
120  uint64_t sample_count;
122  uint16_t sample_rate;
128  uint32_t comment_length;
132  uint16_t channel_count;
133 };
134 
138 typedef struct rl_file_lead_in rl_file_lead_in_t;
139 
147  int32_t channel_scale;
149  uint16_t data_size;
154 };
155 
159 typedef struct rl_file_channel rl_file_channel_t;
160 
168  char const *comment;
171 };
172 
176 typedef struct rl_file_header rl_file_header_t;
177 
184 char *rl_unit_to_string(rl_unit_t unit);
185 
192 char *rl_file_get_ambient_file_name(char const *const data_file_name);
193 
201  rl_config_t const *const config);
202 
210  rl_config_t const *const config);
211 
218 void rl_file_setup_data_header(rl_file_header_t *const file_header,
219  rl_config_t const *const config);
220 
227 void rl_file_setup_ambient_header(rl_file_header_t *const file_header,
228  rl_config_t const *const config);
229 
236 void rl_file_store_header_bin(FILE *file_handle,
237  rl_file_header_t *const file_header);
238 
245 void rl_file_store_header_csv(FILE *file_handle,
246  rl_file_header_t const *const file_header);
247 
255 void rl_file_update_header_bin(FILE *file_handle,
256  rl_file_header_t const *const file_header);
257 
265 void rl_file_update_header_csv(FILE *file_handle,
266  rl_file_header_t const *const file_header);
267 
281 int rl_file_add_data_block(FILE *data_file, int32_t const *analog_buffer,
282  uint32_t const *digital_buffer, size_t buffer_size,
283  rl_timestamp_t const *const timestamp_realtime,
284  rl_timestamp_t const *const timestamp_monotonic,
285  rl_config_t const *const config);
286 
299 int rl_file_add_ambient_block(FILE *ambient_file, int32_t const *ambient_buffer,
300  size_t buffer_size,
301  rl_timestamp_t const *const timestamp_realtime,
302  rl_timestamp_t const *const timestamp_monotonic,
303  rl_config_t const *const config);
304 
305 #endif /* RL_FILE_H_ */
rl_unit
Definition: rl_file.h:85
@ RL_UNIT_VOLT
Voltage (electric)
Definition: rl_file.h:87
@ RL_UNIT_UNDEFINED
Undefined unit.
Definition: rl_file.h:97
@ RL_UNIT_LUX
Lux (illuminance)
Definition: rl_file.h:91
@ RL_UNIT_AMPERE
Current (electric)
Definition: rl_file.h:88
@ RL_UNIT_INTEGER
Integer channel (numeric)
Definition: rl_file.h:93
@ RL_UNIT_BINARY
Binary signal.
Definition: rl_file.h:89
@ RL_UNIT_PASCAL
Pascal (pressure)
Definition: rl_file.h:95
@ RL_UNIT_RANGE_VALID
Range valid information.
Definition: rl_file.h:90
@ RL_UNIT_PERCENT
Percent (numeric, humidity)
Definition: rl_file.h:94
@ RL_UNIT_SECOND
Second (time delta)
Definition: rl_file.h:96
@ RL_UNIT_UNITLESS
Unitless.
Definition: rl_file.h:86
@ RL_UNIT_DEG_C
Degree celsius (temperature)
Definition: rl_file.h:92
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:103
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:518
#define RL_FILE_CHANNEL_NAME_LENGTH
Maximum channel description length.
Definition: rl_file.h:50
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:153
uint16_t data_size
Datum size in bytes (for voltage and current)
Definition: rl_file.h:149
rl_unit_t unit
Channel unit.
Definition: rl_file.h:145
int32_t channel_scale
Channel scale (in power of ten, for voltage and current)
Definition: rl_file.h:147
uint16_t valid_data_channel
Link to channel valid data (for low-range current channels)
Definition: rl_file.h:151
rl_file_channel_t * channel
Channels definitions (binary and normal)
Definition: rl_file.h:170
rl_file_lead_in_t lead_in
File header lead in (constant size)
Definition: rl_file.h:166
char const * comment
Comment field.
Definition: rl_file.h:168
uint32_t comment_length
Comment length.
Definition: rl_file.h:128
uint16_t sample_rate
Sampling rate of the measurement.
Definition: rl_file.h:122
uint16_t file_version
File version number.
Definition: rl_file.h:112
rl_timestamp_t start_time
Start time of the measurement in UNIX time, UTC.
Definition: rl_file.h:126
uint64_t sample_count
Total sample count.
Definition: rl_file.h:120
uint8_t mac_address[MAC_ADDRESS_LENGTH]
Instrument ID (mac address)
Definition: rl_file.h:124
uint16_t channel_count
Analog channel count.
Definition: rl_file.h:132
uint32_t data_block_count
Number of data blocks stored in the file.
Definition: rl_file.h:118
uint32_t data_block_size
Size of the data blocks in the file in rows.
Definition: rl_file.h:116
uint16_t header_length
Total size of the header in bytes.
Definition: rl_file.h:114
uint32_t file_magic
File magic constant.
Definition: rl_file.h:110
uint16_t channel_bin_count
Binary channel count.
Definition: rl_file.h:130
#define MAC_ADDRESS_LENGTH
MAC address length in bytes.
Definition: util.h:41