mirror of https://github.com/qmk/qmk_firmware
160 lines
4.2 KiB
C
160 lines
4.2 KiB
C
// Copyright 2024 QMK
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include "util.h" // PACKED
|
|
|
|
#define LAMPARRAY_REPORT_ID_ATTRIBUTES 0x01
|
|
#define LAMPARRAY_REPORT_ID_ATTRIBUTES_REQUEST 0x02
|
|
#define LAMPARRAY_REPORT_ID_ATTRIBUTES_RESPONSE 0x03
|
|
#define LAMPARRAY_REPORT_ID_MULTI_UPDATE 0x04
|
|
#define LAMPARRAY_REPORT_ID_RANGE_UPDATE 0x05
|
|
#define LAMPARRAY_REPORT_ID_CONTROL 0x06
|
|
|
|
// 26.2.1 LampArrayKind Values
|
|
#define LAMPARRAY_KIND_UNDEFINED 0x00
|
|
#define LAMPARRAY_KIND_KEYBOARD 0x01
|
|
#define LAMPARRAY_KIND_MOUSE 0x02
|
|
#define LAMPARRAY_KIND_GAMECONTROLLER 0x03
|
|
#define LAMPARRAY_KIND_PERIPHERAL 0x04
|
|
#define LAMPARRAY_KIND_SCENE 0x05
|
|
#define LAMPARRAY_KIND_NOTIFICATION 0x06
|
|
#define LAMPARRAY_KIND_CHASSIS 0x07
|
|
#define LAMPARRAY_KIND_WEARABLE 0x08
|
|
#define LAMPARRAY_KIND_FURNITURE 0x09
|
|
#define LAMPARRAY_KIND_ART 0x0A
|
|
|
|
// 26.3.1 LampPurposes Flags
|
|
#define LAMP_PURPOSE_CONTROL 0x01
|
|
#define LAMP_PURPOSE_ACCENT 0x02
|
|
#define LAMP_PURPOSE_BRANDING 0x04
|
|
#define LAMP_PURPOSE_STATUS 0x08
|
|
#define LAMP_PURPOSE_ILLUMINATION 0x10
|
|
#define LAMP_PURPOSE_PRESENTATION 0x20
|
|
|
|
// 26.4.1 LampUpdate Flags
|
|
#define LAMP_UPDATE_FLAG_COMPLETE 0x01
|
|
|
|
typedef struct PACKED {
|
|
uint8_t red;
|
|
uint8_t green;
|
|
uint8_t blue;
|
|
uint8_t intensity;
|
|
} lamp_state_t;
|
|
|
|
typedef struct PACKED {
|
|
uint16_t lamp_count;
|
|
struct {
|
|
uint32_t width;
|
|
uint32_t height;
|
|
uint32_t depth;
|
|
} bounds;
|
|
uint32_t kind;
|
|
uint32_t update_interval;
|
|
} lamparray_attributes_t;
|
|
|
|
typedef struct PACKED {
|
|
uint16_t lamp_id;
|
|
struct {
|
|
int32_t x;
|
|
int32_t y;
|
|
int32_t z;
|
|
} position;
|
|
int32_t update_latency;
|
|
int32_t purposes;
|
|
lamp_state_t levels;
|
|
uint8_t is_programmable;
|
|
uint8_t input_binding;
|
|
} lamparray_attributes_response_t;
|
|
|
|
typedef struct PACKED {
|
|
uint8_t flags;
|
|
uint16_t start;
|
|
uint16_t end;
|
|
lamp_state_t color;
|
|
} lamparray_range_update_t;
|
|
|
|
#define LAMP_MULTI_UPDATE_LAMP_COUNT 8
|
|
typedef struct PACKED {
|
|
uint8_t count;
|
|
uint8_t flags;
|
|
uint16_t ids[LAMP_MULTI_UPDATE_LAMP_COUNT];
|
|
lamp_state_t colors[LAMP_MULTI_UPDATE_LAMP_COUNT];
|
|
} lamparray_multi_update_t;
|
|
|
|
typedef struct PACKED universal_lamparray_response_t {
|
|
uint8_t report_id;
|
|
union {
|
|
struct {
|
|
uint16_t lamp_id;
|
|
};
|
|
struct {
|
|
uint8_t autonomous;
|
|
};
|
|
lamparray_range_update_t range_update;
|
|
lamparray_multi_update_t multi_update;
|
|
};
|
|
} universal_lamparray_response_t;
|
|
|
|
typedef struct PACKED lamparray_attributes_report_t {
|
|
uint8_t report_id;
|
|
lamparray_attributes_t attributes;
|
|
} lamparray_attributes_report_t;
|
|
|
|
typedef struct PACKED lamparray_attributes_response_report_t {
|
|
uint8_t report_id;
|
|
lamparray_attributes_response_t attributes_response;
|
|
} lamparray_attributes_response_report_t;
|
|
|
|
/**
|
|
* \brief Gets LampArrayAttributesReport data
|
|
*/
|
|
void lamparray_get_attributes(lamparray_attributes_t* data);
|
|
|
|
/**
|
|
* \brief Sets LampAttributesRequestReport data
|
|
*/
|
|
void lamparray_set_attributes_response(uint16_t lamp_id);
|
|
|
|
/**
|
|
* \brief Gets LampAttributesResponseReport data
|
|
*/
|
|
void lamparray_get_attributes_response(lamparray_attributes_response_t* data);
|
|
|
|
/**
|
|
* \brief Sets LampRangeUpdateReport data
|
|
*/
|
|
void lamparray_set_range(lamparray_range_update_t* data);
|
|
|
|
/**
|
|
* \brief Sets LampMultiUpdateReport data
|
|
*/
|
|
void lamparray_set_items(lamparray_multi_update_t* data);
|
|
|
|
/**
|
|
* \brief Sets LampArrayControlReport data
|
|
*/
|
|
void lamparray_set_control_response(uint8_t autonomous);
|
|
|
|
//****************************************************************************
|
|
// utils
|
|
|
|
uint8_t lamparray_binding_at_keymap_location(uint8_t row, uint8_t col);
|
|
|
|
void lamparray_queue_request(universal_lamparray_response_t* report);
|
|
|
|
//****************************************************************************
|
|
// feature hooks
|
|
|
|
void lamparray_init(void);
|
|
|
|
void lamparray_task(void);
|
|
|
|
//****************************************************************************
|
|
// lighting framework bindings
|
|
|
|
void lamparray_get_lamp_impl(uint16_t lamp_id, lamparray_attributes_response_t* data);
|
|
uint8_t lamparray_get_lamp_binding_impl(uint16_t lamp_id);
|