Files

45 lines
2.6 KiB
Zig

const sys = @import("sys");
const errors = @import("error");
pub const BUS = struct {
pub fn add(bus_config: ?*const sys.i2c_master_bus_config_t, ret_bus_handle: [*c]sys.i2c_master_bus_handle_t) !void {
return try errors.espCheckError(sys.i2c_new_master_bus(bus_config, ret_bus_handle));
}
pub fn addDevice(bus_handle: sys.i2c_master_bus_handle_t, dev_config: [*c]const sys.i2c_device_config_t, ret_handle: [*c]sys.i2c_master_dev_handle_t) !void {
return try errors.espCheckError(sys.i2c_master_bus_add_device(bus_handle, dev_config, ret_handle));
}
pub fn del(bus_handle: sys.i2c_master_bus_handle_t) !void {
return try errors.espCheckError(sys.i2c_del_master_bus(bus_handle));
}
pub fn removeDevice(handle: sys.i2c_master_dev_handle_t) !void {
return try errors.espCheckError(sys.i2c_master_bus_rm_device(handle));
}
pub fn reset(handle: sys.i2c_master_bus_handle_t) !void {
return try errors.espCheckError(sys.i2c_master_bus_reset(handle));
}
};
/// Write bytes to an I2C device. Buffer length is taken from the slice.
pub fn transmit(i2c_dev: sys.i2c_master_dev_handle_t, write_buffer: []const u8, xfer_timeout_ms: c_int) !void {
return errors.espCheckError(sys.i2c_master_transmit(i2c_dev, write_buffer.ptr, write_buffer.len, xfer_timeout_ms));
}
/// Write then read in a single I2C transaction (repeated-start).
pub fn transmitReceive(i2c_dev: sys.i2c_master_dev_handle_t, write_buffer: []const u8, read_buffer: []u8, xfer_timeout_ms: c_int) !void {
return errors.espCheckError(sys.i2c_master_transmit_receive(i2c_dev, write_buffer.ptr, write_buffer.len, read_buffer.ptr, read_buffer.len, xfer_timeout_ms));
}
/// Read bytes from an I2C device. Buffer length is taken from the slice.
pub fn receive(i2c_dev: sys.i2c_master_dev_handle_t, read_buffer: []u8, xfer_timeout_ms: c_int) !void {
return errors.espCheckError(sys.i2c_master_receive(i2c_dev, read_buffer.ptr, read_buffer.len, xfer_timeout_ms));
}
pub fn probe(i2c_master: sys.i2c_master_bus_handle_t, address: u16, xfer_timeout_ms: c_int) !void {
return try errors.espCheckError(sys.i2c_master_probe(i2c_master, address, xfer_timeout_ms));
}
pub fn registerEventCallbacks(i2c_dev: sys.i2c_master_dev_handle_t, cbs: [*c]const sys.i2c_master_event_callbacks_t, user_data: ?*anyopaque) !void {
return try errors.espCheckError(sys.i2c_master_register_event_callbacks(i2c_dev, cbs, user_data));
}
pub fn waitAllDone(i2c_master: sys.i2c_master_bus_handle_t, timeout_ms: c_int) !void {
return try errors.espCheckError(sys.i2c_master_wait_all_done(i2c_master, timeout_ms));
}