Graphics-Framebuffer

 view release on metacpan or  search on metacpan

lib/Graphics/Framebuffer.pm  view on Meta::CPAN

                'Neomagic NM2380',
                'PXA3XX',    # 99
                '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
                'Savage 4',
                'Savage 3D',
                'Savage 3D MV',
                'Savage 2000',
                'Savage MX MV',
                'Savage MX',
                'Savage IX MV',
                'Savage IX',
                'Pro Savage PM',
                'Pro Savage KM',
                'S3 Twister P',
                'S3 Twister K',
                'Super Savage',
                'Pro Savage DDR',
                'Pro Savage DDRX',
            ],

            # Unfortunately, these are not IOCTLs.  Gee, that would be nice if they were.  Not Used
            'FBinfo_hwaccel_fillrect'  => 'L6',                        # dx(32),dy(32),width(32),height(32),color(32),rop(32)?
            'FBinfo_hwaccel_copyarea'  => 'L6',                        # dx(32),dy(32),width(32),height(32),sx(32),sy(32)
            'FBinfo_hwaccel_fillrect'  => 'L6',                        # dx(32),dy(32),width(32),height(32),color(32),rop(32)
            'FBinfo_hwaccel_imageblit' => 'L6CL',                      # dx(32),dy(32),width(32),height(32),fg_color(32),bg_color(32),depth(8),image pointer(32),color map pointer(32)
                                                                       # COLOR MAP:
                                                                       #   start(32),length(32),red(16),green(16),blue(16),alpha(16)
                                                                       # FLAGS
            'FBINFO_HWACCEL_NONE'      => FBINFO_HWACCEL_NONE,         # 0x0000,    # These come from "fb.h" in the kernel source.  Not Used
            'FBINFO_HWACCEL_COPYAREA'  => FBINFO_HWACCEL_COPYAREA,     # 0x0100,
            'FBINFO_HWACCEL_FILLRECT'  => FBINFO_HWACCEL_FILLRECT,     # 0x0200,
            'FBINFO_HWACCEL_IMAGEBLIT' => FBINFO_HWACCEL_IMAGEBLIT,    # 0x0400,
            'FBINFO_HWACCEL_ROTATE'    => FBINFO_HWACCEL_ROTATE,       # 0x0800,
            'FBINFO_HWACCEL_XPAN'      => FBINFO_HWACCEL_XPAN,         # 0x1000,
            'FBINFO_HWACCEL_YPAN'      => FBINFO_HWACCEL_YPAN,         # 0x2000,
            'FBINFO_HWACCEL_YWRAP'     => FBINFO_HWACCEL_YWRAP,        # 0x4000,
            'VT_GETSTATE'              => VT_GETSTATE,                 # 0x5603,
            'KDSETMODE'                => KDSETMODE,                   # 0x4B3A,

            ## Set up the Framebuffer driver "constants" defaults
            # Commands
            'FBIOPUT_VSCREENINFO' => FBIOPUT_VSCREENINFO,    # 0x4601,
            'FBIOGETCMAP'         => FBIOGETCMAP,            # 0x4604,
            'FBIOPUTCMAP'         => FBIOPUTCMAP,            # 0x4605,
            'FBIOPAN_DISPLAY'     => FBIOPAN_DISPLAY,        # 0x4606,
            'FBIO_CURSOR'         => FBIO_CURSOR,            # 0x4608,
            'FBIOGET_CON2FBMAP'   => FBIOGET_CON2FBMAP,      # 0x460F,
            'FBIOPUT_CON2FBMAP'   => FBIOPUT_CON2FBMAP,      # 0x4610,
            'FBIOBLANK'           => FBIOBLANK,              # 0x4611,
            'FBIOGET_VBLANK'      => FBIOGET_VBLANK,         # 0x4612,
            'FBIOGET_GLYPH'       => FBIOGET_GLYPH,          # 0x4615,
            'FBIOGET_HWCINFO'     => FBIOGET_HWCINFO,        # 0x4616,
            'FBIOPUT_MODEINFO'    => FBIOPUT_MODEINFO,       # 0x4617,
            'FBIOGET_DISPINFO'    => FBIOGET_DISPINFO,       # 0x4618,
        };
        $self = { %{$self}, %{$garbage} };
    } ## end if ($self->{'GARBAGE'})
    # In Graphics::Framebuffer::new
    $self->{'VBOX'} = (
        (-e '/sys/class/dmi/id/product_name' && do {
            local (@ARGV, $/) = '/sys/class/dmi/id/product_name';
            my $p = <>; defined $p && $p =~ /VirtualBox/i;
        }) || ($self->{'fscreeninfo'}->{'id'} =~ /vbox/i) || (`systemd-detect-virt 2>/dev/null` =~ /oracle/i)) ? 1 : 0;
    unless (defined($self->{'FB_DEVICE'})) {                 # We scan for all 32 possible devices at both possible locations
        if (-e '/dev/shm/gfb_screen') { # Is GFB running in X-Windows with the gfb_screen?  If so, we can use that framebuffer device instead of the real one.  This is a hack, but it works.
            $self->{'FB_DEVICE'} = '/dev/shm/gfb_screen'; # Detected the GFB viewer
        } else {
            foreach my $dev (0 .. 31) {
                foreach my $prefix (qw(/dev/fb /dev/fb/ /dev/graphics/fb)) {
                    if (-e "$prefix$dev") {
                        $self->{'FB_DEVICE'} = "$prefix$dev";
                        last;
                    }
                } ## end foreach my $prefix (qw(/dev/fb /dev/fb/ /dev/graphics/fb))
                last if (defined($self->{'FB_DEVICE'}));
            } ## end foreach my $dev (0 .. 31)
        }
    } ## end unless (defined($self->{'FB_DEVICE'...}))
    $self->{'CONSOLE'} = 1;
    eval {
        $self->{'CONSOLE'} = _slurp('/sys/class/tty/tty0/active');
        $self->{'CONSOLE'} =~ s/\D+//gs;
        $self->{'CONSOLE'} += 0;
        $self->{'THIS_CONSOLE'} = $self->{'CONSOLE'};
    };
    if (defined($self->{'FB_DEVICE'}) and (-e $self->{'FB_DEVICE'}) and open($self->{'FB'}, '+<', $self->{'FB_DEVICE'})) {    # Can we open the framebuffer device??
        binmode($self->{'FB'});                                                                                                          # We have to be in binary mode first
        select($self->{'FB'});
		$self->{'FB'}->autoflush;
        $| = 1;
        if ($self->{'ACCELERATED'}) {                                                                                                    # Pull in the C structure for the Framebuffer
            (                                                                                                                            # These need to be accurate to give accurate output
                $self->{'fscreeninfo'}->{'id'},
                $self->{'fscreeninfo'}->{'smem_start'},
                $self->{'fscreeninfo'}->{'smem_len'},
                $self->{'fscreeninfo'}->{'type'},
                $self->{'fscreeninfo'}->{'type_aux'},
                $self->{'fscreeninfo'}->{'visual'},
                $self->{'fscreeninfo'}->{'xpanstep'},
                $self->{'fscreeninfo'}->{'ypanstep'},
                $self->{'fscreeninfo'}->{'ywrapstep'},
                $self->{'fscreeninfo'}->{'line_length'},
                $self->{'fscreeninfo'}->{'mmio_start'},
                $self->{'fscreeninfo'}->{'mmio_len'},
                $self->{'fscreeninfo'}->{'accel'},

                $self->{'vscreeninfo'}->{'xres'},
                $self->{'vscreeninfo'}->{'yres'},
                $self->{'vscreeninfo'}->{'xres_virtual'},
                $self->{'vscreeninfo'}->{'yres_virtual'},
                $self->{'vscreeninfo'}->{'xoffset'},
                $self->{'vscreeninfo'}->{'yoffset'},
                $self->{'vscreeninfo'}->{'bits_per_pixel'},
                $self->{'vscreeninfo'}->{'grayscale'},
                $self->{'vscreeninfo'}->{'bitfields'}->{'red'}->{'offset'},
                $self->{'vscreeninfo'}->{'bitfields'}->{'red'}->{'length'},
                $self->{'vscreeninfo'}->{'bitfields'}->{'red'}->{'msb_right'},
                $self->{'vscreeninfo'}->{'bitfields'}->{'green'}->{'offset'},
                $self->{'vscreeninfo'}->{'bitfields'}->{'green'}->{'length'},
                $self->{'vscreeninfo'}->{'bitfields'}->{'green'}->{'msb_right'},
                $self->{'vscreeninfo'}->{'bitfields'}->{'blue'}->{'offset'},



( run in 0.565 second using v1.01-cache-2.11-cpan-80ec619307d )