module PrologixGpib::Discovery
Constants
- BROADCAST_ADDRESS
- BROADCAST_PORT
- HEADER_FMT
- NF_IDENTIFY
- NF_IDENTIFY_REPLY
- NF_MAGIC
- TIMEOUT
Public Instance Methods
avaliable_controllers()
click to toggle source
# File lib/prologix_gpib/discovery.rb, line 10 def avaliable_controllers { usb: usb_device_paths, lan: lan_device_ips } end
Private Instance Methods
lan_device_ips()
click to toggle source
# File lib/prologix_gpib/discovery.rb, line 76 def lan_device_ips seq = rand(0..65_535) # puts "Seq = #{seq}" sock = UDPSocket.new sock.setsockopt(:SOL_SOCKET, :SO_BROADCAST, true) # data = [NF_MAGIC, NF_IDENTIFY, seq, "\xFF\xFF\xFF\xFF\xFF\xFF"].pack(HEADER_FMT) data = NFHeader.new data.magic = NF_MAGIC data.identify = NF_IDENTIFY data.seq = seq data.eth_addr = 'FF:FF:FF:FF:FF:FF' sock.send(data.to_binary_s, 0, BROADCAST_ADDRESS, BROADCAST_PORT) array = [] begin Timeout.timeout(TIMEOUT) do while true data, addr = sock.recvfrom(256) reply = NFIdentifyReply.read(data) next if array.include?(reply.addr) array << reply.addr if reply.header.seq == seq && reply.header.identify == NF_IDENTIFY_REPLY end end rescue Timeout::Error sock.close array end end
usb_device_paths()
click to toggle source
# File lib/prologix_gpib/discovery.rb, line 108 def usb_device_paths path_str, dir = if RubySerial::ON_LINUX %w[ttyUSB /dev/] elsif RubySerial::ON_WINDOWS ['TODO: Implement find device for Windows', 'You lazy bugger'] else %w[tty.usbserial /dev/] end Dir.glob("#{dir}#{path_str}*") end