Ошибка 1359 Настройка режима радиосвязи Bluetooth Windows Embedded Handheld 6.5
Использование библиотеки In Hand 32feet для.NET Compact Framework 3.5 при запуске их примера проекта Chat2Device на Datalogic Scorpio X3 под управлением Windows Embedded Handheld 6.5 Professional CE OS 5.2.29366 Build 29366.5.3.12.48 команда для переключения радиомодуля Bluetooth на "Обнаруживаемый" "не удается. Я добавил дополнительный код сообщения об ошибках и обнаружил, что собственный код ошибки - 1359 (произошла внутренняя ошибка?)
Нет проблем при обмене данными между устройствами, использующими Bluetooth, в этом примере проекта на мобильном устройстве, получая только информацию PrimaryRadio или пытаясь установить RadioMode в любой режим, выдает исключение.
Полное сообщение об ошибке:
Ошибка Win32Exception при установке кода ошибки BluetoothRadio 1359 в InTheHand.Net.Bluetooth.Msft.WindowsBluetoothRadio.set_Mode(значение RadioMode)
Код является:
BluetoothRadio.PrimaryRadio.Mode = RadioMode.Discoverable;
Следующий код в образце также завершается схожим исключением:
var myRadio = BluetoothRadio.PrimaryRadio;
if (myRadio == null) {
wtr.WriteLine("No radio hardware or unsupported software stack");
return;
}
var mode = myRadio.Mode;
// Warning: LocalAddress is null if the radio is powered-off.
wtr.WriteLine("* Radio, address: {0:C}", myRadio.LocalAddress);
wtr.WriteLine("Mode: " + mode.ToString());
wtr.WriteLine("Name: " + myRadio.Name);
wtr.WriteLine("HCI Version: " + myRadio.HciVersion
+ ", Revision: " + myRadio.HciRevision);
wtr.WriteLine("LMP Version: " + myRadio.LmpVersion
+ ", Subversion: " + myRadio.LmpSubversion);
wtr.WriteLine("ClassOfDevice: " + myRadio.ClassOfDevice
+ ", device: " + myRadio.ClassOfDevice.Device
+ " / service: " + myRadio.ClassOfDevice.Service);
wtr.WriteLine("S/W Manuf: " + myRadio.SoftwareManufacturer);
wtr.WriteLine("H/W Manuf: " + myRadio.Manufacturer);
Любые предложения по исправлению или альтернативный метод, чтобы установить радио для обнаружения программно.
Соответствующие разделы библиотечного кода;
private const string btdrtDll = "btdrt.dll";
[DllImport(btdrtDll, SetLastError = true)]
internal static extern int BthReadScanEnableMask(out WinCeScanMask pmask);
[DllImport(btdrtDll, SetLastError = true)]
internal static extern int BthWriteScanEnableMask(WinCeScanMask mask);
[Flags()]
internal enum WinCeScanMask : byte
{
None = 0,
InquiryScan = 1,
PageScan = 2,
}
public void SetMode(bool? connectable, bool? discoverable)
{
// TO-DO set power-on here
//
WinCeScanMask mask;
if (connectable.HasValue && discoverable.HasValue) {
// Will set both bits so do NOT need to know their current value.
mask = 0;
} else {
int resultR = NativeMethods.BthReadScanEnableMask(out mask);
if (resultR != 0) {
throw new System.ComponentModel.Win32Exception(resultR, "Error getting BluetoothRadio mode");
}
}
switch (connectable) {
case true:
mask |= WinCeScanMask.PageScan;
break;
case false:
mask &= ~WinCeScanMask.PageScan;
break;
// null NOP
}
switch (discoverable) {
case true:
mask |= WinCeScanMask.InquiryScan;
break;
case false:
mask &= ~WinCeScanMask.InquiryScan;
break;
// null NOP
}
var result = NativeMethods.BthWriteScanEnableMask(mask);
if (result != 0) {
throw new System.ComponentModel.Win32Exception(result, "Error setting BluetoothRadio mode");
}
}
1 ответ
Я не уверен в "Datalogic Scorpio X3" с WEH65, но некоторые устройства поставляются со стеком Bluetooth не MS.
AFAIS, SDK "Datalogic Scorpio X3", предоставляет уникальный набор API для управления Bluetooth.
Стандартной функцией для установки режима модуля BT является BthSetMode. Другая функция BthWriteScanEnableMask используется 32 футами. Что, вероятно, не реализовано на Datalogic X3.