如何解锁虚拟串口(与32feet.Net和EMDK相关)?

时间:2011-09-12 15:45:29

标签: bluetooth serial-port

我确实需要虚拟串口,因为程序#1必须为使用System.IO.Ports.SerialPort的第二个程序(程序#2)设置蓝牙连接,不是吗?如果程序#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. 中创建密钥
    4. 32feet.Net致电

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

    5. 程序#2:this.comX.Open(); ... this.comX.Close();

  • EMDK :如果我启动SuD 7次(一个接一个),则抛出IndexOutOfRangeException。 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 :(得分:0)

一旦你设置了端口一次,你为什么要再次这样做?使用SetServiceState,配置在注册表中永久设置,因此将永远存在,例如,重新启动后...大概对于您在EMDK中使用的方法也是如此。我不认识那个名字(也许只是摩托罗拉)但是在我的M3 Sky上我使用了BTExplorerApi,它在端口设置功能中有一个永远和永远的标志。

在带有MSFT堆栈的32feet.NET上。 (注意:彼得是这方面的专家而不是我)。 : - ,(据我所知,如果你使用类BluetoothSerialPort,那将创建一个临时配置的端口(不会重启等)。也许这就是你想要的?

答案 1 :(得分:0)

  

一旦你设置了端口一次,你为什么要再次这样做?

用例场景:X先生使用一个移动设备和一个串行RS232蓝牙适配器与多个设备进行通信。但是对于第七个,将不会有任何虚拟串口。

我使用 32feet.Net 用于ES400 无故障。对于MC55,MC35出现了正在讨论的现象。这就是我提出这个问题的原因。

我不知道引擎盖下发生了什么。但就EMDK而言:如果不再需要连接,则必须取消配对设备。

我正在为摩托罗拉ES400和MC55使用 EMDK

/// <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(调用RegisterDevice的BluetoothSerialPort):

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();