Prevent issue fixes
[platform/upstream/iotivity.git] / service / easy-setup / sdk / mediator / android / EasySetupCore / src / main / java / org / iotivity / service / easysetup / impl / EnrolleeDeviceBLEOnBoarding.java
1 //******************************************************************
2 //
3 // Copyright 2015 Samsung Electronics All Rights Reserved.
4 //
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 //
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
10 //
11 //      http://www.apache.org/licenses/LICENSE-2.0
12 //
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 //
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20 package org.iotivity.service.easysetup.impl;
21
22 import android.content.Context;
23 import android.util.Log;
24
25 import org.iotivity.base.OcConnectivityType;
26 import org.iotivity.service.easysetup.core.BleConnection;
27 import org.iotivity.service.easysetup.core.OnBoardingConnection;
28 import org.iotivity.service.easysetup.core.EnrolleeDevice;
29 import org.iotivity.service.easysetup.core.EnrolleeState;
30 import org.iotivity.service.easysetup.core.OnBoardingConfig;
31 import org.iotivity.service.easysetup.core.ProvisioningConfig;
32 import org.iotivity.service.easysetup.mediator.EasySetupManager;
33 import org.iotivity.service.easysetup.mediator.EnrolleeInfo;
34 import org.iotivity.service.easysetup.mediator.IOnBoardingStatus;
35 import org.iotivity.service.easysetup.mediator.IProvisioningListener;
36 import org.iotivity.service.easysetup.mediator.ProvisionEnrollee;
37 import org.iotivity.service.easysetup.mediator.ble.BLEManager;
38
39 public class EnrolleeDeviceBLEOnBoarding extends EnrolleeDevice {
40     /**
41      * @param onBoardingConfig Contains details about the connectivity to be established between
42      * the Enrollee device & Mediator device in order to perform
43      * on-boarding
44      * @param provConfig       Contains details about the network to which Enrollee device is
45      */
46     public static final String TAG = EnrolleeDeviceWiFiOnboarding.class.getName();
47
48     final Context mContext;
49     BLEManager bleManager;
50     EnrolleeInfo connectedDevice;
51     ProvisionEnrollee provisionEnrolleInstance;
52     private EasySetupManager easySetupManagerNativeInstance;
53
54
55     IOnBoardingStatus deviceScanListener = new IOnBoardingStatus() {
56
57         @Override
58         public void deviceOnBoardingStatus(EnrolleeInfo enrolleStatus) {
59             Log.d("ESBLEOnBoarding", "Entered");
60             if (enrolleStatus != null && enrolleStatus.getHWAddr() != null) {
61                 String finalResult = "Easy Connect : ";
62
63                 if (enrolleStatus.isReachable()) {
64                     finalResult = "Device OnBoarded" + "["
65                             + enrolleStatus.getHWAddr() + "]";
66                     connectedDevice = enrolleStatus;
67                     BleConnection conn = new BleConnection();
68                     conn.setMacaddress(connectedDevice.getHWAddr());
69                     conn.setConnectivity(true);
70                     Log.d("ESBLEOnBoarding", "Entered" + ":" + finalResult);
71                     mOnBoardingCallback.onFinished(conn);
72                     return;
73
74                 }
75             }
76
77             BleConnection conn = new BleConnection();
78             conn.setConnectivity(false);
79             mOnBoardingCallback.onFinished(conn);
80
81
82         }
83     };
84
85     protected EnrolleeDeviceBLEOnBoarding(Context context, OnBoardingConfig onBoardingConfig,
86                                           ProvisioningConfig provConfig) {
87         super(onBoardingConfig, provConfig);
88         mContext = context;
89         bleManager = new BLEManager(mContext, (BLEOnBoardingConfig) onBoardingConfig);
90     }
91
92     @Override
93     protected void startOnBoardingProcess() {
94         Log.i(TAG, "Starging on boarding process");
95
96         boolean status = bleManager.setupBluetooth();
97
98         Log.i(TAG, "Bluetooth started with status " + status);
99         if (status) {
100             Log.i(TAG, "Scanning available BLE devices");
101             bleManager.startScan(deviceScanListener);
102
103         }
104
105     }
106
107     @Override
108     protected void stopOnBoardingProcess() {
109
110         bleManager.stopscan();
111
112     }
113
114     @Override
115     protected void startProvisioningProcess(OnBoardingConnection conn) {
116
117         Log.i("start provisioning BLE", mProvConfig.getConnType() + "");
118
119
120         provisionEnrolleInstance = new ProvisionEnrollee(mContext);
121         provisionEnrolleInstance.registerProvisioningHandler(new IProvisioningListener() {
122             @Override
123             public void onFinishProvisioning(int statuscode) {
124                 mState = (statuscode == 0) ? EnrolleeState.DEVICE_PROVISIONING_SUCCESS_STATE :
125                         EnrolleeState.DEVICE_PROVISIONING_FAILED_STATE;
126                 mProvisioningCallback.onFinished(EnrolleeDeviceBLEOnBoarding.this);
127             }
128         });
129
130         BleConnection connection = (BleConnection) conn;
131         WiFiProvConfig wifiProvConfig = (WiFiProvConfig) mProvConfig;
132         easySetupManagerNativeInstance = EasySetupManager.getInstance();
133         easySetupManagerNativeInstance.setApplicationContext(mContext);
134         easySetupManagerNativeInstance.initEasySetup();
135         Log.d("init", "successful");
136         OcConnectivityType ocConnectivityType = OcConnectivityType.CT_ADAPTER_GATT_BTLE;
137         easySetupManagerNativeInstance.provisionEnrollee(connection.getMacaddress(),
138                 wifiProvConfig.getSsId(),
139                 wifiProvConfig.getPassword(),
140                 ocConnectivityType.getValue());
141
142
143     }
144 }