syntax = "proto3";
package aimdk.protocol;

import public "aimdk/protocol/common/rpc.proto";

/**
 * @brief 补光灯状态
 */
message FillLightState {
    // 档位：0-10
    uint32 level = 1;
}

/**
 * @brief 补光灯控制指令
 */
message FillLightCommand {
    // 档位：0-10
    uint32 level = 1;
}

/**
 * @brief RGB灯效，0:熄灭，1：单色光，2：呼吸灯，3：闪烁灯，4：流水灯
 */
enum RgbEffectStatus {
    RgbEffectStatus_IDLE = 0;
    RgbEffectStatus_MONOCHROME = 1;
    RgbEffectStatus_BREATHING = 2;
    RgbEffectStatus_FLASHING = 3;
    RgbEffectStatus_FLOWING = 4;
}

/**
 * @brief RGB灯光状态
 */
message RgbLightState {
    // 范围：0~255
    uint32 red = 1;
    // 范围：0~255
    uint32 green = 2;
    // 范围：0~255
    uint32 blue = 3;
    // RGB灯效
    RgbEffectStatus effect = 4;
    // 灯光控制权： 0代表嵌入式接管， 1代表端侧接管
    uint32 control = 5;
}

/**
 * @brief RGB灯光控制指令
 */
message RgbLightCommand {
    // 范围：0~255
    uint32 red = 1;
    // 范围：0~255
    uint32 green = 2;
    // 范围：0~255
    uint32 blue = 3;
    // RGB灯效
    RgbEffectStatus effect = 4;
    // 灯光控制权： 0代表嵌入式接管， 1代表端侧接管
    uint32 control = 5;
}

/**
 * @brief 灯带状态
 */
message LightStripState {
    // 范围：0~255
    uint32 red = 1;
    // 范围：0~255
    uint32 green = 2;
    // 范围：0~255
    uint32 blue = 3;
    // RGB灯效
    RgbEffectStatus effect = 4;
}

/**
 * @brief 灯带控制指令
 */
message LightStripCommand {
    // 范围：0~255
    uint32 red = 1;
    // 范围：0~255
    uint32 green = 2;
    // 范围：0~255
    uint32 blue = 3;
    // RGB灯效
    RgbEffectStatus effect = 4;
}

/**
 * @brief 获取灯光状态响应
 */
message FillLightStateRsp {
    // 消息头
    ResponseHeader header = 1;

    // 灯光状态数据
    FillLightState data = 2;
}

/**
 * @brief 灯光控制请求
 */
message FillLightCommandReq {
    // 消息头
    RequestHeader header = 1;

    // 灯光控制指令
    FillLightCommand cmd = 2;
}

/**
 * @brief 获取RGB灯光状态响应
 */
message RgbLightStateRsp {
    // 消息头
    ResponseHeader header = 1;

    // RGB灯光状态数据
    RgbLightState data = 2;
}

/**
 * @brief RGB灯光控制请求
 */
message RgbLightCommandReq {
    // 消息头
    RequestHeader header = 1;

    // RGB灯光控制指令
    RgbLightCommand cmd = 2;
}

/**
 * @brief 获取灯带状态响应
 */
message LightStripStateRsp {
    // 消息头
    ResponseHeader header = 1;

    // 灯带状态数据
    LightStripState data = 2;
}

/**
 * @brief 灯带控制请求
 */
message LightStripCommandReq {
    // 消息头
    RequestHeader header = 1;

    // 灯带控制指令
    LightStripCommand cmd = 2;
}
