• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.net.wifi.p2p;
18 
19 import android.os.Parcelable;
20 import android.os.Parcel;
21 
22 /**
23  * A class representing Wifi Display information for a device
24  * @hide
25  */
26 public class WifiP2pWfdInfo implements Parcelable {
27 
28     private static final String TAG = "WifiP2pWfdInfo";
29 
30     private boolean mWfdEnabled;
31 
32     private int mDeviceInfo;
33 
34     public static final int WFD_SOURCE              = 0;
35     public static final int PRIMARY_SINK            = 1;
36     public static final int SECONDARY_SINK          = 2;
37     public static final int SOURCE_OR_PRIMARY_SINK  = 3;
38 
39     /* Device information bitmap */
40     /** One of {@link #WFD_SOURCE}, {@link #PRIMARY_SINK}, {@link #SECONDARY_SINK}
41      * or {@link #SOURCE_OR_PRIMARY_SINK}
42      */
43     private static final int DEVICE_TYPE                            = 0x3;
44     private static final int COUPLED_SINK_SUPPORT_AT_SOURCE         = 0x4;
45     private static final int COUPLED_SINK_SUPPORT_AT_SINK           = 0x8;
46     private static final int SESSION_AVAILABLE                      = 0x30;
47     private static final int SESSION_AVAILABLE_BIT1                 = 0x10;
48     private static final int SESSION_AVAILABLE_BIT2                 = 0x20;
49 
50     private int mCtrlPort;
51 
52     private int mMaxThroughput;
53 
WifiP2pWfdInfo()54     public WifiP2pWfdInfo() {
55     }
56 
WifiP2pWfdInfo(int devInfo, int ctrlPort, int maxTput)57     public WifiP2pWfdInfo(int devInfo, int ctrlPort, int maxTput) {
58         mWfdEnabled = true;
59         mDeviceInfo = devInfo;
60         mCtrlPort = ctrlPort;
61         mMaxThroughput = maxTput;
62     }
63 
isWfdEnabled()64     public boolean isWfdEnabled() {
65         return mWfdEnabled;
66     }
67 
setWfdEnabled(boolean enabled)68     public void setWfdEnabled(boolean enabled) {
69         mWfdEnabled = enabled;
70     }
71 
getDeviceType()72     public int getDeviceType() {
73         return (mDeviceInfo & DEVICE_TYPE);
74     }
75 
setDeviceType(int deviceType)76     public boolean setDeviceType(int deviceType) {
77         if (deviceType >= WFD_SOURCE && deviceType <= SOURCE_OR_PRIMARY_SINK) {
78             mDeviceInfo |= deviceType;
79             return true;
80         }
81         return false;
82     }
83 
isCoupledSinkSupportedAtSource()84     public boolean isCoupledSinkSupportedAtSource() {
85         return (mDeviceInfo & COUPLED_SINK_SUPPORT_AT_SINK) != 0;
86     }
87 
setCoupledSinkSupportAtSource(boolean enabled)88     public void setCoupledSinkSupportAtSource(boolean enabled) {
89         if (enabled ) {
90             mDeviceInfo |= COUPLED_SINK_SUPPORT_AT_SINK;
91         } else {
92             mDeviceInfo &= ~COUPLED_SINK_SUPPORT_AT_SINK;
93         }
94     }
95 
isCoupledSinkSupportedAtSink()96     public boolean isCoupledSinkSupportedAtSink() {
97         return (mDeviceInfo & COUPLED_SINK_SUPPORT_AT_SINK) != 0;
98     }
99 
setCoupledSinkSupportAtSink(boolean enabled)100     public void setCoupledSinkSupportAtSink(boolean enabled) {
101         if (enabled ) {
102             mDeviceInfo |= COUPLED_SINK_SUPPORT_AT_SINK;
103         } else {
104             mDeviceInfo &= ~COUPLED_SINK_SUPPORT_AT_SINK;
105         }
106     }
107 
isSessionAvailable()108     public boolean isSessionAvailable() {
109         return (mDeviceInfo & SESSION_AVAILABLE) != 0;
110     }
111 
setSessionAvailable(boolean enabled)112     public void setSessionAvailable(boolean enabled) {
113         if (enabled) {
114             mDeviceInfo |= SESSION_AVAILABLE_BIT1;
115             mDeviceInfo &= ~SESSION_AVAILABLE_BIT2;
116         } else {
117             mDeviceInfo &= ~SESSION_AVAILABLE;
118         }
119     }
120 
getControlPort()121     public int getControlPort() {
122         return mCtrlPort;
123     }
124 
setControlPort(int port)125     public void setControlPort(int port) {
126         mCtrlPort = port;
127     }
128 
setMaxThroughput(int maxThroughput)129     public void setMaxThroughput(int maxThroughput) {
130         mMaxThroughput = maxThroughput;
131     }
132 
getMaxThroughput()133     public int getMaxThroughput() {
134         return mMaxThroughput;
135     }
136 
getDeviceInfoHex()137     public String getDeviceInfoHex() {
138         return String.format("%04x%04x%04x%04x", 6, mDeviceInfo, mCtrlPort, mMaxThroughput);
139     }
140 
toString()141     public String toString() {
142         StringBuffer sbuf = new StringBuffer();
143         sbuf.append("WFD enabled: ").append(mWfdEnabled);
144         sbuf.append("WFD DeviceInfo: ").append(mDeviceInfo);
145         sbuf.append("\n WFD CtrlPort: ").append(mCtrlPort);
146         sbuf.append("\n WFD MaxThroughput: ").append(mMaxThroughput);
147         return sbuf.toString();
148     }
149 
150     /** Implement the Parcelable interface */
describeContents()151     public int describeContents() {
152         return 0;
153     }
154 
155     /** copy constructor */
WifiP2pWfdInfo(WifiP2pWfdInfo source)156     public WifiP2pWfdInfo(WifiP2pWfdInfo source) {
157         if (source != null) {
158             mDeviceInfo = source.mDeviceInfo;
159             mCtrlPort = source.mCtrlPort;
160             mMaxThroughput = source.mMaxThroughput;
161         }
162     }
163 
164     /** Implement the Parcelable interface */
writeToParcel(Parcel dest, int flags)165     public void writeToParcel(Parcel dest, int flags) {
166         dest.writeInt(mWfdEnabled ? 1 : 0);
167         dest.writeInt(mDeviceInfo);
168         dest.writeInt(mCtrlPort);
169         dest.writeInt(mMaxThroughput);
170     }
171 
readFromParcel(Parcel in)172     public void readFromParcel(Parcel in) {
173         mWfdEnabled = (in.readInt() == 1);
174         mDeviceInfo = in.readInt();
175         mCtrlPort = in.readInt();
176         mMaxThroughput = in.readInt();
177     }
178 
179     /** Implement the Parcelable interface */
180     public static final Creator<WifiP2pWfdInfo> CREATOR =
181         new Creator<WifiP2pWfdInfo>() {
182             public WifiP2pWfdInfo createFromParcel(Parcel in) {
183                 WifiP2pWfdInfo device = new WifiP2pWfdInfo();
184                 device.readFromParcel(in);
185                 return device;
186             }
187 
188             public WifiP2pWfdInfo[] newArray(int size) {
189                 return new WifiP2pWfdInfo[size];
190             }
191         };
192 }
193