/// <summary> /// Creates a data report instance appropirate for the sensor. /// </summary> /// <param name="report">Underlying data report COM object.</param> /// <param name="sensor">Sensor COM object.</param> /// <returns></returns> internal SensorDataReport GetDataReport(ISensorDataReport report, ISensor sensor) { SensorDataReport sdr = CreateReport(); sdr.InitializeReport(report, this); return(sdr); }
internal static SensorReport FromNativeReport(Sensor originator, ISensorDataReport iReport) { SystemTime systemTimeStamp = new SystemTime(); try { iReport.GetTimestamp(out systemTimeStamp); } catch (System.Runtime.InteropServices.COMException ex) { System.Diagnostics.Trace.WriteLine(ex); return(null); } FILETIME ftTimeStamp = new FILETIME(); SensorNativeMethods.SystemTimeToFileTime(ref systemTimeStamp, out ftTimeStamp); long lTimeStamp = (((long)ftTimeStamp.dwHighDateTime) << 32) + (long)ftTimeStamp.dwLowDateTime; DateTime timeStamp = DateTime.FromFileTime(lTimeStamp); SensorReport sensorReport = new SensorReport(); sensorReport.originator = originator; sensorReport.timeStamp = timeStamp; sensorReport.sensorData = SensorData.FromNativeReport(originator.internalObject, iReport); return(sensorReport); }
/// <summary> /// Synchronously retrieves a data report from the sensor. /// </summary> /// <returns>Data report.</returns> public SensorDataReport GetDataReport() { ISensorDataReport iReport = null; _iSensor.GetData(out iReport); return(GetDataReport(iReport, _iSensor)); }
void ISensorEvents.OnDataUpdated(ISensor sensor, ISensorDataReport newData) { this.dataReport = SensorReport.FromNativeReport(this, newData); if (DataReportChanged != null) { DataReportChanged.Invoke(this, EventArgs.Empty); } }
/// <summary> /// Handler for any event. Fires the <see cref="EventReceived"/> event. /// </summary> /// <param name="sensor">COM sensor object for which this event was fired.</param> /// <param name="eventID">Event GUID.</param> /// <param name="newData">COM data report object.</param> void ISensorEvents.OnEvent(ISensor sensor, Guid eventID, ISensorDataReport newData) { if (EventReceived != null) { SensorDataReport sdr = GetDataReport(newData, sensor); EventReceived(this, eventID, sdr); } }
/// <summary> /// Handler of the data updated event. Fires the <see cref="DataUpdated"/> event. /// Creates an appropriate data report object. /// </summary> /// <param name="sensor">COM sensor object for which this event was fired.</param> /// <param name="newData">COM data report object.</param> void ISensorEvents.OnDataUpdated(ISensor sensor, ISensorDataReport newData) { _lastReport = newData; if (DataUpdated != null) { SensorDataReport sdr = GetDataReport(newData, sensor); DataUpdated(this, sdr); } }
/// <summary> /// Retrieves the last data report asynchronously received from the sensor. Otherwise, returns null. /// </summary> /// <returns>Data report or null.</returns> public SensorDataReport GetLastAsyncDataReport() { ISensorDataReport lastRep = _lastReport; if (lastRep == null) { return(null); } return(GetDataReport(lastRep, _iSensor)); }
internal static SensorData FromNativeReport(ISensor iSensor, ISensorDataReport iReport) { SensorData data = new SensorData( ); IPortableDeviceKeyCollection keyCollection; IPortableDeviceValues valuesCollection; iSensor.GetSupportedDataFields(out keyCollection); iReport.GetSensorValues(keyCollection, out valuesCollection); uint items = 0; keyCollection.GetCount(out items); for (uint index = 0; index < items; index++) { PropertyKey key; PropVariant propValue; keyCollection.GetAt(index, out key); valuesCollection.GetValue(ref key, out propValue); try { if (data.ContainsKey(key.FormatId)) { data[key.FormatId].Add(propValue.Value); } else { data.Add(key.FormatId, new List <object> { propValue.Value }); } } finally { propValue.Clear( ); } } if (keyCollection != null) { Marshal.ReleaseComObject(keyCollection); keyCollection = null; } if (valuesCollection != null) { Marshal.ReleaseComObject(valuesCollection); valuesCollection = null; } return(data); }
/// <summary> /// Handler of an event indicating cesation of sensor availability. /// </summary> /// <param name="sensorID">Sensor's instance GUID.</param> void ISensorEvents.OnLeave(Guid sensorID) { _iSensor = null; _lastReport = null; if (SensorLeave != null) { SensorLeave(this, sensorID); } lock (_instances) { _instances.Remove(this); } }
internal static SensorReport FromNativeReport( Sensor originator, ISensorDataReport iReport ) { SYSTEMTIME systemTimeStamp = new SYSTEMTIME( ); iReport.GetTimestamp( out systemTimeStamp ); FILETIME ftTimeStamp = new FILETIME( ); SensorNativeMethods.SystemTimeToFileTime( ref systemTimeStamp, out ftTimeStamp ); long lTimeStamp = (((long)ftTimeStamp.dwHighDateTime) << 32) + (long)ftTimeStamp.dwLowDateTime; DateTime timeStamp = DateTime.FromFileTime( lTimeStamp ); SensorReport sensorReport = new SensorReport( ); sensorReport.originator = originator; sensorReport.timeStamp = timeStamp; sensorReport.sensorData = SensorData.FromNativeReport( originator.internalObject, iReport ); return sensorReport; }
internal static SensorReport FromNativeReport(Sensor originator, ISensorDataReport iReport) { SystemTime systemTimeStamp = new SystemTime(); iReport.GetTimestamp(out systemTimeStamp); FILETIME ftTimeStamp = new FILETIME(); SensorNativeMethods.SystemTimeToFileTime(ref systemTimeStamp, out ftTimeStamp); long lTimeStamp = (((long)ftTimeStamp.dwHighDateTime) << 32) + (long)ftTimeStamp.dwLowDateTime; DateTime timeStamp = DateTime.FromFileTime(lTimeStamp); SensorReport sensorReport = new SensorReport(); sensorReport.originator = originator; sensorReport.timeStamp = timeStamp; sensorReport.sensorData = SensorData.FromNativeReport(originator.internalObject, iReport); return(sensorReport); }
internal HRESULT InternalUpdateData() { ISensorDataReport iReport = null; HRESULT hr = nativeISensor.GetData(out iReport); if (hr == HRESULT.S_OK) { try { this.dataReport = SensorReport.FromNativeReport(this, iReport); if (DataReportChanged != null) { DataReportChanged.Invoke(this, EventArgs.Empty); } } finally { Marshal.ReleaseComObject(iReport); } } return(hr); }
void ISensorEvents.OnEvent(ISensor sensor, Guid eventID, ISensorDataReport newData) { }
internal void InitializeReport(ISensorDataReport report, Sensor sensor) { _iSensorReport = report; _sensor = sensor; Initialize(); }