diff --git a/src/main/java/ev3dev/hardware/display/BitFramebuffer.java b/src/main/java/ev3dev/hardware/display/BitFramebuffer.java deleted file mode 100644 index fff4b6aa..00000000 --- a/src/main/java/ev3dev/hardware/display/BitFramebuffer.java +++ /dev/null @@ -1,68 +0,0 @@ -package ev3dev.hardware.display; - -import com.sun.jna.LastErrorException; -import ev3dev.utils.io.NativeFramebuffer; -import lombok.extern.slf4j.Slf4j; - -import java.awt.image.BufferedImage; - -import static ev3dev.utils.io.NativeConstants.FB_TYPE_PACKED_PIXELS; -import static ev3dev.utils.io.NativeConstants.FB_VISUAL_MONO01; -import static ev3dev.utils.io.NativeConstants.FB_VISUAL_MONO10; - -/** - * Linux black-and-white 1bpp framebuffer - * - * @since 2.4.7 - */ -@Slf4j -public class BitFramebuffer extends LinuxFramebuffer { - - /** - * Create and initialize new Linux 1bpp framebuffer. - * - * @param fb The framebuffer device (e.g. /dev/fb0) - * @param disp Display manager (e.g. /dev/tty) - */ - public BitFramebuffer(NativeFramebuffer fb, DisplayInterface disp) - throws LastErrorException, IllegalArgumentException { - - super(fb, disp); - - if (getFixedInfo().type != FB_TYPE_PACKED_PIXELS) { - try { - close(); - } catch (LastErrorException e) { - throw new RuntimeException("Cannot close framebuffer", e); - } - LOGGER.debug("Framebuffer uses non-packed pixels"); - throw new IllegalArgumentException("Only framebuffers with packed pixels are supported"); - } - // probably duplicated, but this way we are sure - boolean nonMono = getFixedInfo().visual != FB_VISUAL_MONO10 && getFixedInfo().visual != FB_VISUAL_MONO01; - boolean non1bpp = getVariableInfo().bits_per_pixel != 1; - if (nonMono || non1bpp) { - try { - close(); - } catch (LastErrorException e) { - throw new RuntimeException("Cannot close framebuffer", e); - } - LOGGER.debug("Framebuffer is not 1bpp mono"); - throw new IllegalArgumentException("Only framebuffers with 1bpp BW are supported"); - } - // taking ownership - initializeMemory(); - setDeviceClose(true); - } - - @Override - public BufferedImage createCompatibleBuffer(int width, int height) { - int stride = (width + 7) / 8; - return createCompatibleBuffer(width, height, stride, new byte[stride * height]); - } - - @Override - public BufferedImage createCompatibleBuffer(int width, int height, int stride, byte[] backed) { - return ImageUtils.createBWImage(width, height, stride, getFixedInfo().visual == FB_VISUAL_MONO01, backed); - } -} diff --git a/src/main/java/ev3dev/hardware/display/BitFramebufferProvider.java b/src/main/java/ev3dev/hardware/display/BitFramebufferProvider.java deleted file mode 100644 index 5d47fd8b..00000000 --- a/src/main/java/ev3dev/hardware/display/BitFramebufferProvider.java +++ /dev/null @@ -1,18 +0,0 @@ -package ev3dev.hardware.display; - -import com.sun.jna.LastErrorException; -import ev3dev.hardware.display.spi.FramebufferProvider; -import ev3dev.utils.io.NativeFramebuffer; - -/** - * Creates new Linux BW framebuffer. - */ -public class BitFramebufferProvider implements FramebufferProvider { - - @Override - public JavaFramebuffer createFramebuffer(NativeFramebuffer fb, DisplayInterface disp) - throws LastErrorException, IllegalArgumentException { - - return new BitFramebuffer(fb, disp); - } -} diff --git a/src/main/java/ev3dev/hardware/display/DisplayInterface.java b/src/main/java/ev3dev/hardware/display/DisplayInterface.java index 84f477f8..a6546733 100644 --- a/src/main/java/ev3dev/hardware/display/DisplayInterface.java +++ b/src/main/java/ev3dev/hardware/display/DisplayInterface.java @@ -1,8 +1,6 @@ package ev3dev.hardware.display; import com.sun.jna.LastErrorException; -import ev3dev.hardware.display.spi.AllImplFailedException; -import ev3dev.hardware.display.spi.FramebufferProvider; import ev3dev.utils.io.NativeFramebuffer; import lombok.NonNull; @@ -82,11 +80,7 @@ protected void closeFramebuffer() { * @param enable Whether to enable framebuffer flushing from the beginning. */ protected void initializeFramebuffer(@NonNull NativeFramebuffer backend, boolean enable) { - try { - fbInstance = FramebufferProvider.load(backend, this); - } catch (AllImplFailedException e) { - throw new RuntimeException("System framebuffer opening failed", e); - } + fbInstance = new RGBFramebuffer(backend, this); fbInstance.setFlushEnabled(enable); fbInstance.clear(); fbInstance.storeData(); diff --git a/src/main/java/ev3dev/hardware/display/RGBFramebufferProvider.java b/src/main/java/ev3dev/hardware/display/RGBFramebufferProvider.java deleted file mode 100644 index 95d92b53..00000000 --- a/src/main/java/ev3dev/hardware/display/RGBFramebufferProvider.java +++ /dev/null @@ -1,18 +0,0 @@ -package ev3dev.hardware.display; - -import com.sun.jna.LastErrorException; -import ev3dev.hardware.display.spi.FramebufferProvider; -import ev3dev.utils.io.NativeFramebuffer; -import lombok.NonNull; - -/** - * Creates new Linux RGB framebuffer. - */ -public class RGBFramebufferProvider implements FramebufferProvider { - - @Override - public JavaFramebuffer createFramebuffer(@NonNull NativeFramebuffer fb, DisplayInterface disp) - throws LastErrorException, IllegalArgumentException { - return new RGBFramebuffer(fb, disp); - } -} diff --git a/src/main/java/ev3dev/hardware/display/spi/AllImplFailedException.java b/src/main/java/ev3dev/hardware/display/spi/AllImplFailedException.java deleted file mode 100644 index 91627c72..00000000 --- a/src/main/java/ev3dev/hardware/display/spi/AllImplFailedException.java +++ /dev/null @@ -1,26 +0,0 @@ -package ev3dev.hardware.display.spi; - -/** - * Situation when SPI is to be open, but none of - * the available implementations worked. - * - * @author Jakub Vaněk - * @since 2.4.7 - */ -public class AllImplFailedException extends RuntimeException { - /** - * Initialize new exception. - */ - public AllImplFailedException() { - super(); - } - - /** - * Initialize new exception with message. - * - * @param message Message detailing the problem. - */ - public AllImplFailedException(String message) { - super(message); - } -} diff --git a/src/main/java/ev3dev/hardware/display/spi/FramebufferProvider.java b/src/main/java/ev3dev/hardware/display/spi/FramebufferProvider.java deleted file mode 100644 index e2225d3b..00000000 --- a/src/main/java/ev3dev/hardware/display/spi/FramebufferProvider.java +++ /dev/null @@ -1,69 +0,0 @@ -package ev3dev.hardware.display.spi; - -import com.sun.jna.LastErrorException; -import ev3dev.hardware.display.DisplayInterface; -import ev3dev.hardware.display.JavaFramebuffer; -import ev3dev.utils.io.NativeFramebuffer; -import lombok.NonNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; -import java.nio.charset.StandardCharsets; -import java.util.ServiceLoader; - -/** - * Framebuffer factory service provider - * - * @author Jakub Vaněk - * @since 2.4.7 - */ -public interface FramebufferProvider { - - /** - * Initialize system framebuffer - * - * @param fb Framebuffer device. - * @return Initialized framebuffer for the specified path. - * @throws RuntimeException if no suitable framebuffer is found - */ - static JavaFramebuffer load(@NonNull NativeFramebuffer fb, DisplayInterface disp) throws AllImplFailedException { - - final Logger LOGGER = LoggerFactory.getLogger(FramebufferProvider.class); - - LOGGER.debug("Loading framebuffer"); - ServiceLoader loader = ServiceLoader.load(FramebufferProvider.class); - for (FramebufferProvider provider : loader) { - try { - JavaFramebuffer ok = provider.createFramebuffer(fb, disp); - LOGGER.debug("Framebuffer '{}' is compatible", provider.getClass().getSimpleName()); - return ok; - } catch (IllegalArgumentException ex) { - LOGGER.debug("Framebuffer '{}' is not compatible", provider.getClass().getSimpleName()); - } catch (LastErrorException e) { - LOGGER.warn("Framebuffer '{}' threw IOException", provider.getClass().getSimpleName()); - LOGGER.warn("Message: {}", e.getLocalizedMessage()); - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - try (PrintStream chos = new PrintStream(bos)) { - e.printStackTrace(chos); - } - LOGGER.warn(new String(bos.toByteArray(), StandardCharsets.UTF_8)); - } - } - LOGGER.error("All framebuffer implementations failed"); - throw new AllImplFailedException("No suitable framebuffer found"); - } - - /** - * Create and initialize a new framebuffer. - * - * @param fb The framebuffer device (e.g. /dev/fb0) - * @param disp Display manager (e.g. /dev/tty) - * @throws IllegalArgumentException When this framebuffer is not compatible with this device. - * @throws LastErrorException When there was an error accessing the device. - */ - JavaFramebuffer createFramebuffer(@NonNull NativeFramebuffer fb, DisplayInterface disp) - throws LastErrorException, IllegalArgumentException; - -} diff --git a/src/main/java/ev3dev/hardware/display/spi/package-info.java b/src/main/java/ev3dev/hardware/display/spi/package-info.java deleted file mode 100644 index 04d1adb3..00000000 --- a/src/main/java/ev3dev/hardware/display/spi/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Framebuffer service provider interface package - */ -package ev3dev.hardware.display.spi; \ No newline at end of file diff --git a/src/main/resources/META-INF/services/ev3dev.hardware.display.spi.FramebufferProvider b/src/main/resources/META-INF/services/ev3dev.hardware.display.spi.FramebufferProvider deleted file mode 100644 index ae673c25..00000000 --- a/src/main/resources/META-INF/services/ev3dev.hardware.display.spi.FramebufferProvider +++ /dev/null @@ -1,2 +0,0 @@ -ev3dev.hardware.display.BitFramebufferProvider -ev3dev.hardware.display.RGBFramebufferProvider \ No newline at end of file diff --git a/src/test/java/ev3dev/hardware/display/BitFramebufferTest.java b/src/test/java/ev3dev/hardware/display/BitFramebufferTest.java deleted file mode 100644 index 7299d61a..00000000 --- a/src/test/java/ev3dev/hardware/display/BitFramebufferTest.java +++ /dev/null @@ -1,88 +0,0 @@ -package ev3dev.hardware.display; - -import ev3dev.utils.io.NativeFramebuffer; -import fake_ev3dev.ev3dev.utils.io.CountingFile; -import fake_ev3dev.ev3dev.utils.io.EmulatedFramebufferBuilder; -import fake_ev3dev.ev3dev.utils.io.EmulatedLibc; -import org.junit.Before; -import org.junit.Test; - -import java.io.IOException; - -public class BitFramebufferTest extends BaseFramebufferTest { - private static final int WIDTH = 178; - private static final int HEIGHT = 128; - private static final int BPP = 1; - private static final int BPP_BAD = 32; - private static final int STRIDE = (WIDTH * BPP + 7) / 8; - private static final int STRIDE_BAD = (WIDTH * BPP_BAD + 7) / 8; - - private NativeFramebuffer device; - private JavaFramebuffer adapter; - - @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 - public void DoTestAdapter() throws IOException { - super.TestAdapter(adapter, WIDTH, HEIGHT, STRIDE); - } - - @Test - public void DoTestDraw() throws IOException { - super.TestDraw(adapter); - } - - @Test - public void DoTestDrawBan() throws IOException { - super.TestDrawBan(adapter); - } - - @Test - public void DoTestDrawDeviceClosed() throws IOException { - device.close(); - super.TestDraw(adapter); - } - - @Test(expected = NullPointerException.class) - public void DoTestDrawAdapterClosed() throws IOException { - adapter.close(); - super.TestDraw(adapter); - } - - @Test - public void DoTestClean() throws IOException { - super.TestClean(adapter); - } - - @Test - public void DoTestRestore() throws IOException { - super.TestRestore(adapter); - } - - @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(); - } -}