Bonjour

J'ai un systeme branché sur un port com.
Afin d'aider mes utilisateurs, j'essais de lister les ports com de la machine et de lancer un Helloworld a mon système afin de detecter sa présence et de choisir le bon port Com.
Sur une machine sans bluetooth : No problem
Des qu'il y a un port bluetooth l'application plante pdt 3min.

Comment connaitre le type de port Serie (virtuel, bluetooth)
ou comment reconnaitre les port bluetooth
afin de ne pas lancer le test sur ce type de port

Cordialement

Le test est par la function suivante

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 public ArrayList DiscoverPluggedDevices()
        {
            ArrayList comList = new ArrayList();
            string[] ports = System.IO.Ports.SerialPort.GetPortNames();
            foreach (string s in ports)
            {
                addMessage(0, "Search Device on  port " + s, " -> ");
                DiscoverDevices Dut = new DiscoverDevices();
                if (Dut.TestSerialPort(s))
                {
                    addMessage(0, "Device found on  port " + s, " <- ");
                    comList.Add(s);
                }
                else
                    addMessage(0, "No device found on  port " + s, " <- ");
            }
            return comList;
        }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
 public bool TestSerialPort(string PortCom)
        {
            bool bRet = true;
            try
            {
                serialPort = new SerialPort(PortCom, 115200, Parity.None, 8, StopBits.One);
                serialPort.Open();
                serialPort.DataReceived += new SerialDataReceivedEventHandler(OnDataReceived);
                serialPort.ErrorReceived += new SerialErrorReceivedEventHandler(OnErrorReceived);
                serialPort.PinChanged += new SerialPinChangedEventHandler(OnSerialPinChanged);
                sendMessage(HelloWorld);
                nbStartFrame = 0;
                if (ReceiveEvent.WaitOne(2000, false))
                {
                    bRet = true;
                }
                else
                {
                    bRet = false;
                }
                serialPort.Close();
                return bRet;
            }
            catch
            {
                return false;
            }
        }
 
 private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            const string completionTag = "Tunnel|";
            while (true)
            {
                try
                {
                    if ((serialPort.BytesToRead > 5) && (serialPort.BytesToRead < 100))
                        inboundBuffer += serialPort.ReadExisting();
                    else
                        break;
                }
                catch
                {
                    break;
                }                int length = inboundBuffer.Length;
 
                if (length > 100) break;
                if (nbStartFrame > 5) break;
                int frameStart = inboundBuffer.IndexOf(CHAR_StartOfFrame);
                if (frameStart != 0)
                {
                    if (frameStart < 0)
                    {
                        inboundBuffer = "";
                        break;
                    }
                    inboundBuffer = inboundBuffer.Substring(frameStart);
                    frameStart = 0;
                    nbStartFrame++;
                }
 
                int frameEnd = inboundBuffer.IndexOf(CHAR_EndOfFrame, 0);
                if (frameEnd < 0)
                    break;
 
                // A full message is available.
                string message = inboundBuffer.Substring(1, frameEnd - 1);
                inboundBuffer = inboundBuffer.Substring(frameEnd + 1);
 
                if (!message.StartsWith(completionTag)) break;
 
                if (message.Length > 12)
                {
                    serialNumber = message.Substring(10, 2) + message.Substring(8, 2) + message.Substring(6, 2) + message.Substring(4, 2);
 
                }
                else
                    break;
                ReceiveEvent.Set();
 
            }
        }