mypackage_wrt/preview/script/lib/sapi/Sensor.js
changeset 42 20be4dd42b12
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mypackage_wrt/preview/script/lib/sapi/Sensor.js	Fri Apr 30 15:01:03 2010 +0100
@@ -0,0 +1,250 @@
+/**
+ * Sensor.js
+ * 
+ * Nokia Web Runtime Service API emulation 
+ * WRT v1.1
+ * 
+ * Copyright 2009 Nokia Corporation. All rights reserved.
+*/
+
+(function(){
+
+	var provider = 'Service.Sensor',
+		Interface = 'ISensor';
+	var transID = new Array();
+	/**
+	 * Sensor service
+	 */
+	var SensorService = function(){
+		this.FindSensorChannel 			= __FindSensorChannel;
+		this.RegisterForNotification	= __RegisterForNotification;
+		this.Cancel						= __Cancel;
+		this.GetChannelProperty			= __GetChannelProperty;		
+	}
+
+	device.implementation.extend(provider, Interface, new SensorService() );
+
+	/******************************************************/	
+	/******************************************************/	
+	/******************************************************/	
+
+	var	context = device.implementation.context,
+		_t = context._t,
+		method = '',
+		result = false,
+		DBase = null;
+
+
+	/**
+	 * Sensor: FindSensorChannel
+	 * @param {Object} criteria
+	 */
+	function __FindSensorChannel(criteria){
+		method = 'FindSensorChannel';
+		if(!criteria)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgCriteriaMissing);
+			
+		if(typeof criteria != 'object')
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgCriteriaMissing);
+						
+		if(typeof criteria.SearchCriterion == 'undefined')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgDataMissing);
+
+		if(typeof criteria.SearchCriterion != 'string')
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgidInvalid);
+
+		if(!(criteria.SearchCriterion== "All" || criteria.SearchCriterion== "AccelerometerAxis" || criteria.SearchCriterion=="AccelerometerDoubleTapping" || criteria.SearchCriterion=="Orientation" || criteria.SearchCriterion=="Rotation"))
+		 	return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgSearchParamInvalid);
+
+		if(arguments.length > 1)
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgCriteriaMissing);			
+
+		DBase = context.getData(provider);
+		var returnValue;
+		returnValue = DBase[criteria.SearchCriterion] || [] ;
+		
+		return context.Result(returnValue,0);			
+	}
+
+
+
+	/**
+	 * Sensor: RegisterForNotification
+	 * @param {Object} criteria, callback
+	 */
+	function __RegisterForNotification(criteria, callback, flag){
+		flag = flag || false;
+		method = 'RegisterForNotification';
+		context.notify(_t('%s:: RegisterForNotification not implemented in preview').arg(provider));
+		
+		if(arguments.length >2 && (typeof flag != "undefined" && typeof flag != "boolean"))
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgCriteriaMissing);
+
+		if(typeof callback != 'function')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgInsufficentArgument);
+		
+		
+		if(!criteria)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgIncompleteInput);
+			
+		if(typeof criteria != 'object')
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgIncompleteInput);
+						
+		if(typeof criteria.ListeningType == 'undefined' || typeof criteria.ChannelInfoMap == 'undefined')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgIncompleteInput);
+
+		if(typeof criteria.ListeningType != 'string')
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgListenTypeInvalid);
+			
+		if(typeof criteria.ChannelInfoMap != 'object')
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgChannelInfoMapInvalid);
+		
+		if(!(criteria.ListeningType== "ChannelData" ))
+		 	return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgOutofRange);
+
+		if(typeof callback == 'function')
+		{
+			var result = context.callAsync(this, arguments.callee, criteria, callback);
+			transID.push(result.TransactionID);
+			return result;
+		}
+		if(flag)
+			transID.shift();
+				
+		return context.ErrorResult();
+	}
+
+
+	/**
+	 * Sensor: Cancel
+	 * @param {Object} criteria
+	 */
+	function __Cancel(criteria){
+		method = 'Cancel';
+
+		if(arguments.length > 1 && typeof criteria != "object" && typeof criteria.TransactionID != "number" && arguments[1])
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgCriteriaMissing);
+
+		if (!criteria || typeof criteria.TransactionID == 'undefined') 
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgTransIDMissing);
+
+		if (criteria.TransactionID == Infinity || criteria.TransactionID == -Infinity) 
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgTransIDMissing);
+		
+		if (typeof criteria.TransactionID != 'number') 
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgIncorrectTransID);		
+
+		for (var i=0; i<transID.length; i++) {
+			if (criteria.TransactionID == transID[i]){
+				clearTimeout(criteria.TransactionID);
+				return context.ErrorResult();
+			}
+		};
+		
+		return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgInvalidTransID);
+
+	}
+
+
+	/**
+	 * Sensor: GetChannelProperty
+	 * @param {Object} criteria
+	 */
+	function __GetChannelProperty(criteria){
+		method = 'GetChannelProperty';
+
+		if(!criteria)
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgIncompleteInput);
+			
+		if(typeof criteria != 'object')
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgIncompleteInput);
+
+		if(typeof criteria.ChannelInfoMap == 'undefined' || typeof criteria.PropertyId == 'undefined')
+			return error(device.implementation.ERR_MISSING_ARGUMENT, msg.msgIncompleteInput);
+		
+		if(typeof criteria.ChannelInfoMap != 'object')
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgChannelInfoMapInvalid);
+		
+		if(typeof criteria.PropertyId != 'string')
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgInvalidPropertyID);
+		
+		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")
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgInvalidPropertyID);
+
+		if(arguments.length > 1)
+			return error(device.implementation.ERR_INVALID_SERVICE_ARGUMENT, msg.msgCriteriaMissing);			
+
+		DBase = context.getData(provider);
+		var property = DBase['SensorProperty'];
+		if(typeof criteria.ChannelInfoMap['ChannelId'] == 'undefined' || typeof criteria.ChannelInfoMap['ChannelId'] != 'number')
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgChannelInfoMapInvalid);
+
+		var channel = null;
+		if(criteria.ChannelInfoMap['ChannelId'] == 7)
+		{
+			channel = 'AccelerometerAxis';
+		}
+		else if(criteria.ChannelInfoMap['ChannelId'] == 8)
+		{
+			channel = 'AccelerometerDoubleTapping';
+		}
+		else if(criteria.ChannelInfoMap['ChannelId'] == 10)
+		{
+			channel = 'Orientation';
+		}
+		else if(criteria.ChannelInfoMap['ChannelId'] == 11)
+		{
+			channel = 'Rotation';
+		}
+	
+		if(channel == null)
+			return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.msgChannelInfoMapInvalid);
+		
+		var returnValue = property[channel][criteria.PropertyId];
+		if(typeof returnValue == 'undefined')
+			return context.ErrorResult(device.implementation.ERR_NOT_FOUND);
+		return context.Result(returnValue,0)
+	}
+
+	/**
+	 * Sensor: error
+	 * @param {number,string} ErrorCode and ErrorString
+	 * Replaces Error String with method name
+	 */
+	function error(code, msg /*, args...*/){
+
+		var args = ['Sensors',method].concat([].slice.call(arguments,2));
+		msg = msg ? _t().arg.apply(msg,args) : undefined;
+		return context.ErrorResult(code, msg);
+	}
+
+
+	/** 
+	 * error messages
+	 * order of %s args: Service name, method name, parameter name 
+	 */
+	var msg = {	
+		msgInterfaceNotSupported 	: '%s:Requested interface not supported by the provider',
+		msgInterfaceMissing 		: '%s:Interface name missing',
+		msgInsufficentArgument 		: '%s:%s:Insufficent argument for asynchronous request',
+		msgListenTypeMissing 		: '%s:%s:Listening type missing',
+		msgListenTypeInvalid		: '%s:%s:Listening type is invalid',
+		msgChannelInfoMissing		: '%s:%s:ChannelInfoMap missing',
+		msgIncompleteInput			: '%s:%s:Incomplete input param list',
+		msgOutofRange				: '%s:%s:Listening type is out of allowed range',
+		msgCallbackMissing			: '%s:%s:Callback missing',
+		msgAlreadyRegistered		: '%s:%s:Notification is already registered on this channel',
+		msgCriteriaMissing			: '%s:%s:Search criterion is missing',
+		msgInvalidSearchCriteria	: '%s:%s:Invalid Search Criterion',
+		msgChannelSearchInvalid		: '%s:%s:Channel search param type invalid',
+		msgSearchParamInvalid		: '%s:%s:Invalid channel search param',
+		msgTransIDMissing			: '%s:%s:Transaction id is missing',
+		msgIncorrectTransID			: '%s:%s:Incorrect TransactionID',
+		msgInvalidTransID			: '%s:%s:Invalid TransactionID',
+		msgPropertyIDMissing		: '%s:%s:Property id missing',
+		msgInvalidPropertyID		: '%s:%s:Property id is invalid',
+		msgChannelNotSupported		: '%s:%s:Channel property not supported',
+		msgChannelInfoMapInvalid	: '%s:%s:ChannelInfoMap Type Invalid'
+	};
+
+}) ()
\ No newline at end of file