diff --git a/waveshare2in13v2/waveshare213v2.go b/waveshare2in13v2/waveshare213v2.go index c95af24..ed5da07 100644 --- a/waveshare2in13v2/waveshare213v2.go +++ b/waveshare2in13v2/waveshare213v2.go @@ -206,95 +206,101 @@ func NewHat(p spi.Port, opts *Opts) (*Dev, error) { return New(p, dc, cs, rst, busy, opts) } -// Init will initialize the display with the partial-update or full-update mode. -func (d *Dev) Init(partialUpdate PartialUpdate) error { - +func (d *Dev) initFull() error { eh := errorHandler{d: *d} - // Hardware Reset - if err := d.reset(); err != nil { - return err - } + // Software Reset + d.waitUntilIdle() + eh.sendCommand(swReset) + d.waitUntilIdle() - if partialUpdate { - // Partital Update Mode + // Set analog block control + eh.sendCommand(setAnalogBlockControl) + eh.sendData([]byte{0x54}) + + // Set digital block control + eh.sendCommand(setDigitalBlockControl) + eh.sendData([]byte{0x3B}) + + // Driver output control + eh.sendCommand(driverOutputControl) + eh.sendData([]byte{ + byte((d.opts.Height - 1) % 0xFF), + byte((d.opts.Height - 1) / 0xFF), + 0x00, + }) - // VCOM Voltage - eh.sendCommand(writeVcomRegister) - eh.sendData([]byte{0x26}) + // Border Waveform + eh.sendCommand(borderWaveformControl) + eh.sendData([]byte{0x03}) - d.waitUntilIdle() + // VCOM Voltage + eh.sendCommand(writeVcomRegister) + eh.sendData([]byte{0x55}) - eh.sendCommand(writeLutRegister) - eh.sendData(d.opts.PartialUpdate[:70]) + eh.sendCommand(gateDrivingVoltageControl) + eh.sendData([]byte{gateDrivingVoltage19V}) - eh.sendCommand(0x37) - eh.sendData([]byte{0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00}) + eh.sendCommand(sourceDrivingVoltageControl) + eh.sendData([]byte{sourceDrivingVoltageVSH1_15V, sourceDrivingVoltageVSH2_5V, sourceDrivingVoltageVSL_neg15V}) - eh.sendCommand(displayUpdateControl2) - eh.sendData([]byte{0xC0}) + // Dummy Line + eh.sendCommand(setDummyLinePeriod) + eh.sendData([]byte{0x30}) - eh.sendCommand(masterActivation) + // Gate Time + eh.sendCommand(setGateTime) + eh.sendData([]byte{0x0A}) - d.waitUntilIdle() + eh.sendCommand(writeLutRegister) + eh.sendData(d.opts.FullUpdate[:70]) - // Border Waveform - eh.sendCommand(borderWaveformControl) - eh.sendData([]byte{0x01}) + d.waitUntilIdle() - } else { - // Full Update Mode + return eh.err +} - // Software Reset - d.waitUntilIdle() - eh.sendCommand(swReset) - d.waitUntilIdle() +func (d *Dev) initPartial() error { + eh := errorHandler{d: *d} - // Set analog block control - eh.sendCommand(setAnalogBlockControl) - eh.sendData([]byte{0x54}) + // VCOM Voltage + eh.sendCommand(writeVcomRegister) + eh.sendData([]byte{0x26}) - // Set digital block control - eh.sendCommand(setDigitalBlockControl) - eh.sendData([]byte{0x3B}) + d.waitUntilIdle() - // Driver output control - eh.sendCommand(driverOutputControl) - eh.sendData([]byte{ - byte((d.opts.Height - 1) % 0xFF), - byte((d.opts.Height - 1) / 0xFF), - 0x00, - }) + eh.sendCommand(writeLutRegister) + eh.sendData(d.opts.PartialUpdate[:70]) - // Border Waveform - eh.sendCommand(borderWaveformControl) - eh.sendData([]byte{0x03}) + eh.sendCommand(0x37) + eh.sendData([]byte{0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00}) - // VCOM Voltage - eh.sendCommand(writeVcomRegister) - eh.sendData([]byte{0x55}) + eh.sendCommand(displayUpdateControl2) + eh.sendData([]byte{0xC0}) - eh.sendCommand(gateDrivingVoltageControl) - eh.sendData([]byte{gateDrivingVoltage19V}) + eh.sendCommand(masterActivation) - eh.sendCommand(sourceDrivingVoltageControl) - eh.sendData([]byte{sourceDrivingVoltageVSH1_15V, sourceDrivingVoltageVSH2_5V, sourceDrivingVoltageVSL_neg15V}) + d.waitUntilIdle() - // Dummy Line - eh.sendCommand(setDummyLinePeriod) - eh.sendData([]byte{0x30}) + // Border Waveform + eh.sendCommand(borderWaveformControl) + eh.sendData([]byte{0x01}) - // Gate Time - eh.sendCommand(setGateTime) - eh.sendData([]byte{0x0A}) + return eh.err +} - eh.sendCommand(writeLutRegister) - eh.sendData(d.opts.FullUpdate[:70]) +// Init will initialize the display with the partial-update or full-update mode. +func (d *Dev) Init(partialUpdate PartialUpdate) error { + // Hardware Reset + if err := d.reset(); err != nil { + return err + } - d.waitUntilIdle() + if partialUpdate { + return d.initPartial() } - return eh.err + return d.initFull() } // Clear clears the display.