int LedDeviceTinkerforge::write(const std::vector<ColorRgb> &ledValues) { unsigned nrLedValues = ledValues.size(); if (nrLedValues > MAX_NUM_LEDS) { std::cerr << "Invalid attempt to write led values. Not more than " << MAX_NUM_LEDS << " leds are allowed." << std::endl; return -1; } if (_colorChannelSize < nrLedValues) { _redChannel.resize(nrLedValues, uint8_t(0)); _greenChannel.resize(nrLedValues, uint8_t(0)); _blueChannel.resize(nrLedValues, uint8_t(0)); } _colorChannelSize = nrLedValues; auto redIt = _redChannel.begin(); auto greenIt = _greenChannel.begin(); auto blueIt = _blueChannel.begin(); for (const ColorRgb &ledValue : ledValues) { *redIt = ledValue.red; ++redIt; *greenIt = ledValue.green; ++greenIt; *blueIt = ledValue.blue; ++blueIt; } return transferLedData(_ledStrip, 0, _colorChannelSize, _redChannel.data(), _greenChannel.data(), _blueChannel.data()); }
int LedDeviceTinkerforge::switchOff() { std::fill(_redChannel.begin(), _redChannel.end(), 0); std::fill(_greenChannel.begin(), _greenChannel.end(), 0); std::fill(_blueChannel.begin(), _blueChannel.end(), 0); return transferLedData(_ledStrip, 0, _colorChannelSize, _redChannel.data(), _greenChannel.data(), _blueChannel.data()); }
int LedDeviceTinkerforge::write(const std::vector<ColorRgb> &ledValues) { auto redIt = _redChannel.begin(); auto greenIt = _greenChannel.begin(); auto blueIt = _blueChannel.begin(); for (const ColorRgb &ledValue : ledValues) { *redIt = ledValue.red; ++redIt; *greenIt = ledValue.green; ++greenIt; *blueIt = ledValue.blue; ++blueIt; } return transferLedData(_ledStrip, 0, _colorChannelSize, _redChannel.data(), _greenChannel.data(), _blueChannel.data()); }