8236d2aa6183d4265a6ef98dbacbc75e1c342f79
[profile/ivi/SettingsApp.git] / js / api-connman.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.connman = settings.connman || {};
13
14 /* Module */
15 settings.connman = (function() {
16
17     var default_adapter = null;
18
19     /* Technology class */
20     var ConnmanTechnology = function(technology_path, technology_properties) {
21             this.id = technology_path;
22             this.prop = technology_properties;
23         };
24
25     ConnmanTechnology.prototype.setPowered = function(powered, success_cb, error_cb) {
26         if (wsAPI === undefined) return;
27         if (this.setPowerInProgress) {
28             console.log('Enabling/disabling technology in progress');
29             return;
30         }
31
32         var me = this;
33         this.setPowerInProgress = true;
34         setTimeout(function() {
35             wsAPI.sendRequest(WS_REQUEST_TYPE.CONNMAN_TECHNOLOGY, 'enable', [me.id, powered], function() {
36                 me.setPowerInProgress = false;
37                 success_cb();
38             }, function(e) {
39                 if (e.indexOf('Already enabled') >= 0) {
40                     console.log('connman ' + me.prop.Type + ' already enabled');
41                     me.setPowerInProgress = false;
42                     success_cb();
43                 } else if (e.indexOf('Already disabled') >= 0) {
44                     console.log('connman ' + me.prop.Type + ' already disabled');
45                     me.setPowerInProgress = false;
46                     success_cb();
47                 } else {
48                     me.setPowerInProgress = false;
49                     error_cb(e);
50                 }
51             })
52         }, 2000);
53     };
54
55     ConnmanTechnology.prototype.getPowered = function(success_cb, error_cb) {
56         if (wsAPI === undefined) return;
57         var me = this;
58         wsAPI.sendRequest(this.prop.Type, 'is_enabled', null, function(isEnabled) {
59             if (isEnabled === undefined) {
60                 console.log('Badly formed json message: ' + json_msg);
61             }
62             me.powered = isEnabled;
63             success_cb(me.powered);
64         }, error_cb);
65     };
66
67     /* Service class */
68     ConnmanService = function(service_path, service_properties) {
69         this.id = service_path;
70         this.prop = service_properties;
71     };
72
73     ConnmanService.prototype.connect = function(passphrase, success_cb, error_cb) {
74         if (wsAPI === undefined) return;
75
76         var info = [this.id,
77         {
78             'Name': this.prop.Name,
79             'Type': this.prop.EncryptionMode,
80         }]
81
82         if (passphrase) {
83             info[1].Passphrase = passphrase;
84         }
85
86         wsAPI.sendRequest(WS_REQUEST_TYPE.CONNMAN_SERVICE, 'connect', info, success_cb, error_cb);
87     };
88
89     ConnmanService.prototype.disconnect = function(success_cb, error_cb) {
90         if (wsAPI === undefined) return;
91         wsAPI.sendRequest(WS_REQUEST_TYPE.CONNMAN_SERVICE, 'disconnect', [this.id, null], success_cb, error_cb);
92     };
93
94     ConnmanService.prototype.setAutoConnect = function(autoconnect, success_cb, error_cb) {
95         if (wsAPI === undefined) return;
96
97         var value = {
98             'path': this.id,
99             'enable': autoconnect
100         };
101
102         wsAPI.sendRequest(WS_REQUEST_TYPE.CONNMAN_SERVICE, 'autoconnect', value, success_cb, error_cb);
103     };
104
105     function getTechnologies(success_cb, error_cb) {
106         if (wsAPI === undefined) return;
107         wsAPI.sendRequest(WS_REQUEST_TYPE.CONNMAN_MANAGER, 'get_technologies', null, function(results) {
108             if (results.length >= 0 && results[0].length >= 0 && results[0][0][0] === undefined) {
109                 error_cb('Cannot parse technologies');
110                 return;
111             }
112
113             var technologies_list = results[0];
114
115             try {
116                 var technologies = [];
117                 for (var i = 0; i < technologies_list.length; i++) {
118                     if (technologies_list[i][0] === undefined || technologies_list[i][1] === undefined) {
119                         console.log('Badly form json message: ' + json_msg);
120                     }
121
122                     var technology = new settings.connman.ConnmanTechnology(technologies_list[i][0], technologies_list[i][1]);
123                     technologies.push(technology);
124                 }
125             } catch (e) {
126                 error_cb(e);
127             }
128             success_cb(technologies);
129         }, error_cb);
130     }
131
132     function getServices(success_cb, error_cb) {
133         if (wsAPI === undefined) return;
134         wsAPI.sendRequest(WS_REQUEST_TYPE.CONNMAN_MANAGER, 'get_services', null, function(results) {
135             if (results.length >= 0 && results[0].length >= 0 && results[0][0][0] === undefined) {
136                 error_cb('Cannot parse get_services results');
137                 return;
138             }
139
140             var services_list = results[0];
141
142             try {
143                 var results = [];
144                 for (var i = 0; i < services_list.length; i++) {
145                     if (services_list[i][0] === undefined || services_list[i][1] === undefined) {
146                         console.log('Badly form json message: ' + json_msg);
147                     }
148
149                     var service = new settings.connman.ConnmanService(services_list[i][0], services_list[i][1]);
150                     results.push(service);
151                 }
152             } catch (e) {
153                 error_cb(e);
154             }
155             success_cb(results);
156         }, error_cb);
157     }
158
159     function scan(technology, success_cb, error_cb) {
160         if (wsAPI === undefined) return;
161         wsAPI.sendRequest(WS_REQUEST_TYPE.CONNMAN_TECHNOLOGY, 'scan', [technology, null], function(results) {
162             if (results.length >= 0 && results[0].length >= 0 && results[0][0][0] === undefined) {
163                 error_cb('Cannot parse scan results');
164                 return;
165             }
166
167             var services_list = results[0];
168
169             try {
170                 var services = [];
171                 for (var i = 0; i < services_list.length; i++) {
172                     if (services_list[i][0] === undefined || services_list[i][1] === undefined) {
173                         console.log('Badly form json message: ' + json_msg);
174                     }
175
176                     var service = new settings.connman.ConnmanService(services_list[i][0], services_list[i][1]);
177                     services.push(service);
178                 }
179             } catch (e) {
180                 error_cb(e);
181             }
182             success_cb(services);
183         }, error_cb);
184     };
185
186     return {
187         ConnmanTechnology: ConnmanTechnology,
188         ConnmanService: ConnmanService,
189         getTechnologies: getTechnologies,
190         getServices: getServices,
191         scan: scan
192     };
193 })();