1 //******************************************************************
3 // Copyright 2015 Samsung Electronics All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
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
11 // http://www.apache.org/licenses/LICENSE-2.0
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.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20 package org.iotivity.service.easysetup.impl;
22 import android.content.Context;
23 import android.util.Log;
25 import org.iotivity.service.easysetup.core.BleConnection;
26 import org.iotivity.service.easysetup.core.OnBoardingConnection;
27 import org.iotivity.service.easysetup.core.EnrolleeDevice;
28 import org.iotivity.service.easysetup.core.EnrolleeState;
29 import org.iotivity.service.easysetup.core.OnBoardingConfig;
30 import org.iotivity.service.easysetup.core.ProvisioningConfig;
31 import org.iotivity.service.easysetup.mediator.EasySetupManager;
32 import org.iotivity.service.easysetup.mediator.EnrolleeInfo;
33 import org.iotivity.service.easysetup.mediator.IOnBoardingStatus;
34 import org.iotivity.service.easysetup.mediator.IProvisioningListener;
35 import org.iotivity.service.easysetup.mediator.ProvisionEnrollee;
36 import org.iotivity.service.easysetup.mediator.ble.BLEManager;
38 public class EnrolleeDeviceBLEOnBoarding extends EnrolleeDevice {
40 * @param onBoardingConfig Contains details about the connectivity to be established between
41 * the Enrollee device & Mediator device in order to perform
43 * @param provConfig Contains details about the network to which Enrollee device is
45 public static final String TAG = EnrolleeDeviceWiFiOnboarding.class.getName();
47 final Context mContext;
48 BLEManager bleManager;
49 EnrolleeInfo connectedDevice;
50 ProvisionEnrollee provisionEnrolleInstance;
51 private EasySetupManager easySetupManagerNativeInstance;
54 IOnBoardingStatus deviceScanListener = new IOnBoardingStatus() {
57 public void deviceOnBoardingStatus(EnrolleeInfo enrolleStatus) {
58 Log.d("ESBLEOnBoarding", "Entered");
59 if (enrolleStatus != null && enrolleStatus.getHWAddr() != null) {
60 String finalResult = "Easy Connect : ";
62 if (enrolleStatus.isReachable()) {
63 finalResult = "Device OnBoarded" + "["
64 + enrolleStatus.getHWAddr() + "]";
65 connectedDevice = enrolleStatus;
66 BleConnection conn = new BleConnection();
67 conn.setMacaddress(connectedDevice.getHWAddr());
68 conn.setConnectivity(true);
69 Log.d("ESBLEOnBoarding", "Entered" + ":" + finalResult);
70 mOnBoardingCallback.onFinished(conn);
76 BleConnection conn = new BleConnection();
77 conn.setConnectivity(false);
78 mOnBoardingCallback.onFinished(conn);
84 protected EnrolleeDeviceBLEOnBoarding(Context context, OnBoardingConfig onBoardingConfig, ProvisioningConfig provConfig) {
85 super(onBoardingConfig, provConfig);
87 bleManager = new BLEManager(mContext, (BLEOnBoardingConfig) onBoardingConfig);
91 protected void startOnBoardingProcess() {
92 Log.i(TAG, "Starging on boarding process");
94 boolean status = bleManager.setupBluetooth();
96 Log.i(TAG, "Bluetooth started with status " + status);
98 Log.i(TAG, "Scanning available BLE devices");
99 bleManager.startScan(deviceScanListener);
106 protected void stopOnBoardingProcess() {
108 bleManager.stopscan();
113 protected void startProvisioningProcess(OnBoardingConnection conn) {
115 Log.i("start provisioning BLE", mProvConfig.getConnType() + "");
117 //if (mProvConfig.getConnType() == ProvisioningConfig.ConnType.WiFi)
120 provisionEnrolleInstance = new ProvisionEnrollee(mContext);
121 provisionEnrolleInstance.registerProvisioningHandler(new IProvisioningListener() {
123 public void onFinishProvisioning(int statuscode) {
124 mState = (statuscode == 0) ? EnrolleeState.DEVICE_PROVISIONING_SUCCESS_STATE : EnrolleeState.DEVICE_PROVISIONING_FAILED_STATE;
125 mProvisioningCallback.onFinished(EnrolleeDeviceBLEOnBoarding.this);
129 BleConnection connection = (BleConnection) conn;
130 WiFiProvConfig wifiProvConfig = (WiFiProvConfig) mProvConfig;
131 if (mContext == null)
132 Log.d("BLE context is null", "");
133 else Log.d("BLE context is not null", "");
134 easySetupManagerNativeInstance = EasySetupManager.getInstance();
137 easySetupManagerNativeInstance.setApplicationContext(mContext);
138 easySetupManagerNativeInstance.initEasySetup();
139 Log.d("init", "successful");
140 easySetupManagerNativeInstance.provisionEnrollee(connection.getMacaddress(), wifiProvConfig.getSsId(), wifiProvConfig.getPassword(), 0);