/**
   *
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   *
   * @generated NOT
   */
  @Override
  public void setSelectedColor(HSBType color, DeviceOptions opts) {
    logger.debug("setSelectedColor called");
    // ColorMapping may be overridden by itemConfiguration
    char[] colorMapping = getColorMapping().toCharArray();
    String leds = null;

    // handle options
    if (opts != null) {
      if (opts.containsKey(COLOR_MAPPING)) {
        logger.debug("custom color mapping {} ", opts.getOption(COLOR_MAPPING));
        colorMapping = opts.getOption(COLOR_MAPPING).toCharArray();
      }
      if (opts.containsKey(LEDS)) {
        leds = opts.getOption(LEDS).trim();
        logger.debug("leds: {}", leds);
      }
    }
    if (leds == null || leds.length() == 0) {
      logger.error("\"leds\" option missing or empty, items configuration has to be fixed!");
      return;
    }

    // get the rgb values from HSBType
    Color rgbColor = color.toColor();
    short red = (short) rgbColor.getRed();
    short green = (short) rgbColor.getGreen();
    short blue = (short) rgbColor.getBlue();
    logger.debug("rgb is: {}:{}:{}", red, green, blue);

    // construct the values for the setRGBValues call
    HashMap<Character, short[]> colorMap = new HashMap<Character, short[]>(3);
    short[] reds = {red, red, red, red, red, red, red, red, red, red, red, red, red, red, red, red};
    short[] greens = {
      green, green, green, green, green, green, green, green, green, green, green, green, green,
      green, green, green
    };
    short[] blues = {
      blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue
    };
    colorMap.put('r', reds);
    colorMap.put('g', greens);
    colorMap.put('b', blues);
    LedList ledList = Tools.parseLedString(leds);

    try {
      if (ledList.hasLedRanges()) {
        Map<Integer, Short> ledRanges = ledList.getLedRanges();
        for (Integer led : ledRanges.keySet()) {
          tinkerforgeDevice.setRGBValues(
              led,
              ledRanges.get(led),
              colorMap.get(colorMapping[0]),
              colorMap.get(colorMapping[1]),
              colorMap.get(colorMapping[2]));
        }
      }
      if (ledList.hasLeds()) {
        for (Integer led : ledList.getLedNumbers()) {
          tinkerforgeDevice.setRGBValues(
              led,
              (short) 1,
              colorMap.get(colorMapping[0]),
              colorMap.get(colorMapping[1]),
              colorMap.get(colorMapping[2]));
        }
      }
      setColor(new HSBValue(color));
    } catch (TimeoutException e) {
      TinkerforgeErrorHandler.handleError(this, TinkerforgeErrorHandler.TF_TIMEOUT_EXCEPTION, e);
    } catch (NotConnectedException e) {
      TinkerforgeErrorHandler.handleError(
          this, TinkerforgeErrorHandler.TF_NOT_CONNECTION_EXCEPTION, e);
    }
  }
 /**
  *
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
  * @generated NOT
  */
 @Override
 public void enable() {
   logger.trace("enabling");
   int chipType = BrickletLEDStrip.CHIP_TYPE_WS2801;
   int frameDuration = 100;
   Long clockFrequency = null;
   tinkerforgeDevice = new BrickletLEDStrip(getUid(), getIpConnection());
   if (tfConfig != null) {
     if (tfConfig.eIsSet(tfConfig.eClass().getEStructuralFeature("chiptype"))) {
       String chipTypeString = tfConfig.getChiptype();
       if (chipTypeString.equalsIgnoreCase("ws2801")) {
         chipType = BrickletLEDStrip.CHIP_TYPE_WS2801;
       } else if (chipTypeString.equalsIgnoreCase("ws2811")) {
         chipType = BrickletLEDStrip.CHIP_TYPE_WS2811;
       } else if (chipTypeString.equalsIgnoreCase("ws2812")) {
         chipType = BrickletLEDStrip.CHIP_TYPE_WS2812;
       } else {
         logger.error("Unknown ChipType {}", chipTypeString);
         // TODO raise configuration error
       }
     }
     if (tfConfig.eIsSet(tfConfig.eClass().getEStructuralFeature("frameduration"))) {
       frameDuration = tfConfig.getFrameduration();
     }
     if (tfConfig.eIsSet(tfConfig.eClass().getEStructuralFeature("clockfrequency"))) {
       clockFrequency = tfConfig.getClockfrequency();
     }
     // config Handling for ColorMapping must be before adding the
     // subdevices because subdevices use the ColorMapping
     if (tfConfig.eIsSet(
         tfConfig
             .eClass()
             .getEStructuralFeature(ModelPackage.LED_STRIP_CONFIGURATION__COLOR_MAPPING))) {
       colorMapping = tfConfig.getColorMapping();
     }
     if (tfConfig.eIsSet(
         tfConfig
             .eClass()
             .getEStructuralFeature(ModelPackage.LED_STRIP_CONFIGURATION__SUB_DEVICES))) {
       String[] subdevices = tfConfig.getSubDevices().trim().split("\\s+");
       for (String subId : subdevices) {
         addSubdevice(subId);
       }
     }
   }
   logger.debug("chipType is {}", chipType);
   logger.debug("frameDuration is {}", frameDuration);
   logger.debug("colorMapping is {}", colorMapping);
   try {
     tinkerforgeDevice.setChipType(chipType);
     tinkerforgeDevice.setFrameDuration(frameDuration);
     if (clockFrequency != null) {
       logger.debug("clockFrequency is {}", clockFrequency);
       tinkerforgeDevice.setClockFrequency(clockFrequency);
     } else {
       logger.debug("clockFrequency is not set");
     }
   } catch (TimeoutException e) {
     TinkerforgeErrorHandler.handleError(this, TinkerforgeErrorHandler.TF_TIMEOUT_EXCEPTION, e);
   } catch (NotConnectedException e) {
     TinkerforgeErrorHandler.handleError(
         this, TinkerforgeErrorHandler.TF_NOT_CONNECTION_EXCEPTION, e);
   }
 }