rfbeam 0.5.1 → 0.5.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.pre-commit-config.yaml +8 -0
- data/.tool-versions +1 -1
- data/CHANGELOG.md +39 -46
- data/Gemfile +10 -7
- data/Gemfile.lock +47 -44
- data/README.md +71 -113
- data/Rakefile +5 -9
- data/cliff.toml +74 -0
- data/cog.toml +7 -3
- data/exe/rfbeam +0 -1
- data/lib/rfbeam/cli.rb +37 -29
- data/lib/rfbeam/kld7/constants.rb +5 -4
- data/lib/rfbeam/kld7/detection_params.rb +149 -0
- data/lib/rfbeam/kld7/module_params.rb +96 -0
- data/lib/rfbeam/kld7/operation_params.rb +162 -0
- data/lib/rfbeam/kld7/radar_messages.rb +23 -39
- data/lib/rfbeam/kld7/serial_connection.rb +13 -14
- data/lib/rfbeam/kld7/streamer.rb +15 -14
- data/lib/rfbeam/version.rb +1 -1
- data/lib/rfbeam.rb +8 -7
- data/output.csv +257 -0
- data/rfbeam.gemspec +3 -8
- data/yarn.lock +221 -12
- metadata +12 -167
- data/.rubocop.yml +0 -25
- data/.streerc~1f4cd14e3c0a9afdf972aa5f3982d36a89869b72 +0 -2
- data/lib/rfbeam/kld7/cli_formatter.rb +0 -61
- data/lib/rfbeam/kld7/cli_output.rb +0 -141
- data/lib/rfbeam/kld7/radar_parameters.rb +0 -441
- data/node_modules/.bin/prettier +0 -1
- data/node_modules/.yarn-integrity +0 -19
- data/node_modules/@prettier/plugin-ruby/CHANGELOG.md +0 -1351
- data/node_modules/@prettier/plugin-ruby/CODE_OF_CONDUCT.md +0 -76
- data/node_modules/@prettier/plugin-ruby/CONTRIBUTING.md +0 -185
- data/node_modules/@prettier/plugin-ruby/LICENSE +0 -21
- data/node_modules/@prettier/plugin-ruby/README.md +0 -226
- data/node_modules/@prettier/plugin-ruby/docs/logo.png +0 -0
- data/node_modules/@prettier/plugin-ruby/node_modules/.bin/prettier +0 -1
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/LICENSE +0 -5945
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/README.md +0 -109
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/bin-prettier.js +0 -62
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/cli.js +0 -15136
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/doc.js +0 -1473
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-angular.mjs +0 -2
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-babel.mjs +0 -29
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-espree.mjs +0 -26
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-flow.mjs +0 -35
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-glimmer.mjs +0 -27
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-graphql.mjs +0 -15
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-html.mjs +0 -36
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-markdown.mjs +0 -76
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-meriyah.mjs +0 -19
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-postcss.mjs +0 -76
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-typescript.mjs +0 -257
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-yaml.mjs +0 -150
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/standalone.mjs +0 -116
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/index.js +0 -37885
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/package.json +0 -21
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-angular.js +0 -2
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-babel.js +0 -29
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-espree.js +0 -26
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-flow.js +0 -35
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-glimmer.js +0 -27
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-graphql.js +0 -15
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-html.js +0 -36
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-markdown.js +0 -76
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-meriyah.js +0 -19
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-postcss.js +0 -76
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-typescript.js +0 -257
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-yaml.js +0 -150
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/standalone.js +0 -116
- data/node_modules/@prettier/plugin-ruby/node_modules/prettier/third-party.js +0 -8978
- data/node_modules/@prettier/plugin-ruby/package.json +0 -64
- data/node_modules/@prettier/plugin-ruby/prettier.gemspec +0 -36
- data/node_modules/@prettier/plugin-ruby/rubocop.yml +0 -64
- data/node_modules/@prettier/plugin-ruby/src/getInfo.js +0 -23
- data/node_modules/@prettier/plugin-ruby/src/netcat.js +0 -13
- data/node_modules/@prettier/plugin-ruby/src/parseSync.js +0 -236
- data/node_modules/@prettier/plugin-ruby/src/plugin.js +0 -172
- data/node_modules/@prettier/plugin-ruby/src/server.rb +0 -199
- data/node_modules/prettier/LICENSE +0 -5970
- data/node_modules/prettier/README.md +0 -109
- data/node_modules/prettier/bin-prettier.js +0 -64
- data/node_modules/prettier/cli.js +0 -15364
- data/node_modules/prettier/doc.js +0 -1473
- data/node_modules/prettier/esm/parser-angular.mjs +0 -2
- data/node_modules/prettier/esm/parser-babel.mjs +0 -29
- data/node_modules/prettier/esm/parser-espree.mjs +0 -26
- data/node_modules/prettier/esm/parser-flow.mjs +0 -35
- data/node_modules/prettier/esm/parser-glimmer.mjs +0 -27
- data/node_modules/prettier/esm/parser-graphql.mjs +0 -15
- data/node_modules/prettier/esm/parser-html.mjs +0 -36
- data/node_modules/prettier/esm/parser-markdown.mjs +0 -76
- data/node_modules/prettier/esm/parser-meriyah.mjs +0 -19
- data/node_modules/prettier/esm/parser-postcss.mjs +0 -76
- data/node_modules/prettier/esm/parser-typescript.mjs +0 -49
- data/node_modules/prettier/esm/parser-yaml.mjs +0 -150
- data/node_modules/prettier/esm/standalone.mjs +0 -116
- data/node_modules/prettier/index.js +0 -38236
- data/node_modules/prettier/package.json +0 -21
- data/node_modules/prettier/parser-angular.js +0 -2
- data/node_modules/prettier/parser-babel.js +0 -29
- data/node_modules/prettier/parser-espree.js +0 -26
- data/node_modules/prettier/parser-flow.js +0 -35
- data/node_modules/prettier/parser-glimmer.js +0 -27
- data/node_modules/prettier/parser-graphql.js +0 -15
- data/node_modules/prettier/parser-html.js +0 -36
- data/node_modules/prettier/parser-markdown.js +0 -76
- data/node_modules/prettier/parser-meriyah.js +0 -19
- data/node_modules/prettier/parser-postcss.js +0 -76
- data/node_modules/prettier/parser-typescript.js +0 -49
- data/node_modules/prettier/parser-yaml.js +0 -150
- data/node_modules/prettier/standalone.js +0 -116
- data/node_modules/prettier/third-party.js +0 -8978
- data/package.json +0 -6
@@ -0,0 +1,149 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RfBeam
|
4
|
+
module KLD7
|
5
|
+
# -----------------
|
6
|
+
# Minimum Detection distance, 0 - 100% of Range setting, default = 0
|
7
|
+
# -----------------
|
8
|
+
def min_detection_distance
|
9
|
+
query_parameter RADAR_PARAMETERS[:min_detection_distance].grps_index
|
10
|
+
end
|
11
|
+
|
12
|
+
def min_detection_distance=(value = 0)
|
13
|
+
raise ArgumentError, "Invalid arg: '#{value}'" unless (0..100).cover?(value)
|
14
|
+
raise ArgumentError, 'Expected an Integer' unless value.is_a?(Integer)
|
15
|
+
|
16
|
+
set_parameter :mira, value, :uint32
|
17
|
+
end
|
18
|
+
alias mira= min_detection_distance=
|
19
|
+
alias set_min_detection_distance min_detection_distance=
|
20
|
+
|
21
|
+
# -----------------
|
22
|
+
# Maximum Detection distance, 0 - 100% of Range setting, default = 50
|
23
|
+
# -----------------
|
24
|
+
def max_detection_distance
|
25
|
+
query_parameter RADAR_PARAMETERS[:min_detection_distance].grps_index
|
26
|
+
end
|
27
|
+
|
28
|
+
def max_detection_distance=(value = 50)
|
29
|
+
raise ArgumentError, "Invalid arg: '#{value}'" unless (0..100).cover?(value)
|
30
|
+
raise ArgumentError, 'Expected an Integer' unless value.is_a?(Integer)
|
31
|
+
|
32
|
+
set_parameter :mara, value, :uint32
|
33
|
+
end
|
34
|
+
alias mara= max_detection_distance=
|
35
|
+
alias set_max_detection_distance max_detection_distance=
|
36
|
+
|
37
|
+
# -----------------
|
38
|
+
# Minimum Detection Angle, -90° - 90°, default = -90
|
39
|
+
# -----------------
|
40
|
+
def min_detection_angle
|
41
|
+
query_parameter RADAR_PARAMETERS[:min_detection_angle].grps_index
|
42
|
+
end
|
43
|
+
|
44
|
+
def min_detection_angle=(angle = -90)
|
45
|
+
raise ArgumentError, "Invalid arg: '#{angle}'" unless (-90..90).cover?(angle)
|
46
|
+
raise ArgumentError, 'Expected an Integer' unless angle.is_a?(Integer)
|
47
|
+
|
48
|
+
set_parameter :mian, angle, :int32
|
49
|
+
end
|
50
|
+
alias mian= min_detection_angle=
|
51
|
+
alias set_min_detection_angle min_detection_angle=
|
52
|
+
|
53
|
+
# -----------------
|
54
|
+
# Maximum Detection Angle, -90° - 90°, default = 90
|
55
|
+
# -----------------
|
56
|
+
def max_detection_angleq
|
57
|
+
query_parameter RADAR_PARAMETERS[:max_detection_angle].grps_index
|
58
|
+
end
|
59
|
+
|
60
|
+
def max_detection_angle=(angle = 90)
|
61
|
+
raise ArgumentError, "Invalid arg: '#{angle}'" unless (-90..90).cover?(angle)
|
62
|
+
raise ArgumentError, 'Expected an Integer' unless angle.is_a?(Integer)
|
63
|
+
|
64
|
+
set_parameter :maan, angle, :int32
|
65
|
+
end
|
66
|
+
alias maan= max_detection_angle=
|
67
|
+
alias set_max_detection_angle max_detection_angle=
|
68
|
+
|
69
|
+
# -----------------
|
70
|
+
# Minimum Detection Speed, 0 - 100% of Speed setting, default = 0
|
71
|
+
# -----------------
|
72
|
+
def min_detection_speed
|
73
|
+
query_parameter RADAR_PARAMETERS[:min_detection_angle].grps_index
|
74
|
+
end
|
75
|
+
|
76
|
+
def min_detection_speed=(speed = 0)
|
77
|
+
raise ArgumentError, "Invalid arg: '#{speed}'" unless (0..100).cover?(speed)
|
78
|
+
raise ArgumentError, 'Expected an Integer' unless speed.is_a?(Integer)
|
79
|
+
|
80
|
+
set_parameter :misp, speed, :uint32
|
81
|
+
end
|
82
|
+
alias misp= min_detection_speed=
|
83
|
+
alias set_min_detection_speed min_detection_speed=
|
84
|
+
|
85
|
+
# -----------------
|
86
|
+
# Maximum Detection Speed, 0 - 100% of Speed setting, default = 100
|
87
|
+
# -----------------
|
88
|
+
def max_detection_speed
|
89
|
+
query_parameter RADAR_PARAMETERS[:max_detection_speed].grps_index
|
90
|
+
end
|
91
|
+
|
92
|
+
def max_detection_speed=(speed = 100)
|
93
|
+
raise ArgumentError, "Invalid arg: '#{speed}'" unless (0..100).cover?(speed)
|
94
|
+
raise ArgumentError, 'Expected an Integer' unless speed.is_a?(Integer)
|
95
|
+
|
96
|
+
set_parameter :masp, speed, :uint32
|
97
|
+
end
|
98
|
+
alias masp= max_detection_speed=
|
99
|
+
alias set_max_detection_speed max_detection_speed=
|
100
|
+
|
101
|
+
# -----------------
|
102
|
+
# Detection Direction, 0 = Receding, 1 = Approaching, 2 = Both (default)
|
103
|
+
# -----------------
|
104
|
+
def detection_direction
|
105
|
+
query_parameter RADAR_PARAMETERS[:detection_direction].grps_index
|
106
|
+
end
|
107
|
+
|
108
|
+
def detection_direction=(direction = 2)
|
109
|
+
raise ArgumentError, "Invalid arg: '#{direction}'" unless (0..2).cover?(direction)
|
110
|
+
raise ArgumentError, 'Expected an Integer' unless direction.is_a?(Integer)
|
111
|
+
|
112
|
+
set_parameter :dedi, direction, :uint32
|
113
|
+
end
|
114
|
+
alias dedi= detection_direction=
|
115
|
+
alias set_detection_direction detection_direction=
|
116
|
+
|
117
|
+
# -----------------
|
118
|
+
# Micro Detection retrigger, 0 = Off (default), 1 = Retrigger
|
119
|
+
# -----------------
|
120
|
+
def micro_detection_retrigger
|
121
|
+
query_parameter RADAR_PARAMETERS[:set_micro_detection_retrigger].grps_index
|
122
|
+
end
|
123
|
+
|
124
|
+
def micro_detection_retrigger=(value = 0)
|
125
|
+
raise ArgumentError, "Invalid arg: '#{value}'" unless (0..1).cover?(value)
|
126
|
+
raise ArgumentError, 'Expected an Integer' unless value.is_a?(Integer)
|
127
|
+
|
128
|
+
set_parameter :mide, value, :uint32
|
129
|
+
end
|
130
|
+
alias mide= micro_detection_retrigger=
|
131
|
+
alias set_micro_detection_retrigger micro_detection_retrigger=
|
132
|
+
|
133
|
+
# -----------------
|
134
|
+
# Micro Detection sensitivity, 0 - 9, 0 = Min, 9 = Max, default = 4
|
135
|
+
# -----------------
|
136
|
+
def micro_detection_sensitivity
|
137
|
+
query_parameter RADAR_PARAMETERS[:micro_detection_sensitivity].grps_index
|
138
|
+
end
|
139
|
+
|
140
|
+
def micro_detection_sensitivity=(value = 4)
|
141
|
+
raise ArgumentError, "Invalid arg: '#{value}'" unless (0..9).cover?(value)
|
142
|
+
raise ArgumentError, 'Expected an Integer' unless value.is_a?(Integer)
|
143
|
+
|
144
|
+
set_parameter :mids, value, :uint32
|
145
|
+
end
|
146
|
+
alias mids= micro_detection_sensitivity=
|
147
|
+
alias set_micro_detection_sensitivity micro_detection_sensitivity=
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rfbeam
|
4
|
+
module KLD7
|
5
|
+
# -----------------
|
6
|
+
# Software Version, 'K-LD7_APP-RFB-XXXX'
|
7
|
+
# -----------------
|
8
|
+
def sw_version
|
9
|
+
query_parameter RADAR_PARAMETERS[:sw_version].grps_index
|
10
|
+
end
|
11
|
+
|
12
|
+
# -----------------
|
13
|
+
# Digital output 1, 0 = Direction, 1 = Angle, 2 = Range, 3 = Speed, 4 = Micro Detection, default = 0
|
14
|
+
# -----------------
|
15
|
+
def digital_output1
|
16
|
+
query_parameter RADAR_PARAMETERS[:digital_output1].grps_index
|
17
|
+
end
|
18
|
+
|
19
|
+
def digital_output1=(value = 0)
|
20
|
+
raise ArgumentError, "Invalid arg: '#{value}'" unless (0..4).cover?(value)
|
21
|
+
raise ArgumentError, 'Expected an Integer' unless value.is_a?(Integer)
|
22
|
+
|
23
|
+
set_parameter :dig1, value, :uint32
|
24
|
+
end
|
25
|
+
alias dig1= digital_output1=
|
26
|
+
alias set_digital_output1 digital_output1=
|
27
|
+
|
28
|
+
# -----------------
|
29
|
+
# Digital output 2, 0 = Direction, 1 = Angle, 2 = Range, 3 = Speed, 4 = Micro Detection, default = 1
|
30
|
+
# -----------------
|
31
|
+
def digital_output2
|
32
|
+
query_parameter RADAR_PARAMETERS[:digital_output2].grps_index
|
33
|
+
end
|
34
|
+
|
35
|
+
def digital_output2=(value = 1)
|
36
|
+
raise ArgumentError, "Invalid arg: '#{value}'" unless (0..4).cover?(value)
|
37
|
+
raise ArgumentError, 'Expected an Integer' unless value.is_a?(Integer)
|
38
|
+
|
39
|
+
set_parameter :dig2, value, :uint32
|
40
|
+
end
|
41
|
+
alias dig2= digital_output2=
|
42
|
+
alias set_digital_output2 digital_output2=
|
43
|
+
|
44
|
+
# -----------------
|
45
|
+
# Digital output 3, 0 = Direction, 1 = Angle, 2 = Range, 3 = Speed, 4 = Micro Detection, default = 2
|
46
|
+
# -----------------
|
47
|
+
def digital_output3
|
48
|
+
query_parameter RADAR_PARAMETERS[:digital_output3].grps_index
|
49
|
+
end
|
50
|
+
|
51
|
+
def digital_output3=(value = 2)
|
52
|
+
raise ArgumentError, "Invalid arg: '#{value}'" unless (0..4).cover?(value)
|
53
|
+
raise ArgumentError, 'Expected an Integer' unless value.is_a?(Integer)
|
54
|
+
|
55
|
+
set_parameter :dig3, value, :uint32
|
56
|
+
end
|
57
|
+
alias dig3= digital_output3=
|
58
|
+
alias set_digital_output3 digital_output3=
|
59
|
+
|
60
|
+
# -----------------
|
61
|
+
# Hold Time, 1 - 7200s, default = 1
|
62
|
+
# -----------------
|
63
|
+
def hold_time
|
64
|
+
query_parameter RADAR_PARAMETERS[:hold_time].grps_index
|
65
|
+
end
|
66
|
+
|
67
|
+
def hold_time=(time = 1)
|
68
|
+
raise ArgumentError, "Invalid arg: '#{time}'" unless (1..7200).cover?(time)
|
69
|
+
raise ArgumentError, 'Expected an Integer' unless time.is_a?(Integer)
|
70
|
+
|
71
|
+
set_parameter :hold, time, :uint32
|
72
|
+
end
|
73
|
+
alias hold= hold_time=
|
74
|
+
alias set_hold_time hold_time=
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def query_parameter(index)
|
79
|
+
data = grps
|
80
|
+
data[index]
|
81
|
+
end
|
82
|
+
|
83
|
+
def set_parameter(header, value, return_type = :uint32)
|
84
|
+
char =
|
85
|
+
case return_type
|
86
|
+
when :int32
|
87
|
+
'l'
|
88
|
+
else
|
89
|
+
'L'
|
90
|
+
end
|
91
|
+
command = [header.upcase.to_s, 4, value]
|
92
|
+
write command.pack("a4L#{char}")
|
93
|
+
check_response
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RfBeam
|
4
|
+
module KLD7
|
5
|
+
# -----------------
|
6
|
+
# Base Frequency, 0 = low, 1 = middle (default), 2 = high
|
7
|
+
# -----------------
|
8
|
+
def base_frequency
|
9
|
+
query_parameter RADAR_PARAMETERS[:base_frequency].grps_index
|
10
|
+
end
|
11
|
+
alias rbfr base_frequency
|
12
|
+
|
13
|
+
def base_frequency=(frequency = 1)
|
14
|
+
value =
|
15
|
+
case frequency
|
16
|
+
when 0, :low, 'low'
|
17
|
+
0
|
18
|
+
when 1, :middle, 'middle'
|
19
|
+
1
|
20
|
+
when 2, :high, 'high'
|
21
|
+
2
|
22
|
+
else
|
23
|
+
raise ArgumentError, "Invalid arg: '#{frequency}'"
|
24
|
+
end
|
25
|
+
set_parameter(:rbfr, value, :uint32)
|
26
|
+
end
|
27
|
+
|
28
|
+
alias set_base_frequency base_frequency=
|
29
|
+
alias rbfr= base_frequency=
|
30
|
+
|
31
|
+
# -----------------
|
32
|
+
# Maximum Speed, 0 = 12.5km/h, 1 = 25km/h (default), 2 = 50km/h, 3 = 100km/h
|
33
|
+
# -----------------
|
34
|
+
def max_speed
|
35
|
+
query_parameter(RADAR_PARAMETERS[:max_speed].grps_index)
|
36
|
+
end
|
37
|
+
|
38
|
+
def max_speed=(speed = 1)
|
39
|
+
raise ArgumentError, "Invalid arg: '#{speed}'" unless (0..3).cover?(speed)
|
40
|
+
raise ArgumentError, 'Expected an Integer' unless speed.is_a?(Integer)
|
41
|
+
|
42
|
+
set_parameter :rspi, speed, :uint32
|
43
|
+
end
|
44
|
+
|
45
|
+
alias set_max_speed max_speed=
|
46
|
+
alias rspi max_speed=
|
47
|
+
|
48
|
+
# -----------------
|
49
|
+
# Maximum Range, 0 = 5m, 1 = 10m (default), 2 = 30m, 3 = 100m
|
50
|
+
# -----------------
|
51
|
+
def max_range
|
52
|
+
query_parameter(RADAR_PARAMETERS[:max_range].grps_index)
|
53
|
+
end
|
54
|
+
|
55
|
+
def max_range=(range = 1)
|
56
|
+
raise ArgumentError, "Invalid arg: '#{range}'" unless (0..3).cover?(range)
|
57
|
+
raise ArgumentError, 'Expected an Integer' unless range.is_a?(Integer)
|
58
|
+
|
59
|
+
set_parameter :rrai, range, :uint32
|
60
|
+
end
|
61
|
+
|
62
|
+
alias rrai= max_range=
|
63
|
+
alias set_max_range max_range=
|
64
|
+
|
65
|
+
# -----------------
|
66
|
+
# Threshold Offset, 10 - 60db, (default = 30)
|
67
|
+
# -----------------
|
68
|
+
def threshold_offset
|
69
|
+
query_parameter RADAR_PARAMETERS[:threshold_offset].grps_index
|
70
|
+
end
|
71
|
+
|
72
|
+
def threshold_offset=(offset = 30)
|
73
|
+
raise ArgumentError, "Invalid arg: '#{offset}'" unless (10..60).cover?(offset)
|
74
|
+
raise ArgumentError, 'Expected an Integer' unless offset.is_a?(Integer)
|
75
|
+
|
76
|
+
set_parameter :thof, offset, :uint32
|
77
|
+
end
|
78
|
+
|
79
|
+
alias thof= threshold_offset=
|
80
|
+
alias set_threshold_offset threshold_offset=
|
81
|
+
|
82
|
+
# -----------------
|
83
|
+
# Tracking filter type, 0 = Standard (Default), 1 = Fast Tracking, 2 = Long visibility
|
84
|
+
# -----------------
|
85
|
+
def tracking_filter
|
86
|
+
query_parameter RADAR_PARAMETERS[:tracking_filter].grps_index
|
87
|
+
end
|
88
|
+
|
89
|
+
def tracking_filter=(type = 0)
|
90
|
+
raise ArgumentError, "Invalid arg: '#{type}'" unless (0..2).cover?(type)
|
91
|
+
raise ArgumentError, 'Expected an Integer' unless type.is_a?(Integer)
|
92
|
+
|
93
|
+
set_parameter :trft, type, :uint32
|
94
|
+
end
|
95
|
+
alias trtf= tracking_filter=
|
96
|
+
alias set_tracking_filter tracking_filter=
|
97
|
+
|
98
|
+
# -----------------
|
99
|
+
# Vibration suppression, 0 - 16, 0 = No Suppression, 16 = High Suppression, default = 2
|
100
|
+
# -----------------
|
101
|
+
def vibration_suppression
|
102
|
+
query_parameter RADAR_PARAMETERS[:vibration_suppression].grps_index
|
103
|
+
end
|
104
|
+
|
105
|
+
def vibration_suppression=(value = 2)
|
106
|
+
raise ArgumentError, "Invalid arg: '#{value}'" unless (0..16).cover?(value)
|
107
|
+
raise ArgumentError, 'Expected an Integer' unless value.is_a?(Integer)
|
108
|
+
|
109
|
+
set_parameter :visu, value, :uint32
|
110
|
+
end
|
111
|
+
alias visu= vibration_suppression=
|
112
|
+
alias set_vibration_suppression vibration_suppression=
|
113
|
+
end
|
114
|
+
|
115
|
+
# -----------------
|
116
|
+
# Range Threshold, 0 - 100% of Range setting, default = 10
|
117
|
+
# -----------------
|
118
|
+
def range_threshold
|
119
|
+
query_parameter RADAR_PARAMETERS[:range_threshold].grps_index
|
120
|
+
end
|
121
|
+
|
122
|
+
def range_threshold=(value = 10)
|
123
|
+
raise ArgumentError, "Invalid arg: '#{value}'" unless (0..100).cover?(value)
|
124
|
+
raise ArgumentError, 'Expected an Integer' unless value.is_a?(Integer)
|
125
|
+
|
126
|
+
set_parameter :rath, value, :uint32
|
127
|
+
end
|
128
|
+
alias rath= range_threshold=
|
129
|
+
alias set_range_threshold range_threshold=
|
130
|
+
|
131
|
+
# -----------------
|
132
|
+
# Angle Threshold, -90° to 90°, default = 0
|
133
|
+
# -----------------
|
134
|
+
def angle_threshold
|
135
|
+
query_parameter RADAR_PARAMETERS[:angle_threshold].grps_index
|
136
|
+
end
|
137
|
+
|
138
|
+
def angle_threshold=(value = 0)
|
139
|
+
raise ArgumentError, "Invalid arg: '#{value}'" unless (-90..90).cover?(value)
|
140
|
+
raise ArgumentError, 'Expected an Integer' unless value.is_a?(Integer)
|
141
|
+
|
142
|
+
set_parameter :anth, value, :int32
|
143
|
+
end
|
144
|
+
alias anth= angle_threshold=
|
145
|
+
alias set_angle_threshold angle_threshold=
|
146
|
+
|
147
|
+
# -----------------
|
148
|
+
# Speed Threshold, 0 - 100% of speed setting, default = 50
|
149
|
+
# -----------------
|
150
|
+
def speed_threshold
|
151
|
+
query_parameter RADAR_PARAMETERS[:speed_threshold].grps_index
|
152
|
+
end
|
153
|
+
|
154
|
+
def speed_threshold=(value = 50)
|
155
|
+
raise ArgumentError, "Invalid arg: '#{value}'" unless (0..100).cover?(value)
|
156
|
+
raise ArgumentError, 'Expected an Integer' unless value.is_a?(Integer)
|
157
|
+
|
158
|
+
set_parameter :spth, value, :uint32
|
159
|
+
end
|
160
|
+
alias spth= angle_threshold=
|
161
|
+
alias set_speed_threshold angle_threshold=
|
162
|
+
end
|
@@ -1,7 +1,9 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'csv'
|
2
4
|
|
3
5
|
module RfBeam
|
4
|
-
module
|
6
|
+
module KLD7
|
5
7
|
def detection?
|
6
8
|
data = ddat
|
7
9
|
(data[2] == 1)
|
@@ -10,55 +12,47 @@ module RfBeam
|
|
10
12
|
def rfft
|
11
13
|
request_frame_data(:rfft)
|
12
14
|
sleep MEASUREMENT_DELAY
|
13
|
-
data = read(1032).unpack(
|
15
|
+
data = read(1032).unpack('a4LS256S256')
|
14
16
|
header, length = data.shift(2)
|
15
|
-
unless header ==
|
16
|
-
raise Error, "RFFT header response, header=#{header}"
|
17
|
-
end
|
17
|
+
raise Error, "RFFT header response, header=#{header}" unless header == 'RFFT'
|
18
18
|
raise Error, "RFFT payload length, length=#{length}" unless length == 1024
|
19
19
|
|
20
20
|
data
|
21
21
|
end
|
22
22
|
|
23
23
|
def reset
|
24
|
-
command = [
|
25
|
-
write command.pack(
|
24
|
+
command = ['RFSE', 0]
|
25
|
+
write command.pack('a4L')
|
26
26
|
check_response
|
27
27
|
end
|
28
28
|
alias rfse reset
|
29
29
|
|
30
30
|
def pdat(formatted: false)
|
31
31
|
request_frame_data(:pdat)
|
32
|
-
resp = read(102).unpack(
|
32
|
+
resp = read(102).unpack('a4LSssSSssSSssSSssSSssSSssSSssSSssSSssSSssS')
|
33
33
|
return resp unless formatted
|
34
34
|
|
35
|
-
target_count = resp[1]
|
36
|
-
return []
|
35
|
+
target_count = Integer(resp[1], 10) / 8
|
36
|
+
return [] if target_count <= 0
|
37
37
|
|
38
38
|
resp.shift 2
|
39
39
|
resp.compact
|
40
40
|
detected_raw_targets = []
|
41
|
-
target_count.times
|
42
|
-
detected_raw_targets << format_raw_target_data(resp.shift(4))
|
43
|
-
end
|
41
|
+
target_count.times { detected_raw_targets << format_raw_target_data(resp.shift(4)) }
|
44
42
|
detected_raw_targets
|
45
43
|
end
|
46
44
|
|
47
45
|
def tdat
|
48
46
|
request_frame_data(:tdat)
|
49
|
-
sleep MEASUREMENT_DELAY
|
50
47
|
|
51
48
|
sleep 0.1
|
52
|
-
resp = read(16).unpack(
|
53
|
-
|
54
|
-
return { dist: resp[2], speed: resp[3], angle: resp[4], mag: resp[5] }
|
55
|
-
end
|
49
|
+
resp = read(16).unpack('a4LSssS')
|
50
|
+
return { dist: resp[2], speed: resp[3], angle: resp[4], mag: resp[5] } if resp[1].nonzero?
|
56
51
|
end
|
57
52
|
|
58
53
|
def ddat
|
59
54
|
request_frame_data(:ddat)
|
60
|
-
|
61
|
-
array = read(14).unpack("a4LC6")
|
55
|
+
array = read(14).unpack('a4LC6')
|
62
56
|
{
|
63
57
|
label: array[0],
|
64
58
|
detection: array[2] == 1,
|
@@ -73,21 +67,16 @@ module RfBeam
|
|
73
67
|
|
74
68
|
# Get the radar parameter structure
|
75
69
|
def grps
|
76
|
-
command = [
|
77
|
-
write command.pack(
|
70
|
+
command = ['GRPS', 0]
|
71
|
+
write command.pack('a4L')
|
78
72
|
check_response
|
79
|
-
read(50).unpack(
|
73
|
+
read(50).unpack('a4LA19C8c2C4cCCCCSCC')
|
80
74
|
end
|
81
75
|
|
82
76
|
def config
|
83
77
|
data = grps
|
84
78
|
output = "\n"
|
85
|
-
RADAR_PARAMETERS.
|
86
|
-
output << formatted_parameter(
|
87
|
-
key,
|
88
|
-
data[RADAR_PARAMETERS[key].grps_index]
|
89
|
-
)
|
90
|
-
end
|
79
|
+
RADAR_PARAMETERS.each_key { |key| output << formatted_parameter(key, data[RADAR_PARAMETERS[key].grps_index]) }
|
91
80
|
output
|
92
81
|
end
|
93
82
|
|
@@ -97,24 +86,19 @@ module RfBeam
|
|
97
86
|
data = grps
|
98
87
|
value = data[param.grps_index]
|
99
88
|
end
|
100
|
-
param_str_value = param.
|
89
|
+
param_str_value = param.values.empty? ? value.to_s : param.values[value]
|
101
90
|
"#{param.name}: #{param_str_value}#{param.units}\n"
|
102
91
|
end
|
103
92
|
|
104
93
|
private
|
105
94
|
|
106
95
|
def format_raw_target_data(array)
|
107
|
-
{
|
108
|
-
dist: array.shift,
|
109
|
-
speed: array.shift,
|
110
|
-
angle: array.shift,
|
111
|
-
mag: array.shift
|
112
|
-
}
|
96
|
+
{ dist: array.shift, speed: array.shift, angle: array.shift, mag: array.shift }
|
113
97
|
end
|
114
98
|
|
115
99
|
def request_frame_data(type)
|
116
|
-
command = [
|
117
|
-
write command.pack(
|
100
|
+
command = ['GNFD', 4, FRAME_DATA_TYPES[type]]
|
101
|
+
write command.pack('a4LL')
|
118
102
|
check_response
|
119
103
|
end
|
120
104
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module RfBeam
|
4
|
-
module
|
4
|
+
module KLD7
|
5
5
|
require 'rubyserial'
|
6
6
|
require 'timeout'
|
7
7
|
|
@@ -16,7 +16,6 @@ module RfBeam
|
|
16
16
|
parity = :even
|
17
17
|
stop_bits = 1
|
18
18
|
open_serial_port(path, baude_rate, data_bits, parity, stop_bits)
|
19
|
-
init_radar if connected?
|
20
19
|
|
21
20
|
yield self if block_given?
|
22
21
|
end
|
@@ -42,6 +41,12 @@ module RfBeam
|
|
42
41
|
sleep 0.1
|
43
42
|
end
|
44
43
|
|
44
|
+
def init_radar
|
45
|
+
command = ['INIT', 4, 0]
|
46
|
+
@serial_port.write command.pack('a4LL')
|
47
|
+
check_response
|
48
|
+
end
|
49
|
+
|
45
50
|
private
|
46
51
|
|
47
52
|
def open_serial_port(path, baude_rate, data_bits, parity, stop_bits)
|
@@ -49,7 +54,7 @@ module RfBeam
|
|
49
54
|
end
|
50
55
|
|
51
56
|
def connected?
|
52
|
-
raise Error, 'ConnectionError: No open Serial device connections.' if @serial_port.
|
57
|
+
raise Error, 'ConnectionError: No open Serial device connections.' if @serial_port.closed?
|
53
58
|
|
54
59
|
true
|
55
60
|
end
|
@@ -70,22 +75,16 @@ module RfBeam
|
|
70
75
|
end
|
71
76
|
end
|
72
77
|
|
73
|
-
def init_radar
|
74
|
-
command = ['INIT', 4, 0]
|
75
|
-
@serial_port.write command.pack('a4LL') # 4 ASCII bytes, UINT32, UINT32
|
76
|
-
check_response
|
77
|
-
end
|
78
|
-
|
79
78
|
def check_response
|
80
79
|
sleep RESPONSE_DELAY
|
81
|
-
resp = @serial_port.read(9).unpack('a4LC')
|
80
|
+
resp = @serial_port.read(9).unpack('a4LC')
|
82
81
|
raise Error, 'No valid response from Serial Port' if resp[2].nil?
|
83
82
|
|
84
|
-
|
85
|
-
|
86
|
-
raise Error, "Radar response Error: #{error_string}" unless response_key.zero?
|
83
|
+
resp_code = resp[2]
|
84
|
+
index_range = 1..RESP_CODES.size
|
87
85
|
|
88
|
-
|
86
|
+
raise Error, "Radar response Error: #{RESP_CODES[resp_code]}" if index_range.include?(resp_code)
|
87
|
+
true
|
89
88
|
end
|
90
89
|
end
|
91
90
|
end
|
data/lib/rfbeam/kld7/streamer.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'io/console'
|
4
|
+
require 'stringio'
|
5
|
+
require 'tty-screen'
|
6
|
+
require 'unicode_plot'
|
6
7
|
|
7
8
|
module RfBeam
|
8
9
|
module KLD7
|
@@ -15,8 +16,8 @@ module RfBeam
|
|
15
16
|
|
16
17
|
def monitor_keypress
|
17
18
|
loop do
|
18
|
-
key =
|
19
|
-
if key.
|
19
|
+
key = $stdin.getch
|
20
|
+
if key.casecmp('q').zero?
|
20
21
|
@stop_streaming = true
|
21
22
|
break
|
22
23
|
end
|
@@ -54,7 +55,7 @@ module RfBeam
|
|
54
55
|
{
|
55
56
|
x: Array(-128...128),
|
56
57
|
series1: data.shift(256).map { |value| value / 100 },
|
57
|
-
series2: data.shift(256).map { |value| value
|
58
|
+
series2: data.shift(256).map { |value| Integer(value, 10) / 100 }
|
58
59
|
}
|
59
60
|
end
|
60
61
|
|
@@ -65,16 +66,16 @@ module RfBeam
|
|
65
66
|
UnicodePlot.lineplot(
|
66
67
|
data[:x],
|
67
68
|
data[:series1],
|
68
|
-
name:
|
69
|
-
title:
|
69
|
+
name: 'IF1/2 Averaged',
|
70
|
+
title: 'Raw FFT',
|
70
71
|
height: 25,
|
71
|
-
width
|
72
|
-
xlabel:
|
73
|
-
ylabel:
|
72
|
+
width:,
|
73
|
+
xlabel: 'Speed (km/h)',
|
74
|
+
ylabel: 'Signal (db)',
|
74
75
|
xlim: [-128, 128],
|
75
76
|
ylim: [0, 100]
|
76
77
|
)
|
77
|
-
UnicodePlot.lineplot!(plot, data[:x], data[:series2], name:
|
78
|
+
UnicodePlot.lineplot!(plot, data[:x], data[:series2], name: 'Threshold')
|
78
79
|
plot
|
79
80
|
end
|
80
81
|
end
|
data/lib/rfbeam/version.rb
CHANGED