Chirp SonicLib  4.9.0
soniclib.h
Go to the documentation of this file.
1 
95 /*
96  Copyright 2016-2023, InvenSense, Inc. All rights reserved.
97 
98  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
99  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
100  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
101  DISCLAIMED.
102 
103  */
104 
105 #ifndef __SONICLIB_H_
106 #define __SONICLIB_H_
107 
108 #ifdef __cplusplus
109 extern "C" {
110 #endif
111 
112 /*============== SonicLib Version Info ===================*/
113 /* SonicLib API/Driver version */
114 #define SONICLIB_VER_MAJOR (4)
115 #define SONICLIB_VER_MINOR (9)
116 #define SONICLIB_VER_REV (0)
117 #define SONICLIB_VER_SUFFIX ""
119 /***** DO NOT MODIFY ANY VALUES BEYOND THIS POINT! *****/
120 
121 #ifdef INVN_SONICLIB_INTERNAL_BOARD_CONFIG
122 #include <invn/soniclib/details/chirp_board_config.h> /* Header from board support package containing h/w params */
123 #else
124 // Support external board config by default. This was previously assumed to be
125 // directly on the include path.
126 #include "chirp_board_config.h"
127 #endif
128 
129 /* Preliminary structure type definitions to resolve include order */
130 typedef struct ch_dev_t ch_dev_t;
131 typedef struct ch_group_t ch_group_t;
132 typedef struct fw_info_st fw_info_t;
133 
134 /* ICU (second generation) Firmware */
135 #ifdef INCLUDE_SHASTA_SUPPORT
136 #include <invn/icu_interface/shasta_external_regs.h> /* Shasta firmware interface */
138 #include <invn/icu_interface/icu_algo_info.h> /* ICU sensor algorithm interface */
139 #endif
140 
141 /* Miscellaneous header files */
142 
143 #include <invn/soniclib/details/ch_driver.h> /* Internal Chirp driver defines */
144 #include <invn/soniclib/details/ch_math_utils.h> /* math utility functions */
145 
146 #include <stdint.h>
147 #include <stdlib.h>
148 #include <math.h>
149 #include <string.h>
150 
151 /* Chirp sensor part numbers */
152 #define CH101_PART_NUMBER (101)
153 #define CH201_PART_NUMBER (201)
154 #define ICU10201_PART_NUMBER (10201)
155 #define ICU20201_PART_NUMBER (20201)
156 #define ICU30201_PART_NUMBER (30201)
157 #define ICU_UNKNOWN_PART_NUMBER (0)
159 /* Max expected number of samples per measurement (actual value depends on sensor f/w used) */
160 #ifdef INCLUDE_WHITNEY_SUPPORT
161 
162 #define CH101_MAX_NUM_SAMPLES (225)
163 #define CH201_MAX_NUM_SAMPLES (450)
164 #define MAX_NUM_SAMPLES CH201_MAX_NUM_SAMPLES
165 
166 #endif
167 #ifdef INCLUDE_SHASTA_SUPPORT
168 
169 #define ICU_MAX_NUM_SAMPLES (IQ_SAMPLES_MAX)
170 #define MAX_NUM_SAMPLES ICU_MAX_NUM_SAMPLES
171 
172 #endif
173 
174 /* Misc definitions */
175 #define CH_NO_TARGET (0xFFFFFFFF)
176 #define CH_MIN_RANGE_VAL (0x0001)
178 #define CH_DEFAULT_MEAS_NUM (0)
179 #define CH_DEFAULT_TARGET_NUM (0)
181 #define CH_I2C_ADDR_PROG (0x45)
182 #define CH_SIG_BYTE_0 (0x0a)
183 #define CH_SIG_BYTE_1 (0x02)
185 #define CH_RTC_FREQ_TYPICAL (29000)
186 #define CH_PMUT_TICKS_PER_CYCLE (16)
188 #define CH_OP_FREQ_USE_AVG (0)
190 #ifdef MAXTARG
191 #define CH_MAX_NUM_TARGETS (MAXTARG)
192 #else
193 #define CH_MAX_NUM_TARGETS (1)
194 #endif
195 
196 #define CH_SPEEDOFSOUND_MPS (343)
198 #define CH_WINDOW_MAX_SAMPLES (64)
201 typedef enum { RET_OK = 0, RET_ERR = 1 } ch_retval;
202 
204 typedef enum {
210 
212 typedef enum {
215 } ch_asic_gen_t;
216 
218 typedef enum {
222 } ch_range_t;
223 
225 typedef enum {
226  CH_MODE_IDLE = 0x00,
227  CH_MODE_FREERUN = 0x02,
229  CH_MODE_TRIGGERED_TX_RX = 0x10,
234 
238  CH_MODE_CONTINUOUS_RX = 0x40
240 
242 typedef enum ch_group_status {
247 
249 typedef enum {
257 
259 typedef enum {
263 
265 typedef enum {
267  CH_RESET_SOFT = 1
269 
271 typedef enum {
273  CH_TRIGGER_TYPE_SW = 1
275 
277 typedef enum {
281 
283 typedef enum {
287 
288 #ifdef INCLUDE_SHASTA_SUPPORT
290 typedef enum {
291  CH_INTERRUPT_TYPE_UNKNOWN = INT_SRC_NONE,
292  CH_INTERRUPT_TYPE_DATA_RDY = INT_SRC_DATA_RDY,
293  CH_INTERRUPT_TYPE_MUT_FCOUNT = INT_SRC_MUT_FCOUNT_RDY,
294  CH_INTERRUPT_TYPE_CPU_FCOUNT = INT_SRC_CPU_FCOUNT_RDY,
295  CH_INTERRUPT_TYPE_BIST_RDY = INT_SRC_BIST_RDY,
296  CH_INTERRUPT_TYPE_TX_OPTIMIZE = INT_SRC_TX_OPTIMIZE,
297  CH_INTERRUPT_TYPE_RTC_CAL_RDY = INT_SRC_RTC_CAL_RDY,
298  CH_INTERRUPT_TYPE_OTP_COPY = INT_SRC_COPY_OTP_TO_RAM,
299  CH_INTERRUPT_TYPE_OTP_WR_STEP = INT_SRC_OTP_WR_STEP,
300  CH_INTERRUPT_TYPE_WATCHDOG = INT_SRC_WDT_EXPIRY,
301  CH_INTERRUPT_TYPE_PGM_LOADED = INT_SRC_PGM_LOADED,
302  CH_INTERRUPT_TYPE_ALGO_ERROR = INT_SRC_ALGO_ERROR,
303  CH_INTERRUPT_TYPE_DEBUG = INT_SRC_DEBUG,
304  CH_INTERRUPT_TYPE_ERROR = INT_SRC_ERROR
306 
308 typedef enum {
309  CH_OUTPUT_IQ = IQ_OUTPUT_NORMAL,
310  CH_OUTPUT_AMP_THRESH = IQ_OUTPUT_MAG_THRESH,
311  CH_OUTPUT_AMP = IQ_OUTPUT_MAG
313 #else
315 typedef enum {
316  CH_INTERRUPT_TYPE_UNKNOWN = 0x0000,
319 
321 typedef enum {
322  CH_OUTPUT_IQ = 0,
323  CH_OUTPUT_AMP = 2
325 #endif
326 
328 typedef enum {
333 
334 #define CH_TARGET_INT_HIST_MAX (15)
335 #define CH_TARGET_INT_HIST_DEFAULT (5)
336 #define CH_TARGET_INT_THRESH_DEFAULT (3)
339 typedef enum {
347 
349 typedef enum {
353 
355 typedef enum {
363 
364 #define CH_RTC_USE_BUS_SPEED (UINT16_MAX)
367 typedef enum {
371 } ch_rtc_cal_t;
372 
374 typedef enum {
377  1,
380  3,
382 
384 typedef enum {
388 
390 typedef enum {
391  CH_DECIMATION_0_25 = -2,
392  CH_DECIMATION_0_50 = -1,
393  CH_DECIMATION_NONE = 1,
394  CH_DECIMATION_2 = 2,
395  CH_DECIMATION_3 = 3,
396  CH_DECIMATION_4 = 4
398 
400 typedef enum { CH_RESET_STATE_OK = 0, CH_RESET_STATE_ACTIVE = 1 } ch_sensor_reset_state_t;
401 
403 typedef enum { CH_LOG_FMT_REDSWALLOW = 0 } ch_log_fmt_t;
404 
406 typedef enum {
407  CH_DATA_VALIDATION_DISABLE = 0,
408  CH_DATA_VALIDATION_COUNTER = 1,
409  CH_DATA_VALIDATION_PRNG = 2,
411 
413 typedef struct {
414  uint8_t major;
415  uint8_t minor;
416  uint8_t rev;
417 } ch_version_t;
418 
420 typedef struct {
421  uint8_t address;
422  uint8_t bus_num;
423  uint16_t drv_flags;
424 } ch_i2c_info_t;
425 
427 #define I2C_DRV_FLAG_RESET_AFTER_NB (0x00000001)
428 #define I2C_DRV_FLAG_USE_PROG_NB (0x00000002)
431 typedef struct {
432  int16_t q;
433  int16_t i;
435 
437 typedef struct {
438  uint16_t thresh;
439  uint16_t amp;
441 
443 typedef struct {
444  uint16_t start_sample;
445  uint16_t level;
446 } ch_thresh_t;
447 
449 typedef struct {
450  uint16_t dco_period;
451  uint16_t rev_cycles;
453 
455 typedef struct {
456  uint16_t rtc_freq;
457  uint16_t pmut_fcount;
458  uint16_t pmut_trim;
459  uint8_t cpu_trim;
461 
463 typedef struct {
465  uint16_t max_range;
466  uint16_t sample_interval;
468 } ch_config_t;
469 
471 typedef struct {
474 } ch_output_t;
475 
477 typedef struct {
478  uint16_t interval_ms;
481  uint16_t start_sample;
482 } ch_log_cfg_t;
483 
485 typedef struct {
486  uint8_t tx_sensor_id;
487  uint8_t rx_sensor_id;
488  uint32_t range;
489  uint16_t amplitude;
490  uint8_t annotation;
492  union {
494  uint16_t *mag_data_ptr;
495  } raw_data;
496  uint16_t start_sample;
497  uint16_t num_samples;
498 } ch_log_data_t;
499 
501 typedef struct {
502  ch_odr_t odr;
503  uint16_t meas_period;
504  ch_meas_mode_t mode; // 1 if meas initially in standby mode (inactive), 0 if active
506 
507 #ifdef INCLUDE_SHASTA_SUPPORT
508 /* Definitions for ICU-x0201 sensors (Shasta architecture) */
509 
510 #define CH_MEAS_MAX_SEGMENTS (INST_BUF_LENGTH)
511 #define CH_MEAS_MAX_MEAS (MEAS_QUEUE_MAX_MEAS)
513 #define CH_SENSOR_ID_LENGTH 8
516 typedef enum {
517  CH_MEAS_SEG_TYPE_COUNT = 0, // must match PMUT cmd values
518  CH_MEAS_SEG_TYPE_TX = 1,
519  CH_MEAS_SEG_TYPE_RX = 2,
520  CH_MEAS_SEG_TYPE_EOF = 3
522 
524 typedef struct {
525  pmut_transceiver_inst_t inst; // PMUT instruction
526 
528 
530 typedef struct {
531  uint32_t num_cycles;
532  uint16_t num_tx_segments;
533  uint16_t num_rx_samples;
534  uint8_t num_segments;
535  ch_odr_t odr;
536  uint16_t meas_period;
539 
541 typedef struct {
542  ch_meas_seg_type_t type;
543  uint16_t num_rx_samples;
544  uint16_t num_cycles;
545  uint8_t rdy_int_en;
546  uint8_t done_int_en;
547  uint8_t tx_phase;
548  uint8_t tx_pulse_width;
549  uint8_t rx_gain;
550  uint8_t rx_atten;
552 
554 typedef struct {
555  uint8_t int_config; // interrupt pin selection
556  uint8_t meas_start; // which measurement do we start on
557  uint8_t meas_stop; // which measurement do we stop on
558  uint8_t current_meas; // which measurement do we do next
559  uint8_t trig_src; // trigger source: falling edge of INT1 or INT2, or internal timer
560  uint8_t last_meas; // last completed measurement
562 
564 typedef struct {
565  uint16_t mfg_year;
566  uint8_t mfg_week;
567  uint8_t mfg_site;
568  uint8_t product_code; // numeric value for product type (e.g. ICU-20201, ICU-10201, etc)
569  uint8_t package_code; // numeric value for package type (e.g. added microcap, changed bondwires)
570  uint8_t mems_code; // numeric value for mems transducer type (e.g. CH101/201/CypressZ1/A1)
571  uint8_t module_code; // numeric value for module type
572 } ch_mfg_info_t;
573 
574 #endif // INCLUDE_SHASTA_SUPPORT
575 
577 typedef uint8_t (*ch_get_config_func_t)(ch_dev_t *dev_ptr, ch_config_t *config_ptr);
578 typedef uint8_t (*ch_set_config_func_t)(ch_dev_t *dev_ptr, ch_config_t *config_ptr);
579 typedef uint8_t (*ch_set_num_samples_func_t)(ch_dev_t *dev_ptr, uint16_t num_samples);
580 typedef uint8_t (*ch_set_sample_window_func_t)(ch_dev_t *dev_ptr, uint16_t start_sample, uint16_t end_sample);
581 typedef uint32_t (*ch_get_range_func_t)(ch_dev_t *dev_ptr, ch_range_t range_type);
582 typedef uint16_t (*ch_get_amplitude_func_t)(ch_dev_t *dev_ptr);
583 typedef uint16_t (*ch_get_amplitude_avg_func_t)(ch_dev_t *dev_ptr);
584 typedef uint8_t (*ch_set_frequency_func_t)(ch_dev_t *dev_ptr, uint32_t target_freq_Hz);
585 typedef uint8_t (*ch_get_iq_data_func_t)(ch_dev_t *dev_ptr, ch_iq_sample_t *buf_ptr, uint16_t start_sample,
586  uint16_t num_samples, ch_io_mode_t io_mode);
587 typedef uint8_t (*ch_get_amplitude_data_func_t)(ch_dev_t *dev_ptr, uint16_t *buf_ptr, uint16_t start_sample,
588  uint16_t num_samples, ch_io_mode_t io_mode);
589 typedef uint16_t (*ch_mm_to_samples_func_t)(ch_dev_t *dev_ptr, uint16_t num_mm);
590 typedef uint8_t (*ch_set_target_interrupt_func_t)(ch_dev_t *dev_ptr, ch_tgt_int_filter_t tgt_int_filter);
591 typedef ch_tgt_int_filter_t (*ch_get_target_interrupt_func_t)(ch_dev_t *dev_ptr);
592 typedef uint8_t (*ch_set_target_int_counter_func_t)(ch_dev_t *dev_ptr, uint8_t meas_hist, uint8_t thresh_count,
593  uint8_t reset);
594 typedef uint8_t (*ch_get_target_int_counter_func_t)(ch_dev_t *dev_ptr, uint8_t *meas_hist_ptr,
595  uint8_t *thresh_count_ptr, uint8_t *reset_ptr);
596 typedef uint8_t (*ch_set_rx_low_gain_func_t)(ch_dev_t *dev_ptr, uint16_t num_samples);
597 typedef uint16_t (*ch_get_rx_low_gain_func_t)(ch_dev_t *dev_ptr);
598 typedef uint8_t (*ch_set_tx_length_func_t)(ch_dev_t *dev_ptr, uint16_t tx_length);
599 typedef uint16_t (*ch_get_tx_length_func_t)(ch_dev_t *dev_ptr);
600 typedef uint8_t (*ch_set_cal_result_func_t)(ch_dev_t *dev_ptr, ch_cal_result_t *cal_ptr);
601 typedef uint8_t (*ch_get_cal_result_func_t)(ch_dev_t *dev_ptr, ch_cal_result_t *cal_ptr);
602 typedef uint8_t (*ch_set_data_output_func_t)(ch_dev_t *dev_ptr, const ch_output_t *output);
603 typedef void (*ch_trigger_soft_func_t)(ch_dev_t *dev_ptr);
604 typedef uint8_t (*ch_set_data_ready_delay_func_t)(ch_dev_t *dev_ptr, uint8_t num_cycles);
605 typedef uint8_t (*ch_get_data_ready_delay_func_t)(ch_dev_t *dev_ptr);
606 typedef ch_meas_status_t (*ch_meas_get_status_func_t)(ch_dev_t *dev_ptr, uint8_t meas_num);
607 
608 #ifdef INCLUDE_SHASTA_SUPPORT
609 typedef ch_output_type_t (*ch_meas_get_iq_output_func_t)(ch_dev_t *dev_ptr, uint8_t meas_num);
610 typedef uint8_t (*ch_meas_set_iq_output_func_t)(ch_dev_t *dev_ptr, uint8_t meas_num, ch_output_type_t output_format);
611 #endif
612 
614 typedef struct {
615  ch_set_num_samples_func_t set_num_samples;
616  ch_set_sample_window_func_t set_sample_window;
617  ch_get_range_func_t get_range;
618  ch_get_amplitude_func_t get_amplitude;
619  ch_get_amplitude_avg_func_t get_amplitude_avg;
620  ch_set_frequency_func_t set_frequency;
621  ch_get_iq_data_func_t get_iq_data;
622  ch_get_amplitude_data_func_t get_amplitude_data;
623  ch_mm_to_samples_func_t mm_to_samples;
624  ch_set_target_interrupt_func_t set_target_interrupt;
625  ch_get_target_interrupt_func_t get_target_interrupt;
626  ch_set_target_int_counter_func_t set_target_int_counter;
627  ch_get_target_int_counter_func_t get_target_int_counter;
628  ch_set_rx_low_gain_func_t set_rx_low_gain;
629  ch_get_rx_low_gain_func_t get_rx_low_gain;
630  ch_set_tx_length_func_t set_tx_length;
631  ch_get_tx_length_func_t get_tx_length;
632  ch_set_cal_result_func_t set_cal_result;
633  ch_get_cal_result_func_t get_cal_result;
634  ch_set_data_output_func_t set_data_output;
635  ch_trigger_soft_func_t trigger_soft;
636  ch_set_data_ready_delay_func_t set_data_ready_delay;
637  ch_get_data_ready_delay_func_t get_data_ready_delay;
638  ch_meas_get_status_func_t meas_get_status;
639 #ifdef INCLUDE_SHASTA_SUPPORT
640  ch_meas_get_iq_output_func_t meas_get_iq_output;
641  ch_meas_set_iq_output_func_t meas_set_iq_output;
642 #endif
643  // Range finding specific
644  const void *algo_specific_api;
646 
647 typedef struct {
648  void (*prepare_pulse_timer)(ch_dev_t *dev_ptr);
651  void (*store_pt_result)(ch_dev_t *dev_ptr);
654  void (*store_op_freq)(ch_dev_t *dev_ptr);
657  void (*store_bandwidth)(ch_dev_t *dev_ptr);
659  void (*store_scalefactor)(ch_dev_t *dev_ptr);
661  uint8_t (*get_locked_state)(ch_dev_t *dev_ptr);
664 
665 struct fw_info_st {
666  /* Sensor Firmware-specific Linkage Definitions */
667  const char *fw_version_string;
668  const uint8_t *fw_text;
669  const uint8_t *fw_vec;
670  const uint8_t *ram_init;
671  uint16_t (*get_fw_ram_init_size)(void);
673  uint16_t (*get_fw_ram_init_addr)(void);
675  /* Functions used for sensor calibration */
676  const ch_calib_funcs_t *const calib_funcs;
677  /* API and callback functions */
678  const ch_api_funcs_t *const api_funcs;
679  uint16_t fw_text_size;
680  uint16_t fw_vec_size;
682  uint16_t max_samples;
683  const uint16_t freqCounterCycles;
684  const uint8_t freqLockValue;
685  const int8_t oversample;
686  const uint8_t max_num_thresholds;
687  /* Sensor Firmware infos */
688  const uint8_t fw_includes_sensor_init : 1;
689  const uint8_t fw_includes_tx_optimization : 1;
690  const uint8_t reserved : 6;
691 };
692 
694 typedef uint8_t (*ch_fw_init_func_t)(ch_dev_t *dev_ptr, fw_info_t **fw_info);
695 
697 typedef void (*ch_io_int_callback_t)(ch_group_t *grp_ptr, uint8_t io_index, ch_interrupt_type_t int_type);
698 
700 typedef void (*ch_io_complete_callback_t)(ch_group_t *grp_ptr);
701 
703 typedef void (*ch_timer_callback_t)(void);
704 
706 
711 struct ch_group_t {
713  uint8_t num_ports;
714  uint8_t sensor_int_pin;
715  uint8_t sensor_trig_pin;
716  uint8_t num_buses;
717  uint8_t sensor_count;
719  uint32_t op_frequency;
720  uint32_t pmut_clock_freq;
721  uint32_t io_bus_speed_hz;
722  uint16_t i2c_drv_flags;
724  uint16_t rtc_cal_pulse_ms;
725  uint16_t pretrig_delay_us;
729  ch_dev_t *device[CHIRP_MAX_NUM_SENSORS];
731 #ifdef INCLUDE_WHITNEY_SUPPORT
732  uint8_t num_connected[CHIRP_NUM_BUSES];
733 #endif
734  chdrv_queue_t queue[CHIRP_NUM_BUSES];
736 };
737 
739 struct ch_dev_t {
741 #ifdef INCLUDE_SHASTA_SUPPORT
742  char id_string[CH_SENSOR_ID_LENGTH];
743  shasta_config_t *sens_cfg_addr;
744 #endif
747  uint16_t max_range;
748  uint16_t static_range;
749  uint32_t freerun_intvl_us;
751  uint16_t rtc_cal_result;
753  uint32_t orig_pmut_freq;
754  uint32_t op_frequency;
755  uint32_t cpu_frequency;
756  uint16_t rtc_frequency;
757 #ifdef INCLUDE_SHASTA_SUPPORT
758  uint16_t fcount_cycles;
759  uint16_t pmut_clock_fcount;
760  uint8_t cpu_trim;
761  uint16_t pmut_trim;
762 #endif
763  uint16_t bandwidth;
764  uint16_t amp_scale_factor;
765  uint16_t tof_scale_factor;
766 #ifdef INCLUDE_WHITNEY_SUPPORT
767  uint8_t i2c_address;
768  uint8_t app_i2c_address;
769  uint16_t i2c_drv_flags;
770 #endif
771  uint8_t bus_index;
772  uint16_t part_number;
775  uint8_t io_index;
776  uint16_t num_rx_samples;
777  uint16_t win_start_sample;
778  uint16_t num_win_samples;
787 #ifdef INCLUDE_SHASTA_SUPPORT
790  uint8_t asic_ready;
794  int16_t mq_sanitize_enabled; /* !< Perform mq sanitization step when non-zero */
795 
799  /* Sensor measurement queue */
800  measurement_queue_t meas_queue;
802  uint8_t meas_num_segments[CH_MEAS_MAX_MEAS]; // number of active segments per measurement
803  uint32_t meas_num_cycles[CH_MEAS_MAX_MEAS]; // total number of sensor cycles per measurement
804  uint16_t meas_num_tx_segments[CH_MEAS_MAX_MEAS]; // total number of transmit segments per measurement
805  uint16_t meas_pre_rx_cycles[CH_MEAS_MAX_MEAS]; // total number of sensor cycles in segments before first read
806  uint16_t meas_num_rx_samples[CH_MEAS_MAX_MEAS]; // total number of receive samples per measurement
807  uint16_t meas_max_range_mm[CH_MEAS_MAX_MEAS]; // max range setting based on num_rx_samples (millimeters)
808 
810  uint8_t is_continuous;
811  uint8_t odr_out;
813  uint16_t num_iq_bytes;
814  uint16_t buf_addr;
816  /* Sensor algorithm */
819  void *algo_cfg_ptr;
821 #endif // INCLUDE_SHASTA_SUPPORT
822 };
823 
824 /*============== API function prototypes and documentation ===================*/
825 
844 uint8_t ch_group_init(ch_group_t *grp_ptr, uint8_t num_devices, uint8_t num_buses, uint16_t rtc_cal_pulse_ms);
845 
885 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);
886 
904 uint8_t ch_set_init_firmware(ch_dev_t *dev_ptr, ch_fw_init_func_t fw_init_func);
905 
939 uint8_t ch_group_start(ch_group_t *grp_ptr);
940 
966 uint8_t ch_restart(ch_dev_t *dev_ptr);
967 
988 uint8_t ch_group_restart(ch_group_t *grp_ptr);
989 
1005 uint8_t ch_get_config(ch_dev_t *dev_ptr, ch_config_t *config_ptr);
1006 
1025 uint8_t ch_set_config(ch_dev_t *dev_ptr, ch_config_t *config_ptr);
1026 
1042 void ch_trigger(ch_dev_t *dev_ptr);
1043 
1063 void ch_group_trigger(ch_group_t *grp_ptr);
1064 
1074 void ch_reset(ch_dev_t *dev_ptr, ch_reset_t reset_type);
1075 
1085 void ch_group_reset(ch_group_t *grp_ptr, ch_reset_t reset_type);
1086 
1093 uint8_t ch_sensor_is_connected(ch_dev_t *dev_ptr);
1094 
1105 uint16_t ch_get_part_number(ch_dev_t *dev_ptr);
1106 
1118 uint8_t ch_get_dev_num(ch_dev_t *dev_ptr);
1119 
1131 ch_dev_t *ch_get_dev_ptr(ch_group_t *grp_ptr, uint8_t dev_num);
1132 
1144 uint8_t ch_get_num_ports(ch_group_t *grp_ptr);
1145 
1159 uint8_t ch_get_i2c_address(ch_dev_t *dev_ptr);
1160 
1172 uint8_t ch_get_bus(ch_dev_t *dev_ptr);
1173 
1191 void ch_get_version(ch_version_t *version_ptr);
1192 
1203 const char *ch_get_fw_version_string(ch_dev_t *dev_ptr);
1204 
1218 ch_mode_t ch_get_mode(ch_dev_t *dev_ptr);
1219 
1238 uint8_t ch_set_mode(ch_dev_t *dev_ptr, ch_mode_t mode);
1239 
1253 uint16_t ch_get_sample_interval(ch_dev_t *dev_ptr);
1254 
1267 uint16_t ch_get_freerun_interval(ch_dev_t *dev_ptr);
1268 
1281 uint32_t ch_get_freerun_interval_us(ch_dev_t *dev_ptr);
1282 
1296 uint16_t ch_get_freerun_interval_ticks(ch_dev_t *dev_ptr);
1297 
1314 uint8_t ch_set_sample_interval(ch_dev_t *dev_ptr, uint16_t interval_ms);
1315 
1337 uint8_t ch_set_freerun_interval(ch_dev_t *dev_ptr, uint16_t interval_ms);
1338 
1357 uint8_t ch_set_freerun_interval_us(ch_dev_t *dev_ptr, uint32_t interval_us);
1358 
1377 uint8_t ch_set_freerun_interval_ticks(ch_dev_t *dev_ptr, uint32_t interval_ticks);
1378 
1397 uint8_t ch_freerun_time_hop_enable(ch_dev_t *dev_ptr);
1398 
1414 uint8_t ch_freerun_time_hop_disable(ch_dev_t *dev_ptr);
1415 
1439 uint16_t ch_get_num_samples(ch_dev_t *dev_ptr);
1440 
1466 uint8_t ch_set_num_samples(ch_dev_t *dev_ptr, uint16_t num_samples);
1467 
1484 uint16_t ch_get_max_samples(ch_dev_t *dev_ptr);
1485 
1502 uint16_t ch_get_max_range(ch_dev_t *dev_ptr);
1503 
1522 uint8_t ch_set_max_range(ch_dev_t *dev_ptr, uint16_t max_range);
1523 
1545 uint8_t ch_get_sample_window(ch_dev_t *dev_ptr, uint16_t *start_sample_ptr, uint16_t *num_samples_ptr);
1546 
1567 uint8_t ch_set_sample_window(ch_dev_t *dev_ptr, uint16_t start_sample, uint16_t num_samples);
1568 
1606 uint32_t ch_get_range(ch_dev_t *dev_ptr, ch_range_t range_type);
1607 
1622 uint16_t ch_get_amplitude(ch_dev_t *dev_ptr);
1623 
1642 uint16_t ch_get_amplitude_avg(ch_dev_t *dev_ptr);
1643 
1657 uint16_t ch_get_bandwidth(ch_dev_t *dev_ptr);
1658 
1689 uint8_t ch_set_frequency(ch_dev_t *dev_ptr, uint32_t request_op_freq_hz);
1690 
1706 uint32_t ch_get_frequency(ch_dev_t *dev_ptr);
1707 
1749 uint8_t ch_group_set_frequency(ch_group_t *grp_ptr, uint32_t request_op_freq_hz);
1750 
1771 uint32_t ch_group_get_frequency(ch_group_t *grp_ptr);
1772 
1784 uint16_t ch_get_rtc_cal_result(ch_dev_t *dev_ptr);
1785 
1801 uint16_t ch_get_rtc_cal_pulselength(ch_dev_t *dev_ptr);
1802 
1816 uint16_t ch_get_scale_factor(ch_dev_t *dev_ptr);
1817 
1896 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,
1897  ch_io_mode_t mode);
1898 
1976 uint8_t ch_get_amplitude_data(ch_dev_t *dev_ptr, uint16_t *buf_ptr, uint16_t start_sample, uint16_t num_samples,
1977  ch_io_mode_t mode);
1978 
2005 uint8_t ch_get_amp_thresh_data(ch_dev_t *dev_ptr, ch_amp_thresh_t *buf_ptr, uint16_t start_sample, uint16_t num_samples,
2006  ch_io_mode_t mode);
2007 
2039 uint16_t ch_samples_to_mm(ch_dev_t *dev_ptr, uint16_t num_samples);
2040 
2076 uint16_t ch_mm_to_samples(ch_dev_t *dev_ptr, uint16_t num_mm);
2077 
2094 uint16_t ch_iq_to_amplitude(ch_iq_sample_t *iq_sample_ptr);
2095 
2112 uint8_t ch_io_start_nb(ch_group_t *grp_ptr);
2113 
2140 uint8_t ch_minimal_int_handler(ch_group_t *grp_ptr, uint8_t dev_num);
2141 
2165 void ch_interrupt(ch_group_t *grp_ptr, uint8_t dev_num);
2166 
2180 void ch_io_int_callback_set(ch_group_t *grp_ptr, ch_io_int_callback_t callback_func_ptr);
2181 
2192 void ch_io_complete_callback_set(ch_group_t *grp_ptr, ch_io_complete_callback_t callback_func_ptr);
2193 
2207 void ch_io_notify(ch_group_t *grp_ptr, uint8_t bus_index);
2208 
2259 uint8_t ch_set_target_interrupt(ch_dev_t *dev_ptr, ch_tgt_int_filter_t tgt_int_filter);
2260 
2282 
2328 uint8_t ch_set_target_int_counter(ch_dev_t *dev_ptr, uint8_t meas_hist, uint8_t thresh_count, uint8_t reset);
2329 
2358 uint8_t ch_get_target_int_counter(ch_dev_t *dev_ptr, uint8_t *meas_hist_ptr, uint8_t *thresh_count_ptr,
2359  uint8_t *reset_ptr);
2360 
2382 uint8_t ch_set_interrupt_mode(ch_dev_t *dev_ptr, ch_interrupt_mode_t mode);
2383 
2397 
2423 uint8_t ch_set_interrupt_drive(ch_dev_t *dev_ptr, ch_interrupt_drive_t drive);
2424 
2440 
2460 uint8_t ch_enable_data_validation(ch_dev_t *dev_ptr, int16_t seed, ch_data_validation_mode_t mode);
2461 
2474 uint16_t ch_data_validation_check(ch_dev_t *dev_ptr, ch_iq_sample_t *data, uint16_t num_samples);
2475 
2499 uint8_t ch_enable_double_buffer(ch_dev_t *dev_ptr, uint8_t enable);
2500 
2515 uint8_t ch_enable_metadata_in_iq0(ch_dev_t *dev_ptr, uint8_t enable);
2516 
2543 uint8_t ch_update_metadata_from_iq0(ch_dev_t *dev_ptr, ch_iq_sample_t *iq_data);
2544 
2564 uint8_t ch_set_rx_holdoff(ch_dev_t *dev_ptr, uint16_t num_samples);
2565 
2585 uint16_t ch_get_rx_holdoff(ch_dev_t *dev_ptr);
2586 
2606 uint8_t ch_set_rx_low_gain(ch_dev_t *dev_ptr, uint16_t num_samples);
2607 
2628 uint16_t ch_get_rx_low_gain(ch_dev_t *dev_ptr);
2629 
2651 uint8_t ch_set_tx_length(ch_dev_t *dev_ptr, uint16_t num_cycles);
2652 
2673 uint16_t ch_get_tx_length(ch_dev_t *dev_ptr);
2674 
2699 uint8_t ch_set_rx_pretrigger(ch_group_t *grp_ptr, uint8_t enable);
2700 
2713 uint8_t ch_get_rx_pretrigger(ch_group_t *grp_ptr);
2714 
2727 uint8_t ch_check_program(ch_dev_t *dev_ptr);
2728 
2750 uint8_t ch_set_cal_result(ch_dev_t *dev_ptr, ch_cal_result_t *cal_ptr);
2751 
2766 uint8_t ch_get_cal_result(ch_dev_t *dev_ptr, ch_cal_result_t *cal_ptr);
2767 
2803 uint8_t ch_set_data_output(ch_dev_t *dev_ptr, ch_output_t *output_ptr);
2804 
2826 uint32_t ch_usec_to_cycles(ch_dev_t *dev_ptr, uint32_t num_usec);
2827 
2849 uint32_t ch_cycles_to_usec(ch_dev_t *dev_ptr, uint32_t num_cycles);
2850 
2869 uint32_t ch_samples_to_cycles(uint16_t num_samples, ch_odr_t odr);
2870 
2889 uint16_t ch_cycles_to_samples(uint32_t num_cycles, ch_odr_t odr);
2890 
2904 uint16_t ch_usec_to_ticks(ch_dev_t *dev_ptr, uint32_t num_usec);
2905 
2919 uint32_t ch_ticks_to_usec(ch_dev_t *dev_ptr, uint16_t num_ticks);
2920 
2921 #ifdef INCLUDE_SHASTA_SUPPORT
2922 
2933 uint8_t ch_meas_init_queue(ch_dev_t *dev_ptr);
2934 
2959 uint8_t ch_meas_import(ch_dev_t *dev_ptr, measurement_queue_t *meas_queue_ptr, void *algo_cfg_ptr);
2960 
2975 uint8_t ch_meas_reset(ch_dev_t *dev_ptr, uint8_t meas_num);
2976 
2999 uint8_t ch_meas_init(ch_dev_t *dev_ptr, uint8_t meas_num, const ch_meas_config_t *meas_config_ptr,
3000  const void *thresh_ptr);
3001 
3018 uint8_t ch_meas_write_config(ch_dev_t *dev_ptr);
3019 
3069 uint8_t ch_meas_optimize(ch_dev_t *dev_ptr, measurement_queue_t *meas_queue_ptr, void *algo_cfg_ptr);
3070 
3094 void ch_meas_activate(ch_dev_t *dev_ptr, uint8_t meas_num);
3095 
3116 void ch_meas_standby(ch_dev_t *dev_ptr, uint8_t meas_num);
3117 
3141 uint8_t ch_meas_switch(ch_dev_t *dev_ptr);
3142 
3156 uint8_t ch_meas_get_last_num(ch_dev_t *dev_ptr);
3157 
3172 uint16_t ch_get_next_buf_addr(ch_dev_t *dev_ptr);
3173 
3192 uint8_t ch_meas_get_queue(ch_dev_t *dev_ptr, measurement_queue_t *meas_queue_ptr);
3193 
3209 uint8_t ch_meas_add_segment(ch_dev_t *dev_ptr, uint8_t meas_num, ch_meas_segment_t *seg_ptr);
3210 
3226 uint8_t ch_meas_insert_segment(ch_dev_t *dev_ptr, uint8_t meas_num, const ch_meas_segment_t *inst_ptr,
3227  uint8_t index_to_insert);
3228 
3243 uint8_t ch_meas_insert_instruction(ch_dev_t *dev_ptr, uint8_t meas_num, const ch_meas_segment_t *inst_ptr,
3244  uint8_t index_to_insert);
3245 
3260 uint8_t ch_meas_remove_segment(ch_dev_t *dev_ptr, uint8_t meas_num, uint8_t index_to_remove);
3261 
3275 uint8_t ch_meas_remove_instruction(ch_dev_t *dev_ptr, uint8_t meas_num, uint8_t index_to_remove);
3276 
3294 uint8_t ch_meas_add_segment_count(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_cycles, uint8_t int_enable);
3295 
3312 uint8_t ch_meas_add_segment_rx(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_samples, uint8_t gain_reduce,
3313  uint8_t atten, uint8_t int_enable);
3314 
3335 uint8_t ch_meas_add_segment_tx(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_cycles, uint8_t pulse_width,
3336  uint8_t phase, uint8_t int_enable);
3337 
3355 void ch_meas_init_segment_count(ch_meas_segment_t *seg_ptr, uint16_t num_cycles, uint8_t int_enable);
3356 
3378 void ch_meas_init_segment_rx(ch_meas_segment_t *seg_ptr, uint16_t num_samples, ch_odr_t odr, uint8_t gain_reduce,
3379  uint8_t atten, uint8_t int_enable);
3380 
3400 void ch_meas_init_segment_tx(ch_meas_segment_t *seg_ptr, uint16_t num_cycles, uint8_t pulse_width, uint8_t phase,
3401  uint8_t int_enable);
3402 
3426 void ch_meas_get_info(ch_dev_t *dev_ptr, uint8_t meas_num, ch_meas_info_t *info_ptr);
3427 
3446 void ch_meas_get_queue_info(ch_dev_t *dev_ptr, ch_meas_queue_info_t *info_ptr);
3447 
3472 void ch_meas_get_seg_info(ch_dev_t *dev_ptr, uint8_t meas_num, uint8_t seg_num, ch_meas_seg_info_t *info_ptr);
3473 
3497 void ch_inst_get_seg_info(pmut_transceiver_inst_t *inst_ptr, uint8_t odr, ch_meas_seg_info_t *info_ptr);
3498 
3517 uint8_t ch_meas_set_interval(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t interval_ms);
3518 
3534 uint8_t ch_meas_set_interval_us(ch_dev_t *dev_ptr, uint8_t meas_num, uint32_t interval_us);
3535 
3551 uint8_t ch_meas_set_interval_ticks(ch_dev_t *dev_ptr, uint8_t meas_num, uint32_t rtc_ticks);
3552 
3565 uint16_t ch_meas_get_interval(ch_dev_t *dev_ptr, uint8_t meas_num);
3566 
3579 uint32_t ch_meas_get_interval_us(ch_dev_t *dev_ptr, uint8_t meas_num);
3580 
3593 uint32_t ch_meas_get_interval_ticks(ch_dev_t *dev_ptr, uint8_t meas_num);
3594 
3613 uint8_t ch_meas_time_hop_enable(ch_dev_t *dev_ptr, uint8_t meas_num);
3614 
3630 uint8_t ch_meas_time_hop_disable(ch_dev_t *dev_ptr, uint8_t meas_num);
3631 
3651 uint8_t ch_meas_set_odr(ch_dev_t *dev_ptr, uint8_t meas_num, ch_odr_t odr);
3652 
3667 ch_odr_t ch_meas_get_odr(ch_dev_t *dev_ptr, uint8_t meas_num);
3668 
3693 uint8_t ch_meas_set_num_samples(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_samples);
3694 
3713 uint16_t ch_meas_get_num_samples(ch_dev_t *dev_ptr, uint8_t meas_num);
3714 
3739 uint8_t ch_meas_set_max_range(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t max_range_mm);
3740 
3757 uint16_t ch_meas_get_max_range(ch_dev_t *dev_ptr, uint8_t meas_num);
3758 
3783 uint16_t ch_meas_mm_to_samples(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_mm);
3784 
3817 uint16_t ch_meas_samples_to_mm(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_samples);
3818 
3834 ch_output_type_t ch_meas_get_iq_output(ch_dev_t *dev_ptr, uint8_t meas_num);
3835 
3853 uint8_t ch_meas_set_iq_output(ch_dev_t *dev_ptr, uint8_t meas_num, ch_output_type_t output_format);
3854 
3871 uint8_t ch_init_algo(ch_dev_t *dev_ptr);
3872 
3888 uint8_t ch_get_algo_output(ch_dev_t *dev_ptr, void *algo_out_ptr);
3889 
3905 uint8_t ch_get_algo_state(ch_dev_t *dev_ptr, void *algo_state_ptr);
3906 
3922 uint8_t ch_get_algo_config(ch_dev_t *dev_ptr, void *algo_cfg_ptr);
3923 
3939 uint8_t ch_set_algo_config(ch_dev_t *dev_ptr, const void *algo_cfg_ptr);
3940 
3956 uint8_t ch_get_algo_info(ch_dev_t *dev_ptr, ICU_ALGO_SHASTA_INFO *algo_info_ptr);
3957 
3976 const char *ch_get_sensor_id(ch_dev_t *dev_ptr);
3977 
3998 uint8_t ch_get_mfg_info(ch_dev_t *dev_ptr, ch_mfg_info_t *info_ptr);
3999 
4011 uint32_t ch_measure_pmut_frequency(ch_dev_t *dev_ptr);
4012 
4013 #endif // INCLUDE_SHASTA_SUPPORT
4014 
4025 uint32_t ch_get_cpu_frequency(ch_dev_t *dev_ptr);
4026 
4133 uint8_t ch_set_rtc(ch_dev_t *dev_ptr, ch_rtc_src_t rtc_source, uint16_t rtc_freq);
4134 
4145 uint16_t ch_get_rtc_frequency(ch_dev_t *dev_ptr);
4146 
4216 uint8_t ch_set_pmut_clock(ch_dev_t *dev_ptr, ch_pmut_clk_cfg_t clock_cfg);
4217 
4232 
4265 void ch_group_set_pmut_clock_freq(ch_group_t *grp_ptr, uint32_t pmut_clock_freq);
4266 
4292 uint32_t ch_group_get_pmut_clock_freq(ch_group_t *grp_ptr);
4293 
4319 uint8_t ch_set_data_ready_delay(ch_dev_t *dev_ptr, uint8_t delay_ms);
4320 
4335 uint8_t ch_get_data_ready_delay(ch_dev_t *dev_ptr);
4336 
4356 uint16_t ch_get_num_output_samples(ch_dev_t *dev_ptr);
4357 
4374 void ch_trigger_soft(ch_dev_t *dev_ptr);
4375 
4401 void ch_set_trigger_type(ch_dev_t *dev_ptr, ch_trigger_type_t trig_type);
4402 
4422 
4446 ch_meas_status_t ch_meas_get_status(ch_dev_t *dev_ptr, uint8_t meas_num);
4447 
4459 uint8_t ch_log_init(ch_group_t *grp_ptr, ch_log_fmt_t format, ch_log_cfg_t *config_ptr);
4460 
4475 void ch_log_append(uint8_t log_id, ch_log_fmt_t format, uint64_t timestamp, ch_log_data_t *log_data_ptr);
4476 
4500 uint8_t ch_watchdog_enable(ch_dev_t *dev_ptr);
4501 
4516 uint8_t ch_watchdog_disable(ch_dev_t *dev_ptr);
4517 
4534 uint8_t ch_check_reset_state(ch_dev_t *dev_ptr, ch_sensor_reset_state_t *reset_state_ptr);
4535 
4536 #ifdef __cplusplus
4537 }
4538 #endif
4539 
4540 #endif /* __SONICLIB_H_ */
Internal driver functions for operation with the Chirp ultrasonic sensor.
Functions for performing fixed point arithmetic. https://github.com/dmoulding/log2fix https://github....
Internal definitions for TDK/Chirp ICU ultrasonic sensors.
ch_meas_status_t
Measurement status.
Definition: soniclib.h:249
@ CH_MEAS_STATUS_INIT
Definition: soniclib.h:251
@ CH_MEAS_STATUS_DONE
Definition: soniclib.h:255
@ CH_MEAS_STATUS_TX_OPT
Definition: soniclib.h:252
@ CH_MEAS_STATUS_UNKNOWN
Definition: soniclib.h:250
@ CH_MEAS_STATUS_OK
Definition: soniclib.h:253
@ CH_MEAS_STATUS_PENDING
Definition: soniclib.h:254
void ch_set_trigger_type(ch_dev_t *dev_ptr, ch_trigger_type_t trig_type)
Set the trigger type for a sensor.
Definition: ch_api.c:192
uint8_t ch_meas_add_segment(ch_dev_t *dev_ptr, uint8_t meas_num, ch_meas_segment_t *seg_ptr)
Add a segment to a measurement.
Definition: ch_api.c:1051
uint8_t ch_check_program(ch_dev_t *dev_ptr)
Check sensor firmware program.
Definition: ch_api.c:952
void ch_meas_get_seg_info(ch_dev_t *dev_ptr, uint8_t meas_num, uint8_t seg_num, ch_meas_seg_info_t *info_ptr)
Get configuration information for a measurement segment.
Definition: ch_api.c:1172
uint8_t ch_get_mfg_info(ch_dev_t *dev_ptr, ch_mfg_info_t *info_ptr)
Get manufacturing information for a sensor.
Definition: ch_api.c:1041
uint8_t ch_set_algo_config(ch_dev_t *dev_ptr, const void *algo_cfg_ptr)
Set the measurement algorithm configuration data to a sensor.
Definition: ch_api.c:1289
ch_interrupt_drive_t ch_get_interrupt_drive(ch_dev_t *dev_ptr)
Get the pulse interrupt drive setting.
Definition: ch_api.c:786
uint8_t ch_enable_metadata_in_iq0(ch_dev_t *dev_ptr, uint8_t enable)
Enable or disable placing metadata in the first IQ sample.
Definition: ch_api.c:858
uint8_t ch_set_cal_result(ch_dev_t *dev_ptr, ch_cal_result_t *cal_ptr)
Set the calibration result.
Definition: ch_api.c:957
ch_mode_t
Sensor operating modes.
Definition: soniclib.h:225
@ CH_MODE_CONTINUOUS_RX
Continuous receive mode.
Definition: soniclib.h:238
@ CH_MODE_TRIGGERED_RX_ONLY
Definition: soniclib.h:231
@ CH_MODE_FREERUN
Definition: soniclib.h:227
@ CH_MODE_TRIGGERED_TX_RX
Definition: soniclib.h:229
@ CH_MODE_IDLE
Definition: soniclib.h:226
uint8_t ch_meas_init(ch_dev_t *dev_ptr, uint8_t meas_num, const ch_meas_config_t *meas_config_ptr, const void *thresh_ptr)
Initialize a measurement.
Definition: ch_api.c:1023
uint8_t ch_meas_remove_segment(ch_dev_t *dev_ptr, uint8_t meas_num, uint8_t index_to_remove)
Remove an instruction(segment) in a measurement.
Definition: ch_api.c:1066
uint8_t ch_set_data_ready_delay(ch_dev_t *dev_ptr, uint8_t delay_ms)
Set data ready interrupt delay interval.
Definition: ch_api.c:990
ch_prod_code_t
Sensor product codes.
Definition: soniclib.h:204
@ CH_PROD_CODE_ICU10201
Definition: soniclib.h:206
@ CH_PROD_CODE_UNKNOWN
Definition: soniclib.h:208
@ CH_PROD_CODE_ICU30201
Definition: soniclib.h:207
@ CH_PROD_CODE_ICU20201
Definition: soniclib.h:205
void ch_inst_get_seg_info(pmut_transceiver_inst_t *inst_ptr, uint8_t odr, ch_meas_seg_info_t *info_ptr)
Get configuration information for a measurement segment.
Definition: ch_api.c:1167
uint16_t ch_get_rx_low_gain(ch_dev_t *dev_ptr)
Get the receive low-gain sample count.
Definition: ch_api.c:903
enum ch_group_status ch_group_status_t
Sensor group status.
uint8_t ch_meas_insert_segment(ch_dev_t *dev_ptr, uint8_t meas_num, const ch_meas_segment_t *inst_ptr, uint8_t index_to_insert)
Insert an instruction(segment) to a measurement.
Definition: ch_api.c:1056
uint8_t ch_freerun_time_hop_enable(ch_dev_t *dev_ptr)
Enable time-hopping on measure period freerunning mode.
Definition: ch_api.c:438
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.
Definition: ch_api.c:491
uint8_t ch_check_reset_state(ch_dev_t *dev_ptr, ch_sensor_reset_state_t *reset_state_ptr)
Check if sensor reset has occurred.
Definition: ch_api.c:1389
ch_range_t
Range data types.
Definition: soniclib.h:218
@ CH_RANGE_DIRECT
Definition: soniclib.h:221
@ CH_RANGE_ECHO_ROUND_TRIP
Definition: soniclib.h:220
@ CH_RANGE_ECHO_ONE_WAY
Definition: soniclib.h:219
uint8_t ch_set_interrupt_drive(ch_dev_t *dev_ptr, ch_interrupt_drive_t drive)
Set interrupt drive (open drain or push pull)
Definition: ch_api.c:781
uint8_t ch_get_algo_info(ch_dev_t *dev_ptr, ICU_ALGO_SHASTA_INFO *algo_info_ptr)
Get the measurement algorithm information data from a sensor.
Definition: ch_api.c:1279
uint8_t ch_sensor_is_connected(ch_dev_t *dev_ptr)
Indicate if a sensor is connected.
Definition: ch_api.c:229
uint8_t ch_get_config(ch_dev_t *dev_ptr, ch_config_t *config_ptr)
Get current configuration settings for a sensor.
Definition: ch_api.c:91
uint8_t ch_meas_switch(ch_dev_t *dev_ptr)
Switch active and standby measurement definitions.
Definition: ch_api.c:1127
uint8_t ch_set_config(ch_dev_t *dev_ptr, ch_config_t *config_ptr)
Set multiple configuration settings for a sensor.
Definition: ch_api.c:101
uint8_t ch_set_target_int_counter(ch_dev_t *dev_ptr, uint8_t meas_hist, uint8_t thresh_count, uint8_t reset)
Configure the target interrupt counter filter.
Definition: ch_api.c:737
uint16_t ch_iq_to_amplitude(ch_iq_sample_t *iq_sample_ptr)
Calculate amplitude from sample I/Q values.
Definition: ch_api.c:632
void ch_log_append(uint8_t log_id, ch_log_fmt_t format, uint64_t timestamp, ch_log_data_t *log_data_ptr)
Append received sensor data to log.
Definition: ch_api.c:333
uint32_t ch_meas_get_interval_ticks(ch_dev_t *dev_ptr, uint8_t meas_num)
Get the repeat interval for a measurement, in sensor RTC clock ticks.
Definition: ch_api.c:1202
uint16_t ch_get_num_output_samples(ch_dev_t *dev_ptr)
Get the number of valid output samples in last measurement.
Definition: ch_api.c:1344
uint8_t ch_get_cal_result(ch_dev_t *dev_ptr, ch_cal_result_t *cal_ptr)
Get the calibration result.
Definition: ch_api.c:968
uint16_t ch_samples_to_mm(ch_dev_t *dev_ptr, uint16_t num_samples)
Convert sample count to millimeters for a sensor.
Definition: ch_api.c:617
uint8_t ch_get_rx_pretrigger(ch_group_t *grp_ptr)
Get receive-only sensor pre-triggering setting.
Definition: ch_api.c:946
uint16_t ch_get_tx_length(ch_dev_t *dev_ptr)
Get the ultrasound transmit pulse length.
Definition: ch_api.c:926
void ch_trigger_soft(ch_dev_t *dev_ptr)
Trigger a measurement using software (SPI) interface.
Definition: ch_api.c:177
uint8_t ch_meas_get_last_num(ch_dev_t *dev_ptr)
Get number of last completed measurement.
Definition: ch_api.c:1132
uint16_t ch_get_freerun_interval(ch_dev_t *dev_ptr)
Get the internal sensing timing interval for a sensor, in milliseconds.
Definition: ch_api.c:391
uint16_t ch_get_next_buf_addr(ch_dev_t *dev_ptr)
Get the address of the IQ buffer that will be written by the next measurement.
Definition: ch_api.c:1137
uint16_t ch_get_rtc_frequency(ch_dev_t *dev_ptr)
Get the sensor real-time clock (RTC) frequency, in Hz.
Definition: ch_api.c:1319
uint8_t ch_set_freerun_interval_us(ch_dev_t *dev_ptr, uint32_t interval_us)
Set the internal sensing interval for freerunning mode, in microseconds.
Definition: ch_api.c:423
uint8_t ch_meas_add_segment_rx(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_samples, uint8_t gain_reduce, uint8_t atten, uint8_t int_enable)
Add a receive segment to a measurement.
Definition: ch_api.c:1079
ch_interrupt_drive_t
Sensor interrupt drive type.
Definition: soniclib.h:283
@ CH_INTERRUPT_DRIVE_PUSH_PULL
Definition: soniclib.h:285
@ CH_INTERRUPT_DRIVE_OPEN_DRAIN
Definition: soniclib.h:284
uint8_t ch_set_tx_length(ch_dev_t *dev_ptr, uint16_t num_cycles)
Set the ultrasound transmit pulse length.
Definition: ch_api.c:915
ch_asic_gen_t
Sensor asic design generations.
Definition: soniclib.h:212
@ CH_ASIC_GEN_2_SHASTA
Definition: soniclib.h:214
@ CH_ASIC_GEN_1_WHITNEY
Definition: soniclib.h:213
ch_interrupt_mode_t ch_get_interrupt_mode(ch_dev_t *dev_ptr)
Get the pulse interrupt mode setting.
Definition: ch_api.c:776
uint8_t ch_get_bus(ch_dev_t *dev_ptr)
Get the active SPI/I2C bus for a sensor.
Definition: ch_api.c:262
void ch_meas_get_queue_info(ch_dev_t *dev_ptr, ch_meas_queue_info_t *info_ptr)
Get configuration information for the sensor measurement queue.
Definition: ch_api.c:1162
void ch_reset(ch_dev_t *dev_ptr, ch_reset_t reset_type)
Reset a sensor.
Definition: ch_api.c:207
uint32_t ch_samples_to_cycles(uint16_t num_samples, ch_odr_t odr)
Convert samples to sensor cycles.
Definition: ch_api.c:1359
uint8_t ch_group_start(ch_group_t *grp_ptr)
Program and start a group of sensors.
Definition: ch_api.c:134
uint8_t ch_meas_set_iq_output(ch_dev_t *dev_ptr, uint8_t meas_num, ch_output_type_t output_format)
Set the I/Q data output format for a measurement.
Definition: ch_api.c:1265
uint8_t ch_freerun_time_hop_disable(ch_dev_t *dev_ptr)
Disable time-hopping on measure period freerunning mode.
Definition: ch_api.c:442
uint8_t ch_meas_set_interval_us(ch_dev_t *dev_ptr, uint8_t meas_num, uint32_t interval_us)
Set the repeat interval for a measurement, in microseconds.
Definition: ch_api.c:1182
uint8_t ch_get_algo_output(ch_dev_t *dev_ptr, void *algo_out_ptr)
Get the measurement algorithm output data from a sensor.
Definition: ch_api.c:1293
uint8_t ch_meas_add_segment_count(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_cycles, uint8_t int_enable)
Add a count (delay) segment to a measurement.
Definition: ch_api.c:1074
uint8_t ch_set_max_range(ch_dev_t *dev_ptr, uint16_t max_range)
Set the maximum range for a sensor.
Definition: ch_api.c:470
uint16_t ch_meas_mm_to_samples(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_mm)
Convert millimeters to sample count for a specific measurement.
Definition: ch_api.c:1245
uint32_t ch_group_get_frequency(ch_group_t *grp_ptr)
Get the operating frequency for a group of sensors.
Definition: ch_api.c:585
ch_data_validation_mode_t
Data validation mode configuration.
Definition: soniclib.h:406
ch_interrupt_mode_t
Sensor interrupt modes.
Definition: soniclib.h:277
@ CH_INTERRUPT_MODE_PULSE
Definition: soniclib.h:278
@ CH_INTERRUPT_MODE_LATCH
Definition: soniclib.h:279
uint8_t ch_log_init(ch_group_t *grp_ptr, ch_log_fmt_t format, ch_log_cfg_t *config_ptr)
Initialize a log in the specified log format.
Definition: ch_api.c:285
#define CH_MEAS_MAX_MEAS
Definition: soniclib.h:511
uint8_t ch_set_rx_holdoff(ch_dev_t *dev_ptr, uint16_t num_samples)
Set the receive holdoff sample count.
Definition: ch_rangefinder.c:318
uint16_t ch_get_bandwidth(ch_dev_t *dev_ptr)
Get the bandwidth of a sensor.
Definition: ch_api.c:553
uint32_t ch_ticks_to_usec(ch_dev_t *dev_ptr, uint16_t num_ticks)
Convert sensor RTC clock ticks to microseconds.
Definition: ch_api.c:1374
uint8_t ch_set_pmut_clock(ch_dev_t *dev_ptr, ch_pmut_clk_cfg_t clock_cfg)
Configure ultrasound transducer clock.
Definition: ch_api.c:1324
ch_output_type_t
Output type.
Definition: soniclib.h:308
@ CH_OUTPUT_IQ
Definition: soniclib.h:309
@ CH_OUTPUT_AMP
Definition: soniclib.h:311
@ CH_OUTPUT_AMP_THRESH
Definition: soniclib.h:310
uint8_t ch_meas_set_interval(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t interval_ms)
Set the repeat interval for a measurement, in milliseconds.
Definition: ch_api.c:1177
void ch_meas_activate(ch_dev_t *dev_ptr, uint8_t meas_num)
Activate a defined measurement.
Definition: ch_api.c:1117
uint16_t ch_get_num_samples(ch_dev_t *dev_ptr)
Get the number of samples per measurement cycle.
Definition: ch_api.c:446
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: ch_api.c:479
uint8_t ch_meas_get_queue(ch_dev_t *dev_ptr, measurement_queue_t *meas_queue_ptr)
Get measurement queue values for a sensor.
Definition: ch_api.c:1146
uint8_t ch_group_set_frequency(ch_group_t *grp_ptr, uint32_t request_op_freq_hz)
Set the operating frequency for a group of sensors.
Definition: ch_api.c:580
uint8_t ch_meas_init_queue(ch_dev_t *dev_ptr)
Initialize the sensor measurement queue.
Definition: ch_api.c:1013
uint8_t ch_set_frequency(ch_dev_t *dev_ptr, uint32_t request_op_freq_hz)
Set the operating frequency of a sensor.
Definition: ch_api.c:558
uint16_t ch_meas_get_interval(ch_dev_t *dev_ptr, uint8_t meas_num)
Get the repeat interval for a measurement, in milliseconds.
Definition: ch_api.c:1192
uint32_t ch_get_range(ch_dev_t *dev_ptr, ch_range_t range_type)
Get the measured range from a sensor.
Definition: ch_api.c:502
uint32_t ch_usec_to_cycles(ch_dev_t *dev_ptr, uint32_t num_usec)
Convert microseconds to sensor cycles.
Definition: ch_api.c:1349
uint8_t ch_set_rtc(ch_dev_t *dev_ptr, ch_rtc_src_t rtc_source, uint16_t rtc_freq)
Configure the sensor real-time clock (RTC).
Definition: ch_api.c:1314
void ch_group_reset(ch_group_t *grp_ptr, ch_reset_t reset_type)
Reset a group of sensors.
Definition: ch_api.c:221
ch_io_mode_t
I/O blocking mode flags.
Definition: soniclib.h:384
@ CH_IO_MODE_NONBLOCK
Definition: soniclib.h:386
@ CH_IO_MODE_BLOCK
Definition: soniclib.h:385
uint8_t ch_watchdog_enable(ch_dev_t *dev_ptr)
Enable watchdog timer in sensor.
Definition: ch_api.c:1379
void ch_interrupt(ch_group_t *grp_ptr, uint8_t dev_num)
Run SonicLib's full-featured interrupt handler.
Definition: ch_api.c:675
uint8_t ch_group_restart(ch_group_t *grp_ptr)
Restart a group of sensors.
Definition: ch_api.c:155
uint16_t ch_usec_to_ticks(ch_dev_t *dev_ptr, uint32_t num_usec)
Convert microseconds to sensor RTC clock ticks.
Definition: ch_api.c:1369
uint8_t(* ch_fw_init_func_t)(ch_dev_t *dev_ptr, fw_info_t **fw_info)
ASIC firmware init function pointer typedef.
Definition: soniclib.h:694
uint8_t ch_meas_optimize(ch_dev_t *dev_ptr, measurement_queue_t *meas_queue_ptr, void *algo_cfg_ptr)
Optimize ultrasound measurement sequences for a sensor.
Definition: ch_api.c:1108
ch_dev_t * ch_get_dev_ptr(ch_group_t *grp_ptr, uint8_t dev_num)
Get device descriptor pointer for a sensor.
Definition: ch_api.c:244
uint16_t ch_meas_samples_to_mm(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_samples)
Convert sample count to millimeters for a specific measurement.
Definition: ch_api.c:1250
uint8_t ch_meas_import(ch_dev_t *dev_ptr, measurement_queue_t *meas_queue_ptr, void *algo_cfg_ptr)
Import an externally defined measurement configuration.
Definition: ch_api.c:1046
ch_trigger_type_t ch_get_trigger_type(ch_dev_t *dev_ptr)
Get the trigger type for a sensor.
Definition: ch_api.c:199
void(* ch_io_int_callback_t)(ch_group_t *grp_ptr, uint8_t io_index, ch_interrupt_type_t int_type)
Sensor interrupt callback routine pointer.
Definition: soniclib.h:697
const char * ch_get_sensor_id(ch_dev_t *dev_ptr)
Get the unique Sensor ID String for a sensor.
Definition: ch_api.c:1036
ch_retval
Return value codes.
Definition: soniclib.h:201
uint32_t ch_get_cpu_frequency(ch_dev_t *dev_ptr)
Get the sensor CPU frequency, in Hz.
Definition: ch_api.c:1309
uint8_t ch_get_dev_num(ch_dev_t *dev_ptr)
Get device number (I/O index values) for a sensor.
Definition: ch_api.c:239
uint32_t ch_get_frequency(ch_dev_t *dev_ptr)
Get the operating frequency of a sensor.
Definition: ch_api.c:575
uint8_t ch_meas_set_num_samples(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_samples)
Set the sensor sample count for a specific measurement.
Definition: ch_api.c:1225
uint16_t ch_get_max_samples(ch_dev_t *dev_ptr)
Get the maximum possible sample count per measurement.
Definition: ch_api.c:474
uint16_t ch_data_validation_check(ch_dev_t *dev_ptr, ch_iq_sample_t *data, uint16_t num_samples)
Check data in validation mode, which should be enabled before calling this. Should be run over all IQ...
Definition: ch_api.c:821
ch_pmut_clk_cfg_t ch_get_pmut_clock(ch_dev_t *dev_ptr)
Get ultrasound transducer clock configuration.
Definition: ch_api.c:1329
uint8_t ch_meas_add_segment_tx(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_cycles, uint8_t pulse_width, uint8_t phase, uint8_t int_enable)
Add a transmit segment to a measurement.
Definition: ch_api.c:1085
uint8_t ch_meas_remove_instruction(ch_dev_t *dev_ptr, uint8_t meas_num, uint8_t index_to_remove)
Remove an instruction(segment) in a measurement.
Definition: ch_api.c:1070
uint8_t ch_meas_time_hop_disable(ch_dev_t *dev_ptr, uint8_t meas_num)
Disable time-hopping on measure period freerunning mode.
Definition: ch_api.c:1211
ch_sensor_reset_state_t
Sensor reset state.
Definition: soniclib.h:400
ch_odr_t
Sensor output data rate (ODR).
Definition: soniclib.h:339
@ CH_ODR_FREQ_DIV_16
Definition: soniclib.h:341
@ CH_ODR_FREQ_DIV_4
Definition: soniclib.h:343
@ CH_ODR_FREQ_DIV_32
Definition: soniclib.h:340
@ CH_ODR_DEFAULT
Definition: soniclib.h:345
@ CH_ODR_FREQ_DIV_2
Definition: soniclib.h:344
@ CH_ODR_FREQ_DIV_8
Definition: soniclib.h:342
uint8_t ch_enable_double_buffer(ch_dev_t *dev_ptr, uint8_t enable)
Enable or disable the double buffering mode.
Definition: ch_api.c:844
uint8_t ch_meas_set_interval_ticks(ch_dev_t *dev_ptr, uint8_t meas_num, uint32_t rtc_ticks)
Set the repeat interval for a measurement, in sensor RTC clock ticks.
Definition: ch_api.c:1187
void ch_get_version(ch_version_t *version_ptr)
Get the SonicLib version number.
Definition: ch_api.c:272
uint8_t ch_set_num_samples(ch_dev_t *dev_ptr, uint16_t num_samples)
Set the sensor sample count directly.
Definition: ch_api.c:451
uint8_t ch_meas_reset(ch_dev_t *dev_ptr, uint8_t meas_num)
Reset a measurement.
Definition: ch_api.c:1018
uint8_t ch_set_freerun_interval(ch_dev_t *dev_ptr, uint16_t interval_ms)
Set the internal sensing interval for freerunning mode, in milliseconds.
Definition: ch_api.c:418
uint8_t ch_meas_write_config(ch_dev_t *dev_ptr)
Write measurement configuration to sensor.
Definition: ch_api.c:1141
ch_meas_status_t ch_meas_get_status(ch_dev_t *dev_ptr, uint8_t meas_num)
Get measurement status.
Definition: ch_api.c:760
ch_interrupt_type_t
Sensor interrupt types.
Definition: soniclib.h:290
@ CH_INTERRUPT_TYPE_RTC_CAL_RDY
Definition: soniclib.h:297
@ CH_INTERRUPT_TYPE_OTP_WR_STEP
Definition: soniclib.h:299
@ CH_INTERRUPT_TYPE_MUT_FCOUNT
Definition: soniclib.h:293
@ CH_INTERRUPT_TYPE_CPU_FCOUNT
Definition: soniclib.h:294
@ CH_INTERRUPT_TYPE_WATCHDOG
Definition: soniclib.h:300
@ CH_INTERRUPT_TYPE_DEBUG
Definition: soniclib.h:303
@ CH_INTERRUPT_TYPE_TX_OPTIMIZE
Definition: soniclib.h:296
@ CH_INTERRUPT_TYPE_ERROR
Definition: soniclib.h:304
@ CH_INTERRUPT_TYPE_UNKNOWN
Definition: soniclib.h:291
@ CH_INTERRUPT_TYPE_DATA_RDY
Definition: soniclib.h:292
@ CH_INTERRUPT_TYPE_OTP_COPY
Definition: soniclib.h:298
@ CH_INTERRUPT_TYPE_BIST_RDY
Definition: soniclib.h:295
@ CH_INTERRUPT_TYPE_ALGO_ERROR
Definition: soniclib.h:302
@ CH_INTERRUPT_TYPE_PGM_LOADED
Definition: soniclib.h:301
uint32_t ch_get_freerun_interval_us(ch_dev_t *dev_ptr)
Get the internal sensing timing interval for a sensor, in microseconds.
Definition: ch_api.c:400
ch_rtc_src_t
Sensor real-time clock sources.
Definition: soniclib.h:349
@ CH_RTC_SRC_INTERNAL
Definition: soniclib.h:350
@ CH_RTC_SRC_EXTERNAL
Definition: soniclib.h:351
uint16_t ch_get_max_range(ch_dev_t *dev_ptr)
Get the maximum range setting in mm for a sensor.
Definition: ch_api.c:465
uint16_t ch_get_sample_interval(ch_dev_t *dev_ptr)
Get the internal sensing timing interval for a sensor (deprecated).
Definition: ch_api.c:386
void(* ch_io_complete_callback_t)(ch_group_t *grp_ptr)
Non-blocking I/O complete callback routine pointer.
Definition: soniclib.h:700
ch_log_fmt_t
Log format.
Definition: soniclib.h:403
uint16_t ch_cycles_to_samples(uint32_t num_cycles, ch_odr_t odr)
Convert sensor cycles to samples.
Definition: ch_api.c:1364
uint16_t ch_meas_get_num_samples(ch_dev_t *dev_ptr, uint8_t meas_num)
Get the number of samples per measurement cycle for a specific measurement.
Definition: ch_api.c:1230
ch_rtc_status_t
Sensor real-time clock status.
Definition: soniclib.h:355
@ CH_RTC_STATUS_CAL_BUS
Definition: soniclib.h:360
@ CH_RTC_STATUS_INIT
Definition: soniclib.h:356
@ CH_RTC_STATUS_CAL_ESTIMATED
Definition: soniclib.h:359
@ CH_RTC_STATUS_CAL_FACTORY
Definition: soniclib.h:358
@ CH_RTC_STATUS_EXTERNAL
Definition: soniclib.h:361
@ CH_RTC_STATUS_CAL_DONE
Definition: soniclib.h:357
void(* ch_timer_callback_t)(void)
Periodic timer callback routine pointer.
Definition: soniclib.h:703
ch_trigger_type_t
Sensor trigger types.
Definition: soniclib.h:271
@ CH_TRIGGER_TYPE_HW
Definition: soniclib.h:272
@ CH_TRIGGER_TYPE_SW
Definition: soniclib.h:273
uint16_t ch_mm_to_samples(ch_dev_t *dev_ptr, uint16_t num_mm)
Convert millimeters to sample count for a sensor.
Definition: ch_api.c:621
uint8_t ch_meas_time_hop_enable(ch_dev_t *dev_ptr, uint8_t meas_num)
Enable time-hopping on measure period freerunning mode.
Definition: ch_api.c:1207
uint16_t ch_get_amplitude(ch_dev_t *dev_ptr)
Get the measured amplitude from a sensor.
Definition: ch_api.c:513
uint16_t ch_get_rtc_cal_result(ch_dev_t *dev_ptr)
Get the real-time clock calibration value.
Definition: ch_api.c:595
void ch_meas_get_info(ch_dev_t *dev_ptr, uint8_t meas_num, ch_meas_info_t *info_ptr)
Get configuration information for a measurement.
Definition: ch_api.c:1157
void ch_group_trigger(ch_group_t *grp_ptr)
Trigger a measurement on a group of sensors.
Definition: ch_api.c:203
void ch_io_notify(ch_group_t *grp_ptr, uint8_t bus_index)
Notify SonicLib that a non-blocking I/O operation has completed.
Definition: ch_api.c:710
uint32_t ch_meas_get_interval_us(ch_dev_t *dev_ptr, uint8_t meas_num)
Get the repeat interval for a measurement, in microseconds.
Definition: ch_api.c:1197
uint32_t ch_measure_pmut_frequency(ch_dev_t *dev_ptr)
Measure PMUT frequency on an ICU device.
Definition: ch_api.c:1303
uint16_t ch_get_freerun_interval_ticks(ch_dev_t *dev_ptr)
Get the internal sensing timing interval for a sensor, in RTC clock ticks.
Definition: ch_api.c:409
uint8_t ch_set_data_output(ch_dev_t *dev_ptr, ch_output_t *output_ptr)
Set data output format and rate.
Definition: ch_api.c:979
uint8_t ch_watchdog_disable(ch_dev_t *dev_ptr)
Disable watchdog timer in sensor.
Definition: ch_api.c:1384
uint8_t ch_get_data_ready_delay(ch_dev_t *dev_ptr)
Get data ready interrupt delay interval.
Definition: ch_api.c:1001
#define CH_SENSOR_ID_LENGTH
Definition: soniclib.h:513
uint8_t ch_group_init(ch_group_t *grp_ptr, uint8_t num_devices, uint8_t num_buses, uint16_t rtc_cal_pulse_ms)
Initialize the group descriptor for a group of sensors.
Definition: ch_api.c:27
uint8_t(* ch_get_config_func_t)(ch_dev_t *dev_ptr, ch_config_t *config_ptr)
API function pointer typedefs.
Definition: soniclib.h:577
void ch_meas_init_segment_rx(ch_meas_segment_t *seg_ptr, uint16_t num_samples, ch_odr_t odr, uint8_t gain_reduce, uint8_t atten, uint8_t int_enable)
Initialize a receive measurement segment.
Definition: ch_api.c:1096
uint8_t ch_set_init_firmware(ch_dev_t *dev_ptr, ch_fw_init_func_t fw_init_func)
Initialize the init firmware to use for a sensor.
Definition: ch_api.c:76
uint8_t ch_set_interrupt_mode(ch_dev_t *dev_ptr, ch_interrupt_mode_t mode)
Set interrupt mode (pulsed or latching)
Definition: ch_api.c:771
uint8_t ch_meas_insert_instruction(ch_dev_t *dev_ptr, uint8_t meas_num, const ch_meas_segment_t *inst_ptr, uint8_t index_to_insert)
Insert an instruction(segment) to a measurement.
Definition: ch_api.c:1061
uint8_t ch_set_target_interrupt(ch_dev_t *dev_ptr, ch_tgt_int_filter_t tgt_int_filter)
Configure target interrupt filtering mode.
Definition: ch_api.c:715
uint8_t ch_get_i2c_address(ch_dev_t *dev_ptr)
Get the active I2C address for a sensor.
Definition: ch_api.c:252
ch_decimation_t
Decimation factor.
Definition: soniclib.h:390
uint16_t ch_get_rx_holdoff(ch_dev_t *dev_ptr)
Get the receive holdoff sample count.
Definition: ch_rangefinder.c:330
uint16_t ch_get_scale_factor(ch_dev_t *dev_ptr)
Get the amplitude scale factor of a sensor.
Definition: ch_api.c:600
uint8_t ch_set_rx_low_gain(ch_dev_t *dev_ptr, uint16_t num_samples)
Set the receive low-gain sample count.
Definition: ch_api.c:891
ch_output_type_t ch_meas_get_iq_output(ch_dev_t *dev_ptr, uint8_t meas_num)
Get the I/Q data output format for a measurement.
Definition: ch_api.c:1255
ch_odr_t ch_meas_get_odr(ch_dev_t *dev_ptr, uint8_t meas_num)
Get the output data rate for a measurement.
Definition: ch_api.c:1220
ch_tgt_int_filter_t ch_get_target_interrupt(ch_dev_t *dev_ptr)
Get the target interrupt filtering mode setting.
Definition: ch_api.c:726
uint8_t ch_get_target_int_counter(ch_dev_t *dev_ptr, uint8_t *meas_hist_ptr, uint8_t *thresh_count_ptr, uint8_t *reset_ptr)
Get the target interrupt counter filter settings.
Definition: ch_api.c:748
uint8_t ch_get_algo_state(ch_dev_t *dev_ptr, void *algo_state_ptr)
Get the measurement algorithm state data from a sensor.
Definition: ch_api.c:1298
uint8_t ch_get_algo_config(ch_dev_t *dev_ptr, void *algo_cfg_ptr)
Get the measurement algorithm configuration data from a sensor.
Definition: ch_api.c:1284
uint8_t ch_enable_data_validation(ch_dev_t *dev_ptr, int16_t seed, ch_data_validation_mode_t mode)
Enable data validation mode. In this mode, ICU-x0201 sensors will overwrite the IQ data at the end of...
Definition: ch_api.c:791
void ch_meas_init_segment_count(ch_meas_segment_t *seg_ptr, uint16_t num_cycles, uint8_t int_enable)
Initialize a count (delay) measurement segment.
Definition: ch_api.c:1091
ch_tgt_int_filter_t
Target interrupt filter modes.
Definition: soniclib.h:328
@ CH_TGT_INT_FILTER_COUNTER
Definition: soniclib.h:331
@ CH_TGT_INT_FILTER_OFF
Definition: soniclib.h:329
@ CH_TGT_INT_FILTER_ANY
Definition: soniclib.h:330
const char * ch_get_fw_version_string(ch_dev_t *dev_ptr)
Get the firmware version description string for a sensor.
Definition: ch_api.c:280
void ch_group_set_pmut_clock_freq(ch_group_t *grp_ptr, uint32_t pmut_clock_freq)
Specify the transducer clock input frequency for a group of sensors.
Definition: ch_api.c:1334
ch_meas_seg_type_t
Measurement segment type.
Definition: soniclib.h:516
ch_pmut_clk_cfg_t
PMUT clock configuration (ICU sensors)
Definition: soniclib.h:374
@ CH_PMUT_CLK_SRC_EXTERNAL
Definition: soniclib.h:378
@ CH_PMUT_CLK_OUTPUT_ENABLE
Definition: soniclib.h:376
@ CH_PMUT_CLK_OUTPUT_AUTO
Definition: soniclib.h:379
@ CH_PMUT_CLK_DEFAULT
Definition: soniclib.h:375
ch_meas_mode_t
Measurement mode (active / standby)
Definition: soniclib.h:259
@ CH_MEAS_MODE_ACTIVE
Definition: soniclib.h:260
@ CH_MEAS_MODE_STANDBY
Definition: soniclib.h:261
ch_mode_t ch_get_mode(ch_dev_t *dev_ptr)
Get the current operating mode for a sensor.
Definition: ch_api.c:372
uint16_t ch_meas_get_max_range(ch_dev_t *dev_ptr, uint8_t meas_num)
Get the maximum range setting in mm for a specific measurement.
Definition: ch_api.c:1240
uint32_t ch_cycles_to_usec(ch_dev_t *dev_ptr, uint32_t num_cycles)
Convert sensor cycles to microseconds.
Definition: ch_api.c:1354
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.
Definition: ch_api.c:605
uint8_t ch_update_metadata_from_iq0(ch_dev_t *dev_ptr, ch_iq_sample_t *iq_data)
Extract the metadata from the first IQ sample and update the device pointer.
Definition: ch_api.c:872
uint8_t ch_meas_set_max_range(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t max_range_mm)
Set the maximum range in mm for a specific measurement.
Definition: ch_api.c:1235
uint16_t ch_get_part_number(ch_dev_t *dev_ptr)
Get part number for a sensor.
Definition: ch_api.c:234
uint8_t ch_init_algo(ch_dev_t *dev_ptr)
Initialize the measurement algorithm on a sensor.
Definition: ch_api.c:1274
ch_reset_t
Sensor reset types.
Definition: soniclib.h:265
@ CH_RESET_SOFT
Definition: soniclib.h:267
@ CH_RESET_HARD
Definition: soniclib.h:266
uint8_t ch_meas_set_odr(ch_dev_t *dev_ptr, uint8_t meas_num, ch_odr_t odr)
Set the output data rate for a measurement.
Definition: ch_api.c:1215
void ch_meas_init_segment_tx(ch_meas_segment_t *seg_ptr, uint16_t num_cycles, uint8_t pulse_width, uint8_t phase, uint8_t int_enable)
Initialize a transmit measurement segment.
Definition: ch_api.c:1102
void ch_trigger(ch_dev_t *dev_ptr)
Trigger a measurement on one sensor.
Definition: ch_api.c:168
ch_group_status
Sensor group status.
Definition: soniclib.h:242
@ CH_GROUP_STAT_INIT_PENDING
Definition: soniclib.h:244
@ CH_GROUP_STAT_INIT_OK
Definition: soniclib.h:245
@ CH_GROUP_STAT_NOT_INIT
Definition: soniclib.h:243
uint8_t ch_get_num_ports(ch_group_t *grp_ptr)
Get the total number of sensor ports (possible sensors) in a sensor group.
Definition: ch_api.c:267
uint8_t ch_set_sample_interval(ch_dev_t *dev_ptr, uint16_t interval_ms)
Set the internal sensing interval (deprecated).
Definition: ch_api.c:433
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.
Definition: ch_api.c:695
uint8_t ch_get_amp_thresh_data(ch_dev_t *dev_ptr, ch_amp_thresh_t *buf_ptr, uint16_t start_sample, uint16_t num_samples, ch_io_mode_t mode)
Get the amplitude measurement and threshold data from a sensor.
Definition: ch_api.c:547
uint8_t ch_minimal_int_handler(ch_group_t *grp_ptr, uint8_t dev_num)
Notify SonicLib that a sensor interrupt was received.
Definition: ch_api.c:661
uint16_t ch_get_amplitude_avg(ch_dev_t *dev_ptr)
Get the averaged measured amplitude over the sample window.
Definition: ch_api.c:524
ch_rtc_cal_t
Sensor real-time clock status.
Definition: soniclib.h:367
@ CH_RTC_CAL_MANUAL
Definition: soniclib.h:369
@ CH_RTC_CAL_BUS
Definition: soniclib.h:370
@ CH_RTC_CAL_STD
Definition: soniclib.h:368
uint16_t ch_get_rtc_cal_pulselength(ch_dev_t *dev_ptr)
Get the real-time clock calibration pulse length.
Definition: ch_api.c:590
uint8_t ch_set_freerun_interval_ticks(ch_dev_t *dev_ptr, uint32_t interval_ticks)
Set the internal sensing interval for freerunning mode, in RTC clock ticks.
Definition: ch_api.c:428
uint8_t ch_restart(ch_dev_t *dev_ptr)
Restart a sensor.
Definition: ch_api.c:139
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.
Definition: ch_api.c:685
uint8_t ch_set_mode(ch_dev_t *dev_ptr, ch_mode_t mode)
Configure a sensor for the specified operating mode.
Definition: ch_api.c:377
uint8_t ch_set_rx_pretrigger(ch_group_t *grp_ptr, uint8_t enable)
Enable/disable receive-only sensor pre-triggering.
Definition: ch_api.c:937
uint8_t ch_io_start_nb(ch_group_t *grp_ptr)
Start non-blocking I/O operation(s) for a group of sensors.
Definition: ch_api.c:649
uint32_t ch_group_get_pmut_clock_freq(ch_group_t *grp_ptr)
Get the transducer clock input frequency for a group of sensors.
Definition: ch_api.c:1339
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.
Definition: ch_api.c:535
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.
Definition: ch_api.c:51
void ch_meas_standby(ch_dev_t *dev_ptr, uint8_t meas_num)
Put a measurement in standby mode.
Definition: ch_api.c:1122
Sensor combined amplitude + detection threshold sample value.
Definition: soniclib.h:437
uint16_t amp
Definition: soniclib.h:439
uint16_t thresh
Definition: soniclib.h:438
API function pointer structure (internal use).
Definition: soniclib.h:614
Calibration result structure.
Definition: soniclib.h:449
Definition: soniclib.h:647
Clock calibration values.
Definition: soniclib.h:455
uint16_t rtc_freq
Definition: soniclib.h:456
uint8_t cpu_trim
Definition: soniclib.h:459
uint16_t pmut_trim
Definition: soniclib.h:458
uint16_t pmut_fcount
Definition: soniclib.h:457
Combined configuration structure.
Definition: soniclib.h:463
uint16_t sample_interval
Definition: soniclib.h:466
uint16_t max_range
Definition: soniclib.h:465
ch_tgt_int_filter_t tgt_int_filter
Definition: soniclib.h:467
ch_mode_t mode
Definition: soniclib.h:464
Chirp sensor device descriptor structure.
Definition: soniclib.h:739
uint16_t num_rx_samples
Definition: soniclib.h:776
uint8_t sensor_connected
Definition: soniclib.h:773
ch_rtc_status_t rtc_status
Definition: soniclib.h:750
ch_clock_cal_t test_clock_cal
Definition: soniclib.h:791
uint32_t freerun_intvl_us
Definition: soniclib.h:749
uint8_t reg_fmt_ver_major
Definition: soniclib.h:796
uint8_t is_continuous
Definition: soniclib.h:810
uint32_t orig_pmut_freq
Definition: soniclib.h:753
uint16_t rtc_frequency
Definition: soniclib.h:756
uint16_t pmut_clock_fcount
Definition: soniclib.h:759
fw_info_t * main_fw_info
Definition: soniclib.h:785
ch_interrupt_drive_t int_drive
Definition: soniclib.h:783
void * algo_cfg_ptr
Definition: soniclib.h:819
uint16_t static_range
Definition: soniclib.h:748
uint16_t buf_addr
Definition: soniclib.h:814
uint16_t num_win_samples
Definition: soniclib.h:778
uint16_t fcount_cycles
Definition: soniclib.h:758
uint16_t num_iq_bytes
Definition: soniclib.h:813
uint16_t i2c_drv_flags
Definition: soniclib.h:769
ch_interrupt_mode_t int_mode
Definition: soniclib.h:782
uint8_t main_fw_init_done
Definition: soniclib.h:789
uint8_t odr_out
Definition: soniclib.h:811
ICU_ALGO_SHASTA_INFO * sens_algo_info_addr
Definition: soniclib.h:817
uint16_t max_range
Definition: soniclib.h:747
ch_group_t * group
Definition: soniclib.h:740
shasta_config_t * sens_cfg_addr
Definition: soniclib.h:743
uint8_t i2c_address
Definition: soniclib.h:767
ch_trigger_type_t trig_type
Definition: soniclib.h:781
uint16_t part_number
Definition: soniclib.h:772
ch_asic_gen_t asic_gen
Definition: soniclib.h:745
uint8_t cpu_trim
Definition: soniclib.h:760
uint16_t bandwidth
Definition: soniclib.h:763
measurement_queue_t meas_queue
Definition: soniclib.h:800
uint8_t app_i2c_address
Definition: soniclib.h:768
uint32_t op_frequency
Definition: soniclib.h:754
ch_mode_t mode
Definition: soniclib.h:746
ch_meas_status_t meas_status
Definition: soniclib.h:780
uint8_t last_measurement
Definition: soniclib.h:809
uint16_t amp_scale_factor
Definition: soniclib.h:764
int16_t data_validation_counter
Definition: soniclib.h:793
ch_pmut_clk_cfg_t pmut_clk_cfg
Definition: soniclib.h:752
uint16_t rtc_cal_result
Definition: soniclib.h:751
fw_info_t * current_fw
Definition: soniclib.h:786
uint8_t reg_fmt_ver_minor
Definition: soniclib.h:797
ch_tgt_int_filter_t tgt_int_filter
Definition: soniclib.h:784
uint8_t io_index
Definition: soniclib.h:775
ICU_ALGO_SHASTA_INFO algo_info
Definition: soniclib.h:818
uint16_t pmut_trim
Definition: soniclib.h:761
uint8_t iq_output_format
Definition: soniclib.h:812
fw_info_t * init_fw_info
Definition: soniclib.h:788
uint8_t bus_index
Definition: soniclib.h:771
uint8_t asic_ready
Definition: soniclib.h:790
uint16_t tof_scale_factor
Definition: soniclib.h:765
uint32_t cpu_frequency
Definition: soniclib.h:755
uint16_t win_start_sample
Definition: soniclib.h:777
Chirp sensor group descriptor structure.
Definition: soniclib.h:711
ch_io_int_callback_t io_int_callback
Definition: soniclib.h:726
uint8_t sensor_count
Definition: soniclib.h:717
uint8_t num_ports
Definition: soniclib.h:713
uint16_t pretrig_delay_us
Definition: soniclib.h:725
uint32_t op_frequency
Definition: soniclib.h:719
uint8_t num_connected[CHIRP_NUM_BUSES]
Definition: soniclib.h:732
uint32_t pmut_clock_freq
Definition: soniclib.h:720
ch_group_status_t status
Definition: soniclib.h:712
chdrv_queue_t queue[CHIRP_NUM_BUSES]
Definition: soniclib.h:734
uint32_t io_bus_speed_hz
Definition: soniclib.h:721
uint8_t sensor_int_pin
Definition: soniclib.h:714
uint16_t rtc_cal_pulse_ms
Definition: soniclib.h:724
uint16_t i2c_drv_flags
Definition: soniclib.h:722
uint8_t sensor_trig_pin
Definition: soniclib.h:715
uint8_t num_buses
Definition: soniclib.h:716
ch_rtc_cal_t rtc_cal_type
Definition: soniclib.h:718
ch_io_complete_callback_t io_complete_callback
Definition: soniclib.h:727
ch_dev_t * device[CHIRP_MAX_NUM_SENSORS]
Definition: soniclib.h:729
I2C info structure.
Definition: soniclib.h:420
uint16_t drv_flags
Definition: soniclib.h:423
uint8_t bus_num
Definition: soniclib.h:422
uint8_t address
Definition: soniclib.h:421
Sensor I/Q data value.
Definition: soniclib.h:431
int16_t i
Definition: soniclib.h:433
int16_t q
Definition: soniclib.h:432
Log configuration structure.
Definition: soniclib.h:477
ch_output_type_t output_type
Definition: soniclib.h:479
ch_decimation_t decimation_factor
Definition: soniclib.h:480
uint16_t start_sample
Definition: soniclib.h:481
uint16_t interval_ms
Definition: soniclib.h:478
Log data structure.
Definition: soniclib.h:485
ch_iq_sample_t * iq_sample_ptr
Definition: soniclib.h:493
uint16_t amplitude
Definition: soniclib.h:489
uint8_t annotation
Definition: soniclib.h:490
uint8_t tx_sensor_id
Definition: soniclib.h:486
uint8_t rx_sensor_id
Definition: soniclib.h:487
uint16_t start_sample
Definition: soniclib.h:496
uint16_t num_samples
Definition: soniclib.h:497
ch_output_type_t output_type
Definition: soniclib.h:491
uint32_t range
Definition: soniclib.h:488
uint16_t * mag_data_ptr
Definition: soniclib.h:494
Measurement configuration - used during ch_meas_init()
Definition: soniclib.h:501
Measurement info.
Definition: soniclib.h:530
uint8_t num_segments
Definition: soniclib.h:534
ch_meas_mode_t mode
Definition: soniclib.h:537
uint16_t meas_period
Definition: soniclib.h:536
Measurement queue info.
Definition: soniclib.h:554
Measurement segment info.
Definition: soniclib.h:541
Measurement segment.
Definition: soniclib.h:524
Sensor manufacturing info.
Definition: soniclib.h:564
Data output structure.
Definition: soniclib.h:471
ch_output_type_t output_type
Definition: soniclib.h:472
ch_decimation_t decimation_factor
Definition: soniclib.h:473
Detection threshold value.
Definition: soniclib.h:443
SonicLib version structure.
Definition: soniclib.h:413
uint8_t major
Definition: soniclib.h:414
uint8_t rev
Definition: soniclib.h:416
uint8_t minor
Definition: soniclib.h:415
Queue structure, for non-blocking access.
Definition: ch_driver.h:116
Definition: soniclib.h:665
uint16_t fw_text_size
Definition: soniclib.h:679
uint16_t(* get_fw_ram_init_size)(void)
Definition: soniclib.h:671
uint16_t(* get_fw_ram_init_addr)(void)
Definition: soniclib.h:673
uint16_t max_samples
Definition: soniclib.h:682
const int8_t oversample
Definition: soniclib.h:685
const uint8_t * ram_init
Definition: soniclib.h:670
const uint16_t freqCounterCycles
Definition: soniclib.h:683
const uint8_t * fw_text
Definition: soniclib.h:668
const uint8_t fw_includes_sensor_init
Definition: soniclib.h:688
const uint8_t max_num_thresholds
Definition: soniclib.h:686
const char * fw_version_string
Definition: soniclib.h:667
const ch_api_funcs_t *const api_funcs
Definition: soniclib.h:678
uint16_t fw_vec_size
Definition: soniclib.h:680
const uint8_t freqLockValue
Definition: soniclib.h:684
const uint8_t * fw_vec
Definition: soniclib.h:669
const uint8_t fw_includes_tx_optimization
Definition: soniclib.h:689
Definition: icu_algo_info.h:10