private static void StubFindHIDDevices() { var MeterTypes = Assembly.GetExecutingAssembly().GetTypes() .Where(t => t.IsClass) // Only include classes .Where(t => t.IsSubclassOf(typeof(AbstractMeter))) .Where(t => t.GetInterfaces().Contains(typeof(IMeterHID))) .OrderBy(t => t.Namespace) .ThenBy(t => t.Name); foreach (var reflect in MeterTypes) { Type t = reflect.UnderlyingSystemType; using (IMeterHID meter = (IMeterHID)Activator.CreateInstance(t)) { if (meter.IsMeterConnected()) { DeviceInfo di = new DeviceInfo(); di.DeviceType = t; di.HIDDevice = true; di.Device = meter; lock (DevicesFound) { DevicesFound.Add(di); return; //found a device so return. Can be removed to find all HID devices on a system. } } if (meter.Port.SpecifiedDevice != null) { meter.Port.SpecifiedDevice.Dispose(); } meter.Port.Dispose(); } } }
private void background_DeviceReader_DoWork(object sender, DoWorkEventArgs e) { try { if (Thread.CurrentThread.Name == null) { Thread.CurrentThread.Name = "DeviceReader"; } //change notify icon to busy pipeWrite("BUSYICON", "busy", string.Empty, 0); //read devices data if (Common.Statics.deviceFound != null) { if (typeof(IMeter).IsAssignableFrom(Common.Statics.deviceFound.DeviceType)) { //serial devices IMeter Meter = (IMeter)Common.Statics.deviceFound.Device; if (Meter != null) { Meter.ReadFinished += new EventHandler(OnReadFinished); Meter.RecordRead += new EventHandler(OnRecordRead); Meter.HeaderRead += new EventHandler(OnHeaderRead); try { int connectionTries = 0; while (!Meter.Connect(Common.Statics.deviceFound.ComPortName) && connectionTries < 30) { Thread.Sleep(100); connectionTries++; } } catch (Exception ex) { Errors.ServiceError(ex); Detector.ReportException("W000C", ex); } EventLog.WriteEntry(string.Format("Begin reading data from {0}.", Common.Statics.deviceFound.DeviceDescription), EventLogEntryType.Information); if (Meter.IsPortOpen) { Meter.Port.DiscardInBuffer(); Meter.Port.DiscardOutBuffer(); Meter.ReadData(); } } } else if (typeof(IMeterHID).IsAssignableFrom(Common.Statics.deviceFound.DeviceType)) { //HID devices IMeterHID Meter = (IMeterHID)Common.Statics.deviceFound.Device; Meter.ReadFinished += new EventHandler(OnReadFinished); Meter.RecordRead += new EventHandler(OnRecordRead); Meter.HeaderRead += new EventHandler(OnHeaderRead); EventLog.WriteEntry(string.Format("Begin reading data from {0}.", Common.Statics.deviceFound.DeviceDescription), EventLogEntryType.Information); Meter.ReadData(); } } } catch (Exception ex) { Errors.ServiceError(ex); Detector.ReportException("W0002", ex); } }