mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-07-26 10:38:41 +00:00
936a255df9
* Add support for CEVA BNO08x 9DoF sensor. Also includes implementation of CEVA SH-2 and SHTP protocols.
* Replace machine.I2C with drivers.I2C interface to remove dependency on machine package
* Replace Pin functionality with that provided by tinygo.org/x/drivers/internal/pin
* Unexport fields on SensorValue and replace with accessor methods. Add check for correct SensorID validation
* Add example to smoketest.sh
* Change build target for smoketest to match development environment.. Probably not important, but matches reality.
* Fix decoding of some sensor data: Step Counter, Tap Detector, Flip Detector. These are experimental.
* Refactor to allow SPI/UART etc. SPI is currently under development, but is omitted from this commit.
Example code has been moved to i2c subdirectory.
This commit introduces some major refactoring changes. It introduces a "Buser" interface and tries to remove any I2C specific code from the core. It still retains a couple of I2C specific fields in the "Config" struct ("Address" and "ReadChunk") but they are ignored in the as yet uncommited SPI code.
* Fix CRLF -> LF for gofmt
* Update smoketest to point to new example file
44 lines
776 B
Go
44 lines
776 B
Go
package bno08x
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// hal implements the hardware abstraction layer for bus communication.
|
|
type hal struct {
|
|
device *Device
|
|
}
|
|
|
|
func newHAL(dev *Device) *hal {
|
|
return &hal{
|
|
device: dev,
|
|
}
|
|
}
|
|
|
|
func (h *hal) open() error {
|
|
// HAL is now open and ready for communication
|
|
// Soft reset will be sent after handlers are registered
|
|
return nil
|
|
}
|
|
|
|
func (h *hal) close() {}
|
|
|
|
func (h *hal) read(target []byte) (int, uint32, error) {
|
|
return h.device.bus.read(target)
|
|
}
|
|
|
|
func (h *hal) write(frame []byte) (int, error) {
|
|
if len(frame) > maxTransferOut {
|
|
return 0, errFrameTooLarge
|
|
}
|
|
err := h.device.bus.write(frame)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return len(frame), nil
|
|
}
|
|
|
|
func (h *hal) getTimeUs() uint32 {
|
|
return uint32(time.Now().UnixNano() / 1000)
|
|
}
|