blob: b4cc87e096dffb9206247d1883db129c21e4d1ad [file] [log] [blame]
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server.usb.descriptors;
import com.android.server.usb.descriptors.report.ReportCanvas;
/**
* @hide
* A USB HID (Human Interface Descriptor).
* see HID1_11.pdf - 6.2.1
*/
public final class UsbHIDDescriptor extends UsbDescriptor {
private static final String TAG = "UsbHIDDescriptor";
private int mRelease; // 2:2 the HID Class Specification release.
private byte mCountryCode; // 4:1 country code of the localized hardware.
private byte mNumDescriptors; // number of descriptors (always at least one
// i.e. Report descriptor.)
private byte mDescriptorType; // 6:1 type of class descriptor.
// See Section 7.1.2: Set_Descriptor
// Request for a table of class descriptor constants.
private int mDescriptorLen; // 7:2 Numeric expression that is the total size of
// the Report descriptor.
public UsbHIDDescriptor(int length, byte type) {
super(length, type);
mHierarchyLevel = 3;
}
public int getRelease() {
return mRelease;
}
public byte getCountryCode() {
return mCountryCode;
}
public byte getNumDescriptors() {
return mNumDescriptors;
}
public byte getDescriptorType() {
return mDescriptorType;
}
public int getDescriptorLen() {
return mDescriptorLen;
}
@Override
public int parseRawDescriptors(ByteStream stream) {
mRelease = stream.unpackUsbShort();
mCountryCode = stream.getByte();
mNumDescriptors = stream.getByte();
mDescriptorType = stream.getByte();
mDescriptorLen = stream.unpackUsbShort();
return mLength;
}
@Override
public void report(ReportCanvas canvas) {
super.report(canvas);
canvas.openList();
canvas.writeListItem("Spec: " + ReportCanvas.getBCDString(getRelease()));
canvas.writeListItem("Type: " + ReportCanvas.getBCDString(getDescriptorType()));
canvas.writeListItem("" + getNumDescriptors() + " Descriptors Len: "
+ getDescriptorLen());
canvas.closeList();
}
}