RocketLogger 2.1.2
calibration.c
Go to the documentation of this file.
1
32#include <stdio.h>
33#include <string.h>
34
35#include <unistd.h>
36
37#include "log.h"
38#include "rl.h"
39
40#include "calibration.h"
41
44
46 for (int i = 0; i < RL_CHANNEL_COUNT; i++) {
48 }
49}
50
52 for (int i = 0; i < RL_CHANNEL_COUNT; i++) {
54 }
55}
56
58 int ret;
59 char const *calibration_file_name = NULL;
60
61 // check if user/system calibration file existing
62 ret = access(RL_CALIBRATION_USER_FILE, R_OK);
63 if (ret == 0) {
64 calibration_file_name = RL_CALIBRATION_USER_FILE;
65 } else {
66 ret = access(RL_CALIBRATION_SYSTEM_FILE, R_OK);
67 if (ret == 0) {
68 calibration_file_name = RL_CALIBRATION_SYSTEM_FILE;
69 } else {
70 // no calibration file available
74 rl_status.calibration_file[0] = 0; // empty string
75 return ERROR;
76 }
77 }
78
79 FILE *file = fopen(calibration_file_name, "r");
80 if (file == NULL) {
81 // no calibration file available
85 return ERROR;
86 }
87
88 // read calibration
89 rl_calibration_file_t calibration_file;
90 fread(&calibration_file, sizeof(rl_calibration_file_t), 1, file);
91
92 // check data
93 if (calibration_file.file_magic != RL_CALIBRATION_FILE_MAGIC) {
94 rl_log(RL_LOG_ERROR, "invalid calibration file magic %x",
95 calibration_file.file_magic);
96 return ERROR;
97 }
98 if (calibration_file.file_version != RL_CALIBRATION_FILE_VERSION) {
99 rl_log(RL_LOG_ERROR, "unsupported calibration file version %d",
100 calibration_file.file_version);
101 return ERROR;
102 }
103 if (calibration_file.header_length != RL_CALIBRATION_FILE_HEADER_LENGTH) {
104 rl_log(RL_LOG_ERROR, "invalid calibration file header length %d",
105 calibration_file.header_length);
106 return ERROR;
107 }
108
109 memcpy(&rl_calibration, &(calibration_file.data), sizeof(rl_calibration_t));
110
111 // PRU DT channel has implementation specific, fixed conversion
114
115 // store calibration info information to status
117 strncpy(rl_status.calibration_file, calibration_file_name,
118 sizeof(rl_status.calibration_file) - 1);
119
120 // close file
121 fclose(file);
122
123 return SUCCESS;
124}
void calibration_reset_offsets(void)
Definition: calibration.c:45
int calibration_load(void)
Definition: calibration.c:57
void calibration_reset_scales(void)
Definition: calibration.c:51
rl_calibration_t rl_calibration
Global calibration data structure.
Definition: calibration.c:43
#define RL_CALIBRATION_FILE_HEADER_LENGTH
Calibration file header length.
Definition: calibration.h:44
#define RL_CALIBRATION_FILE_VERSION
Calibration file header version.
Definition: calibration.h:42
#define RL_CALIBRATION_FILE_MAGIC
Calibration file header magic.
Definition: calibration.h:40
int rl_log(rl_log_level_t log_level, char const *const format,...)
Definition: log.c:82
@ RL_LOG_ERROR
Error.
Definition: log.h:49
#define RL_CALIBRATION_SYSTEM_FILE
Default system wide calibration file path.
Definition: rl.h:72
#define RL_CALIBRATION_USER_FILE
User folder calibration file path.
Definition: rl.h:69
#define ERROR
Function return value for errors (use errno to indicate the error)
Definition: rl.h:46
#define SUCCESS
Function return value for successful completion.
Definition: rl.h:44
#define RL_CONFIG_CHANNEL_DT
Definition: rl.h:91
#define RL_CHANNEL_COUNT
Number of RocketLogger analog channels.
Definition: rl.h:56
uint16_t file_version
File version number.
Definition: calibration.h:68
uint64_t calibration_time
Timestamp of the measurements used for calibration generation.
Definition: calibration.h:72
rl_calibration_t data
The actual calibration data.
Definition: calibration.h:74
uint32_t file_magic
File magic constant.
Definition: calibration.h:66
uint16_t header_length
Total size of the header in bytes.
Definition: calibration.h:70
double scales[RL_CHANNEL_COUNT]
Channel scales.
Definition: calibration.h:53
int offsets[RL_CHANNEL_COUNT]
Channel offsets (in bit)
Definition: calibration.h:51
Definition: rl.h:201
uint64_t calibration_time
Time stamp of last calibration run.
Definition: rl.h:211
char calibration_file[PATH_MAX]
Time stamp of last calibration run.
Definition: rl.h:213