/*---------------------------------------------------------*\ | RGBController_QMKOpenRGBRevD.h | | | | RGBController for OpenRGB QMK Keyboard Protocol | | Revision D | | | | Neneya 26 Dec 2021 | | | | This file is part of the OpenRGB project | | SPDX-License-Identifier: GPL-2.0-only | \*---------------------------------------------------------*/ #pragma once #include #include #include #include #include "RGBController.h" #include "QMKOpenRGBRevDController.h" #define NO_LED 0xFFFFFFFF typedef std::vector> VectorMatrix; class RGBController_QMKOpenRGBRevD : public RGBController { public: RGBController_QMKOpenRGBRevD(QMKOpenRGBRevDController* controller_ptr, bool save); ~RGBController_QMKOpenRGBRevD(); void SetupZones(); void ResizeZone(int zone, int new_size); void DeviceUpdateLEDs(); void UpdateZoneLEDs(int zone); void UpdateSingleLED(int led); void DeviceUpdateMode(); void DeviceSaveMode(); private: QMKOpenRGBRevDController* controller; std::vector flat_matrix_map; std::vector flat_underglow_map; void InitializeMode ( std::string name, unsigned int ¤t_mode, unsigned int flags, unsigned int color_mode, bool save ); unsigned int CalculateDivisor ( std::vector led_points, std::set rows, std::set columns ); void CountKeyTypes ( std::vector led_flags, unsigned int total_led_count, unsigned int& key_leds, unsigned int& underglow_leds ); void PlaceLEDsInMaps ( std::set unique_rows, std::set unique_cols, unsigned int divisor, std::vector led_points, std::vector led_flags, VectorMatrix& matrix_map_xl, VectorMatrix& underglow_map_xl ); VectorMatrix MakeEmptyMatrixMap ( std::size_t height, std::size_t width ); void CleanMatrixMaps ( VectorMatrix& matrix_map, VectorMatrix& underglow_map, unsigned int height, bool has_underglow ); std::vector FlattenMatrixMap ( VectorMatrix matrix_map ); };