2016-10-24 2 views
4

Windows 10 Bluetooth Ble (저에너지) API의 BluetoothLEAdvertisementDataSection.BluetoothLEAdvertisementDataSection class에 문제가 있습니다.Bluetooth Windows 10 API의 저에너지 광고 데이터 제한

이 코드를 사용하여 IBuffer 회원 Data의 길이를 확인하는 경우 : 자세한 내용은 29

:

데이터 용량 :

var myDataSection = new BluetoothLEAdvertisementDataSection(); 
Debug.WriteLine($"Data Capacity: {myDataSection.Data.Capacity}"); //Looks like SO needs to update for C# 6.0 

내가 예상 출력을 얻을를 BLE 패킷에 대한 정보를 보려면 this great blog post을 방문하는 것이 좋습니다.

이제 myPayload이라는 길이가 293 바이트 인 byte[]을 선언했다고 가정 해 보겠습니다. 다음 코드는 예외가 발생합니다 ". 값이 예상 범위를 벗어 않는다"

DataWriter writer = new DataWriter(); 
writer.WriteBytes(myPayload); 
myDataSection.Data = writer.DetachBuffer(); //throws ArgumentException 

ArgumentException 매우 유용하게

이 제안을 사실

같은 오류 myPayload 바이트 20+ 결과 모든 사이즈. 그러나 내가 바이트를으로 길게 만들면 오류가 발생하지 않습니다.

예, 매우 화가났습니다. this answer이 도움이되지 않았습니다.

답변

2

이것은 정말 슬프지만 실제로 추가 한 바이트 수를 잘못 계산했습니다. 29 바이트이 작동합니다. 30은 그렇지 않습니다. 이것은 API 문제가 아닙니다.

static readonly byte[] myPayload = 
{0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF, //8 bytes 
0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF, //8 bytes 
0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF, //8 bytes 
0x00,0x00,0x00,0x00,0x00}; //5 bytes Total:29 bytes    

... 정상적으로 작동합니다.

+1

비슷한 상황에서 앞으로'static readonly byte [29] myPayload = ... '에서 배열 길이를 지정하면 도움이 될 것입니다. –

+0

@Daniel @Daniel 아이디어가 마음에 들지만 신택스가 약간 필요합니다 수정 :'static readonly byte [] myPayload = 새로운 바이트 [29] {/ * 29 바이트의 데이터 * /}' – ZX9

+0

구문을 알지 못했지만 테스트하지는 않았지만 아이디어를 보았습니다. 다른 옵션을 보려면 [가능한 모든 C# 배열 초기화 구문] (http://stackoverflow.com/questions/5678216/all-possible-c-sharp-array-initialization-syntaxes)을 참조하십시오. –

관련 문제