Exemplo n.º 1
0
    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;
      }
    }
Exemplo n.º 2
0
 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);
            }
        }
Exemplo n.º 4
0
 public Sensor(string adapterName, string portName)
 {
     adapter = AccessProvider.GetAdapter(adapterName, portName);
 }
Exemplo n.º 5
0
 public Sensor(string adapterName, string portName)
 {
     adapter = AccessProvider.GetAdapter(adapterName, portName);
 }
Exemplo n.º 6
0
 public OneWireAdapter(OneWireAdapterConfiguration config)
 {
     adapter = AccessProvider.GetAdapter(config.AdapterName, config.PortName);
 }