HiPi
view release on metacpan or search on metacpan
lib/HiPi/Interface/HobbyTronicsBackpackV2.pm view on Meta::CPAN
my($self, $text) = @_;
$self->send_htv2_command( HTV2_CMD_PRINT, $text );
}
sub send_command {
my($self, $command) = @_;
$self->send_htv2_command( HTV2_CMD_HD44780_CMD, $command );
}
sub send_htv2_command {
my($self, $command, @params ) = @_;
if( $self->backend eq 'serialrx') {
my $buffer = chr($command);
if( $command == HTV2_CMD_PRINT ) {
# one param - a text string
$buffer .= $params[0];
} else {
# all other cases - params are ASCII char codes
for my $p ( @params ) {
$buffer .= chr($p);
}
}
return $self->device->write( $buffer . HTV2_END_SERIALRX_COMMAND );
} else {
my @i2cvals = ( $command );
if( $command == HTV2_CMD_PRINT ) {
# one param - a text string
my @strvals = split(//, $params[0]);
for my $p ( @strvals ) {
push @i2cvals, ord($p);
}
} else {
# all other cases - params are ASCII char codes
push(@i2cvals, @params) if @params;
}
return $self->device->bus_write( @i2cvals );
}
}
sub backlight {
my($self, $brightness) = @_;
$brightness = 0 if $brightness < 0;
$brightness = 100 if $brightness > 100;
# $brightness = 0 to 100
# we translate to 0 - 250
return unless $self->backlightcontrol;
my $bset;
if($brightness < 0) {
$bset = 0;
} elsif( $brightness >= 250 ) {
$bset = 250;
} else {
$bset = int( 2.5 * $brightness);
}
$self->send_htv2_command( HTV2_CMD_BACKLIGHT, $bset );
}
sub update_baudrate {
my $self = shift;
return unless $self->backend eq 'serialrx';
my $baud = $self->device->baudrate;
my $bflag;
if ($baud == 2400) {
$bflag = HTV2_BAUD_2400;
} elsif ($baud == 4800) {
$bflag = HTV2_BAUD_4800;
} elsif ($baud == 9600) {
$bflag = HTV2_BAUD_9600;
} elsif ($baud == 14400) {
$bflag = HTV2_BAUD_14400;
} elsif ($baud == 19200) {
$bflag = HTV2_BAUD_19200;
} elsif ($baud == 28800) {
$bflag = HTV2_BAUD_28800;
} elsif ($baud == 57600) {
$bflag = HTV2_BAUD_57600;
} elsif ($baud == 115200) {
$bflag = HTV2_BAUD_115200;
} else {
croak(qq(The baudrate of the serial device is not supported by the LCD controller));
}
$self->send_htv2_command( HTV2_CMD_BAUD_RATE, $bflag );
carp('The HobbyTronicsBackpackV2 device must be powered off and on after changing baudrate.');
}
sub update_geometry {
my $self = shift;
$self->send_htv2_command( HTV2_CMD_LCD_TYPE, $self->lines, $self->width );
}
sub change_i2c_address {
my( $self, $newaddress) = @_;
if( $self->backend eq 'serialrx') {
carp('The HobbyTronicsBackpackV2 device is in Serial RX mode. You cannot change the i2c address.');
return;
}
if($newaddress < 1 || $newaddress > 127) {
croak('The i2c address must be in the range 1 - 127 ( 0x01 - 0x7F )');
}
$self->send_htv2_command( HTV2_CMD_I2C_ADDRESS, $newaddress );
carp('The HobbyTronicsBackpackV2 device must be powered off and on after changing i2c address.');
}
1;
__END__
( run in 0.816 second using v1.01-cache-2.11-cpan-39bf76dae61 )