Detecter type port serie (bluetooth ou serial)
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:
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:
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();
}
} |