2 * ***************************************************************
\r
4 * Copyright 2015 Samsung Electronics All Rights Reserved.
\r
8 * Licensed under the Apache License, Version 2.0 (the "License");
\r
9 * you may not use this file except in compliance with the License.
\r
10 * You may obtain a copy of the License at
\r
12 * http://www.apache.org/licenses/LICENSE-2.0
\r
14 * Unless required by applicable law or agreed to in writing, software
\r
15 * distributed under the License is distributed on an "AS IS" BASIS,
\r
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
17 * See the License for the specific language governing permissions and
\r
18 * limitations under the License.
\r
20 * ****************************************************************
\r
23 package org.iotivity.service.easysetup.impl;
\r
25 import java.util.Timer;
\r
26 import java.util.TimerTask;
\r
28 import org.iotivity.service.easysetup.core.OnBoardingConnection;
\r
29 import org.iotivity.service.easysetup.core.EnrolleeDevice;
\r
30 import org.iotivity.service.easysetup.core.EnrolleeState;
\r
31 import org.iotivity.service.easysetup.core.IpOnBoardingConnection;
\r
32 import org.iotivity.service.easysetup.core.OnBoardingConfig;
\r
33 import org.iotivity.service.easysetup.core.ProvisioningConfig;
\r
34 import org.iotivity.service.easysetup.mediator.EasySetupCallbackHandler;
\r
35 import org.iotivity.service.easysetup.mediator.EasySetupManager;
\r
36 import org.iotivity.service.easysetup.mediator.EnrolleeInfo;
\r
37 import org.iotivity.service.easysetup.mediator.IOnBoardingStatus;
\r
38 import org.iotivity.service.easysetup.mediator.IProvisioningListener;
\r
39 import org.iotivity.service.easysetup.mediator.ProvisionEnrollee;
\r
40 import org.iotivity.service.easysetup.mediator.ip.WiFiSoftAPManager;
\r
42 import android.content.Context;
\r
43 import android.net.wifi.WifiConfiguration;
\r
44 import android.util.Log;
\r
47 * This is a ready to use class for Enrollee device having Soft AP as on-boarding connectivity.
\r
49 public class EnrolleeDeviceWiFiOnboarding extends EnrolleeDevice {
\r
51 public static final String TAG = EnrolleeDeviceWiFiOnboarding.class.getName();
\r
53 final Context mContext;
\r
54 final WiFiSoftAPManager mWifiSoftAPManager;
\r
55 EnrolleeInfo connectedDevice;
\r
56 private EasySetupManager easySetupManagerNativeInstance;
\r
57 ProvisionEnrollee provisionEnrolleInstance;
\r
60 IOnBoardingStatus deviceScanListener = new IOnBoardingStatus() {
\r
63 public void deviceOnBoardingStatus(EnrolleeInfo enrolleStatus) {
\r
64 Log.d("ESSoftAPOnBoarding", "Entered");
\r
65 if (mState == EnrolleeState.DEVICE_ON_BOARDING_STATE) {
\r
66 Log.d("ESSoftAPOnBoarding", "Device in OnBoarding State");
\r
67 if (enrolleStatus != null && enrolleStatus.getIpAddr() != null) {
\r
68 String finalResult = "Easy Connect : ";
\r
70 if (enrolleStatus.isReachable()) {
\r
71 finalResult = "Device OnBoarded" + "["
\r
72 + enrolleStatus.getIpAddr() + "]";
\r
74 connectedDevice = enrolleStatus;
\r
75 IpOnBoardingConnection conn = new IpOnBoardingConnection();
\r
77 conn.setConnectivity(true);
\r
78 conn.setIp(connectedDevice.getIpAddr());
\r
79 conn.setHardwareAddress(enrolleStatus.getHWAddr());
\r
80 conn.setDeviceName(enrolleStatus.getDevice());
\r
82 Log.d("ESSoftAPOnBoarding", "Entered");
\r
83 mOnBoardingCallback.onFinished(conn);
\r
89 IpOnBoardingConnection conn = new IpOnBoardingConnection();
\r
90 conn.setConnectivity(false);
\r
91 mOnBoardingCallback.onFinished(conn);
\r
95 Log.e("ESSoftAPOnBoarding", "Device NOT in OnBoarding State. Ignoring the event");
\r
101 protected EnrolleeDeviceWiFiOnboarding(Context context, OnBoardingConfig onBoardingConfig,
\r
102 ProvisioningConfig provConfig) {
\r
103 super(onBoardingConfig, provConfig);
\r
104 mContext = context;
\r
105 mWifiSoftAPManager = new WiFiSoftAPManager(mContext);
\r
109 protected void startOnBoardingProcess() {
\r
110 Log.i(TAG, "Starting on boarding process");
\r
112 //1. Create Soft AP
\r
113 boolean status = mWifiSoftAPManager.setWifiApEnabled((WifiConfiguration)
\r
114 mOnBoardingConfig.getConfig(), true);
\r
116 mState = EnrolleeState.DEVICE_ON_BOARDING_STATE;
\r
118 Log.i(TAG, "Soft AP is created with status " + status);
\r
120 myTimer = new Timer();
\r
121 myTimer.schedule(new TimerTask() {
\r
123 public void run() {
\r
124 // Below function to be called after 5 seconds
\r
125 mWifiSoftAPManager.getClientList(deviceScanListener, 300);
\r
131 protected void stopOnBoardingProcess() {
\r
132 Log.i(TAG, "Stopping on boarding process");
\r
134 boolean status = mWifiSoftAPManager.setWifiApEnabled(null, false);
\r
135 Log.i(TAG, "Soft AP is disabled with status " + status);
\r
139 protected void startProvisioningProcess(OnBoardingConnection conn) {
\r
140 mState = EnrolleeState.DEVICE_PROVISIONING_STATE;
\r
142 if (mProvConfig.getConnType() == ProvisioningConfig.ConnType.WiFi) {
\r
144 provisionEnrolleInstance = new ProvisionEnrollee(mContext);
\r
145 provisionEnrolleInstance.registerProvisioningHandler(new IProvisioningListener() {
\r
147 public void onFinishProvisioning(int statuscode) {
\r
149 Log.i(TAG, "Provisioning is finished with status code " + statuscode);
\r
150 mState = (statuscode == 0) ? EnrolleeState.DEVICE_PROVISIONING_SUCCESS_STATE
\r
151 : EnrolleeState.DEVICE_PROVISIONING_FAILED_STATE;
\r
152 stopOnBoardingProcess();
\r
153 mProvisioningCallback.onFinished(EnrolleeDeviceWiFiOnboarding.this);
\r
157 IpOnBoardingConnection connection = (IpOnBoardingConnection) conn;
\r
158 WiFiProvConfig wifiProvConfig = (WiFiProvConfig) mProvConfig;
\r
160 easySetupManagerNativeInstance = EasySetupManager.getInstance();
\r
161 easySetupManagerNativeInstance.initEasySetup();
\r
163 // Native Api call to start provisioning of the enrolling device
\r
164 easySetupManagerNativeInstance.provisionEnrollee(connection.getIp(), wifiProvConfig
\r
165 .getSsId(), wifiProvConfig.getPassword(), mOnBoardingConfig.getConnType()
\r