mirror of
https://github.com/kidoman/embd
synced 2025-07-04 04:17:41 +02:00
OneWire bus impl
This commit is contained in:
parent
bfcd1345fe
commit
82f119fadb
72 changed files with 568 additions and 174 deletions
78
onewire.go
Normal file
78
onewire.go
Normal file
|
@ -0,0 +1,78 @@
|
|||
//OneWire support.
|
||||
|
||||
package embd
|
||||
|
||||
// W1Bus interface is used to interact with the OneWire bus.
|
||||
type W1Bus interface {
|
||||
|
||||
// List devices on the bus
|
||||
ListDevices() (devices []string, err error)
|
||||
|
||||
// Open a device
|
||||
Open(address string) (device W1Device, err error)
|
||||
|
||||
// Close releases the resources associated with the bus.
|
||||
Close() error
|
||||
}
|
||||
|
||||
// W1Device interface is user to interact with the OneWire device.
|
||||
type W1Device interface {
|
||||
// ReadByte reads a byte from the device.
|
||||
ReadByte() (value byte, err error)
|
||||
// ReadByte number of bytes from the device.
|
||||
ReadBytes(number int) (value []byte, err error)
|
||||
// WriteByte writes a byte to the device.
|
||||
WriteByte(value byte) error
|
||||
// WriteBytes writes a slice bytes to the device.
|
||||
WriteBytes(value []byte) error
|
||||
|
||||
// Close releases the resources associated with the device.
|
||||
Close() error
|
||||
}
|
||||
|
||||
// W1Driver interface interacts with the host descriptors to allow us
|
||||
// control of OneWire communication.
|
||||
type W1Driver interface {
|
||||
Bus(l byte) W1Bus
|
||||
|
||||
// Close releases the resources associated with the driver.
|
||||
Close() error
|
||||
}
|
||||
|
||||
var w1DriverInitialized bool
|
||||
var w1DriverInstance W1Driver
|
||||
|
||||
// InitW1 initializes the W1 driver.
|
||||
func InitW1() error {
|
||||
if w1DriverInitialized {
|
||||
return nil
|
||||
}
|
||||
|
||||
desc, err := DescribeHost()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if desc.W1Driver == nil {
|
||||
return ErrFeatureNotSupported
|
||||
}
|
||||
|
||||
w1DriverInstance = desc.W1Driver()
|
||||
w1DriverInitialized = true
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// CloseW1 releases resources associated with the OneWire driver.
|
||||
func CloseW1() error {
|
||||
return w1DriverInstance.Close()
|
||||
}
|
||||
|
||||
// NewW1Bus returns a W1Bus.
|
||||
func NewW1Bus(l byte) W1Bus {
|
||||
if err := InitW1(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return w1DriverInstance.Bus(l)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue