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 McLeanimport com.android.server.usb.descriptors.report.ReportCanvas;
19fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLeanimport com.android.server.usb.descriptors.report.UsbStrings;
20fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean
21b5eaa809da69865cbde156007ae5363f9209f932Paul McLean/**
22b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * @hide
23b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * An audio class-specific General interface.
24b5eaa809da69865cbde156007ae5363f9209f932Paul McLean * see audio10.pdf section 4.5.2
25b5eaa809da69865cbde156007ae5363f9209f932Paul McLean */
26fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLeanpublic final class Usb10ASGeneral extends UsbACInterface {
27fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean    private static final String TAG = "Usb10ASGeneral";
28b5eaa809da69865cbde156007ae5363f9209f932Paul McLean
29b5eaa809da69865cbde156007ae5363f9209f932Paul McLean    // audio10.pdf - section 4.5.2
30b5eaa809da69865cbde156007ae5363f9209f932Paul McLean    private byte mTerminalLink; // 3:1 The Terminal ID of the Terminal to which the endpoint
31b5eaa809da69865cbde156007ae5363f9209f932Paul McLean                                // of this interface is connected.
32b5eaa809da69865cbde156007ae5363f9209f932Paul McLean    private byte mDelay;        // 4:1 Delay introduced by the data path (see Section 3.4,
33b5eaa809da69865cbde156007ae5363f9209f932Paul McLean                                // “Inter Channel Synchronization”). Expressed in number of frames.
34b5eaa809da69865cbde156007ae5363f9209f932Paul McLean    private int mFormatTag;     // 5:2 The Audio Data Format that has to be used to communicate
35b5eaa809da69865cbde156007ae5363f9209f932Paul McLean                                // with this interface.
36b5eaa809da69865cbde156007ae5363f9209f932Paul McLean
37558ff9d3f5f0a70d745b72d1d2d84f4e91850b8bPaul McLean    public Usb10ASGeneral(int length, byte type, byte subtype, int subclass) {
38b5eaa809da69865cbde156007ae5363f9209f932Paul McLean        super(length, type, subtype, subclass);
39b5eaa809da69865cbde156007ae5363f9209f932Paul McLean    }
40b5eaa809da69865cbde156007ae5363f9209f932Paul McLean
41b5eaa809da69865cbde156007ae5363f9209f932Paul McLean    public byte getTerminalLink() {
42b5eaa809da69865cbde156007ae5363f9209f932Paul McLean        return mTerminalLink;
43b5eaa809da69865cbde156007ae5363f9209f932Paul McLean    }
44b5eaa809da69865cbde156007ae5363f9209f932Paul McLean
45b5eaa809da69865cbde156007ae5363f9209f932Paul McLean    public byte getDelay() {
46b5eaa809da69865cbde156007ae5363f9209f932Paul McLean        return mDelay;
47b5eaa809da69865cbde156007ae5363f9209f932Paul McLean    }
48b5eaa809da69865cbde156007ae5363f9209f932Paul McLean
49b5eaa809da69865cbde156007ae5363f9209f932Paul McLean    public int getFormatTag() {
50b5eaa809da69865cbde156007ae5363f9209f932Paul McLean        return mFormatTag;
51b5eaa809da69865cbde156007ae5363f9209f932Paul McLean    }
52b5eaa809da69865cbde156007ae5363f9209f932Paul McLean
53b5eaa809da69865cbde156007ae5363f9209f932Paul McLean    @Override
54b5eaa809da69865cbde156007ae5363f9209f932Paul McLean    public int parseRawDescriptors(ByteStream stream) {
55b5eaa809da69865cbde156007ae5363f9209f932Paul McLean        mTerminalLink = stream.getByte();
56b5eaa809da69865cbde156007ae5363f9209f932Paul McLean        mDelay = stream.getByte();
57fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean        mFormatTag = stream.unpackUsbShort();
58b5eaa809da69865cbde156007ae5363f9209f932Paul McLean
59b5eaa809da69865cbde156007ae5363f9209f932Paul McLean        return mLength;
60b5eaa809da69865cbde156007ae5363f9209f932Paul McLean    }
61fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean
62fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean    @Override
63fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean    public void report(ReportCanvas canvas) {
64fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean        super.report(canvas);
65fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean
66fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean        canvas.openList();
67fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean        canvas.writeListItem("Delay: " + mDelay);
68fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean        canvas.writeListItem("Terminal Link: " + mTerminalLink);
69fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean        canvas.writeListItem("Format: " + UsbStrings.getAudioFormatName(mFormatTag) + " - "
70fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean                + ReportCanvas.getHexString(mFormatTag));
71fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean        canvas.closeList();
72fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean    }
73b5eaa809da69865cbde156007ae5363f9209f932Paul McLean}
74