New release of SettingsApp
[profile/ivi/SettingsApp.git] / js / api-bluetooth.js
1 /*
2  * Copyright (c) 2013, Intel Corporation.
3  *
4  * This program is licensed under the terms and conditions of the
5  * Apache License, version 2.0.  The full text of the Apache License is at
6  * http://www.apache.org/licenses/LICENSE-2.0
7  *
8  */
9
10 /* Namespace */
11 var settings = settings || {};
12 settings.bluetooth = settings.bluetooth || {};
13
14 /* Module */
15 settings.bluetooth = (function() {
16
17     var default_adapter = null;
18
19     /* Adapter class */
20     var BluetoothAdapter = function(adapter) {
21             this.bt_adapter = adapter;
22             this.name = adapter.name;
23             this.powered = adapter.powered;
24             this.visible = adapter.visible;
25         };
26
27     BluetoothAdapter.prototype.setPowered = function(powered, success_cb, error_cb) {
28         if (this.bt_adapter === undefined) return;
29
30         var self = this;
31         if (powered) {
32             // Power on
33             this.bt_adapter.setPowered(true, function() {
34                 self.powered = self.bt_adapter.powered;
35                 success_cb();
36             }, function(e) {
37                 self.powered = self.bt_adapter.powered;
38                 error_cb(e);
39             });
40         } else {
41             // Power off
42             this.bt_adapter.setPowered(false, function() {
43                 self.powered = self.bt_adapter.powered;
44                 success_cb();
45             }, function(e) {
46                 self.powered = self.bt_adapter.powered;
47                 error_cb(e);
48             });
49         }
50     };
51
52     BluetoothAdapter.prototype.setVisible = function(visible, success_cb, error_cb) {
53         if (this.bt_adapter === undefined || !this.bt_adapter.powered) return;
54
55         console.log('settings.bluetooth - Failed to set bluetooth visibility - not supported');
56     };
57
58     BluetoothAdapter.prototype.startScanDevices = function(success_cb, error_cb) {
59         if (this.bt_adapter === undefined || !this.bt_adapter.powered) return;
60
61         this.bt_adapter.discoverDevices({
62             onstarted: success_cb.onstarted,
63             ondevicefound: function(device) {
64                 success_cb.ondevicefound(new BluetoothDevice(device));
65             },
66             ondevicedisappeared: success_cb.ondevicedisappeared,
67             onfinished: function(devices) {
68                 var arr = [];
69                 for (var i = 0; i < devices.length; i++) {
70                     arr.push(new BluetoothDevice(devices[i]));
71                 }
72                 success_cb.onfinished(arr);
73             }
74         }, error_cb);
75     };
76
77     BluetoothAdapter.prototype.stopScanDevices = function(success_cb, error_cb) {
78         if (this.bt_adapter === undefined || !this.bt_adapter.powered) return;
79
80         this.bt_adapter.stopDiscovery(success_cb, error_cb);
81     };
82
83     BluetoothAdapter.prototype.pairDevice = function(device_address, success_cb, error_cb) {
84         if (this.bt_adapter === undefined || !this.bt_adapter.powered) return;
85
86         this.bt_adapter.createBonding(device_address, success_cb, error_cb);
87     };
88
89     BluetoothAdapter.prototype.unpairDevice = function(device_address, success_cb, error_cb) {
90         if (this.bt_adapter === undefined || !this.bt_adapter.powered) return;
91
92         this.bt_adapter.destroyBonding(device_address, success_cb, error_cb);
93     };
94
95     /* Device class */
96     var BluetoothDevice = function(device) {
97             this.bt_device = device;
98             this.name = device.name;
99             this.address = device.address;
100             this.paired = device.isBonded;
101             this.connected = device.isConnected;
102         };
103
104     function enableBluetooth(success_cb, error_cb) {
105         wsAPI.sendRequest(WS_REQUEST_TYPE.BLUETOOTH, 'enable', true, success_cb, function(e) {
106             if (e.indexOf('Already enabled') >= 0) {
107                 console.log('bluetooth subsystem already enabled');
108                 success_cb();
109             } else {
110                 error_cb(e);
111             }
112         });
113     }
114
115     function disableBluetooth(success_cb, error_cb) {
116         wsAPI.sendRequest(WS_REQUEST_TYPE.BLUETOOTH, 'enable', false, success_cb, function(e) {
117             if (e.indexOf('Already disabled') >= 0) {
118                 console.log('bluetooth subsystem already disabled');
119                 success_cb();
120             } else {
121                 error_cb(e);
122             }
123         });
124     }
125
126     function subscribeEvents(event_callback) {
127         wsAPI.subscribeEvents(event_callback);
128     }
129
130     function unsubscribeEvents(event_callback) {
131         wsAPI.unsubscribeEvents(event_callback);
132     }
133
134     function getDefaultAdapter() {
135         try {
136             if (tizen.bluetooth.getDefaultAdapter() == null) {
137                 return null;
138             } else if (default_adapter == null) {
139                 default_adapter = new BluetoothAdapter(tizen.bluetooth.getDefaultAdapter());
140             }
141             return default_adapter;
142         } catch (e) {
143             console.error('Tizen web api missing ' + e);
144             return null;
145         }
146     };
147
148     return {
149         BluetoothAdapter: BluetoothAdapter,
150         BluetoothDevice: BluetoothDevice,
151         subscribeEvents: subscribeEvents,
152         unsubscribeEvents: unsubscribeEvents,
153         getDefaultAdapter: getDefaultAdapter
154     };
155 })();