RocketLogger  1.0
rl_hw.c
Go to the documentation of this file.
1 
5 #define _FILE_OFFSET_BITS 64
6 
7 #include "rl_hw.h"
8 
13 void hw_init(struct rl_conf* conf) {
14 
15  // PWM
16  pwm_setup();
17  if(conf->sample_rate < MIN_ADC_RATE) {
19  } else {
21  }
23 
24  // GPIO
25  // force high range
32  // leds
39 
40  // PRU
41  pru_init();
42 
43  // STATE
48  status.conf = *conf;
50 }
51 
56 void hw_close(struct rl_conf* conf) {
57 
58  // PWM
59  pwm_close();
60 
61  // GPIO
62  // force high range
65  // leds (not unexport!)
67 
68  // PRU
69  if(conf->mode != LIMIT) {
70  pru_stop();
71  }
72  pru_close();
73 
74  // RESET SHARED MEM
78 }
79 
85 int hw_sample(struct rl_conf* conf) {
86 
87  // open data file
88  FILE* data = (FILE*) -1;
89  if (conf->file_format != NO_FILE) { // open file only if storing requested
90  data = fopen(conf->file_name, "w+");
91  if(data == NULL) {
92  rl_log(ERROR, "failed to open data-file");
93  return FAILURE;
94  }
95  }
96 
97  // read calibration
98  if(read_calibration(conf) == FAILURE) {
99  rl_log(WARNING, "no calibration file, returning uncalibrated values");
100  }
101 
102 
103  // SAMPLE
104  if(pru_sample(data, conf) == FAILURE) {
105  // error ocurred
107  }
108 
109  // close data file
110  if (conf->file_format != NO_FILE) {
111  fclose(data);
112  }
113 
114  return SUCCESS;
115 
116 }
int force_high_channels[NUM_I_CHANNELS]
Current channels to force to high range.
Definition: types.h:214
int write_status(struct rl_status *status)
Definition: util.c:85
Limited sampling mode (limited by number of samples to take)
Definition: types.h:134
rl_mode mode
Sampling mode.
Definition: types.h:204
void range_clock_setup(int sample_rate)
Definition: pwm.c:64
#define FAILURE
Definition: types.h:53
#define SUCCESS
Definition: types.h:50
struct rl_status status
Current status of RocketLogger.
Definition: rl_server.c:42
int gpio_export(int num)
Definition: gpio.c:37
int pwm_setup(void)
Definition: pwm.c:18
void rl_log(rl_log_type type, const char *format,...)
Definition: log.c:12
#define FHR2_GPIO
Linux GPIO number for forcing I2 high.
Definition: rl_hw.h:14
#define LED_ERROR_GPIO
Linux GPIO number of error LED.
Definition: rl_hw.h:18
int pru_sample(FILE *data, struct rl_conf *conf)
Definition: pru.c:266
rl_state state
State.
Definition: types.h:234
uint64_t samples_taken
Number of samples taken.
Definition: types.h:238
int gpio_set_value(int num, int val)
Definition: gpio.c:132
#define LED_STATUS_GPIO
Linux GPIO number of status LED.
Definition: rl_hw.h:16
Definition: types.h:202
GPIO write mode.
Definition: gpio.h:26
Warning.
Definition: types.h:168
char file_name[MAX_PATH_LENGTH]
Data file name.
Definition: types.h:226
Running.
Definition: types.h:118
#define CHANNEL_DISABLED
Channel sampling disabled.
Definition: types.h:176
rl_file_format file_format
File format.
Definition: types.h:222
uint32_t buffer_number
Number of buffers taken.
Definition: types.h:240
void pru_stop(void)
Definition: pru.c:567
void pru_close(void)
Definition: pru.c:582
int gpio_unexport(int num)
Definition: gpio.c:12
Error.
Definition: types.h:167
struct rl_conf conf
Current configuration.
Definition: types.h:242
int sample_rate
Sampling rate.
Definition: types.h:206
No file.
Definition: types.h:150
int pru_init(void)
Definition: pru.c:139
#define FHR1_GPIO
Linux GPIO number for forcing I1 high.
Definition: rl_hw.h:12
void hw_init(struct rl_conf *conf)
Definition: rl_hw.c:13
Not sampling.
Definition: types.h:126
rl_sampling sampling
Sampling state.
Definition: types.h:236
void adc_clock_setup(void)
Definition: pwm.c:84
#define MIN_ADC_RATE
Minimal ADC sampling rate.
Definition: types.h:108
void hw_close(struct rl_conf *conf)
Definition: rl_hw.c:56
void pwm_close(void)
Definition: pwm.c:48
int read_calibration(struct rl_conf *conf)
Definition: calibration.c:33
int gpio_dir(int num, rl_direction dir)
Definition: gpio.c:62
int hw_sample(struct rl_conf *conf)
Definition: rl_hw.c:85