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.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;
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 conn.setmServiceUUID(connectedDevice.getIpAddr());
71 conn.setmDeviceName(connectedDevice.getDevice());
72 Log.d("ESBLEOnBoarding", "Entered" + ":" + finalResult);
73 mOnBoardingCallback.onFinished(conn);
79 BleConnection conn = new BleConnection();
80 conn.setConnectivity(false);
81 mOnBoardingCallback.onFinished(conn);
87 protected EnrolleeDeviceBLEOnBoarding(Context context, OnBoardingConfig onBoardingConfig,
88 ProvisioningConfig provConfig) {
89 super(onBoardingConfig, provConfig);
91 bleManager = new BLEManager(mContext, (BLEOnBoardingConfig) onBoardingConfig);
95 protected void startOnBoardingProcess() {
96 Log.i(TAG, "Starging on boarding process");
98 boolean status = bleManager.setupBluetooth();
99 mState = EnrolleeState.DEVICE_ON_BOARDING_STATE;
100 Log.i(TAG, "Bluetooth started with status " + status);
102 Log.i(TAG, "Scanning available BLE devices");
103 bleManager.startScan(deviceScanListener);
110 protected void stopOnBoardingProcess() {
112 if (bleManager != null)
113 bleManager.stopscan();
118 protected void startProvisioningProcess(OnBoardingConnection conn) {
120 Log.i("start provisioning BLE", mProvConfig.getConnType() + "");
122 mState = EnrolleeState.DEVICE_PROVISIONING_STATE;
123 provisionEnrolleInstance = new ProvisionEnrollee(mContext);
124 provisionEnrolleInstance.registerProvisioningHandler(new IProvisioningListener() {
126 public void onFinishProvisioning(int statuscode) {
127 mState = (statuscode == 0) ? EnrolleeState.DEVICE_PROVISIONING_SUCCESS_STATE :
128 EnrolleeState.DEVICE_PROVISIONING_FAILED_STATE;
129 mProvisioningCallback.onFinished(EnrolleeDeviceBLEOnBoarding.this);
133 BleConnection connection = (BleConnection) conn;
134 WiFiProvConfig wifiProvConfig = (WiFiProvConfig) mProvConfig;
135 easySetupManagerNativeInstance = EasySetupManager.getInstance();
136 easySetupManagerNativeInstance.setApplicationContext(mContext);
137 easySetupManagerNativeInstance.initEasySetup();
138 Log.d("init", "successful");
139 OcConnectivityType ocConnectivityType = OcConnectivityType.CT_ADAPTER_GATT_BTLE;
140 easySetupManagerNativeInstance.provisionEnrollee(connection.getMacaddress(),
141 wifiProvConfig.getSsId(),
142 wifiProvConfig.getPassword(),
143 ocConnectivityType.getValue());