1use crate::bindings;
13use crate::error::{Error, Result, WAIT_FOREVER};
14
15#[repr(u32)]
17#[derive(Debug, Copy, Clone, PartialEq, Eq)]
18pub enum Speed {
19 Standard = 0,
21 Fast = 1,
23 FastPlus = 2,
25}
26
27pub fn write(i2c: bindings::ove_i2c_t, addr: u16, data: &[u8], timeout_ms: u32) -> Result<()> {
29 let rc = unsafe {
30 bindings::ove_i2c_write(i2c, addr, data.as_ptr().cast(), data.len(), timeout_ms)
31 };
32 Error::from_code(rc)
33}
34
35pub fn read(i2c: bindings::ove_i2c_t, addr: u16, buf: &mut [u8], timeout_ms: u32) -> Result<()> {
37 let rc = unsafe {
38 bindings::ove_i2c_read(i2c, addr, buf.as_mut_ptr().cast(), buf.len(), timeout_ms)
39 };
40 Error::from_code(rc)
41}
42
43pub fn write_read(
45 i2c: bindings::ove_i2c_t,
46 addr: u16,
47 tx: &[u8],
48 rx: &mut [u8],
49 timeout_ms: u32,
50) -> Result<()> {
51 let rc = unsafe {
52 bindings::ove_i2c_write_read(
53 i2c, addr,
54 tx.as_ptr().cast(), tx.len(),
55 rx.as_mut_ptr().cast(), rx.len(),
56 timeout_ms,
57 )
58 };
59 Error::from_code(rc)
60}
61
62pub fn reg_write(
64 i2c: bindings::ove_i2c_t,
65 addr: u16,
66 reg: u8,
67 data: &[u8],
68 timeout_ms: u32,
69) -> Result<()> {
70 let rc = unsafe {
71 bindings::ove_i2c_reg_write(
72 i2c, addr, reg,
73 data.as_ptr().cast(), data.len(),
74 timeout_ms,
75 )
76 };
77 Error::from_code(rc)
78}
79
80pub fn reg_read(
82 i2c: bindings::ove_i2c_t,
83 addr: u16,
84 reg: u8,
85 buf: &mut [u8],
86 timeout_ms: u32,
87) -> Result<()> {
88 let rc = unsafe {
89 bindings::ove_i2c_reg_read(
90 i2c, addr, reg,
91 buf.as_mut_ptr().cast(), buf.len(),
92 timeout_ms,
93 )
94 };
95 Error::from_code(rc)
96}
97
98pub fn probe(i2c: bindings::ove_i2c_t, addr: u16, timeout_ms: u32) -> Result<()> {
100 let rc = unsafe { bindings::ove_i2c_probe(i2c, addr, timeout_ms) };
101 Error::from_code(rc)
102}