Как разблокировать виртуальные последовательные порты (в сочетании с 32feet.Net и EMDK)? - PullRequest
1 голос
/ 12 сентября 2011

Мне нужен виртуальный последовательный порт, так как программа № 1 должна установить соединение Bluetooth для второй программы (программа № 2), которая использует System.IO.Ports.SerialPort, не так ли? Не требуется, чтобы программы # 1 и # 2 выполнялись одновременно с использованием одного и того же последовательного порта.

  • 32Feet.NET : ОК. Но я получаю «Нет доступных портов», если запускаю SuD 7 раз (один за другим). COM9 -> COM7 -> COM5 -> COM4 -> COM2 -> COM0 -> «Нет доступных портов».

    1. программа # 1 вызывает

      bdi.SetServiceState (BluetoothService.SerialPort, true)

    2. 32feet.Net создает ключ в HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Bluetooth \ Serial \ Ports

    3. 32feet.Net звонки

      RegisterDevice (portPrefix, portIndex, "btd.dll", ref pep);

    4. программа # 2: this.comX.Open (); ... this.comX.Close ();

  • EMDK : Выдается исключение IndexOutOfRangeException, если я запускаю SuD 7 раз (один за другим). COM2 -> COM4 -> COM5 -> COM6 -> COM7 -> COM9 -> IndexOutOfRangeException.

    программа # 1: я использую LocalComPort и HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Bluetooth \ Serial \ Ports не обновлено.

    программа # 2: this.comX.Open (); ... this.comX.Close ();

В чем причина? Процесс № 1 и процесс № 2 не остались.

Ответы [ 2 ]

0 голосов
/ 15 сентября 2011

После того, как вы настроили порт один раз, зачем вам когда-либо делать это снова?

Сценарий сценария использования: Mr. X использует one мобильное устройство и один последовательный адаптер Bluetooth RS232 для связи с несколькими устройствами.Но для седьмого не останется никакого виртуального последовательного порта.

Я использовал 32feet.Net для ES400 без проблем .Для МС55, МС35 появляются обсуждаемые явления.И именно поэтому я создал этот вопрос.

Я пока не знаю, что происходит под капотом.Но что касается EMDK: если соединение больше не нужно, вы должны отключить устройство.

Я использую EMDK для Motorola ES400 и MC55:

/// <summary>
/// Removes the pairing, turns Bluetooth off and disables the bluetooth object.
/// </summary>
public void ReleaseLink(){
    try{
        this.remoteDevice.UnPair();
        this.bluetooth.Dispose();

Я использую 32feet.NET для Motorola MC35 (BluetoothSerialPortкоторый вызывает RegisterDevice):

if (!bdi.Authenticated)
{
    string pair = rd.Pin;
    paired = BluetoothSecurity.PairRequest(bdi.DeviceAddress, pair);

    if (!paired)
    {
         return;
    }
}

spp = BluetoothSerialPort.CreateClient(new BluetoothEndPoint(remoteAddress,BluetoothService.SerialPort));

public void ReleaseLink()
{
    try
    {
        BluetoothSecurity.RemoveDevice(spp.Address);
        spp.Dispose();
0 голосов
/ 14 сентября 2011

Как только вы настроили порт один раз, зачем вам когда-нибудь делать это снова?С SetServiceState конфигурация устанавливается в Реестре навсегда и, таким образом, будет существовать всегда, например, после перезагрузки ... Предположительно, то же самое верно и для метода, который вы используете в EMDK.Я не узнаю это имя (возможно, это только Motorola), но на моем M3 Sky я использовал BTExplorerApi, и у него есть флаг «навсегда» и «не навсегда» в функции настройки порта.

В 32feet.NET со стеком MSFT.(Примечание: Петр был экспертом в этом, а не я).: - (Как я понимаю, если вы используете класс BluetoothSerialPort, это создаст порт, настроенный временно (не для перезагрузки и т. Д.). Может быть, это то, что вы хотите?

...