Chirp SonicLib  4.5.2
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
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 (5)
116 #define SONICLIB_VER_REV (2)
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;
788  /* Sensor measurement queue */
789  measurement_queue_t meas_queue;
791  uint8_t meas_num_segments[CH_MEAS_MAX_MEAS]; // number of active segments per measurement
792  uint32_t meas_num_cycles[CH_MEAS_MAX_MEAS]; // total number of sensor cycles per measurement
793  uint16_t meas_num_tx_segments[CH_MEAS_MAX_MEAS]; // total number of transmit segments per measurement
794  uint16_t meas_pre_rx_cycles[CH_MEAS_MAX_MEAS]; // total number of sensor cycles in segments before first read
795  uint16_t meas_num_rx_samples[CH_MEAS_MAX_MEAS]; // total number of receive samples per measurement
796  uint16_t meas_max_range_mm[CH_MEAS_MAX_MEAS]; // max range setting based on num_rx_samples (millimeters)
797 
799  uint8_t is_continuous;
800  uint8_t odr_out;
802  uint16_t num_iq_bytes;
803  uint16_t buf_addr;
805  /* Sensor algorithm */
808  void *algo_cfg_ptr;
810 #endif // INCLUDE_SHASTA_SUPPORT
811 };
812 
813 /*============== API function prototypes and documentation ===================*/
814 
833 uint8_t ch_group_init(ch_group_t *grp_ptr, uint8_t num_devices, uint8_t num_buses, uint16_t rtc_cal_pulse_ms);
834 
874 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);
875 
893 uint8_t ch_set_init_firmware(ch_dev_t *dev_ptr, ch_fw_init_func_t fw_init_func);
894 
928 uint8_t ch_group_start(ch_group_t *grp_ptr);
929 
955 uint8_t ch_restart(ch_dev_t *dev_ptr);
956 
977 uint8_t ch_group_restart(ch_group_t *grp_ptr);
978 
994 uint8_t ch_get_config(ch_dev_t *dev_ptr, ch_config_t *config_ptr);
995 
1014 uint8_t ch_set_config(ch_dev_t *dev_ptr, ch_config_t *config_ptr);
1015 
1031 void ch_trigger(ch_dev_t *dev_ptr);
1032 
1052 void ch_group_trigger(ch_group_t *grp_ptr);
1053 
1063 void ch_reset(ch_dev_t *dev_ptr, ch_reset_t reset_type);
1064 
1074 void ch_group_reset(ch_group_t *grp_ptr, ch_reset_t reset_type);
1075 
1082 uint8_t ch_sensor_is_connected(ch_dev_t *dev_ptr);
1083 
1094 uint16_t ch_get_part_number(ch_dev_t *dev_ptr);
1095 
1107 uint8_t ch_get_dev_num(ch_dev_t *dev_ptr);
1108 
1120 ch_dev_t *ch_get_dev_ptr(ch_group_t *grp_ptr, uint8_t dev_num);
1121 
1133 uint8_t ch_get_num_ports(ch_group_t *grp_ptr);
1134 
1148 uint8_t ch_get_i2c_address(ch_dev_t *dev_ptr);
1149 
1161 uint8_t ch_get_bus(ch_dev_t *dev_ptr);
1162 
1180 void ch_get_version(ch_version_t *version_ptr);
1181 
1192 const char *ch_get_fw_version_string(ch_dev_t *dev_ptr);
1193 
1207 ch_mode_t ch_get_mode(ch_dev_t *dev_ptr);
1208 
1227 uint8_t ch_set_mode(ch_dev_t *dev_ptr, ch_mode_t mode);
1228 
1242 uint16_t ch_get_sample_interval(ch_dev_t *dev_ptr);
1243 
1256 uint16_t ch_get_freerun_interval(ch_dev_t *dev_ptr);
1257 
1270 uint32_t ch_get_freerun_interval_us(ch_dev_t *dev_ptr);
1271 
1285 uint16_t ch_get_freerun_interval_ticks(ch_dev_t *dev_ptr);
1286 
1303 uint8_t ch_set_sample_interval(ch_dev_t *dev_ptr, uint16_t interval_ms);
1304 
1326 uint8_t ch_set_freerun_interval(ch_dev_t *dev_ptr, uint16_t interval_ms);
1327 
1346 uint8_t ch_set_freerun_interval_us(ch_dev_t *dev_ptr, uint32_t interval_us);
1347 
1366 uint8_t ch_set_freerun_interval_ticks(ch_dev_t *dev_ptr, uint32_t interval_ticks);
1367 
1386 uint8_t ch_freerun_time_hop_enable(ch_dev_t *dev_ptr);
1387 
1403 uint8_t ch_freerun_time_hop_disable(ch_dev_t *dev_ptr);
1404 
1428 uint16_t ch_get_num_samples(ch_dev_t *dev_ptr);
1429 
1455 uint8_t ch_set_num_samples(ch_dev_t *dev_ptr, uint16_t num_samples);
1456 
1473 uint16_t ch_get_max_samples(ch_dev_t *dev_ptr);
1474 
1491 uint16_t ch_get_max_range(ch_dev_t *dev_ptr);
1492 
1511 uint8_t ch_set_max_range(ch_dev_t *dev_ptr, uint16_t max_range);
1512 
1534 uint8_t ch_get_sample_window(ch_dev_t *dev_ptr, uint16_t *start_sample_ptr, uint16_t *num_samples_ptr);
1535 
1556 uint8_t ch_set_sample_window(ch_dev_t *dev_ptr, uint16_t start_sample, uint16_t num_samples);
1557 
1595 uint32_t ch_get_range(ch_dev_t *dev_ptr, ch_range_t range_type);
1596 
1611 uint16_t ch_get_amplitude(ch_dev_t *dev_ptr);
1612 
1631 uint16_t ch_get_amplitude_avg(ch_dev_t *dev_ptr);
1632 
1646 uint16_t ch_get_bandwidth(ch_dev_t *dev_ptr);
1647 
1678 uint8_t ch_set_frequency(ch_dev_t *dev_ptr, uint32_t request_op_freq_hz);
1679 
1695 uint32_t ch_get_frequency(ch_dev_t *dev_ptr);
1696 
1738 uint8_t ch_group_set_frequency(ch_group_t *grp_ptr, uint32_t request_op_freq_hz);
1739 
1760 uint32_t ch_group_get_frequency(ch_group_t *grp_ptr);
1761 
1773 uint16_t ch_get_rtc_cal_result(ch_dev_t *dev_ptr);
1774 
1790 uint16_t ch_get_rtc_cal_pulselength(ch_dev_t *dev_ptr);
1791 
1805 uint16_t ch_get_scale_factor(ch_dev_t *dev_ptr);
1806 
1885 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,
1886  ch_io_mode_t mode);
1887 
1965 uint8_t ch_get_amplitude_data(ch_dev_t *dev_ptr, uint16_t *buf_ptr, uint16_t start_sample, uint16_t num_samples,
1966  ch_io_mode_t mode);
1967 
1994 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,
1995  ch_io_mode_t mode);
1996 
2028 uint16_t ch_samples_to_mm(ch_dev_t *dev_ptr, uint16_t num_samples);
2029 
2065 uint16_t ch_mm_to_samples(ch_dev_t *dev_ptr, uint16_t num_mm);
2066 
2083 uint16_t ch_iq_to_amplitude(ch_iq_sample_t *iq_sample_ptr);
2084 
2101 uint8_t ch_io_start_nb(ch_group_t *grp_ptr);
2102 
2129 uint8_t ch_minimal_int_handler(ch_group_t *grp_ptr, uint8_t dev_num);
2130 
2154 void ch_interrupt(ch_group_t *grp_ptr, uint8_t dev_num);
2155 
2169 void ch_io_int_callback_set(ch_group_t *grp_ptr, ch_io_int_callback_t callback_func_ptr);
2170 
2181 void ch_io_complete_callback_set(ch_group_t *grp_ptr, ch_io_complete_callback_t callback_func_ptr);
2182 
2196 void ch_io_notify(ch_group_t *grp_ptr, uint8_t bus_index);
2197 
2248 uint8_t ch_set_target_interrupt(ch_dev_t *dev_ptr, ch_tgt_int_filter_t tgt_int_filter);
2249 
2271 
2317 uint8_t ch_set_target_int_counter(ch_dev_t *dev_ptr, uint8_t meas_hist, uint8_t thresh_count, uint8_t reset);
2318 
2347 uint8_t ch_get_target_int_counter(ch_dev_t *dev_ptr, uint8_t *meas_hist_ptr, uint8_t *thresh_count_ptr,
2348  uint8_t *reset_ptr);
2349 
2371 uint8_t ch_set_interrupt_mode(ch_dev_t *dev_ptr, ch_interrupt_mode_t mode);
2372 
2386 
2412 uint8_t ch_set_interrupt_drive(ch_dev_t *dev_ptr, ch_interrupt_drive_t drive);
2413 
2429 
2448 uint8_t ch_enable_data_validation(ch_dev_t *dev_ptr, int16_t seed, uint8_t enable);
2449 
2462 uint16_t ch_data_validation_check(ch_dev_t *dev_ptr, ch_iq_sample_t *data, uint16_t num_samples);
2463 
2487 uint8_t ch_enable_double_buffer(ch_dev_t *dev_ptr, uint8_t enable);
2488 
2503 uint8_t ch_enable_metadata_in_iq0(ch_dev_t *dev_ptr, uint8_t enable);
2504 
2531 uint8_t ch_update_metadata_from_iq0(ch_dev_t *dev_ptr, ch_iq_sample_t *iq_data);
2532 
2552 uint8_t ch_set_rx_holdoff(ch_dev_t *dev_ptr, uint16_t num_samples);
2553 
2573 uint16_t ch_get_rx_holdoff(ch_dev_t *dev_ptr);
2574 
2594 uint8_t ch_set_rx_low_gain(ch_dev_t *dev_ptr, uint16_t num_samples);
2595 
2616 uint16_t ch_get_rx_low_gain(ch_dev_t *dev_ptr);
2617 
2639 uint8_t ch_set_tx_length(ch_dev_t *dev_ptr, uint16_t num_cycles);
2640 
2661 uint16_t ch_get_tx_length(ch_dev_t *dev_ptr);
2662 
2685 void ch_set_rx_pretrigger(ch_group_t *grp_ptr, uint8_t enable);
2686 
2699 uint8_t ch_get_rx_pretrigger(ch_group_t *grp_ptr);
2700 
2713 uint8_t ch_check_program(ch_dev_t *dev_ptr);
2714 
2736 uint8_t ch_set_cal_result(ch_dev_t *dev_ptr, ch_cal_result_t *cal_ptr);
2737 
2752 uint8_t ch_get_cal_result(ch_dev_t *dev_ptr, ch_cal_result_t *cal_ptr);
2753 
2789 uint8_t ch_set_data_output(ch_dev_t *dev_ptr, ch_output_t *output_ptr);
2790 
2812 uint32_t ch_usec_to_cycles(ch_dev_t *dev_ptr, uint32_t num_usec);
2813 
2835 uint32_t ch_cycles_to_usec(ch_dev_t *dev_ptr, uint32_t num_cycles);
2836 
2855 uint32_t ch_samples_to_cycles(uint16_t num_samples, ch_odr_t odr);
2856 
2875 uint16_t ch_cycles_to_samples(uint32_t num_cycles, ch_odr_t odr);
2876 
2890 uint16_t ch_usec_to_ticks(ch_dev_t *dev_ptr, uint32_t num_usec);
2891 
2905 uint32_t ch_ticks_to_usec(ch_dev_t *dev_ptr, uint16_t num_ticks);
2906 
2907 #ifdef INCLUDE_SHASTA_SUPPORT
2908 
2919 uint8_t ch_meas_init_queue(ch_dev_t *dev_ptr);
2920 
2945 uint8_t ch_meas_import(ch_dev_t *dev_ptr, measurement_queue_t *meas_queue_ptr, void *algo_cfg_ptr);
2946 
2961 uint8_t ch_meas_reset(ch_dev_t *dev_ptr, uint8_t meas_num);
2962 
2985 uint8_t ch_meas_init(ch_dev_t *dev_ptr, uint8_t meas_num, const ch_meas_config_t *meas_config_ptr,
2986  const void *thresh_ptr);
2987 
3004 uint8_t ch_meas_write_config(ch_dev_t *dev_ptr);
3005 
3055 uint8_t ch_meas_optimize(ch_dev_t *dev_ptr, measurement_queue_t *meas_queue_ptr, void *algo_cfg_ptr);
3056 
3080 void ch_meas_activate(ch_dev_t *dev_ptr, uint8_t meas_num);
3081 
3102 void ch_meas_standby(ch_dev_t *dev_ptr, uint8_t meas_num);
3103 
3127 uint8_t ch_meas_switch(ch_dev_t *dev_ptr);
3128 
3142 uint8_t ch_meas_get_last_num(ch_dev_t *dev_ptr);
3143 
3158 uint16_t ch_get_next_buf_addr(ch_dev_t *dev_ptr);
3159 
3178 uint8_t ch_meas_get_queue(ch_dev_t *dev_ptr, measurement_queue_t *meas_queue_ptr);
3179 
3195 uint8_t ch_meas_add_segment(ch_dev_t *dev_ptr, uint8_t meas_num, ch_meas_segment_t *seg_ptr);
3196 
3212 uint8_t ch_meas_insert_segment(ch_dev_t *dev_ptr, uint8_t meas_num, const ch_meas_segment_t *inst_ptr,
3213  uint8_t index_to_insert);
3214 
3229 uint8_t ch_meas_insert_instruction(ch_dev_t *dev_ptr, uint8_t meas_num, const ch_meas_segment_t *inst_ptr,
3230  uint8_t index_to_insert);
3231 
3246 uint8_t ch_meas_remove_segment(ch_dev_t *dev_ptr, uint8_t meas_num, uint8_t index_to_remove);
3247 
3261 uint8_t ch_meas_remove_instruction(ch_dev_t *dev_ptr, uint8_t meas_num, uint8_t index_to_remove);
3262 
3280 uint8_t ch_meas_add_segment_count(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_cycles, uint8_t int_enable);
3281 
3298 uint8_t ch_meas_add_segment_rx(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_samples, uint8_t gain_reduce,
3299  uint8_t atten, uint8_t int_enable);
3300 
3321 uint8_t ch_meas_add_segment_tx(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_cycles, uint8_t pulse_width,
3322  uint8_t phase, uint8_t int_enable);
3323 
3341 void ch_meas_init_segment_count(ch_meas_segment_t *seg_ptr, uint16_t num_cycles, uint8_t int_enable);
3342 
3364 void ch_meas_init_segment_rx(ch_meas_segment_t *seg_ptr, uint16_t num_samples, ch_odr_t odr, uint8_t gain_reduce,
3365  uint8_t atten, uint8_t int_enable);
3366 
3386 void ch_meas_init_segment_tx(ch_meas_segment_t *seg_ptr, uint16_t num_cycles, uint8_t pulse_width, uint8_t phase,
3387  uint8_t int_enable);
3388 
3412 void ch_meas_get_info(ch_dev_t *dev_ptr, uint8_t meas_num, ch_meas_info_t *info_ptr);
3413 
3432 void ch_meas_get_queue_info(ch_dev_t *dev_ptr, ch_meas_queue_info_t *info_ptr);
3433 
3458 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);
3459 
3478 uint8_t ch_meas_set_interval(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t interval_ms);
3479 
3495 uint8_t ch_meas_set_interval_us(ch_dev_t *dev_ptr, uint8_t meas_num, uint32_t interval_us);
3496 
3512 uint8_t ch_meas_set_interval_ticks(ch_dev_t *dev_ptr, uint8_t meas_num, uint32_t rtc_ticks);
3513 
3526 uint16_t ch_meas_get_interval(ch_dev_t *dev_ptr, uint8_t meas_num);
3527 
3540 uint32_t ch_meas_get_interval_us(ch_dev_t *dev_ptr, uint8_t meas_num);
3541 
3554 uint32_t ch_meas_get_interval_ticks(ch_dev_t *dev_ptr, uint8_t meas_num);
3555 
3574 uint8_t ch_meas_time_hop_enable(ch_dev_t *dev_ptr, uint8_t meas_num);
3575 
3591 uint8_t ch_meas_time_hop_disable(ch_dev_t *dev_ptr, uint8_t meas_num);
3592 
3612 uint8_t ch_meas_set_odr(ch_dev_t *dev_ptr, uint8_t meas_num, ch_odr_t odr);
3613 
3628 ch_odr_t ch_meas_get_odr(ch_dev_t *dev_ptr, uint8_t meas_num);
3629 
3654 uint8_t ch_meas_set_num_samples(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_samples);
3655 
3674 uint16_t ch_meas_get_num_samples(ch_dev_t *dev_ptr, uint8_t meas_num);
3675 
3700 uint8_t ch_meas_set_max_range(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t max_range_mm);
3701 
3718 uint16_t ch_meas_get_max_range(ch_dev_t *dev_ptr, uint8_t meas_num);
3719 
3744 uint16_t ch_meas_mm_to_samples(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_mm);
3745 
3778 uint16_t ch_meas_samples_to_mm(ch_dev_t *dev_ptr, uint8_t meas_num, uint16_t num_samples);
3779 
3795 ch_output_type_t ch_meas_get_iq_output(ch_dev_t *dev_ptr, uint8_t meas_num);
3796 
3814 uint8_t ch_meas_set_iq_output(ch_dev_t *dev_ptr, uint8_t meas_num, ch_output_type_t output_format);
3815 
3832 uint8_t ch_init_algo(ch_dev_t *dev_ptr);
3833 
3849 uint8_t ch_get_algo_output(ch_dev_t *dev_ptr, void *algo_out_ptr);
3850 
3866 uint8_t ch_get_algo_state(ch_dev_t *dev_ptr, void *algo_state_ptr);
3867 
3883 uint8_t ch_get_algo_config(ch_dev_t *dev_ptr, void *algo_cfg_ptr);
3884 
3900 uint8_t ch_set_algo_config(ch_dev_t *dev_ptr, const void *algo_cfg_ptr);
3901 
3917 uint8_t ch_get_algo_info(ch_dev_t *dev_ptr, ICU_ALGO_SHASTA_INFO *algo_info_ptr);
3918 
3937 const char *ch_get_sensor_id(ch_dev_t *dev_ptr);
3938 
3959 uint8_t ch_get_mfg_info(ch_dev_t *dev_ptr, ch_mfg_info_t *info_ptr);
3960 
3972 uint32_t ch_measure_pmut_frequency(ch_dev_t *dev_ptr);
3973 
3974 #endif // INCLUDE_SHASTA_SUPPORT
3975 
3986 uint32_t ch_get_cpu_frequency(ch_dev_t *dev_ptr);
3987 
4094 uint8_t ch_set_rtc(ch_dev_t *dev_ptr, ch_rtc_src_t rtc_source, uint16_t rtc_freq);
4095 
4106 uint16_t ch_get_rtc_frequency(ch_dev_t *dev_ptr);
4107 
4177 uint8_t ch_set_pmut_clock(ch_dev_t *dev_ptr, ch_pmut_clk_cfg_t clock_cfg);
4178 
4193 
4226 void ch_group_set_pmut_clock_freq(ch_group_t *grp_ptr, uint32_t pmut_clock_freq);
4227 
4253 uint32_t ch_group_get_pmut_clock_freq(ch_group_t *grp_ptr);
4254 
4280 uint8_t ch_set_data_ready_delay(ch_dev_t *dev_ptr, uint8_t delay_ms);
4281 
4296 uint8_t ch_get_data_ready_delay(ch_dev_t *dev_ptr);
4297 
4317 uint16_t ch_get_num_output_samples(ch_dev_t *dev_ptr);
4318 
4335 void ch_trigger_soft(ch_dev_t *dev_ptr);
4336 
4362 void ch_set_trigger_type(ch_dev_t *dev_ptr, ch_trigger_type_t trig_type);
4363 
4383 
4407 ch_meas_status_t ch_meas_get_status(ch_dev_t *dev_ptr, uint8_t meas_num);
4408 
4420 uint8_t ch_log_init(ch_group_t *grp_ptr, ch_log_fmt_t format, ch_log_cfg_t *config_ptr);
4421 
4436 void ch_log_append(uint8_t log_id, ch_log_fmt_t format, uint64_t timestamp, ch_log_data_t *log_data_ptr);
4437 
4461 uint8_t ch_watchdog_enable(ch_dev_t *dev_ptr);
4462 
4477 uint8_t ch_watchdog_disable(ch_dev_t *dev_ptr);
4478 
4495 uint8_t ch_check_reset_state(ch_dev_t *dev_ptr, ch_sensor_reset_state_t *reset_state_ptr);
4496 
4497 #ifdef __cplusplus
4498 }
4499 #endif
4500 
4501 #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:1143
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:1260
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
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:1360
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:1250
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:1173
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:1315
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:1290
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:1330
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:1236
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:1153
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:1264
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:1216
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:1345
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:1295
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:1148
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:1163
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:1320
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:1285
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:1350
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:1340
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:1221
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:1280
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:1196
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:1300
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:1182
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:1158
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:1335
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:1201
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:1178
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:1168
uint32_t ch_measure_pmut_frequency(ch_dev_t *dev_ptr)
Measure PMUT frequency on an ICU device.
Definition: ch_api.c:1274
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:1355
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:1226
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:1191
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:1269
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:1255
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:1305
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:1211
uint32_t ch_cycles_to_usec(ch_dev_t *dev_ptr, uint32_t num_cycles)
Convert sensor cycles to microseconds.
Definition: ch_api.c:1325
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:1206
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:1245
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:1186
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:1310
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 is_continuous
Definition: soniclib.h:799
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:808
uint16_t static_range
Definition: soniclib.h:741
uint16_t buf_addr
Definition: soniclib.h:803
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:802
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:800
ICU_ALGO_SHASTA_INFO * sens_algo_info_addr
Definition: soniclib.h:806
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:789
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:798
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
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:807
uint16_t pmut_trim
Definition: soniclib.h:754
uint8_t iq_output_format
Definition: soniclib.h:801
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:115
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