RocketLogger  1.1
rl_hw.c
Go to the documentation of this file.
1 
31 #include "sensor/sensor.h"
32 
33 #include "rl_hw.h"
34 
39 void hw_init(struct rl_conf* conf) {
40 
41  // PWM
42  pwm_setup();
43  if (conf->sample_rate < MIN_ADC_RATE) {
45  } else {
47  }
49 
50  // GPIO
51  // force high range
60  // leds
67 
68  // PRU
69  pru_init();
70 
71  // SENSORS
72  if (conf->ambient.enabled == AMBIENT_ENABLED) {
74  conf->ambient.sensor_count =
76  }
77 
78  // STATE
83  status.conf = *conf;
85 }
86 
91 void hw_close(struct rl_conf* conf) {
92 
93  // PWM
94  pwm_close();
95 
96  // GPIO
97  // force high range
100  // leds (not unexport!)
102 
103  // PRU
104  if (conf->mode != LIMIT) {
105  pru_stop();
106  }
107  pru_close();
108 
109  // SENSORS
110  if (conf->ambient.enabled == AMBIENT_ENABLED) {
113  }
114 
115  // RESET SHARED MEM
116  status.samples_taken = 0;
117  status.buffer_number = 0;
119 }
120 
127 int hw_sample(struct rl_conf* conf, char* file_comment) {
128 
129  // open data file
130  FILE* data = (FILE*)-1;
131  if (conf->file_format != NO_FILE) { // open file only if storing requested
132  data = fopen(conf->file_name, "w+");
133  if (data == NULL) {
134  rl_log(ERROR, "failed to open data-file");
135  return FAILURE;
136  }
137  }
138 
139  // open ambient file
140  FILE* ambient_file = (FILE*)-1;
141  if (conf->ambient.enabled == AMBIENT_ENABLED) {
142  ambient_file = fopen(conf->ambient.file_name, "w+");
143  if (data == NULL) {
144  rl_log(ERROR, "failed to open ambient-file");
145  return FAILURE;
146  }
147  }
148 
149  // read calibration
150  if (read_calibration(conf) == FAILURE) {
151  rl_log(WARNING, "no calibration file, returning uncalibrated values");
152  }
153 
154  // SAMPLE
155  if (pru_sample(data, ambient_file, conf, file_comment) == FAILURE) {
156  // error ocurred
158  }
159 
160  // close data file
161  if (conf->file_format != NO_FILE) {
162  fclose(data);
163  }
164  if (conf->ambient.enabled == AMBIENT_ENABLED) {
165  fclose(ambient_file);
166  }
167 
168  return SUCCESS;
169 }
int force_high_channels[NUM_I_CHANNELS]
Current channels to force to high range.
Definition: types.h:262
int write_status(struct rl_status *status)
Definition: util.c:128
Limited sampling mode (limited by number of samples to take)
Definition: types.h:157
void Sensors_close(int sensors_available[])
Definition: sensor.c:195
rl_mode mode
Sampling mode.
Definition: types.h:250
int available_sensors[AMBIENT_MAX_SENSOR_COUNT]
Definition: types.h:214
#define FAILURE
Definition: types.h:77
#define SUCCESS
Definition: types.h:74
struct rl_status status
Current status of RocketLogger.
Definition: rl_server.c:70
int gpio_export(int num)
Definition: gpio.c:62
int pwm_setup(void)
Definition: pwm.c:45
void Sensors_closeSharedBus(void)
Definition: sensor.c:133
void rl_log(rl_log_type type, const char *format,...)
Definition: log.c:38
#define FHR2_GPIO
Linux GPIO number for forcing I2 high.
Definition: rl_hw.h:44
void pwm_setup_range_clock(int sample_rate)
Definition: pwm.c:93
struct rl_ambient ambient
Ambient conf.
Definition: types.h:276
#define LED_ERROR_GPIO
Linux GPIO number of error LED.
Definition: rl_hw.h:48
int enabled
Definition: types.h:212
rl_state state
State.
Definition: types.h:284
int sensor_count
Definition: types.h:213
uint64_t samples_taken
Number of samples taken.
Definition: types.h:288
int gpio_set_value(int num, int val)
Definition: gpio.c:155
#define LED_STATUS_GPIO
Linux GPIO number of status LED.
Definition: rl_hw.h:46
Definition: types.h:246
GPIO write mode.
Definition: gpio.h:54
int Sensors_scan(int sensors_available[])
Definition: sensor.c:144
Warning.
Definition: types.h:200
char file_name[MAX_PATH_LENGTH]
Data file name.
Definition: types.h:274
Running.
Definition: types.h:141
int hw_sample(struct rl_conf *conf, char *file_comment)
Definition: rl_hw.c:127
#define CHANNEL_DISABLED
Channel sampling disabled.
Definition: types.h:220
rl_file_format file_format
File format.
Definition: types.h:270
uint32_t buffer_number
Number of buffers taken.
Definition: types.h:290
void pru_stop(void)
Definition: pru.c:707
void pru_close(void)
Definition: pru.c:722
int gpio_unexport(int num)
Definition: gpio.c:38
char file_name[MAX_PATH_LENGTH]
Definition: types.h:215
Error.
Definition: types.h:199
struct rl_conf conf
Current configuration.
Definition: types.h:292
int sample_rate
Sampling rate.
Definition: types.h:252
No file.
Definition: types.h:182
int pru_init(void)
Definition: pru.c:166
#define FHR1_GPIO
Linux GPIO number for forcing I1 high.
Definition: rl_hw.h:42
void hw_init(struct rl_conf *conf)
Definition: rl_hw.c:39
Not sampling.
Definition: types.h:149
int pru_sample(FILE *data_file, FILE *ambient_file, struct rl_conf *conf, char *file_comment)
Definition: pru.c:295
rl_sampling sampling
Sampling state.
Definition: types.h:286
#define AMBIENT_ENABLED
Definition: types.h:210
#define MIN_ADC_RATE
Minimal ADC sampling rate.
Definition: types.h:133
int Sensors_initSharedBus(void)
Definition: sensor.c:109
void pwm_setup_adc_clock(void)
Definition: pwm.c:114
void hw_close(struct rl_conf *conf)
Definition: rl_hw.c:91
void pwm_close(void)
Definition: pwm.c:79
int read_calibration(struct rl_conf *conf)
Definition: calibration.c:60
int gpio_dir(int num, rl_direction dir)
Definition: gpio.c:87