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