Chirp SonicLib  4.6.1
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 (6)
116 #define SONICLIB_VER_REV (1)
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 struct {
407  uint8_t major;
408  uint8_t minor;
409  uint8_t rev;
410 } ch_version_t;
411 
413 typedef struct {
414  uint8_t address;
415  uint8_t bus_num;
416  uint16_t drv_flags;
417 } ch_i2c_info_t;
418 
420 #define I2C_DRV_FLAG_RESET_AFTER_NB (0x00000001)
421 #define I2C_DRV_FLAG_USE_PROG_NB (0x00000002)
424 typedef struct {
425  int16_t q;
426  int16_t i;
428 
430 typedef struct {
431  uint16_t thresh;
432  uint16_t amp;
434 
436 typedef struct {
437  uint16_t start_sample;
438  uint16_t level;
439 } ch_thresh_t;
440 
442 typedef struct {
443  uint16_t dco_period;
444  uint16_t rev_cycles;
446 
448 typedef struct {
449  uint16_t rtc_freq;
450  uint16_t pmut_fcount;
451  uint16_t pmut_trim;
452  uint8_t cpu_trim;
454 
456 typedef struct {
458  uint16_t max_range;
459  uint16_t sample_interval;
461 } ch_config_t;
462 
464 typedef struct {
467 } ch_output_t;
468 
470 typedef struct {
471  uint16_t interval_ms;
474  uint16_t start_sample;
475 } ch_log_cfg_t;
476 
478 typedef struct {
479  uint8_t tx_sensor_id;
480  uint8_t rx_sensor_id;
481  uint32_t range;
482  uint16_t amplitude;
483  uint8_t annotation;
485  union {
487  uint16_t *mag_data_ptr;
488  } raw_data;
489  uint16_t start_sample;
490  uint16_t num_samples;
491 } ch_log_data_t;
492 
494 typedef struct {
495  ch_odr_t odr;
496  uint16_t meas_period;
497  ch_meas_mode_t mode; // 1 if meas initially in standby mode (inactive), 0 if active
499 
500 #ifdef INCLUDE_SHASTA_SUPPORT
501 /* Definitions for ICU-x0201 sensors (Shasta architecture) */
502 
503 #define CH_MEAS_MAX_SEGMENTS (INST_BUF_LENGTH)
504 #define CH_MEAS_MAX_MEAS (MEAS_QUEUE_MAX_MEAS)
506 #define CH_SENSOR_ID_LENGTH 8
509 typedef enum {
510  CH_MEAS_SEG_TYPE_COUNT = 0, // must match PMUT cmd values
511  CH_MEAS_SEG_TYPE_TX = 1,
512  CH_MEAS_SEG_TYPE_RX = 2,
513  CH_MEAS_SEG_TYPE_EOF = 3
515 
517 typedef struct {
518  pmut_transceiver_inst_t inst; // PMUT instruction
519 
521 
523 typedef struct {
524  uint32_t num_cycles;
525  uint16_t num_tx_segments;
526  uint16_t num_rx_samples;
527  uint8_t num_segments;
528  ch_odr_t odr;
529  uint16_t meas_period;
532 
534 typedef struct {
535  ch_meas_seg_type_t type;
536  uint16_t num_rx_samples;
537  uint16_t num_cycles;
538  uint8_t rdy_int_en;
539  uint8_t done_int_en;
540  uint8_t tx_phase;
541  uint8_t tx_pulse_width;
542  uint8_t rx_gain;
543  uint8_t rx_atten;
545 
547 typedef struct {
548  uint8_t int_config; // interrupt pin selection
549  uint8_t meas_start; // which measurement do we start on
550  uint8_t meas_stop; // which measurement do we stop on
551  uint8_t current_meas; // which measurement do we do next
552  uint8_t trig_src; // trigger source: falling edge of INT1 or INT2, or internal timer
553  uint8_t last_meas; // last completed measurement
555 
557 typedef struct {
558  uint16_t mfg_year;
559  uint8_t mfg_week;
560  uint8_t mfg_site;
561  uint8_t product_code; // numeric value for product type (e.g. ICU-20201, ICU-10201, etc)
562  uint8_t package_code; // numeric value for package type (e.g. added microcap, changed bondwires)
563  uint8_t mems_code; // numeric value for mems transducer type (e.g. CH101/201/CypressZ1/A1)
564  uint8_t module_code; // numeric value for module type
565 } ch_mfg_info_t;
566 
567 #endif // INCLUDE_SHASTA_SUPPORT
568 
570 typedef uint8_t (*ch_get_config_func_t)(ch_dev_t *dev_ptr, ch_config_t *config_ptr);
571 typedef uint8_t (*ch_set_config_func_t)(ch_dev_t *dev_ptr, ch_config_t *config_ptr);
572 typedef uint8_t (*ch_set_num_samples_func_t)(ch_dev_t *dev_ptr, uint16_t num_samples);
573 typedef uint8_t (*ch_set_sample_window_func_t)(ch_dev_t *dev_ptr, uint16_t start_sample, uint16_t end_sample);
574 typedef uint32_t (*ch_get_range_func_t)(ch_dev_t *dev_ptr, ch_range_t range_type);
575 typedef uint16_t (*ch_get_amplitude_func_t)(ch_dev_t *dev_ptr);
576 typedef uint16_t (*ch_get_amplitude_avg_func_t)(ch_dev_t *dev_ptr);
577 typedef uint8_t (*ch_set_frequency_func_t)(ch_dev_t *dev_ptr, uint32_t target_freq_Hz);
578 typedef uint8_t (*ch_get_iq_data_func_t)(ch_dev_t *dev_ptr, ch_iq_sample_t *buf_ptr, uint16_t start_sample,
579  uint16_t num_samples, ch_io_mode_t io_mode);
580 typedef uint8_t (*ch_get_amplitude_data_func_t)(ch_dev_t *dev_ptr, uint16_t *buf_ptr, uint16_t start_sample,
581  uint16_t num_samples, ch_io_mode_t io_mode);
582 typedef uint16_t (*ch_mm_to_samples_func_t)(ch_dev_t *dev_ptr, uint16_t num_mm);
583 typedef uint8_t (*ch_set_target_interrupt_func_t)(ch_dev_t *dev_ptr, ch_tgt_int_filter_t tgt_int_filter);
584 typedef ch_tgt_int_filter_t (*ch_get_target_interrupt_func_t)(ch_dev_t *dev_ptr);
585 typedef uint8_t (*ch_set_target_int_counter_func_t)(ch_dev_t *dev_ptr, uint8_t meas_hist, uint8_t thresh_count,
586  uint8_t reset);
587 typedef uint8_t (*ch_get_target_int_counter_func_t)(ch_dev_t *dev_ptr, uint8_t *meas_hist_ptr,
588  uint8_t *thresh_count_ptr, uint8_t *reset_ptr);
589 typedef uint8_t (*ch_set_rx_low_gain_func_t)(ch_dev_t *dev_ptr, uint16_t num_samples);
590 typedef uint16_t (*ch_get_rx_low_gain_func_t)(ch_dev_t *dev_ptr);
591 typedef uint8_t (*ch_set_tx_length_func_t)(ch_dev_t *dev_ptr, uint16_t tx_length);
592 typedef uint16_t (*ch_get_tx_length_func_t)(ch_dev_t *dev_ptr);
593 typedef uint8_t (*ch_set_cal_result_func_t)(ch_dev_t *dev_ptr, ch_cal_result_t *cal_ptr);
594 typedef uint8_t (*ch_get_cal_result_func_t)(ch_dev_t *dev_ptr, ch_cal_result_t *cal_ptr);
595 typedef uint8_t (*ch_set_data_output_func_t)(ch_dev_t *dev_ptr, const ch_output_t *output);
596 typedef void (*ch_trigger_soft_func_t)(ch_dev_t *dev_ptr);
597 typedef uint8_t (*ch_set_data_ready_delay_func_t)(ch_dev_t *dev_ptr, uint8_t num_cycles);
598 typedef uint8_t (*ch_get_data_ready_delay_func_t)(ch_dev_t *dev_ptr);
599 typedef ch_meas_status_t (*ch_meas_get_status_func_t)(ch_dev_t *dev_ptr, uint8_t meas_num);
600 
601 #ifdef INCLUDE_SHASTA_SUPPORT
602 typedef ch_output_type_t (*ch_meas_get_iq_output_func_t)(ch_dev_t *dev_ptr, uint8_t meas_num);
603 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);
604 #endif
605 
607 typedef struct {
608  ch_set_num_samples_func_t set_num_samples;
609  ch_set_sample_window_func_t set_sample_window;
610  ch_get_range_func_t get_range;
611  ch_get_amplitude_func_t get_amplitude;
612  ch_get_amplitude_avg_func_t get_amplitude_avg;
613  ch_set_frequency_func_t set_frequency;
614  ch_get_iq_data_func_t get_iq_data;
615  ch_get_amplitude_data_func_t get_amplitude_data;
616  ch_mm_to_samples_func_t mm_to_samples;
617  ch_set_target_interrupt_func_t set_target_interrupt;
618  ch_get_target_interrupt_func_t get_target_interrupt;
619  ch_set_target_int_counter_func_t set_target_int_counter;
620  ch_get_target_int_counter_func_t get_target_int_counter;
621  ch_set_rx_low_gain_func_t set_rx_low_gain;
622  ch_get_rx_low_gain_func_t get_rx_low_gain;
623  ch_set_tx_length_func_t set_tx_length;
624  ch_get_tx_length_func_t get_tx_length;
625  ch_set_cal_result_func_t set_cal_result;
626  ch_get_cal_result_func_t get_cal_result;
627  ch_set_data_output_func_t set_data_output;
628  ch_trigger_soft_func_t trigger_soft;
629  ch_set_data_ready_delay_func_t set_data_ready_delay;
630  ch_get_data_ready_delay_func_t get_data_ready_delay;
631  ch_meas_get_status_func_t meas_get_status;
632 #ifdef INCLUDE_SHASTA_SUPPORT
633  ch_meas_get_iq_output_func_t meas_get_iq_output;
634  ch_meas_set_iq_output_func_t meas_set_iq_output;
635 #endif
636  // Range finding specific
637  const void *algo_specific_api;
639 
640 typedef struct {
641  void (*prepare_pulse_timer)(ch_dev_t *dev_ptr);
644  void (*store_pt_result)(ch_dev_t *dev_ptr);
647  void (*store_op_freq)(ch_dev_t *dev_ptr);
650  void (*store_bandwidth)(ch_dev_t *dev_ptr);
652  void (*store_scalefactor)(ch_dev_t *dev_ptr);
654  uint8_t (*get_locked_state)(ch_dev_t *dev_ptr);
657 
658 struct fw_info_st {
659  /* Sensor Firmware-specific Linkage Definitions */
660  const char *fw_version_string;
661  const uint8_t *fw_text;
662  const uint8_t *fw_vec;
663  const uint8_t *ram_init;
664  uint16_t (*get_fw_ram_init_size)(void);
666  uint16_t (*get_fw_ram_init_addr)(void);
668  /* Functions used for sensor calibration */
669  const ch_calib_funcs_t *const calib_funcs;
670  /* API and callback functions */
671  const ch_api_funcs_t *const api_funcs;
672  uint16_t fw_text_size;
673  uint16_t fw_vec_size;
675  uint16_t max_samples;
676  const uint16_t freqCounterCycles;
677  const uint8_t freqLockValue;
678  const int8_t oversample;
679  const uint8_t max_num_thresholds;
680  /* Sensor Firmware infos */
681  const uint8_t fw_includes_sensor_init : 1;
682  const uint8_t fw_includes_tx_optimization : 1;
683  const uint8_t reserved : 6;
684 };
685 
687 typedef uint8_t (*ch_fw_init_func_t)(ch_dev_t *dev_ptr, fw_info_t **fw_info);
688 
690 typedef void (*ch_io_int_callback_t)(ch_group_t *grp_ptr, uint8_t io_index, ch_interrupt_type_t int_type);
691 
693 typedef void (*ch_io_complete_callback_t)(ch_group_t *grp_ptr);
694 
696 typedef void (*ch_timer_callback_t)(void);
697 
699 
704 struct ch_group_t {
706  uint8_t num_ports;
707  uint8_t sensor_int_pin;
708  uint8_t sensor_trig_pin;
709  uint8_t num_buses;
710  uint8_t sensor_count;
712  uint32_t op_frequency;
713  uint32_t pmut_clock_freq;
714  uint32_t io_bus_speed_hz;
715  uint16_t i2c_drv_flags;
717  uint16_t rtc_cal_pulse_ms;
718  uint16_t pretrig_delay_us;
722  ch_dev_t *device[CHIRP_MAX_NUM_SENSORS];
724 #ifdef INCLUDE_WHITNEY_SUPPORT
725  uint8_t num_connected[CHIRP_NUM_BUSES];
726 #endif
727  chdrv_queue_t queue[CHIRP_NUM_BUSES];
729 };
730 
732 struct ch_dev_t {
734 #ifdef INCLUDE_SHASTA_SUPPORT
735  char id_string[CH_SENSOR_ID_LENGTH];
736  shasta_config_t *sens_cfg_addr;
737 #endif
740  uint16_t max_range;
741  uint16_t static_range;
742  uint32_t freerun_intvl_us;
744  uint16_t rtc_cal_result;
746  uint32_t orig_pmut_freq;
747  uint32_t op_frequency;
748  uint32_t cpu_frequency;
749  uint16_t rtc_frequency;
750 #ifdef INCLUDE_SHASTA_SUPPORT
751  uint16_t fcount_cycles;
752  uint16_t pmut_clock_fcount;
753  uint8_t cpu_trim;
754  uint16_t pmut_trim;
755 #endif
756  uint16_t bandwidth;
757  uint16_t amp_scale_factor;
758  uint16_t tof_scale_factor;
759 #ifdef INCLUDE_WHITNEY_SUPPORT
760  uint8_t i2c_address;
761  uint8_t app_i2c_address;
762  uint16_t i2c_drv_flags;
763 #endif
764  uint8_t bus_index;
765  uint16_t part_number;
768  uint8_t io_index;
769  uint16_t num_rx_samples;
770  uint16_t win_start_sample;
771  uint16_t num_win_samples;
780 #ifdef INCLUDE_SHASTA_SUPPORT
783  uint8_t asic_ready;
787  int16_t mq_sanitize_enabled; /* !< Perform mq sanitization step when non-zero */
788 
792  /* Sensor measurement queue */
793  measurement_queue_t meas_queue;
795  uint8_t meas_num_segments[CH_MEAS_MAX_MEAS]; // number of active segments per measurement
796  uint32_t meas_num_cycles[CH_MEAS_MAX_MEAS]; // total number of sensor cycles per measurement
797  uint16_t meas_num_tx_segments[CH_MEAS_MAX_MEAS]; // total number of transmit segments per measurement
798  uint16_t meas_pre_rx_cycles[CH_MEAS_MAX_MEAS]; // total number of sensor cycles in segments before first read
799  uint16_t meas_num_rx_samples[CH_MEAS_MAX_MEAS]; // total number of receive samples per measurement
800  uint16_t meas_max_range_mm[CH_MEAS_MAX_MEAS]; // max range setting based on num_rx_samples (millimeters)
801 
803  uint8_t is_continuous;
804  uint8_t odr_out;
806  uint16_t num_iq_bytes;
807  uint16_t buf_addr;
809  /* Sensor algorithm */
812  void *algo_cfg_ptr;
814 #endif // INCLUDE_SHASTA_SUPPORT
815 };
816 
817 /*============== API function prototypes and documentation ===================*/
818 
837 uint8_t ch_group_init(ch_group_t *grp_ptr, uint8_t num_devices, uint8_t num_buses, uint16_t rtc_cal_pulse_ms);
838 
878 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);
879 
897 uint8_t ch_set_init_firmware(ch_dev_t *dev_ptr, ch_fw_init_func_t fw_init_func);
898 
932 uint8_t ch_group_start(ch_group_t *grp_ptr);
933 
959 uint8_t ch_restart(ch_dev_t *dev_ptr);
960 
981 uint8_t ch_group_restart(ch_group_t *grp_ptr);
982 
998 uint8_t ch_get_config(ch_dev_t *dev_ptr, ch_config_t *config_ptr);
999 
1018 uint8_t ch_set_config(ch_dev_t *dev_ptr, ch_config_t *config_ptr);
1019 
1035 void ch_trigger(ch_dev_t *dev_ptr);
1036 
1056 void ch_group_trigger(ch_group_t *grp_ptr);
1057 
1067 void ch_reset(ch_dev_t *dev_ptr, ch_reset_t reset_type);
1068 
1078 void ch_group_reset(ch_group_t *grp_ptr, ch_reset_t reset_type);
1079 
1086 uint8_t ch_sensor_is_connected(ch_dev_t *dev_ptr);
1087 
1098 uint16_t ch_get_part_number(ch_dev_t *dev_ptr);
1099 
1111 uint8_t ch_get_dev_num(ch_dev_t *dev_ptr);
1112 
1124 ch_dev_t *ch_get_dev_ptr(ch_group_t *grp_ptr, uint8_t dev_num);
1125 
1137 uint8_t ch_get_num_ports(ch_group_t *grp_ptr);
1138 
1152 uint8_t ch_get_i2c_address(ch_dev_t *dev_ptr);
1153 
1165 uint8_t ch_get_bus(ch_dev_t *dev_ptr);
1166 
1184 void ch_get_version(ch_version_t *version_ptr);
1185 
1196 const char *ch_get_fw_version_string(ch_dev_t *dev_ptr);
1197 
1211 ch_mode_t ch_get_mode(ch_dev_t *dev_ptr);
1212 
1231 uint8_t ch_set_mode(ch_dev_t *dev_ptr, ch_mode_t mode);
1232 
1246 uint16_t ch_get_sample_interval(ch_dev_t *dev_ptr);
1247 
1260 uint16_t ch_get_freerun_interval(ch_dev_t *dev_ptr);
1261 
1274 uint32_t ch_get_freerun_interval_us(ch_dev_t *dev_ptr);
1275 
1289 uint16_t ch_get_freerun_interval_ticks(ch_dev_t *dev_ptr);
1290 
1307 uint8_t ch_set_sample_interval(ch_dev_t *dev_ptr, uint16_t interval_ms);
1308 
1330 uint8_t ch_set_freerun_interval(ch_dev_t *dev_ptr, uint16_t interval_ms);
1331 
1350 uint8_t ch_set_freerun_interval_us(ch_dev_t *dev_ptr, uint32_t interval_us);
1351 
1370 uint8_t ch_set_freerun_interval_ticks(ch_dev_t *dev_ptr, uint32_t interval_ticks);
1371 
1390 uint8_t ch_freerun_time_hop_enable(ch_dev_t *dev_ptr);
1391 
1407 uint8_t ch_freerun_time_hop_disable(ch_dev_t *dev_ptr);
1408 
1432 uint16_t ch_get_num_samples(ch_dev_t *dev_ptr);
1433 
1459 uint8_t ch_set_num_samples(ch_dev_t *dev_ptr, uint16_t num_samples);
1460 
1477 uint16_t ch_get_max_samples(ch_dev_t *dev_ptr);
1478 
1495 uint16_t ch_get_max_range(ch_dev_t *dev_ptr);
1496 
1515 uint8_t ch_set_max_range(ch_dev_t *dev_ptr, uint16_t max_range);
1516 
1538 uint8_t ch_get_sample_window(ch_dev_t *dev_ptr, uint16_t *start_sample_ptr, uint16_t *num_samples_ptr);
1539 
1560 uint8_t ch_set_sample_window(ch_dev_t *dev_ptr, uint16_t start_sample, uint16_t num_samples);
1561 
1599 uint32_t ch_get_range(ch_dev_t *dev_ptr, ch_range_t range_type);
1600 
1615 uint16_t ch_get_amplitude(ch_dev_t *dev_ptr);
1616 
1635 uint16_t ch_get_amplitude_avg(ch_dev_t *dev_ptr);
1636 
1650 uint16_t ch_get_bandwidth(ch_dev_t *dev_ptr);
1651 
1682 uint8_t ch_set_frequency(ch_dev_t *dev_ptr, uint32_t request_op_freq_hz);
1683 
1699 uint32_t ch_get_frequency(ch_dev_t *dev_ptr);
1700 
1742 uint8_t ch_group_set_frequency(ch_group_t *grp_ptr, uint32_t request_op_freq_hz);
1743 
1764 uint32_t ch_group_get_frequency(ch_group_t *grp_ptr);
1765 
1777 uint16_t ch_get_rtc_cal_result(ch_dev_t *dev_ptr);
1778 
1794 uint16_t ch_get_rtc_cal_pulselength(ch_dev_t *dev_ptr);
1795 
1809 uint16_t ch_get_scale_factor(ch_dev_t *dev_ptr);
1810 
1889 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,
1890  ch_io_mode_t mode);
1891 
1969 uint8_t ch_get_amplitude_data(ch_dev_t *dev_ptr, uint16_t *buf_ptr, uint16_t start_sample, uint16_t num_samples,
1970  ch_io_mode_t mode);
1971 
1998 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,
1999  ch_io_mode_t mode);
2000 
2032 uint16_t ch_samples_to_mm(ch_dev_t *dev_ptr, uint16_t num_samples);
2033 
2069 uint16_t ch_mm_to_samples(ch_dev_t *dev_ptr, uint16_t num_mm);
2070 
2087 uint16_t ch_iq_to_amplitude(ch_iq_sample_t *iq_sample_ptr);
2088 
2105 uint8_t ch_io_start_nb(ch_group_t *grp_ptr);
2106 
2133 uint8_t ch_minimal_int_handler(ch_group_t *grp_ptr, uint8_t dev_num);
2134 
2158 void ch_interrupt(ch_group_t *grp_ptr, uint8_t dev_num);
2159 
2173 void ch_io_int_callback_set(ch_group_t *grp_ptr, ch_io_int_callback_t callback_func_ptr);
2174 
2185 void ch_io_complete_callback_set(ch_group_t *grp_ptr, ch_io_complete_callback_t callback_func_ptr);
2186 
2200 void ch_io_notify(ch_group_t *grp_ptr, uint8_t bus_index);
2201 
2252 uint8_t ch_set_target_interrupt(ch_dev_t *dev_ptr, ch_tgt_int_filter_t tgt_int_filter);
2253 
2275 
2321 uint8_t ch_set_target_int_counter(ch_dev_t *dev_ptr, uint8_t meas_hist, uint8_t thresh_count, uint8_t reset);
2322 
2351 uint8_t ch_get_target_int_counter(ch_dev_t *dev_ptr, uint8_t *meas_hist_ptr, uint8_t *thresh_count_ptr,
2352  uint8_t *reset_ptr);
2353 
2375 uint8_t ch_set_interrupt_mode(ch_dev_t *dev_ptr, ch_interrupt_mode_t mode);
2376 
2390 
2416 uint8_t ch_set_interrupt_drive(ch_dev_t *dev_ptr, ch_interrupt_drive_t drive);
2417 
2433 
2452 uint8_t ch_enable_data_validation(ch_dev_t *dev_ptr, int16_t seed, uint8_t enable);
2453 
2466 uint16_t ch_data_validation_check(ch_dev_t *dev_ptr, ch_iq_sample_t *data, uint16_t num_samples);
2467 
2491 uint8_t ch_enable_double_buffer(ch_dev_t *dev_ptr, uint8_t enable);
2492 
2507 uint8_t ch_enable_metadata_in_iq0(ch_dev_t *dev_ptr, uint8_t enable);
2508 
2535 uint8_t ch_update_metadata_from_iq0(ch_dev_t *dev_ptr, ch_iq_sample_t *iq_data);
2536 
2556 uint8_t ch_set_rx_holdoff(ch_dev_t *dev_ptr, uint16_t num_samples);
2557 
2577 uint16_t ch_get_rx_holdoff(ch_dev_t *dev_ptr);
2578 
2598 uint8_t ch_set_rx_low_gain(ch_dev_t *dev_ptr, uint16_t num_samples);
2599 
2620 uint16_t ch_get_rx_low_gain(ch_dev_t *dev_ptr);
2621 
2643 uint8_t ch_set_tx_length(ch_dev_t *dev_ptr, uint16_t num_cycles);
2644 
2665 uint16_t ch_get_tx_length(ch_dev_t *dev_ptr);
2666 
2689 void ch_set_rx_pretrigger(ch_group_t *grp_ptr, uint8_t enable);
2690 
2703 uint8_t ch_get_rx_pretrigger(ch_group_t *grp_ptr);
2704 
2717 uint8_t ch_check_program(ch_dev_t *dev_ptr);
2718 
2740 uint8_t ch_set_cal_result(ch_dev_t *dev_ptr, ch_cal_result_t *cal_ptr);
2741 
2756 uint8_t ch_get_cal_result(ch_dev_t *dev_ptr, ch_cal_result_t *cal_ptr);
2757 
2793 uint8_t ch_set_data_output(ch_dev_t *dev_ptr, ch_output_t *output_ptr);
2794 
2816 uint32_t ch_usec_to_cycles(ch_dev_t *dev_ptr, uint32_t num_usec);
2817 
2839 uint32_t ch_cycles_to_usec(ch_dev_t *dev_ptr, uint32_t num_cycles);
2840 
2859 uint32_t ch_samples_to_cycles(uint16_t num_samples, ch_odr_t odr);
2860 
2879 uint16_t ch_cycles_to_samples(uint32_t num_cycles, ch_odr_t odr);
2880 
2894 uint16_t ch_usec_to_ticks(ch_dev_t *dev_ptr, uint32_t num_usec);
2895 
2909 uint32_t ch_ticks_to_usec(ch_dev_t *dev_ptr, uint16_t num_ticks);
2910 
2911 #ifdef INCLUDE_SHASTA_SUPPORT
2912 
2923 uint8_t ch_meas_init_queue(ch_dev_t *dev_ptr);
2924 
2949 uint8_t ch_meas_import(ch_dev_t *dev_ptr, measurement_queue_t *meas_queue_ptr, void *algo_cfg_ptr);
2950 
2965 uint8_t ch_meas_reset(ch_dev_t *dev_ptr, uint8_t meas_num);
2966 
2989 uint8_t ch_meas_init(ch_dev_t *dev_ptr, uint8_t meas_num, const ch_meas_config_t *meas_config_ptr,
2990  const void *thresh_ptr);
2991 
3008 uint8_t ch_meas_write_config(ch_dev_t *dev_ptr);
3009 
3059 uint8_t ch_meas_optimize(ch_dev_t *dev_ptr, measurement_queue_t *meas_queue_ptr, void *algo_cfg_ptr);
3060 
3084 void ch_meas_activate(ch_dev_t *dev_ptr, uint8_t meas_num);
3085 
3106 void ch_meas_standby(ch_dev_t *dev_ptr, uint8_t meas_num);
3107 
3131 uint8_t ch_meas_switch(ch_dev_t *dev_ptr);
3132 
3146 uint8_t ch_meas_get_last_num(ch_dev_t *dev_ptr);
3147 
3162 uint16_t ch_get_next_buf_addr(ch_dev_t *dev_ptr);
3163 
3182 uint8_t ch_meas_get_queue(ch_dev_t *dev_ptr, measurement_queue_t *meas_queue_ptr);
3183 
3199 uint8_t ch_meas_add_segment(ch_dev_t *dev_ptr, uint8_t meas_num, ch_meas_segment_t *seg_ptr);
3200 
3216 uint8_t ch_meas_insert_segment(ch_dev_t *dev_ptr, uint8_t meas_num, const ch_meas_segment_t *inst_ptr,
3217  uint8_t index_to_insert);
3218 
3233 uint8_t ch_meas_insert_instruction(ch_dev_t *dev_ptr, uint8_t meas_num, const ch_meas_segment_t *inst_ptr,
3234  uint8_t index_to_insert);
3235 
3250 uint8_t ch_meas_remove_segment(ch_dev_t *dev_ptr, uint8_t meas_num, uint8_t index_to_remove);
3251 
3265 uint8_t ch_meas_remove_instruction(ch_dev_t *dev_ptr, uint8_t meas_num, uint8_t index_to_remove);
3266 
3284 uint8_t ch_meas_add_segment_count(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_cycles, uint8_t int_enable);
3285 
3302 uint8_t ch_meas_add_segment_rx(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_samples, uint8_t gain_reduce,
3303  uint8_t atten, uint8_t int_enable);
3304 
3325 uint8_t ch_meas_add_segment_tx(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_cycles, uint8_t pulse_width,
3326  uint8_t phase, uint8_t int_enable);
3327 
3345 void ch_meas_init_segment_count(ch_meas_segment_t *seg_ptr, uint16_t num_cycles, uint8_t int_enable);
3346 
3368 void ch_meas_init_segment_rx(ch_meas_segment_t *seg_ptr, uint16_t num_samples, ch_odr_t odr, uint8_t gain_reduce,
3369  uint8_t atten, uint8_t int_enable);
3370 
3390 void ch_meas_init_segment_tx(ch_meas_segment_t *seg_ptr, uint16_t num_cycles, uint8_t pulse_width, uint8_t phase,
3391  uint8_t int_enable);
3392 
3416 void ch_meas_get_info(ch_dev_t *dev_ptr, uint8_t meas_num, ch_meas_info_t *info_ptr);
3417 
3436 void ch_meas_get_queue_info(ch_dev_t *dev_ptr, ch_meas_queue_info_t *info_ptr);
3437 
3462 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);
3463 
3487 void ch_inst_get_seg_info(pmut_transceiver_inst_t *inst_ptr, uint8_t odr, ch_meas_seg_info_t *info_ptr);
3488 
3507 uint8_t ch_meas_set_interval(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t interval_ms);
3508 
3524 uint8_t ch_meas_set_interval_us(ch_dev_t *dev_ptr, uint8_t meas_num, uint32_t interval_us);
3525 
3541 uint8_t ch_meas_set_interval_ticks(ch_dev_t *dev_ptr, uint8_t meas_num, uint32_t rtc_ticks);
3542 
3555 uint16_t ch_meas_get_interval(ch_dev_t *dev_ptr, uint8_t meas_num);
3556 
3569 uint32_t ch_meas_get_interval_us(ch_dev_t *dev_ptr, uint8_t meas_num);
3570 
3583 uint32_t ch_meas_get_interval_ticks(ch_dev_t *dev_ptr, uint8_t meas_num);
3584 
3603 uint8_t ch_meas_time_hop_enable(ch_dev_t *dev_ptr, uint8_t meas_num);
3604 
3620 uint8_t ch_meas_time_hop_disable(ch_dev_t *dev_ptr, uint8_t meas_num);
3621 
3641 uint8_t ch_meas_set_odr(ch_dev_t *dev_ptr, uint8_t meas_num, ch_odr_t odr);
3642 
3657 ch_odr_t ch_meas_get_odr(ch_dev_t *dev_ptr, uint8_t meas_num);
3658 
3683 uint8_t ch_meas_set_num_samples(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_samples);
3684 
3703 uint16_t ch_meas_get_num_samples(ch_dev_t *dev_ptr, uint8_t meas_num);
3704 
3729 uint8_t ch_meas_set_max_range(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t max_range_mm);
3730 
3747 uint16_t ch_meas_get_max_range(ch_dev_t *dev_ptr, uint8_t meas_num);
3748 
3773 uint16_t ch_meas_mm_to_samples(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_mm);
3774 
3807 uint16_t ch_meas_samples_to_mm(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_samples);
3808 
3824 ch_output_type_t ch_meas_get_iq_output(ch_dev_t *dev_ptr, uint8_t meas_num);
3825 
3843 uint8_t ch_meas_set_iq_output(ch_dev_t *dev_ptr, uint8_t meas_num, ch_output_type_t output_format);
3844 
3861 uint8_t ch_init_algo(ch_dev_t *dev_ptr);
3862 
3878 uint8_t ch_get_algo_output(ch_dev_t *dev_ptr, void *algo_out_ptr);
3879 
3895 uint8_t ch_get_algo_state(ch_dev_t *dev_ptr, void *algo_state_ptr);
3896 
3912 uint8_t ch_get_algo_config(ch_dev_t *dev_ptr, void *algo_cfg_ptr);
3913 
3929 uint8_t ch_set_algo_config(ch_dev_t *dev_ptr, const void *algo_cfg_ptr);
3930 
3946 uint8_t ch_get_algo_info(ch_dev_t *dev_ptr, ICU_ALGO_SHASTA_INFO *algo_info_ptr);
3947 
3966 const char *ch_get_sensor_id(ch_dev_t *dev_ptr);
3967 
3988 uint8_t ch_get_mfg_info(ch_dev_t *dev_ptr, ch_mfg_info_t *info_ptr);
3989 
4001 uint32_t ch_measure_pmut_frequency(ch_dev_t *dev_ptr);
4002 
4003 #endif // INCLUDE_SHASTA_SUPPORT
4004 
4015 uint32_t ch_get_cpu_frequency(ch_dev_t *dev_ptr);
4016 
4123 uint8_t ch_set_rtc(ch_dev_t *dev_ptr, ch_rtc_src_t rtc_source, uint16_t rtc_freq);
4124 
4135 uint16_t ch_get_rtc_frequency(ch_dev_t *dev_ptr);
4136 
4206 uint8_t ch_set_pmut_clock(ch_dev_t *dev_ptr, ch_pmut_clk_cfg_t clock_cfg);
4207 
4222 
4255 void ch_group_set_pmut_clock_freq(ch_group_t *grp_ptr, uint32_t pmut_clock_freq);
4256 
4282 uint32_t ch_group_get_pmut_clock_freq(ch_group_t *grp_ptr);
4283 
4309 uint8_t ch_set_data_ready_delay(ch_dev_t *dev_ptr, uint8_t delay_ms);
4310 
4325 uint8_t ch_get_data_ready_delay(ch_dev_t *dev_ptr);
4326 
4346 uint16_t ch_get_num_output_samples(ch_dev_t *dev_ptr);
4347 
4364 void ch_trigger_soft(ch_dev_t *dev_ptr);
4365 
4391 void ch_set_trigger_type(ch_dev_t *dev_ptr, ch_trigger_type_t trig_type);
4392 
4412 
4436 ch_meas_status_t ch_meas_get_status(ch_dev_t *dev_ptr, uint8_t meas_num);
4437 
4449 uint8_t ch_log_init(ch_group_t *grp_ptr, ch_log_fmt_t format, ch_log_cfg_t *config_ptr);
4450 
4465 void ch_log_append(uint8_t log_id, ch_log_fmt_t format, uint64_t timestamp, ch_log_data_t *log_data_ptr);
4466 
4490 uint8_t ch_watchdog_enable(ch_dev_t *dev_ptr);
4491 
4506 uint8_t ch_watchdog_disable(ch_dev_t *dev_ptr);
4507 
4524 uint8_t ch_check_reset_state(ch_dev_t *dev_ptr, ch_sensor_reset_state_t *reset_state_ptr);
4525 
4526 #ifdef __cplusplus
4527 }
4528 #endif
4529 
4530 #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:1027
uint8_t ch_check_program(ch_dev_t *dev_ptr)
Check sensor firmware program.
Definition: ch_api.c:928
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:1148
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:1017
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:1265
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:834
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:933
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:999
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:1042
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:966
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:1143
uint16_t ch_get_rx_low_gain(ch_dev_t *dev_ptr)
Get the receive low-gain sample count.
Definition: ch_api.c:879
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:1032
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:1365
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:1255
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:1103
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:1178
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:1320
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:944
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:922
uint16_t ch_get_tx_length(ch_dev_t *dev_ptr)
Get the ultrasound transmit pulse length.
Definition: ch_api.c:902
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:1108
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:1113
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:1295
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:1055
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:891
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:1138
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:1335
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:1241
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:1158
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:1269
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:1050
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:1221
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_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:504
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:1350
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:1300
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:1153
void ch_meas_activate(ch_dev_t *dev_ptr, uint8_t meas_num)
Activate a defined measurement.
Definition: ch_api.c:1093
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:1122
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:989
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:1168
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:1325
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:1290
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:1355
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:1345
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:687
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:1084
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:1226
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:1022
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:690
const char * ch_get_sensor_id(ch_dev_t *dev_ptr)
Get the unique Sensor ID String for a sensor.
Definition: ch_api.c:1012
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:1285
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:1201
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:801
ch_pmut_clk_cfg_t ch_get_pmut_clock(ch_dev_t *dev_ptr)
Get ultrasound transducer clock configuration.
Definition: ch_api.c:1305
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:1061
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:1046
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:1187
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:820
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:1163
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:994
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:1117
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:693
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:1340
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:1206
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:696
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:1183
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:1133
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:1173
uint32_t ch_measure_pmut_frequency(ch_dev_t *dev_ptr)
Measure PMUT frequency on an ICU device.
Definition: ch_api.c:1279
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:955
uint8_t ch_watchdog_disable(ch_dev_t *dev_ptr)
Disable watchdog timer in sensor.
Definition: ch_api.c:1360
uint8_t ch_get_data_ready_delay(ch_dev_t *dev_ptr)
Get data ready interrupt delay interval.
Definition: ch_api.c:977
#define CH_SENSOR_ID_LENGTH
Definition: soniclib.h:506
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:570
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:1072
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:1037
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:867
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:1231
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:1196
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:1274
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:1260
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:1067
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:1310
ch_meas_seg_type_t
Measurement segment type.
Definition: soniclib.h:509
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:1216
uint32_t ch_cycles_to_usec(ch_dev_t *dev_ptr, uint32_t num_cycles)
Convert sensor cycles to microseconds.
Definition: ch_api.c:1330
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:848
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:1211
uint8_t ch_enable_data_validation(ch_dev_t *dev_ptr, int16_t seed, uint8_t enable)
Enable data validation mode. In this mode, ICU-x0201 sensors will overwrite the IQ data at the end of...
Definition: ch_api.c:791
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:1250
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:1191
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:1078
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
void ch_set_rx_pretrigger(ch_group_t *grp_ptr, uint8_t enable)
Enable/disable receive-only sensor pre-triggering.
Definition: ch_api.c:913
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_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:1315
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:1098
Sensor combined amplitude + detection threshold sample value.
Definition: soniclib.h:430
uint16_t amp
Definition: soniclib.h:432
uint16_t thresh
Definition: soniclib.h:431
API function pointer structure (internal use).
Definition: soniclib.h:607
Calibration result structure.
Definition: soniclib.h:442
Definition: soniclib.h:640
Clock calibration values.
Definition: soniclib.h:448
uint16_t rtc_freq
Definition: soniclib.h:449
uint8_t cpu_trim
Definition: soniclib.h:452
uint16_t pmut_trim
Definition: soniclib.h:451
uint16_t pmut_fcount
Definition: soniclib.h:450
Combined configuration structure.
Definition: soniclib.h:456
uint16_t sample_interval
Definition: soniclib.h:459
uint16_t max_range
Definition: soniclib.h:458
ch_tgt_int_filter_t tgt_int_filter
Definition: soniclib.h:460
ch_mode_t mode
Definition: soniclib.h:457
Chirp sensor device descriptor structure.
Definition: soniclib.h:732
uint16_t num_rx_samples
Definition: soniclib.h:769
uint8_t sensor_connected
Definition: soniclib.h:766
ch_rtc_status_t rtc_status
Definition: soniclib.h:743
ch_clock_cal_t test_clock_cal
Definition: soniclib.h:784
uint32_t freerun_intvl_us
Definition: soniclib.h:742
uint8_t reg_fmt_ver_major
Definition: soniclib.h:789
uint8_t is_continuous
Definition: soniclib.h:803
uint32_t orig_pmut_freq
Definition: soniclib.h:746
uint16_t rtc_frequency
Definition: soniclib.h:749
uint16_t pmut_clock_fcount
Definition: soniclib.h:752
fw_info_t * main_fw_info
Definition: soniclib.h:778
ch_interrupt_drive_t int_drive
Definition: soniclib.h:776
void * algo_cfg_ptr
Definition: soniclib.h:812
uint16_t static_range
Definition: soniclib.h:741
uint16_t buf_addr
Definition: soniclib.h:807
uint16_t num_win_samples
Definition: soniclib.h:771
uint16_t fcount_cycles
Definition: soniclib.h:751
uint16_t num_iq_bytes
Definition: soniclib.h:806
uint16_t i2c_drv_flags
Definition: soniclib.h:762
ch_interrupt_mode_t int_mode
Definition: soniclib.h:775
uint8_t main_fw_init_done
Definition: soniclib.h:782
uint8_t odr_out
Definition: soniclib.h:804
ICU_ALGO_SHASTA_INFO * sens_algo_info_addr
Definition: soniclib.h:810
uint16_t max_range
Definition: soniclib.h:740
ch_group_t * group
Definition: soniclib.h:733
shasta_config_t * sens_cfg_addr
Definition: soniclib.h:736
uint8_t i2c_address
Definition: soniclib.h:760
ch_trigger_type_t trig_type
Definition: soniclib.h:774
uint16_t part_number
Definition: soniclib.h:765
ch_asic_gen_t asic_gen
Definition: soniclib.h:738
uint8_t cpu_trim
Definition: soniclib.h:753
uint16_t bandwidth
Definition: soniclib.h:756
measurement_queue_t meas_queue
Definition: soniclib.h:793
uint8_t app_i2c_address
Definition: soniclib.h:761
uint32_t op_frequency
Definition: soniclib.h:747
ch_mode_t mode
Definition: soniclib.h:739
ch_meas_status_t meas_status
Definition: soniclib.h:773
uint8_t last_measurement
Definition: soniclib.h:802
uint16_t amp_scale_factor
Definition: soniclib.h:757
int16_t data_validation_counter
Definition: soniclib.h:786
ch_pmut_clk_cfg_t pmut_clk_cfg
Definition: soniclib.h:745
uint16_t rtc_cal_result
Definition: soniclib.h:744
fw_info_t * current_fw
Definition: soniclib.h:779
uint8_t reg_fmt_ver_minor
Definition: soniclib.h:790
ch_tgt_int_filter_t tgt_int_filter
Definition: soniclib.h:777
uint8_t io_index
Definition: soniclib.h:768
ICU_ALGO_SHASTA_INFO algo_info
Definition: soniclib.h:811
uint16_t pmut_trim
Definition: soniclib.h:754
uint8_t iq_output_format
Definition: soniclib.h:805
fw_info_t * init_fw_info
Definition: soniclib.h:781
uint8_t bus_index
Definition: soniclib.h:764
uint8_t asic_ready
Definition: soniclib.h:783
uint16_t tof_scale_factor
Definition: soniclib.h:758
uint32_t cpu_frequency
Definition: soniclib.h:748
uint16_t win_start_sample
Definition: soniclib.h:770
Chirp sensor group descriptor structure.
Definition: soniclib.h:704
ch_io_int_callback_t io_int_callback
Definition: soniclib.h:719
uint8_t sensor_count
Definition: soniclib.h:710
uint8_t num_ports
Definition: soniclib.h:706
uint16_t pretrig_delay_us
Definition: soniclib.h:718
uint32_t op_frequency
Definition: soniclib.h:712
uint8_t num_connected[CHIRP_NUM_BUSES]
Definition: soniclib.h:725
uint32_t pmut_clock_freq
Definition: soniclib.h:713
ch_group_status_t status
Definition: soniclib.h:705
chdrv_queue_t queue[CHIRP_NUM_BUSES]
Definition: soniclib.h:727
uint32_t io_bus_speed_hz
Definition: soniclib.h:714
uint8_t sensor_int_pin
Definition: soniclib.h:707
uint16_t rtc_cal_pulse_ms
Definition: soniclib.h:717
uint16_t i2c_drv_flags
Definition: soniclib.h:715
uint8_t sensor_trig_pin
Definition: soniclib.h:708
uint8_t num_buses
Definition: soniclib.h:709
ch_rtc_cal_t rtc_cal_type
Definition: soniclib.h:711
ch_io_complete_callback_t io_complete_callback
Definition: soniclib.h:720
ch_dev_t * device[CHIRP_MAX_NUM_SENSORS]
Definition: soniclib.h:722
I2C info structure.
Definition: soniclib.h:413
uint16_t drv_flags
Definition: soniclib.h:416
uint8_t bus_num
Definition: soniclib.h:415
uint8_t address
Definition: soniclib.h:414
Sensor I/Q data value.
Definition: soniclib.h:424
int16_t i
Definition: soniclib.h:426
int16_t q
Definition: soniclib.h:425
Log configuration structure.
Definition: soniclib.h:470
ch_output_type_t output_type
Definition: soniclib.h:472
ch_decimation_t decimation_factor
Definition: soniclib.h:473
uint16_t start_sample
Definition: soniclib.h:474
uint16_t interval_ms
Definition: soniclib.h:471
Log data structure.
Definition: soniclib.h:478
ch_iq_sample_t * iq_sample_ptr
Definition: soniclib.h:486
uint16_t amplitude
Definition: soniclib.h:482
uint8_t annotation
Definition: soniclib.h:483
uint8_t tx_sensor_id
Definition: soniclib.h:479
uint8_t rx_sensor_id
Definition: soniclib.h:480
uint16_t start_sample
Definition: soniclib.h:489
uint16_t num_samples
Definition: soniclib.h:490
ch_output_type_t output_type
Definition: soniclib.h:484
uint32_t range
Definition: soniclib.h:481
uint16_t * mag_data_ptr
Definition: soniclib.h:487
Measurement configuration - used during ch_meas_init()
Definition: soniclib.h:494
Measurement info.
Definition: soniclib.h:523
uint8_t num_segments
Definition: soniclib.h:527
ch_meas_mode_t mode
Definition: soniclib.h:530
uint16_t meas_period
Definition: soniclib.h:529
Measurement queue info.
Definition: soniclib.h:547
Measurement segment info.
Definition: soniclib.h:534
Measurement segment.
Definition: soniclib.h:517
Sensor manufacturing info.
Definition: soniclib.h:557
Data output structure.
Definition: soniclib.h:464
ch_output_type_t output_type
Definition: soniclib.h:465
ch_decimation_t decimation_factor
Definition: soniclib.h:466
Detection threshold value.
Definition: soniclib.h:436
SonicLib version structure.
Definition: soniclib.h:406
uint8_t major
Definition: soniclib.h:407
uint8_t rev
Definition: soniclib.h:409
uint8_t minor
Definition: soniclib.h:408
Queue structure, for non-blocking access.
Definition: ch_driver.h:116
Definition: soniclib.h:658
uint16_t fw_text_size
Definition: soniclib.h:672
uint16_t(* get_fw_ram_init_size)(void)
Definition: soniclib.h:664
uint16_t(* get_fw_ram_init_addr)(void)
Definition: soniclib.h:666
uint16_t max_samples
Definition: soniclib.h:675
const int8_t oversample
Definition: soniclib.h:678
const uint8_t * ram_init
Definition: soniclib.h:663
const uint16_t freqCounterCycles
Definition: soniclib.h:676
const uint8_t * fw_text
Definition: soniclib.h:661
const uint8_t fw_includes_sensor_init
Definition: soniclib.h:681
const uint8_t max_num_thresholds
Definition: soniclib.h:679
const char * fw_version_string
Definition: soniclib.h:660
const ch_api_funcs_t *const api_funcs
Definition: soniclib.h:671
uint16_t fw_vec_size
Definition: soniclib.h:673
const uint8_t freqLockValue
Definition: soniclib.h:677
const uint8_t * fw_vec
Definition: soniclib.h:662
const uint8_t fw_includes_tx_optimization
Definition: soniclib.h:682
Definition: icu_algo_info.h:10