blob: f970db9ba7433181db93b38aa100d7b85cf8ee7d [file] [log] [blame]
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <hid/descriptor.h>
#include <hid/multi-sensor.h>
// clang-format off
#define HID_USAGE_ACCELERATION_X HID_USAGE16(0x0453)
#define HID_USAGE_ACCELERATION_Y HID_USAGE16(0x0454)
#define HID_USAGE_ACCELERATION_Z HID_USAGE16(0x0455)
#define HID_USAGE_ANGULAR_VELOCITY_X HID_USAGE16(0x0457)
#define HID_USAGE_ANGULAR_VELOCITY_Y HID_USAGE16(0x0458)
#define HID_USAGE_ANGULAR_VELOCITY_Z HID_USAGE16(0x0459)
#define HID_USAGE_MAGNETIC_FLUX_X HID_USAGE16(0x0485)
#define HID_USAGE_MAGNETIC_FLUX_Y HID_USAGE16(0x0486)
#define HID_USAGE_MAGNETIC_FLUX_Z HID_USAGE16(0x0487)
#define HID_USAGE_AMBIENT_LIGHT HID_USAGE16(0x04D1)
static const uint8_t multi_sensor_report_desc[] = {
HID_USAGE_PAGE(0x20), // Sensor
HID_USAGE(0x01), // Sensor
HID_COLLECTION_APPLICATION,
HID_REPORT_ID(ACCELEROMETER_RPT_ID_B),
// Removing physical range for ease of testing
// HID_PHYSICAL_MIN32(0xfffffffe),
// HID_PHYSICAL_MAX32(0x2),
HID_USAGE_PAGE(0x20), // Sensor
HID_USAGE(0x73), // Motion: Accelerometer 3D
HID_COLLECTION_PHYSICAL,
HID_USAGE_PAGE(0x20), // Sensor
HID_LOGICAL_MIN16(0x8000),
HID_LOGICAL_MAX16(0x7fff),
HID_REPORT_SIZE(16),
HID_REPORT_COUNT(1),
HID_USAGE_ACCELERATION_X,
HID_INPUT(HID_Const_Var_Abs),
HID_USAGE_ACCELERATION_Y,
HID_INPUT(HID_Const_Var_Abs),
HID_USAGE_ACCELERATION_Z,
HID_INPUT(HID_Const_Var_Abs),
HID_END_COLLECTION,
HID_REPORT_ID(GYROMETER_RPT_ID),
// Removing physical range for ease of testing
// HID_PHYSICAL_MIN32(0xfffffc18),
// HID_PHYSICAL_MAX32(0x3e8),
HID_USAGE_PAGE(0x20), // Sensor
HID_USAGE(0x76), // Motion: Gyrometer 3D
HID_COLLECTION_PHYSICAL,
HID_USAGE_PAGE(0x20), // Sensor
HID_LOGICAL_MIN16(0x8000),
HID_LOGICAL_MAX16(0x7fff),
HID_REPORT_SIZE(16),
HID_REPORT_COUNT(1),
HID_USAGE_ANGULAR_VELOCITY_X,
HID_INPUT(HID_Const_Var_Abs),
HID_USAGE_ANGULAR_VELOCITY_Y,
HID_INPUT(HID_Const_Var_Abs),
HID_USAGE_ANGULAR_VELOCITY_Z,
HID_INPUT(HID_Const_Var_Abs),
HID_END_COLLECTION,
HID_REPORT_ID(COMPASS_RPT_ID),
// Removing physical range for ease of testing
// HID_PHYSICAL_MIN32(0xffec7800),
// HID_PHYSICAL_MAX32(0x138800),
HID_USAGE_PAGE(0x20), // Sensor
HID_USAGE(0x83), // Orientation: Compass 3D
HID_COLLECTION_PHYSICAL,
HID_USAGE_PAGE(0x20), // Sensor
HID_LOGICAL_MIN16(0x8000),
HID_LOGICAL_MAX16(0x7fff),
HID_UNIT_EXPONENT(0xd),
HID_REPORT_SIZE(16),
HID_REPORT_COUNT(1),
HID_USAGE_MAGNETIC_FLUX_X,
HID_INPUT(HID_Const_Var_Abs),
HID_USAGE_MAGNETIC_FLUX_Y,
HID_INPUT(HID_Const_Var_Abs),
HID_USAGE_MAGNETIC_FLUX_Z,
HID_INPUT(HID_Const_Var_Abs),
HID_END_COLLECTION,
HID_END_COLLECTION,
HID_USAGE_PAGE(0x20), // Sensor
HID_USAGE(0x01), // Sensor
HID_COLLECTION_APPLICATION,
HID_REPORT_ID(ACCELEROMETER_RPT_ID_A),
// Removing physical range for ease of testing
// HID_PHYSICAL_MIN32(0xfffffffe),
// HID_PHYSICAL_MAX32(0x2),
HID_USAGE_PAGE(0x20), // Sensor
HID_USAGE(0x73), // Motion: Accelerometer 3D
HID_COLLECTION_PHYSICAL,
HID_USAGE_PAGE(0x20), // Sensor
HID_LOGICAL_MIN16(0x8000),
HID_LOGICAL_MAX16(0x7fff),
HID_REPORT_SIZE(16),
HID_REPORT_COUNT(1),
HID_USAGE_ACCELERATION_X,
HID_INPUT(HID_Const_Var_Abs),
HID_USAGE_ACCELERATION_Y,
HID_INPUT(HID_Const_Var_Abs),
HID_USAGE_ACCELERATION_Z,
HID_INPUT(HID_Const_Var_Abs),
HID_END_COLLECTION,
HID_REPORT_ID(ILLUMINANCE_RPT_ID),
// Removing physical range for ease of testing
// HID_PHYSICAL_MIN32(0),
// HID_PHYSICAL_MAX32(0x1770),
HID_USAGE_PAGE(0x20), // Sensor
HID_USAGE(0x41), // Light: Ambient Light
HID_COLLECTION_PHYSICAL,
HID_USAGE_PAGE(0x20), // Sensor
HID_LOGICAL_MIN(0),
HID_LOGICAL_MAX16(0x7fff),
HID_REPORT_SIZE(16),
HID_REPORT_COUNT(1),
HID_USAGE_AMBIENT_LIGHT,
HID_INPUT(HID_Const_Var_Abs),
HID_END_COLLECTION,
HID_END_COLLECTION,
};
// clang-format on
size_t get_multi_sensor_report_desc(const uint8_t** buf) {
*buf = multi_sensor_report_desc;
return sizeof(multi_sensor_report_desc);
}