| // Copyright 2018 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/ambient-light.h> |
| #include <hid/descriptor.h> |
| |
| // clang-format off |
| |
| #define HID_USAGE_AMBIENT_LIGHT HID_USAGE16(0x04D1) |
| #define HID_USAGE_INFRARED_LIGHT HID_USAGE16(0x04D7) |
| #define HID_USAGE_RED_LIGHT HID_USAGE16(0x04D8) |
| #define HID_USAGE_GREEN_LIGHT HID_USAGE16(0x04D9) |
| #define HID_USAGE_BLUE_LIGHT HID_USAGE16(0x04DA) |
| |
| static const uint8_t ambient_light_report_desc[] = { |
| HID_USAGE_PAGE(0x20), // Sensor |
| HID_USAGE(0x41), // Ambient Light |
| HID_COLLECTION_APPLICATION, |
| |
| |
| // Feature reports |
| HID_REPORT_ID(AMBIENT_LIGHT_RPT_ID_FEATURE), |
| |
| HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE, |
| HID_LOGICAL_MIN(0), |
| HID_LOGICAL_MAX(5), |
| HID_REPORT_SIZE(8), |
| HID_REPORT_COUNT(1), |
| HID_COLLECTION_LOGICAL, |
| HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS, |
| HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS, |
| HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS, |
| HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS_WAKE, |
| HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS_WAKE, |
| HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_THRESHOLD_EVENTS_WAKE, |
| HID_FEATURE(HID_Data_Arr_Abs), |
| HID_END_COLLECTION, |
| |
| HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL, |
| HID_LOGICAL_MIN(0), |
| HID_LOGICAL_MAX32(0x7FFFFFFF), |
| HID_REPORT_SIZE(32), |
| HID_REPORT_COUNT(1), |
| // Default is HID_USAGE_SENSOR_UNITS_MILLISECOND, |
| HID_UNIT_EXPONENT(0), |
| HID_FEATURE(HID_Data_Var_Abs), |
| |
| HID_USAGE_SENSOR_DATA(HID_USAGE_AMBIENT_LIGHT, HID_USAGE_SENSOR_DATA_MOD_THRESHOLD_LOW), |
| HID_LOGICAL_MIN(0x00), |
| HID_LOGICAL_MAX32(0xFFFF), |
| HID_REPORT_SIZE(16), |
| HID_REPORT_COUNT(1), |
| HID_USAGE_SENSOR_GENERIC_UNITS_LUX, |
| HID_FEATURE(HID_Data_Var_Abs), |
| |
| HID_USAGE_SENSOR_DATA(HID_USAGE_AMBIENT_LIGHT, HID_USAGE_SENSOR_DATA_MOD_THRESHOLD_HIGH), |
| HID_LOGICAL_MIN(0x00), |
| HID_LOGICAL_MAX32(0xFFFF), |
| HID_REPORT_SIZE(16), |
| HID_REPORT_COUNT(1), |
| HID_USAGE_SENSOR_GENERIC_UNITS_LUX, |
| HID_FEATURE(HID_Data_Var_Abs), |
| |
| |
| // Input reports |
| HID_REPORT_ID(AMBIENT_LIGHT_RPT_ID_INPUT), |
| |
| HID_USAGE_SENSOR_STATE, |
| HID_LOGICAL_MIN(0), |
| HID_LOGICAL_MAX(6), |
| HID_REPORT_SIZE(8), |
| HID_REPORT_COUNT(1), |
| HID_COLLECTION_LOGICAL, |
| HID_USAGE_SENSOR_STATE_UNKNOWN, |
| HID_USAGE_SENSOR_STATE_READY, |
| HID_USAGE_SENSOR_STATE_NOT_AVAILABLE, |
| HID_USAGE_SENSOR_STATE_NO_DATA, |
| HID_USAGE_SENSOR_STATE_INITIALIZING, |
| HID_USAGE_SENSOR_STATE_ACCESS_DENIED, |
| HID_USAGE_SENSOR_STATE_ERROR, |
| HID_INPUT(HID_Const_Arr_Abs), |
| HID_END_COLLECTION, |
| |
| HID_USAGE_SENSOR_EVENT, |
| HID_LOGICAL_MIN(0), |
| HID_LOGICAL_MAX(16), |
| HID_REPORT_SIZE(8), |
| HID_REPORT_COUNT(1), |
| HID_COLLECTION_LOGICAL, |
| HID_USAGE_SENSOR_EVENT_UNKNOWN, |
| HID_USAGE_SENSOR_EVENT_STATE_CHANGED, |
| HID_USAGE_SENSOR_EVENT_PROPERTY_CHANGED, |
| HID_USAGE_SENSOR_EVENT_DATA_UPDATED, |
| HID_USAGE_SENSOR_EVENT_POLL_RESPONSE, |
| HID_USAGE_SENSOR_EVENT_CHANGE_SENSITIVITY, |
| HID_USAGE_SENSOR_EVENT_MAX_REACHED, |
| HID_USAGE_SENSOR_EVENT_MIN_REACHED, |
| HID_USAGE_SENSOR_EVENT_HIGH_THRESHOLD_CROSS_UPWARD, |
| HID_USAGE_SENSOR_EVENT_HIGH_THRESHOLD_CROSS_DOWNWARD, |
| HID_USAGE_SENSOR_EVENT_LOW_THRESHOLD_CROSS_UPWARD, |
| HID_USAGE_SENSOR_EVENT_LOW_THRESHOLD_CROSS_DOWNWARD, |
| HID_USAGE_SENSOR_EVENT_ZERO_THRESHOLD_CROSS_UPWARD, |
| HID_USAGE_SENSOR_EVENT_ZERO_THRESHOLD_CROSS_DOWNWARD, |
| HID_USAGE_SENSOR_EVENT_PERIOD_EXCEEDED, |
| HID_USAGE_SENSOR_EVENT_FREQUENCY_EXCEEDED, |
| HID_USAGE_SENSOR_EVENT_COMPLEX_TRIGGER, |
| HID_INPUT(HID_Const_Arr_Abs), |
| HID_END_COLLECTION, |
| |
| HID_USAGE_AMBIENT_LIGHT, |
| HID_LOGICAL_MIN(0), |
| HID_LOGICAL_MAX32(0xFFFF), |
| HID_REPORT_SIZE(16), |
| HID_REPORT_COUNT(1), |
| HID_USAGE_SENSOR_GENERIC_UNITS_NOT_SPECIFIED, // Explicitly not Lux |
| HID_INPUT(HID_Data_Var_Abs), |
| |
| HID_USAGE_RED_LIGHT, |
| HID_LOGICAL_MIN(0), |
| HID_LOGICAL_MAX32(0xFFFF), |
| HID_REPORT_SIZE(16), |
| HID_REPORT_COUNT(1), |
| HID_USAGE_SENSOR_GENERIC_UNITS_NOT_SPECIFIED, // Explicitly not Lux |
| HID_INPUT(HID_Data_Var_Abs), |
| |
| HID_USAGE_BLUE_LIGHT, |
| HID_LOGICAL_MIN(0), |
| HID_LOGICAL_MAX32(0xFFFF), |
| HID_REPORT_SIZE(16), |
| HID_REPORT_COUNT(1), |
| HID_USAGE_SENSOR_GENERIC_UNITS_NOT_SPECIFIED, // Explicitly not Lux |
| HID_INPUT(HID_Data_Var_Abs), |
| |
| HID_USAGE_GREEN_LIGHT, |
| HID_LOGICAL_MIN(0), |
| HID_LOGICAL_MAX32(0xFFFF), |
| HID_REPORT_SIZE(16), |
| HID_REPORT_COUNT(1), |
| HID_USAGE_SENSOR_GENERIC_UNITS_NOT_SPECIFIED, // Explicitly not Lux |
| HID_INPUT(HID_Data_Var_Abs), |
| |
| |
| HID_END_COLLECTION, |
| }; |
| // clang-format on |
| |
| size_t get_ambient_light_report_desc(const uint8_t** buf) { |
| *buf = ambient_light_report_desc; |
| return sizeof(ambient_light_report_desc); |
| } |