2009/dap/system-info Sensors.html,1.5,1.6

Update of /sources/public/2009/dap/system-info
In directory hutz:/tmp/cvs-serv19417/system-info

Modified Files:
	Sensors.html 
Log Message:
Updated with f2f and from workgroup

Index: Sensors.html
===================================================================
RCS file: /sources/public/2009/dap/system-info/Sensors.html,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- Sensors.html	7 Oct 2011 14:22:54 -0000	1.5
+++ Sensors.html	11 Nov 2011 17:13:04 -0000	1.6
@@ -11,14 +11,14 @@
       var respecConfig = {
 	  specStatus:           "ED",
           shortName:            "sensor",
-          publishDate:  "2011-10-07",
+          publishDate:  "2011-11-10",
           //previousPublishDate:  "2011-06-02",
           previousMaturity:  "WD",
-          edDraftURI:           "http://dev.w3.org/2009/dap/sensors.html",
+          edDraftURI:           "http://dev.w3.org/2009/dap/Sensors.html",
           // lcEnd: "2009-08-05",
            editors: [
     	            {name: "Dzung D Tran", company: "Intel"},
-    	            {name: "Jose Manuel Cantera Fonseca", company: "Telefonica - WAC"}
+    	            {name: "José Manuel Cantera Fonseca", company: "Telefónica"}
     		    ],
           inlineCSS:    true,
           noIDLIn:      true,
@@ -38,10 +38,7 @@
   </head>
   <body>
 	<section id='abstract'>
-      This specification defines a generic API for getting access to information provided by the physical sensors available on a hosting device.
-    </section>
-    <section class='introductory'>
-			<h2>Introduction</h2>
+      This specification defines a generic API for getting access to information provided by sensors available from a hosting device.
     </section>
 
 <!--***************************************Sensors***********************************************-->
@@ -49,16 +46,16 @@
 		<h2>Introduction</h2>
 		<p>This section is non-normative</p>
 		<p>This specification defines an API that allows application code to obtain information given by the various 
-		physical sensors available on the hosting device. The information provided through this API is 
+		sensors available on a hosting device. The information provided through this API is 
 		raw sensor data. The specification is aimed at covering 
 		well-known sensors that are commonly found in devices.  
-                Nonetheless, the API is extensible, allowing to integrate vendor specific sensors if necessary .</p>
+                Nonetheless, the API is extensible, allowing to integrate vendor or external specific sensors if necessary .</p>
 		
 		<section>
 		<p>The following code snippet illustrates how to monitor sensor data, for instance the ambient temperature:</p>
 		<pre class="example sh_javascript_dom">
-			var sensorConnection = new navigator.sensor.Connection('Temperature');
-			sensorConnection.addEventListener('sensordata', function(e) {
+			var sensorCnx = new SensorConnection('Temperature');
+			sensorCnx.addEventListener('sensordata', function(e) {
 				if(e.data > 20.0) {
 					window.console.log('Temperature is too high!!!!');
 				}
@@ -67,6 +64,22 @@
 			var watchOptions = { interval: (15 * 60 * 1000) };
 			session.startWatch(watchOptions);
 		</pre>
+		
+		<p>The following code snippet illustrates how to discover all sensors available from the device:</p>
+		<pre class="example sh_javascript_dom">
+			var sensorReq = navigator.findSensors();
+			
+			sensorReq.onsuccess = function() {
+			  for(var count = 0; count < this.result.length; count++) {
+			    window.console.log("Discovered: " + this.result[count].name);
+			  }
+			}
+			
+			sensorReq.onerror = function() {
+			  window.console.error(this.error.code);
+			}
+		</pre>
+		
 		</section>
 	</section>
 
@@ -87,53 +100,110 @@
 
 <section>
 	<h2>Security and Privacy Considerations</h2>
-	<p class="note">To be defined</p>
+	<p>A conforming implementation of this specification must provide a mechanism that protects the user's privacy and this mechanism should ensure that
+	no sensitive information is made available through this API without the user's express permission. User agents must acquire permission through a user interface,
+	unless they have prearranged trust relationships with users. </p>
 </section>
 
-<section>
-		<h2>SensorManager</h3>
-                
-                <div class="issue">
-                    This interface is still under discussion. The intention is to have basic support for discovery in the API. 
-                </div>
-                
-                <p>
-		The SensorManager object is an event target that MUST be used to request a list of sensors that are available on the 
-		hosting device. The sensor information is acquired by calling platform native sensor interfaces, creating a list of 
-		Sensor objects, and populating that object with appropriate data accordingly. </p>
+<section id="discovery">
+	<h2>Sensor Discovery</h2>
+	  <section>
+	       <div class='idl' title='Navigator implements SensorManager'></div>
+	  </section>
+	  
+	  <section>
+		<h3><a>SensorManager</a></h3>
+		This is an asynchronous API that returns without blocking the calling thread. 
+		 <p>
+                     This interface allows applications to discover what sensors are available from the device.           
+		 The sensor information is acquired by calling platform native sensor interfaces, creating a list of 
+		Sensor objects, and populating that object with appropriate data accordingly.		  
+		 </p>
                 
-		<dl title='interface SensorManager : EventTarget' class='idl'>
-				<dt>Sensor[] listSensors(optional DOMString type)</dt>
-				<dd>
-					When invoked the user agent MUST run a <em>listSensors process</em> that will call platform native sensor interfaces
-                                        to fill a list of <code>Sensor</code> objects that will contain sensors metadata.
-                                        If the argument <code>type</code> is set, only sensors of the specified <code>type</code> MUST be returned. Otherwise it MUST
-                                        be returned the entire list obtained initially. 
-				</dd>
-				
-				<dt>attribute Function? onsensoravailable</dt>
+		<dl title='[NoInterfaceObject] interface SensorManager' class='idl'>
+				<dt>SensorRequest findSensors(optional DOMString type)</dt>
 				<dd>
-				Allows to set an event handler that will be invoked when a new sensor is available
+					<p>When invoked the user agent MUST immediately return a <a>SensorRequest</a> instance (with done flag set to false), which 
+					 does not initially contain any information about the result of the operation. If the user permissions are ok then the UA MUST 					
+					queue a new <em>listSensors process</em> that will call platform native sensor interfaces
+                                        to fill a list of <code>Sensor</code> objects that will contain metadata about the sensors hosted by the device. 
+                                        If the argument <code>type</code> is set, only sensors of the specified <code>type</code> MUST be obtained. </p>
+					<p>If user permissions are not ok the process must finish and  an error event on the request with error code <code>PERMISSION_DENIED</code> MUST be fired. 
+					<p>
+					Once the <em>listSensors process</em> finishes without error, an event is fired on the request, the done flag is set to true and the information becomes available through
+					the properties of the <a>SensorRequest</a> instance. If an error occurs while performing the operation,
+					the <a>readyState</a> is changed to <code>done</code>, the <a>error</a> is set to the code of the error, and a event with type error is fired at the request.</p>
+					
+					<p>User Agents MAY run additional processes to discover remote sensors available in the current context.</p>
 				</dd>
-		</dl>	
+		</dl>
+	  </section>
+	  
+	  <section>
+		<h3><a>SensorRequest</a></h3>
+		  This interface provides means to access results of asynchronous sensor discovery requests.
+		  
+		  <dl title='[NoInterfaceObject] interface SensorRequest' class='idl'>
+		      <dt>readonly attribute Sensor[] result</dt>
+		      <dd>
+			When the done flag is true, getting this property MUST return list of sensors discovered.
+			This is undefined when the request resulted in an error. When the done flag is false, getting this property must throw a <a><code>InvalidStateError</code></a>.
+			<dl class="getraises" title="DOMException">
+			  <dt><a>InvalidStateError</a></dt>
+			<dd>Thrown when this attribute was read when the <a title="request done">done</a> flag was set to false.</dd>
+			</dl>
+
+		      </dd>
+		      <dt>readonly attribute SensorError error</dt>
+		       <dd>
+			When the <a title="request done">done</a> flag is true, getting this property MUST return the error of
+                                 the request. This is null when no error occurred. When the <a title="request done">done</a> flag is false, getting this property
+                                 MUST throw a <code>DOMException</code> of type <a>InvalidStateError</a>. 
+                        <dl class="getraises" title="DOMException">
+                            <dt><a>InvalidStateError</a></dt>
+                             <dd>Thrown when this attribute was read when the <a title="request done">done</a> flag was set to false.</dd>
+	                </dl>
+		      </dd>
+		      <dt>
+			  readonly attribute DOMString readyState</dt> 
+		      </dt>
+		      <dd>Represents the status of the request. It MUST be set to one of the following:
+			<ul>
+			  <li><code>processing</code>. If the done flag is false.</li>
+			  <li><code>done</code>. If the done flag is true. </li>
+			</ul>
+		      </dd>
+		      <dt>attribute Function onsuccess</dt>
+		       <dd>
+			The event handler for the success event
+		      </dd>
+		      <dt>attribute Function onerror</dt>
+		       <dd>
+			 The event handler for the error event
+		       </dd>
+		  </dl>
+		  
+		</section>
 </section>
 
 <section>
-	<h2>Sensor</h2>
+    <h2>Sensor Metadata</h2>
+    <section>
+	<h3><a>Sensor</a></h3>
 		The <code>Sensor</code> object contains different attributes that provide sensor metadata. 
-		<dl title='dictionary Sensor' class='idl'>
+		<dl title='[NoInterfaceObject] interface Sensor' class='idl'>
 			<dt>readonly attribute float? resolution</dt>
 			<dd>
 				It must return the sensor's resolution of the sensor in the sensor's unit or <code>null</code> 
                                     if this parameter is not known to the implementation.
 			</dd>
-			<dt>readonly attribute int? minDelay</dt>
+			<dt>readonly attribute short? minDelay</dt>
 			<dd>
 	 			It must return the minimum delay allowed between two sensor data events in microseconds or zero if only sensor 
                                 data events are dispatched when there is a change in the measured magnitude. 
                                 <code>null</code> must be returned if this parameter is not known to the implementation.
 			</dd>
-			<dt>readonly attribute int? range</dt>
+			<dt>readonly attribute short? range</dt>
 			<dd>
 	 			It must return the maximum range of the sensor in the sensor's unit or <code>null</code> if it is not known.
 			</dd>
@@ -154,16 +224,24 @@
                                 It must return a string that identifies the vendor of the sensor. <code>null</code> if this data is not available. 
                         </dd>
 		</dl>
+    </section>
 </section>
-		
+	
+	<section>
+	  <h2>Sensor Data</h2>
 <section>
-		<h2>SensorConnection Interface</h2>
+		<h3>SensorConnection Interface</h3>
 		The SensorConnection object is an event target that MUST be used to request a connection to a sensor of a 
 		specified type on the hosting device. The sensor connection is acquired by calling platform native sensor interfaces.
-		<dl title='[Constructor(DOMString type,optional DOMString name)] interface SensorConnection : EventTarget' class='idl'>
-        		<dt>readonly attribute Sensor sensor</dt>
+		<dl title='[Constructor(DOMString type),Constructor(SensorOptions options)] interface SensorConnection : EventTarget' class='idl'>
+        		<dt>readonly attribute Sensor sensor </dt>
         		<dd>
-          		Represents the sensor type that is currently connected to this event target. 
+          		Represents the metadata of the sensor that is currently connected to this event target.
+			
+			<dl class="getraises" title="DOMException">
+			  <dt><a>InvalidStateError</a></dt>
+			<dd>Thrown when this attribute was read and the sensor connection was in the "new" state.</dd>
+			</dl>
 		        </dd>
           		
           		<dt>readonly attribute DOMString status</dt>
@@ -171,20 +249,27 @@
           		Represents the current status of the event target. The status MUST be set to one of the
           		following:
 			  	<ul>
+				        <li><code>new</code>. The object has been instantiated but a connection to the sensor has not been established yet. </li>
 			  		<li><code>open</code>. All the infrastructure to get sensor data is ready.</li>
 			  		<li><code>watching</code>. The sensor is under monitoring.</li>
                                        <li><code>disconnected</code>. The connection with the sensor has been lost.</li>
 			  		<li><code>error</code>. An error has occured</li>
 			  	</ul>
           		</dd>
+			
+			<dt>readonly attribute SensorError? error</dt>
+			<dd>The code attribute of a SensorError object must return the code for the error. This is null when no error occurred.</dd>
 
 			<dt>attribute Function? onerror</dt>
 			<dd>Allows to set an event handler that will be invoked when the sensor connection is in error</dd>
 
 			<dt>attribute Function? onsensordata</dt>
 			<dd>Allows to set an event handler that will be invoked when new sensor data is available</dd>
+			
+			<dt>attribute Function? onstatuschange</dt>
+			<dd>Allows to set an event handler that will be invoked when connection status change</dd>
                         
-                        <dt>attribute Function? oncalibrationneeded</dt>
+                        <dt>attribute Function? oncalibneed</dt>
                         <dd>Allows to set an event handler that will be invoked when the sensor needs calibration</dd>
                         
 			<dt>void read()</dt>
@@ -210,8 +295,10 @@
 						<li>If  <a>status</a> is other than <code>open</code> an ILLEGAL_STATE exception MUST be thrown</li>
 						<li>If <a>status</a> is <code>open</code> then run the following sub-steps: </li>
 						<ol>
-							<li>Queue a task <var>TWatch</var> in charge of invoking the  platform native interfaces to start monitoring sensor values in accordance with the parameters specified as part of <a>SensorWatchOptions</a> argument. Then, return immediately to the caller. </li>
-							<li>If <var>TWatch</var> succeeds, the <a>status</a> attribute MUST be set to the <code>watching</code> value.</li>
+							<li>Queue a task <var>TWatch</var> in charge of invoking the  platform native interfaces to start monitoring sensor values
+							in accordance with the parameters specified as part of <a>SensorWatchOptions</a> argument. Then, return immediately to the caller. </li>
+							<li>If <var>TWatch</var> succeeds, the <a>status</a> attribute MUST be set to the <code>watching</code> value. Queue a task to fire a simple event named
+							<code>statuschange</code> at the <a>SensorConnection</a></li>
 							<li>If <var>TWatch</var> fails then Queue a task to fire a simple event named error at the <a>SensorConnection</a>.</li>
 						</ol>
 					</ol>
@@ -232,46 +319,86 @@
 							<ol>
 								<li>Invoke platform native interfaces to notify the end of the monitoring.</li>
 								<li>If the invocation succeeds, the <a>status</a> attribute MUST be set to the <code>open</code> value 
-                                                               and the control MUST be returned to the caller.</li>
+                                                               and the control MUST be returned to the caller. Finally, Queue a task to fire a simple event named
+							<code>statuschange</code> at the <a>SensorConnection</a>. </li>
 							<li>If the invocation fails Queue a task to fire a simple event named error at the <a>SensorConnection</a>.</li>
 							</ol>
 					</ol>
 				</dd>
 		</dl>
 	<dl>
-	<dt>[Constructor(DOMString type,optional DOMString name)]</dt>
-			<dd>Constructs a new SensorConnection. When invoked the user agent MUST run the following steps:
-				<ol>
-					<li>Let <var>_sensor</var> be the target sensor to be connected to. If the parameter <code>name</code> is not defined
-                                        then <var>_sensor</var> MUST correspond to the default sensor of the specified type. 
-                                        Otherwise <var>_sensor</var> MUST be assigned to a sensor of the specified type and whose identifier 
-                                        is equal to the name passed as parameter. </li>
-					<li>Check if the sensor identified by <var>_sensor</var> is available and ready to be connected</li>
-					<li>If the sensor is available instantiate a <code>SensorConnection</code> object and set its status to 'open'. </li>
-					<li>If the sensor is not available raise an instantiation exception (tbd). </li>
-				</ol>
+			
+	<dt>[Constructor(SensorOptions options)]</dt>
+	  <dd>Constructs a new <a>SensorConnection</a>. when invoked the user agent MUST run the following steps:
+	    <ol>
+		<li>Let <var>_sensor</var> be the target sensor to be connected to. If none of the dictionary members are defined then raise an instantiation exception. </li>
+		                       <li>If the dictionary member <code>name</code> is not defined
+                                        then <var>_sensor</var> MUST correspond to the default sensor type specified by the <code>type</code> member. 
+                                        Otherwise <var>_sensor</var> MUST be assigned to a sensor of the specified <code>type</code> and whose identifier 
+                                        is equal to the <code>name</code> member. </li>
+					<li>Check if the sensor identified by <var>_sensor</var> is available and ready to be connected</li>					
+					<li>If the sensor exists, is available and user permissions are ok, then instantiate a <code>SensorConnection</code> object and set its status to 'open'. </li>
+					<li>If user permissions are needed then instantiate the SensorConnection object, set its status to 'new' and prompt the user in a user-agent-specific manner for permission.
+					<p>Once the user gives permission set status to 'open'. If the user does not give permission set status to 'error' with error code to <code>PERMISSION_DENIED</code>. 
+					</li>
+					<li>If the sensor is not available or does not exist raise an instantiation exception (tbd). </li>
+	    </ol>
+	    <p>Implementations MAY support other connection options as part of the <a>SensorOptions</a> interface</p>
+	  </dd>
+	  
+	  <dt>[Constructor(DOMString type)]</dt>
+			<dd>Constructs a new <a>SensorConnection</a> by passing a sensor type. This is a convenient function for the more general function described above. 
 			</dd>
+			
+	      <p>These constructors must be visible when the script's global object is either a <code>Window</code> object
+		or an object implementing the <code>WorkerUtils</code> interface.</p>
 	</dl>
 
 </section>
 
 <section>
-		<h2>SensorWatchOptions Interface</h2>
-		<dl title='interface SensorWatchOptions : Object' class='idl'>
+		<h3><a>SensorWatchOptions Interface</a></h3>
+		<dl title='dictionary SensorWatchOptions' class='idl'>
 				<dt>attribute double threshold</dt>
 				<dd>
-					TBD
+					This attribute only applies to sensors that provide single value readings. It indicates that a data event MUST only be raised when
+					the sensor reaches a value below the specified threshold.
+					<p class="issue">
+					  This attribute is likely to be revisited to support these use cases:<br>
+					  
+					    - Low and high thresholds<br>
+					    - Ranges [10,20] (10,20] .... <br>
+					   - Thresholds that apply to the different data components of a sensor, for instance x,y,z in the case of accelerometer. 
+					</p>
 				</dd>
 				<dt>attribute double interval</dt>
 				<dd>
-				The <code>interval</code> attribute represents the monitorization interval at which data SHOULD be obtained from the underlying sensor hardware and must be expressed in milliseconds. The caller 
-				should be aware that setting a value too small can adversely affect the battery life. If the interval is set to zero, then the implementation MUST return sensor data only when there is a change since the last acquisition.
+				The <code>interval</code> attribute represents the monitorization interval at which data SHOULD be obtained
+				from the underlying sensor hardware and must be expressed in milliseconds. The caller 
+				should be aware that setting a value too small can adversely affect the battery life. If the interval is
+				set to zero, then the implementation MUST return sensor data only when there is a change since the last acquisition.
 				</dd>
 		</dl>
 </section>	
 
 <section>
-		<h2>SensorDataEvent Interface</h2>
+  
+  <h3><a>SensorOptions</a> Interface</h3>
+		<dl title='dictionary SensorOptions' class='idl'>
+				<dt>attribute DOMString type</dt>
+				<dd>
+					Sensor type for which a connection is requested
+				</dd>
+				<dt>attribute DOMString name</dt>
+				<dd>
+				  Sensor name for which a connection is requested
+				</dd>
+		</dl>
+  
+</section>
+
+<section>
+		<h3><a>SensorDataEvent</a> Interface</h3>
                 <p class="note">Once the spec progress this section will be changed to comply with the DOM4 Event interfaces</p>
  		<dl title='interface SensorDataEvent : Event' class='idl'>
 				<dt>readonly attribute any data</dt>
@@ -290,8 +417,6 @@
        			<dt>readonly attribute double timestamp</dt>
        			<dd>
 				The time in nanosecond at which the sensor data was read. 
-                                This value is relative to the timestamp of the first sample that was acquired for 
-				this sensor.
        			</dd>
 				<dt>readonly attribute DOMString reason</dt>
 				<dd>It is a string that denotes the reason for this data. The only admissible values for this attribute are:
@@ -313,10 +438,12 @@
                 </dd>
 		</dl>
                 
-                <p class="note">A section describing all the events defined by the API will be added for next draft. </p>
+                <p class="note">A section describing all the events defined by the API might be added for next draft. </p>
 
 </section>
 
+	</section>
+
 <section id="datatypes">
 	<h2>Sensor Data Implementation Requirements</h2>
 	
@@ -334,24 +461,20 @@
 				<tr><td>Temperature</td><td>double</td><td>degree Celsius (ºC)</td></tr>
 				<tr><td>AmbientLight</td><td>double</td><td>Lux</td></tr>
 				<tr><td>AmbientNoise</td><td>double</td><td>dbA</td></tr>
-				<tr><td>MagneticField</td><td>double</td><td>micro-Tesla (uTesla)</td></tr>
+				<tr><td>MagneticField</td><td>MagneticFieldData</td><td>micro-Tesla (uTesla)</td></tr>
 				<tr><td>Proximity</td><td>double</td><td>centimetres (cm)</td></tr>
 				<tr><td>AtmPressure</td><td>double</td><td>kiloPascal (kP)</td></tr>
-				<tr><td>Accelerometer</td><td>DeviceAcceleration</td><td>meters/second^2 (m/s2)</td></tr>
-				<tr><td>Gyroscope</td><td>DeviceRotationRate</td><td>radians/second</td></tr>
-				<tr><td>Orientation</td><td>DeviceOrientation</td><td>radians</td></tr>
+				<tr><td>RelHumidity</td><td>double</td><td></td></tr>
+				<tr><td>Accelerometer</td><td>AccelerationData</td><td>meters/second^2 (m/s2)</td></tr>
+				<tr><td>Gyroscope</td><td>RotationData</td><td>radians/second</td></tr>
+				<tr><td>Orientation</td><td>OrientationData</td><td>radians</td></tr>
 			</tbody>
 		</table>
-                
-                <div class="issue">
-                    The WG (together with Geoloc) is still discussing whether Accelerometer, Gyroscope and Orientation data are going to be exposed through
-                    the Sensor API. 
-                </div>
 	</p>
 	</section>
 
-	<section><h4>The DeviceAcceleration interface</h4>
-		<dl title='interface DeviceAcceleration' class='idl'>
+	<section><h4>The AccelerationData interface</h4>
+		<dl title='interface AccelerationData' class='idl'>
 				<dt>readonly attribute double x</dt>
 				<dd> 
 				</dd>
@@ -381,8 +504,8 @@
 		</dl>
 	</section>
 
-	<section><h4>The DeviceRotationRate interface</h4>
-		<dl title='interface DeviceRotationRate' class='idl'>
+	<section><h4>The RotationData interface</h4>
+		<dl title='interface RotationData' class='idl'>
 				<dt>readonly attribute double x</dt>
 				<dd> 
 					Angular speed around the x-axis
@@ -398,8 +521,8 @@
 		</dl>
 	</section>
 
-	<section><h4>The DeviceOrientation interface</h4>
-		<dl title='interface DeviceOrientation' class='idl'>
+	<section><h4>The OrientationData interface</h4>
+		<dl title='interface OrientationData' class='idl'>
 				<dt>readonly attribute double alpha</dt>
 				<dd> 
 				</dd>
@@ -411,13 +534,34 @@
 				</dd>
 		</dl>
 	</section>
-</section>
+	</section>
 
+<section>
+  <h2>Errors</h2>
+  
+  <section>
+  <h3>Sensor Error</h3>
+  <dl title='dictionary SensorError' class='idl'>
+				<dt>readonly attribute DOMString message</dt>
+				<dd>
+				  Error message
+				</dd>
+				<dt>readonly attribute unsigned short code</dt>
+				<dd>
+				  Error code
+				</dd>
+				<dt>const unsigned short PERMISSION_DENIED = -100</dt>
+				<dd>
+				  The user has not given permission
+				</dd>
+  </dl>
+  </section>
+</section>
 		
     <section class='appendix'>
       <h2>Acknowledgements</h2>
       <p>
-		WAC Ipanema Device APIs Lightweight Participation WG
+		WAC Ipanema Device APIs Lightweight Participation WG, in particular Bryan Sullivan, Balaji N.V., and Kaushik Das. 
       </p>
     </section>
   </body>

Received on Friday, 11 November 2011 17:13:10 UTC