4 * Nokia Web Runtime Service API emulation
\r
7 * Copyright 2009 Nokia Corporation. All rights reserved.
\r
12 var provider = 'Service.Sensor',
\r
13 Interface = 'ISensor';
\r
14 var transID = new Array();
\r
18 var SensorService = function(){
\r
19 this.FindSensorChannel = __FindSensorChannel;
\r
20 this.RegisterForNotification = __RegisterForNotification;
\r
21 this.Cancel = __Cancel;
\r
22 this.GetChannelProperty = __GetChannelProperty;
\r
25 device.implementation.extend(provider, Interface, new SensorService() );
\r
27 /******************************************************/
\r
28 /******************************************************/
\r
29 /******************************************************/
\r
31 var context = device.implementation.context,
\r
39 * Sensor: FindSensorChannel
\r
40 * @param {Object} criteria
\r
42 function __FindSensorChannel(criteria){
\r
43 method = 'FindSensorChannel';
\r
45 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgCriteriaMissing);
\r
47 if(typeof criteria != 'object')
\r
48 return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgCriteriaMissing);
\r
50 if(typeof criteria.SearchCriterion == 'undefined')
\r
51 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgDataMissing);
\r
53 if(typeof criteria.SearchCriterion != 'string')
\r
54 return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgidInvalid);
\r
56 if(!(criteria.SearchCriterion== "All" || criteria.SearchCriterion== "AccelerometerAxis" || criteria.SearchCriterion=="AccelerometerDoubleTapping" || criteria.SearchCriterion=="Orientation" || criteria.SearchCriterion=="Rotation"))
\r
57 return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgSearchParamInvalid);
\r
59 if(arguments.length > 1)
\r
60 return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgCriteriaMissing);
\r
62 DBase = context.getData(provider);
\r
64 returnValue = DBase[criteria.SearchCriterion] || [] ;
\r
66 return context.Result(returnValue,0);
\r
72 * Sensor: RegisterForNotification
\r
73 * @param {Object} criteria, callback
\r
75 function __RegisterForNotification(criteria, callback, flag){
\r
76 flag = flag || false;
\r
77 method = 'RegisterForNotification';
\r
78 context.notify(_t('%s:: RegisterForNotification not implemented in preview').arg(provider));
\r
80 if(arguments.length >2 && (typeof flag != "undefined" && typeof flag != "boolean"))
\r
81 return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgCriteriaMissing);
\r
83 if(typeof callback != 'function')
\r
84 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgInsufficentArgument);
\r
88 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgIncompleteInput);
\r
90 if(typeof criteria != 'object')
\r
91 return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgIncompleteInput);
\r
93 if(typeof criteria.ListeningType == 'undefined' || typeof criteria.ChannelInfoMap == 'undefined')
\r
94 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgIncompleteInput);
\r
96 if(typeof criteria.ListeningType != 'string')
\r
97 return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgListenTypeInvalid);
\r
99 if(typeof criteria.ChannelInfoMap != 'object')
\r
100 return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgChannelInfoMapInvalid);
\r
102 if(!(criteria.ListeningType== "ChannelData" ))
\r
103 return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgOutofRange);
\r
105 if(typeof callback == 'function')
\r
107 var result = context.callAsync(this, arguments.callee, criteria, callback);
\r
108 transID.push(result.TransactionID);
\r
114 return context.ErrorResult();
\r
120 * @param {Object} criteria
\r
122 function __Cancel(criteria){
\r
125 if(arguments.length > 1 && typeof criteria != "object" && typeof criteria.TransactionID != "number" && arguments[1])
\r
126 return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgCriteriaMissing);
\r
128 if (!criteria || typeof criteria.TransactionID == 'undefined')
\r
129 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgTransIDMissing);
\r
131 if (criteria.TransactionID == Infinity || criteria.TransactionID == -Infinity)
\r
132 return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgTransIDMissing);
\r
134 if (typeof criteria.TransactionID != 'number')
\r
135 return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgIncorrectTransID);
\r
137 for (var i=0; i<transID.length; i++) {
138 if (criteria.TransactionID == transID[i]){
\r
139 clearTimeout(criteria.TransactionID);
\r
140 return context.ErrorResult();
\r
144 return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgInvalidTransID);
\r
150 * Sensor: GetChannelProperty
\r
151 * @param {Object} criteria
\r
153 function __GetChannelProperty(criteria){
\r
154 method = 'GetChannelProperty';
\r
157 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgIncompleteInput);
\r
159 if(typeof criteria != 'object')
\r
160 return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgIncompleteInput);
\r
162 if(typeof criteria.ChannelInfoMap == 'undefined' || typeof criteria.PropertyId == 'undefined')
\r
163 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgIncompleteInput);
\r
165 if(typeof criteria.ChannelInfoMap != 'object')
\r
166 return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgChannelInfoMapInvalid);
\r
168 if(typeof criteria.PropertyId != 'string')
\r
169 return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgInvalidPropertyID);
\r
171 if(criteria.PropertyId != 'Availability' && criteria.PropertyId != "ChannelAccuracy" && criteria.PropertyId != "ChannelDataFormat" && criteria.PropertyId != "ChannelScale" && criteria.PropertyId != "ChannelUnit" && criteria.PropertyId != "ConnectionType" && criteria.PropertyId != "DataRate" && criteria.PropertyId != "Description" && criteria.PropertyId != "MeasureRange" && criteria.PropertyId != "ScaledRange" && criteria.PropertyId != "SensorModel")
\r
172 return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgInvalidPropertyID);
\r
174 if(arguments.length > 1)
\r
175 return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgCriteriaMissing);
\r
177 DBase = context.getData(provider);
\r
178 var property = DBase['SensorProperty'];
\r
179 if(typeof criteria.ChannelInfoMap['ChannelId'] == 'undefined' || typeof criteria.ChannelInfoMap['ChannelId'] != 'number')
\r
180 return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgChannelInfoMapInvalid);
\r
182 var channel = null;
\r
183 if(criteria.ChannelInfoMap['ChannelId'] == 7)
\r
185 channel = 'AccelerometerAxis';
\r
187 else if(criteria.ChannelInfoMap['ChannelId'] == 8)
\r
189 channel = 'AccelerometerDoubleTapping';
\r
191 else if(criteria.ChannelInfoMap['ChannelId'] == 10)
\r
193 channel = 'Orientation';
\r
195 else if(criteria.ChannelInfoMap['ChannelId'] == 11)
\r
197 channel = 'Rotation';
\r
200 if(channel == null)
\r
201 return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgChannelInfoMapInvalid);
\r
203 var returnValue = property[channel][criteria.PropertyId];
\r
204 if(typeof returnValue == 'undefined')
\r
205 return context.ErrorResult(device.implementation.ERR_NOT_FOUND);
\r
206 return context.Result(returnValue,0)
\r
211 * @param {number,string} ErrorCode and ErrorString
\r
212 * Replaces Error String with method name
\r
214 function error(code, msg /*, args...*/){
\r
216 var args = ['Sensors',method].concat([].slice.call(arguments,2));
\r
217 msg = msg ? _t().arg.apply(msg,args) : undefined;
\r
218 return context.ErrorResult(code, msg);
\r
224 * order of %s args: Service name, method name, parameter name
\r
227 msgInterfaceNotSupported : '%s:Requested interface not supported by the provider',
\r
228 msgInterfaceMissing : '%s:Interface name missing',
\r
229 msgInsufficentArgument : '%s:%s:Insufficent argument for asynchronous request',
\r
230 msgListenTypeMissing : '%s:%s:Listening type missing',
\r
231 msgListenTypeInvalid : '%s:%s:Listening type is invalid',
\r
232 msgChannelInfoMissing : '%s:%s:ChannelInfoMap missing',
\r
233 msgIncompleteInput : '%s:%s:Incomplete input param list',
\r
234 msgOutofRange : '%s:%s:Listening type is out of allowed range',
\r
235 msgCallbackMissing : '%s:%s:Callback missing',
\r
236 msgAlreadyRegistered : '%s:%s:Notification is already registered on this channel',
\r
237 msgCriteriaMissing : '%s:%s:Search criterion is missing',
\r
238 msgInvalidSearchCriteria : '%s:%s:Invalid Search Criterion',
\r
239 msgChannelSearchInvalid : '%s:%s:Channel search param type invalid',
\r
240 msgSearchParamInvalid : '%s:%s:Invalid channel search param',
\r
241 msgTransIDMissing : '%s:%s:Transaction id is missing',
\r
242 msgIncorrectTransID : '%s:%s:Incorrect TransactionID',
\r
243 msgInvalidTransID : '%s:%s:Invalid TransactionID',
\r
244 msgPropertyIDMissing : '%s:%s:Property id missing',
\r
245 msgInvalidPropertyID : '%s:%s:Property id is invalid',
\r
246 msgChannelNotSupported : '%s:%s:Channel property not supported',
\r
247 msgChannelInfoMapInvalid : '%s:%s:ChannelInfoMap Type Invalid'
\r