| // 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 <ddk/metadata/buttons.h> |
| #include <hid/buttons.h> |
| #include <hid/descriptor.h> |
| |
| // clang-format off |
| static const uint8_t buttons_report_desc[] = { |
| HID_USAGE_PAGE(0x0C), // Consumer |
| HID_USAGE(0x01), // Consumer Control |
| HID_COLLECTION_APPLICATION, |
| |
| HID_REPORT_ID(BUTTONS_RPT_ID_INPUT), |
| |
| HID_USAGE_PAGE(0x0C), // Consumer |
| HID_USAGE(0xE9), // Volume Up |
| HID_USAGE(0xEA), // Volume Down |
| HID_USAGE(0x31), // Reset |
| HID_USAGE(0x77), // Camera access disabled |
| HID_LOGICAL_MIN(0), |
| HID_LOGICAL_MAX(1), |
| HID_REPORT_SIZE(1), |
| HID_REPORT_COUNT(4), |
| HID_INPUT(HID_Data_Var_Abs), |
| HID_REPORT_SIZE(4), // Padding |
| HID_REPORT_COUNT(1), |
| HID_INPUT(HID_Const_Arr_Abs), |
| |
| HID_USAGE_PAGE(0x0B), // Telephony |
| HID_USAGE(0x2F), // Mute microphone |
| HID_LOGICAL_MIN(0), |
| HID_LOGICAL_MAX(1), |
| HID_REPORT_SIZE(1), |
| HID_REPORT_COUNT(1), |
| HID_INPUT(HID_Data_Var_Abs), |
| HID_REPORT_SIZE(7), // Padding |
| HID_REPORT_COUNT(1), |
| HID_INPUT(HID_Const_Arr_Abs), |
| |
| HID_END_COLLECTION, |
| }; |
| // clang-format on |
| |
| size_t get_buttons_report_desc(const uint8_t** buf) { |
| *buf = buttons_report_desc; |
| return sizeof(buttons_report_desc); |
| } |
| |
| void fill_button_in_report(uint8_t id, bool value, buttons_input_rpt_t* rpt) { |
| switch (id) { |
| case BUTTONS_ID_VOLUME_UP: |
| if (value) { |
| rpt->volume_up = 1; |
| } |
| break; |
| case BUTTONS_ID_VOLUME_DOWN: |
| if (value) { |
| rpt->volume_down = 1; |
| } |
| break; |
| case BUTTONS_ID_FDR: |
| if (value) { |
| rpt->reset = 1; |
| } |
| break; |
| case BUTTONS_ID_MIC_MUTE: |
| rpt->mute = value; |
| break; |
| case BUTTONS_ID_CAM_MUTE: |
| rpt->camera_access_disabled = value; |
| break; |
| case BUTTONS_ID_MIC_AND_CAM_MUTE: |
| rpt->camera_access_disabled = value; |
| rpt->mute = value; |
| break; |
| } |
| } |