private void Pool(object o) { int connectCnt=10010; OneWireBase dev; byte[] rom=new byte[8]; try { while(_run) { dev=null; if(connectCnt++>10000) { List<byte[]> ids=new List<byte[]>(); connectCnt=0; _adapter.TargetAllFamilies(); _adapter.SetSearchAllDevices(); if(_adapter.GetFirstDevice(rom, 0)) { do { ids.Add(rom); rom = new byte[8]; } while(_adapter.GetNextDevice(rom, 0)); if(ids.Any()) { var _dev1w=Topic.root.Get("/dev/1Wire"); foreach(var did in ids.Where(z => z!=null)) { var td=_dev1w.children.FirstOrDefault(z => { var d=z.GetValue() as OneWireBase; return d!=null && d.rom.SequenceEqual(did); }); if(td==this._owner) { continue; } if(td==null) { switch(did[0]) { case 0x10: // DS18S20 td=_dev1w.Get<DS18S20>(string.Format("DS18S20_{0:X2}{1:X2}{2:X2}{3:X2}", did[4], did[3], did[2], did[1])); (td as DVar<DS18S20>).value=new DS18S20(this, did); break; case 0x12: // DS2406 td=_dev1w.Get<DS2406>(string.Format("DS2406_{0:X2}{1:X2}{2:X2}{3:X2}", did[4], did[3], did[2], did[1])); (td as DVar<DS2406>).value=new DS2406(this, did); break; case 0x26: // DS2438 td=_dev1w.Get<DS2438>(string.Format("DS2438_{0:X2}{1:X2}{2:X2}{3:X2}", did[4], did[3], did[2], did[1])); (td as DVar<DS2438>).value=new DS2438(this, did); break; case 0x28: // DS18B20 td=_dev1w.Get<DS18B20>(string.Format("DS18B20_{0:X2}{1:X2}{2:X2}{3:X2}", did[4], did[3], did[2], did[1])); (td as DVar<DS18B20>).value=new DS18B20(this, did); break; case 0x3A: // DS2413 td=_dev1w.Get<DS2413>(string.Format("DS2413_{0:X2}{1:X2}{2:X2}{3:X2}", did[4], did[3], did[2], did[1])); (td as DVar<DS2413>).value=new DS2413(this, did); break; default: Log.Warning("unknown device {0} on {1}:{2}", BitConverter.ToString(did), _adapter.AdapterName, _adapter.PortName); break; } } else{ dev=td.GetValue() as OneWireBase; dev.gate=this; } if(td!=null) { dev=td.GetValue() as OneWireBase; dev.present=true; } } } } } else { dev=_devs.Where(z => z.present && z.prio>0).OrderByDescending(z => z.prio).FirstOrDefault(); if(dev==null && _devs.Any(z => z.GetFlag(Flags.NeedAlarm))) { _adapter.SetSearchOnlyAlarmingDevices(); if(_adapter.GetFirstDevice(rom, 0)) { do { dev=_devs.FirstOrDefault(z => z.rom.SequenceEqual(rom)); if(dev!=null) { dev.GetFlag(Flags.Alarm); Log.Debug("{0} Alarm", dev._owner.name); } } while(_adapter.GetNextDevice(rom, 0)); } } } if(dev!=null) { try { dev.Proccess(); } catch(AdapterException ex) { dev.ReportError(); Log.Warning("{0}.Process - {1}", dev._owner.path, ex.Message); } catch(Exception ex) { Log.Warning("{0}.Process - {1}", dev._owner.path, ex.Message); } } else { connectCnt+=30; Thread.Sleep(15); } } } catch(Exception ex) { Log.Error("{0}.Pool() - {1}", _owner!=null?_owner.path:this.ToString(), ex); } if(_adapter!=null) { try { _adapter.EndExclusive(); _adapter.Dispose(); } catch(Exception) { } _adapter=null; } }
public OneWireGate(PortAdapter adapter, byte[] rom) : base(null, rom, adapter.AdapterName) { this.adapter=adapter; base.gate=this; }
private void btnPovezi_Click(object sender, RoutedEventArgs e) { try { if (berem == false) { if ((String.IsNullOrEmpty(tbComPort.Text)) || (String.IsNullOrEmpty(tbRazmikProzenja.Text))) { MessageBox.Show("Potrebno je vnesti COM port in razmik proženja!"); return; } GeoCoordinateWatcher lokacija = new GeoCoordinateWatcher(); int stPonovitev = 0; while (stPonovitev <= 10) { lokacija.TryStart(false, TimeSpan.FromMilliseconds(10000)); GeoCoordinate koordinate = lokacija.Position.Location; if (koordinate.IsUnknown != true) { var latitude = koordinate.Latitude; var longitude = koordinate.Longitude; string[] lokacijaArray = DobiNaslovIzGMaps(latitude.ToString(new CultureInfo("en-US")), longitude.ToString(new CultureInfo("en-US"))); lokacijaStr = lokacijaArray[0]; drzavaStr = lokacijaArray[1]; break; } Thread.Sleep(2000); stPonovitev++; } adapter = AccessProvider.GetAdapter("{DS9097}", tbComPort.Text); OneWireContainer container = adapter.GetDeviceContainer(StringToByteArray("28FF945B521604BF")); string owcType = container.GetType().ToString(); if (owcType.Equals("DalSemi.OneWire.Container.OneWireContainer28")) { // imamo DS18S20 adapter.SelectDevice(container.Address); ZapisiLog("Pričenjam brati ..."); timer = new DispatcherTimer(); timer.Tick += Timer_Tick; timer.Interval = new TimeSpan(0, 0, Int32.Parse(tbRazmikProzenja.Text)); timer.Start(); berem = true; btnPovezi.Content = "Končaj brati"; } Configuration config = ConfigurationManager.OpenExeConfiguration(System.Reflection.Assembly.GetExecutingAssembly().Location); if (config.AppSettings.Settings["tbComPort"] == null) { config.AppSettings.Settings.Add("tbComPort", tbComPort.Text); } else { config.AppSettings.Settings["tbComPort"].Value = tbComPort.Text; } if (config.AppSettings.Settings["tbRazmikProzenja"] == null) { config.AppSettings.Settings.Add("tbRazmikProzenja", tbRazmikProzenja.Text); } else { config.AppSettings.Settings["tbRazmikProzenja"].Value = tbRazmikProzenja.Text; } if (config.AppSettings.Settings["tbAPIUrl"] == null) { config.AppSettings.Settings.Add("tbAPIUrl", tbAPIUrl.Text); } else { config.AppSettings.Settings["tbAPIUrl"].Value = tbAPIUrl.Text; } if (config.AppSettings.Settings["tbStrukturaPodatkov"] == null) { config.AppSettings.Settings.Add("tbStrukturaPodatkov", tbStrukturaPodatkov.Text); } else { config.AppSettings.Settings["tbStrukturaPodatkov"].Value = tbStrukturaPodatkov.Text; } if (config.AppSettings.Settings["tbMin"] == null) { config.AppSettings.Settings.Add("tbMin", tbMin.Text); } else { config.AppSettings.Settings["tbMin"].Value = tbMin.Text; } if (config.AppSettings.Settings["tbMax"] == null) { config.AppSettings.Settings.Add("tbMax", tbMax.Text); } else { config.AppSettings.Settings["tbMax"].Value = tbMax.Text; } if (config.AppSettings.Settings["tbTarget"] == null) { config.AppSettings.Settings.Add("tbTarget", tbTarget.Text); } else { config.AppSettings.Settings["tbTarget"].Value = tbTarget.Text; } config.Save(ConfigurationSaveMode.Minimal); } else { timer.Stop(); ZapisiLog("Končal sem brati ..."); berem = false; btnPovezi.Content = "Poveži in beri"; } } catch (Exception _ex) { ZapisiLog("NAPAKA: " + _ex.Message); ZapisiLog(_ex.StackTrace); } }
public Sensor(string adapterName, string portName) { adapter = AccessProvider.GetAdapter(adapterName, portName); }
public Sensor(string adapterName, string portName) { adapter = AccessProvider.GetAdapter(adapterName, portName); }
public OneWireAdapter(OneWireAdapterConfiguration config) { adapter = AccessProvider.GetAdapter(config.AdapterName, config.PortName); }