mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-15 04:13:40 +00:00
69 lines
1.3 KiB
Go
69 lines
1.3 KiB
Go
package apds9930
|
|
|
|
import "tinygo.org/x/drivers"
|
|
|
|
type Dev struct {
|
|
bus drivers.I2C
|
|
_txerr error
|
|
addr uint16
|
|
buf [8]byte
|
|
}
|
|
|
|
func New(bus drivers.I2C, addr uint8) Dev {
|
|
return Dev{bus: bus, addr: uint16(addr)}
|
|
}
|
|
|
|
func (d *Dev) Init() error {
|
|
d.txNew()
|
|
d.txWrite8(regENABLE, 0x00) // disable all features.
|
|
d.txWrite8(regATIME, 0xee) // set default integration time.
|
|
d.txWrite8(regPPULSE, 0x04)
|
|
d.txWrite8(regWTIME, 0xee) // set default wait time.
|
|
d.txWrite8(regPTIME, 0xff) // set default pulse count.
|
|
d.txWrite8(regCONTROL, 0x20)
|
|
return d.txErr()
|
|
}
|
|
|
|
func (d *Dev) EnableProximity() error {
|
|
d.txNew()
|
|
d.txWrite8(regENABLE, 8|4|2|1)
|
|
return d.txErr()
|
|
}
|
|
|
|
func (d *Dev) ProximityAvailable() bool {
|
|
d.txNew()
|
|
return d.txRead8(regSTATUS)&0x20 == 1
|
|
}
|
|
|
|
func (d *Dev) ReadProximity() uint8 {
|
|
d.txNew()
|
|
h := d.txRead8(regPDATAH)
|
|
l := d.txRead8(regPDATAL)
|
|
if d.txErr() != nil {
|
|
return 0
|
|
}
|
|
return (h << 8) | l
|
|
}
|
|
|
|
func (d *Dev) txRead8(reg uint8) uint8 {
|
|
if d.txErr() != nil {
|
|
return 0
|
|
}
|
|
d.buf[0] = reg | 0xa0
|
|
d._txerr = d.bus.Tx(d.addr, d.buf[:1], d.buf[1:2])
|
|
return d.buf[1]
|
|
}
|
|
|
|
func (d *Dev) txWrite8(reg uint8, val uint8) {
|
|
if d.txErr() != nil {
|
|
return
|
|
}
|
|
d.buf[0] = reg | 0x80
|
|
d.buf[1] = val
|
|
d._txerr = d.bus.Tx(d.addr, d.buf[:2], nil)
|
|
}
|
|
|
|
func (d *Dev) txNew() { d._txerr = nil }
|
|
|
|
func (d *Dev) txErr() error { return d._txerr }
|