rfbeam 0.5.1 → 0.5.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/.pre-commit-config.yaml +8 -0
  3. data/.tool-versions +1 -1
  4. data/CHANGELOG.md +39 -46
  5. data/Gemfile +10 -7
  6. data/Gemfile.lock +47 -44
  7. data/README.md +71 -113
  8. data/Rakefile +5 -9
  9. data/cliff.toml +74 -0
  10. data/cog.toml +7 -3
  11. data/exe/rfbeam +0 -1
  12. data/lib/rfbeam/cli.rb +37 -29
  13. data/lib/rfbeam/kld7/constants.rb +5 -4
  14. data/lib/rfbeam/kld7/detection_params.rb +149 -0
  15. data/lib/rfbeam/kld7/module_params.rb +96 -0
  16. data/lib/rfbeam/kld7/operation_params.rb +162 -0
  17. data/lib/rfbeam/kld7/radar_messages.rb +23 -39
  18. data/lib/rfbeam/kld7/serial_connection.rb +13 -14
  19. data/lib/rfbeam/kld7/streamer.rb +15 -14
  20. data/lib/rfbeam/version.rb +1 -1
  21. data/lib/rfbeam.rb +8 -7
  22. data/output.csv +257 -0
  23. data/rfbeam.gemspec +3 -8
  24. data/yarn.lock +221 -12
  25. metadata +12 -167
  26. data/.rubocop.yml +0 -25
  27. data/.streerc~1f4cd14e3c0a9afdf972aa5f3982d36a89869b72 +0 -2
  28. data/lib/rfbeam/kld7/cli_formatter.rb +0 -61
  29. data/lib/rfbeam/kld7/cli_output.rb +0 -141
  30. data/lib/rfbeam/kld7/radar_parameters.rb +0 -441
  31. data/node_modules/.bin/prettier +0 -1
  32. data/node_modules/.yarn-integrity +0 -19
  33. data/node_modules/@prettier/plugin-ruby/CHANGELOG.md +0 -1351
  34. data/node_modules/@prettier/plugin-ruby/CODE_OF_CONDUCT.md +0 -76
  35. data/node_modules/@prettier/plugin-ruby/CONTRIBUTING.md +0 -185
  36. data/node_modules/@prettier/plugin-ruby/LICENSE +0 -21
  37. data/node_modules/@prettier/plugin-ruby/README.md +0 -226
  38. data/node_modules/@prettier/plugin-ruby/docs/logo.png +0 -0
  39. data/node_modules/@prettier/plugin-ruby/node_modules/.bin/prettier +0 -1
  40. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/LICENSE +0 -5945
  41. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/README.md +0 -109
  42. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/bin-prettier.js +0 -62
  43. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/cli.js +0 -15136
  44. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/doc.js +0 -1473
  45. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-angular.mjs +0 -2
  46. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-babel.mjs +0 -29
  47. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-espree.mjs +0 -26
  48. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-flow.mjs +0 -35
  49. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-glimmer.mjs +0 -27
  50. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-graphql.mjs +0 -15
  51. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-html.mjs +0 -36
  52. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-markdown.mjs +0 -76
  53. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-meriyah.mjs +0 -19
  54. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-postcss.mjs +0 -76
  55. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-typescript.mjs +0 -257
  56. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-yaml.mjs +0 -150
  57. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/standalone.mjs +0 -116
  58. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/index.js +0 -37885
  59. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/package.json +0 -21
  60. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-angular.js +0 -2
  61. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-babel.js +0 -29
  62. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-espree.js +0 -26
  63. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-flow.js +0 -35
  64. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-glimmer.js +0 -27
  65. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-graphql.js +0 -15
  66. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-html.js +0 -36
  67. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-markdown.js +0 -76
  68. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-meriyah.js +0 -19
  69. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-postcss.js +0 -76
  70. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-typescript.js +0 -257
  71. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-yaml.js +0 -150
  72. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/standalone.js +0 -116
  73. data/node_modules/@prettier/plugin-ruby/node_modules/prettier/third-party.js +0 -8978
  74. data/node_modules/@prettier/plugin-ruby/package.json +0 -64
  75. data/node_modules/@prettier/plugin-ruby/prettier.gemspec +0 -36
  76. data/node_modules/@prettier/plugin-ruby/rubocop.yml +0 -64
  77. data/node_modules/@prettier/plugin-ruby/src/getInfo.js +0 -23
  78. data/node_modules/@prettier/plugin-ruby/src/netcat.js +0 -13
  79. data/node_modules/@prettier/plugin-ruby/src/parseSync.js +0 -236
  80. data/node_modules/@prettier/plugin-ruby/src/plugin.js +0 -172
  81. data/node_modules/@prettier/plugin-ruby/src/server.rb +0 -199
  82. data/node_modules/prettier/LICENSE +0 -5970
  83. data/node_modules/prettier/README.md +0 -109
  84. data/node_modules/prettier/bin-prettier.js +0 -64
  85. data/node_modules/prettier/cli.js +0 -15364
  86. data/node_modules/prettier/doc.js +0 -1473
  87. data/node_modules/prettier/esm/parser-angular.mjs +0 -2
  88. data/node_modules/prettier/esm/parser-babel.mjs +0 -29
  89. data/node_modules/prettier/esm/parser-espree.mjs +0 -26
  90. data/node_modules/prettier/esm/parser-flow.mjs +0 -35
  91. data/node_modules/prettier/esm/parser-glimmer.mjs +0 -27
  92. data/node_modules/prettier/esm/parser-graphql.mjs +0 -15
  93. data/node_modules/prettier/esm/parser-html.mjs +0 -36
  94. data/node_modules/prettier/esm/parser-markdown.mjs +0 -76
  95. data/node_modules/prettier/esm/parser-meriyah.mjs +0 -19
  96. data/node_modules/prettier/esm/parser-postcss.mjs +0 -76
  97. data/node_modules/prettier/esm/parser-typescript.mjs +0 -49
  98. data/node_modules/prettier/esm/parser-yaml.mjs +0 -150
  99. data/node_modules/prettier/esm/standalone.mjs +0 -116
  100. data/node_modules/prettier/index.js +0 -38236
  101. data/node_modules/prettier/package.json +0 -21
  102. data/node_modules/prettier/parser-angular.js +0 -2
  103. data/node_modules/prettier/parser-babel.js +0 -29
  104. data/node_modules/prettier/parser-espree.js +0 -26
  105. data/node_modules/prettier/parser-flow.js +0 -35
  106. data/node_modules/prettier/parser-glimmer.js +0 -27
  107. data/node_modules/prettier/parser-graphql.js +0 -15
  108. data/node_modules/prettier/parser-html.js +0 -36
  109. data/node_modules/prettier/parser-markdown.js +0 -76
  110. data/node_modules/prettier/parser-meriyah.js +0 -19
  111. data/node_modules/prettier/parser-postcss.js +0 -76
  112. data/node_modules/prettier/parser-typescript.js +0 -49
  113. data/node_modules/prettier/parser-yaml.js +0 -150
  114. data/node_modules/prettier/standalone.js +0 -116
  115. data/node_modules/prettier/third-party.js +0 -8978
  116. 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
- require "csv"
1
+ # frozen_string_literal: true
2
+
3
+ require 'csv'
2
4
 
3
5
  module RfBeam
4
- module Kld7
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("a4LS256S256")
15
+ data = read(1032).unpack('a4LS256S256')
14
16
  header, length = data.shift(2)
15
- unless header == "RFFT"
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 = ["RFSE", 0]
25
- write command.pack("a4L")
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("a4LSssSSssSSssSSssSSssSSssSSssSSssSSssSSssS")
32
+ resp = read(102).unpack('a4LSssSSssSSssSSssSSssSSssSSssSSssSSssSSssS')
33
33
  return resp unless formatted
34
34
 
35
- target_count = resp[1].to_i / 8
36
- return [] unless target_count.positive?
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 do
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("a4LSssS")
53
- unless resp[1].zero?
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
- flags = %w[Low High]
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 = ["GRPS", 0]
77
- write command.pack("a4L")
70
+ command = ['GRPS', 0]
71
+ write command.pack('a4L')
78
72
  check_response
79
- read(50).unpack("a4LA19C8c2C4cCCCCSCC")
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.keys.each do |key|
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.str_values.empty? ? value.to_s : param.str_values[value]
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 = ["GNFD", 4, FRAME_DATA_TYPES[type]]
117
- write command.pack("a4LL")
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 Kld7
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.nil?
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') # 4 ASCII bytes, UINT32, UINT8
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
- response_key = resp[2]
85
- error_string = RESP_CODES[response_key].nil? ? 'Response unknown' : RESP_CODES[response_key]
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
- response_key.zero? # Everything OK
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
@@ -1,8 +1,9 @@
1
- # rubocop:disable all
2
- require "unicode_plot"
3
- require "io/console"
4
- require "stringio"
5
- require "tty-screen"
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 = STDIN.getch
19
- if key.downcase == "q"
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.to_i / 100 }
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: "IF1/2 Averaged",
69
- title: "Raw FFT",
69
+ name: 'IF1/2 Averaged',
70
+ title: 'Raw FFT',
70
71
  height: 25,
71
- width: width,
72
- xlabel: "Speed (km/h)",
73
- ylabel: "Signal (db)",
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: "Threshold")
78
+ UnicodePlot.lineplot!(plot, data[:x], data[:series2], name: 'Threshold')
78
79
  plot
79
80
  end
80
81
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RfBeam
4
- VERSION = '0.5.1'
4
+ VERSION = '0.5.8'
5
5
  end