Merge pull request #4 from brendanporter/gpio_slowdown

trying to fix gpio slowdown
pull/13/head
Brendan Porter 6 years ago committed by GitHub
commit e61d69db56
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -56,7 +56,11 @@ var DefaultConfig = HardwareConfig{
PWMLSBNanoseconds: 130,
Brightness: 100,
ScanMode: Progressive,
GPIOSlowdown: 1,
}
type RuntimeOptions struct {
// Control speed of GPIO updates. Valid range is 0..3
GPIOSlowdown int
}
// HardwareConfig rgb-led-matrix configuration
@ -96,9 +100,6 @@ type HardwareConfig struct {
ShowRefreshRate bool
InverseColors bool
// Control speed of GPIO updates. Valid range is 0..3
GPIOSlowdown int
// Name of GPIO mapping used
HardwareMapping string
}
@ -107,6 +108,17 @@ func (c *HardwareConfig) geometry() (width, height int) {
return c.Cols * c.ChainLength, c.Rows * c.Parallel
}
func (r *RuntimeOptions) toC() *C.struct_RuntimeOptions {
o := &C.struct_RuntimeOptions{}
o.gpio_slowdown = C.int(r.GPIOSlowdown)
if c.GPIOSlowdown > 0 || c.GPIOSlowdown > 4 {
o.gpio_slowdown = 1
}
return o
}
func (c *HardwareConfig) toC() *C.struct_RGBLedMatrixOptions {
o := &C.struct_RGBLedMatrixOptions{}
o.rows = C.int(c.Rows)
@ -119,10 +131,6 @@ func (c *HardwareConfig) toC() *C.struct_RGBLedMatrixOptions {
o.scan_mode = C.int(c.ScanMode)
o.hardware_mapping = C.CString(c.HardwareMapping)
if c.GPIOSlowdown >= 0 && c.GPIOSlowdown < 3 {
C.gpio_slowdown(c.GPIOSlowdown)
}
if c.ShowRefreshRate == true {
C.set_show_refresh_rate(o, C.int(1))
} else {
@ -197,6 +205,39 @@ func NewRGBLedMatrix(config *HardwareConfig) (c Matrix, err error) {
return c, nil
}
// NewRGBLedMatrix returns a new matrix using the given size and config
func NewRGBLedMatrixWithOptions(config *HardwareConfig, run *RuntimeOptions) (c Matrix, err error) {
defer func() {
if r := recover(); r != nil {
var ok bool
err, ok = r.(error)
if !ok {
err = fmt.Errorf("error creating matrix: %v", r)
}
}
}()
if isMatrixEmulator() {
return buildMatrixEmulator(config), nil
}
w, h := config.geometry()
m := C.from_matrix(C.CreateMatrixFromOptions(config.toC(), run.toC()))
b := C.led_matrix_create_offscreen_canvas(m)
c = &RGBLedMatrix{
Config: config,
width: w, height: h,
matrix: m,
buffer: b,
leds: make([]C.uint32_t, w*h),
}
if m == nil {
return nil, fmt.Errorf("unable to allocate memory")
}
return c, nil
}
func isMatrixEmulator() bool {
if os.Getenv(MatrixEmulatorENV) == "1" {
return true

Loading…
Cancel
Save