2014-04-28 04:39:51 -07:00
|
|
|
package beaglebone
|
2014-04-26 03:11:51 -07:00
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
"strings"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
type pwmPin struct {
|
|
|
|
pinNum string
|
|
|
|
pwmDevice string
|
|
|
|
}
|
|
|
|
|
|
|
|
func newPwmPin(pinNum string) *pwmPin {
|
|
|
|
var err error
|
|
|
|
var fi *os.File
|
|
|
|
|
|
|
|
d := new(pwmPin)
|
|
|
|
d.pinNum = strings.ToUpper(pinNum)
|
2014-06-10 15:16:11 -07:00
|
|
|
slots, err := filepath.Glob(Slots)
|
2014-04-26 03:11:51 -07:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
fi, err = os.OpenFile(fmt.Sprintf("%v/slots", slots[0]), os.O_WRONLY|os.O_APPEND, 0666)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
fi.WriteString("am33xx_pwm")
|
|
|
|
fi.Sync()
|
|
|
|
fi.WriteString(fmt.Sprintf("bone_pwm_%v", d.pinNum))
|
|
|
|
fi.Sync()
|
|
|
|
fi.Close()
|
|
|
|
|
2014-06-10 15:16:11 -07:00
|
|
|
ocp, err := filepath.Glob(Ocp)
|
2014-04-26 03:11:51 -07:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
pwmDevice, err := filepath.Glob(fmt.Sprintf("%v/pwm_test_%v.*", ocp[0], d.pinNum))
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
d.pwmDevice = pwmDevice[0]
|
|
|
|
|
|
|
|
for i := 0; i < 10; i++ {
|
|
|
|
fi, err = os.OpenFile(fmt.Sprintf("%v/run", d.pwmDevice), os.O_WRONLY|os.O_APPEND, 0666)
|
|
|
|
if err != nil && i == 9 {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
time.Sleep(10 * time.Millisecond)
|
|
|
|
}
|
|
|
|
fi.WriteString("1")
|
|
|
|
fi.Close()
|
|
|
|
|
|
|
|
return d
|
|
|
|
}
|
|
|
|
|
2014-06-10 15:16:11 -07:00
|
|
|
func (p *pwmPin) pwmWrite(period string, duty string) {
|
2014-04-26 03:11:51 -07:00
|
|
|
var err error
|
|
|
|
var fi *os.File
|
|
|
|
|
2014-06-10 15:16:11 -07:00
|
|
|
fi, err = os.OpenFile(fmt.Sprintf("%v/period", p.pwmDevice), os.O_WRONLY|os.O_APPEND, 0666)
|
2014-04-26 03:11:51 -07:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
fi.WriteString(period)
|
|
|
|
fi.Close()
|
|
|
|
|
2014-06-10 15:16:11 -07:00
|
|
|
fi, err = os.OpenFile(fmt.Sprintf("%v/duty", p.pwmDevice), os.O_WRONLY|os.O_APPEND, 0666)
|
2014-04-26 03:11:51 -07:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
fi.WriteString(duty)
|
|
|
|
fi.Close()
|
|
|
|
}
|
|
|
|
|
2014-06-10 15:16:11 -07:00
|
|
|
func (p *pwmPin) release() {
|
|
|
|
fi, err := os.OpenFile(fmt.Sprintf("%v/run", p.pwmDevice), os.O_WRONLY|os.O_APPEND, 0666)
|
2014-04-26 03:11:51 -07:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
fi.WriteString("0")
|
|
|
|
fi.Close()
|
|
|
|
}
|