mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-04 06:57:48 +00:00
68 lines
1.0 KiB
Go
68 lines
1.0 KiB
Go
package wifinina
|
|
|
|
import "errors"
|
|
|
|
// Mimics machine package's pin control
|
|
//
|
|
// NB! These are NINA chip pins, not main unit pins.
|
|
//
|
|
// Digital pin values and modes taken from
|
|
// https://github.com/arduino/nina-fw/blob/master/arduino/cores/esp32/wiring_digital.h
|
|
|
|
type Pin uint8
|
|
|
|
const (
|
|
PinLow uint8 = iota
|
|
PinHigh
|
|
)
|
|
|
|
type PinMode uint8
|
|
|
|
const (
|
|
PinInput PinMode = iota
|
|
PinOutput
|
|
PinInputPullup
|
|
)
|
|
|
|
type PinConfig struct {
|
|
Mode PinMode
|
|
}
|
|
|
|
var (
|
|
ErrPinNoDevice = errors.New("wifinina pin: device not set")
|
|
)
|
|
|
|
var pinDevice *wifinina
|
|
|
|
func pinUseDevice(w *wifinina) {
|
|
pinDevice = w
|
|
}
|
|
|
|
func (p Pin) Configure(config PinConfig) error {
|
|
if pinDevice == nil {
|
|
return ErrPinNoDevice
|
|
}
|
|
pinDevice.PinMode(uint8(p), uint8(config.Mode))
|
|
return nil
|
|
}
|
|
|
|
func (p Pin) Set(high bool) error {
|
|
if pinDevice == nil {
|
|
return ErrPinNoDevice
|
|
}
|
|
value := PinLow
|
|
if high {
|
|
value = PinHigh
|
|
}
|
|
pinDevice.DigitalWrite(uint8(p), value)
|
|
return nil
|
|
}
|
|
|
|
func (p Pin) High() error {
|
|
return p.Set(true)
|
|
}
|
|
|
|
func (p Pin) Low() error {
|
|
return p.Set(false)
|
|
}
|