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:
parent
6ad940090c
commit
0fa1d1b61c
4 changed files with 216 additions and 0 deletions
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue