]> hydra-www.ietfng.org Git - acmetensortoys-esp-lua_core/commitdiff
i2c: improve and use utility wrapper
authorNathaniel Wesley Filardo <nwfilardo@gmail.com>
Sat, 24 Oct 2020 18:31:35 +0000 (19:31 +0100)
committerNathaniel Wesley Filardo <nwfilardo@gmail.com>
Sat, 24 Oct 2020 18:31:35 +0000 (19:31 +0100)
cap1188/cap1188.lua
ht16k33/ht16k33.lua
util/i2cu.lua

index 5893c631086e6d82ce22de396a7f20d537ba7f0f..1a3392480be916a5edd10348ad63d3e4b47db024 100644 (file)
@@ -1,27 +1,19 @@
--- DEPENDS: i2c
+-- DEPENDS: i2c, i2cu
 -- cap1188 based heavily on adafruit's documentation and code as well as the
 -- device datasheet.  Unsurprising, really, esp. that it's their breakout.
 local self = {}
+self.bus = 0
 self.addr = 0x29
 
+local i2cu = require "i2cu"
+
 function self:rr(r)
-  i2c.start(0)
-  if not i2c.address(0, self.addr, i2c.TRANSMITTER) then i2c.stop(0) return nil end
-   i2c.write(0,r)
-  i2c.start(0)
-   i2c.address(0,0x29,i2c.RECEIVER)
-   local x = i2c.read(0,1)
-  i2c.stop(0)
+  local x = i2cu.wr(self.bus, self.addr, 1, r)
   return x:byte(1)
 end
 
 function self:wr(r,v)
-  i2c.start(0)
-  if not i2c.address(0, self.addr, i2c.TRANSMITTER) then i2c.stop(0) return nil end
-  i2c.write(0,r)
-  i2c.write(0,v)
-  i2c.stop(0)
-  return true
+  return i2cu.writen(self.bus, self.addr, r, v)
 end
 
 function self:mr(r,f) local n = f(self:rr(r)) ; self:wr(r,n); return n end
index 3f5239fa83ffa341e6011952cada9de833fc69b6..92d5ba6a503ca379e5c4f6976812946570510ffd 100644 (file)
@@ -2,25 +2,9 @@
 
 local M = {}
 
-local function tx(self, ...)
-  local i2c, bus, addr = i2c, self.bus, self.addr
-  i2c.start(bus)
-  i2c.address(bus, addr, i2c.TRANSMITTER) 
-  i2c.write(bus, ...)
-  i2c.stop(bus)
-end
-
-local function txrx(self, w, rn)
-  local i2c, bus, addr = i2c, self.bus, self.addr
-  i2c.start(bus)
-  i2c.address(bus, addr, i2c.TRANSMITTER) 
-  i2c.write(bus, w)
-  i2c.start(bus)
-  i2c.address(bus, addr, i2c.TRANSMITTER) 
-  local ret = i2c.read(rn)
-  i2c.stop(bus)
-  return ret
-end
+local i2cu = require "i2cu"
+local function tx  (self, ...)   return i2cu.writen(self.bus, self.addr, ...  ) end
+local function txrx(self, w, rn) return i2cu.wr    (self.bus, self.addr, rn, w) end
 
 -- control the primary oscillator
 local function osc(self,on)
index a7e3fd9f6d1ac13ab8f65ce1e66ca2f052f942da..3a59f1d8556644345372022740545a12d91a9926 100644 (file)
@@ -1,19 +1,34 @@
 local self = {}
 
-function self.readn(addr, len)
-  i2c.start(0)
-  if not i2c.address(0, addr, i2c.RECEIVER) then i2c.stop(0) return nil end
-  local v = i2c.read(0, len)
-  i2c.stop(0)
+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)
+  i2c.stop(bus)
   return v
 end
 
-function self.writen(addr, ...)
-  i2c.start(0)
-  if not i2c.address(0, addr, i2c.TRANSMITTER) then i2c.stop(0) return nil end
-  i2c.write(0, ...)
-  i2c.stop(0)
+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, ...)
+  i2c.stop(bus)
   return true
 end
 
+-- write/read without a full stop/start
+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)
+  if not i2c.address(bus, addr, i2c.RECEIVER) then i2c.stop(bus) return nil end
+  local v = i2c.read(bus, len)
+  i2c.stop(bus)
+  return v
+end
+
 return self