Command

Enum Command 

Source
pub enum Command {
Show 29 variants DriverOutputControl = 1, SetGateDrivingVoltage = 3, SetSourceDrivingVoltage = 4, DeepSleepMode = 16, DataEntryModeSetting = 17, SwReset = 18, MasterActivation = 32, DisplayUpdateControl1 = 33, DisplayUpdateControl2 = 34, WriteLowRam = 36, WriteHighRam = 38, ReadVcom = 40, SetVcomReadDuration = 41, ProgramVcomOtp = 42, WriteVcom = 44, ReadOtpRegisters = 45, ReadUserId = 46, ProgramWsOtp = 48, LoadWsOtp = 49, WriteLut = 50, ProgramOtpSelection = 54, WriteRegisterForUserId = 56, SetOtpProgramMode = 57, SetBorderWaveform = 60, SetLutMagic = 63, SetRamXStartEnd = 68, SetRamYStartEnd = 69, SetRamX = 78, SetRamY = 79,
}
Expand description

Low-level commands for the Epd2In9 v2 display. You probably want to use the other methods exposed on the Epd2In9V2 for most operations, but can send commands directly with Epd2In9V2::send for low-level control or experimentation.

Variants§

§

DriverOutputControl = 1

Used to initialise the display.

§

SetGateDrivingVoltage = 3

Sets the gate driving voltage (standard value: 0x00, or 0x17).

§

SetSourceDrivingVoltage = 4

Sets the source driving voltage (standard value: [0x41, 0xA8, 0x32]).

§

DeepSleepMode = 16

Used to enter deep sleep mode. Requires a hardware reset and reinitialisation to wake up.

§

DataEntryModeSetting = 17

Changes the auto-increment behaviour of the address counter.

§

SwReset = 18

Resets all commands and parameters to default values (except deep sleep mode).

§

MasterActivation = 32

Activates the display update sequence. This must be set beforehand using Command::DisplayUpdateControl2. This operation must not be interrupted.

§

DisplayUpdateControl1 = 33

Used for a RAM “bypass” mode when using RefreshMode::Partial. This is poorly explained in the docs, but essentially we have these options:

In black and white mode:

  1. 0x00 (default): just update the pixels that have changed between the two internal frame buffers. This normally does what you expect. You can hack it a bit to do interesting things by writing to both the old and new frame buffers.
  2. 0x04: just update the white (BinaryColor::On) pixels in the current frame buffer. It doesn’t matter what is in the old frame buffer.
  3. 0x08: just update the black (BinaryColor::Off) pixels in the current frame buffer. It doesn’t matter what is in the old frame buffer.

In 4-color greyscale mode: same as above for the behaviour of the black and white bit, but OR-ed with:

  1. 0x00 (default)
  2. 0x40 (just update 1 bits)
  3. 0x80 (just update 0 bits)

TODO: verify the behaviour of greyscale mode.

§

DisplayUpdateControl2 = 34

Configures the display update sequence for use with Command::MasterActivation.

§

WriteLowRam = 36

Writes low bits to the current frame buffer.

§

WriteHighRam = 38

Writes high bits to the current frame buffer.

§

ReadVcom = 40

Triggers a read of the VCOM voltage. Requires that CLKEN and ANALOGEN have been enabled via Command::DisplayUpdateControl2.

§

SetVcomReadDuration = 41

Sets the duration to hold before reading the VCOM value.

§

ProgramVcomOtp = 42

Programs the VCOM register into the OTP. Requires that CLKEN has been enabled via Command::DisplayUpdateControl2.

§

WriteVcom = 44

Writes to the VCOM register.

§

ReadOtpRegisters = 45

?? Reads OTP registers (sections: VCOM OTP selection, VCOM register, Display Mode, Waveform Version).

§

ReadUserId = 46

?? Reads 10 byte User ID stored in OTP.

§

ProgramWsOtp = 48

?? Programs the OTP of Waveform Setting (requires writing the bytes into RAM first). Requires CLKEN to have been enabled via Command::DisplayUpdateControl2.

§

LoadWsOtp = 49

?? Loads the OTP of Waveform Setting. Requires CLKEN to have been enabled via Command::DisplayUpdateControl2.

§

WriteLut = 50

Writes the LUT register (153 bytes, containing VS[nX-LUTm], TP[nX], RP[n], SR[nXY], FR[n], and XON[nXY]).

§

ProgramOtpSelection = 54

?? Programs OTP selection according to the OTP selection control (registers 0x37 and 0x38). Requires CLKEN to have been enabled via Command::DisplayUpdateControl2.

§

WriteRegisterForUserId = 56

Undocumented command for writing OTP data.
Writes the register for the user ID that can be stored in the OTP.

§

SetOtpProgramMode = 57

?? Sets the OTP program mode:

  • 0x00: normal mode
  • 0x03: internally generated OTP programming voltage
§

SetBorderWaveform = 60

Undocumented command used when initialising each refresh mode.

§

SetLutMagic = 63

Undocumented command needed for setting the LUT.

§

SetRamXStartEnd = 68

Sets the start and end positions of the X axis for the auto-incrementing address counter. Start and end are inclusive.

Note that the x position can only be written on a whole byte basis (8 bits at once). The start and end positions are therefore sent right shifted 3 bits to indicate the byte number being written. For example, to write the first 32 x positions, you would send 0 (0 >> 3 = 0), and 3 (31 >> 3 = 3). If you tried to write just the first 25 x positions, you would end up sending the same values and actually writing all 32.

§

SetRamYStartEnd = 69

Sets the start and end positions of the Y axis for the auto-incrementing address counter. Start and end are inclusive.

§

SetRamX = 78

Sets the current x coordinate of the address counter. Note that the x position can only be configured as a multiple of 8.

§

SetRamY = 79

Sets the current y coordinate of the address counter.

Trait Implementations§

Source§

impl Clone for Command

Source§

fn clone(&self) -> Command

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Command

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Command

Source§

fn eq(&self, other: &Command) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for Command

Source§

impl Eq for Command

Source§

impl StructuralPartialEq for Command

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.