mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-03 06:27:47 +00:00
c710cc8236
* ssd1xxx: break dependency from machine package * fix ssd1289 example * simplify
71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
package ssd1306
|
|
|
|
import (
|
|
"time"
|
|
|
|
"tinygo.org/x/drivers"
|
|
"tinygo.org/x/drivers/internal/legacy"
|
|
"tinygo.org/x/drivers/internal/pin"
|
|
)
|
|
|
|
type SPIBus struct {
|
|
wire drivers.SPI
|
|
dcPin pin.OutputFunc
|
|
resetPin pin.OutputFunc
|
|
csPin pin.OutputFunc
|
|
buffer []byte // buffer to avoid heap allocations
|
|
}
|
|
|
|
// NewSPI creates a new SSD1306 connection. The SPI wire must already be configured.
|
|
func NewSPI(bus drivers.SPI, dcPin, resetPin, csPin pin.Output) *Device {
|
|
// configure GPIO pins (on baremetal targets only, for backwards compatibility)
|
|
legacy.ConfigurePinOut(dcPin)
|
|
legacy.ConfigurePinOut(resetPin)
|
|
legacy.ConfigurePinOut(csPin)
|
|
return &Device{
|
|
bus: &SPIBus{
|
|
wire: bus,
|
|
dcPin: dcPin.Set,
|
|
resetPin: resetPin.Set,
|
|
csPin: csPin.Set,
|
|
},
|
|
}
|
|
}
|
|
|
|
// configure pins with the SPI bus and allocate the buffer
|
|
func (b *SPIBus) configure(address uint16, size int16) []byte {
|
|
b.csPin.Low()
|
|
b.dcPin.Low()
|
|
b.resetPin.Low()
|
|
|
|
b.resetPin.High()
|
|
time.Sleep(1 * time.Millisecond)
|
|
b.resetPin.Low()
|
|
time.Sleep(10 * time.Millisecond)
|
|
b.resetPin.High()
|
|
|
|
b.buffer = make([]byte, size+1) // +1 for a command
|
|
return b.buffer[1:] // return the image buffer
|
|
}
|
|
|
|
// command sends a command to the display
|
|
func (b *SPIBus) command(cmd uint8) error {
|
|
b.buffer[0] = cmd
|
|
return b.tx(b.buffer[:1], true)
|
|
}
|
|
|
|
// flush sends the image to the display
|
|
func (b *SPIBus) flush() error {
|
|
return b.tx(b.buffer[1:], false)
|
|
}
|
|
|
|
// tx sends data to the display
|
|
func (b *SPIBus) tx(data []byte, isCommand bool) error {
|
|
b.csPin.High()
|
|
b.dcPin(!isCommand)
|
|
b.csPin.Low()
|
|
err := b.wire.Tx(data, nil)
|
|
b.csPin.High()
|
|
return err
|
|
}
|