From 1a49faafddc013e2996e610cca49d86abf6e7b64 Mon Sep 17 00:00:00 2001 From: "Felipe Ramos (perenecabuto)" Date: Sat, 10 Sep 2016 22:31:52 -0300 Subject: [PATCH 1/3] Close unregistred digitalpins --- host/generic/digitalpin.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/host/generic/digitalpin.go b/host/generic/digitalpin.go index 80a81ea..de7dc8b 100644 --- a/host/generic/digitalpin.go +++ b/host/generic/digitalpin.go @@ -7,6 +7,7 @@ package generic import ( "errors" "fmt" + "log" "os" "path" "strconv" @@ -233,7 +234,7 @@ func (p *digitalPin) Close() error { } if err := p.drv.Unregister(p.id); err != nil { - return err + log.Println("Driver unregister error:", err.Error()) } if !p.initialized { From 7368ec8726086837ed7dc130bbf255142daa49e5 Mon Sep 17 00:00:00 2001 From: "Felipe Ramos (perenecabuto)" Date: Sat, 10 Sep 2016 22:33:06 -0300 Subject: [PATCH 2/3] Close exported pin on export failure --- host/generic/digitalpin.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/host/generic/digitalpin.go b/host/generic/digitalpin.go index de7dc8b..3894617 100644 --- a/host/generic/digitalpin.go +++ b/host/generic/digitalpin.go @@ -43,6 +43,11 @@ func (p *digitalPin) init() error { if p.initialized { return nil } + defer func() { + if !p.initialized { + p.unexport() + } + }() var err error if err = p.export(); err != nil { From b597ef340e6336bb1f6d36bf04ada277677f9592 Mon Sep 17 00:00:00 2001 From: "Felipe Ramos (perenecabuto)" Date: Sat, 10 Sep 2016 22:34:54 -0300 Subject: [PATCH 3/3] Wait for sys update after export gpio --- host/generic/digitalpin.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/host/generic/digitalpin.go b/host/generic/digitalpin.go index 3894617..ad14f26 100644 --- a/host/generic/digitalpin.go +++ b/host/generic/digitalpin.go @@ -73,8 +73,9 @@ func (p *digitalPin) export() error { if err != nil { return err } - defer exporter.Close() _, err = exporter.WriteString(strconv.Itoa(p.n)) + exporter.Close() + time.Sleep(time.Second / 2) return err } @@ -83,8 +84,9 @@ func (p *digitalPin) unexport() error { if err != nil { return err } - defer unexporter.Close() _, err = unexporter.WriteString(strconv.Itoa(p.n)) + unexporter.Close() + time.Sleep(time.Second / 2) return err }