--- 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
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)
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