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