gpiostream: Add BitStream.LSBF

Remove Bits.

Fixes #189
pull/1/head
Marc-Antoine Ruel 8 years ago
parent fc241bc91d
commit 46ea7926cc

@ -59,10 +59,11 @@ func New(p gpiostream.PinOut, numPixels, hz int, channels int) (*Dev, error) {
p: p, p: p,
numPixels: numPixels, numPixels: numPixels,
channels: channels, channels: channels,
b: gpiostream.BitStreamMSB{ b: gpiostream.BitStream{
Res: time.Second / time.Duration(hz), Res: time.Second / time.Duration(hz),
// Each bit is encoded on 3 bits. // Each bit is encoded on 3 bits.
Bits: make(gpiostream.BitsMSB, numPixels*3*channels), Bits: make([]byte, numPixels*3*channels),
LSBF: false,
}, },
}, nil }, nil
} }
@ -72,7 +73,7 @@ type Dev struct {
p gpiostream.PinOut p gpiostream.PinOut
numPixels int numPixels int
channels int // Number of channels per pixel channels int // Number of channels per pixel
b gpiostream.BitStreamMSB // NRZ encoded bits; cached to reduce heap fragmentation b gpiostream.BitStream // NRZ encoded bits; cached to reduce heap fragmentation
buf []byte // Double buffer of RGB/RGBW pixels; enables partial Draw() buf []byte // Double buffer of RGB/RGBW pixels; enables partial Draw()
} }

@ -47,8 +47,8 @@ func TestNew_3(t *testing.T) {
g := gpiostreamtest.PinOutPlayback{ g := gpiostreamtest.PinOutPlayback{
N: "Yo", N: "Yo",
Ops: []gpiostream.Stream{ Ops: []gpiostream.Stream{
&gpiostream.BitStreamMSB{ &gpiostream.BitStream{
Bits: gpiostream.BitsMSB{ Bits: []byte{
0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92,
0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49,
0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24,
@ -57,6 +57,7 @@ func TestNew_3(t *testing.T) {
0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24,
}, },
Res: 2500 * time.Nanosecond, Res: 2500 * time.Nanosecond,
LSBF: false,
}, },
}, },
} }
@ -94,8 +95,8 @@ func TestNew_fail(t *testing.T) {
func TestDraw_NRGBA_3(t *testing.T) { func TestDraw_NRGBA_3(t *testing.T) {
g := gpiostreamtest.PinOutPlayback{ g := gpiostreamtest.PinOutPlayback{
Ops: []gpiostream.Stream{ Ops: []gpiostream.Stream{
&gpiostream.BitStreamMSB{ &gpiostream.BitStream{
Bits: gpiostream.BitsMSB{ Bits: []byte{
0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0xdb, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0xdb,
0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49,
0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24,
@ -104,6 +105,7 @@ func TestDraw_NRGBA_3(t *testing.T) {
0xb6, 0x92, 0x49, 0xb6, 0x92, 0x49, 0xb4, 0x92, 0x4d, 0x24, 0xb6, 0x92, 0x49, 0xb6, 0x92, 0x49, 0xb4, 0x92, 0x4d, 0x24,
}, },
Res: 2500 * time.Nanosecond, Res: 2500 * time.Nanosecond,
LSBF: false,
}, },
}, },
} }
@ -119,8 +121,8 @@ func TestDraw_NRGBA_3(t *testing.T) {
func TestDraw_RGBA_3(t *testing.T) { func TestDraw_RGBA_3(t *testing.T) {
g := gpiostreamtest.PinOutPlayback{ g := gpiostreamtest.PinOutPlayback{
Ops: []gpiostream.Stream{ Ops: []gpiostream.Stream{
&gpiostream.BitStreamMSB{ &gpiostream.BitStream{
Bits: gpiostream.BitsMSB{ Bits: []byte{
0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0xdb, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0xdb,
0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49,
0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24,
@ -129,6 +131,7 @@ func TestDraw_RGBA_3(t *testing.T) {
0xa6, 0xda, 0x49, 0xb6, 0xd3, 0x4d, 0x34, 0xdb, 0x49, 0x36, 0xa6, 0xda, 0x49, 0xb6, 0xd3, 0x4d, 0x34, 0xdb, 0x49, 0x36,
}, },
Res: 2500 * time.Nanosecond, Res: 2500 * time.Nanosecond,
LSBF: false,
}, },
}, },
} }
@ -144,8 +147,8 @@ func TestDraw_RGBA_3(t *testing.T) {
func TestDraw_RGBA_4(t *testing.T) { func TestDraw_RGBA_4(t *testing.T) {
g := gpiostreamtest.PinOutPlayback{ g := gpiostreamtest.PinOutPlayback{
Ops: []gpiostream.Stream{ Ops: []gpiostream.Stream{
&gpiostream.BitStreamMSB{ &gpiostream.BitStream{
Bits: gpiostream.BitsMSB{ Bits: []byte{
0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92,
0x49, 0x24, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49,
0x24, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0x24, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6,
@ -156,6 +159,7 @@ func TestDraw_RGBA_4(t *testing.T) {
0x4d, 0x34, 0xdb, 0x49, 0x36, 0x92, 0x4d, 0x26, 0x4d, 0x34, 0xdb, 0x49, 0x36, 0x92, 0x4d, 0x26,
}, },
Res: 2500 * time.Nanosecond, Res: 2500 * time.Nanosecond,
LSBF: false,
}, },
}, },
} }
@ -171,8 +175,8 @@ func TestDraw_RGBA_4(t *testing.T) {
func TestDraw_Limits(t *testing.T) { func TestDraw_Limits(t *testing.T) {
g := gpiostreamtest.PinOutPlayback{ g := gpiostreamtest.PinOutPlayback{
Ops: []gpiostream.Stream{ Ops: []gpiostream.Stream{
&gpiostream.BitStreamMSB{ &gpiostream.BitStream{
Bits: gpiostream.BitsMSB{ Bits: []byte{
0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0xdb, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0xdb,
0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49,
0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24,
@ -181,6 +185,7 @@ func TestDraw_Limits(t *testing.T) {
0xa6, 0xda, 0x49, 0xb6, 0xd3, 0x4d, 0x34, 0xdb, 0x49, 0x36, 0xa6, 0xda, 0x49, 0xb6, 0xd3, 0x4d, 0x34, 0xdb, 0x49, 0x36,
}, },
Res: 2500 * time.Nanosecond, Res: 2500 * time.Nanosecond,
LSBF: false,
}, },
}, },
} }
@ -196,8 +201,8 @@ func TestDraw_Limits(t *testing.T) {
func TestWrite_3(t *testing.T) { func TestWrite_3(t *testing.T) {
g := gpiostreamtest.PinOutPlayback{ g := gpiostreamtest.PinOutPlayback{
Ops: []gpiostream.Stream{ Ops: []gpiostream.Stream{
&gpiostream.BitStreamMSB{ &gpiostream.BitStream{
Bits: gpiostream.BitsMSB{ Bits: []byte{
0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0xdb, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0xdb,
0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x6d, 0xb6, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49,
0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0xdb, 0x6d, 0xb6, 0x92, 0x49, 0x24, 0x92, 0x49, 0x24,
@ -206,6 +211,7 @@ func TestWrite_3(t *testing.T) {
0xa6, 0x92, 0x49, 0xb6, 0x92, 0x49, 0xb4, 0x92, 0x4d, 0x24, 0xa6, 0x92, 0x49, 0xb6, 0x92, 0x49, 0xb4, 0x92, 0x4d, 0x24,
}, },
Res: 2500 * time.Nanosecond, Res: 2500 * time.Nanosecond,
LSBF: false,
}, },
}, },
} }

Loading…
Cancel
Save