]> hydra-www.ietfng.org Git - acmetensortoys-esp-lua_core/commitdiff
Tweaks to i2cu main
authorNathaniel Wesley Filardo <nwfilardo@gmail.com>
Wed, 29 Dec 2021 22:34:12 +0000 (22:34 +0000)
committerNathaniel Wesley Filardo <nwfilardo@gmail.com>
Wed, 29 Dec 2021 22:34:12 +0000 (22:34 +0000)
util/i2cu.lua

index 3a59f1d8556644345372022740545a12d91a9926..cfc0f2f73785c6747c2d9c730e6c335f93432ed3 100644 (file)
@@ -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)