1238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde/*
2238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde* Copyright (C) 2015 Samsung System LSI
3238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde* Licensed under the Apache License, Version 2.0 (the "License");
4238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde* you may not use this file except in compliance with the License.
5238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde* You may obtain a copy of the License at
6238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde*
7238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde*      http://www.apache.org/licenses/LICENSE-2.0
8238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde*
9238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde* Unless required by applicable law or agreed to in writing, software
10238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde* distributed under the License is distributed on an "AS IS" BASIS,
11238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde* See the License for the specific language governing permissions and
13238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde* limitations under the License.
14238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde*/
15238e0f934f1f47263b384bc745ae0678c777130dCasper Bondepackage android.bluetooth;
16238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde
17238e0f934f1f47263b384bc745ae0678c777130dCasper Bondeimport java.util.Arrays;
18238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde
19238e0f934f1f47263b384bc745ae0678c777130dCasper Bondeimport android.os.Parcel;
20238e0f934f1f47263b384bc745ae0678c777130dCasper Bondeimport android.os.Parcelable;
21238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde
22238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde/**
23238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde * Data representation of a Object Push Profile Server side SDP record.
24238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde */
25238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde/** @hide */
26238e0f934f1f47263b384bc745ae0678c777130dCasper Bondepublic class SdpOppOpsRecord implements Parcelable {
27238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde
28238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    private final String mServiceName;
29238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    private final int mRfcommChannel;
30238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    private final int mL2capPsm;
31238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    private final int mProfileVersion;
32238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    private final byte[] mFormatsList;
33238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde
34238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    public SdpOppOpsRecord(String serviceName, int rfcommChannel,
35238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde            int l2capPsm, int version, byte[] formatsList) {
36238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        super();
37238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        this.mServiceName = serviceName;
38238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        this.mRfcommChannel = rfcommChannel;
39238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        this.mL2capPsm = l2capPsm;
40238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        this.mProfileVersion = version;
41238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        this.mFormatsList = formatsList;
42238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    }
43238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde
44238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    public String getServiceName() {
45238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        return mServiceName;
46238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    }
47238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde
48238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    public int getRfcommChannel() {
49238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        return mRfcommChannel;
50238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    }
51238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde
52238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    public int getL2capPsm() {
53238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        return mL2capPsm;
54238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    }
55238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde
56238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    public int getProfileVersion() {
57238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        return mProfileVersion;
58238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    }
59238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde
60238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    public byte[] getFormatsList() {
61238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        return mFormatsList;
62238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    }
63238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde
64238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    @Override
65238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    public int describeContents() {
66238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        /* No special objects */
67238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        return 0;
68238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    }
69238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde
70238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    public SdpOppOpsRecord(Parcel in){
71238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        this.mRfcommChannel = in.readInt();
72238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        this.mL2capPsm = in.readInt();
73238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        this.mProfileVersion = in.readInt();
74238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        this.mServiceName = in.readString();
75238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        int arrayLength = in.readInt();
76238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        if(arrayLength > 0) {
77238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde            byte[] bytes = new byte[arrayLength];
78238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde            in.readByteArray(bytes);
79238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde            this.mFormatsList = bytes;
80238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        } else {
81238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde            this.mFormatsList = null;
82238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        }
83238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    }
84238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde
85238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    @Override
86238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    public void writeToParcel(Parcel dest, int flags) {
87238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        dest.writeInt(mRfcommChannel);
88238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        dest.writeInt(mL2capPsm);
89238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        dest.writeInt(mProfileVersion);
90238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        dest.writeString(mServiceName);
91238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        if(mFormatsList!= null && mFormatsList.length > 0) {
92238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde            dest.writeInt(mFormatsList.length);
93238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde            dest.writeByteArray(mFormatsList);
94238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        } else {
95238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde            dest.writeInt(0);
96238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        }
97238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    }
98238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde
99238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    public String toString(){
100238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        StringBuilder sb = new StringBuilder("Bluetooth OPP Server SDP Record:\n");
101238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        sb.append("  RFCOMM Chan Number: ").append(mRfcommChannel);
102238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        sb.append("\n  L2CAP PSM: ").append(mL2capPsm);
103238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        sb.append("\n  Profile version: ").append(mProfileVersion);
104238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        sb.append("\n  Service Name: ").append(mServiceName);
105238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        sb.append("\n  Formats List: ").append(Arrays.toString(mFormatsList));
106238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        return sb.toString();
107238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    }
108238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde
109238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
110238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        public SdpOppOpsRecord createFromParcel(Parcel in) {
111238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde            return new SdpOppOpsRecord(in);
112238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        }
113238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        public SdpOppOpsRecord[] newArray(int size) {
114238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde            return new SdpOppOpsRecord[size];
115238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde        }
116238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde    };
117238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde
118238e0f934f1f47263b384bc745ae0678c777130dCasper Bonde}
119