[chronojump/michrolab] Discover/Capture useThis working ok for n chronopics (contacts) and forceSensor, and RaceAnalyzer



commit ba69c82851c4660a9c080a36b26b46414b239d76
Author: Xavier de Blas <xaviblas gmail com>
Date:   Fri Jun 10 17:13:39 2022 +0200

    Discover/Capture useThis working ok for n chronopics (contacts) and forceSensor, and RaceAnalyzer

 src/chronopicRegister.cs     | 36 +++++++++++++++------
 src/gui/app1/chronojump.cs   | 75 +++++++++++++++++++++++++++++---------------
 src/gui/app1/forceSensor.cs  |  6 ++--
 src/gui/app1/runEncoder.cs   |  6 ++--
 src/gui/chronopic.cs         | 17 ++++++++--
 src/gui/chronopicRegister.cs | 23 ++++++--------
 6 files changed, 107 insertions(+), 56 deletions(-)
---
diff --git a/src/chronopicRegister.cs b/src/chronopicRegister.cs
index a3f426119..b1c3c4c91 100644
--- a/src/chronopicRegister.cs
+++ b/src/chronopicRegister.cs
@@ -306,17 +306,22 @@ public abstract class ChronopicRegister
        private List <selectedForMode> selectedForMode_l;
        public struct selectedForMode
        {
-               public string portName;
+               public ChronopicRegisterPort crp;
                public Constants.Modes mode;
 
-               public selectedForMode (string portName, Constants.Modes mode)
+               public selectedForMode (ChronopicRegisterPort crp, Constants.Modes mode)
                {
-                       this.portName = portName;
+                       this.crp = crp;
                        this.mode = mode;
                }
+
+               public override string ToString ()      //debug
+               {
+                       return string.Format ("crp: {0}; mode: {1}", crp, mode);
+               }
        }
 
-       public void SetSelectedForMode (string portName, Constants.Modes mode)
+       public void SetSelectedForMode (ChronopicRegisterPort crp, Constants.Modes mode)
        {
                if (selectedForMode_l == null)
                        selectedForMode_l = new List<selectedForMode> ();
@@ -325,21 +330,34 @@ public abstract class ChronopicRegister
                        if (selectedForMode_l[i].mode == mode)
                        {
                                //note structs cannot be changed, so change by a new one
-                               selectedForMode_l[i] = new selectedForMode (portName, mode);
+                               selectedForMode_l[i] = new selectedForMode (crp, mode);
                                return;
                        }
 
                //not found, add it
-               selectedForMode_l.Add (new selectedForMode (portName, mode));
+               selectedForMode_l.Add (new selectedForMode (crp, mode));
        }
 
-       public string GetSelectedForMode (Constants.Modes mode)
+       public ChronopicRegisterPort GetSelectedForMode (Constants.Modes mode)
        {
+               if (selectedForMode_l == null)
+                       return new ChronopicRegisterPort ("");
+
                foreach (selectedForMode sfm in selectedForMode_l)
                        if (sfm.mode == mode)
-                               return sfm.portName;
+                               return sfm.crp;
 
-               return "";
+               return new ChronopicRegisterPort ("");
+       }
+
+       //to debug
+       public void ListSelectedForAllModes ()
+       {
+               if (selectedForMode_l == null)
+                       return;
+
+               foreach (selectedForMode sfm in selectedForMode_l)
+                       LogB.Information (sfm.ToString ());
        }
 
        // <---- end of selectedForMode ----
diff --git a/src/gui/app1/chronojump.cs b/src/gui/app1/chronojump.cs
index 07767d13f..c36ed3541 100644
--- a/src/gui/app1/chronojump.cs
+++ b/src/gui/app1/chronojump.cs
@@ -4676,7 +4676,8 @@ public partial class ChronoJumpWindow
 
                chronopicRegister = discoverWin.ChronopicRegisterGet;
 
-               if(discoverWin.PortSelected != "")
+               //if(discoverWin.PortSelected != "")
+               if(discoverWin.PortSelected.Port != "")
                {
                        chronopicRegister.SetSelectedForMode (discoverWin.PortSelected, current_mode);
                        button_contacts_detect.Visible = false;
@@ -4727,9 +4728,9 @@ public partial class ChronoJumpWindow
                if(current_mode == Constants.Modes.RUNSINTERVALLIC && compujumpAutologout != null)
                        compujumpAutologout.StartCapturingRunInterval();
 
-               if( chronopicRegister.NumConnectedOfType(ChronopicRegisterPort.Types.RUN_WIRELESS) == 1 && (
-                       current_mode == Constants.Modes.RUNSSIMPLE ||
-                       current_mode == Constants.Modes.RUNSINTERVALLIC) )
+               //WICHRO
+               if ( chronopicRegister.NumConnectedOfType(ChronopicRegisterPort.Types.RUN_WIRELESS) == 1 &&
+                               (current_mode == Constants.Modes.RUNSSIMPLE || current_mode == 
Constants.Modes.RUNSINTERVALLIC) )
                {
                        //cp2016.StoredCanCaptureContacts = true;
                        cp2016.StoredWireless = true;
@@ -4738,48 +4739,72 @@ public partial class ChronoJumpWindow
                        return;
                }
 
-               //Done before the Wichro capture.
-               //If we want to use this before Wichro capture, then we will need to call first 
Arduino.Disconnect.
-               chronopicRegisterUpdate(false);
+               if (current_mode == Constants.Modes.JUMPSSIMPLE || current_mode == 
Constants.Modes.JUMPSREACTIVE ||
+                               current_mode == Constants.Modes.RUNSSIMPLE || current_mode == 
Constants.Modes.RUNSINTERVALLIC)
+               {
+                       // non-wichro 2.2.2
+                       chronopicRegister.ListSelectedForAllModes (); //debug
 
-               cp2016.StoredWireless = false;
+                       if (chronopicRegister.GetSelectedForMode (current_mode).Port == "")
+                       {
+                               // simulated test can be done on SIMULATED session
+                               if(currentSession.Name == Constants.SessionSimulatedName)
+                                       on_button_execute_test_acceptedPre_start_camera 
(WebcamStartedTestStart.CHRONOPIC);
+                               else
+                                       on_button_contacts_detect_clicked (o, args); //open discover win
+                       } else {
+                               LogB.Information ("getSelectedFormode: " + 
chronopicRegister.GetSelectedForMode (current_mode).ToString ());
+                               chronopicConnectionSequenceInit (chronopicRegister.GetSelectedForMode 
(current_mode));
+                       }
 
-               int numContacts = chronopicRegister.NumConnectedOfType(ChronopicRegisterPort.Types.CONTACTS);
-               LogB.Information("numContacts: " + numContacts);
+                       /* before 2.2.2
+                       //Done before the Wichro capture.
+                       //If we want to use this before Wichro capture, then we will need to call first 
Arduino.Disconnect.
+                       chronopicRegisterUpdate(false);
 
-               //check if chronopics have changed
-               if(numContacts >= 2 && current_mode == Constants.Modes.OTHER && 
radio_mode_multi_chronopic_small.Active)
-               {
+                       cp2016.StoredWireless = false;
+
+                       int numContacts = 
chronopicRegister.NumConnectedOfType(ChronopicRegisterPort.Types.CONTACTS);
+                       LogB.Information("numContacts: " + numContacts);
+
+                       //check if chronopics have changed
+                       if(numContacts >= 2 && current_mode == Constants.Modes.OTHER && 
radio_mode_multi_chronopic_small.Active)
+                       {
                        chronopicConnectionSequenceInit(2);
-               }
-               else if(numContacts >= 1) //will get first
-               {
+                       }
+                       else if(numContacts >= 1) //will get first
+                       {
                        chronopicConnectionSequenceInit(1);
-               }
-               else //(numContacts == 0)
-               {
+                       }
+                       else //(numContacts == 0)
+                       {
                        //store a boolean in order to read info faster
                        cp2016.StoredCanCaptureContacts = false;
 
+                        */
                        /*
                         * if serial port gets opened, then a new USB connection will use different ttyUSB on 
Linux
                         * and maybe is the cause for blocking the port on OSX
                         * close the port if opened
                         */
-                       cp2016.SerialPortsCloseIfNeeded(true);
+                       /*
+                          cp2016.SerialPortsCloseIfNeeded(true);
 
                        //simulated tests are only allowed on SIMULATED session
                        if(currentSession.Name != Constants.SessionSimulatedName)
                        {
-                               //new DialogMessage(Constants.MessageTypes.WARNING, 
Constants.SimulatedTestsNotAllowed);
-                               //UtilGtk.DeviceColors(viewport_chronopics, false);
-                               //open device window
-                               chronopicRegisterUpdate(true);
+                       //new DialogMessage(Constants.MessageTypes.WARNING, 
Constants.SimulatedTestsNotAllowed);
+                       //UtilGtk.DeviceColors(viewport_chronopics, false);
+                       //open device window
+                       chronopicRegisterUpdate(true);
 
-                               return;
+                       return;
                        }
                        on_button_execute_test_acceptedPre_start_camera(WebcamStartedTestStart.CHRONOPIC);
+                       }
+                        */
                }
+
                UtilGtk.DeviceColors(viewport_chronopics, true);
        }
 
diff --git a/src/gui/app1/forceSensor.cs b/src/gui/app1/forceSensor.cs
index 92d5e2f97..b31063fc4 100644
--- a/src/gui/app1/forceSensor.cs
+++ b/src/gui/app1/forceSensor.cs
@@ -252,7 +252,7 @@ public partial class ChronoJumpWindow
        private bool forceSensorConnect()
        {
                LogB.Information(" FS connect 0 ");
-               if (chronopicRegister.GetSelectedForMode (current_mode) == "")
+               if (chronopicRegister.GetSelectedForMode (current_mode).Port == "")
                {
                        forceSensorOtherMessage = forceSensorNotConnectedString;
                        return false;
@@ -267,7 +267,7 @@ public partial class ChronoJumpWindow
        {
                forceSensorOtherMessage = "Connecting ...";
 
-               portFS = new SerialPort (chronopicRegister.GetSelectedForMode (current_mode), 115200);
+               portFS = new SerialPort (chronopicRegister.GetSelectedForMode (current_mode).Port, 115200);
                LogB.Information(" FS connect 4: opening port...");
 
                try {
@@ -451,7 +451,7 @@ public partial class ChronoJumpWindow
                        }
                }
 
-               if (chronopicRegister.GetSelectedForMode (current_mode) == "")
+               if (chronopicRegister.GetSelectedForMode (current_mode).Port == "")
                {
                        event_execute_label_message.Text = forceSensorNotConnectedString;
                        return;
diff --git a/src/gui/app1/runEncoder.cs b/src/gui/app1/runEncoder.cs
index 1bbabb2c6..d471b04e2 100644
--- a/src/gui/app1/runEncoder.cs
+++ b/src/gui/app1/runEncoder.cs
@@ -220,7 +220,7 @@ public partial class ChronoJumpWindow
        private bool runEncoderConnect()
        {
                LogB.Information(" RE connect 0 ");
-               if (chronopicRegister.GetSelectedForMode (current_mode) == "")
+               if (chronopicRegister.GetSelectedForMode (current_mode).Port == "")
                {
                        runEncoderPulseMessage = runEncoderNotConnectedString;
                        return false;
@@ -229,7 +229,7 @@ public partial class ChronoJumpWindow
                LogB.Information(" RE connect 1 ");
                runEncoderPulseMessage = "Connecting ...";
 
-               portRE = new SerialPort (chronopicRegister.GetSelectedForMode (current_mode), 115200);
+               portRE = new SerialPort (chronopicRegister.GetSelectedForMode (current_mode).Port, 115200);
                LogB.Information(" RE connect 4: opening port...");
 
                try {
@@ -393,7 +393,7 @@ public partial class ChronoJumpWindow
                //if graphs are not updated with the line, use this that will fire ExposeEvent:
                //drawingarea_race_analyzer_capture_position_time.QueueDraw(); and the others
 
-               if (chronopicRegister.GetSelectedForMode (current_mode) == "")
+               if (chronopicRegister.GetSelectedForMode (current_mode).Port == "")
                {
                        event_execute_label_message.Text = runEncoderNotConnectedString;
                        runEncoderButtonsSensitive(true);
diff --git a/src/gui/chronopic.cs b/src/gui/chronopic.cs
index 7b56ac455..12a3f9816 100644
--- a/src/gui/chronopic.cs
+++ b/src/gui/chronopic.cs
@@ -37,13 +37,20 @@ public partial class ChronoJumpWindow
        List<ChronopicRegisterPort> crpMultiList;
 
        ChronopicRegisterPort crpDoing;
-       bool connectAnother;
+       //bool connectAnother;
        int connectNum;
        enum connectingSequenceEnum { START, CONNECTINGREAL, FIRMWAREIFNEEDED, END }
        private static connectingSequenceEnum connectingSequence;
 
-       private void chronopicConnectionSequenceInit(int numCPs)
+       private void chronopicConnectionSequenceInit (ChronopicRegisterPort crpDoing)
        {
+               // 2.2.2
+               this.crpDoing = crpDoing;
+               //store a boolean in order to read info faster
+               cp2016.StoredCanCaptureContacts = true;
+               connectNum = 1;
+
+               /* before 2.2.2
                connectNum = 1;
                if(numCPs == 1)
                {
@@ -65,8 +72,10 @@ public partial class ChronoJumpWindow
 
                        cp2016.StoredCanCaptureContacts = (crpMultiList.Count == 2);
                }
+               */
                connectingSequence = connectingSequenceEnum.START;
                chronopicConnectionSequenceDo();
+
        }
 
        private void chronopicConnectionSequenceDo()
@@ -77,6 +86,7 @@ public partial class ChronoJumpWindow
                //1 check if need to end sequence or go to second chronopic
                if (connectingSequence == connectingSequenceEnum.END)
                {
+                       /*
                        if(connectAnother)
                        {
                                System.Threading.Thread.Sleep(250);
@@ -87,10 +97,11 @@ public partial class ChronoJumpWindow
                                chronopicConnectionSequenceDo();
                                return;
                        } else {
+                       */
                                button_activate_chronopics.Show();
                                
on_button_execute_test_acceptedPre_start_camera(ChronoJumpWindow.WebcamStartedTestStart.CHRONOPIC);
                                return;
-                       }
+                       //}
                }
 
                //2 update sequence
diff --git a/src/gui/chronopicRegister.cs b/src/gui/chronopicRegister.cs
index b43f13a5b..d3d46059c 100644
--- a/src/gui/chronopicRegister.cs
+++ b/src/gui/chronopicRegister.cs
@@ -123,7 +123,7 @@ public class DiscoverWindow
        List<Gtk.ProgressBar> progressbar_microNotDiscovered_l;
        List<Gtk.Button> button_microNotDiscovered_l;
 
-       List<string> portAlreadyDiscovered_l;
+       List<ChronopicRegisterPort> portAlreadyDiscovered_l;
        List<Gtk.Button> button_microAlreadyDiscovered_l;
 
        static bool discoverCloseAfterCancel; //is true when select useThis while reading other devices
@@ -137,7 +137,7 @@ public class DiscoverWindow
        private Gtk.Image image_button_micro_discover_cancel_close;
        private Gtk.Label label_button_micro_discover_cancel_close;
 
-       private string portSelected;
+       private ChronopicRegisterPort portSelected;
 
        public DiscoverWindow (Constants.Modes current_mode, ChronopicRegister chronopicRegister,
                        Gtk.Label label_micro_discover_not_found,
@@ -154,7 +154,7 @@ public class DiscoverWindow
                // 1) set up gui
 
                FakeButtonClose = new Gtk.Button();
-               portSelected = "";
+               portSelected = new ChronopicRegisterPort ("");
 
                //ChronoDebug cDebug = new ChronoDebug("Discover " + current_mode.ToString());
                //cDebug.Start();
@@ -165,7 +165,6 @@ public class DiscoverWindow
                List<ChronopicRegisterPort> alreadyDiscovered_l = new List<ChronopicRegisterPort> ();
                List<ChronopicRegisterPort> notDiscovered_l = new List<ChronopicRegisterPort> ();
                foreach (ChronopicRegisterPort crp in chronopicRegister.Crpl.L)
-               //foreach (ChronopicRegisterPort crp in crpl.L)
                         if (crp.Port != "")
                        {
                                if (crp.Type != ChronopicRegisterPort.Types.UNKNOWN &&
@@ -220,7 +219,7 @@ public class DiscoverWindow
                // 2) create the lists of widgets to be able to access later
                progressbar_microNotDiscovered_l = new List<Gtk.ProgressBar> ();
                button_microNotDiscovered_l = new List<Gtk.Button> ();
-               portAlreadyDiscovered_l = new List<string> ();
+               portAlreadyDiscovered_l = new List<ChronopicRegisterPort> ();
                button_microAlreadyDiscovered_l = new List<Gtk.Button> ();
 
                // 3) create widgets, lists, attach to table and show all
@@ -280,8 +279,8 @@ public class DiscoverWindow
                {
                        b.Sensitive = discoverMatchCurrentMode (crp.Type);
                        button_microAlreadyDiscovered_l.Add (b);
-                       portAlreadyDiscovered_l.Add (crp.Port);
-                       b.Clicked += new EventHandler (on_discover_button_clicked);
+                       portAlreadyDiscovered_l.Add (crp);
+                       b.Clicked += new EventHandler (on_discover_use_this_clicked);
                } else {
                        b.Sensitive = false;
                        button_microNotDiscovered_l.Add (b);
@@ -328,7 +327,7 @@ public class DiscoverWindow
                        {
                                (progressbar_microNotDiscovered_l[i]).Text = 
ChronopicRegisterPort.TypePrint(microDiscover.Discovered_l[i]);
                                button_microNotDiscovered_l[i].Sensitive = true;
-                               button_microNotDiscovered_l[i].Clicked += new 
EventHandler(on_discover_button_clicked);
+                               button_microNotDiscovered_l[i].Clicked += new 
EventHandler(on_discover_use_this_clicked);
                        }
                }
 
@@ -390,7 +389,7 @@ public class DiscoverWindow
                return false;
        }
 
-       private void on_discover_button_clicked (object o, EventArgs args)
+       private void on_discover_use_this_clicked (object o, EventArgs args)
        {
                Button bPress = (Button) o;
                bool success = false;
@@ -404,8 +403,7 @@ public class DiscoverWindow
                                                microDiscover.ToDiscover_l[i], microDiscover.Discovered_l[i]);
                                chronopicRegister.SetType (microDiscover.ToDiscover_l[i].SerialNumber,
                                                microDiscover.Discovered_l[i]);
-                               //portSelectedForceSensor = microDiscover.ToDiscover_l[i].Port;
-                               portSelected = microDiscover.ToDiscover_l[i].Port;
+                               portSelected = microDiscover.ToDiscover_l[i];
 
                                /* instead of connect, just do changes on gui in order to be used
                                if(! portFSOpened)
@@ -429,7 +427,6 @@ public class DiscoverWindow
                        if (button_microAlreadyDiscovered_l[i] == bPress)
                        {
                                portSelected = portAlreadyDiscovered_l[i];
-
                                success = true;
                        }
 
@@ -475,7 +472,7 @@ public class DiscoverWindow
        }
 
        //the port that user clicked on "Use this!"
-       public string PortSelected {
+       public ChronopicRegisterPort PortSelected {
                get { return portSelected; }
        }
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]