prologix_gpib 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0291d4b1a403dbcfb0d04712ac0a56540557713e474c042e7f0e31230667063c'
4
- data.tar.gz: bf2a09c534d2ed527ff86f40f536e4b50c17c528b327004c5fb74afae60b7e79
3
+ metadata.gz: d9ad45cfaf230b41f26ec6102bb89f34b36f8a6f38439b96a578ae4f9b338a87
4
+ data.tar.gz: 336106999abd44891bc67b872fe45c8bf222356725675b90321409aee3a0e751
5
5
  SHA512:
6
- metadata.gz: 8af96e69eb2c5e558b93986568053cb3c7a423d51cd80c7ab9482e95a4d253f79b1afaa807eaa726ccd088b92e278c1e5c6a58cc908ec3f33009f7b398b4621d
7
- data.tar.gz: 3dc286605d8bd9bab02a61a3a653097b8037084689efb4731cf4856c76c28372834d929596d4fbf32532c0e32d21b6e0341a7f294f7348702b7f1e72fa409a37
6
+ metadata.gz: ee481f80d7bb2e9d3e62cdeb2c86e69b5a73422f93387e133c4837329ec08b3df429c92cc6cc2035ea2d3227b82d6d5a2b4858bb5af83f12358e988f8efe4173
7
+ data.tar.gz: e21355fd8937ebfbbf368838b84fe6143bf0e08c82c05a98b035e897277bdb3ceabe7a78d075b780d70fe48dcb3c9ab16806dade3bcd14e9b597d336f3b65767
data/.tool-versions CHANGED
@@ -1 +1 @@
1
- ruby 3.1.0
1
+ ruby 3.1.2
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- prologix_gpib (0.4.4)
4
+ prologix_gpib (0.5.0)
5
5
  activesupport (~> 7.0.1)
6
6
  bindata (~> 2.4.10)
7
7
  rubyserial (~> 0.6.0)
@@ -11,19 +11,19 @@ PATH
11
11
  GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
- activesupport (7.0.1)
14
+ activesupport (7.0.3)
15
15
  concurrent-ruby (~> 1.0, >= 1.0.2)
16
16
  i18n (>= 1.6, < 2)
17
17
  minitest (>= 5.1)
18
18
  tzinfo (~> 2.0)
19
19
  bindata (2.4.10)
20
20
  coderay (1.1.3)
21
- concurrent-ruby (1.1.9)
21
+ concurrent-ruby (1.1.10)
22
22
  ffi (1.15.5)
23
- i18n (1.8.11)
23
+ i18n (1.10.0)
24
24
  concurrent-ruby (~> 1.0)
25
25
  method_source (1.0.0)
26
- minitest (5.15.0)
26
+ minitest (5.16.1)
27
27
  pry (0.14.1)
28
28
  coderay (~> 1.1)
29
29
  method_source (~> 1.0)
@@ -47,4 +47,4 @@ DEPENDENCIES
47
47
  rake (~> 10.0)
48
48
 
49
49
  BUNDLED WITH
50
- 2.2.32
50
+ 2.3.16
data/NetFinder_info.md ADDED
@@ -0,0 +1,30 @@
1
+ # Net Finder
2
+
3
+ NetFinder, uses UDP broadcast to locate and configure GPIB-ETH controllers on a network.
4
+ You can find an implementation of the protocol in the nfcli utility
5
+ http://prologix.biz/downloads/nfcli.tar.gz
6
+
7
+ ### Discovery
8
+
9
+ - Create NF_IDENTIFY packet.
10
+ - Set sequence to a random value
11
+ - Set eth_addr to all ones
12
+ - Broadcast NF_IDENTIFY datagram to port 3040/UDP.
13
+ - Listen for NF_IDENTIFY_REPLY datagrams.
14
+ - Verify sequence matches NF_IDENTIFY packet
15
+
16
+ ### Configuration
17
+
18
+ - Create NF_ASSIGNMENT packet
19
+ - Set sequence to a random value
20
+ - Set eth_addr to MAC address of desired device Set ip_type to NF_IP_DYNAMIC or NF_IP_STATIC If ip_type is NF_IP_DYNAMIC specify ip, mask and gateway addresses.
21
+ - Broadcast NF\* ASSIGNMENT datagram to port 3040/UDP.
22
+ - Listen for NF_ASSIGNMENT_REPLY datagrams.
23
+ - Verify sequence matches that of NF_ASSIGNMENT packet Check result field for NF_SUCCESS
24
+
25
+ Notes:
26
+
27
+ 1. You may get multiple replies. Discard duplicate replies.
28
+ 2. All multi-byte values are in network order (big-endian)
29
+ 3. On multi-homed hosts, make sure broadcasts go out over all interfaces.
30
+ 4. NetFinder protocol only works within the same subnet as routers will not forward UDP broadcast packets.
data/README.md CHANGED
@@ -28,14 +28,16 @@ The gem comes with a simple cli for finding controllers:
28
28
 
29
29
  ```bash
30
30
  $ plx list
31
- +-------------------------------------------------------------------------------+
32
- | Prologix Controllers |
33
- +-------+-------------------------------+---------+-----------------------------+
34
- | index | Controller | Version | Path |
35
- +-------+-------------------------------+---------+-----------------------------+
36
- | 0 | Prologix GPIB-USB Controller | 6.101 | /dev/tty.usbserial-PX9HPBMB |
37
- | 1 | Prologix GPIB-USB Controller | 6.107 | /dev/tty.usbserial-PXEGWA9A |
38
- +-------+-------------------------------+---------+-----------------------------+
31
+ +-----------------------------------------------------------------------------------------+
32
+ | Prologix Controllers |
33
+ +-------+------------------------------------+--------------+-----------------------------+
34
+ | index | Controller | Version | Location |
35
+ +-------+------------------------------------+--------------+-----------------------------+
36
+ | 0 | Prologix GPIB-USB Controller | 6.101 | /dev/tty.usbserial-PX9HPBMB |
37
+ | 1 | Prologix GPIB-USB Controller | 6.107 | /dev/tty.usbserial-PXEGWA9A |
38
+ | 2 | Prologix GPIB-LAN Controller | 01.03.00.00 | 192.168.10.161 |
39
+ | 3 | Prologix GPIB-ETHERNET Controller | 01.06.06.00 | 192.168.10.127 |
40
+ +-------+------------------------------------+--------------+-----------------------------+
39
41
 
40
42
  $ plx info 0
41
43
 
@@ -50,6 +52,18 @@ $ plx info 0
50
52
  EOS: Append CR+LF
51
53
  EOT: Enabled
52
54
 
55
+ plx info 3
56
+
57
+ Prologix gpib-ethernet controller
58
+ Path: 192.168.10.127
59
+ Firmware: 01.06.06.00
60
+ Mode: Controller
61
+ Device Address: 5
62
+ Auto Read: Enabled
63
+ Read Timeout: 500
64
+ Eoi Assertion: Enabled
65
+ Eos: Append CR+LF
66
+ Eot: Disabled
53
67
  ```
54
68
 
55
69
  ### Finding Controllers
@@ -67,7 +81,7 @@ irb(main):002:0> controllers = f.avaliable_controllers
67
81
 
68
82
  ### Working with Controllers
69
83
 
70
- I'm not enamoured by this interface, I'd like a more ruby like way of finding and connecting controllers thats less clunky. It works for now, but may change as we refine the implementation.
84
+ I'm not enamoured by this interface, I'd like a more ruby like way of finding and connecting controllers thats less clunky. It works for now, but may change as we refine things.
71
85
 
72
86
  ```ruby
73
87
  irb(main):003:0> device = PrologixGpib::UsbController.new(controllers[:usb][0])
@@ -2,28 +2,34 @@ require 'thor'
2
2
  require 'pp'
3
3
  require 'prologix_gpib'
4
4
  require 'terminal-table'
5
+ require 'resolv'
5
6
 
6
7
  module PrologixGpib
7
8
  class CLI < Thor
9
+ def initialize(*args)
10
+ super
11
+ @controllers = PrologixGpib::Finder.new.avaliable_controllers
12
+ end
13
+
8
14
  desc 'list', 'List all connected controllers'
9
15
 
10
16
  def list
11
- puts controller_table(PrologixGpib::Finder.new.avaliable_controllers)
17
+ puts controller_table(@controllers)
12
18
  end
13
19
 
14
- desc 'info', 'Display Controller information'
15
- option :path, alias: :p
16
- def info
20
+ desc 'info [INDEX]', 'Display Controller information'
21
+ option :path, aliases: :p
22
+ def info(index)
17
23
  return unless controllers_connected?
18
24
 
19
- paths = options[:path].nil? ? PrologixGpib.usb_paths : [options[:path]]
25
+ controller_paths = @controllers.map { |k, v| v }.flatten
20
26
 
21
- paths.each do |path|
22
- hash = PrologixGpib::UsbController.new(path).config
23
- puts "\n #{titleise hash.delete(:device_name)}"
24
- puts "\tPath: #{path}"
25
- hash.each { |k, v| puts "\t#{titleise(k)}: #{v}" }
26
- end
27
+ path = controller_paths[index.to_i]
28
+ hash = ip_address?(path) ? PrologixGpib::LanController.new(path).config : PrologixGpib::UsbController.new(path).config
29
+
30
+ puts "\n #{titleise hash.delete(:device_name)}"
31
+ puts "\tPath: #{path}"
32
+ hash.each { |k, v| puts "\t#{titleise(k)}: #{v}" }
27
33
  end
28
34
 
29
35
  private
@@ -59,11 +65,15 @@ module PrologixGpib
59
65
  end
60
66
 
61
67
  def controllers_connected?
62
- PrologixGpib.usb_paths.count >= 1
68
+ @controllers[:usb].any? || @controllers[:lan].any?
63
69
  end
64
70
 
65
71
  def titleise(string)
66
72
  string.to_s.split('_').map(&:capitalize).join(' ')
67
73
  end
74
+
75
+ def ip_address?(string)
76
+ string =~ Resolv::IPv4::Regex ? true : false
77
+ end
68
78
  end
69
79
  end
@@ -1,4 +1,4 @@
1
- module PrologixGpib::Usb::Commands
1
+ module PrologixGpib::Commands
2
2
  def config
3
3
  error_message = 'Error'
4
4
  device_version = version.split('version').map(&:strip)
@@ -40,7 +40,7 @@ module PrologixGpib::Usb::Commands
40
40
  conf
41
41
  end
42
42
 
43
- # This command configures the Prologix GPIB-USB controller to be a :controller or :device.
43
+ # # This command configures the Prologix GPIB-USB controller to be a :controller or :device.
44
44
  def mode=(op_mode)
45
45
  mode =
46
46
  case op_mode
@@ -60,8 +60,8 @@ module PrologixGpib::Usb::Commands
60
60
  end
61
61
  alias operation_mode mode
62
62
 
63
- # Timeout value, in milliseconds, used in the read command and spoll command.
64
- # Any value between 1 and 3000 milliseconds.
63
+ # # Timeout value, in milliseconds, used in the read command and spoll command.
64
+ # # Any value between 1 and 3000 milliseconds.
65
65
  def timeout=(milliseconds)
66
66
  return unless connected? || milliseconds.class != Integer
67
67
 
@@ -72,8 +72,8 @@ module PrologixGpib::Usb::Commands
72
72
  device_query('++read_tmo_ms')
73
73
  end
74
74
 
75
- # PrologixGPIB-USB controller can be configured to automatically address instruments to 'talk' after sending a command in order to read the response.
76
- # *** Avaliable in Controller mode. When enabled can cause the prologix controller to lockup. ***
75
+ # # PrologixGPIB-USB controller can be configured to automatically address instruments to 'talk' after sending a command in order to read the response.
76
+ # # *** Avaliable in Controller mode. When enabled can cause the prologix controller to lockup. ***
77
77
  def auto=(auto_mode)
78
78
  mode =
79
79
  case auto_mode
@@ -93,8 +93,8 @@ module PrologixGpib::Usb::Commands
93
93
  end
94
94
  alias auto_read_after_write auto
95
95
 
96
- # In :controller mode, address refers to the GPIB address of the instrument being controlled.
97
- # In :device mode, it is the address of the GPIB peripheral that Prologix GPIB-USB controller is emulating.
96
+ # # In :controller mode, address refers to the GPIB address of the instrument being controlled.
97
+ # # In :device mode, it is the address of the GPIB peripheral that Prologix GPIB-USB controller is emulating.
98
98
  def address=(addr)
99
99
  write("++addr #{addr}")
100
100
  end
@@ -104,8 +104,8 @@ module PrologixGpib::Usb::Commands
104
104
  device_query('++addr')
105
105
  end
106
106
 
107
- # This command enables or disables the assertion of the EOI signal with the last character of any command sent over GPIB port.
108
- # Some instruments require EOI signal to be asserted in order to properly detect the end of a command.
107
+ # # This command enables or disables the assertion of the EOI signal with the last character of any command sent over GPIB port.
108
+ # # Some instruments require EOI signal to be asserted in order to properly detect the end of a command.
109
109
  def eoi=(eoi_mode)
110
110
  mode =
111
111
  case eoi_mode
@@ -123,13 +123,13 @@ module PrologixGpib::Usb::Commands
123
123
  device_query('++eoi')
124
124
  end
125
125
 
126
- # This command specifies GPIB termination characters. When data from host is received over USB, all non-escaped LF, CR and ESC characters are removed and GPIB terminators, as specified by this command, are appended before sending the data to instruments.
127
- # This command does not affect data from instruments received over GPIB port.
128
- # EXAMPLES:
129
- # 0 Append CR+LF
130
- # 1 Append CR to instrument commands
131
- # 2 Append LF to instrument commands
132
- # 3 Do not append anything to instrument commands
126
+ # # This command specifies GPIB termination characters. When data from host is received over USB, all non-escaped LF, CR and ESC characters are removed and GPIB terminators, as specified by this command, are appended before sending the data to instruments.
127
+ # # This command does not affect data from instruments received over GPIB port.
128
+ # # EXAMPLES:
129
+ # # 0 Append CR+LF
130
+ # # 1 Append CR to instrument commands
131
+ # # 2 Append LF to instrument commands
132
+ # # 3 Do not append anything to instrument commands
133
133
  def eos=(eos_mode)
134
134
  error_message = "Invalid arg: '#{eos_mode}'"
135
135
  raise ArgumentError, error_message unless [0, 1, 2, 3].include? eos_mode
@@ -141,7 +141,7 @@ module PrologixGpib::Usb::Commands
141
141
  device_query('++eos')
142
142
  end
143
143
 
144
- # This command enables or disables the appending of a user specified character (see eot_char) to USB output whenever EOI is detected while reading a character from the GPIBport.
144
+ # # This command enables or disables the appending of a user specified character (see eot_char) to USB output whenever EOI is detected while reading a character from the GPIBport.
145
145
  def eot=(eot_mode)
146
146
  mode =
147
147
  case eot_mode
@@ -186,18 +186,4 @@ module PrologixGpib::Usb::Commands
186
186
  def reset
187
187
  write('++rst')
188
188
  end
189
-
190
- def flush
191
- return unless connected?
192
-
193
- loop until serial_port.getbyte.nil?
194
- end
195
-
196
- private
197
-
198
- def device_query(command)
199
- flush
200
- write(command)
201
- readline
202
- end
203
189
  end
@@ -60,7 +60,6 @@ module PrologixGpib::Discovery
60
60
  string :app_ver, read_length: 4
61
61
  string :boot_ver, read_length: 4
62
62
  string :hw_ver, read_length: 4
63
- stringz :name
64
63
  end
65
64
 
66
65
  NF_MAGIC = 0x5a
@@ -69,7 +68,7 @@ module PrologixGpib::Discovery
69
68
  NF_IDENTIFY_REPLY = 1
70
69
  BROADCAST_PORT = 3040
71
70
  BROADCAST_ADDRESS = '255.255.255.255'
72
- TIMEOUT = 1
71
+ TIMEOUT = 0.5
73
72
 
74
73
  private
75
74
 
@@ -90,16 +89,25 @@ module PrologixGpib::Discovery
90
89
 
91
90
  sock.send(data.to_binary_s, 0, BROADCAST_ADDRESS, BROADCAST_PORT)
92
91
  array = []
92
+ replies = []
93
93
  begin
94
94
  Timeout.timeout(TIMEOUT) do
95
95
  while true
96
- data, addr = sock.recvfrom(256)
97
- reply = NFIdentifyReply.read(data)
98
- next if array.include?(reply.addr)
99
- array << reply.addr if reply.header.seq == seq && reply.header.identify == NF_IDENTIFY_REPLY
96
+ data, addr = sock.recvfrom(1000)
97
+ replies << data
100
98
  end
101
99
  end
102
100
  rescue Timeout::Error
101
+ replies.each do |data|
102
+ begin
103
+ reply = NFIdentifyReply.read(data)
104
+ rescue EOFError
105
+ # About 1% of responses are not always as expected from the controller
106
+ next
107
+ end
108
+ next if array.include?(reply.addr)
109
+ array << reply.addr if reply.header.seq == seq && reply.header.identify == NF_IDENTIFY_REPLY
110
+ end
103
111
  sock.close
104
112
  array
105
113
  end
@@ -1,12 +1,14 @@
1
+ require 'timeout'
2
+
1
3
  module PrologixGpib::Lan
2
4
  class Error < StandardError
3
5
  end
4
6
 
5
7
  DEVICE_PORT = 1234
6
- EOL = "\r\n"
8
+ EOL = "\r\n".freeze
7
9
 
8
10
  def initialize(ip, mode: :controller, address: 9)
9
- @socket = TCPSocket.new ip, DEVICE_PORT
11
+ open_socket(ip)
10
12
 
11
13
  # open_serial_port(paths)
12
14
  # flush
@@ -18,8 +20,51 @@ module PrologixGpib::Lan
18
20
  yield self if block_given?
19
21
  end
20
22
 
21
- def version
22
- @socket.send "++ver#{EOL}", 0
23
+ def write(command)
24
+ return unless connected?
25
+
26
+ @socket.send "#{command}#{EOL}", 0
27
+ sleep 0.1
28
+ end
29
+
30
+ def read
31
+ return unless connected?
32
+
23
33
  @socket.gets.chomp
24
34
  end
35
+
36
+ private
37
+
38
+ def open_socket(ip)
39
+ @socket = TCPSocket.new ip, DEVICE_PORT
40
+ write('++ver')
41
+ return if getline.include? 'Prologix'
42
+
43
+ raise Error, 'No Prologix LAN controllers found.'
44
+ end
45
+
46
+ def connected?
47
+ raise Error, 'ConnectionError: No open Prologix device connections.' if @socket.nil?
48
+
49
+ true
50
+ end
51
+
52
+ def readline
53
+ return unless connected?
54
+
55
+ t = Timeout.timeout(1, Timeout::Error, "No response from device at #{@socket.peeraddr[3]}") { getline }
56
+ end
57
+
58
+ # This method will block until the EOL terminator is received
59
+ # The lower level gets method is pure ruby, so can be safely used with Timeout.
60
+ def getline
61
+ return unless connected?
62
+
63
+ @socket.gets(EOL).chomp
64
+ end
65
+
66
+ def device_query(command)
67
+ write(command)
68
+ readline
69
+ end
25
70
  end
@@ -9,8 +9,7 @@ module PrologixGpib::Usb
9
9
  attr_reader :serial_port
10
10
 
11
11
  def initialize(path, mode: :controller, address: 9)
12
- paths = path.nil? ? PrologixGpib.controller_paths : [path]
13
- open_serial_port(paths)
12
+ open_serial_port(path)
14
13
  flush
15
14
  self.mode = mode
16
15
  self.address = address
@@ -28,10 +27,10 @@ module PrologixGpib::Usb
28
27
  @serial_port.nil?
29
28
  end
30
29
 
31
- def write(str)
30
+ def write(string)
32
31
  return unless connected?
33
32
 
34
- @serial_port.write("#{str}#{EOL}")
33
+ @serial_port.write("#{string}#{EOL}")
35
34
  end
36
35
 
37
36
  def read(bytes)
@@ -43,7 +42,7 @@ module PrologixGpib::Usb
43
42
  def readline
44
43
  return unless connected?
45
44
 
46
- t = Timeout.timeout(1, Timeout::Error, 'No response from Data Acquisistion') { getline }
45
+ t = Timeout.timeout(1, Timeout::Error, 'No response from device') { getline }
47
46
  end
48
47
 
49
48
  def sr(register = nil)
@@ -57,12 +56,11 @@ module PrologixGpib::Usb
57
56
 
58
57
  private
59
58
 
60
- def open_serial_port(paths)
61
- paths.each do |path|
62
- @serial_port = Serial.new(path)
63
- write('++ver')
64
- return if getline.include? 'Prologix'
65
- end
59
+ def open_serial_port(path)
60
+ @serial_port = Serial.new(path)
61
+ write('++ver')
62
+ return if getline.include? 'Prologix'
63
+
66
64
  raise Error, 'No Prologix USB controllers found.'
67
65
  end
68
66
 
@@ -72,6 +70,12 @@ module PrologixGpib::Usb
72
70
  true
73
71
  end
74
72
 
73
+ def flush
74
+ return unless connected?
75
+
76
+ loop until serial_port.getbyte.nil?
77
+ end
78
+
75
79
  # This method will block until the EOL terminator is received
76
80
  # The lower level gets method is pure ruby, so can be safely used with Timeout.
77
81
  def getline
@@ -79,4 +83,10 @@ module PrologixGpib::Usb
79
83
 
80
84
  @serial_port.gets(EOL).chomp
81
85
  end
86
+
87
+ def device_query(command)
88
+ flush
89
+ write(command)
90
+ readline
91
+ end
82
92
  end
@@ -1,3 +1,3 @@
1
1
  module PrologixGpib
2
- VERSION = '0.5.0'
2
+ VERSION = '0.5.2'
3
3
  end
data/lib/prologix_gpib.rb CHANGED
@@ -3,21 +3,24 @@
3
3
  require 'rubyserial'
4
4
  require 'prologix_gpib/version'
5
5
  require 'prologix_gpib/lan'
6
- require 'prologix_gpib/lan/commands'
7
6
  require 'prologix_gpib/usb'
8
- require 'prologix_gpib/usb/commands'
7
+ require 'prologix_gpib/commands'
9
8
  require 'prologix_gpib/discovery'
10
9
  require 'prologix_gpib/cli'
11
10
 
12
11
  module PrologixGpib
13
12
  class UsbController
13
+ def test
14
+ puts 'testing'
15
+ end
16
+
14
17
  include PrologixGpib::Usb
15
- include PrologixGpib::Usb::Commands
18
+ include PrologixGpib::Commands
16
19
  end
17
20
 
18
21
  class LanController
19
22
  include PrologixGpib::Lan
20
- include PrologixGpib::Lan::Commands
23
+ include PrologixGpib::Commands
21
24
  end
22
25
 
23
26
  class Finder
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prologix_gpib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Carruthers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-21 00:00:00.000000000 Z
11
+ date: 2022-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -121,6 +121,7 @@ files:
121
121
  - ".tool-versions"
122
122
  - Gemfile
123
123
  - Gemfile.lock
124
+ - NetFinder_info.md
124
125
  - PrologixGpibEthernetManual.pdf
125
126
  - PrologixGpibUsbManual-6.0.pdf
126
127
  - README.md
@@ -131,18 +132,16 @@ files:
131
132
  - lan_test.rb
132
133
  - lib/prologix_gpib.rb
133
134
  - lib/prologix_gpib/cli.rb
135
+ - lib/prologix_gpib/commands.rb
134
136
  - lib/prologix_gpib/discovery.rb
135
137
  - lib/prologix_gpib/lan.rb
136
- - lib/prologix_gpib/lan/commands.rb
137
138
  - lib/prologix_gpib/usb.rb
138
- - lib/prologix_gpib/usb/commands.rb
139
139
  - lib/prologix_gpib/version.rb
140
140
  - package.json
141
141
  - prologix_gpib.gemspec
142
142
  - test_broadcast.rb
143
143
  - test_script.rb
144
144
  - test_server.rb
145
- - udp_info.md
146
145
  - yarn.lock
147
146
  homepage: https://github.com/robcarruthers/prologix_gpib
148
147
  licenses:
@@ -166,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
165
  - !ruby/object:Gem::Version
167
166
  version: '0'
168
167
  requirements: []
169
- rubygems_version: 3.3.3
168
+ rubygems_version: 3.3.7
170
169
  signing_key:
171
170
  specification_version: 4
172
171
  summary: Prologix GPIB controller ruby wrapper.
@@ -1,2 +0,0 @@
1
- module PrologixGpib::Lan::Commands
2
- end
data/udp_info.md DELETED
@@ -1,30 +0,0 @@
1
- Hello Rob,
2
-
3
- NetFinder uses UDP broadcast to locate and configure GPIB-ETH controllers on a network.
4
- You can find an implementation of the protocol in the nfcli utility
5
- http://prologix.biz/downloads/nfcli.tar.gz
6
-
7
- Discovery
8
-
9
- Create NF_IDENTIFY packet.
10
- Set sequence to a random value
11
- Set eth_addr to all ones
12
- Broadcast NF_IDENTIFY datagram to port 3040/UDP.
13
- Listen for NF_IDENTIFY_REPLY datagrams.
14
- Verify sequence matches NF_IDENTIFY packet
15
-
16
- Configuration
17
-
18
- Create NF*ASSIGNMENT packet
19
- Set sequence to a random value
20
- Set eth_addr to MAC address of desired device Set ip_type to NF_IP_DYNAMIC or NF_IP_STATIC If ip_type is NF_IP_DYNAMIC specify ip, mask and gateway addresses.
21
- Broadcast NF* ASSIGNMENT datagram to port 3040/UDP.
22
- Listen for NF_ASSIGNMENT_REPLY datagrams.
23
- Verify sequence matches that of NF_ASSIGNMENT packet Check result field for NF_SUCCESS
24
-
25
- Notes:
26
-
27
- 1. You may get multiple replies. Discard duplicate replies.
28
- 2. All multi-byte values are in network order (big-endian)
29
- 3. On multi-homed hosts, make sure broadcasts go out over all interfaces.
30
- 4. NetFinder protocol only works within the same subnet as routers will not forward UDP broadcast packets.