1// Copyright 2018 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include <hid/ambient-light.h> 6#include <hid/descriptor.h> 7 8// clang-format off 9 10#define HID_USAGE_AMBIENT_LIGHT HID_USAGE16(0x04D1) 11#define HID_USAGE_INFRARED_LIGHT HID_USAGE16(0x04D7) 12#define HID_USAGE_RED_LIGHT HID_USAGE16(0x04D8) 13#define HID_USAGE_GREEN_LIGHT HID_USAGE16(0x04D9) 14#define HID_USAGE_BLUE_LIGHT HID_USAGE16(0x04DA) 15 16static const uint8_t ambient_light_report_desc[] = { 17 HID_USAGE_PAGE(0x20), // Sensor 18 HID_USAGE(0x41), // Ambient Light 19 HID_COLLECTION_APPLICATION, 20 21 22 // Feature reports 23 HID_REPORT_ID(AMBIENT_LIGHT_RPT_ID_FEATURE), 24 25 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE, 26 HID_LOGICAL_MIN(0), 27 HID_LOGICAL_MAX(5), 28 HID_REPORT_SIZE(8), 29 HID_REPORT_COUNT(1), 30 HID_COLLECTION_LOGICAL, 31 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS, 32 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS, 33 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS, 34 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_WAKE, 35 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_WAKE, 36 HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_WAKE, 37 HID_FEATURE(HID_Data_Arr_Abs), 38 HID_END_COLLECTION, 39 40 HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL, 41 HID_LOGICAL_MIN(0), 42 HID_LOGICAL_MAX32(0x7FFFFFFF), 43 HID_REPORT_SIZE(32), 44 HID_REPORT_COUNT(1), 45 // Default is HID_USAGE_SENSOR_UNITS_MILLISECOND, 46 HID_UNIT_EXPONENT(0), 47 HID_FEATURE(HID_Data_Var_Abs), 48 49 HID_USAGE_SENSOR_DATA(HID_USAGE_AMBIENT_LIGHT, HID_USAGE_SENSOR_DATA_MOD_THRESHOLD_LOW), 50 HID_LOGICAL_MIN(0x00), 51 HID_LOGICAL_MAX32(0xFFFF), 52 HID_REPORT_SIZE(16), 53 HID_REPORT_COUNT(1), 54 HID_USAGE_SENSOR_GENERIC_UNITS_NOT_SPECIFIED, // Explicitly not Lux 55 HID_FEATURE(HID_Data_Var_Abs), 56 57 HID_USAGE_SENSOR_DATA(HID_USAGE_AMBIENT_LIGHT, HID_USAGE_SENSOR_DATA_MOD_THRESHOLD_HIGH), 58 HID_LOGICAL_MIN(0x00), 59 HID_LOGICAL_MAX32(0xFFFF), 60 HID_REPORT_SIZE(16), 61 HID_REPORT_COUNT(1), 62 HID_USAGE_SENSOR_GENERIC_UNITS_NOT_SPECIFIED, // Explicitly not Lux 63 HID_FEATURE(HID_Data_Var_Abs), 64 65 66 // Input reports 67 HID_REPORT_ID(AMBIENT_LIGHT_RPT_ID_INPUT), 68 69 HID_USAGE_SENSOR_STATE, 70 HID_LOGICAL_MIN(0), 71 HID_LOGICAL_MAX(6), 72 HID_REPORT_SIZE(8), 73 HID_REPORT_COUNT(1), 74 HID_COLLECTION_LOGICAL, 75 HID_USAGE_SENSOR_STATE_UNKNOWN, 76 HID_USAGE_SENSOR_STATE_READY, 77 HID_USAGE_SENSOR_STATE_NOT_AVAILABLE, 78 HID_USAGE_SENSOR_STATE_NO_DATA, 79 HID_USAGE_SENSOR_STATE_INITIALIZING, 80 HID_USAGE_SENSOR_STATE_ACCESS_DENIED, 81 HID_USAGE_SENSOR_STATE_ERROR, 82 HID_INPUT(HID_Const_Arr_Abs), 83 HID_END_COLLECTION, 84 85 HID_USAGE_SENSOR_EVENT, 86 HID_LOGICAL_MIN(0), 87 HID_LOGICAL_MAX(16), 88 HID_REPORT_SIZE(8), 89 HID_REPORT_COUNT(1), 90 HID_COLLECTION_LOGICAL, 91 HID_USAGE_SENSOR_EVENT_UNKNOWN, 92 HID_USAGE_SENSOR_EVENT_STATE_CHANGED, 93 HID_USAGE_SENSOR_EVENT_PROPERTY_CHANGED, 94 HID_USAGE_SENSOR_EVENT_DATA_UPDATED, 95 HID_USAGE_SENSOR_EVENT_POLL_RESPONSE, 96 HID_USAGE_SENSOR_EVENT_CHANGE_SENSITIVITY, 97 HID_USAGE_SENSOR_EVENT_MAX_REACHED, 98 HID_USAGE_SENSOR_EVENT_MIN_REACHED, 99 HID_USAGE_SENSOR_EVENT_HIGH_THRESHOLD_CROSS_UPWARD, 100 HID_USAGE_SENSOR_EVENT_HIGH_THRESHOLD_CROSS_DOWNWARD, 101 HID_USAGE_SENSOR_EVENT_LOW_THRESHOLD_CROSS_UPWARD, 102 HID_USAGE_SENSOR_EVENT_LOW_THRESHOLD_CROSS_DOWNWARD, 103 HID_USAGE_SENSOR_EVENT_ZERO_THRESHOLD_CROSS_UPWARD, 104 HID_USAGE_SENSOR_EVENT_ZERO_THRESHOLD_CROSS_DOWNWARD, 105 HID_USAGE_SENSOR_EVENT_PERIOD_EXCEEDED, 106 HID_USAGE_SENSOR_EVENT_FREQUENCY_EXCEEDED, 107 HID_USAGE_SENSOR_EVENT_COMPLEX_TRIGGER, 108 HID_INPUT(HID_Const_Arr_Abs), 109 HID_END_COLLECTION, 110 111 HID_USAGE_AMBIENT_LIGHT, 112 HID_LOGICAL_MIN(0), 113 HID_LOGICAL_MAX32(0xFFFF), 114 HID_REPORT_SIZE(16), 115 HID_REPORT_COUNT(1), 116 HID_USAGE_SENSOR_GENERIC_UNITS_NOT_SPECIFIED, // Explicitly not Lux 117 HID_INPUT(HID_Data_Var_Abs), 118 119 HID_USAGE_RED_LIGHT, 120 HID_LOGICAL_MIN(0), 121 HID_LOGICAL_MAX32(0xFFFF), 122 HID_REPORT_SIZE(16), 123 HID_REPORT_COUNT(1), 124 HID_USAGE_SENSOR_GENERIC_UNITS_NOT_SPECIFIED, // Explicitly not Lux 125 HID_INPUT(HID_Data_Var_Abs), 126 127 HID_USAGE_BLUE_LIGHT, 128 HID_LOGICAL_MIN(0), 129 HID_LOGICAL_MAX32(0xFFFF), 130 HID_REPORT_SIZE(16), 131 HID_REPORT_COUNT(1), 132 HID_USAGE_SENSOR_GENERIC_UNITS_NOT_SPECIFIED, // Explicitly not Lux 133 HID_INPUT(HID_Data_Var_Abs), 134 135 HID_USAGE_GREEN_LIGHT, 136 HID_LOGICAL_MIN(0), 137 HID_LOGICAL_MAX32(0xFFFF), 138 HID_REPORT_SIZE(16), 139 HID_REPORT_COUNT(1), 140 HID_USAGE_SENSOR_GENERIC_UNITS_NOT_SPECIFIED, // Explicitly not Lux 141 HID_INPUT(HID_Data_Var_Abs), 142 143 144 HID_END_COLLECTION, 145}; 146// clang-format on 147 148size_t get_ambient_light_report_desc(const uint8_t** buf) { 149 *buf = ambient_light_report_desc; 150 return sizeof(ambient_light_report_desc); 151} 152