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