私は C# で作業するのが初めてなので、多くの人にとっては簡単に思えるかもしれませんが、ここで助けが必要です。Bluetooth low energy デバイスに接続するデスクトップ アプリケーションを c# で作成し、 Set character value functionを使用してデバイスに値を送信する必要があります。このためには、特性取得関数を使用して特性バッファを取得する必要があります。
これを行うための C++ コードがあります。
USHORT charBufferSize = 0;
HRESULT hres = BluetoothGATTGetCharacteristics( BLE_Service,NULL, 0,NULL,
&charBufferSize,BLUETOOTH_GATT_FLAG_NONE);
if(hres==HRESULT_FROM_WIN32(ERROR_MORE_DATA))
{
Characteristic_Buffer = new BTH_LE_GATT_CHARACTERISTIC [charBufferSize ];
}
USHORT val = 0;
// get characteristics after allocating required size
hres = BluetoothGATTGetCharacteristics(BLE_Service,NULL,charBufferSize,
Characteristic_Buffer,&val,BLUETOOTH_GATT_FLAG_NONE);
私はC#で同じことをしなければならないので、このようなことを試しました
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct BTH_LE_GATT_CHARACTERISTIC
{
public UInt16 ServiceHandle;
public BTH_LE_UUID CharacteristicUuid;
public UInt16 AttributeHandle;
public UInt16 CharacteristicValueHandle;
public Boolean IsBroadcastable;
public Boolean IsReadable;
public Boolean IsWritable;
public Boolean IsWritableWithoutResponse;
public Boolean IsSignedWritable;
public Boolean IsNotifiable;
public Boolean IsIndicatable;
public Boolean HasExtendedProperties;
}
[DllImport(@"BluetoothApis.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern Boolean BluetoothGATTGetCharacteristics(
IntPtr Device_Handle,
IntPtr Service,
UInt16 Char_Buffer_Count,
ref BTH_LE_GATT_CHARACTERISTIC CharBuffer,
out UInt16 RequiredSize,
uint Flags
);
UInt16 Size_Required = 0;
UInt16 NBytes = 0;
BTH_LE_GATT_CHARACTERISTIC gattChar = new BTH_LE_GATT_CHARACTERISTIC();
Success = BluetoothGATTGetCharacteristics(Ble_Device, IntPtr.Zero, 0, IntPtr.Zero,
out Size_Required, (uint)BTH_LE_FLAGS.BLUETOOTH_GATT_FLAG_NONE);
私はここで立ち往生しています。ここで、関数の 2 回目の呼び出しを行うには、C++ で行ったようにメモリを特性バッファーに割り当てる必要があります。
これを行う方法についての提案またはC#でCharacteristicバッファを取得する他の方法はありますか??
前もって感謝します