rfbeam 0.5.1 → 0.5.8

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.
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