HiPi
view release on metacpan or search on metacpan
lib/HiPi/Interface/IS31FL3730.pm view on Meta::CPAN
devicename => ( $pi->board_type == RPI_BOARD_TYPE_1 ) ? '/dev/i2c-0' : '/dev/i2c-1',
address => 0x60,
device => undef,
backend => 'smbus',
);
# get user params
foreach my $key( keys (%userparams) ) {
$params{$key} = $userparams{$key};
}
unless( defined($params{device}) ) {
if ( $params{backend} eq 'bcm2835' ) {
require HiPi::BCM2835::I2C;
$params{device} = HiPi::BCM2835::I2C->new(
address => $params{address},
peripheral => ( $params{devicename} eq '/dev/i2c-0' ) ? HiPi::BCM2835::I2C::BB_I2C_PERI_0() : HiPi::BCM2835::I2C::BB_I2C_PERI_1(),
);
} else {
require HiPi::Device::I2C;
$params{device} = HiPi::Device::I2C->new(
devicename => $params{devicename},
address => $params{address},
busmode => $params{backend},
);
}
}
my $self = $class->SUPER::new(%params);
return $self;
}
sub configure {
my($self, $mask ) = @_;
$self->send_command( REG_CONFIG, $mask );
}
sub matrix_1_data {
my($self, @data ) = @_;
$self->send_command( REG_MATRIX_1, @data );
}
sub matrix_2_data {
my($self, @data ) = @_;
$self->send_command( REG_MATRIX_2, @data );
}
sub lighting_effect {
my($self, $mask) = @_;
$self->send_command( REG_LIGHTING, $mask );
}
sub brightness {
my($self, $value) = @_;
$value //= 127; # undefined get default 127
my $mask = ( $value > 127 ) ? 0x80 : $value & 0x7F;
$self->send_command( REG_PWM, $mask );
}
sub update {
my $self = shift;
$self->send_command( REG_UPD_COL, 0x00 );
}
sub reset {
my $self = shift;
$self->send_command( REG_RESET, 0x00 );
}
sub send_command {
my($self, $register, @data ) = @_;
# Timing issue - pullup values if not mounted as pHAT ?
# Clock too high on RPi 3 ??
# Need to resolve - but for now catch and retry
my $continue = 10;
while( $continue ) {
try {
$self->device->bus_write( $register, @data );
$continue = 0;
} catch {
$continue --;
if( $continue <= 0 ) {
croak sprintf('IO Error writing to register 0x%X', $register);
}
$self->delay(5);
};
}
}
1;
__END__
( run in 0.892 second using v1.01-cache-2.11-cpan-39bf76dae61 )