43 #include "chirp_board_config.h" 55 #define CHDRV_I2C_MAX_WRITE_BYTES 256 57 #define CHDRV_NB_TRANS_TYPE_STD (0) 58 #define CHDRV_NB_TRANS_TYPE_PROG (1) 59 #define CHDRV_NB_TRANS_TYPE_EXTERNAL (2) 62 #define CH_PROG_REG_PING 0x00 63 #define CH_PROG_REG_CPU 0x42 64 #define CH_PROG_REG_STAT 0x43 65 #define CH_PROG_REG_CTL 0x44 66 #define CH_PROG_REG_ADDR 0x05 67 #define CH_PROG_REG_CNT 0x07 68 #define CH_PROG_REG_DATA 0x06 70 #define CH_PROG_SIZEOF(R) ( (R) & 0x40 ? 1 : 2 ) 73 #define CH_PROG_XFER_SIZE (256) 75 #define CHDRV_DEBUG_PIN_NUM (0) 78 #define CHDRV_MAX_I2C_QUEUE_LENGTH CHIRP_MAX_NUM_SENSORS 80 #define CHDRV_FREQLOCK_TIMEOUT_MS 100 82 #define CHDRV_BANDWIDTH_INDEX_1 6 83 #define CHDRV_BANDWIDTH_INDEX_2 (CHDRV_BANDWIDTH_INDEX_1 + 1) 86 #define CHDRV_SCALEFACTOR_INDEX 4 88 #define CHDRV_TRIGGER_PULSE_US 5 89 #define CHDRV_DELAY_OVERHEAD_US 12 90 #define CHDRV_PRETRIGGER_DELAY_US 600 94 typedef uint8_t (*chdrv_discovery_hook_t)(ch_dev_t *dev_ptr); 202 uint16_t nbytes, uint8_t *data);
350 int chdrv_init(
ch_dev_t *dev_ptr, uint8_t i2c_addr, uint8_t io_index, uint8_t i2c_bus_index,
351 uint16_t part_number);
int chdrv_group_i2c_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 transaction to the non-blocking queue.
uint8_t xfer_num
Definition: ch_driver.h:105
int chdrv_group_hard_reset(ch_group_t *grp_ptr)
Perform a hard reset on a group of sensors.
int chdrv_external_i2c_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 transaction for an external device to the non-blocking queue.
int chdrv_init(ch_dev_t *dev_ptr, uint8_t i2c_addr, uint8_t io_index, uint8_t i2c_bus_index, uint16_t part_number)
Initialize the sensor device configuration.
uint16_t nbytes
Definition: ch_driver.h:107
int chdrv_read_byte(ch_dev_t *dev_ptr, uint16_t mem_addr, uint8_t *data)
Read byte from a sensor application register.
int chdrv_prog_i2c_write(ch_dev_t *dev_ptr, uint8_t *message, uint16_t len)
Write bytes to a sensor device in programming mode.
uint8_t running
Definition: ch_driver.h:116
int chdrv_group_hw_trigger(ch_group_t *grp_ptr)
Start a measurement in hardware triggered mode.
Chirp SonicLib public API and support functions for Chirp ultrasonic sensors.
int chdrv_set_idle(ch_dev_t *dev_ptr)
Put sensor(s) in idle state.
struct chdrv_i2c_transaction chdrv_i2c_transaction_t
I2C transaction control structure.
Chirp sensor device structure.
Definition: soniclib.h:349
int chdrv_soft_reset(ch_dev_t *dev_ptr)
Perform a soft reset on a sensor.
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_write_byte(ch_dev_t *dev_ptr, uint16_t mem_addr, uint8_t data)
Write byte to a sensor application register.
uint8_t type
Definition: ch_driver.h:103
uint8_t read_pending
Definition: ch_driver.h:115
int chdrv_group_wait_for_lock(ch_group_t *grp_ptr)
Wait for all sensors to finish start-up procedure.
int chdrv_hw_trigger(ch_dev_t *dev_ptr)
Start a measurement in hardware triggered mode on one sensor.
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...
int chdrv_detect_and_program(ch_dev_t *dev_ptr)
Detect, program, and start a sensor.
int chdrv_group_soft_reset(ch_group_t *grp_ptr)
Perform a soft reset on a group of sensors.
void chdrv_pretrigger_delay_set(ch_group_t *grp_ptr, uint16_t delay_us)
Set the pre-trigger delay for rx-only sensors.
int chdrv_prog_i2c_read(ch_dev_t *dev_ptr, uint8_t *message, uint16_t len)
Read bytes from a sensor device in programming mode.
void chdrv_group_i2c_irq_handler(ch_group_t *grp_ptr, uint8_t i2c_bus_index)
Continue a non-blocking readout.
uint8_t idx
Definition: ch_driver.h:118
ch_dev_t * dev_ptr
Definition: ch_driver.h:108
Chirp sensor group configuration structure.
Definition: soniclib.h:329
uint8_t * databuf
Definition: ch_driver.h:109
int chdrv_group_prepare(ch_group_t *grp_ptr)
Initialize data structures and hardware for sensor interaction and reset sensors. ...
int chdrv_group_detect_and_program(ch_group_t *grp_ptr)
Detect, program, and start all sensors in a group.
int chdrv_prog_write(ch_dev_t *dev_ptr, uint8_t reg_addr, uint16_t data)
Write to a sensor programming register.
int chdrv_group_start(ch_group_t *grp_ptr)
Initalize and start a group of sensors.
I2C queue structure, for non-blocking access.
Definition: ch_driver.h:114
I2C transaction control structure.
Definition: ch_driver.h:102
int chdrv_prog_i2c_read_nb(ch_dev_t *dev_ptr, uint8_t *message, uint16_t len)
Read bytes from a sensor device in programming mode, non-blocking.
int chdrv_burst_write(ch_dev_t *dev_ptr, uint16_t mem_addr, uint8_t *data, uint8_t len)
Write multiple bytes to a sensor application register location.
int chdrv_prog_mem_write(ch_dev_t *dev_ptr, uint16_t addr, uint8_t *message, uint16_t nbytes)
Write to sensor memory.
void chdrv_group_measure_rtc(ch_group_t *grp_ptr)
Calibrate the sensor real-time clock against the host microcontroller clock.
void chdrv_discovery_hook_set(ch_group_t *grp_ptr, chdrv_discovery_hook_t hook_func_ptr)
Register a hook routine to be called after device discovery.
void chdrv_group_i2c_start_nb(ch_group_t *grp_ptr)
Start a non-blocking sensor readout.
int chdrv_write_word(ch_dev_t *dev_ptr, uint16_t mem_addr, uint16_t data)
Write 16 bits to a sensor application register.
uint8_t len
Definition: ch_driver.h:117
chdrv_i2c_transaction_t transaction[CHDRV_MAX_I2C_QUEUE_LENGTH]
Definition: ch_driver.h:119
uint8_t rd_wrb
Definition: ch_driver.h:104
#define CHDRV_MAX_I2C_QUEUE_LENGTH
Definition: ch_driver.h:79
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.
int chdrv_read_word(ch_dev_t *dev_ptr, uint16_t mem_addr, uint16_t *data)
Read 16 bits from a sensor application register.
int chdrv_prog_ping(ch_dev_t *dev_ptr)
Detect a connected sensor.
int chdrv_wait_for_lock(ch_dev_t *dev_ptr, uint16_t timeout_ms)
Wait for an individual sensor to finish start-up procedure.
uint8_t(* chdrv_discovery_hook_t)(ch_dev_t *dev_ptr)
Hook routine pointer typedefs.
Definition: ch_driver.h:98
struct chdrv_i2c_queue chdrv_i2c_queue_t
I2C queue structure, for non-blocking access.
uint16_t addr
Definition: ch_driver.h:106