fbfd = new NativeFramebuffer("/dev/fb0", libc); int fbn = fbfd.mapConsoleToFramebuffer(activeVT); LOGGER.trace("map vt{} -> fb{}", activeVT, fbn); if (fbn != 0) { LOGGER.trace("Redirected to FB {}", fbn); fbfd.close(); fbfd = new NativeFramebuffer(fbPath, libc); } finally { if (fbfd != null) { fbfd.close();
/** * Create and initialize new Linux-based Java2D framebuffer. * * @param fb Framebuffer device (e.g. /dev/fb0) * @param disp Display manager (e.g. /dev/tty) */ public LinuxFramebuffer(@NonNull NativeFramebuffer fb, DisplayInterface disp) throws LastErrorException { setDeviceClose(false); device = fb; display = disp; fixinfo = device.getFixedScreenInfo(); varinfo = device.getVariableScreenInfo(); varinfo.xres_virtual = varinfo.xres; varinfo.yres_virtual = varinfo.yres; varinfo.xoffset = 0; varinfo.yoffset = 0; device.setVariableScreenInfo(varinfo); videomem = null; backup = new byte[(int) getBufferSize()]; blank = null; flushEnabled = true; LOGGER.debug("Opened LinuxFB, mode {}x{}x{}bpp", varinfo.xres, varinfo.yres, varinfo.bits_per_pixel); }
protected void initializeMemory() throws LastErrorException { videomem = device.mmap(getBufferSize()); }
@Override public void close() throws LastErrorException { LOGGER.trace("Closing LinuxFB"); if (videomem != null) { device.munmap(videomem, getBufferSize()); } if (closeDevice && device != null) { device.close(); } // free objects if (display != null) { display.releaseFramebuffer(this); } display = null; blank = null; device = null; backup = null; fixinfo = null; varinfo = null; }
@Override public synchronized JavaFramebuffer openFramebuffer() { if (fbInstance == null) { LOGGER.debug("Initialing framebuffer in fake console"); initializeFramebuffer(new NativeFramebuffer("/dev/fb0", libc), true); } return fbInstance; } }
@Test public void DoTestDrawDeviceClosed() throws IOException { device.close(); super.TestDraw(adapter); }
@Override public void flushScreen(@NonNull BufferedImage compatible) { if (flushEnabled) { LOGGER.trace("Drawing frame on framebuffer"); videomem.write(0, ImageUtils.getImageBytes(compatible), 0, (int) getBufferSize()); device.msync(videomem, getBufferSize(), NativeConstants.MS_SYNC); } else { LOGGER.trace("Not drawing frame on framebuffer"); } }
/** * <p>Get the framebuffer for the system display.</p> * * <p>The framebuffer is initialized only once, later calls * return references to the same instance.</p> * * @return Java framebuffer compatible with the system display. * @throws RuntimeException when switch to graphics mode or the framebuffer initialization fails. */ public synchronized JavaFramebuffer openFramebuffer() { if (fbInstance == null) { LOGGER.debug("Initialing framebuffer in system console"); switchToGraphicsMode(); initializeFramebuffer(new NativeFramebuffer(fbPath, libc), true); } return fbInstance; } }
@Test public void DoTestDrawDeviceClosed() throws IOException { device.close(); super.TestDraw(adapter); }
@Override public void restoreData() { LOGGER.trace("Retoring framebuffer snapshot"); videomem.write(0, backup, 0, (int) getBufferSize()); device.msync(videomem, getBufferSize(), NativeConstants.MS_SYNC); }
@Before public void reset() { eLibc = new EmulatedLibc(); eFb = new EmulatedFramebufferBuilder() .setXRGB() .setScreenSize(WIDTH, HEIGHT, STRIDE) .setNumber(0).addConsoleFramebufferMap(0, 0) .build(); eCtr = new CountingFile(eFb); eLibc.install("/dev/fb0", eCtr); device = new NativeFramebuffer("/dev/fb0", eLibc); adapter = new RGBFramebuffer(device, null); }
@Before public void reset() { eLibc = new EmulatedLibc(); eFb = new EmulatedFramebufferBuilder() .setBW(true) .setScreenSize(WIDTH, HEIGHT, STRIDE) .setNumber(0).addConsoleFramebufferMap(0, 0) .build(); eCtr = new CountingFile(eFb); eLibc.install("/dev/fb0", eCtr); device = new NativeFramebuffer("/dev/fb0", eLibc); adapter = new BitFramebuffer(device, null); }
@Test(expected = IllegalArgumentException.class) public void DoTestInvalidType() throws IOException { eLibc.remove("/dev/fb0"); eFb = new EmulatedFramebufferBuilder() .setXRGB() .setScreenSize(WIDTH, HEIGHT, STRIDE_BAD) .setNumber(0).addConsoleFramebufferMap(0, 0) .build(); eCtr = new CountingFile(eFb); eLibc.install("/dev/fb0", eCtr); device = new NativeFramebuffer("/dev/fb0", eLibc); adapter = new BitFramebuffer(device, null); adapter.close(); } }
@Test(expected = IllegalArgumentException.class) public void DoTestInvalidType() throws IOException { eLibc.remove("/dev/fb0"); eFb = new EmulatedFramebufferBuilder() .setBW(true) .setScreenSize(WIDTH, HEIGHT, STRIDE_BAD) .setNumber(0).addConsoleFramebufferMap(0, 0) .build(); eCtr = new CountingFile(eFb); eLibc.install("/dev/fb0", eCtr); device = new NativeFramebuffer("/dev/fb0", eLibc); adapter = new RGBFramebuffer(device, null); adapter.close(); } }