generated from sirlilpanda/kicad-project-template-actionless
Added the zig_main project to software for zig based implementation of code for robot
This commit is contained in:
44
software/zig_main/imports/i2c.zig
Normal file
44
software/zig_main/imports/i2c.zig
Normal file
@@ -0,0 +1,44 @@
|
||||
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));
|
||||
}
|
||||
Reference in New Issue
Block a user