RocketLogger  1.1.5
rl_hw.c
Go to the documentation of this file.
1 
32 #include "sensor/sensor.h"
33 
34 #include "rl_hw.h"
35 
40 void hw_init(struct rl_conf* conf) {
41 
42  // PWM
43  pwm_setup();
44  if (conf->sample_rate < MIN_ADC_RATE) {
46  } else {
48  }
50 
51  // GPIO
52  // force high range
61  // leds
68 
69  // PRU
70  pru_init();
71 
72  // SENSORS
73  if (conf->ambient.enabled == AMBIENT_ENABLED) {
75  conf->ambient.sensor_count =
77  }
78 
79  // STATE
84  status.conf = *conf;
86 }
87 
92 void hw_close(struct rl_conf* conf) {
93 
94  // PWM
95  pwm_close();
96 
97  // GPIO
98  // force high range
101  // leds (not unexport!)
103 
104  // PRU
105  if (conf->mode != LIMIT) {
106  pru_stop();
107  }
108  pru_close();
109 
110  // SENSORS
111  if (conf->ambient.enabled == AMBIENT_ENABLED) {
114  }
115 
116  // RESET SHARED MEM
117  status.samples_taken = 0;
118  status.buffer_number = 0;
120 }
121 
128 int hw_sample(struct rl_conf* conf, char* file_comment) {
129 
130  // open data file
131  FILE* data = (FILE*)-1;
132  if (conf->file_format != NO_FILE) { // open file only if storing requested
133  data = fopen64(conf->file_name, "w+");
134  if (data == NULL) {
135  rl_log(ERROR, "failed to open data-file");
136  return FAILURE;
137  }
138  }
139 
140  // open ambient file
141  FILE* ambient_file = (FILE*)-1;
142  if (conf->ambient.enabled == AMBIENT_ENABLED) {
143  ambient_file = fopen64(conf->ambient.file_name, "w+");
144  if (data == NULL) {
145  rl_log(ERROR, "failed to open ambient-file");
146  return FAILURE;
147  }
148  }
149 
150  // read calibration
151  if (read_calibration(conf) == FAILURE) {
152  rl_log(WARNING, "no calibration file, returning uncalibrated values");
153  }
154 
155  // SAMPLE
156  if (pru_sample(data, ambient_file, conf, file_comment) == FAILURE) {
157  // error ocurred
159  }
160 
161  // close data file
162  if (conf->file_format != NO_FILE) {
163  fclose(data);
164  }
165  if (conf->ambient.enabled == AMBIENT_ENABLED) {
166  fclose(ambient_file);
167  }
168 
169  return SUCCESS;
170 }
int force_high_channels[NUM_I_CHANNELS]
Current channels to force to high range.
Definition: types.h:263
int write_status(struct rl_status *status)
Definition: util.c:129
Limited sampling mode (limited by number of samples to take)
Definition: types.h:158
void Sensors_close(int sensors_available[])
Definition: sensor.c:196
rl_mode mode
Sampling mode.
Definition: types.h:251
int available_sensors[AMBIENT_MAX_SENSOR_COUNT]
Definition: types.h:215
#define FAILURE
Definition: types.h:78
#define SUCCESS
Definition: types.h:75
struct rl_status status
Current status of RocketLogger.
Definition: rl_server.c:71
int gpio_export(int num)
Definition: gpio.c:63
int pwm_setup(void)
Definition: pwm.c:46
void Sensors_closeSharedBus(void)
Definition: sensor.c:134
void rl_log(rl_log_type type, const char *format,...)
Definition: log.c:39
#define FHR2_GPIO
Linux GPIO number for forcing I2 high.
Definition: rl_hw.h:45
void pwm_setup_range_clock(int sample_rate)
Definition: pwm.c:94
struct rl_ambient ambient
Ambient conf.
Definition: types.h:277
#define LED_ERROR_GPIO
Linux GPIO number of error LED.
Definition: rl_hw.h:49
int enabled
Definition: types.h:213
rl_state state
State.
Definition: types.h:285
int sensor_count
Definition: types.h:214
uint64_t samples_taken
Number of samples taken.
Definition: types.h:289
int gpio_set_value(int num, int val)
Definition: gpio.c:156
#define LED_STATUS_GPIO
Linux GPIO number of status LED.
Definition: rl_hw.h:47
Definition: types.h:247
GPIO write mode.
Definition: gpio.h:55
int Sensors_scan(int sensors_available[])
Definition: sensor.c:145
Warning.
Definition: types.h:201
char file_name[MAX_PATH_LENGTH]
Data file name.
Definition: types.h:275
Running.
Definition: types.h:142
int hw_sample(struct rl_conf *conf, char *file_comment)
Definition: rl_hw.c:128
#define CHANNEL_DISABLED
Channel sampling disabled.
Definition: types.h:221
rl_file_format file_format
File format.
Definition: types.h:271
uint32_t buffer_number
Number of buffers taken.
Definition: types.h:291
void pru_stop(void)
Definition: pru.c:708
void pru_close(void)
Definition: pru.c:723
int gpio_unexport(int num)
Definition: gpio.c:39
char file_name[MAX_PATH_LENGTH]
Definition: types.h:216
Error.
Definition: types.h:200
struct rl_conf conf
Current configuration.
Definition: types.h:293
int sample_rate
Sampling rate.
Definition: types.h:253
No file.
Definition: types.h:183
int pru_init(void)
Definition: pru.c:167
#define FHR1_GPIO
Linux GPIO number for forcing I1 high.
Definition: rl_hw.h:43
void hw_init(struct rl_conf *conf)
Definition: rl_hw.c:40
Not sampling.
Definition: types.h:150
int pru_sample(FILE *data_file, FILE *ambient_file, struct rl_conf *conf, char *file_comment)
Definition: pru.c:296
rl_sampling sampling
Sampling state.
Definition: types.h:287
#define AMBIENT_ENABLED
Definition: types.h:211
#define MIN_ADC_RATE
Minimal ADC sampling rate.
Definition: types.h:134
int Sensors_initSharedBus(void)
Definition: sensor.c:110
void pwm_setup_adc_clock(void)
Definition: pwm.c:115
void hw_close(struct rl_conf *conf)
Definition: rl_hw.c:92
void pwm_close(void)
Definition: pwm.c:80
int read_calibration(struct rl_conf *conf)
Definition: calibration.c:61
int gpio_dir(int num, rl_direction dir)
Definition: gpio.c:88