/**
  * <summary>
  *   Retrieves a sensor for a given identifier.
  * <para>
  *   The identifier can be specified using several formats:
  * </para>
  * <para>
  * </para>
  * <para>
  *   - FunctionLogicalName
  * </para>
  * <para>
  *   - ModuleSerialNumber.FunctionIdentifier
  * </para>
  * <para>
  *   - ModuleSerialNumber.FunctionLogicalName
  * </para>
  * <para>
  *   - ModuleLogicalName.FunctionIdentifier
  * </para>
  * <para>
  *   - ModuleLogicalName.FunctionLogicalName
  * </para>
  * <para>
  * </para>
  * <para>
  *   This function does not require that the sensor is online at the time
  *   it is invoked. The returned object is nevertheless valid.
  *   Use the method <c>YSensor.isOnline()</c> to test if the sensor is
  *   indeed online at a given time. In case of ambiguity when looking for
  *   a sensor by logical name, no error is notified: the first instance
  *   found is returned. The search is performed first by hardware name,
  *   then by logical name.
  * </para>
  * </summary>
  * <param name="func">
  *   a string that uniquely characterizes the sensor
  * </param>
  * <returns>
  *   a <c>YSensor</c> object allowing you to drive the sensor.
  * </returns>
  */
 public static YSensor FindSensor(string func)
 {
   YSensor obj;
   obj = (YSensor)YFunction._FindFromCache("Sensor", func);
   if (obj == null)
   {
     obj = new YSensor(func);
     YFunction._AddToCache("Sensor", func, obj);
   }
   return obj;
 }
 public DataEvent(YSensor sensor, double timestamp, List<int> report)
 {
   _fun = null;
   _sensor = sensor;
   _value = null;
   _timestamp = timestamp;
   _report = report;
 }
 static protected void _UpdateTimedReportCallbackList(YSensor func, Boolean add)
 {
   if (add)
   {
     func.isOnline();
     if (!_TimedReportCallbackList.Contains(func))
     {
       _TimedReportCallbackList.Add(func);
     }
   }
   else
   {
     _TimedReportCallbackList.Remove(func);
   }
 }
 public DataEvent(YFunction fun, String value)
 {
   _fun = fun;
   _sensor = null;
   _value = value;
   _report = null;
   _timestamp = 0;
 }