/**
   * @param outputDeviceEnum
   * @param ph
   * @param controller
   * @param bpp
   */
  public AbstractDmxDevice(
      OutputDeviceEnum outputDeviceEnum,
      ApplicationConfigurationHelper ph,
      PixelControllerOutput controller,
      int bpp) {
    super(outputDeviceEnum, ph, controller, bpp);

    this.colorFormat = ph.getColorFormat();
    this.panelOrder = ph.getPanelOrder();
    this.xResolution = ph.parseOutputXResolution();
    this.yResolution = ph.parseOutputYResolution();
    this.snakeCabeling = ph.isOutputSnakeCabeling();
    this.mapping = ph.getOutputMappingValues();

    this.initialized = false;
  }
  /**
   * init the Stealth devices.
   *
   * @param controller the controller
   * @param displayOptions the display options
   * @param colorFormat the color format
   */
  public StealthDevice(ApplicationConfigurationHelper ph, PixelControllerOutput controller) {
    super(OutputDeviceEnum.STEALTH, ph, controller, 5);

    this.displayOptions = ph.getStealthDevice();
    this.colorFormat = ph.getColorFormat();
    this.initialized = false;
    try {
      stealth = new Stealth(Collector.getInstance().getPapplet());
      this.initialized = stealth.ping();
      LOG.log(Level.INFO, "ping result: " + this.initialized);
    } catch (NoSerialPortFoundException e) {
      LOG.log(Level.WARNING, "failed to initialize serial port!");
    } catch (Throwable e) {
      // catch really ALL excetions here!
      LOG.log(Level.SEVERE, "\n\n\n\nSERIOUS ERROR, check your RXTX installation!", e);
      try {
        Thread.sleep(1000);
      } catch (InterruptedException e1) {
      }
    }
  }