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.base.OcConnectivityType;
26 import org.iotivity.service.easysetup.core.BleConnection;
27 import org.iotivity.service.easysetup.core.ConnectionInterface;
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;
39 public class EnrolleeDeviceBLEOnBoarding extends EnrolleeDevice {
41 * @param onBoardingConfig Contains details about the connectivity to be established between
42 * the Enrollee device & Mediator device in order to perform
44 * @param provConfig Contains details about the network to which Enrollee device is
46 public static final String TAG = EnrolleeDeviceWiFiOnboarding.class.getName();
48 final Context mContext;
49 BLEManager bleManager;
50 EnrolleeInfo connectedDevice;
51 ProvisionEnrollee provisionEnrolleInstance;
52 private EasySetupManager easySetupManagerNativeInstance;
55 IOnBoardingStatus deviceScanListener = new IOnBoardingStatus() {
58 public void deviceOnBoardingStatus(EnrolleeInfo enrolleStatus) {
59 Log.d("ESBLEOnBoarding", "Entered");
60 if (enrolleStatus != null && enrolleStatus.getHWAddr() != null) {
61 String finalResult = "Easy Connect : ";
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);
77 BleConnection conn = new BleConnection();
78 conn.setConnectivity(false);
79 mOnBoardingCallback.onFinished(conn);
85 protected EnrolleeDeviceBLEOnBoarding(Context context, OnBoardingConfig onBoardingConfig,
86 ProvisioningConfig provConfig) {
87 super(onBoardingConfig, provConfig);
89 bleManager = new BLEManager(mContext, (BLEOnBoardingConfig) onBoardingConfig);
93 protected void startOnBoardingProcess() {
94 Log.i(TAG, "Starging on boarding process");
96 boolean status = bleManager.setupBluetooth();
98 Log.i(TAG, "Bluetooth started with status " + status);
100 Log.i(TAG, "Scanning available BLE devices");
101 bleManager.startScan(deviceScanListener);
108 protected void stopOnBoardingProcess() {
110 bleManager.stopscan();
115 protected void startProvisioningProcess(ConnectionInterface conn) {
117 Log.i("start provisioning BLE", mProvConfig.getConnType() + "");
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 :
125 EnrolleeState.DEVICE_PROVISIONING_FAILED_STATE;
126 mProvisioningCallback.onFinished(EnrolleeDeviceBLEOnBoarding.this);
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());