From a46ab924bdb3fbf9eb65e9b64bd5b47cd3d50ba7 Mon Sep 17 00:00:00 2001 From: Nathaniel Wesley Filardo Date: Wed, 29 Dec 2021 22:34:12 +0000 Subject: [PATCH] Tweaks to i2cu --- util/i2cu.lua | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/util/i2cu.lua b/util/i2cu.lua index 3a59f1d..cfc0f2f 100644 --- a/util/i2cu.lua +++ b/util/i2cu.lua @@ -1,7 +1,14 @@ local self = {} +local i2c = i2c + +function self.probe(bus, addr) + i2c.start(bus) + local res = i2c.address(bus, addr, i2c.RECEIVER) + i2c.stop(bus) + return res +end function self.readn(bus, addr, len) - local i2c = i2c i2c.start(bus) if not i2c.address(bus, addr, i2c.RECEIVER) then i2c.stop(bus) return nil end local v = i2c.read(bus, len) @@ -10,7 +17,6 @@ function self.readn(bus, addr, len) end function self.writen(bus, addr, ...) - local i2c = i2c i2c.start(bus) if not i2c.address(bus, addr, i2c.TRANSMITTER) then i2c.stop(bus) return nil end i2c.write(bus, ...) @@ -18,13 +24,12 @@ function self.writen(bus, addr, ...) return true end --- write/read without a full stop/start +-- write/read without a full stop/start (no risk of losing arbitration) function self.wr(bus, addr, len, ...) - local i2c = i2c i2c.start(bus) if not i2c.address(bus, addr, i2c.TRANSMITTER) then i2c.stop(bus) return nil end i2c.write(bus, ...) - i2c.start(bus) + i2c.start(bus) -- "repeated start" if not i2c.address(bus, addr, i2c.RECEIVER) then i2c.stop(bus) return nil end local v = i2c.read(bus, len) i2c.stop(bus) -- 2.50.1