Verbinden Sie sich mit dem BTLE-Gerät unter Verwendung von 32feet.net unter Verwendung eines eindeutigen Dienstprotokolls

8

Ich habe ein BTLE-Gerät (Bluetooth Low Energy), das ich an meinen PC anschließen muss. Um dies zu tun, verwende ich die Windows-API-Referenz in einer Desktop-WPF-App.

Das Bluetooth-Gerät ist ziemlich einfach: 1 Dienst, 2 Merkmale (eine lesen / notify, eine zu schreiben).

%Vor%

Windows-API-Code für C #

%Vor%

Nun, es funktioniert, irgendwie ... Es ist instabil wie die Hölle, die meiste Zeit erzeugt es Fehler, die nicht gelöst werden können:

Linie: BLEData_ReadNotify.WriteClientCharacteri ... erzeugt Es gibt keinen Benutzersitzungsschlüssel für die angegebene Anmeldesitzung. (Ausnahme von HRESULT: 0x80070572)

und Die Semaphor-Zeitüberschreitung ist abgelaufen. (Ausnahme von HRESULT: 0x80070079) . Dieser zweite Fehler tritt weniger häufig auf und tritt auf, wenn das Skript zuerst nichts erhält und dann über einen Timer versucht, den RUN-Befehl erneut zu senden, worauf alle abstürzen und der Fehler auftritt.

Beim Suchen auf Stackoverflow und vielen Sites habe ich festgestellt, dass beide obigen Fehler nicht zu lösen sind. Daher meine Frage:

Kann der obige Code mit 32Feet.net neu geschrieben werden?

Im Jahr 2012 war es nicht möglich link , um blö überhaupt zu verwenden, aber vielleicht ist es jetzt? Verwenden Sie die Scanmethode in dieser Antwort link kann ich mein BLE-Gerät finden, wenn es NICHT gepaart ist.

Also, ich habe einen Code ausprobiert

%Vor%

aber ich bin in der Zeile localClient.Connect mit dem Fehler gestrandet: Eine Ausnahme vom Typ 'System.Net.Sockets.SocketException' ist aufgetreten. Weitere Informationen: Ein Verbindungsversuch ist fehlgeschlagen, weil der verbundene Teilnehmer nach einer gewissen Zeit nicht ordnungsgemäß reagiert hat oder die Verbindung nicht hergestellt werden konnte, weil der verbundene Host nicht reagiert hat

Kann der Windows-API-Code in 32feet.net neu geschrieben werden, wenn ja, wie weiter?

Hinweis: Ich habe versucht, eine Verbindung zu einem BT2.1-Gerät mit Windows-nativen .net-Code, aber der serielle Port ist instabil und ein Schmerz im Kopf. Mit 32feet.net funktioniert es jetzt prächtig über SerialPort, sehr stabil und es verbindet sich jedes mal!

    
Jeffrey 12.11.2015, 00:42
quelle

1 Antwort

0

Ich hatte ein ähnliches Problem in Bezug auf

Die Semaphor-Zeitüberschreitung ist abgelaufen. (Ausnahme von HRESULT: 0x80070079).

Mein Problem wurde mit .net 4.7.1 gelöst. Auch musste ich sicherstellen, dass ich den neuesten Microsoft Bluetooth-Treiber für das Bluetooth-Gerät hatte ich war mit

SerialPort-Streams beenden den Prozess nicht mehr, wenn Ausnahmen im Hintergrundthread auftreten. Dies kann passieren, wenn Sie eine USB-Schnittstelle während der Verwendung entfernen. Dieses neue Verhalten wird durch die Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions AppContext Schalter gesteuert. Dieser Schalter wird standardmäßig auf truetf gesetzt, wenn .NET 4.7 oder niedriger verwendet wird. [428461, System.dll, Fehler]

Ссылка

Update: Eigentlich scheint es 2 Probleme in einem zu sein. .net Bug und ein Firmware-Problem, bei dem das Gerät nie auf dem Bluetooth-Modul Zurück mehr.

    
nate_weldon 30.10.2017 18:03
quelle

Tags und Links