mirror of
https://github.com/kidoman/embd
synced 2025-07-04 20:37:46 +02:00
make the framework easier to begin with
This commit is contained in:
parent
ef87ad7879
commit
3d08995000
26 changed files with 237 additions and 170 deletions
|
@ -17,24 +17,27 @@ type digitalPin struct {
|
|||
edge *os.File
|
||||
}
|
||||
|
||||
func newDigitalPin(n int) (p *digitalPin, err error) {
|
||||
func newDigitalPin(n int) (*digitalPin, error) {
|
||||
p = &digitalPin{n: n}
|
||||
err = p.init()
|
||||
return
|
||||
if err := p.init(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return p, nil
|
||||
}
|
||||
|
||||
func (p *digitalPin) init() (err error) {
|
||||
func (p *digitalPin) init() error {
|
||||
var err error
|
||||
if p.dir, err = p.directionFile(); err != nil {
|
||||
return
|
||||
return err
|
||||
}
|
||||
if p.val, err = p.valueFile(); err != nil {
|
||||
return
|
||||
return err
|
||||
}
|
||||
if p.activeLow, err = p.activeLowFile(); err != nil {
|
||||
return
|
||||
return err
|
||||
}
|
||||
|
||||
return
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *digitalPin) basePath() string {
|
||||
|
@ -57,43 +60,43 @@ func (p *digitalPin) activeLowFile() (*os.File, error) {
|
|||
return p.openFile(path.Join(p.basePath(), "active_low"))
|
||||
}
|
||||
|
||||
func (p *digitalPin) SetDir(dir gpio.Direction) (err error) {
|
||||
func (p *digitalPin) SetDirection(dir gpio.Direction) error {
|
||||
str := "in"
|
||||
if dir == gpio.Out {
|
||||
str = "out"
|
||||
}
|
||||
_, err = p.dir.WriteString(str)
|
||||
_, err := p.dir.WriteString(str)
|
||||
return
|
||||
}
|
||||
|
||||
func (p *digitalPin) Read() (val int, err error) {
|
||||
func (p *digitalPin) Read() (int, error) {
|
||||
buf := make([]byte, 1)
|
||||
if _, err = p.val.Read(buf); err != nil {
|
||||
return
|
||||
if _, err := p.val.Read(buf); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
val = 0
|
||||
var val int
|
||||
if buf[0] == '1' {
|
||||
val = 1
|
||||
}
|
||||
return
|
||||
return val, nil
|
||||
}
|
||||
|
||||
func (p *digitalPin) Write(val int) (err error) {
|
||||
func (p *digitalPin) Write(val int) error {
|
||||
str := "0"
|
||||
if val == gpio.High {
|
||||
str = "1"
|
||||
}
|
||||
_, err = p.val.WriteString(str)
|
||||
return
|
||||
_, err := p.val.WriteString(str)
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *digitalPin) ActiveLow(b bool) (err error) {
|
||||
func (p *digitalPin) ActiveLow(b bool) error {
|
||||
str := "0"
|
||||
if b {
|
||||
str = "1"
|
||||
}
|
||||
_, err = p.activeLow.WriteString(str)
|
||||
return
|
||||
_, err := p.activeLow.WriteString(str)
|
||||
return err
|
||||
}
|
||||
|
||||
func (p *digitalPin) Close() error {
|
||||
|
|
|
@ -64,38 +64,39 @@ func New(pinMap PinMap) *GPIO {
|
|||
}
|
||||
}
|
||||
|
||||
func (io *GPIO) init() (err error) {
|
||||
func (io *GPIO) init() error {
|
||||
if io.initialized {
|
||||
return
|
||||
return nil
|
||||
}
|
||||
|
||||
var err error
|
||||
if io.exporter, err = os.OpenFile("/sys/class/gpio/export", os.O_WRONLY, os.ModeExclusive); err != nil {
|
||||
return
|
||||
return err
|
||||
}
|
||||
if io.unexporter, err = os.OpenFile("/sys/class/gpio/unexport", os.O_WRONLY, os.ModeExclusive); err != nil {
|
||||
return
|
||||
return err
|
||||
}
|
||||
|
||||
io.initialized = true
|
||||
|
||||
return
|
||||
return nil
|
||||
}
|
||||
|
||||
func (io *GPIO) lookupKey(key interface{}) (*PinDesc, bool) {
|
||||
return io.pinMap.Lookup(key)
|
||||
}
|
||||
|
||||
func (io *GPIO) export(n int) (err error) {
|
||||
_, err = io.exporter.WriteString(strconv.Itoa(n))
|
||||
return
|
||||
func (io *GPIO) export(n int) error {
|
||||
_, err := io.exporter.WriteString(strconv.Itoa(n))
|
||||
return err
|
||||
}
|
||||
|
||||
func (io *GPIO) unexport(n int) (err error) {
|
||||
_, err = io.unexporter.WriteString(strconv.Itoa(n))
|
||||
return
|
||||
func (io *GPIO) unexport(n int) error {
|
||||
_, err := io.unexporter.WriteString(strconv.Itoa(n))
|
||||
return err
|
||||
}
|
||||
|
||||
func (io *GPIO) digitalPin(key interface{}) (p *digitalPin, err error) {
|
||||
func (io *GPIO) digitalPin(key interface{}) (*digitalPin, error) {
|
||||
pd, found := io.lookupKey(key)
|
||||
if !found {
|
||||
err = fmt.Errorf("gpio: could not find pin matching %q", key)
|
||||
|
@ -104,8 +105,8 @@ func (io *GPIO) digitalPin(key interface{}) (p *digitalPin, err error) {
|
|||
|
||||
n := pd.N
|
||||
|
||||
var ok bool
|
||||
if p, ok = io.initializedPins[n]; ok {
|
||||
p, ok := io.initializedPins[n]
|
||||
if ok {
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -118,18 +119,19 @@ func (io *GPIO) digitalPin(key interface{}) (p *digitalPin, err error) {
|
|||
glog.Infof("gpio: pin %q is not a dedicated GPIO pin. please refer to the system reference manual for more details", key)
|
||||
}
|
||||
|
||||
if err = io.export(n); err != nil {
|
||||
return
|
||||
if err := io.export(n); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if p, err = newDigitalPin(n); err != nil {
|
||||
p, err := newDigitalPin(n)
|
||||
if err != nil {
|
||||
io.unexport(n)
|
||||
return
|
||||
return nil, err
|
||||
}
|
||||
|
||||
io.initializedPins[n] = p
|
||||
|
||||
return
|
||||
return p, nil
|
||||
}
|
||||
|
||||
func (io *GPIO) DigitalPin(key interface{}) (gpio.DigitalPin, error) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue