1
0
Fork 0
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:
Karan Misra 2014-03-01 20:19:44 +05:30
parent ef87ad7879
commit 3d08995000
26 changed files with 237 additions and 170 deletions

View file

@ -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 {

View file

@ -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) {