rfbeam 0.4.10 → 0.5.1
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 +4 -4
- data/.streerc +1 -0
- data/.streerc~1f4cd14e3c0a9afdf972aa5f3982d36a89869b72 +2 -0
- data/.tool-versions +1 -1
- data/CHANGELOG.md +12 -0
- data/Gemfile.lock +2 -1
- data/Rakefile +8 -3
- data/cog.toml +24 -0
- data/lib/rfbeam/cli.rb +66 -15
- data/lib/rfbeam/kld7/cli_formatter.rb +15 -4
- data/lib/rfbeam/kld7/cli_output.rb +16 -7
- data/lib/rfbeam/kld7/constants.rb +61 -134
- data/lib/rfbeam/kld7/radar_messages.rb +46 -29
- data/lib/rfbeam/kld7/radar_parameters.rb +94 -50
- data/lib/rfbeam/kld7/streamer.rb +82 -0
- data/lib/rfbeam/version.rb +1 -1
- data/rfbeam.gemspec +3 -3
- data/streamer2.rb +55 -0
- data/streaming.rb +71 -0
- metadata +15 -10
- data/.streerc +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 641d32533a354fa54db2906e234d7243899286dd85ab72a51d8a477b27f327cd
|
4
|
+
data.tar.gz: a1d94a25fee763ada51a4dc5fd6687f7bb4e1bc67a56adae257dd67efa6ded79
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 66d1d5f9e22d1adce03395cb153cebbc5eff4336b3cf3ade2a73d77548a7ff233ebe7d45b9ce09a23479c9c60382b0e81052c7da20f584792c8eb642b758a317
|
7
|
+
data.tar.gz: '094f688f3e86604632a1fa5fd05c3ff377e9b848deb6ed56eb024991e7ad8288641d3d29dc16f538cd4b1d564e5ac6f6b6dcaf77862048f3ffa9de351eab7932'
|
data/.streerc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
/Users/rob/.streerc
|
data/.tool-versions
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby 3.1.
|
1
|
+
ruby 3.1.3
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
- - -
|
2
|
+
## [v0.5.1](https://github.com/robcarruthers/rfbeam/compare/v0.5.0..v0.5.1) - 2023-05-09
|
3
|
+
#### Documentation
|
4
|
+
- **(cog)** Setup changelog generator - ([23dd6d8](https://github.com/robcarruthers/rfbeam/commit/23dd6d8407edaf6d4c29472fa60775a5aea87daa)) - [@robcarruthers](https://github.com/robcarruthers)
|
5
|
+
- **(readme)** Updated - ([14bb58e](https://github.com/robcarruthers/rfbeam/commit/14bb58ecaa6f55166532151425fa24269b515937)) - [@robcarruthers](https://github.com/robcarruthers)
|
6
|
+
|
7
|
+
- - -
|
8
|
+
|
9
|
+
## [0.5.0] - 2023-11-4
|
10
|
+
|
11
|
+
- Refactored CLI, refined help and options
|
12
|
+
|
1
13
|
## [0.4.2] - 2023-4-4
|
2
14
|
|
3
15
|
- Changed Data.define to Struct to support ruby 3.1.2
|
data/Gemfile.lock
CHANGED
@@ -9,7 +9,7 @@ GIT
|
|
9
9
|
PATH
|
10
10
|
remote: .
|
11
11
|
specs:
|
12
|
-
rfbeam (0.
|
12
|
+
rfbeam (0.5.1)
|
13
13
|
activesupport (~> 6.1.0)
|
14
14
|
rubyserial (~> 0.6.0)
|
15
15
|
thor (~> 1.2.1)
|
@@ -89,6 +89,7 @@ GEM
|
|
89
89
|
PLATFORMS
|
90
90
|
aarch64-linux
|
91
91
|
arm64-darwin-21
|
92
|
+
arm64-darwin-22
|
92
93
|
|
93
94
|
DEPENDENCIES
|
94
95
|
minitest (~> 5.0)
|
data/Rakefile
CHANGED
@@ -2,14 +2,19 @@
|
|
2
2
|
|
3
3
|
require 'bundler/gem_tasks'
|
4
4
|
require 'rake/testtask'
|
5
|
+
require 'rubocop/rake_task'
|
5
6
|
|
6
|
-
Rake::TestTask.new(:
|
7
|
+
Rake::TestTask.new(:local_test) do |t|
|
7
8
|
t.libs << 'test'
|
8
9
|
t.libs << 'lib'
|
9
|
-
t.test_files = FileList['test
|
10
|
+
t.test_files = FileList['test/local_tests/test_*.rb']
|
10
11
|
end
|
11
12
|
|
12
|
-
|
13
|
+
Rake::TestTask.new(:test) do |t|
|
14
|
+
t.libs << 'test'
|
15
|
+
t.libs << 'lib'
|
16
|
+
t.test_files = FileList['test/**/test_*.rb'].exclude('test/local_tests/**/*')
|
17
|
+
end
|
13
18
|
|
14
19
|
RuboCop::RakeTask.new
|
15
20
|
|
data/cog.toml
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
from_latest_tag = false
|
2
|
+
ignore_merge_commits = false
|
3
|
+
branch_whitelist = []
|
4
|
+
pre_bump_hooks = [ "bump set {{version}} -p 'chore(version):' -m 'v{{version}}'" ]
|
5
|
+
post_bump_hooks = [ "rake release" ]
|
6
|
+
pre_package_bump_hooks = []
|
7
|
+
post_package_bump_hooks = []
|
8
|
+
tag_prefix = "v"
|
9
|
+
|
10
|
+
[commit_types]
|
11
|
+
|
12
|
+
[changelog]
|
13
|
+
path = "CHANGELOG.md"
|
14
|
+
template = "remote"
|
15
|
+
remote = "github.com"
|
16
|
+
repository = "rfbeam"
|
17
|
+
owner = "robcarruthers"
|
18
|
+
authors = [
|
19
|
+
{ signature = "Rob Carruthers", username = "robcarruthers" }
|
20
|
+
]
|
21
|
+
|
22
|
+
[bump_profiles]
|
23
|
+
|
24
|
+
[packages]
|
data/lib/rfbeam/cli.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'thor'
|
4
|
-
require 'rfbeam'
|
5
4
|
require 'tty-table'
|
6
5
|
require 'tty-logger'
|
7
6
|
require 'tty-spinner'
|
@@ -10,7 +9,7 @@ require 'unicode_plot'
|
|
10
9
|
|
11
10
|
module RfBeam
|
12
11
|
class CLI < Thor
|
13
|
-
attr_accessor :logger
|
12
|
+
attr_accessor :radar, :logger
|
14
13
|
|
15
14
|
desc 'list', 'List available radar modules'
|
16
15
|
def list
|
@@ -24,17 +23,17 @@ module RfBeam
|
|
24
23
|
puts table.render(:ascii)
|
25
24
|
end
|
26
25
|
|
27
|
-
desc 'config
|
26
|
+
desc 'config [RADAR_ID]', 'Shows the parameter setting for the Radar module'
|
28
27
|
def config(radar_id)
|
29
28
|
puts radar(radar_id).config
|
30
29
|
end
|
31
30
|
|
32
|
-
desc 'reset
|
31
|
+
desc 'reset [RADAR_ID]', 'Shows the parameter setting for the Radar module'
|
33
32
|
def reset(radar_id)
|
34
33
|
@logger.success 'Radar reset to factory defaults' if radar(radar_id).reset
|
35
34
|
end
|
36
35
|
|
37
|
-
desc 'set_param
|
36
|
+
desc 'set_param [RADAR_ID] [KEY] [VALUE]', 'Set radar parameters, see readme for KEYS'
|
38
37
|
def set_param(radar_id, param, value)
|
39
38
|
return @logger.warn("Invalid param: '#{param}'") unless Kld7::RADAR_PARAMETERS.include?(param.to_sym)
|
40
39
|
|
@@ -46,14 +45,35 @@ module RfBeam
|
|
46
45
|
desc 'ddat <radar_id>', 'stream any valid detections, stop stream with q and enter'
|
47
46
|
option :stream, type: :boolean, aliases: '-s', desc: 'Stream the data from the device'
|
48
47
|
def ddat(radar_id)
|
48
|
+
init_radar radar_id
|
49
|
+
|
50
|
+
if options[:stream]
|
51
|
+
Thread.new { monitor_keypress }
|
52
|
+
spinner = TTY::Spinner.new('[:spinner] :title ', format: :bouncing_ball)
|
53
|
+
loop do
|
54
|
+
break if @stop_streaming
|
55
|
+
spinner.spin
|
56
|
+
data = @radar.ddat
|
57
|
+
spinner.update title: "Searching... #{data[:detection_str]}"
|
58
|
+
@logger.success "#{@radar.tdat}" if data[:detection]
|
59
|
+
end
|
60
|
+
puts "\nTask Quit."
|
61
|
+
else
|
62
|
+
puts "\n#{@radar.ddat}"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
desc 'tdat [RADAR_ID]', 'Display tracked target data'
|
67
|
+
option :raw, type: :boolean, aliases: '-r', desc: 'Display raw data'
|
68
|
+
def tdat(radar_id)
|
49
69
|
cli = RfBeam::Kld7::CliOutput.new(radar_id)
|
50
|
-
cli.display(:
|
70
|
+
cli.display(:tdat, options)
|
51
71
|
end
|
52
72
|
|
53
|
-
desc 'pdat
|
73
|
+
desc 'pdat [RADAR_ID]', 'Display Tracked Targets'
|
54
74
|
def pdat(radar_id)
|
55
75
|
cli = RfBeam::Kld7::CliOutput.new(radar_id)
|
56
|
-
cli.display(:pdat,
|
76
|
+
cli.display(:pdat, options)
|
57
77
|
end
|
58
78
|
|
59
79
|
desc 'rfft <radar_id>', 'Display the dopplar radar data as a plot'
|
@@ -68,12 +88,6 @@ module RfBeam
|
|
68
88
|
end
|
69
89
|
end
|
70
90
|
|
71
|
-
desc 'tdat <radar_id>', 'Display tracked target data'
|
72
|
-
def tdat(radar_id)
|
73
|
-
cli = RfBeam::Kld7::CliOutput.new(radar_id)
|
74
|
-
cli.display(:tdat, stream: options[:stream])
|
75
|
-
end
|
76
|
-
|
77
91
|
private
|
78
92
|
|
79
93
|
def radar(id)
|
@@ -81,7 +95,44 @@ module RfBeam
|
|
81
95
|
@logger = TTY::Logger.new
|
82
96
|
return @logger.warning 'No Radar modules found.' unless devices.count.positive?
|
83
97
|
|
84
|
-
RfBeam::
|
98
|
+
@radar = RfBeam::K_ld7.new(devices[id.to_i])
|
99
|
+
end
|
100
|
+
|
101
|
+
def plot_data(data)
|
102
|
+
{ x: Array(-128...128), series1: data.shift(256).map { |value| value / 100 }, series2: data.shift(256).map { |value| value.to_i / 100 } }
|
103
|
+
end
|
104
|
+
|
105
|
+
def monitor_keypress
|
106
|
+
@stop_streaming = false
|
107
|
+
loop do
|
108
|
+
key = STDIN.getch
|
109
|
+
if key.downcase == 'q'
|
110
|
+
@stop_streaming = true
|
111
|
+
break
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def rfft_plot(radar)
|
117
|
+
speed = radar.max_speed
|
118
|
+
speed_label = radar.formatted_parameter(:max_speed)
|
119
|
+
xlim = [speed - speed * 2, speed]
|
120
|
+
data = plot_data(radar.rfft)
|
121
|
+
plot =
|
122
|
+
UnicodePlot.lineplot(
|
123
|
+
data[:x],
|
124
|
+
data[:series1],
|
125
|
+
name: 'IF1/2 Averaged',
|
126
|
+
title: 'Raw FFT',
|
127
|
+
height: 25,
|
128
|
+
width: 120,
|
129
|
+
xlabel: "Speed (km/h), #{speed_label}",
|
130
|
+
ylabel: 'Signal (db)',
|
131
|
+
xlim: [-128, 128],
|
132
|
+
ylim: [0, 100]
|
133
|
+
)
|
134
|
+
UnicodePlot.lineplot!(plot, data[:x], data[:series2], name: 'Threshold')
|
135
|
+
plot
|
85
136
|
end
|
86
137
|
end
|
87
138
|
end
|
@@ -5,6 +5,10 @@ require 'tty-table'
|
|
5
5
|
module RfBeam
|
6
6
|
module Kld7
|
7
7
|
class CliFormatter
|
8
|
+
def self.format(type, data)
|
9
|
+
new.format(type, data)
|
10
|
+
end
|
11
|
+
|
8
12
|
def format(type, data)
|
9
13
|
case type
|
10
14
|
when :tdat
|
@@ -16,10 +20,6 @@ module RfBeam
|
|
16
20
|
end
|
17
21
|
end
|
18
22
|
|
19
|
-
def tdat(data)
|
20
|
-
{ dist: data[2], speed: data[3], angle: data[4], mag: data[5] }
|
21
|
-
end
|
22
|
-
|
23
23
|
def pdat_table(data)
|
24
24
|
table = TTY::Table.new header: ['index', 'dist (M)', 'speed (Km/h)', 'angle (°)', 'mag (db)']
|
25
25
|
count = data[1] / 8
|
@@ -41,6 +41,17 @@ module RfBeam
|
|
41
41
|
.join("\n")
|
42
42
|
end
|
43
43
|
|
44
|
+
def tdat(data)
|
45
|
+
return 'No target detected' unless data[1].positive?
|
46
|
+
|
47
|
+
[
|
48
|
+
"Distance: #{data[2].to_f / 100.0} m",
|
49
|
+
"Speed: #{data[3].to_f / 100.0} km/h",
|
50
|
+
"Angle: #{data[4].to_f / 100.0}°",
|
51
|
+
"Mag: #{data[5].to_f / 100.0} db"
|
52
|
+
].join("\n")
|
53
|
+
end
|
54
|
+
|
44
55
|
def to_symbol(string)
|
45
56
|
modified_string = string.gsub(' ', '_').downcase
|
46
57
|
modified_string.to_sym
|
@@ -20,8 +20,9 @@ module RfBeam
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
def display(type,
|
24
|
-
stream ?
|
23
|
+
def display(type, options)
|
24
|
+
display_method = options[:stream].nil? ? 'display' : 'stream'
|
25
|
+
send("#{display_method}_#{type}", options)
|
25
26
|
end
|
26
27
|
|
27
28
|
def plot(type, stream: false)
|
@@ -79,8 +80,12 @@ module RfBeam
|
|
79
80
|
}
|
80
81
|
end
|
81
82
|
|
82
|
-
def display_ddat
|
83
|
-
|
83
|
+
def display_ddat(options)
|
84
|
+
if options[:raw].nil?
|
85
|
+
puts RfBeam::Kld7::CliFormatter.format(:ddat, @radar.ddat)
|
86
|
+
else
|
87
|
+
puts @radar.ddat.inspect
|
88
|
+
end
|
84
89
|
end
|
85
90
|
|
86
91
|
def stream_ddat
|
@@ -98,11 +103,15 @@ module RfBeam
|
|
98
103
|
end
|
99
104
|
end
|
100
105
|
|
101
|
-
def display_tdat
|
102
|
-
|
106
|
+
def display_tdat(options)
|
107
|
+
if options[:raw].nil?
|
108
|
+
puts RfBeam::Kld7::CliFormatter.format(:tdat, @radar.tdat)
|
109
|
+
else
|
110
|
+
puts @radar.tdat.inspect
|
111
|
+
end
|
103
112
|
end
|
104
113
|
|
105
|
-
def display_pdat
|
114
|
+
def display_pdat(*)
|
106
115
|
table = RfBeam::Kld7::CliFormatter.new.pdat_table(@radar.pdat)
|
107
116
|
puts "\n Detected Raw Targets"
|
108
117
|
puts table.render(:unicode, alignment: :center)
|
@@ -33,231 +33,158 @@ module RfBeam
|
|
33
33
|
speed: %w[Low High]
|
34
34
|
}.freeze
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
@grps_index = grps_index
|
42
|
-
@description = options.fetch(:description, nil)
|
43
|
-
@default = options.fetch(:default, nil)
|
44
|
-
@units = options.fetch(:units, nil)
|
45
|
-
@str_values = options.fetch(:str_values, [])
|
36
|
+
Param =
|
37
|
+
Data.define(:name, :grps_index, :description, :default, :units, :values) do |_param|
|
38
|
+
def initialize(name:, grps_index:, description: nil, default: nil, units: nil, values: [])
|
39
|
+
super(name:, grps_index:, description:, default:, units:, values:)
|
40
|
+
end
|
46
41
|
end
|
47
|
-
end
|
48
42
|
|
49
43
|
RADAR_PARAMETERS = {
|
50
|
-
sw_version: Param.new(name: 'Software Version', grps_index: 2,
|
44
|
+
sw_version: Param.new(name: 'Software Version', grps_index: 2, default: 'K-LD7_APP-RFB-XXXX'),
|
51
45
|
base_frequency:
|
52
46
|
Param.new(
|
53
47
|
name: 'Base Frequency',
|
54
48
|
grps_index: 3,
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
str_values: %w[Low Middle High]
|
59
|
-
}
|
49
|
+
description: '0 = Low, 1 = Middle, 2 = High',
|
50
|
+
default: 1,
|
51
|
+
values: %w[Low Middle High]
|
60
52
|
),
|
61
53
|
max_speed:
|
62
54
|
Param.new(
|
63
55
|
name: 'Maximum Speed',
|
64
56
|
grps_index: 4,
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
str_values: %w[12.5 25 50 100]
|
70
|
-
}
|
57
|
+
description: '0 = 12km/h, 1 = 25km/h, 2 = 50km/h, 3 = 100km/h',
|
58
|
+
default: 1,
|
59
|
+
units: 'km/h',
|
60
|
+
values: %w[12.5 25 50 100]
|
71
61
|
),
|
72
62
|
max_range:
|
73
63
|
Param.new(
|
74
64
|
name: 'Maximum Range',
|
75
65
|
grps_index: 5,
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
str_values: %w[5m 10m 30m 100m]
|
80
|
-
}
|
66
|
+
description: '0 = 5m, 1 = 10m, 2 = 30m, 3 = 100m',
|
67
|
+
default: 1,
|
68
|
+
values: %w[5m 10m 30m 100m]
|
81
69
|
),
|
82
70
|
threshold_offset:
|
83
|
-
Param.new(
|
84
|
-
name: 'Threshold Offset',
|
85
|
-
grps_index: 6,
|
86
|
-
options: {
|
87
|
-
description: '10db - 60db',
|
88
|
-
default: 30,
|
89
|
-
units: 'db'
|
90
|
-
}
|
91
|
-
),
|
71
|
+
Param.new(name: 'Threshold Offset', grps_index: 6, description: '10db - 60db', default: 30, units: 'db'),
|
92
72
|
tracking_filter:
|
93
73
|
Param.new(
|
94
74
|
name: 'Tracking Filter Type',
|
95
75
|
grps_index: 7,
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
str_values: ['standard', 'Fast Detection', 'Long Visibility']
|
100
|
-
}
|
76
|
+
description: '0 = Standard, 2 = Fast Detection, 3 = Long Visibility',
|
77
|
+
default: 0,
|
78
|
+
values: ['standard', 'Fast Detection', 'Long Visibility']
|
101
79
|
),
|
102
80
|
vibration_suppression:
|
103
81
|
Param.new(
|
104
82
|
name: 'Vibration Suppression',
|
105
83
|
grps_index: 8,
|
106
|
-
|
107
|
-
|
108
|
-
default: 2
|
109
|
-
}
|
84
|
+
description: '0-16, 0 = No Suppression, 16 = High Suppression',
|
85
|
+
default: 2
|
110
86
|
),
|
111
87
|
min_detection_distance:
|
112
88
|
Param.new(
|
113
89
|
name: 'Minimum Detection Distance',
|
114
90
|
grps_index: 9,
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
units: '%'
|
119
|
-
}
|
91
|
+
description: '0 - 100% of range setting',
|
92
|
+
default: 0,
|
93
|
+
units: '%'
|
120
94
|
),
|
121
95
|
max_detection_distance:
|
122
96
|
Param.new(
|
123
97
|
name: 'Maximum Detection Distance',
|
124
98
|
grps_index: 10,
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
units: '%'
|
129
|
-
}
|
99
|
+
description: '0 - 100% of range setting',
|
100
|
+
default: 50,
|
101
|
+
units: '%'
|
130
102
|
),
|
131
103
|
min_detection_angle:
|
132
|
-
Param.new(
|
133
|
-
name: 'Minimum Detection Angle',
|
134
|
-
grps_index: 11,
|
135
|
-
options: {
|
136
|
-
description: '-90° - 90°',
|
137
|
-
default: -90,
|
138
|
-
units: '°'
|
139
|
-
}
|
140
|
-
),
|
104
|
+
Param.new(name: 'Minimum Detection Angle', grps_index: 11, description: '-90° - 90°', default: -90, units: '°'),
|
141
105
|
max_detection_angle:
|
142
|
-
Param.new(
|
143
|
-
name: 'Maximum Detection Angle',
|
144
|
-
grps_index: 12,
|
145
|
-
options: {
|
146
|
-
description: '-90° - 90°',
|
147
|
-
default: 90,
|
148
|
-
units: '°'
|
149
|
-
}
|
150
|
-
),
|
106
|
+
Param.new(name: 'Maximum Detection Angle', grps_index: 12, description: '-90° - 90°', default: 90, units: '°'),
|
151
107
|
min_detection_speed:
|
152
108
|
Param.new(
|
153
109
|
name: 'Minimum Detection Speed',
|
154
110
|
grps_index: 13,
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
units: '%'
|
159
|
-
}
|
111
|
+
description: '0 - 100% of speed setting',
|
112
|
+
default: 0,
|
113
|
+
units: '%'
|
160
114
|
),
|
161
115
|
max_detection_speed:
|
162
116
|
Param.new(
|
163
117
|
name: 'Maximum Detection Speed',
|
164
118
|
grps_index: 14,
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
units: '%'
|
169
|
-
}
|
119
|
+
description: '0 - 100% of speed setting',
|
120
|
+
default: 100,
|
121
|
+
units: '%'
|
170
122
|
),
|
171
123
|
detection_direction:
|
172
124
|
Param.new(
|
173
125
|
name: 'Detection Direction',
|
174
126
|
grps_index: 15,
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
str_values: %w[Receding Approaching Both]
|
179
|
-
}
|
127
|
+
description: '0 = Receding, 1 = Approaching, 2 = Both',
|
128
|
+
default: 2,
|
129
|
+
values: %w[Receding Approaching Both]
|
180
130
|
),
|
181
131
|
range_threshold:
|
182
132
|
Param.new(
|
183
133
|
name: 'Range Threshold',
|
184
134
|
grps_index: 16,
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
units: '%'
|
189
|
-
}
|
135
|
+
description: '0 - 100% of range setting',
|
136
|
+
default: 10,
|
137
|
+
units: '%'
|
190
138
|
),
|
191
139
|
angle_threshold:
|
192
|
-
Param.new(
|
193
|
-
name: 'Angle Threshold',
|
194
|
-
grps_index: 17,
|
195
|
-
options: {
|
196
|
-
description: '-90° - 90°',
|
197
|
-
default: 0,
|
198
|
-
units: '°'
|
199
|
-
}
|
200
|
-
),
|
140
|
+
Param.new(name: 'Angle Threshold', grps_index: 17, description: '-90° - 90°', default: 0, units: '°'),
|
201
141
|
speed_threshold:
|
202
142
|
Param.new(
|
203
143
|
name: 'Speed Threshold',
|
204
144
|
grps_index: 18,
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
units: '%'
|
209
|
-
}
|
145
|
+
description: '0 - 100% of speed setting',
|
146
|
+
default: 50,
|
147
|
+
units: '%'
|
210
148
|
),
|
211
149
|
digital_output1:
|
212
150
|
Param.new(
|
213
151
|
name: 'Digital Output 1',
|
214
152
|
grps_index: 19,
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
str_values: %w[Direction Angle Range Speed Micro]
|
219
|
-
}
|
153
|
+
description: '0 = Direction, 1 = Angle, 2 = Range, 3 = Speed, 4 = Micro Detection',
|
154
|
+
default: 0,
|
155
|
+
values: %w[Direction Angle Range Speed Micro]
|
220
156
|
),
|
221
157
|
digital_output2:
|
222
158
|
Param.new(
|
223
159
|
name: 'Digital Output 2',
|
224
160
|
grps_index: 20,
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
str_values: %w[Direction Angle Range Speed Micro]
|
229
|
-
}
|
161
|
+
description: '0 = Direction, 1 = Angle, 2 = Range, 3 = Speed, 4 = Micro Detection',
|
162
|
+
default: 1,
|
163
|
+
values: %w[Direction Angle Range Speed Micro]
|
230
164
|
),
|
231
165
|
digital_output3:
|
232
166
|
Param.new(
|
233
167
|
name: 'Digital Output 3',
|
234
168
|
grps_index: 21,
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
str_values: %w[Direction Angle Range Speed Micro]
|
239
|
-
}
|
169
|
+
description: '0 = Direction, 1 = Angle, 2 = Range, 3 = Speed, 4 = Micro Detection',
|
170
|
+
default: 2,
|
171
|
+
values: %w[Direction Angle Range Speed Micro]
|
240
172
|
),
|
241
|
-
hold_time:
|
242
|
-
Param.new(name: 'Hold Time', grps_index: 22, options: { description: '1 - 7200s', default: 1, units: 's' }),
|
173
|
+
hold_time: Param.new(name: 'Hold Time', grps_index: 22, description: '1 - 7200s', default: 1, units: 's'),
|
243
174
|
micro_detection_retrigger:
|
244
175
|
Param.new(
|
245
176
|
name: 'Micro Detection Trigger',
|
246
177
|
grps_index: 23,
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
str_values: %w[Off Retrigger]
|
251
|
-
}
|
178
|
+
description: '0 = Off, 1 = Retrigger',
|
179
|
+
default: 0,
|
180
|
+
values: %w[Off Retrigger]
|
252
181
|
),
|
253
182
|
micro_detection_sensativity:
|
254
183
|
Param.new(
|
255
184
|
name: 'Micro Detection Sensativity',
|
256
185
|
grps_index: 24,
|
257
|
-
|
258
|
-
|
259
|
-
default: 4
|
260
|
-
}
|
186
|
+
description: '0 - 9, 0 = Min, 9 = Max',
|
187
|
+
default: 4
|
261
188
|
)
|
262
189
|
}.freeze
|
263
190
|
end
|