Files
2023-12-06 20:09:39 +01:00

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)
}