mirror of https://github.com/periph/devices
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
238 lines
5.5 KiB
Go
238 lines
5.5 KiB
Go
// Copyright 2021 The Periph Authors. All rights reserved.
|
|
// Use of this source code is governed under the Apache License, Version 2.0
|
|
// that can be found in the LICENSE file.
|
|
|
|
package waveshare2in13v4
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/google/go-cmp/cmp/cmpopts"
|
|
)
|
|
|
|
type record struct {
|
|
cmd byte
|
|
data []byte
|
|
}
|
|
|
|
type fakeController []record
|
|
|
|
func (r *fakeController) sendCommand(cmd byte) {
|
|
*r = append(*r, record{
|
|
cmd: cmd,
|
|
})
|
|
}
|
|
|
|
func (r *fakeController) sendData(data []byte) {
|
|
cur := &(*r)[len(*r)-1]
|
|
cur.data = append(cur.data, data...)
|
|
}
|
|
|
|
func (r *fakeController) sendByte(data byte) {
|
|
cur := &(*r)[len(*r)-1]
|
|
cur.data = append(cur.data, data)
|
|
}
|
|
|
|
func (*fakeController) readBusy() {
|
|
}
|
|
|
|
func TestInitDisplay(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
name string
|
|
opts Opts
|
|
want []record
|
|
}{
|
|
{
|
|
name: "epd2in13v4",
|
|
opts: EPD2in13v4,
|
|
want: []record{
|
|
{cmd: swReset},
|
|
{
|
|
cmd: driverOutputControl,
|
|
data: []byte{250 - 1, 0, 0},
|
|
},
|
|
{cmd: dataEntryModeSetting, data: []byte{0x03}},
|
|
{cmd: setRAMXAddressStartEndPosition, data: []uint8{0x00, 0x0f}},
|
|
{cmd: setRAMYAddressStartEndPosition, data: []uint8{0x00, 0x00, 0xf9, 0x00}},
|
|
{cmd: setRAMXAddressCounter, data: []uint8{0x00}},
|
|
{cmd: setRAMYAddressCounter, data: []uint8{0x00, 0x00}},
|
|
{cmd: borderWaveformControl, data: []uint8{0x05}},
|
|
{cmd: displayUpdateControl1, data: []uint8{0x80, 0x80}},
|
|
{cmd: tempSensorSelect, data: []uint8{0x80}},
|
|
},
|
|
},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
var got fakeController
|
|
|
|
initDisplay(&got, &tc.opts)
|
|
|
|
if diff := cmp.Diff([]record(got), tc.want, cmpopts.EquateEmpty(), cmp.AllowUnexported(record{})); diff != "" {
|
|
t.Errorf("initDisplay() difference (-got +want):\n%s", diff)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestInitDisplayFast(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
name string
|
|
opts Opts
|
|
want []record
|
|
}{
|
|
{
|
|
name: "epd2in13v4",
|
|
opts: EPD2in13v4,
|
|
want: []record{
|
|
{cmd: swReset},
|
|
{cmd: tempSensorSelect, data: []uint8{0x80}},
|
|
{cmd: dataEntryModeSetting, data: []byte{0x03}},
|
|
{cmd: setRAMXAddressStartEndPosition, data: []uint8{0x00, 0x0f}},
|
|
{cmd: setRAMYAddressStartEndPosition, data: []uint8{0x00, 0x00, 0xf9, 0x00}},
|
|
{cmd: setRAMXAddressCounter, data: []uint8{0x00}},
|
|
{cmd: setRAMYAddressCounter, data: []uint8{0x00, 0x00}},
|
|
{cmd: displayUpdateControl2, data: []uint8{0x81}},
|
|
{cmd: masterActivation},
|
|
{cmd: tempSensorRegWrite, data: []uint8{0x64, 0x00}},
|
|
{cmd: displayUpdateControl2, data: []uint8{0x91}},
|
|
{cmd: masterActivation},
|
|
},
|
|
},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
var got fakeController
|
|
|
|
initDisplayFast(&got, &tc.opts)
|
|
|
|
if diff := cmp.Diff([]record(got), tc.want, cmpopts.EquateEmpty(), cmp.AllowUnexported(record{})); diff != "" {
|
|
t.Errorf("initDisplay() difference (-got +want):\n%s", diff)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestUpdateDisplay(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
name string
|
|
mode PartialUpdate
|
|
want []record
|
|
}{
|
|
{
|
|
name: "full",
|
|
mode: Full,
|
|
want: []record{
|
|
{cmd: displayUpdateControl1, data: []byte{0}},
|
|
{cmd: displayUpdateControl2, data: []byte{0xc7}},
|
|
{cmd: masterActivation},
|
|
},
|
|
},
|
|
{
|
|
name: "partial",
|
|
mode: Partial,
|
|
want: []record{
|
|
{cmd: displayUpdateControl1, data: []byte{0x80}},
|
|
{cmd: displayUpdateControl2, data: []byte{0xc7}},
|
|
{cmd: masterActivation},
|
|
},
|
|
},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
var got fakeController
|
|
|
|
updateDisplay(&got, tc.mode)
|
|
|
|
if diff := cmp.Diff([]record(got), tc.want, cmpopts.EquateEmpty(), cmp.AllowUnexported(record{})); diff != "" {
|
|
t.Errorf("updateDisplay() difference (-got +want):\n%s", diff)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestTurnOnDisplayFast(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
name string
|
|
want []record
|
|
}{
|
|
{
|
|
name: "Fast",
|
|
want: []record{
|
|
{cmd: displayUpdateControl2, data: []byte{0xC7}},
|
|
{cmd: masterActivation},
|
|
},
|
|
},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
var got fakeController
|
|
|
|
turnOnDisplayFast(&got)
|
|
|
|
if diff := cmp.Diff([]record(got), tc.want, cmpopts.EquateEmpty(), cmp.AllowUnexported(record{})); diff != "" {
|
|
t.Errorf("updateDisplay() difference (-got +want):\n%s", diff)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestTurnOnDisplayPart(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
name string
|
|
want []record
|
|
}{
|
|
{
|
|
name: "Part",
|
|
want: []record{
|
|
{cmd: displayUpdateControl2, data: []byte{0xFF}},
|
|
{cmd: masterActivation},
|
|
},
|
|
},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
var got fakeController
|
|
|
|
turnOnDisplayPart(&got)
|
|
|
|
if diff := cmp.Diff([]record(got), tc.want, cmpopts.EquateEmpty(), cmp.AllowUnexported(record{})); diff != "" {
|
|
t.Errorf("updateDisplay() difference (-got +want):\n%s", diff)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestClear(t *testing.T) {
|
|
var buff []byte
|
|
const linewidth = int(122/8) + 1
|
|
for j := 0; j < 250; j++ {
|
|
for i := 0; i < linewidth; i++ {
|
|
buff = append(buff, 0x00)
|
|
}
|
|
}
|
|
for _, tc := range []struct {
|
|
name string
|
|
opts Opts
|
|
color byte
|
|
want []record
|
|
}{
|
|
{
|
|
name: "clear",
|
|
opts: EPD2in13v4,
|
|
want: []record{
|
|
{cmd: writeRAMBW, data: buff},
|
|
{cmd: writeRAMRed, data: buff},
|
|
{cmd: displayUpdateControl2, data: []byte{0xf7}},
|
|
{cmd: masterActivation},
|
|
},
|
|
},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
var got fakeController
|
|
|
|
clear(&got, tc.color, &tc.opts)
|
|
|
|
if diff := cmp.Diff([]record(got), tc.want, cmpopts.EquateEmpty(), cmp.AllowUnexported(record{})); diff != "" {
|
|
t.Errorf("updateDisplay() difference (-got +want):\n%s", diff)
|
|
}
|
|
})
|
|
}
|
|
}
|