waveshare2in13v2: Make sending image part of drawOpts

pull/46/head
Michael Hanselmann 4 years ago
parent 8389d3ba60
commit 4a6897c697

@ -73,24 +73,23 @@ func (o *drawOpts) spec() drawSpec {
}
// sendImage sends an image to the controller after setting up the registers.
// The area is in bytes on the horizontal axis.
func sendImage(ctrl controller, cmd byte, area image.Rectangle, img *image1bit.VerticalLSB) {
if area.Empty() {
func (o *drawOpts) sendImage(ctrl controller, cmd byte, spec *drawSpec) {
if spec.MemRect.Empty() {
return
}
setMemoryArea(ctrl, area)
setMemoryArea(ctrl, spec.MemRect)
ctrl.sendCommand(cmd)
rowData := make([]byte, area.Dx())
rowData := make([]byte, spec.MemRect.Dx())
for y := area.Min.Y; y < area.Max.Y; y++ {
for y := spec.MemRect.Min.Y; y < spec.MemRect.Max.Y; y++ {
for x := 0; x < len(rowData); x++ {
rowData[x] = 0
for bit := 0; bit < 8; bit++ {
if img.BitAt(((area.Min.X+x)*8)+bit, y) {
if o.buffer.BitAt(((spec.MemRect.Min.X+x)*8)+bit, y) {
rowData[x] |= 0x80 >> bit
}
}
@ -117,6 +116,6 @@ func drawImage(ctrl controller, opts *drawOpts) {
// Keep the two buffers in sync.
for _, cmd := range commands {
sendImage(ctrl, cmd, s.MemRect, opts.buffer)
opts.sendImage(ctrl, cmd, &s)
}
}

@ -63,18 +63,23 @@ func TestSendImage(t *testing.T) {
for _, tc := range []struct {
name string
cmd byte
area image.Rectangle
img *image1bit.VerticalLSB
opts drawOpts
want []record
}{
{
name: "empty",
opts: drawOpts{
buffer: image1bit.NewVerticalLSB(image.Rectangle{}),
},
},
{
name: "partial",
cmd: writeRAMBW,
area: image.Rect(2, 20, 4, 40),
img: image1bit.NewVerticalLSB(image.Rect(0, 0, 64, 64)),
opts: drawOpts{
devSize: image.Pt(64, 64),
dstRect: image.Rect(16, 20, 32, 40),
buffer: image1bit.NewVerticalLSB(image.Rect(0, 0, 64, 64)),
},
want: []record{
{cmd: dataEntryModeSetting, data: []byte{0x3}},
{cmd: setRAMXAddressStartEndPosition, data: []byte{2, 4 - 1}},
@ -90,12 +95,15 @@ func TestSendImage(t *testing.T) {
{
name: "partial non-aligned",
cmd: writeRAMRed,
area: image.Rect(2, 4, 6, 8),
img: func() *image1bit.VerticalLSB {
opts: drawOpts{
devSize: image.Pt(100, 64),
dstRect: image.Rect(17, 4, 41, 8),
buffer: func() *image1bit.VerticalLSB {
img := image1bit.NewVerticalLSB(image.Rect(0, 0, 64, 64))
draw.Src.Draw(img, image.Rect(17, 4, 41, 8), &image.Uniform{image1bit.On}, image.Point{})
return img
}(),
},
want: []record{
{cmd: dataEntryModeSetting, data: []byte{0x3}},
{cmd: setRAMXAddressStartEndPosition, data: []byte{2, 6 - 1}},
@ -111,12 +119,15 @@ func TestSendImage(t *testing.T) {
{
name: "full",
cmd: writeRAMBW,
area: image.Rect(0, 0, 10, 120),
img: func() *image1bit.VerticalLSB {
opts: drawOpts{
devSize: image.Pt(80, 120),
dstRect: image.Rect(0, 0, 80, 120),
buffer: func() *image1bit.VerticalLSB {
img := image1bit.NewVerticalLSB(image.Rect(0, 0, 80, 120))
draw.Src.Draw(img, image.Rect(0, 0, 80, 120), &image.Uniform{image1bit.On}, image.Point{})
return img
}(),
},
want: []record{
{cmd: dataEntryModeSetting, data: []byte{0x3}},
{cmd: setRAMXAddressStartEndPosition, data: []byte{0, 10 - 1}},
@ -133,7 +144,9 @@ func TestSendImage(t *testing.T) {
t.Run(tc.name, func(t *testing.T) {
var got fakeController
sendImage(&got, tc.cmd, tc.area, tc.img)
spec := tc.opts.spec()
tc.opts.sendImage(&got, tc.cmd, &spec)
if diff := cmp.Diff([]record(got), tc.want, cmpopts.EquateEmpty(), cmp.AllowUnexported(record{})); diff != "" {
t.Errorf("sendImage() difference (-got +want):\n%s", diff)

Loading…
Cancel
Save