Chirp SonicLib  2.1.0
soniclib.h
Go to the documentation of this file.
1 
60 /*
61  Copyright © 2019-2020, Chirp Microsystems. All rights reserved.
62 
63  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
64  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
65  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
66  DISCLAIMED. IN NO EVENT SHALL CHIRP MICROSYSTEMS BE LIABLE FOR ANY
67  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
68  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
69  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
70  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
71  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
72  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
73 
74  You can contact the authors of this program by email at support@chirpmicro.com
75  or by mail at 2560 Ninth Street, Suite 220, Berkeley, CA 94710.
76  */
77 
78 #ifndef __SONICLIB_H_
79 #define __SONICLIB_H_
80 
81 /* Preliminary structure type definitions to resolve include order */
82 typedef struct ch_dev_t ch_dev_t;
83 typedef struct ch_group_t ch_group_t;
84 
85 
86 /*============== Chirp header files for installed sensor firmware packages ===================
87  *
88  * If you are installing a new Chirp sensor firmware package, you must add
89  * the name of the firmware include file to the list below.
90  */
91 
92 #include "ch101_gpr_open.h" /* General purpose rangefinding - CH101 */
93 #include "ch101_gpr_sr_open.h" /* General purpose rangefinding (short range) - CH101 */
94 #include "ch101_gppc.h" /* General purpose pitch catch - CH101 */
95 #include "ch101_sonicsync.h" /* SonicSync - CH101 */
96 #include "ch201_gprmt.h" /* General purpose rangefinding (multi-threshold) - CH201 */
97 #include "ch201_gpr_str.h" /* General purpose rangefinding (Stationary target rejection) - CH201 */
98 
99 #include "ch101_floor.h" /* Floor detection - CH101 */
100 #include "ch201_presence.h"
101 
102 /*======================== End of sensor firmware header files ================================*/
103 
104 //#define CHDRV_DEBUG // uncomment this line to enable driver debug messages
105 
106 /* Miscellaneous header files */
107 
108 #include "chirp_board_config.h" /* Header from board support package containing h/w params */
109 #include "ch_driver.h" /* Internal Chirp driver defines */
110 #include "ch_math_utils.h" /* math utility functions */
111 
112 #include <stdint.h>
113 #include <stdlib.h>
114 #include <math.h>
115 #include <string.h>
116 #ifdef CHDRV_DEBUG
117 #include <stdio.h>
118 #endif
119 
120 /* SonicLib API/Driver version */
121 #define SONICLIB_VER_MAJOR (2)
122 #define SONICLIB_VER_MINOR (1)
123 #define SONICLIB_VER_REV (0)
125 /* Chirp sensor part numbers */
126 #define CH101_PART_NUMBER (101)
127 #define CH201_PART_NUMBER (201)
129 /* Max expected number of samples per measurement (actual value depends on sensor f/w used) */
130 #define CH101_MAX_NUM_SAMPLES (150)
131 #define CH201_MAX_NUM_SAMPLES (450)
133 /* Misc definitions */
134 #define CH_NO_TARGET (0xFFFFFFFF)
135 #define CH_MIN_RANGE_VAL (0x0001)
137 #define CH_I2C_ADDR_PROG (0x45)
138 #define CH_SIG_BYTE_0 (0x0a)
139 #define CH_SIG_BYTE_1 (0x02)
141 #define CH_NUM_THRESHOLDS (6)
142 #define CH_SPEEDOFSOUND_MPS (343)
144 typedef enum {
146  RET_OK = 0,
147  RET_ERR = 1
148 } ch_retval;
149 
151 typedef enum {
155 } ch_range_t;
156 
158 typedef enum {
159  CH_MODE_IDLE = 0x00,
166 } ch_mode_t;
167 
169 typedef enum {
172 } ch_reset_t;
173 
175 typedef enum {
178 } ch_io_mode_t;
179 
181 typedef enum {
182  CH_TIME_PLAN_1 = 0,
183  CH_TIME_PLAN_2 = 1,
184  CH_TIME_PLAN_3 = 2,
185  CH_TIME_PLAN_NONE = 255
187 
189 typedef struct {
190  uint8_t address;
191  uint8_t bus_num;
192  uint16_t drv_flags;
193 } ch_i2c_info_t;
194 
196 #define I2C_DRV_FLAG_RESET_AFTER_NB (0x00000001)
197 #define I2C_DRV_FLAG_USE_PROG_NB (0x00000002)
200 typedef struct {
202  int16_t q;
203  int16_t i;
205 
206 
208 typedef struct {
209  uint16_t start_sample;
210  uint16_t level;
211 } ch_thresh_t;
212 
213 
215 typedef struct {
216  ch_thresh_t threshold[CH_NUM_THRESHOLDS];
218 
220 typedef struct {
222  uint16_t max_range;
223  uint16_t static_range;
224  uint16_t sample_interval;
228 } ch_config_t;
229 
230 
232 typedef uint8_t (*ch_fw_init_func_t)(ch_dev_t *dev_ptr, ch_group_t *grp_ptr, uint8_t i2c_addr,
233  uint8_t dev_num, uint8_t i2c_bus_index);
234 
236 typedef uint8_t (*ch_fw_load_func_t)(ch_dev_t *dev_ptr);
237 typedef uint8_t (*ch_get_config_func_t)(ch_dev_t *dev_ptr, ch_config_t *config_ptr);
238 typedef uint8_t (*ch_set_config_func_t)(ch_dev_t *dev_ptr, ch_config_t *config_ptr);
239 typedef uint8_t (*ch_set_mode_func_t)(ch_dev_t *dev_ptr, ch_mode_t mode);
240 typedef uint8_t (*ch_set_sample_interval_func_t)(ch_dev_t *dev_ptr, uint16_t sample_interval);
241 typedef uint8_t (*ch_set_num_samples_func_t)(ch_dev_t *dev_ptr, uint16_t num_samples);
242 typedef uint8_t (*ch_set_max_range_func_t)(ch_dev_t *dev_ptr, uint16_t max_range);
243 typedef uint8_t (*ch_set_sample_window_func_t)(ch_dev_t *dev_ptr, uint16_t start_sample,
244  uint16_t end_sample);
245 typedef uint32_t (*ch_get_range_func_t)(ch_dev_t *dev_ptr, ch_range_t range_type);
246 typedef uint32_t (*ch_get_tof_tick_func_t)(ch_dev_t *dev_ptr, uint32_t timer_freq);
247 typedef uint16_t (*ch_get_amplitude_func_t)(ch_dev_t *dev_ptr);
248 typedef uint16_t (*ch_get_amplitude_avg_func_t)(ch_dev_t *dev_ptr);
249 typedef uint8_t (*ch_set_frequency_func_t)(ch_dev_t *dev_ptr, uint32_t target_freq_Hz);
250 typedef uint32_t (*ch_get_frequency_func_t)(ch_dev_t *dev_ptr);
251 typedef uint8_t (*ch_get_iq_data_func_t)(ch_dev_t *dev_ptr, ch_iq_sample_t *buf_ptr,
252  uint16_t start_sample, uint16_t num_samples,
253  ch_io_mode_t io_mode);
254 typedef uint8_t (*ch_get_amplitude_data_func_t)(ch_dev_t *dev_ptr, uint16_t *buf_ptr,
255  uint16_t start_sample, uint16_t num_samples,
256  ch_io_mode_t io_mode);
257 typedef uint16_t (*ch_samples_to_mm_func_t)(ch_dev_t *dev_ptr, uint16_t num_samples);
258 typedef uint16_t (*ch_mm_to_samples_func_t)(ch_dev_t *dev_ptr, uint16_t num_mm);
259 typedef uint8_t (*ch_set_threshold_func_t)(ch_dev_t *dev_ptr, uint8_t threshold_index, uint16_t amplitude);
260 typedef uint16_t (*ch_get_threshold_func_t)(ch_dev_t *dev_ptr, uint8_t threshold_index);
261 typedef uint8_t (*ch_set_thresholds_func_t)(ch_dev_t *dev_ptr, ch_thresholds_t *thresh_ptr);
262 typedef uint8_t (*ch_get_thresholds_func_t)(ch_dev_t *dev_ptr, ch_thresholds_t *thresh_ptr);
263 typedef uint8_t (*ch_set_target_interrupt_func_t)(ch_dev_t *dev_ptr, uint8_t enable);
264 typedef uint8_t (*ch_get_target_interrupt_func_t)(ch_dev_t *dev_ptr);
265 typedef uint8_t (*ch_set_static_range_func_t)(ch_dev_t *dev_ptr, uint16_t static_range);
266 typedef uint8_t (*ch_set_static_coeff_func_t)(ch_dev_t *dev_ptr, uint8_t static_coeff);
267 typedef uint8_t (*ch_get_static_coeff_func_t)(ch_dev_t *dev_ptr);
268 typedef uint8_t (*ch_set_rx_holdoff_func_t)(ch_dev_t *dev_ptr, uint16_t rx_holdoff);
269 typedef uint16_t (*ch_get_rx_holdoff_func_t)(ch_dev_t *dev_ptr);
270 typedef uint8_t (*ch_set_tx_length_func_t)(ch_dev_t *dev_ptr, uint8_t tx_length);
271 typedef uint8_t (*ch_get_tx_length_func_t)(ch_dev_t *dev_ptr);
272 typedef uint8_t (*ch_get_rx_pulse_length_func_t)(ch_dev_t *dev_ptr);
273 typedef uint8_t (*ch_set_time_plan_func_t)(ch_dev_t *dev_ptr, ch_time_plan_t time_plan);
274 typedef ch_time_plan_t (*ch_get_time_plan_func_t)(ch_dev_t *dev_ptr);
275 
277 typedef struct {
278  ch_fw_load_func_t fw_load;
279  ch_set_mode_func_t set_mode;
280  ch_set_sample_interval_func_t set_sample_interval;
281  ch_set_num_samples_func_t set_num_samples;
282  ch_set_max_range_func_t set_max_range;
283  ch_set_sample_window_func_t set_sample_window;
284  ch_get_range_func_t get_range;
285  ch_get_tof_tick_func_t get_tof_tick;
286  ch_get_amplitude_func_t get_amplitude;
287  ch_get_amplitude_avg_func_t get_amplitude_avg;
288  ch_set_frequency_func_t set_frequency;
289  ch_get_frequency_func_t get_frequency;
290  ch_get_iq_data_func_t get_iq_data;
291  ch_get_amplitude_data_func_t get_amplitude_data;
292  ch_samples_to_mm_func_t samples_to_mm;
293  ch_mm_to_samples_func_t mm_to_samples;
294  ch_set_threshold_func_t set_threshold;
295  ch_get_threshold_func_t get_threshold;
296  ch_set_thresholds_func_t set_thresholds;
297  ch_get_thresholds_func_t get_thresholds;
298  ch_set_target_interrupt_func_t set_target_interrupt;
299  ch_get_target_interrupt_func_t get_target_interrupt;
300  ch_set_static_range_func_t set_static_range;
301  ch_set_static_coeff_func_t set_static_coeff;
302  ch_get_static_coeff_func_t get_static_coeff;
303  ch_set_rx_holdoff_func_t set_rx_holdoff;
304  ch_get_rx_holdoff_func_t get_rx_holdoff;
305  ch_set_tx_length_func_t set_tx_length;
306  ch_get_tx_length_func_t get_tx_length;
307  ch_get_rx_pulse_length_func_t get_rx_pulse_length;
308  ch_set_time_plan_func_t set_time_plan;
309  ch_get_time_plan_func_t get_time_plan;
311 
312 
314 typedef void (*ch_io_int_callback_t)(ch_group_t *grp_ptr, uint8_t io_index);
315 //
317 typedef void (*ch_io_complete_callback_t)(ch_group_t *grp_ptr);
318 //
320 typedef void (*ch_timer_callback_t)(void);
321 
322 
324 
329 struct ch_group_t { /* [note tag name matches type to help Doxygen linkage] */
330  uint8_t num_ports;
331  uint8_t num_i2c_buses;
332  uint8_t sensor_count;
333  uint16_t i2c_drv_flags;
335  uint16_t rtc_cal_pulse_ms;
336  uint16_t pretrig_delay_us;
341  ch_dev_t *device[CHIRP_MAX_NUM_SENSORS];
343  uint8_t num_connected[CHIRP_NUM_I2C_BUSES];
344  chdrv_i2c_queue_t i2c_queue[CHIRP_NUM_I2C_BUSES];
346 };
347 
349 struct ch_dev_t { /* [note tag name matches type to help Doxygen linkage] */
352  uint8_t freqLockValue;
353  uint16_t freqCounterCycles;
354  uint16_t max_range;
355  uint16_t static_range;
356  uint16_t sample_interval;
357  uint16_t rtc_cal_result;
358  uint32_t op_frequency;
359  uint16_t bandwidth;
360  uint16_t scale_factor;
361  uint8_t i2c_address;
362  uint8_t app_i2c_address;
363  uint16_t i2c_drv_flags;
364  uint16_t part_number;
365  int8_t oversample;
368  uint8_t io_index;
369  uint8_t i2c_bus_index;
370  uint16_t max_samples;
371  uint16_t num_rx_samples;
372  uint16_t win_start_sample;
373  uint16_t num_win_samples;
375  /* Sensor Firmware-specific Linkage Definitions */
376  const char *fw_version_string;
377  const uint8_t *firmware;
378  const uint8_t *ram_init;
379  void (*prepare_pulse_timer)(ch_dev_t *dev_ptr);
382  void (*store_pt_result)(ch_dev_t *dev_ptr);
385  void (*store_op_freq)(ch_dev_t *dev_ptr);
388  void (*store_bandwidth)(ch_dev_t *dev_ptr);
390  void (*store_scalefactor)(ch_dev_t *dev_ptr);
392  uint8_t (*get_locked_state)(ch_dev_t *dev_ptr);
394  uint16_t (*get_fw_ram_init_size)(void);
396  uint16_t (*get_fw_ram_init_addr)(void);
399  /* API and callback functions */
402 };
403 
404 
405 /* API function prototypes and documentation */
406 
407 
447 uint8_t ch_init(ch_dev_t *dev_ptr, ch_group_t *grp_ptr, uint8_t dev_num, ch_fw_init_func_t fw_init_func);
448 
473 uint8_t ch_group_start(ch_group_t *grp_ptr);
474 
490 uint8_t ch_get_config(ch_dev_t *dev_ptr, ch_config_t *config_ptr);
491 
510 uint8_t ch_set_config(ch_dev_t *dev_ptr, ch_config_t *config_ptr);
511 
527 void ch_trigger(ch_dev_t *dev_ptr);
528 
548 void ch_group_trigger(ch_group_t *grp_ptr);
549 
559 void ch_reset(ch_dev_t *dev_ptr, ch_reset_t reset_type);
560 
570 void ch_group_reset(ch_group_t *grp_ptr, ch_reset_t reset_type);
571 
578 uint8_t ch_sensor_is_connected(ch_dev_t *dev_ptr);
579 
589 uint16_t ch_get_part_number(ch_dev_t *dev_ptr);
590 
602 uint8_t ch_get_dev_num(ch_dev_t *dev_ptr);
603 
615 ch_dev_t * ch_get_dev_ptr(ch_group_t *grp_ptr, uint8_t dev_num);
616 
628 uint8_t ch_get_num_ports(ch_group_t *grp_ptr);
629 
641 uint8_t ch_get_i2c_address(ch_dev_t *dev_ptr);
642 
654 uint8_t ch_get_i2c_bus(ch_dev_t *dev_ptr);
655 
666 const char * ch_get_fw_version_string(ch_dev_t *dev_ptr);
667 
680 ch_mode_t ch_get_mode(ch_dev_t *dev_ptr);
681 
696 uint8_t ch_set_mode(ch_dev_t *dev_ptr, ch_mode_t mode);
697 
708 uint16_t ch_get_sample_interval(ch_dev_t *dev_ptr);
709 
724 uint8_t ch_set_sample_interval(ch_dev_t *dev_ptr, uint16_t interval_ms);
725 
739 uint16_t ch_get_num_samples(ch_dev_t *dev_ptr);
740 
759 uint8_t ch_set_num_samples(ch_dev_t *dev_ptr, uint16_t num_samples);
760 
777 uint16_t ch_get_max_samples(ch_dev_t *dev_ptr);
778 
779 
793 uint16_t ch_get_max_range(ch_dev_t *dev_ptr);
794 
812 uint8_t ch_set_max_range(ch_dev_t *dev_ptr, uint16_t max_range);
813 
814 
836 uint8_t ch_get_sample_window(ch_dev_t *dev_ptr, uint16_t *start_sample_ptr, uint16_t *num_samples_ptr);
837 
838 
859 uint8_t ch_set_sample_window(ch_dev_t *dev_ptr, uint16_t start_sample, uint16_t num_samples);
860 
861 
875 uint16_t ch_get_static_range(ch_dev_t *dev_ptr);
876 
896 uint8_t ch_set_static_range(ch_dev_t *dev_ptr, uint16_t num_samples);
897 
935 uint32_t ch_get_range(ch_dev_t *dev_ptr, ch_range_t range_type);
936 
961 uint32_t ch_get_tof_tick(ch_dev_t *dev_ptr, uint32_t timer_freq);
962 
977 uint16_t ch_get_amplitude(ch_dev_t *dev_ptr);
978 
997 uint16_t ch_get_amplitude_avg(ch_dev_t *dev_ptr);
998 
1012 uint16_t ch_get_bandwidth(ch_dev_t *dev_ptr);
1013 
1026 uint8_t ch_set_frequency(ch_dev_t *dev_ptr, uint32_t target_freq_Hz);
1027 
1038 uint32_t ch_get_frequency(ch_dev_t *dev_ptr);
1039 
1051 uint16_t ch_get_rtc_cal_result(ch_dev_t *dev_ptr);
1052 
1068 uint16_t ch_get_rtc_cal_pulselength(ch_dev_t *dev_ptr);
1069 
1083 uint16_t ch_get_scale_factor(ch_dev_t *dev_ptr);
1084 
1163 uint8_t ch_get_iq_data(ch_dev_t *dev_ptr, ch_iq_sample_t *buf_ptr, uint16_t start_sample,
1164  uint16_t num_samples, ch_io_mode_t mode);
1165 
1243 uint8_t ch_get_amplitude_data(ch_dev_t *dev_ptr, uint16_t *buf_ptr, uint16_t start_sample,
1244  uint16_t num_samples, ch_io_mode_t mode);
1245 
1262 uint16_t ch_samples_to_mm(ch_dev_t *dev_ptr, uint16_t num_samples);
1263 
1281 uint16_t ch_mm_to_samples(ch_dev_t *dev_ptr, uint16_t num_mm);
1282 
1283 
1300 uint16_t ch_iq_to_amplitude(ch_iq_sample_t *iq_sample_ptr);
1301 
1318 uint8_t ch_io_start_nb(ch_group_t *grp_ptr);
1319 
1333 void ch_io_int_callback_set(ch_group_t *grp_ptr, ch_io_int_callback_t callback_func_ptr);
1334 
1345 void ch_io_complete_callback_set(ch_group_t *grp_ptr, ch_io_complete_callback_t callback_func_ptr);
1346 
1360 void ch_io_notify(ch_group_t *grp_ptr, uint8_t i2c_bus_index);
1361 
1375 uint16_t ch_get_threshold(ch_dev_t *dev_ptr, uint8_t threshold_index);
1376 
1391 uint8_t ch_set_threshold(ch_dev_t *dev_ptr, uint8_t threshold_index, uint16_t amplitude);
1392 
1408 uint8_t ch_get_thresholds(ch_dev_t *dev_ptr, ch_thresholds_t *thresh_ptr);
1409 
1429 uint8_t ch_set_thresholds(ch_dev_t *dev_ptr, ch_thresholds_t *thresh_ptr);
1430 
1454 uint8_t ch_set_target_interrupt(ch_dev_t *dev_ptr, uint8_t enable);
1455 
1467 uint8_t ch_get_target_interrupt(ch_dev_t *dev_ptr);
1468 
1485 uint8_t ch_set_static_coeff(ch_dev_t *dev_ptr, uint8_t static_coeff);
1486 
1498 uint8_t ch_get_static_coeff(ch_dev_t *dev_ptr);
1499 
1515 uint8_t ch_set_rx_holdoff(ch_dev_t *dev_ptr, uint16_t num_samples);
1516 
1530 uint16_t ch_get_rx_holdoff(ch_dev_t *dev_ptr);
1531 
1545 uint8_t ch_set_tx_length(ch_dev_t *dev_ptr, uint8_t tx_length);
1546 
1558 uint8_t ch_get_tx_length(ch_dev_t *dev_ptr);
1559 
1571 uint8_t ch_get_rx_pulse_length(ch_dev_t *dev_ptr);
1572 
1602 uint8_t ch_set_time_plan(ch_dev_t *dev_ptr, ch_time_plan_t time_plan);
1603 
1631 
1652 void ch_set_rx_pretrigger(ch_group_t *grp_ptr, uint8_t enable);
1653 
1654 #endif /* __SONICLIB_H_ */
ch_io_complete_callback_t io_complete_callback
Definition: soniclib.h:339
API function pointer structure (internal use).
Definition: soniclib.h:277
Internal definitions for the Chirp CH101 GPR Short-range Open sensor firmware.
void ch_io_notify(ch_group_t *grp_ptr, uint8_t i2c_bus_index)
Notify SonicLib that a non-blocking I/O operation has completed.
uint8_t(* ch_fw_init_func_t)(ch_dev_t *dev_ptr, ch_group_t *grp_ptr, uint8_t i2c_addr, uint8_t dev_num, uint8_t i2c_bus_index)
ASIC firmware init function pointer typedef.
Definition: soniclib.h:232
chdrv_discovery_hook_t disco_hook
Definition: soniclib.h:337
Internal driver functions for operation with the Chirp ultrasonic sensor.
ch_mode_t
Sensor operating modes.
Definition: soniclib.h:158
uint8_t address
Definition: soniclib.h:190
uint8_t ch_get_sample_window(ch_dev_t *dev_ptr, uint16_t *start_sample_ptr, uint16_t *num_samples_ptr)
Get the sample window for amplitude averaging.
Definition: soniclib.h:153
ch_dev_t * device[CHIRP_MAX_NUM_SENSORS]
Definition: soniclib.h:341
uint16_t ch_get_static_range(ch_dev_t *dev_ptr)
Get static target rejection range setting.
uint8_t bus_num
Definition: soniclib.h:191
uint8_t ch_sensor_is_connected(ch_dev_t *dev_ptr)
Indicate if a sensor is connected.
uint8_t ch_set_thresholds(ch_dev_t *dev_ptr, ch_thresholds_t *thresh_ptr)
Set detection thresholds (CH201 only).
uint8_t ch_get_i2c_bus(ch_dev_t *dev_ptr)
Get the active I2C bus for a sensor.
void ch_io_complete_callback_set(ch_group_t *grp_ptr, ch_io_complete_callback_t callback_func_ptr)
Register non-blocking I/O complete callback routine for a group of sensors.
uint16_t ch_get_sample_interval(ch_dev_t *dev_ptr)
Get the internal sample timing interval for a sensor.
Functions for performing fixed point arithmetic. https://github.com/dmoulding/log2fix https://github...
uint8_t ch_get_tx_length(ch_dev_t *dev_ptr)
Get the TX length.
void(* prepare_pulse_timer)(ch_dev_t *dev_ptr)
Definition: soniclib.h:379
uint8_t freqLockValue
Definition: soniclib.h:352
uint16_t ch_get_rx_holdoff(ch_dev_t *dev_ptr)
Get the receive holdoff sample count.
uint8_t ch_get_static_coeff(ch_dev_t *dev_ptr)
Get the static coefficient for IIR filter.
uint8_t ch_set_static_range(ch_dev_t *dev_ptr, uint16_t num_samples)
Configure static target rejection.
void(* store_bandwidth)(ch_dev_t *dev_ptr)
Definition: soniclib.h:388
ch_mode_t mode
Definition: soniclib.h:351
uint8_t ch_get_num_ports(ch_group_t *grp_ptr)
Get the total number of sensor ports (possible sensors) in a sensor group.
uint16_t ch_get_max_samples(ch_dev_t *dev_ptr)
Get the maximum possible sample count per measurement.
ch_time_plan_t
Time plan.
Definition: soniclib.h:181
uint16_t i2c_drv_flags
Definition: soniclib.h:363
uint8_t ch_set_config(ch_dev_t *dev_ptr, ch_config_t *config_ptr)
Set multiple configuration settings for a sensor.
uint8_t ch_get_amplitude_data(ch_dev_t *dev_ptr, uint16_t *buf_ptr, uint16_t start_sample, uint16_t num_samples, ch_io_mode_t mode)
Get the raw amplitude measurement data from a sensor.
uint16_t(* get_fw_ram_init_addr)(void)
Definition: soniclib.h:396
uint32_t ch_get_frequency(ch_dev_t *dev_ptr)
Get the operating frequency of a sensor.
void(* ch_timer_callback_t)(void)
Periodic timer callback routine pointer.
Definition: soniclib.h:320
Internal definitions for the Chirp CH101 Floor Detection enabled firmware.
const uint8_t * ram_init
Definition: soniclib.h:378
void ch_set_rx_pretrigger(ch_group_t *grp_ptr, uint8_t enable)
Enable/disable receive-only sensor pre-triggering.
ch_dev_t * ch_get_dev_ptr(ch_group_t *grp_ptr, uint8_t dev_num)
Get device descriptor pointer for a sensor.
const char * ch_get_fw_version_string(ch_dev_t *dev_ptr)
Get the firmware version description string for a sensor.
Definition: soniclib.h:176
chdrv_i2c_queue_t i2c_queue[CHIRP_NUM_I2C_BUSES]
Definition: soniclib.h:344
uint16_t ch_get_rtc_cal_pulselength(ch_dev_t *dev_ptr)
Get the real-time clock calibration pulse length.
uint8_t ch_get_thresholds(ch_dev_t *dev_ptr, ch_thresholds_t *thresh_ptr)
Get detection thresholds (CH201 only).
uint8_t app_i2c_address
Definition: soniclib.h:362
uint16_t max_range
Definition: soniclib.h:354
uint32_t ch_get_tof_tick(ch_dev_t *dev_ptr, uint32_t timer_freq)
Get the measured Time-of-flight from a sensor in the ultrasound periodic timer tick.
uint8_t sensor_count
Definition: soniclib.h:332
Chirp sensor device structure.
Definition: soniclib.h:349
Definition: soniclib.h:171
uint8_t ch_io_start_nb(ch_group_t *grp_ptr)
Start non-blocking I/O operation(s) for a group of sensors.
uint8_t enable_target_int
Definition: soniclib.h:227
uint16_t ch_get_rtc_cal_result(ch_dev_t *dev_ptr)
Get the real-time clock calibration value.
Definition: soniclib.h:159
void(* store_pt_result)(ch_dev_t *dev_ptr)
Definition: soniclib.h:382
uint8_t ch_set_frequency(ch_dev_t *dev_ptr, uint32_t target_freq_Hz)
Set the operating frequency of a sensor.
uint16_t bandwidth
Definition: soniclib.h:359
uint8_t num_i2c_buses
Definition: soniclib.h:331
Internal definitions for the Chirp CH101 GPR Open sensor firmware.
uint8_t sensor_connected
Definition: soniclib.h:366
uint16_t ch_get_scale_factor(ch_dev_t *dev_ptr)
Get the calibration scale factor of a sensor.
uint8_t ch_get_rx_pulse_length(ch_dev_t *dev_ptr)
Get the detected length of the received pulse.
uint8_t ch_init(ch_dev_t *dev_ptr, ch_group_t *grp_ptr, uint8_t dev_num, ch_fw_init_func_t fw_init_func)
Initialize the device descriptor for a sensor.
uint8_t ch_set_target_interrupt(ch_dev_t *dev_ptr, uint8_t enable)
Set target detection interrupt mode.
int8_t oversample
Definition: soniclib.h:365
int16_t q
Definition: soniclib.h:202
uint8_t i2c_address
Definition: soniclib.h:361
uint8_t ch_set_max_range(ch_dev_t *dev_ptr, uint16_t max_range)
Set the maximum range for a sensor.
uint16_t sample_interval
Definition: soniclib.h:224
uint16_t ch_get_threshold(ch_dev_t *dev_ptr, uint8_t threshold_index)
Get the detection threshold.
uint16_t static_range
Definition: soniclib.h:223
Internal definitions for the Chirp CH101 GPPC sensor firmware.
Sensor I/Q data value.
Definition: soniclib.h:201
ch_io_mode_t
I/O blocking mode flags.
Definition: soniclib.h:175
uint8_t ch_set_tx_length(ch_dev_t *dev_ptr, uint8_t tx_length)
Set the TX length.
uint16_t rtc_cal_result
Definition: soniclib.h:357
uint8_t ch_group_start(ch_group_t *grp_ptr)
Program and start a group of sensors.
uint8_t ch_set_time_plan(ch_dev_t *dev_ptr, ch_time_plan_t time_plan)
Configure sonicsync timing plan.
uint16_t ch_get_max_range(ch_dev_t *dev_ptr)
Get the maximum range setting for a sensor.
uint32_t op_frequency
Definition: soniclib.h:358
uint8_t(* get_locked_state)(ch_dev_t *dev_ptr)
Definition: soniclib.h:392
uint16_t scale_factor
Definition: soniclib.h:360
Chirp sensor group configuration structure.
Definition: soniclib.h:329
uint16_t ch_samples_to_mm(ch_dev_t *dev_ptr, uint16_t num_samples)
Convert sample count to millimeters for a sensor.
uint16_t ch_iq_to_amplitude(ch_iq_sample_t *iq_sample_ptr)
Calculate amplitude from sample I/Q values.
Definition: soniclib.h:164
uint8_t ch_set_sample_window(ch_dev_t *dev_ptr, uint16_t start_sample, uint16_t num_samples)
Set the sample window for amplitude averaging.
Internal definitions for the Chirp CH201 GPR Multi-threshold sensor firmware.
uint16_t num_rx_samples
Definition: soniclib.h:371
uint16_t static_range
Definition: soniclib.h:355
I2C info structure.
Definition: soniclib.h:189
ch_mode_t mode
Definition: soniclib.h:221
uint16_t freqCounterCycles
Definition: soniclib.h:353
uint8_t i2c_bus_index
Definition: soniclib.h:369
uint16_t sample_interval
Definition: soniclib.h:356
uint16_t i2c_drv_flags
Definition: soniclib.h:333
uint16_t drv_flags
Definition: soniclib.h:192
Definition: soniclib.h:160
I2C queue structure, for non-blocking access.
Definition: ch_driver.h:114
uint16_t(* get_fw_ram_init_size)(void)
Definition: soniclib.h:394
ch_io_int_callback_t io_int_callback
Definition: soniclib.h:338
void ch_group_reset(ch_group_t *grp_ptr, ch_reset_t reset_type)
Reset a group of sensors.
uint8_t ch_set_rx_holdoff(ch_dev_t *dev_ptr, uint16_t num_samples)
Set the receive holdoff sample count.
int16_t i
Definition: soniclib.h:203
uint16_t win_start_sample
Definition: soniclib.h:372
uint8_t ch_get_dev_num(ch_dev_t *dev_ptr)
Get device number (I/O index values) for a sensor.
Definition: soniclib.h:152
uint16_t pretrig_delay_us
Definition: soniclib.h:336
uint8_t ch_set_static_coeff(ch_dev_t *dev_ptr, uint8_t static_coeff)
Set the static coefficient for IIR filter.
Definition: soniclib.h:154
uint8_t ch_set_threshold(ch_dev_t *dev_ptr, uint8_t threshold_index, uint16_t amplitude)
Set the detection threshold.
uint8_t ch_get_target_interrupt(ch_dev_t *dev_ptr)
Get the target detection interrupt mode setting.
ch_thresholds_t * thresh_ptr
Definition: soniclib.h:225
uint8_t ch_get_iq_data(ch_dev_t *dev_ptr, ch_iq_sample_t *buf_ptr, uint16_t start_sample, uint16_t num_samples, ch_io_mode_t mode)
Get the raw I/Q measurement data from a sensor.
const char * fw_version_string
Definition: soniclib.h:376
void ch_reset(ch_dev_t *dev_ptr, ch_reset_t reset_type)
Reset a sensor.
uint16_t num_win_samples
Definition: soniclib.h:373
uint16_t max_samples
Definition: soniclib.h:370
uint8_t num_ports
Definition: soniclib.h:330
Definition: soniclib.h:170
uint16_t max_range
Definition: soniclib.h:222
Combined configuration structure.
Definition: soniclib.h:220
uint16_t rtc_cal_pulse_ms
Definition: soniclib.h:335
uint8_t(* ch_fw_load_func_t)(ch_dev_t *dev_ptr)
API function pointer typedefs.
Definition: soniclib.h:236
void(* ch_io_int_callback_t)(ch_group_t *grp_ptr, uint8_t io_index)
Data-ready interrupt callback routine pointer.
Definition: soniclib.h:314
uint32_t ch_get_range(ch_dev_t *dev_ptr, ch_range_t range_type)
Get the measured range from a sensor.
uint16_t ch_get_amplitude_avg(ch_dev_t *dev_ptr)
Get the averaged measured amplitude over the sample window.
uint8_t ch_get_i2c_address(ch_dev_t *dev_ptr)
Get the active I2C address for a sensor.
void(* store_op_freq)(ch_dev_t *dev_ptr)
Definition: soniclib.h:385
uint16_t ch_get_amplitude(ch_dev_t *dev_ptr)
Get the measured amplitude from a sensor.
void ch_trigger(ch_dev_t *dev_ptr)
Trigger a measurement on one sensor.
#define CH_NUM_THRESHOLDS
Definition: soniclib.h:141
uint8_t ch_set_num_samples(ch_dev_t *dev_ptr, uint16_t num_samples)
Set the sensor sample count directly.
uint8_t ch_set_mode(ch_dev_t *dev_ptr, ch_mode_t mode)
Configure a sensor for the specified operating mode.
uint8_t ch_set_sample_interval(ch_dev_t *dev_ptr, uint16_t interval_ms)
Configure the internal sample interval for a sensor in freerunning mode.
uint16_t ch_mm_to_samples(ch_dev_t *dev_ptr, uint16_t num_mm)
Convert millimeters to sample count for a sensor.
void ch_io_int_callback_set(ch_group_t *grp_ptr, ch_io_int_callback_t callback_func_ptr)
Register sensor interrupt callback routine for a group of sensors.
ch_range_t
Range data types.
Definition: soniclib.h:151
Definition: soniclib.h:177
uint8_t num_connected[CHIRP_NUM_I2C_BUSES]
Definition: soniclib.h:343
uint16_t part_number
Definition: soniclib.h:364
ch_mode_t ch_get_mode(ch_dev_t *dev_ptr)
Get the current operating mode for a sensor.
Internal definitions for the Chirp CH201 presence detection sensor firmware.
ch_group_t * group
Definition: soniclib.h:350
Detection threshold value (CH201 only).
Definition: soniclib.h:208
ch_reset_t
Sensor reset types.
Definition: soniclib.h:169
ch_time_plan_t time_plan
Definition: soniclib.h:226
uint16_t ch_get_part_number(ch_dev_t *dev_ptr)
Get part number for a sensor.
Internal definitions for the Chirp CH101 SonicSync sensor firmware.
uint16_t ch_get_num_samples(ch_dev_t *dev_ptr)
Get the number of samples per measurement cycle.
Definition: soniclib.h:162
uint16_t ch_get_bandwidth(ch_dev_t *dev_ptr)
Get the bandwidth of a sensor.
void(* ch_io_complete_callback_t)(ch_group_t *grp_ptr)
Non-blocking I/O complete callback routine pointer.
Definition: soniclib.h:317
const uint8_t * firmware
Definition: soniclib.h:377
Multiple detection threshold structure (CH201 only).
Definition: soniclib.h:215
ch_time_plan_t ch_get_time_plan(ch_dev_t *dev_ptr)
Read sonicsync timing plan.
uint8_t ch_get_config(ch_dev_t *dev_ptr, ch_config_t *config_ptr)
Get current configuration settings for a sensor.
void ch_group_trigger(ch_group_t *grp_ptr)
Trigger a measurement on a group of sensors.
Internal definitions for the Chirp CH201 GPR Static Target Rejection sensor firmware.
uint8_t io_index
Definition: soniclib.h:368
uint8_t(* chdrv_discovery_hook_t)(ch_dev_t *dev_ptr)
Hook routine pointer typedefs.
Definition: ch_driver.h:98
ch_retval
Return value codes.
Definition: soniclib.h:145
ch_api_funcs_t api_funcs
Definition: soniclib.h:400
void(* store_scalefactor)(ch_dev_t *dev_ptr)
Definition: soniclib.h:390