Exemple #1
0
 /// <summary>
 /// Connects the given tracker.
 /// </summary>
 /// <returns>Identifier for the tracker. Less than 0 if starting was not successful.</returns>
 /// <param name="tracker">Tracker.</param>
 /// <param name="settings">Settings.</param>
 public int StartTracker(IPoseTracker tracker)
 {
     if (tracker == null)
     {
         throw new ArgumentNullException("tracker");
     }
     lock (trackerSync) {
         int id;
         // find unused index
         for (id = 0; id < trackers.Count; id++)
         {
             if (trackers[id] == null)
             {
                 break;
             }
         }
         // add or insert tracker
         if (id < trackers.Count)
         {
             trackers[id] = tracker;
         }
         else
         {
             trackers.Add(tracker);
         }
         // the tracker signals when it has data to process
         // to let it process we pick up the signal
         tracker.InputAvailable += SignalStep;
         if (!tracker.Start())
         {
             return(-1);
         }
         return(id);
     }
 }
Exemple #2
0
 /// <summary>
 /// Executes a single iteration of all started trackers.
 /// </summary>
 private void StopTrackers()
 {
     lock (stepSync) {
         while (toStep.Count > 0)
         {
             IPoseTracker tracker = toStep.Dequeue();
             tracker.Step();
         }
     }
 }
Exemple #3
0
        /// <summary>
        /// Signals this instance to step the trackers due to available data to process.
        /// </summary>
        /// <param name="sender">Ignnored.</param>
        /// <param name="args">Ignored.</param>
        private void SignalStep(object sender, EventArgs args)
        {
            IPoseTracker tracker = sender as IPoseTracker;

            if (tracker != null)
            {
                lock (stepSync) {
                    toStep.Enqueue(tracker);
                }
            }
            invokeSignal.Set();
        }
Exemple #4
0
 /// <summary>
 /// Stops, disposes and removes the tracker specified by the given identifier.
 /// </summary>
 /// <returns><c>true</c>, if the tracker existed, <c>false</c> otherwise.</returns>
 /// <param name="id">Tracker identifier previously returned by <see cref="StartTracker"></see>.</param>
 public IPoseTracker StopTracker(int id)
 {
     lock (trackerSync) {
         if (id < 0 || id >= trackers.Count)
         {
             return(null);
         }
         if (trackers[id] == null)
         {
             return(null);
         }
         IPoseTracker result = trackers[id];
         trackers[id]           = null;
         result.InputAvailable -= SignalStep;
         result.Stop();
         return(result);
     }
 }
Exemple #5
0
        private HttpStatusCode RespondGet(JsonString requestSubject, JsonString responseSubject, int[] positions)
        {
            object     dataSync = new object();
            JsonString data;

            lock (dataSync) {             // TODO lock required?
                data = JsonString.CreateDict();
            }
            var readySignal = new ManualResetEvent(false);

            TrackingSystem.Instance.Invoke((object sender, EventArgs args) => {
                var system = (TrackingSystem)sender;
                foreach (int pos in positions)
                {
                    var entry            = JsonString.CreateDict();
                    IPoseTracker tracker = system.GetTracker(pos);
                    if (tracker == null)
                    {
                        entry.AddTerminal("inuse", "false");
                    }
                    else if (tracker is P3CapTracker)
                    {
                        var capTracker             = (P3CapTracker)tracker;
                        EquipmentSettings settings = capTracker.GetSettings();
                        entry.AddTerminal("inuse", "true");
                        entry.AddJsonString("settings", EquipmentSettings.ToJson(settings));
                    }
                    data.AddJsonString(JsonString.Stringify(pos), entry);
                }
                readySignal.Set();
            });
            readySignal.WaitOne();
            lock (dataSync) {
                responseSubject.AddJsonString("data", data);
            }
            return(HttpStatusCode.OK);
        }