#[derive(Clone, Copy)]
pub enum SegmentRemap {
Normal = 0xa0,
Remapped = 0xa1,
}
#[derive(Clone, Copy)]
pub enum ComOutputScanDirection {
Normal = 0xc0,
Remapped = 0xc8,
}
#[derive(Clone, Copy)]
pub enum NormalOrInverseDisplay {
Normal = 0xa6,
Inverse = 0xa7,
}
#[derive(Clone, Copy)]
pub enum ChargePump {
Disable = 0x10,
V7Point5 = 0x14,
V8Point5 = 0x94,
V9Point0 = 0x95,
}
#[derive(Clone, Copy)]
pub struct Ssd1315DisplayConfig {
pub display_clock_divide_ratio_and_oscillator_freq: u8,
pub multiplex_ratio: u8,
pub display_offset: u8,
pub display_start_line: u8,
pub segment_remap: SegmentRemap,
pub com_output_scan_direction: ComOutputScanDirection,
pub com_pins_hardware_config: u8,
pub contrast: u8,
pub precharge_period: u8,
pub v_comh_select_level: u8,
pub normal_or_inverse_display: NormalOrInverseDisplay,
pub charge_pump: ChargePump,
}
impl Ssd1315DisplayConfig {
pub fn new() -> Self {
Self::default()
}
pub fn preset_config() -> Self {
Self {
display_clock_divide_ratio_and_oscillator_freq: 0x90,
segment_remap: SegmentRemap::Remapped,
com_output_scan_direction: ComOutputScanDirection::Remapped,
contrast: 0xb0,
v_comh_select_level: 0x30,
..Default::default()
}
}
}
impl Default for Ssd1315DisplayConfig {
fn default() -> Self {
Self {
display_clock_divide_ratio_and_oscillator_freq: 0x80,
multiplex_ratio: 0x3f,
display_offset: 0x00,
display_start_line: 0x40,
segment_remap: SegmentRemap::Normal,
com_output_scan_direction: ComOutputScanDirection::Normal,
com_pins_hardware_config: 0x12,
contrast: 0x7f,
precharge_period: 0x22,
v_comh_select_level: 0x20,
normal_or_inverse_display: NormalOrInverseDisplay::Normal,
charge_pump: ChargePump::V7Point5,
}
}
}