2016-11-21 1 views
1

Windows 8.1 이상의 Bluetooth Low Energy 용 WinRT API를 사용하여 응용 프로그램을 개발했습니다. 잠시 동안 작동했지만 심각한 문제가 발생했습니다. Windows를 재부팅 한 후에는 소프트웨어가 장치에 연결할 수 없습니다.Windows RT Bluetooth LE API를 사용하는 .NET - Windows를 다시 시작한 후 장치를 읽거나 쓸 수 없습니다.

소프트웨어를 닫았다가 다시 시작하면 여전히 페어링되지 않습니다. 작동하는 유일한 방법은 기기를 페어링 해제하고 다시 페어링하는 것입니다. 그러나 사용자를위한 유스 케이스를 고려하면 이는 완전히 용납되지 않습니다. iOS와 페어링 및 상호 작용이 가능하기 때문에 기기 펌웨어에 문제가있을 수 없습니다.

디버깅 중에는 txCharacteristic.WriteValueAsync(chunk, GattWriteOption.WriteWithoutResponse)을 사용하여 기기에 쓸 때마다 "잘못된 기능"이 표시됩니다. 그러나, 정확히이 장치가 지원하는 것이기 때문에 이것이 올바른 함수라는 것을 알고 있습니다. 페어 페어링과 페어 페어를 다시해도 코드는 잘 작동합니다. 나는 PresentationFormats 속성을 확장하려고 할 때 또한,이 오류가 발생합니다 :

PresentationFormats 'this.txServiceCharacteristic.PresentationFormats는'형식의 예외를 던진 'System.AccessViolationException'System.Collections.Generic.IReadOnlyList을 {System.AccessViolationException}

그래서이 문제는 Windows에서 발생합니다. 현재 실행 중입니다.

Bluetooth가 자동으로 시작되도록 설정하고 (기본 수동 "시작됨"시작) 장치 드라이버를 업데이트하려고 시도했지만 아무 것도이 문제를 완화하지 못하는 것 같습니다. 누구든지이 문제의 원인이 될 수있는 아이디어가 있습니까?

감사합니다.

EDIT : GattProtectionLevel을 EncryptionAndAuthenticationRequired에서 Plain으로 변경하면 오류가 수정되었습니다. 그러나 Windows를 재부팅 한 후에 EncryptionAndAuthenticationRequired가 잘못된 모드가되는 이유는 무엇입니까?

답변

1

제 편집에서 언급했듯이 에서 Plain으로 GattProtectionLevel을 변경하면 오류가 수정됩니다.

이제 우리는 암호화 또는 인증이 없다는 의미에서 걱정했습니다. 그러나, 우리가 블루투스 패킷 스니퍼를 사용하여 확실하지 않은 경우에는 그렇지 않습니다. 이는 쌍이 일 때 연결이 아닌 암호화 및 인증에 대한 세부 정보가 적용되기 때문입니다. documentation

:

일반 : 기본 보호 수준을 사용합니다.

PlainNone을 의미하지 않습니다. 그것은 "장치가 요구하는 최소한의 보안 사용"또는 본질적으로 쌍 시간에 어떤 정보를 얻었는지에 근거하여 자동적으로 의미합니다.

관련 문제