2017-06-09 7 views
0

Bluetoothの低エネルギー広告に含まれているデータを分析しようとしていますが、これはこれまでのコードです。Bluetoothで低エネルギーの広告データをC++で抽出する

HRESULT BLEWatcher::OnAdvertisementReceived(IBluetoothLEAdvertisementWatcher* watcher, IBluetoothLEAdvertisementReceivedEventArgs* args) 
{ 

    IBluetoothLEAdvertisement** advertisement; 
    args->get_Advertisement(advertisement); 

    __FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection** dataSections; 
    (*advertisement)->get_DataSections(dataSections); 
    IBluetoothLEAdvertisementDataSection** dataSection; 
    (*dataSections)->GetAt(2, dataSection); 
    ABI::Windows::Storage::Streams::IBuffer** buffer; 
    (*dataSection)->get_Data(buffer); 
    ComPtr<ABI::Windows::Storage::Streams::IDataReader> reader; 
    UINT32 *length; 
    (*buffer)->get_Length(length); 

    return S_OK; 
} 

データをIBufferから、好ましくはバイト配列として抽出する方法が見つかりません。より良いデータの抽出方法があれば、誰でもIBufferをバイト配列に変換する方法を知っていれば、あなたの助けには大いに感謝しています。

また、これまでのコードが正しいことを確認する方法がないため、間違いがあった場合はお気軽にお知らせください。

+0

これは、次のように役立ちます。https://stackoverflow.com/questions/11853838/getting-an-array-of-bytes-out-of-windowsstoragestreamsibuffer –

答えて

0

私は答えを見つけました。ほとんどの場合、バッファは既にcomptrオブジェクトであるため、他の人がバッファを変換するために使用する余分なキャストは不要です。

HRESULT BLEWatcher::OnAdvertisementReceived(IBluetoothLEAdvertisementWatcher* watcher, IBluetoothLEAdvertisementReceivedEventArgs* args) 
{ 


    ComPtr<IBluetoothLEAdvertisement> advertisement; 
    args->get_Advertisement(&advertisement); 
    ComPtr<__FIVector_1_Windows__CDevices__CBluetooth__CAdvertisement__CBluetoothLEAdvertisementDataSection> dataSections; 
    advertisement->get_DataSections(&dataSections); 
    ComPtr<IBluetoothLEAdvertisementDataSection> dataSection; 
    //Get appropriate data section 
    dataSections->GetAt(2, &dataSection); 
    ComPtr<IBuffer> buffer; 
    dataSection->get_Data(&buffer); 
    ComPtr<IBufferByteAccess> bufferByteAccess; 
    buffer.As(&bufferByteAccess); 
    byte* bytes = nullptr; 
    bufferByteAccess->Buffer(&bytes); 

    //Handle bytes here 

    return S_OK; 
} 
関連する問題