Chirp SonicLib  4.6.1
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 
515 int chdrv_soft_reset(ch_dev_t *dev_ptr);
516 
526 int chdrv_group_hard_reset(ch_group_t *grp_ptr);
527 
538 int chdrv_group_soft_reset(ch_group_t *grp_ptr);
539 
552 int chdrv_set_idle(ch_dev_t *dev_ptr);
553 
565 int chdrv_prog_write(ch_dev_t *dev_ptr, uint8_t reg_addr, uint16_t data);
566 
579 int chdrv_prog_i2c_write(ch_dev_t *dev_ptr, const uint8_t *message, uint16_t len);
580 
593 int chdrv_prog_i2c_read(ch_dev_t *dev_ptr, uint8_t *message, uint16_t len);
594 
608 int chdrv_prog_i2c_read_nb(ch_dev_t *dev_ptr, uint8_t *message, uint16_t len);
609 
623 int chdrv_prog_mem_write(ch_dev_t *dev_ptr, uint16_t addr, const uint8_t *message, uint16_t nbytes);
624 
636 void chdrv_pretrigger_delay_set(ch_group_t *grp_ptr, uint16_t delay_us);
637 
650 uint8_t chdrv_sys_ctrl_read(ch_dev_t *dev_ptr, uint8_t *reg_value_ptr);
651 
666 uint8_t chdrv_sys_ctrl_write(ch_dev_t *dev_ptr, uint8_t reg_value);
667 
679 uint8_t chdrv_dbg_reg_read(ch_dev_t *dev_ptr, uint8_t reg_id, uint16_t *reg_value_ptr);
680 
694 uint8_t chdrv_dbg_reg_write(ch_dev_t *dev_ptr, uint8_t reg_id, uint16_t reg_value);
695 
722 uint8_t chdrv_int_notify(ch_group_t *grp_ptr, uint8_t dev_num);
723 
736 void chdrv_int_callback(ch_group_t *grp_ptr, uint8_t dev_num);
737 
755 void chdrv_int_callback_deferred(ch_group_t *grp_ptr, uint8_t dev_num);
756 
757 #ifdef INCLUDE_SHASTA_SUPPORT
758 
771 uint8_t chdrv_event_trigger(ch_dev_t *dev_ptr, uint16_t event);
772 
785 uint8_t chdrv_event_trigger_and_wait(ch_dev_t *dev_ptr, uint16_t event);
786 
804 uint8_t chdrv_otpmem_read(ch_dev_t *dev_ptr);
805 
822 uint8_t chdrv_otpmem_copy(ch_dev_t *dev_ptr, otp_copy_t *otp_copy_ptr);
823 
834 uint8_t chdrv_algo_init(ch_dev_t *dev_ptr);
835 
846 uint8_t chdrv_algo_info_read(ch_dev_t *dev_ptr, ICU_ALGO_SHASTA_INFO *algo_info_ptr);
847 
859 uint8_t chdrv_algo_cfg_read(ch_dev_t *dev_ptr, void *algo_cfg_ptr);
860 
872 uint8_t chdrv_algo_cfg_write(ch_dev_t *dev_ptr, const void *algo_cfg_ptr);
873 
885 uint8_t chdrv_algo_out_read(ch_dev_t *dev_ptr, void *algo_out_ptr);
886 
898 uint8_t chdrv_algo_state_read(ch_dev_t *dev_ptr, void *algo_state_ptr);
899 
916 uint8_t chdrv_meas_queue_write(ch_dev_t *dev_ptr, measurement_queue_t *q_buf_ptr);
917 
934 uint8_t chdrv_meas_queue_read(ch_dev_t *dev_ptr, measurement_queue_t *q_buf_ptr);
935 
936 #endif
937 
953 void chdrv_trig_assert(ch_dev_t *dev_ptr);
954 
970 void chdrv_trig_deassert(ch_dev_t *dev_ptr);
971 
987 void chdrv_trig_group_assert(ch_group_t *grp_ptr);
988 
1004 void chdrv_trig_group_deassert(ch_group_t *grp_ptr);
1005 
1019 void chdrv_trig_set_dir_out(ch_dev_t *dev_ptr);
1020 
1035 
1051 void chdrv_int_group_assert(ch_group_t *grp_ptr);
1052 
1068 void chdrv_int_group_deassert(ch_group_t *grp_ptr);
1069 
1083 void chdrv_int_set_dir_in(ch_dev_t *dev_ptr);
1084 
1098 void chdrv_int_group_set_dir_in(ch_group_t *grp_ptr);
1099 
1114 
1132 void chdrv_int_interrupt_enable(ch_dev_t *dev_ptr);
1133 
1151 void chdrv_int_interrupt_disable(ch_dev_t *dev_ptr);
1152 
1171 
1190 
1201 uint32_t chdrv_cpu_freq_calculate(ch_dev_t *dev_ptr);
1202 
1216 uint32_t chdrv_cpu_freq_adjust(ch_dev_t *dev_ptr, uint32_t pmut_freq);
1217 
1227 uint8_t chdrv_run_bist(ch_dev_t *dev_ptr);
1228 
1239 void chdrv_group_measure_pmut(ch_group_t *grp_ptr);
1240 
1241 uint8_t chdrv_check_reset_state(ch_dev_t *dev_ptr, uint8_t *reset_state);
1242 
1258 void chdrv_enable_mq_sanitize(ch_dev_t *dev_ptr);
1259 
1281 void chdrv_disable_mq_sanitize(ch_dev_t *dev_ptr);
1282 
1298 int16_t chdrv_is_mq_sanitize_enabled(const ch_dev_t *dev_ptr);
1299 
1324 uint8_t chdrv_adjust_rx_len(volatile pmut_transceiver_inst_t *trx_inst, uint8_t cic_odr, int rx_len, int eof_idx);
1325 
1326 #ifdef __cplusplus
1327 }
1328 #endif
1329 
1330 #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:2092
void chdrv_group_irq_handler(ch_group_t *grp_ptr, uint8_t bus_index)
Continue a non-blocking readout.
Definition: ch_driver.c:1774
int chdrv_group_hard_reset(ch_group_t *grp_ptr)
Perform a hard reset on a group of sensors.
Definition: ch_driver.c:2984
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:1347
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:1687
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:431
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:896
int chdrv_set_idle(ch_dev_t *dev_ptr)
Put CHx01 sensor(s) in idle state.
Definition: ch_driver.c:2564
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:1238
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:3055
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:2016
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:846
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:2355
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:2480
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:651
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:1248
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:871
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:1719
void chdrv_int_callback(ch_group_t *grp_ptr, uint8_t dev_num)
Driver callback routine for sensor interrupt.
Definition: ch_driver.c:746
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:1058
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:1614
void chdrv_disable_mq_sanitize(ch_dev_t *dev_ptr)
Disable the measurement config sanitization step when loading configs.
Definition: ch_driver.c:1087
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:1255
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:2132
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:2166
int chdrv_group_wait_for_lock(ch_group_t *grp_ptr)
Wait for all sensors to finish start-up procedure.
Definition: ch_driver.c:1992
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:1091
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:760
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:1531
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:685
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:544
uint8_t chdrv_group_start(ch_group_t *grp_ptr)
Initialize and start a group of sensors.
Definition: ch_driver.c:2885
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:2912
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:472
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:1406
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
uint8_t chdrv_otpmem_copy(ch_dev_t *dev_ptr, otp_copy_t *otp_copy_ptr)
Copy OTP memory contents.
Definition: ch_driver.c:954
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:827
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:1205
int chdrv_group_prepare(ch_group_t *grp_ptr)
Initialize data structures and hardware for sensor interaction and reset sensors.
Definition: ch_driver.c:2630
uint8_t chdrv_algo_init(ch_dev_t *dev_ptr)
Initialize the measurement algorithm on a sensor.
Definition: ch_driver.c:1218
void chdrv_enable_mq_sanitize(ch_dev_t *dev_ptr)
Enable the measurement config sanitization step when loading configs.
Definition: ch_driver.c:1083
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:1185
void chdrv_group_measure_pmut(ch_group_t *grp_ptr)
Measure the ultrasonic transducer frequency & bandwidth.
Definition: ch_driver.c:1642
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:571
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:2942
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:453
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
void 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:3035
int chdrv_detect_and_program(ch_dev_t *dev_ptr)
Detect, program, and start a sensor.
Definition: ch_driver.c:2539
int chdrv_group_soft_reset(ch_group_t *grp_ptr)
Perform a soft reset on a group of sensors.
Definition: ch_driver.c:3013
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:1964
#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:1265
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:1752
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:1228
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:593
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:638
uint8_t chdrv_run_bist(ch_dev_t *dev_ptr)
Run built-in self test (BIST) on sensor.
Definition: ch_driver.c:1446
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:497
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:726
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:809
int chdrv_group_detect_and_program(ch_group_t *grp_ptr)
Detect, program, and start all sensors in a group.
Definition: ch_driver.c:2601
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:410
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:732
Chirp sensor group descriptor structure.
Definition: soniclib.h:704
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