1e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta/*
2e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta * Copyright (C) 2016 The Android Open Source Project
3e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta *
4e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta * Licensed under the Apache License, Version 2.0 (the "License");
5e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta * you may not use this file except in compliance with the License.
6e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta * You may obtain a copy of the License at
7e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta *
8e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta *      http://www.apache.org/licenses/LICENSE-2.0
9e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta *
10e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta * Unless required by applicable law or agreed to in writing, software
11e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta * distributed under the License is distributed on an "AS IS" BASIS,
12e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta * See the License for the specific language governing permissions and
14e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta * limitations under the License.
15e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta */
16e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta
17e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Guptapackage android.bluetooth;
18e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta
19e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Guptaimport android.os.Parcel;
20e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Guptaimport android.os.Parcelable;
21e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta
22fa377b407bd3a19aa4f6f4b29411b4cf2f3f56d7Hansong Zhang/**
2353f5412beb19b999ac826269fff8e98d495290b3Hansong Zhang * Represents the Quality of Service (QoS) settings for a Bluetooth HID Device application.
24fa377b407bd3a19aa4f6f4b29411b4cf2f3f56d7Hansong Zhang *
2553f5412beb19b999ac826269fff8e98d495290b3Hansong Zhang * <p>The BluetoothHidDevice framework will update the L2CAP QoS settings for the app during
2653f5412beb19b999ac826269fff8e98d495290b3Hansong Zhang * registration.
27fa377b407bd3a19aa4f6f4b29411b4cf2f3f56d7Hansong Zhang *
2853f5412beb19b999ac826269fff8e98d495290b3Hansong Zhang * <p>{@see BluetoothHidDevice}
29fa377b407bd3a19aa4f6f4b29411b4cf2f3f56d7Hansong Zhang */
30e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Guptapublic final class BluetoothHidDeviceAppQosSettings implements Parcelable {
31e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta
32191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    private final int mServiceType;
33191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    private final int mTokenRate;
34191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    private final int mTokenBucketSize;
35191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    private final int mPeakBandwidth;
36191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    private final int mLatency;
37191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    private final int mDelayVariation;
38e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta
392992cd084cd5cfd9ef253c37ef269d6c75e7e144Jack He    public static final int SERVICE_NO_TRAFFIC = 0x00;
402992cd084cd5cfd9ef253c37ef269d6c75e7e144Jack He    public static final int SERVICE_BEST_EFFORT = 0x01;
412992cd084cd5cfd9ef253c37ef269d6c75e7e144Jack He    public static final int SERVICE_GUARANTEED = 0x02;
42e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta
432992cd084cd5cfd9ef253c37ef269d6c75e7e144Jack He    public static final int MAX = (int) 0xffffffff;
44e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta
45ceb84db837a9f4d9900c3e3d1aaac39eb9d27903Hansong Zhang    /**
4653f5412beb19b999ac826269fff8e98d495290b3Hansong Zhang     * Create a BluetoothHidDeviceAppQosSettings object for the Bluetooth L2CAP channel. The QoS
47191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov     * Settings is optional. Please refer to Bluetooth HID Specfication v1.1.1 Section 5.2 and
48191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov     * Appendix D for parameters.
4953f5412beb19b999ac826269fff8e98d495290b3Hansong Zhang     *
50191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov     * @param serviceType L2CAP service type, default = SERVICE_BEST_EFFORT
51191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov     * @param tokenRate L2CAP token rate, default = 0
52191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov     * @param tokenBucketSize L2CAP token bucket size, default = 0
53191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov     * @param peakBandwidth L2CAP peak bandwidth, default = 0
54191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov     * @param latency L2CAP latency, default = MAX
55191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov     * @param delayVariation L2CAP delay variation, default = MAX
56ceb84db837a9f4d9900c3e3d1aaac39eb9d27903Hansong Zhang     */
57191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    public BluetoothHidDeviceAppQosSettings(
58191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov            int serviceType,
59191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov            int tokenRate,
60191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov            int tokenBucketSize,
61191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov            int peakBandwidth,
62191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov            int latency,
63191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov            int delayVariation) {
64191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        mServiceType = serviceType;
65191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        mTokenRate = tokenRate;
66191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        mTokenBucketSize = tokenBucketSize;
67191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        mPeakBandwidth = peakBandwidth;
68191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        mLatency = latency;
69191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        mDelayVariation = delayVariation;
70e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta    }
71e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta
72191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    public int getServiceType() {
73191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        return mServiceType;
74191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    }
75191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov
76191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    public int getTokenRate() {
77191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        return mTokenRate;
78191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    }
79191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov
80191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    public int getTokenBucketSize() {
81191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        return mTokenBucketSize;
82191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    }
83191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov
84191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    public int getPeakBandwidth() {
85191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        return mPeakBandwidth;
86191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    }
87191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov
88191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    public int getLatency() {
89191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        return mLatency;
90191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    }
91191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov
92191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov    public int getDelayVariation() {
93191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        return mDelayVariation;
94e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta    }
95e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta
96e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta    @Override
97e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta    public int describeContents() {
98e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta        return 0;
99e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta    }
100e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta
101e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta    public static final Parcelable.Creator<BluetoothHidDeviceAppQosSettings> CREATOR =
102a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He            new Parcelable.Creator<BluetoothHidDeviceAppQosSettings>() {
103e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta
104a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                @Override
105a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                public BluetoothHidDeviceAppQosSettings createFromParcel(Parcel in) {
106e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta
107fa377b407bd3a19aa4f6f4b29411b4cf2f3f56d7Hansong Zhang                    return new BluetoothHidDeviceAppQosSettings(
108fa377b407bd3a19aa4f6f4b29411b4cf2f3f56d7Hansong Zhang                            in.readInt(),
109fa377b407bd3a19aa4f6f4b29411b4cf2f3f56d7Hansong Zhang                            in.readInt(),
110fa377b407bd3a19aa4f6f4b29411b4cf2f3f56d7Hansong Zhang                            in.readInt(),
111a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                            in.readInt(),
112a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                            in.readInt(),
113fa377b407bd3a19aa4f6f4b29411b4cf2f3f56d7Hansong Zhang                            in.readInt());
114a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                }
115e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta
116a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                @Override
117a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                public BluetoothHidDeviceAppQosSettings[] newArray(int size) {
118a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                    return new BluetoothHidDeviceAppQosSettings[size];
119a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He                }
120a355e5efaf45a534ee6437aa4bae7d30f18c0ec2Jack He            };
121e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta
122e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta    @Override
123e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta    public void writeToParcel(Parcel out, int flags) {
124191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        out.writeInt(mServiceType);
125191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        out.writeInt(mTokenRate);
126191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        out.writeInt(mTokenBucketSize);
127191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        out.writeInt(mPeakBandwidth);
128191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        out.writeInt(mLatency);
129191ce9c442d08603fe9ae7d53e228fdf88456accIvan Podogov        out.writeInt(mDelayVariation);
130ceb84db837a9f4d9900c3e3d1aaac39eb9d27903Hansong Zhang    }
131e88fd4b5940a855e961cffa36e93f844a44cd2d4Hemant Gupta}
132