Chirp SonicLib  4.9.0
ch_driver.h
Go to the documentation of this file.
1 
18 /*
19  Copyright 2016-2023, InvenSense, Inc. All rights reserved.
20 
21  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
22  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24  DISCLAIMED.
25 
26  */
27 
28 #ifndef CH_DRIVER_H_
29 #define CH_DRIVER_H_
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 // #define USE_PRE_PROD_SERIAL_NUM // if defined, handle pre-production ICU serial number
36 
37 #include <invn/soniclib/soniclib.h>
38 
39 #include <stdint.h>
40 #include <stdlib.h>
41 #include <math.h>
42 #include <string.h>
43 #include <invn/icu_interface/shasta_pmut_instruction.h>
44 
45 #define CHDRV_I2C_MAX_WRITE_BYTES 256
47 #define CHDRV_NB_TRANS_TYPE_STD (0)
48 #define CHDRV_NB_TRANS_TYPE_PROG (1)
49 #define CHDRV_NB_TRANS_TYPE_EXTERNAL (2)
51 /*** Definitions relative to CHx01 sensors */
52 
53 /* Programming interface register addresses */
54 #define CH_PROG_REG_PING 0x00
55 #define CH_PROG_REG_CPU 0x42
56 #define CH_PROG_REG_STAT 0x43
57 #define CH_PROG_REG_CTL 0x44
58 #define CH_PROG_REG_ADDR 0x05
59 #define CH_PROG_REG_CNT 0x07
60 #define CH_PROG_REG_DATA 0x06
62 #define CH_PROG_ADDR_WDT_REG (0x0120)
63 #define CH_PROG_ADDR_PMUT_CNTRL4_REG (0x01A6)
64 #define CH_PROG_ADDR_DEV_I2C_ADDR_REG (0x01C5)
65 #define CH_PROG_ADDR_IDLE_LOC (CHX01_PROG_MEM_ADDR + CHX01_PROG_MEM_SIZE - 4)
67 #define PMUT_CNTRL4_HVVSS_FON (0x0200)
68 #define PMUT_CNTRL4_HVVDD_FON (0x0400)
69 
70 #define CH_PROG_SIZEOF(R) ((R)&0x40 ? 1 : 2)
73 #define CH_PROG_XFER_SIZE (256)
75 /*** End of definitions relative to CHx01 sensors */
76 
77 #define CHDRV_DEBUG_PIN_NUM (0)
79 #define CHDRV_MAX_QUEUE_LENGTH \
80  CHIRP_MAX_NUM_SENSORS
82 #define CHDRV_FREQLOCK_TIMEOUT_MS \
83  100
85 #define CHDRV_BANDWIDTH_INDEX_1 6
86 #define CHDRV_BANDWIDTH_INDEX_2 \
87  (CHDRV_BANDWIDTH_INDEX_1 + 1)
90 #define CHDRV_SCALEFACTOR_INDEX 4
92 #define CHDRV_TRIGGER_PULSE_US 5
93 #define CHDRV_DELAY_OVERHEAD_US (0)
94 #define CHDRV_PRETRIGGER_DELAY_US 600
95 #define CHDRV_POST_TRIG_IEN_DELAY_US \
96  10
97 #define CHDRV_POST_ALGO_INIT_DELAY_MS 3
98 #define CHDRV_DELAY_EN_CHARGE_PUMP_MS (5)
99 #define CHDRV_EVENT_TIMEOUT_MS (750)
101 #define CHDRV_I2C_SPEED_DEFAULT_HZ (400000)
104 typedef struct chdrv_transaction {
105  uint8_t type;
106  uint8_t rd_wrb;
107  uint8_t xfer_num;
108  uint16_t addr;
109  uint16_t nbytes;
111  uint8_t *databuf;
113 
115 typedef struct chdrv_queue {
116  uint8_t read_pending;
117  uint8_t running;
118  uint8_t len;
119  uint8_t idx;
122 
138 void chdrv_group_measure_rtc(ch_group_t *grp_ptr);
139 
158 
172 uint32_t chdrv_one_way_range(ch_dev_t *dev_ptr, uint16_t tof, uint16_t tof_sf);
173 
187 uint32_t chdrv_round_trip_range(ch_dev_t *dev_ptr, uint16_t tof, uint16_t tof_sf);
188 
202 int chdrv_group_queue(ch_group_t *grp_ptr, ch_dev_t *instance, uint8_t rd_wrb, uint8_t type, uint16_t addr,
203  uint16_t nbytes, uint8_t *data);
204 
224 int chdrv_external_queue(ch_group_t *grp_ptr, ch_dev_t *instance, uint8_t rd_wrb, uint16_t addr, uint16_t nbytes,
225  uint8_t *data);
226 
234 void chdrv_group_start_nb(ch_group_t *grp_ptr);
235 
245 void chdrv_group_irq_handler(ch_group_t *grp_ptr, uint8_t bus_index);
246 
247 #ifdef INCLUDE_WHITNEY_SUPPORT
259 int chdrv_wait_for_lock(ch_dev_t *dev_ptr, uint16_t timeout_ms);
260 
274 
275 #endif // INCLUDE_WHITNEY_SUPPORT
276 
288 int chdrv_group_hw_trigger(ch_group_t *grp_ptr);
289 
305 int chdrv_hw_trigger(ch_dev_t *dev_ptr);
306 
321 int chdrv_prog_ping(ch_dev_t *dev_ptr);
322 
340 int chdrv_detect_and_program(ch_dev_t *dev_ptr);
341 
359 
378 int chdrv_init(ch_dev_t *dev_ptr, uint8_t i2c_addr, uint8_t io_index, uint8_t bus_index, uint16_t part_number);
379 
389 int chdrv_group_prepare(ch_group_t *grp_ptr);
390 
411 uint8_t chdrv_group_start(ch_group_t *grp_ptr);
412 
423 int chdrv_restart(ch_dev_t *dev_ptr);
424 
434 int chdrv_write_byte(ch_dev_t *dev_ptr, uint16_t mem_addr, uint8_t data);
435 
445 int chdrv_write_word(ch_dev_t *dev_ptr, uint16_t mem_addr, uint16_t data);
446 
456 int chdrv_read_byte(ch_dev_t *dev_ptr, uint16_t mem_addr, uint8_t *data);
457 
467 int chdrv_read_word(ch_dev_t *dev_ptr, uint16_t mem_addr, uint16_t *data);
468 
480 int chdrv_burst_read(ch_dev_t *dev_ptr, uint16_t mem_addr, uint8_t *data, uint16_t len);
481 
490 int chdrv_read_buf_addr(ch_dev_t *dev_ptr);
491 
503 int chdrv_burst_write(ch_dev_t *dev_ptr, uint16_t mem_addr, const uint8_t *data, uint16_t num_bytes);
504 
514 int chdrv_soft_reset(ch_dev_t *dev_ptr);
515 
525 int chdrv_group_hard_reset(ch_group_t *grp_ptr);
526 
537 int chdrv_group_soft_reset(ch_group_t *grp_ptr);
538 
551 int chdrv_set_idle(ch_dev_t *dev_ptr);
552 
564 int chdrv_prog_write(ch_dev_t *dev_ptr, uint8_t reg_addr, uint16_t data);
565 
578 int chdrv_prog_i2c_write(ch_dev_t *dev_ptr, const uint8_t *message, uint16_t len);
579 
592 int chdrv_prog_i2c_read(ch_dev_t *dev_ptr, uint8_t *message, uint16_t len);
593 
607 int chdrv_prog_i2c_read_nb(ch_dev_t *dev_ptr, uint8_t *message, uint16_t len);
608 
622 int chdrv_prog_mem_write(ch_dev_t *dev_ptr, uint16_t addr, const uint8_t *message, uint16_t nbytes);
623 
637 int chdrv_pretrigger_delay_set(ch_group_t *grp_ptr, uint16_t delay_us);
638 
651 uint8_t chdrv_sys_ctrl_read(ch_dev_t *dev_ptr, uint8_t *reg_value_ptr);
652 
667 uint8_t chdrv_sys_ctrl_write(ch_dev_t *dev_ptr, uint8_t reg_value);
668 
680 uint8_t chdrv_dbg_reg_read(ch_dev_t *dev_ptr, uint8_t reg_id, uint16_t *reg_value_ptr);
681 
695 uint8_t chdrv_dbg_reg_write(ch_dev_t *dev_ptr, uint8_t reg_id, uint16_t reg_value);
696 
723 uint8_t chdrv_int_notify(ch_group_t *grp_ptr, uint8_t dev_num);
724 
737 void chdrv_int_callback(ch_group_t *grp_ptr, uint8_t dev_num);
738 
756 void chdrv_int_callback_deferred(ch_group_t *grp_ptr, uint8_t dev_num);
757 
758 #ifdef INCLUDE_SHASTA_SUPPORT
759 
772 uint8_t chdrv_event_trigger(ch_dev_t *dev_ptr, uint16_t event);
773 
786 uint8_t chdrv_event_trigger_and_wait(ch_dev_t *dev_ptr, uint16_t event);
787 
805 uint8_t chdrv_otpmem_read(ch_dev_t *dev_ptr);
806 
823 uint8_t chdrv_otpmem_copy(ch_dev_t *dev_ptr, otp_copy_t *otp_copy_ptr);
824 
835 uint8_t chdrv_algo_init(ch_dev_t *dev_ptr);
836 
847 uint8_t chdrv_algo_info_read(ch_dev_t *dev_ptr, ICU_ALGO_SHASTA_INFO *algo_info_ptr);
848 
860 uint8_t chdrv_algo_cfg_read(ch_dev_t *dev_ptr, void *algo_cfg_ptr);
861 
873 uint8_t chdrv_algo_cfg_write(ch_dev_t *dev_ptr, const void *algo_cfg_ptr);
874 
886 uint8_t chdrv_algo_out_read(ch_dev_t *dev_ptr, void *algo_out_ptr);
887 
899 uint8_t chdrv_algo_state_read(ch_dev_t *dev_ptr, void *algo_state_ptr);
900 
917 uint8_t chdrv_meas_queue_write(ch_dev_t *dev_ptr, measurement_queue_t *q_buf_ptr);
918 
935 uint8_t chdrv_meas_queue_read(ch_dev_t *dev_ptr, measurement_queue_t *q_buf_ptr);
936 
937 #endif
938 
954 void chdrv_trig_assert(ch_dev_t *dev_ptr);
955 
971 void chdrv_trig_deassert(ch_dev_t *dev_ptr);
972 
988 void chdrv_trig_group_assert(ch_group_t *grp_ptr);
989 
1005 void chdrv_trig_group_deassert(ch_group_t *grp_ptr);
1006 
1020 void chdrv_trig_set_dir_out(ch_dev_t *dev_ptr);
1021 
1036 
1052 void chdrv_int_group_assert(ch_group_t *grp_ptr);
1053 
1069 void chdrv_int_group_deassert(ch_group_t *grp_ptr);
1070 
1084 void chdrv_int_set_dir_in(ch_dev_t *dev_ptr);
1085 
1099 void chdrv_int_group_set_dir_in(ch_group_t *grp_ptr);
1100 
1115 
1133 void chdrv_int_interrupt_enable(ch_dev_t *dev_ptr);
1134 
1152 void chdrv_int_interrupt_disable(ch_dev_t *dev_ptr);
1153 
1172 
1191 
1202 uint32_t chdrv_cpu_freq_calculate(ch_dev_t *dev_ptr);
1203 
1217 uint32_t chdrv_cpu_freq_adjust(ch_dev_t *dev_ptr, uint32_t pmut_freq);
1218 
1228 uint8_t chdrv_run_bist(ch_dev_t *dev_ptr);
1229 
1240 void chdrv_group_measure_pmut(ch_group_t *grp_ptr);
1241 
1242 uint8_t chdrv_check_reset_state(ch_dev_t *dev_ptr, uint8_t *reset_state);
1243 
1259 void chdrv_enable_mq_sanitize(ch_dev_t *dev_ptr);
1260 
1282 void chdrv_disable_mq_sanitize(ch_dev_t *dev_ptr);
1283 
1299 int16_t chdrv_is_mq_sanitize_enabled(const ch_dev_t *dev_ptr);
1300 
1325 uint8_t chdrv_adjust_rx_len(volatile pmut_transceiver_inst_t *trx_inst, uint8_t cic_odr, int rx_len, int eof_idx);
1326 
1327 #ifdef __cplusplus
1328 }
1329 #endif
1330 
1331 #endif /* CH_DRIVER_H_ */
int chdrv_hw_trigger(ch_dev_t *dev_ptr)
Start a measurement in hardware triggered mode on one sensor.
Definition: ch_driver.c:2118
void chdrv_group_irq_handler(ch_group_t *grp_ptr, uint8_t bus_index)
Continue a non-blocking readout.
Definition: ch_driver.c:1795
int chdrv_group_hard_reset(ch_group_t *grp_ptr)
Perform a hard reset on a group of sensors.
Definition: ch_driver.c:3019
uint32_t chdrv_cpu_freq_adjust(ch_dev_t *dev_ptr, uint32_t pmut_freq)
Adjust sensor micro-controller CPU frequency.
Definition: ch_driver.c:1357
struct chdrv_transaction chdrv_transaction_t
Transaction control structure.
uint32_t chdrv_one_way_range(ch_dev_t *dev_ptr, uint16_t tof, uint16_t tof_sf)
Convert the sensor register values to a range using the calibration data in the ch_dev_t struct.
Definition: ch_driver.c:1708
int chdrv_prog_i2c_read(ch_dev_t *dev_ptr, uint8_t *message, uint16_t len)
Read bytes from a CHx01 device in programming mode.
Definition: ch_driver.c:441
void chdrv_int_interrupt_enable(ch_dev_t *dev_ptr)
Enable interrupts on the interrupt line for a sensor.
Definition: ch_driver.c:275
uint8_t chdrv_otpmem_read(ch_dev_t *dev_ptr)
Read OTP memory contents.
Definition: ch_driver.c:906
int chdrv_set_idle(ch_dev_t *dev_ptr)
Put CHx01 sensor(s) in idle state.
Definition: ch_driver.c:2595
uint8_t chdrv_algo_cfg_read(ch_dev_t *dev_ptr, void *algo_cfg_ptr)
Read the algorithm configuration data from a sensor.
Definition: ch_driver.c:1248
uint8_t chdrv_check_reset_state(ch_dev_t *dev_ptr, uint8_t *reset_state)
Check if sensor reset has occurred.
Definition: ch_driver.c:3144
void chdrv_int_set_dir_in(ch_dev_t *dev_ptr)
Configure the interrupt line for a sensor as an input.
Definition: ch_driver.c:239
int chdrv_group_hw_trigger(ch_group_t *grp_ptr)
Start a measurement in hardware triggered mode.
Definition: ch_driver.c:2037
struct chdrv_queue chdrv_queue_t
Queue structure, for non-blocking access.
uint8_t chdrv_dbg_reg_read(ch_dev_t *dev_ptr, uint8_t reg_id, uint16_t *reg_value_ptr)
Read the debug register from a sensor.
Definition: ch_driver.c:856
int chdrv_read_buf_addr(ch_dev_t *dev_ptr)
Read the IQ buffer address from the sensor and store in dev_ptr.
Definition: ch_driver.c:2381
void chdrv_int_group_assert(ch_group_t *grp_ptr)
Assert the interrupt lines for all sensors in a group.
Definition: ch_driver.c:215
void chdrv_int_group_set_dir_in(ch_group_t *grp_ptr)
Configure the interrupt lines for all sensors in a group as inputs.
Definition: ch_driver.c:251
void chdrv_int_group_deassert(ch_group_t *grp_ptr)
De-assert the interrupt lines for all sensors in a group.
Definition: ch_driver.c:227
int chdrv_prog_ping(ch_dev_t *dev_ptr)
Detect a connected sensor.
Definition: ch_driver.c:2511
uint8_t chdrv_event_trigger(ch_dev_t *dev_ptr, uint16_t event)
Trigger an event on a sensor and return immediately.
Definition: ch_driver.c:661
uint8_t chdrv_algo_cfg_write(ch_dev_t *dev_ptr, const void *algo_cfg_ptr)
Write the algorithm configuration data to a sensor.
Definition: ch_driver.c:1258
uint8_t chdrv_dbg_reg_write(ch_dev_t *dev_ptr, uint8_t reg_id, uint16_t reg_value)
Write the debug register in a sensor.
Definition: ch_driver.c:881
int chdrv_group_queue(ch_group_t *grp_ptr, ch_dev_t *instance, uint8_t rd_wrb, uint8_t type, uint16_t addr, uint16_t nbytes, uint8_t *data)
Add an I2C/SPI transaction to the non-blocking queue.
Definition: ch_driver.c:1740
void chdrv_int_callback(ch_group_t *grp_ptr, uint8_t dev_num)
Driver callback routine for sensor interrupt.
Definition: ch_driver.c:756
uint8_t chdrv_adjust_rx_len(volatile pmut_transceiver_inst_t *trx_inst, uint8_t cic_odr, int rx_len, int eof_idx)
This function trims the total RX length to remove excess ADC samples that don't result in additional ...
Definition: ch_driver.c:1068
void chdrv_group_measure_rtc_no_pulse(ch_group_t *grp_ptr)
Calibrate the sensor real-time clock without using a pulse.
Definition: ch_driver.c:1635
void chdrv_disable_mq_sanitize(ch_dev_t *dev_ptr)
Disable the measurement config sanitization step when loading configs.
Definition: ch_driver.c:1097
uint8_t chdrv_algo_out_read(ch_dev_t *dev_ptr, void *algo_out_ptr)
Read the algorithm output data from a sensor.
Definition: ch_driver.c:1265
int chdrv_prog_write(ch_dev_t *dev_ptr, uint8_t reg_addr, uint16_t data)
Write to a CHx01 programming register.
Definition: ch_driver.c:2158
void chdrv_trig_assert(ch_dev_t *dev_ptr)
Assert the hardware trigger line for a sensor.
Definition: ch_driver.c:325
void chdrv_trig_set_dir_out(ch_dev_t *dev_ptr)
Configure the hardware trigger line for a sensor as an output.
Definition: ch_driver.c:373
int chdrv_prog_mem_write(ch_dev_t *dev_ptr, uint16_t addr, const uint8_t *message, uint16_t nbytes)
Write to CHx01 sensor memory.
Definition: ch_driver.c:2192
int chdrv_group_wait_for_lock(ch_group_t *grp_ptr)
Wait for all sensors to finish start-up procedure.
Definition: ch_driver.c:2013
int16_t chdrv_is_mq_sanitize_enabled(const ch_dev_t *dev_ptr)
Check whether the measurement config sanitization is enabled.
Definition: ch_driver.c:1101
void chdrv_int_callback_deferred(ch_group_t *grp_ptr, uint8_t dev_num)
Driver callback deferred routine for sensor interrupt.
Definition: ch_driver.c:770
void chdrv_int_interrupt_disable(ch_dev_t *dev_ptr)
Disable interrupts on the interrupt line for a sensor.
Definition: ch_driver.c:287
void chdrv_group_measure_rtc(ch_group_t *grp_ptr)
Calibrate the sensor real-time clock against the host microcontroller clock.
Definition: ch_driver.c:1545
uint8_t chdrv_event_trigger_and_wait(ch_dev_t *dev_ptr, uint16_t event)
Trigger an event on a sensor and wait for completion.
Definition: ch_driver.c:695
int chdrv_write_word(ch_dev_t *dev_ptr, uint16_t mem_addr, uint16_t data)
Write 16 bits to a sensor application register.
Definition: ch_driver.c:554
uint8_t chdrv_group_start(ch_group_t *grp_ptr)
Initialize and start a group of sensors.
Definition: ch_driver.c:2920
uint32_t chdrv_round_trip_range(ch_dev_t *dev_ptr, uint16_t tof, uint16_t tof_sf)
Convert the sensor register values to a round-trip range using the calibration data in the ch_dev_t s...
int chdrv_restart(ch_dev_t *dev_ptr)
Restart a sensor.
Definition: ch_driver.c:2947
void chdrv_int_group_set_dir_out(ch_group_t *grp_ptr)
Configure the interrupt lines for all sensors in a group as outputs.
Definition: ch_driver.c:263
int chdrv_write_byte(ch_dev_t *dev_ptr, uint16_t mem_addr, uint8_t data)
Write byte to a sensor application register.
Definition: ch_driver.c:482
void chdrv_int_group_interrupt_disable(ch_group_t *grp_ptr)
Disable interrupts on the interrupt lines for all sensors in a group.
Definition: ch_driver.c:311
uint32_t chdrv_cpu_freq_calculate(ch_dev_t *dev_ptr)
Calculate sensor micro-controller CPU frequency, in Hz.
Definition: ch_driver.c:1420
void chdrv_trig_group_assert(ch_group_t *grp_ptr)
Assert the hardware trigger lines for all sensors in a group.
Definition: ch_driver.c:349
int chdrv_pretrigger_delay_set(ch_group_t *grp_ptr, uint16_t delay_us)
Set the pre-trigger delay for rx-only sensors.
Definition: ch_driver.c:3072
uint8_t chdrv_otpmem_copy(ch_dev_t *dev_ptr, otp_copy_t *otp_copy_ptr)
Copy OTP memory contents.
Definition: ch_driver.c:964
uint8_t chdrv_sys_ctrl_write(ch_dev_t *dev_ptr, uint8_t reg_value)
Write the system control register in a sensor.
Definition: ch_driver.c:837
uint8_t chdrv_meas_queue_read(ch_dev_t *dev_ptr, measurement_queue_t *q_buf_ptr)
Read the measurement queue from a sensor.
Definition: ch_driver.c:1215
int chdrv_group_prepare(ch_group_t *grp_ptr)
Initialize data structures and hardware for sensor interaction and reset sensors.
Definition: ch_driver.c:2661
uint8_t chdrv_algo_init(ch_dev_t *dev_ptr)
Initialize the measurement algorithm on a sensor.
Definition: ch_driver.c:1228
void chdrv_enable_mq_sanitize(ch_dev_t *dev_ptr)
Enable the measurement config sanitization step when loading configs.
Definition: ch_driver.c:1093
uint8_t chdrv_meas_queue_write(ch_dev_t *dev_ptr, measurement_queue_t *q_buf_ptr)
Write the measurement queue to a sensor.
Definition: ch_driver.c:1195
void chdrv_group_measure_pmut(ch_group_t *grp_ptr)
Measure the ultrasonic transducer frequency & bandwidth.
Definition: ch_driver.c:1663
int chdrv_read_byte(ch_dev_t *dev_ptr, uint16_t mem_addr, uint8_t *data)
Read byte from a sensor application register.
Definition: ch_driver.c:581
void chdrv_int_group_interrupt_enable(ch_group_t *grp_ptr)
Enable interrupts on the interrupt lines for all sensors in a group.
Definition: ch_driver.c:299
int chdrv_soft_reset(ch_dev_t *dev_ptr)
Perform a soft reset on a sensor.
Definition: ch_driver.c:2977
int chdrv_prog_i2c_read_nb(ch_dev_t *dev_ptr, uint8_t *message, uint16_t len)
Read bytes from a CHx01 device in programming mode, non-blocking.
Definition: ch_driver.c:463
void chdrv_trig_group_deassert(ch_group_t *grp_ptr)
De-assert the hardware trigger lines for all sensors in a group.
Definition: ch_driver.c:361
int chdrv_detect_and_program(ch_dev_t *dev_ptr)
Detect, program, and start a sensor.
Definition: ch_driver.c:2570
int chdrv_group_soft_reset(ch_group_t *grp_ptr)
Perform a soft reset on a group of sensors.
Definition: ch_driver.c:3048
int chdrv_wait_for_lock(ch_dev_t *dev_ptr, uint16_t timeout_ms)
Wait for an individual sensor to finish start-up procedure.
Definition: ch_driver.c:1985
#define CHDRV_MAX_QUEUE_LENGTH
Definition: ch_driver.h:80
int chdrv_external_queue(ch_group_t *grp_ptr, ch_dev_t *instance, uint8_t rd_wrb, uint16_t addr, uint16_t nbytes, uint8_t *data)
Add an I2C/SPI transaction for an external device to the non-blocking queue.
uint8_t chdrv_algo_state_read(ch_dev_t *dev_ptr, void *algo_state_ptr)
Read the algorithm state data from a sensor.
Definition: ch_driver.c:1275
void chdrv_trig_group_set_dir_out(ch_group_t *grp_ptr)
Configure the hardware trigger lines for all sensors in a group as outputs.
Definition: ch_driver.c:385
void chdrv_group_start_nb(ch_group_t *grp_ptr)
Start a non-blocking sensor readout.
Definition: ch_driver.c:1773
uint8_t chdrv_algo_info_read(ch_dev_t *dev_ptr, ICU_ALGO_SHASTA_INFO *algo_info_ptr)
Read the algorithm information data from a sensor.
Definition: ch_driver.c:1238
int chdrv_init(ch_dev_t *dev_ptr, uint8_t i2c_addr, uint8_t io_index, uint8_t bus_index, uint16_t part_number)
Initialize the sensor device configuration.
int chdrv_burst_read(ch_dev_t *dev_ptr, uint16_t mem_addr, uint8_t *data, uint16_t len)
Read multiple bytes from a sensor application register location.
Definition: ch_driver.c:603
int chdrv_read_word(ch_dev_t *dev_ptr, uint16_t mem_addr, uint16_t *data)
Read 16 bits from a sensor application register.
Definition: ch_driver.c:648
uint8_t chdrv_run_bist(ch_dev_t *dev_ptr)
Run built-in self test (BIST) on sensor.
Definition: ch_driver.c:1460
int chdrv_burst_write(ch_dev_t *dev_ptr, uint16_t mem_addr, const uint8_t *data, uint16_t num_bytes)
Write multiple bytes to a sensor application register location.
Definition: ch_driver.c:507
uint8_t chdrv_int_notify(ch_group_t *grp_ptr, uint8_t dev_num)
Notify SonicLib that a sensor interrupt was received.
Definition: ch_driver.c:736
uint8_t chdrv_sys_ctrl_read(ch_dev_t *dev_ptr, uint8_t *reg_value_ptr)
Read the system control register from a sensor.
Definition: ch_driver.c:819
int chdrv_group_detect_and_program(ch_group_t *grp_ptr)
Detect, program, and start all sensors in a group.
Definition: ch_driver.c:2632
int chdrv_prog_i2c_write(ch_dev_t *dev_ptr, const uint8_t *message, uint16_t len)
Write bytes to a CHx01 device in programming mode.
Definition: ch_driver.c:420
void chdrv_trig_deassert(ch_dev_t *dev_ptr)
De-assert the hardware trigger line for a sensor.
Definition: ch_driver.c:337
SonicLib public API and support functions for TDK/InvenSense ultrasonic sensors (originally developed...
Chirp sensor device descriptor structure.
Definition: soniclib.h:739
Chirp sensor group descriptor structure.
Definition: soniclib.h:711
Queue structure, for non-blocking access.
Definition: ch_driver.h:116
chdrv_transaction_t transaction[CHDRV_MAX_QUEUE_LENGTH]
Definition: ch_driver.h:121
uint8_t running
Definition: ch_driver.h:118
uint8_t read_pending
Definition: ch_driver.h:117
uint8_t len
Definition: ch_driver.h:119
uint8_t idx
Definition: ch_driver.h:120
Transaction control structure.
Definition: ch_driver.h:105
uint8_t * databuf
Definition: ch_driver.h:112
uint8_t xfer_num
Definition: ch_driver.h:108
uint16_t addr
Definition: ch_driver.h:109
uint16_t nbytes
Definition: ch_driver.h:110
uint8_t rd_wrb
Definition: ch_driver.h:107
uint8_t type
Definition: ch_driver.h:106
ch_dev_t * dev_ptr
Definition: ch_driver.h:111
Definition: icu_algo_info.h:10