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
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rfbeam
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Carruthers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-09 00:00:00.000000000 Z
11
+ date: 2023-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -44,84 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.2.1
47
+ version: 1.2.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.2.1
55
- - !ruby/object:Gem::Dependency
56
- name: tty-logger
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 0.6.0
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 0.6.0
69
- - !ruby/object:Gem::Dependency
70
- name: tty-screen
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: 0.8.1
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 0.8.1
83
- - !ruby/object:Gem::Dependency
84
- name: tty-spinner
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: 0.9.3
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: 0.9.3
97
- - !ruby/object:Gem::Dependency
98
- name: tty-table
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: 0.12.0
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: 0.12.0
111
- - !ruby/object:Gem::Dependency
112
- name: unicode_plot
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: 0.0.5
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: 0.0.5
54
+ version: 1.2.0
125
55
  description: Currently only tested with K-LD7 on MacOS & Raspian (bullseye)
126
56
  email:
127
57
  - robc@hey.com
@@ -131,9 +61,8 @@ extensions: []
131
61
  extra_rdoc_files: []
132
62
  files:
133
63
  - ".DS_Store"
134
- - ".rubocop.yml"
64
+ - ".pre-commit-config.yaml"
135
65
  - ".streerc"
136
- - ".streerc~1f4cd14e3c0a9afdf972aa5f3982d36a89869b72"
137
66
  - ".tool-versions"
138
67
  - CHANGELOG.md
139
68
  - Gemfile
@@ -141,104 +70,20 @@ files:
141
70
  - LICENSE.txt
142
71
  - README.md
143
72
  - Rakefile
73
+ - cliff.toml
144
74
  - cog.toml
145
75
  - exe/rfbeam
146
76
  - lib/rfbeam.rb
147
77
  - lib/rfbeam/cli.rb
148
- - lib/rfbeam/kld7/cli_formatter.rb
149
- - lib/rfbeam/kld7/cli_output.rb
150
78
  - lib/rfbeam/kld7/constants.rb
79
+ - lib/rfbeam/kld7/detection_params.rb
80
+ - lib/rfbeam/kld7/module_params.rb
81
+ - lib/rfbeam/kld7/operation_params.rb
151
82
  - lib/rfbeam/kld7/radar_messages.rb
152
- - lib/rfbeam/kld7/radar_parameters.rb
153
83
  - lib/rfbeam/kld7/serial_connection.rb
154
84
  - lib/rfbeam/kld7/streamer.rb
155
85
  - lib/rfbeam/version.rb
156
- - node_modules/.bin/prettier
157
- - node_modules/.yarn-integrity
158
- - node_modules/@prettier/plugin-ruby/CHANGELOG.md
159
- - node_modules/@prettier/plugin-ruby/CODE_OF_CONDUCT.md
160
- - node_modules/@prettier/plugin-ruby/CONTRIBUTING.md
161
- - node_modules/@prettier/plugin-ruby/LICENSE
162
- - node_modules/@prettier/plugin-ruby/README.md
163
- - node_modules/@prettier/plugin-ruby/docs/logo.png
164
- - node_modules/@prettier/plugin-ruby/node_modules/.bin/prettier
165
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/LICENSE
166
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/README.md
167
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/bin-prettier.js
168
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/cli.js
169
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/doc.js
170
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-angular.mjs
171
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-babel.mjs
172
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-espree.mjs
173
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-flow.mjs
174
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-glimmer.mjs
175
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-graphql.mjs
176
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-html.mjs
177
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-markdown.mjs
178
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-meriyah.mjs
179
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-postcss.mjs
180
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-typescript.mjs
181
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/parser-yaml.mjs
182
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/esm/standalone.mjs
183
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/index.js
184
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/package.json
185
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-angular.js
186
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-babel.js
187
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-espree.js
188
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-flow.js
189
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-glimmer.js
190
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-graphql.js
191
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-html.js
192
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-markdown.js
193
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-meriyah.js
194
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-postcss.js
195
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-typescript.js
196
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/parser-yaml.js
197
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/standalone.js
198
- - node_modules/@prettier/plugin-ruby/node_modules/prettier/third-party.js
199
- - node_modules/@prettier/plugin-ruby/package.json
200
- - node_modules/@prettier/plugin-ruby/prettier.gemspec
201
- - node_modules/@prettier/plugin-ruby/rubocop.yml
202
- - node_modules/@prettier/plugin-ruby/src/getInfo.js
203
- - node_modules/@prettier/plugin-ruby/src/netcat.js
204
- - node_modules/@prettier/plugin-ruby/src/parseSync.js
205
- - node_modules/@prettier/plugin-ruby/src/plugin.js
206
- - node_modules/@prettier/plugin-ruby/src/server.rb
207
- - node_modules/prettier/LICENSE
208
- - node_modules/prettier/README.md
209
- - node_modules/prettier/bin-prettier.js
210
- - node_modules/prettier/cli.js
211
- - node_modules/prettier/doc.js
212
- - node_modules/prettier/esm/parser-angular.mjs
213
- - node_modules/prettier/esm/parser-babel.mjs
214
- - node_modules/prettier/esm/parser-espree.mjs
215
- - node_modules/prettier/esm/parser-flow.mjs
216
- - node_modules/prettier/esm/parser-glimmer.mjs
217
- - node_modules/prettier/esm/parser-graphql.mjs
218
- - node_modules/prettier/esm/parser-html.mjs
219
- - node_modules/prettier/esm/parser-markdown.mjs
220
- - node_modules/prettier/esm/parser-meriyah.mjs
221
- - node_modules/prettier/esm/parser-postcss.mjs
222
- - node_modules/prettier/esm/parser-typescript.mjs
223
- - node_modules/prettier/esm/parser-yaml.mjs
224
- - node_modules/prettier/esm/standalone.mjs
225
- - node_modules/prettier/index.js
226
- - node_modules/prettier/package.json
227
- - node_modules/prettier/parser-angular.js
228
- - node_modules/prettier/parser-babel.js
229
- - node_modules/prettier/parser-espree.js
230
- - node_modules/prettier/parser-flow.js
231
- - node_modules/prettier/parser-glimmer.js
232
- - node_modules/prettier/parser-graphql.js
233
- - node_modules/prettier/parser-html.js
234
- - node_modules/prettier/parser-markdown.js
235
- - node_modules/prettier/parser-meriyah.js
236
- - node_modules/prettier/parser-postcss.js
237
- - node_modules/prettier/parser-typescript.js
238
- - node_modules/prettier/parser-yaml.js
239
- - node_modules/prettier/standalone.js
240
- - node_modules/prettier/third-party.js
241
- - package.json
86
+ - output.csv
242
87
  - rfbeam.gemspec
243
88
  - sig/rfbeam.rbs
244
89
  - streamer2.rb
@@ -260,14 +105,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
260
105
  requirements:
261
106
  - - ">="
262
107
  - !ruby/object:Gem::Version
263
- version: 3.1.2
108
+ version: 3.2.1
264
109
  required_rubygems_version: !ruby/object:Gem::Requirement
265
110
  requirements:
266
111
  - - ">="
267
112
  - !ruby/object:Gem::Version
268
113
  version: '0'
269
114
  requirements: []
270
- rubygems_version: 3.3.26
115
+ rubygems_version: 3.4.13
271
116
  signing_key:
272
117
  specification_version: 4
273
118
  summary: Ruby API and CLI for RFBeam doplar radar modules
data/.rubocop.yml DELETED
@@ -1,25 +0,0 @@
1
- inherit_gem:
2
- syntax_tree: config/rubocop.yml
3
-
4
- AllCops:
5
- TargetRubyVersion: 3.1
6
- NewCops: enable
7
-
8
- Layout/LineLength:
9
- Max: 120
10
- AutoCorrect: true
11
-
12
- Style/StringLiterals:
13
- EnforcedStyle: single_quotes
14
-
15
- Metrics/ModuleLength:
16
- Enabled: false
17
-
18
- Metrics/MethodLength:
19
- Max: 20
20
-
21
- Metrics/ClassLength:
22
- Enabled: false
23
-
24
- Documentation:
25
- Enabled: false
@@ -1,2 +0,0 @@
1
- --print-width=120
2
- --plugins=plugin/single_quotes
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'tty-table'
4
-
5
- module RfBeam
6
- module Kld7
7
- class CliFormatter
8
- def self.format(type, data)
9
- new.format(type, data)
10
- end
11
-
12
- def format(type, data)
13
- case type
14
- when :tdat
15
- tdat(data)
16
- when :pdat
17
- pdat(data)
18
- when :ddat
19
- ddat(data)
20
- end
21
- end
22
-
23
- def pdat_table(data)
24
- table = TTY::Table.new header: ['index', 'dist (M)', 'speed (Km/h)', 'angle (°)', 'mag (db)']
25
- count = data[1] / 8
26
- data.shift(2)
27
- count.times do |index|
28
- values = data.shift(4).map { |value| value.to_f / 100.0 }
29
- table << [index, values].flatten
30
- end
31
- table
32
- end
33
-
34
- private
35
-
36
- def ddat(data)
37
- labels = ['Detection', 'Micro Detection', 'Angle', 'Direction', 'Range', 'Speed']
38
- labels
39
- .map
40
- .with_index { |label, index| "#{label}: #{DETECTION_FLAGS[to_symbol(label)][data[index + 2]]}" }
41
- .join("\n")
42
- end
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
-
55
- def to_symbol(string)
56
- modified_string = string.gsub(' ', '_').downcase
57
- modified_string.to_sym
58
- end
59
- end
60
- end
61
- end
@@ -1,141 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'unicode_plot'
4
- require 'io/console'
5
- require 'stringio'
6
- require 'tty-screen'
7
- require 'tty-logger'
8
-
9
- module RfBeam
10
- module Kld7
11
- class CliOutput
12
- attr_reader :radar
13
-
14
- def initialize(radar_id)
15
- devices = RfBeam.connected
16
- if devices.empty?
17
- TTY::Logger.new.warn 'No Radar modules found.'
18
- else
19
- @radar = RfBeam::KLD7.new(devices[radar_id.to_i])
20
- end
21
- end
22
-
23
- def display(type, options)
24
- display_method = options[:stream].nil? ? 'display' : 'stream'
25
- send("#{display_method}_#{type}", options)
26
- end
27
-
28
- def plot(type, stream: false)
29
- stream ? stream_plot(type) : display_plot(type)
30
- end
31
-
32
- def display_plot(type)
33
- out = StringIO.new
34
- def out.tty?
35
- true
36
- end
37
- out.truncate(0)
38
-
39
- plot = send("#{type}_plot")
40
- plot.render(out)
41
-
42
- lines = out.string.lines
43
- lines.each { |line| $stdout.print "\r#{line}" }
44
- $stdout.print "\e[0J"
45
- $stdout.flush
46
-
47
- return unless @streaming
48
-
49
- n = lines.count
50
- $stdout.print "\e[#{n}F"
51
- end
52
-
53
- def stream_plot(type)
54
- @streaming = true
55
- Thread.new { monitor_keypress }
56
-
57
- loop do
58
- display_plot(type)
59
- break unless @streaming
60
- end
61
- end
62
-
63
- private
64
-
65
- def monitor_keypress
66
- loop do
67
- key = $stdin.getch
68
- if key.downcase == 'q'
69
- @streaming = false
70
- break
71
- end
72
- end
73
- end
74
-
75
- def rfft_plot_data(data)
76
- {
77
- x: Array(-128...128),
78
- series1: data.shift(256).map { |value| value / 100 },
79
- series2: data.shift(256).map { |value| value.to_i / 100 }
80
- }
81
- end
82
-
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
89
- end
90
-
91
- def stream_ddat
92
- @streaming = true
93
- Thread.new { monitor_keypress }
94
- spinner = TTY::Spinner.new('[:spinner] :title ', format: :bouncing_ball)
95
- spinner.run('Done!') do |sp|
96
- loop do
97
- break unless @streaming
98
-
99
- data = @radar.ddat
100
- sp.update title: "Detection: #{DETECTION_FLAGS[:detection][data[2]]}"
101
- end
102
- spinner.update title: ''
103
- end
104
- end
105
-
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
112
- end
113
-
114
- def display_pdat(*)
115
- table = RfBeam::Kld7::CliFormatter.new.pdat_table(@radar.pdat)
116
- puts "\n Detected Raw Targets"
117
- puts table.render(:unicode, alignment: :center)
118
- end
119
-
120
- def rfft_plot
121
- screen_width = TTY::Screen.width * 0.65
122
- data = rfft_plot_data(@radar.rfft)
123
- plot =
124
- UnicodePlot.lineplot(
125
- data[:x],
126
- data[:series1],
127
- name: 'IF1/2 Averaged',
128
- title: 'Raw FFT',
129
- height: 25,
130
- width: screen_width,
131
- xlabel: 'Speed (km/h)',
132
- ylabel: 'Signal (db)',
133
- xlim: [-128, 128],
134
- ylim: [0, 100]
135
- )
136
- UnicodePlot.lineplot!(plot, data[:x], data[:series2], name: 'Threshold')
137
- plot
138
- end
139
- end
140
- end
141
- end