1
0
Fork 0
mirror of https://github.com/kidoman/embd synced 2025-07-03 03:47:33 +02:00

gpio: adding interrupt

this is inspired by Dave Cheney's gpio library and his work on EPOLL
This commit is contained in:
SjB 2014-08-31 00:39:41 -04:00
parent 6ad940090c
commit 0fa1d1b61c
4 changed files with 216 additions and 0 deletions

View file

@ -228,6 +228,10 @@ func (p *digitalPin) PullDown() error {
}
func (p *digitalPin) Close() error {
if err := p.StopWatching(); err != nil {
return err
}
if err := p.drv.Unregister(p.id); err != nil {
return err
}
@ -253,3 +257,25 @@ func (p *digitalPin) Close() error {
return nil
}
func (p *digitalPin) setEdge(edge embd.Edge) error {
file, err := p.openFile(path.Join(p.basePath(), "edge"))
if err != nil {
return err
}
defer file.Close()
_, err = file.Write([]byte(edge))
return err
}
func (p *digitalPin) Watch(edge embd.Edge, handler func(embd.DigitalPin)) error {
if err := p.setEdge(edge); err != nil {
return err
}
return registerInterrupt(p, handler)
}
func (p *digitalPin) StopWatching() error {
return unregisterInterrupt(p)
}