App-EventStreamr
view release on metacpan or search on metacpan
lib/App/EventStreamr/Devices.pm view on Meta::CPAN
package App::EventStreamr::Devices;
use Moo; # libmoo-perl
use Cwd 'realpath';
use File::Slurp 'read_file'; #libfile-slurp-perl
use Hash::Merge::Simple; # libhash-merge-simple-perl
use Data::Dumper;
# ABSTRACT: Devices Methods
our $VERSION = '0.5'; # VERSION: Generated by DZP::OurPkg:Version
# TODO: Needs a cleanup!
sub all {
my $self = shift;
my $v4l = v4l();
my $dv = dv();
my $alsa = alsa();
@{$self->{devices}{v4l}{all}} = ();
@{$self->{devices}{dv}{all}} = ();
@{$self->{devices}{alsa}{all}} = ();
if ($v4l) { $self->{devices}{v4l} = $v4l; }
if ($dv) { $self->{devices}{dv} = $dv; }
if ($alsa) { $self->{devices}{alsa} = $alsa; }
if ($v4l || $dv || $alsa) {
$self->{devices}{all} = Hash::Merge::Simple->merge($v4l,$dv,$alsa);
@{$self->{devices}{array}} = (@{$self->{devices}{v4l}{all}}, @{$self->{devices}{dv}{all}},@{$self->{devices}{alsa}{all}});
} else {
$self->{devices}{all} = undef;
@{$self->{devices}{array}} = [];
}
return $self->{devices};
}
sub v4l {
my @v4ldevices = glob "/dev/video*";
my $v4l_devices;
foreach my $device (@v4ldevices) {
$device =~ m/\/dev\/(?<index>.+)/;
my $index = $+{index};
$v4l_devices->{$index}{device} = $device;
$v4l_devices->{$index}{name} = get_v4l_name($index);
$v4l_devices->{$index}{type} = "V4L";
$v4l_devices->{$index}{id} = $index;
push (@{$v4l_devices->{all}}, $v4l_devices->{$index});
}
return $v4l_devices;
}
sub dv {
my @dvs = glob "/sys/bus/firewire/devices/*";
my $dv_devices;
foreach my $dv (@dvs) {
if (-e "$dv/vendor") {
my $vendor_name = read_file("$dv/vendor");
$vendor_name = read_file("$dv/vendor_name") if ( -e "$dv/vendor_name" );
chomp $vendor_name;
$vendor_name = "Canopus" if ( $vendor_name eq "0x002011" );
unless ($vendor_name eq "Linux Firewire") {
my $guid = read_file("$dv/guid");
my $model = "unknown";
( run in 0.732 second using v1.01-cache-2.11-cpan-39bf76dae61 )