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