initial commit
This commit is contained in:
commit
4de9088898
13 changed files with 610 additions and 0 deletions
64
hidpp20.h
Normal file
64
hidpp20.h
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
/**
|
||||
* Copyright (c) 2025 favewa
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "ratazana.h"
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
constexpr uint16_t HIDPP_VENDOR_LOGITECH = 0x046d;
|
||||
|
||||
constexpr uint8_t HIDPP_DEVICE_WIRED = 0xFF;
|
||||
constexpr uint8_t HIDPP_DEVICE_WIRELESS_1 = 0x01;
|
||||
|
||||
constexpr uint8_t HIDPP_REPORT_SHORT = 0x10;
|
||||
constexpr uint8_t HIDPP_REPORT_LONG = 0x11;
|
||||
|
||||
constexpr size_t HIDPP_SHORT_REPORT_SIZE = 7;
|
||||
constexpr size_t HIDPP_LONG_REPORT_SIZE = 20;
|
||||
|
||||
constexpr uint8_t HIDPP_FUNCTION_PING = 0x00;
|
||||
constexpr uint8_t HIDPP_FUNCTION_ERROR = 0x8F;
|
||||
|
||||
constexpr uint8_t HIDPP_SOFTWARE_ID = 0x10;
|
||||
|
||||
typedef struct __attribute__((packed)) {
|
||||
uint8_t report_type;
|
||||
uint8_t device_idx;
|
||||
uint8_t feature_id;
|
||||
uint8_t function_id;
|
||||
uint8_t params[HIDPP_LONG_REPORT_SIZE - 4];
|
||||
} hidpp_packet_t;
|
||||
|
||||
typedef union {
|
||||
hidpp_packet_t packet;
|
||||
uint8_t raw[HIDPP_LONG_REPORT_SIZE];
|
||||
} hidpp_payload_t;
|
||||
|
||||
_Static_assert(sizeof(hidpp_packet_t) == HIDPP_LONG_REPORT_SIZE,
|
||||
"hid++20 packet size mismatch");
|
||||
|
||||
typedef struct {
|
||||
uint8_t major;
|
||||
uint8_t minor;
|
||||
} hidpp_version_t;
|
||||
|
||||
bool hidpp_match_logitech_mouse(ratazana_hid_device_t *info);
|
||||
|
||||
ratazana_result_t hidpp_detect_protocol(ratazana_device_t *restrict dev,
|
||||
hidpp_version_t *restrict version);
|
||||
|
||||
ratazana_result_t hidpp_write(const ratazana_device_t *restrict dev,
|
||||
const uint8_t *restrict data, size_t len);
|
||||
|
||||
ratazana_result_t hidpp_recv(const ratazana_device_t *restrict dev,
|
||||
uint8_t *restrict data, size_t len,
|
||||
int timeout_ms);
|
||||
|
||||
ratazana_result_t hidpp_communicate(ratazana_device_t *restrict dev,
|
||||
const hidpp_payload_t *restrict request,
|
||||
hidpp_payload_t *restrict response);
|
||||
Loading…
Add table
Add a link
Reference in a new issue