HiPi

 view release on metacpan or  search on metacpan

lib/HiPi/Interface/EPaper/TypeB.pm  view on Meta::CPAN

use Carp;

__PACKAGE__->create_accessors( qw(
    power_setting_bytes
    booster_soft_start_bytes
    panel_setting_bytes
    vcom_and_data_byte
    pll_control_bytes
    tcon_resolution_bytes
    vcm_dc_setting_bytes
    vcom_and_data_shutdown
) );

our $VERSION ='0.81';

use constant {
    PANEL_SETTING                              => 0x00,
    POWER_SETTING                              => 0x01,
    POWER_OFF                                  => 0x02,
    POWER_OFF_SEQUENCE_SETTING                 => 0x03,
    POWER_ON                                   => 0x04,
    POWER_ON_MEASURE                           => 0x05,
    BOOSTER_SOFT_START                         => 0x06,
    DEEP_SLEEP                                 => 0x07,
    DATA_START_TRANSMISSION_1                  => 0x10,
    DATA_STOP                                  => 0x11,
    DISPLAY_REFRESH                            => 0x12,
    DATA_START_TRANSMISSION_2                  => 0x13,
    PLL_CONTROL                                => 0x30,
    TEMPERATURE_SENSOR_COMMAND                 => 0x40,
    TEMPERATURE_SENSOR_CALIBRATION             => 0x41,
    TEMPERATURE_SENSOR_WRITE                   => 0x42,
    TEMPERATURE_SENSOR_READ                    => 0x43,
    VCOM_AND_DATA_INTERVAL_SETTING             => 0x50,
    LOW_POWER_DETECTION                        => 0x51,
    TCON_SETTING                               => 0x60,
    TCON_RESOLUTION                            => 0x61,
    SOURCE_AND_GATE_START_SETTING              => 0x62,
    GET_STATUS                                 => 0x71,
    AUTO_MEASURE_VCOM                          => 0x80,
    VCOM_VALUE                                 => 0x81,
    VCM_DC_SETTING_REGISTER                    => 0x82,
    PROGRAM_MODE                               => 0xA0,
    ACTIVE_PROGRAM                             => 0xA1,
    READ_OTP_DATA                              => 0xA2,
    
    HIPI_BORDER_DDXCDI_MASK  => 0x3F,
    HIPI_BORDER_BLACK        => 0x00,
    HIPI_BORDER_WHITE        => 0x40,
    HIPI_BORDER_COLOUR       => 0x80,
    HIPI_BORDER_FLOAT        => 0xC0,
    
};

sub _create {
    my( $class, %params ) = @_;
    
    # Default pins for WaveShare 'HAT' modules
    # reset_pin    => RPI_PIN_11, #  17 
    # dc_pin       => RPI_PIN_22, #  25
    # busy_pin     => RPI_PIN_18, #  24
    
    $params{reset_pin} //= RPI_PIN_11;
    $params{dc_pin}    //= RPI_PIN_22;
    $params{busy_pin}  //= RPI_PIN_18;
    
    my $self = $class->SUPER::_create( %params );
    return $self;
}

sub set_lut_bw {
    my $self = shift;
    my $lut_commands = {
        lut_vcom0 => 0x20,
        lut_w     => 0x21,
        lut_b     => 0x22,
        lut_g1    => 0x23,
        lut_g2    => 0x24,
    };
    
    for my $lut( qw( lut_vcom0 lut_w lut_b lut_g1 lut_g2 ) ) {
        $self->_send_command_if_data( $lut_commands->{$lut}, $self->$lut );
    }
    
    return;
}

sub set_lut_colour {
    my $self = shift;
    my $lut_commands = {
        lut_vcom1 => 0x25,
        lut_red0  => 0x26,
        lut_red1  => 0x27,
    };
    
    for my $lut( qw( lut_vcom1 lut_red0 lut_red1 ) ) {
        $self->_send_command_if_data( $lut_commands->{$lut}, $self->$lut );
    }
    
    return;
}

sub display_sleep {
    my $self = shift;
    return if $self->_in_deep_sleep();
    $self->wait_for_idle();
    $self->send_command(VCOM_AND_DATA_INTERVAL_SETTING, $self->vcom_and_data_shutdown);
    $self->send_command(VCM_DC_SETTING_REGISTER, 0x00);          # to solve Vcom drop
    $self->send_command(POWER_SETTING, 0x02, 0x00, 0x00, 0x00);  # power setting - gate switch to external
    $self->wait_for_idle();
    $self->send_command(POWER_OFF);
    $self->_in_deep_sleep(1);
    return;
}

sub display_wake {
    my $self = shift;
    $self->display_reset;
    return;
}

sub display_reset {
    my $self = shift;
    
    $self->reset();



( run in 1.005 second using v1.01-cache-2.11-cpan-39bf76dae61 )