1b5eaa809da69865cbde156007ae5363f9209f932Paul McLean/* 2b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * Copyright (C) 2017 The Android Open Source Project 3b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * 4b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * Licensed under the Apache License, Version 2.0 (the "License"); 5b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * you may not use this file except in compliance with the License. 6b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * You may obtain a copy of the License at 7b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * 8b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * http://www.apache.org/licenses/LICENSE-2.0 9b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * 10b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * Unless required by applicable law or agreed to in writing, software 11b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * distributed under the License is distributed on an "AS IS" BASIS, 12b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * See the License for the specific language governing permissions and 14b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * limitations under the License. 15b5eaa809da69865cbde156007ae5363f9209f932Paul McLean */ 16b5eaa809da69865cbde156007ae5363f9209f932Paul McLeanpackage com.android.server.usb.descriptors; 17b5eaa809da69865cbde156007ae5363f9209f932Paul McLean 18fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean// import com.android.server.usb.descriptors.report.ReportCanvas; 19fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 20b5eaa809da69865cbde156007ae5363f9209f932Paul McLean/** 21b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * @hide 22b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * A USB Interface Association Descriptor. 23b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * found this one here: http://www.usb.org/developers/docs/whitepapers/iadclasscode_r10.pdf 24b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * also: https://msdn.microsoft.com/en-us/library/windows/hardware/ff540054(v=vs.85).aspx 25b5eaa809da69865cbde156007ae5363f9209f932Paul McLean */ 26fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLeanpublic final class UsbInterfaceAssoc extends UsbDescriptor { 27fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean private static final String TAG = "UsbInterfaceAssoc"; 28b5eaa809da69865cbde156007ae5363f9209f932Paul McLean 29b5eaa809da69865cbde156007ae5363f9209f932Paul McLean private byte mFirstInterface; 30b5eaa809da69865cbde156007ae5363f9209f932Paul McLean private byte mInterfaceCount; 31b5eaa809da69865cbde156007ae5363f9209f932Paul McLean private byte mFunctionClass; 32b5eaa809da69865cbde156007ae5363f9209f932Paul McLean private byte mFunctionSubClass; 33b5eaa809da69865cbde156007ae5363f9209f932Paul McLean private byte mFunctionProtocol; 34b5eaa809da69865cbde156007ae5363f9209f932Paul McLean private byte mFunction; 35b5eaa809da69865cbde156007ae5363f9209f932Paul McLean 36b5eaa809da69865cbde156007ae5363f9209f932Paul McLean public UsbInterfaceAssoc(int length, byte type) { 37b5eaa809da69865cbde156007ae5363f9209f932Paul McLean super(length, type); 38b5eaa809da69865cbde156007ae5363f9209f932Paul McLean } 39b5eaa809da69865cbde156007ae5363f9209f932Paul McLean 40b5eaa809da69865cbde156007ae5363f9209f932Paul McLean public byte getFirstInterface() { 41b5eaa809da69865cbde156007ae5363f9209f932Paul McLean return mFirstInterface; 42b5eaa809da69865cbde156007ae5363f9209f932Paul McLean } 43b5eaa809da69865cbde156007ae5363f9209f932Paul McLean 44b5eaa809da69865cbde156007ae5363f9209f932Paul McLean public byte getInterfaceCount() { 45b5eaa809da69865cbde156007ae5363f9209f932Paul McLean return mInterfaceCount; 46b5eaa809da69865cbde156007ae5363f9209f932Paul McLean } 47b5eaa809da69865cbde156007ae5363f9209f932Paul McLean 48b5eaa809da69865cbde156007ae5363f9209f932Paul McLean public byte getFunctionClass() { 49b5eaa809da69865cbde156007ae5363f9209f932Paul McLean return mFunctionClass; 50b5eaa809da69865cbde156007ae5363f9209f932Paul McLean } 51b5eaa809da69865cbde156007ae5363f9209f932Paul McLean 52b5eaa809da69865cbde156007ae5363f9209f932Paul McLean public byte getFunctionSubClass() { 53b5eaa809da69865cbde156007ae5363f9209f932Paul McLean return mFunctionSubClass; 54b5eaa809da69865cbde156007ae5363f9209f932Paul McLean } 55b5eaa809da69865cbde156007ae5363f9209f932Paul McLean 56b5eaa809da69865cbde156007ae5363f9209f932Paul McLean public byte getFunctionProtocol() { 57b5eaa809da69865cbde156007ae5363f9209f932Paul McLean return mFunctionProtocol; 58b5eaa809da69865cbde156007ae5363f9209f932Paul McLean } 59b5eaa809da69865cbde156007ae5363f9209f932Paul McLean 60b5eaa809da69865cbde156007ae5363f9209f932Paul McLean public byte getFunction() { 61b5eaa809da69865cbde156007ae5363f9209f932Paul McLean return mFunction; 62b5eaa809da69865cbde156007ae5363f9209f932Paul McLean } 63b5eaa809da69865cbde156007ae5363f9209f932Paul McLean 64b5eaa809da69865cbde156007ae5363f9209f932Paul McLean @Override 65b5eaa809da69865cbde156007ae5363f9209f932Paul McLean public int parseRawDescriptors(ByteStream stream) { 66b5eaa809da69865cbde156007ae5363f9209f932Paul McLean mFirstInterface = stream.getByte(); 67b5eaa809da69865cbde156007ae5363f9209f932Paul McLean mInterfaceCount = stream.getByte(); 68b5eaa809da69865cbde156007ae5363f9209f932Paul McLean mFunctionClass = stream.getByte(); 69b5eaa809da69865cbde156007ae5363f9209f932Paul McLean mFunctionSubClass = stream.getByte(); 70b5eaa809da69865cbde156007ae5363f9209f932Paul McLean mFunctionProtocol = stream.getByte(); 71b5eaa809da69865cbde156007ae5363f9209f932Paul McLean mFunction = stream.getByte(); 72b5eaa809da69865cbde156007ae5363f9209f932Paul McLean 73b5eaa809da69865cbde156007ae5363f9209f932Paul McLean return mLength; 74b5eaa809da69865cbde156007ae5363f9209f932Paul McLean } 75fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 76fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean // TODO - Report fields 77fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean// @Override 78fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean// public void report(ReportCanvas canvas) { 79fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean// super.report(canvas); 80fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean// 81fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean// } 82b5eaa809da69865cbde156007ae5363f9209f932Paul McLean} 83