hparra / ruby-serialport

ruby-serialport is a Ruby library that provides a class for using RS-232 serial ports
http://rubygems.org/gems/serialport
GNU General Public License v2.0
246 stars 58 forks source link

Bluetooth to serial interface not working on Windows #29

Open digamesystems opened 13 years ago

digamesystems commented 13 years ago

Hi.

I've been using your nice gem for a while now on different projects. Thanks!

Recently, I've been trying to connect to a serial device using a bluetooth tranceiver module to provide a wireless interface back to my laptop.

http://www.mdfly.com/index.php?main_page=product_info&cPath=8_47&products_id=769&zenid=h6pb9e47rc6klkvkiattb6uot4

(There are other, similar devices people have used to talk to Arduinos, etc...)

The module initiates a bluetooth connection with my laptop and creates a virtual serial port on my Windows system. I simply pair the device w/windows using a passkey and a new serial port is generated.

Using Hyperterm or Teraterm or other programs I've written in VB and C# I can open this port and communicate with my device as if the bluetooth link were just a serial connection.

I figured I could do the same thing with your library, but I'm having problems. (I've never had problems with standard serial or USB-Serial devices I've used, though)

Here's what's happening.

Standard com port on com1 Bluetooth serial port on com2 (Again, Hyperterminal, TeraTerm and other programs seem to connect to Com2 fine...)

C:>ruby --version ruby 1.9.2p180 (2011-02-18) [i386-mingw32]

C:>gem list serialport

* LOCAL GEMS *

serialport (1.0.4)

C:>irb irb(main):001:0> require 'serialport' => true irb(main):003:0> sp0=SerialPort.new(0) => #<SerialPort:fd 3> irb(main):004:0> sp0.get_modem_params => {"baud"=>115200, "data_bits"=>8, "stop_bits"=>1, "parity"=>0} irb(main):005:0> sp1=SerialPort.new(1) Errno::EINVAL: Invalid argument - .\COM2 from c:/Ruby192/lib/ruby/gems/1.9.1/gems/serialport-1.0.4/lib/serialport.rb:16:in create' from c:/Ruby192/lib/ruby/gems/1.9.1/gems/serialport-1.0.4/lib/serialport.rb:16:innew' from (irb):5 from c:/Ruby192/bin/irb:12:in `

' irb(main):006:0>

Thanks for your help!

John.

digamesystems commented 12 years ago

Checking in... Any thoughts on this?

hparra commented 12 years ago

Sorry. I wasn't ignoring. I've been traveling for almost a year now. Took a quick look at code. This should work. Have you tried specifying that port using the string, "COM2"? Any different?

dolzenko commented 11 years ago

+1 with Huawei modem. Opening real serial port (COM1) works fine.

digamesystems commented 11 years ago

I let this go a while ago and focused on using your gem on USB serial ports. I've got a project going now where I'm really going to have to figure out this Bluetooth thing...

I've upgraded to 1.1.0 and see the same behavior. "COM2" Shows the same error.

Windows 7 pro,

c:\users\john>ver

Microsoft Windows [Version 6.1.7601]

c:\users\john>ruby --version ruby 1.9.3p125 (2012-02-16) [i386-mingw32]

c:\users\john>gem list serialport

* LOCAL GEMS *

serialport (1.1.0, 1.0.4)

c:\users\john>irb irb(main):002:0> require 'serialport' => true irb(main):003:0> sp2=SerialPort.new(2) Errno::EINVAL: Invalid argument - .\COM3 from C:/Ruby193/lib/ruby/gems/1.9.1/gems/serialport-1.1.0/lib/serialport.rb:16:in create' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/serialport-1.1.0/lib/serialport.rb:16:innew' from (irb):3 from C:/Ruby193/bin/irb:12:in <main>' irb(main):004:0> sp2=SerialPort.new("COM3") Errno::EINVAL: Invalid argument - \\.\COM3 from C:/Ruby193/lib/ruby/gems/1.9.1/gems/serialport-1.1.0/lib/serialport.rb:16:increate' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/serialport-1.1.0/lib/serialport.rb:16:in new' from (irb):4 from C:/Ruby193/bin/irb:12:in

'

As in the earlier report, Hyperterminal, Teraterm, and code I've written in VB and C# all seem to be working fine with the device.

Driver details: "Standard Serial over Bluetooth link (COM3)" Driver provider: Microsoft Driver Date: 6/21/2006 Driver Version: 6.1.7600.16385 Driver File: C:\Windows\System32\DRIVERS\bthmodem.sys

Any help would be greatly appreciated. -- I'd even be willing to lend one of these bluetooth modules to you for testing.

Regards,

John Price

hparra commented 11 years ago

Hey guys. Unfortunately I haven't used Bluetooth devices with this gem on any OS. A half-baked attempt many years ago resulted in weirdness.

At first glance, I noticed that "Errno::EINVAL: Invalid argument - .\COM3" is missing a slash, but it's correctly stated some lines later. I thought it may have something to do with .\ (http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx#win32_device_namespaces) as we explicitly prepended it to all values passed in to support COM values greater than 9.

The reason I bring that up is because the Errno::EINVAL error comes from the OS. I'm wondering if it doesn't like the .\ for bluetooth devices. The msdn doc above does mention it doesn't work for all APIs. It's the only idea I have at the moment.

digamesystems commented 11 years ago

Thanks for getting back to me.

I'm wondering if there's a timeout happening in the API call to open the port. When I connect over Bluetooth in other languages, the unit spends a noticeable time (c.a. 3 seconds) negotiating with the host before I see the module's LED go from blinking (searching) to continuously on (locked), allowing me to send data to the device.

Thoughts?

digamesystems commented 11 years ago

'Didn't mean to close. Sorry. (Wrong button).