embd/gpio.go

128 lines
1.8 KiB
Go
Raw Normal View History

2014-03-02 20:21:23 +01:00
package embd
2014-02-16 23:11:53 +01:00
type Direction int
const (
In Direction = iota
Out
2014-02-16 23:11:53 +01:00
)
const (
Low int = iota
2014-02-16 23:11:53 +01:00
High
)
type DigitalPin interface {
2014-03-23 00:29:35 +01:00
N() int
Write(val int) error
Read() (int, error)
2014-02-16 23:11:53 +01:00
SetDirection(dir Direction) error
ActiveLow(b bool) error
2014-02-16 23:11:53 +01:00
2014-03-02 07:39:57 +01:00
PullUp() error
PullDown() error
Close() error
2014-02-16 23:11:53 +01:00
}
2014-03-23 00:29:35 +01:00
type AnalogPin interface {
N() int
Write(val int) error
Read() (int, error)
Close() error
}
2014-03-02 20:21:23 +01:00
type GPIO interface {
DigitalPin(key interface{}) (DigitalPin, error)
2014-03-23 00:29:35 +01:00
AnalogPin(key interface{}) (AnalogPin, error)
2014-02-16 23:11:53 +01:00
Close() error
2014-02-16 23:11:53 +01:00
}
2014-03-02 20:21:23 +01:00
var gpioInstance GPIO
2014-03-02 20:21:23 +01:00
func InitGPIO() error {
desc, err := DescribeHost()
if err != nil {
return err
}
if desc.GPIO == nil {
return ErrFeatureNotSupport
}
2014-03-02 20:21:23 +01:00
gpioInstance = desc.GPIO()
return nil
}
2014-03-02 20:21:23 +01:00
func CloseGPIO() error {
return gpioInstance.Close()
}
func NewDigitalPin(key interface{}) (DigitalPin, error) {
2014-03-02 20:21:23 +01:00
return gpioInstance.DigitalPin(key)
}
func DigitalWrite(key interface{}, val int) error {
pin, err := NewDigitalPin(key)
if err != nil {
return err
}
return pin.Write(val)
}
func DigitalRead(key interface{}) (int, error) {
pin, err := NewDigitalPin(key)
if err != nil {
return 0, err
}
return pin.Read()
}
func SetDirection(key interface{}, dir Direction) error {
pin, err := NewDigitalPin(key)
if err != nil {
return err
}
return pin.SetDirection(dir)
}
func ActiveLow(key interface{}, b bool) error {
pin, err := NewDigitalPin(key)
if err != nil {
return err
}
return pin.ActiveLow(b)
}
2014-03-23 00:29:35 +01:00
func NewAnalogPin(key interface{}) (AnalogPin, error) {
return gpioInstance.AnalogPin(key)
}
func AnalogWrite(key interface{}, val int) error {
pin, err := NewAnalogPin(key)
if err != nil {
return err
}
return pin.Write(val)
}
func AnalogRead(key interface{}) (int, error) {
pin, err := NewAnalogPin(key)
if err != nil {
return 0, err
}
return pin.Read()
}