embd/spi.go

65 lines
1.0 KiB
Go
Raw Normal View History

package embd
const (
spi_cpha = 0x01
spi_cpol = 0x02
SPI_MODE_0 = (0 | 0)
SPI_MODE_1 = (0 | spi_cpha)
SPI_MODE_2 = (spi_cpol | 0)
SPI_MODE_3 = (spi_cpol | spi_cpha)
)
type SPIBus interface {
TransferAndRecieveData(dataBuffer []uint8) error
ReceiveData(len int) ([]uint8, error)
TransferAndReceiveByte(data byte) (byte, error)
ReceiveByte() (byte, error)
Close() error
}
type SPIDriver interface {
Bus(byte, byte, int, int, int) SPIBus
Close() error
}
var spiDriverInitialized bool
var spiDriverInstance SPIDriver
func InitSPI() error {
if spiDriverInitialized {
return nil
}
desc, err := DescribeHost()
if err != nil {
return err
}
if desc.SPIDriver == nil {
return ErrFeatureNotSupported
}
spiDriverInstance = desc.SPIDriver()
spiDriverInitialized = true
return nil
}
func CloseSPI() error {
return spiDriverInstance.Close()
}
func NewSPIBus(mode, channel byte, speed, bpw, delay int) SPIBus {
if err := InitSPI(); err != nil {
panic(err)
}
return spiDriverInstance.Bus(mode, channel, speed, bpw, delay)
}