You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
5.5 KiB
154 lines
5.5 KiB
//! SPI Commands for the Waveshare 7.5" E-Ink Display |
|
|
|
use crate::traits; |
|
|
|
/// EPD7in5 commands |
|
/// |
|
/// Should rarely (never?) be needed directly. |
|
/// |
|
/// For more infos about the addresses and what they are doing look into the PDFs. |
|
#[allow(dead_code)] |
|
#[allow(non_camel_case_types)] |
|
#[derive(Copy, Clone)] |
|
pub(crate) enum Command { |
|
/// Set Resolution, LUT selection, BWR pixels, gate scan direction, source shift |
|
/// direction, booster switch, soft reset. |
|
PANEL_SETTING = 0x00, |
|
|
|
/// Selecting internal and external power |
|
POWER_SETTING = 0x01, |
|
|
|
/// After the Power Off command, the driver will power off following the Power Off |
|
/// Sequence; BUSY signal will become "0". This command will turn off charge pump, |
|
/// T-con, source driver, gate driver, VCOM, and temperature sensor, but register |
|
/// data will be kept until VDD becomes OFF. Source Driver output and Vcom will remain |
|
/// as previous condition, which may have 2 conditions: 0V or floating. |
|
POWER_OFF = 0x02, |
|
|
|
/// Setting Power OFF sequence |
|
POWER_OFF_SEQUENCE_SETTING = 0x03, |
|
|
|
/// Turning On the Power |
|
/// |
|
/// After the Power ON command, the driver will power on following the Power ON |
|
/// sequence. Once complete, the BUSY signal will become "1". |
|
POWER_ON = 0x04, |
|
|
|
/// Starting data transmission |
|
BOOSTER_SOFT_START = 0x06, |
|
|
|
/// This command makes the chip enter the deep-sleep mode to save power. |
|
/// |
|
/// The deep sleep mode would return to stand-by by hardware reset. |
|
/// |
|
/// The only one parameter is a check code, the command would be excuted if check code = 0xA5. |
|
DEEP_SLEEP = 0x07, |
|
|
|
/// This command starts transmitting data and write them into SRAM. To complete data |
|
/// transmission, command DSP (Data Stop) must be issued. Then the chip will start to |
|
/// send data/VCOM for panel. |
|
/// |
|
/// BLACK/WHITE or OLD_DATA |
|
DATA_START_TRANSMISSION_1 = 0x10, |
|
|
|
/// To stop data transmission, this command must be issued to check the `data_flag`. |
|
/// |
|
/// After this command, BUSY signal will become "0" until the display update is |
|
/// finished. |
|
DATA_STOP = 0x11, |
|
|
|
/// After this command is issued, driver will refresh display (data/VCOM) according to |
|
/// SRAM data and LUT. |
|
/// |
|
/// After Display Refresh command, BUSY signal will become "0" until the display |
|
/// update is finished. |
|
DISPLAY_REFRESH = 0x12, |
|
|
|
/// RED or NEW_DATA |
|
DATA_START_TRANSMISSION_2 = 0x13, |
|
|
|
/// Dual SPI - what for? |
|
DUAL_SPI = 0x15, |
|
|
|
/// This command builds the VCOM Look-Up Table (LUTC). |
|
LUT_FOR_VCOM = 0x20, |
|
/// This command builds the Black Look-Up Table (LUTB). |
|
LUT_BLACK = 0x21, |
|
/// This command builds the White Look-Up Table (LUTW). |
|
LUT_WHITE = 0x22, |
|
/// This command builds the Gray1 Look-Up Table (LUTG1). |
|
LUT_GRAY_1 = 0x23, |
|
/// This command builds the Gray2 Look-Up Table (LUTG2). |
|
LUT_GRAY_2 = 0x24, |
|
/// This command builds the Red0 Look-Up Table (LUTR0). |
|
LUT_RED_0 = 0x25, |
|
/// This command builds the Red1 Look-Up Table (LUTR1). |
|
LUT_RED_1 = 0x26, |
|
/// This command builds the Red2 Look-Up Table (LUTR2). |
|
LUT_RED_2 = 0x27, |
|
/// This command builds the Red3 Look-Up Table (LUTR3). |
|
LUT_RED_3 = 0x28, |
|
/// This command builds the XON Look-Up Table (LUTXON). |
|
LUT_XON = 0x29, |
|
|
|
/// The command controls the PLL clock frequency. |
|
PLL_CONTROL = 0x30, |
|
|
|
/// This command reads the temperature sensed by the temperature sensor. |
|
TEMPERATURE_SENSOR_COMMAND = 0x40, |
|
/// This command selects the Internal or External temperature sensor. |
|
TEMPERATURE_CALIBRATION = 0x41, |
|
/// This command could write data to the external temperature sensor. |
|
TEMPERATURE_SENSOR_WRITE = 0x42, |
|
/// This command could read data from the external temperature sensor. |
|
TEMPERATURE_SENSOR_READ = 0x43, |
|
|
|
/// This command indicates the interval of Vcom and data output. When setting the |
|
/// vertical back porch, the total blanking will be kept (20 Hsync). |
|
VCOM_AND_DATA_INTERVAL_SETTING = 0x50, |
|
/// This command indicates the input power condition. Host can read this flag to learn |
|
/// the battery condition. |
|
LOW_POWER_DETECTION = 0x51, |
|
|
|
/// This command defines non-overlap period of Gate and Source. |
|
TCON_SETTING = 0x60, |
|
/// This command defines alternative resolution and this setting is of higher priority |
|
/// than the RES\[1:0\] in R00H (PSR). |
|
TCON_RESOLUTION = 0x61, |
|
/// This command defines MCU host direct access external memory mode. |
|
SPI_FLASH_CONTROL = 0x65, |
|
|
|
/// The LUT_REV / Chip Revision is read from OTP address = 25001 and 25000. |
|
REVISION = 0x70, |
|
/// This command reads the IC status. |
|
GET_STATUS = 0x71, |
|
|
|
/// This command implements related VCOM sensing setting. |
|
AUTO_MEASUREMENT_VCOM = 0x80, |
|
/// This command gets the VCOM value. |
|
READ_VCOM_VALUE = 0x81, |
|
/// This command sets `VCOM_DC` value. |
|
VCM_DC_SETTING = 0x82, |
|
// /// This is in all the Waveshare controllers for EPD7in5, but it's not documented |
|
// /// anywhere in the datasheet `¯\_(ツ)_/¯` |
|
// FLASH_MODE = 0xE5, |
|
} |
|
|
|
impl traits::Command for Command { |
|
/// Returns the address of the command |
|
fn address(self) -> u8 { |
|
self as u8 |
|
} |
|
} |
|
|
|
#[cfg(test)] |
|
mod tests { |
|
use super::*; |
|
use crate::traits::Command as CommandTrait; |
|
|
|
#[test] |
|
fn command_addr() { |
|
assert_eq!(Command::PANEL_SETTING.address(), 0x00); |
|
assert_eq!(Command::DISPLAY_REFRESH.address(), 0x12); |
|
} |
|
}
|
|
|