1fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean/* 2fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * Copyright (C) 2017 The Android Open Source Project 3fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * 4fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * Licensed under the Apache License, Version 2.0 (the "License"); 5fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * you may not use this file except in compliance with the License. 6fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * You may obtain a copy of the License at 7fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * 8fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * http://www.apache.org/licenses/LICENSE-2.0 9fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * 10fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * Unless required by applicable law or agreed to in writing, software 11fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * distributed under the License is distributed on an "AS IS" BASIS, 12fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * See the License for the specific language governing permissions and 14fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * limitations under the License. 15fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean */ 16fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLeanpackage com.android.server.usb.descriptors; 17fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 18fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLeanimport com.android.server.usb.descriptors.report.ReportCanvas; 19fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 20fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean/** 21fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * Audio20.pdf - 4.9.2 Class-Specific AS Interface Descriptor 22fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean * 16 bytes 23fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean */ 24fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLeanpublic final class Usb20ASGeneral extends UsbACInterface { 25fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean private static final String TAG = "Usb20ASGeneral"; 26fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 27fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean // Audio20.pdf - Table 4-27 28fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean private byte mTerminalLink; // 3:1 The Terminal ID of the Terminal to which 29fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean // this interface is connected. 30fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean private byte mControls; // 4:1 see audio20.pdf Table 4-27 31fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean private byte mFormatType; // 5:1 Constant identifying the Format Type the 32fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean // AudioStreaming interface is using. 33fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean private int mFormats; // 6:4 The Audio Data Format(s) that can be 34fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean // used to communicate with this interface. 35fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean // See the USB Audio Data Formats 36fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean // document for further details. 37fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean private byte mNumChannels; // 10:1 Number of physical channels in the AS 38fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean // Interface audio channel cluster. 39fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean private int mChannelConfig; // 11:4 Describes the spatial location of the 40fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean // physical channels. 41fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean private byte mChannelNames; // 15:1 Index of a string descriptor, describing the 42fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean // name of the first physical channel. 43fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 44fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean public Usb20ASGeneral(int length, byte type, byte subtype, byte subclass) { 45fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean super(length, type, subtype, subclass); 46fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean } 47fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 48fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean public byte getTerminalLink() { 49fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean return mTerminalLink; 50fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean } 51fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 52fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean public byte getControls() { 53fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean return mControls; 54fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean } 55fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 56fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean public byte getFormatType() { 57fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean return mFormatType; 58fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean } 59fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 60fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean public int getFormats() { 61fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean return mFormats; 62fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean } 63fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 64fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean public byte getNumChannels() { 65fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean return mNumChannels; 66fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean } 67fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 68fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean public int getChannelConfig() { 69fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean return mChannelConfig; 70fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean } 71fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 72fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean public byte getChannelNames() { 73fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean return mChannelNames; 74fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean } 75fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 76fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean @Override 77fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean public int parseRawDescriptors(ByteStream stream) { 78fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 79fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean mTerminalLink = stream.getByte(); 80fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean mControls = stream.getByte(); 81fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean mFormatType = stream.getByte(); 82fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean mFormats = stream.unpackUsbInt(); 83fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean mNumChannels = stream.getByte(); 84fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean mChannelConfig = stream.unpackUsbInt(); 85fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean mChannelNames = stream.getByte(); 86fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 87fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean return mLength; 88fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean } 89fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 90fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean @Override 91fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean public void report(ReportCanvas canvas) { 92fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean super.report(canvas); 93fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean 94fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean canvas.openList(); 95fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean canvas.writeListItem("Terminal Link: " + getTerminalLink()); 96fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean canvas.writeListItem("Controls: " + ReportCanvas.getHexString(getControls())); 97fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean canvas.writeListItem("Format Type: " + ReportCanvas.getHexString(getFormatType())); 98fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean canvas.writeListItem("Formats: " + ReportCanvas.getHexString(getFormats())); 99fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean canvas.writeListItem("Num Channels: " + getNumChannels()); 100fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean canvas.writeListItem("Channel Config: " + ReportCanvas.getHexString(getChannelConfig())); 101fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean canvas.writeListItem("Channel Names String ID: " + getChannelNames()); 102fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean canvas.closeList(); 103fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean } 104fd7cb85feff517f3cc94384102933aa4485e1fc5Paul McLean} 105