/*---------------------------------------------------------*\
| RGBController_GenesisXenon200.h                           |
|                                                           |
|   RGBController for Genesis Xenon 200 mouse               |
|                                                           |
|   chrabonszcz                                    Jul 2023 |
|                                                           |
|   This file is part of the OpenRGB project                |
|   SPDX-License-Identifier: GPL-2.0-only                   |
\*---------------------------------------------------------*/

#pragma once

#include "GenesisXenon200Controller.h"
#include "RGBController.h"

#define GENESIS_XENON_200_MODE_STATIC         0x18
#define GENESIS_XENON_200_MODE_BREATHING      0x12
#define GENESIS_XENON_200_MODE_SPECTRUM_CYCLE 0x14
#define GENESIS_XENON_200_MODE_OFF            0x11

const unsigned char GENESIS_XENON_200_STATIC_BRIGHTESS_VALUES[]       {0x11, 0x51, 0xA1};
const unsigned char GENESIS_XENON_200_BREATHING_SPEED_VALUES[]        {0x51, 0x31, 0x11};
const unsigned char GENESIS_XENON_200_SPECTRUM_CYCLE_SPEED_VALUES[]   {0xC1, 0x81, 0x41};

class RGBController_GenesisXenon200 : public RGBController
{
public:
    RGBController_GenesisXenon200(GenesisXenon200Controller* controller_ptr);
    ~RGBController_GenesisXenon200();

    void            SetupZones();

    void            ResizeZone(int zone, int new_size);

    void            DeviceUpdateLEDs();
    void            UpdateZoneLEDs(int zone);
    void            UpdateSingleLED(int led);

    void            DeviceUpdateMode();
    void            DeviceSaveMode();

    void            SetCustomMode();

private:
    GenesisXenon200Controller* controller;
};
