rfbeam 0.3.5 → 0.4.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 139acc0d00964189f2eadbba6ed9c7b0e3f4b6c5104a757b2c1ab335d0e30c22
4
- data.tar.gz: 86370312525afb17e493aa4b561a68b0f57dc48122f3ecd5f389c421c512cbe8
3
+ metadata.gz: 19f39170dee64099fe6806a345393beff434035df70fe525fa31b361468cac9e
4
+ data.tar.gz: 622aba1c5ab9f85fdb8cadf90f10339344306db39ab9299b2ef8b437d228d82d
5
5
  SHA512:
6
- metadata.gz: 76e49986de83640754506d935a5a46b0c74548fe96ac7fec03bff66efe048937eaf1dd1175ea25658e3cbdc3705f6f4744df56c969f584e9f3763629d37fbe0e
7
- data.tar.gz: 0d032f953bca0658fb4edec3544925bd1fe675b759b1a9759a8cfbffea0abd76f7e1690bb9ae87df5d700a102d4c713f5bb858ca7a8b855d039c3ea448e94428
6
+ metadata.gz: 57bd136ef560a32dab06e08c841b44e6e1b192525d9d3d44db1a88885c0b30b9b9b28ab28b1f408d628e191195373a012d31405ae24372fa4efd76ecbb3af46c
7
+ data.tar.gz: 5dc08c9c71c511e210a4c30599248bb5be53f1ccd7373af73edeb1ff35043dc76b90235bf46de93b9b755123af598225d6b96f06f6c0c5ab89bf4d1bc2e81d57
data/.rubocop.yml CHANGED
@@ -11,7 +11,7 @@ Metrics/ModuleLength:
11
11
  Enabled: false
12
12
 
13
13
  Metrics/MethodLength:
14
- Max: 15
14
+ Max: 20
15
15
 
16
16
  Documentation:
17
17
  Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## [0.4.0] - 2023-4-4
2
+
3
+ - rough CLI implementation
4
+ - Streaming rfft data, with plot output
5
+
1
6
  ## [0.3.5] - 2023-4-1
2
7
 
3
8
  - Updated Radar parameter accessors
data/Gemfile CHANGED
@@ -10,3 +10,13 @@ gem "rake", "~> 13.0"
10
10
  gem "minitest", "~> 5.0"
11
11
 
12
12
  gem "rubocop", "~> 1.21"
13
+
14
+ gem "tty-table", "~> 0.12.0"
15
+
16
+ gem "tty-spinner", "~> 0.9.3"
17
+
18
+ gem "unicode_plot", "~> 0.0.5"
19
+
20
+ gem "tty-logger", "~> 0.6.0"
21
+
22
+ gem "tty-screen", "~> 0.8.1"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rfbeam (0.3.5)
4
+ rfbeam (0.4.0)
5
5
  activesupport (~> 6.1.0)
6
6
  rubyserial (~> 0.6.0)
7
7
  thor (~> 1.2.1)
@@ -17,6 +17,7 @@ GEM
17
17
  zeitwerk (~> 2.3)
18
18
  ast (2.4.2)
19
19
  concurrent-ruby (1.1.10)
20
+ enumerable-statistics (2.0.7)
20
21
  ffi (1.15.5)
21
22
  i18n (1.12.0)
22
23
  concurrent-ruby (~> 1.0)
@@ -25,6 +26,8 @@ GEM
25
26
  parallel (1.22.1)
26
27
  parser (3.1.3.0)
27
28
  ast (~> 2.4.1)
29
+ pastel (0.8.0)
30
+ tty-color (~> 0.5)
28
31
  rainbow (3.1.1)
29
32
  rake (13.0.6)
30
33
  regexp_parser (2.6.1)
@@ -44,10 +47,29 @@ GEM
44
47
  ruby-progressbar (1.11.0)
45
48
  rubyserial (0.6.0)
46
49
  ffi (~> 1.9, >= 1.9.3)
50
+ strings (0.2.1)
51
+ strings-ansi (~> 0.2)
52
+ unicode-display_width (>= 1.5, < 3.0)
53
+ unicode_utils (~> 1.4)
54
+ strings-ansi (0.2.0)
47
55
  thor (1.2.1)
56
+ tty-color (0.6.0)
57
+ tty-cursor (0.7.1)
58
+ tty-logger (0.6.0)
59
+ pastel (~> 0.8)
60
+ tty-screen (0.8.1)
61
+ tty-spinner (0.9.3)
62
+ tty-cursor (~> 0.7)
63
+ tty-table (0.12.0)
64
+ pastel (~> 0.8)
65
+ strings (~> 0.2.0)
66
+ tty-screen (~> 0.8)
48
67
  tzinfo (2.0.5)
49
68
  concurrent-ruby (~> 1.0)
50
69
  unicode-display_width (2.3.0)
70
+ unicode_plot (0.0.5)
71
+ enumerable-statistics (>= 2.0.1)
72
+ unicode_utils (1.4.0)
51
73
  zeitwerk (2.6.6)
52
74
 
53
75
  PLATFORMS
@@ -59,6 +81,11 @@ DEPENDENCIES
59
81
  rake (~> 13.0)
60
82
  rfbeam!
61
83
  rubocop (~> 1.21)
84
+ tty-logger (~> 0.6.0)
85
+ tty-screen (~> 0.8.1)
86
+ tty-spinner (~> 0.9.3)
87
+ tty-table (~> 0.12.0)
88
+ unicode_plot (~> 0.0.5)
62
89
 
63
90
  BUNDLED WITH
64
91
  2.4.10
data/exe/rfbeam ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rfbeam'
4
+
5
+ RfBeam::CLI.start(ARGV)
data/lib/rfbeam/cli.rb ADDED
@@ -0,0 +1,130 @@
1
+ # rubocop:disable all
2
+ require 'thor'
3
+ require 'rfbeam'
4
+ require 'tty-table'
5
+ require 'tty-logger'
6
+ require 'tty-spinner'
7
+ require 'io/console'
8
+ require 'unicode_plot'
9
+
10
+ module RfBeam
11
+ class CLI < Thor
12
+
13
+ attr_accessor :radar, :logger
14
+
15
+ desc 'list', 'List available radar modules'
16
+ def list
17
+ devices = RfBeam.connected
18
+ @logger.warning 'No Radar modules found.' unless devices.count.positive?
19
+
20
+ table = TTY::Table.new( header: ['id', 'Path', 'Version'])
21
+
22
+ devices.each.with_index do |path, index|
23
+ table << ["R#{index}", path, @radar.sw_version]
24
+ end
25
+ puts table.render(:ascii)
26
+ end
27
+
28
+ desc 'config <radar_id>', 'Shows the parameter setting for the Radar module'
29
+ def config(radar_id)
30
+ init_radar(radar_id)
31
+ puts @radar.config
32
+ end
33
+
34
+ desc 'set_param <radar_id> <key> <value>', 'Set radar parameters, see readme for keys'
35
+ def set_param(radar_id, param, value)
36
+ return logger.warning("Invalid param: '#{param}'") unless RfBeam::K_ld7::RADAR_PARAMETERS.include?(param.to_sym)
37
+
38
+ init_radar radar_id
39
+ @radar.send("#{param}=", value.to_i)
40
+ logger.success "Set #{@radar.formatted_parameter(param.to_sym)}"
41
+ end
42
+
43
+ desc 'ddat <radar_id>', 'stream any valid detections, stop stream with q and enter'
44
+ option :stream, type: :boolean, aliases: '-s', desc: "Stream the data from the device"
45
+ def ddat(radar_id)
46
+ init_radar radar_id
47
+
48
+ if options[:stream]
49
+ Thread.new { monitor_keypress }
50
+ spinner = TTY::Spinner.new("[:spinner] :title ", format: :bouncing_ball)
51
+ loop do
52
+ break if @stop_streaming
53
+ spinner.spin
54
+ data = @radar.ddat
55
+ spinner.update title: "Searching... #{data}"
56
+ spinner.success @radar.tdat if data[2] == 1
57
+ end
58
+ spinner.stop
59
+ puts "\nTask Quit."
60
+ else
61
+ puts "\n#{@radar.ddat}"
62
+ end
63
+
64
+ end
65
+
66
+ desc 'pdat <radar_id>', 'Display Tracked Targets'
67
+ def pdat(radar_id)
68
+ init_radar radar_id
69
+ puts @radar.pdat
70
+ end
71
+
72
+ desc "rfft <radar_id>", "Display the dopplar radar data as a plot"
73
+ option :stream, type: :boolean, aliases: '-s', desc: "Stream the data from the device"
74
+ option :period, type: :numeric, aliases: '-p', default: 0.5, desc: "Update period (in seconds) for the streaming data"
75
+ def rfft(radar_id)
76
+ init_radar(radar_id)
77
+
78
+ if options[:stream]
79
+ streamer = RfBeam::KLD7::Streamer.new(@radar)
80
+ streamer.rfft
81
+ else
82
+ plot = rfft_plot(@radar)
83
+ p plot.render
84
+ end
85
+ end
86
+
87
+ private
88
+
89
+ def init_radar(id)
90
+ devices = RfBeam.connected
91
+ @logger = TTY::Logger.new
92
+ return @logger.warning 'No Radar modules found.' unless devices.count.positive?
93
+
94
+ @radar = RfBeam::K_ld7.new(devices[id.to_i])
95
+ end
96
+
97
+ def plot_data(data)
98
+ { x: Array(-128...128), series1: data.shift(256).map { |value| value / 100 }, series2: data.shift(256).map { |value| value.to_i / 100 } }
99
+ end
100
+
101
+ def monitor_keypress
102
+ loop do
103
+ key = STDIN.getch
104
+ if key.downcase == 'q'
105
+ @stop_streaming = true
106
+ break
107
+ end
108
+ end
109
+ end
110
+
111
+ def rfft_plot(radar)
112
+ speed = radar.max_speed
113
+ speed_label = radar.formatted_parameter(:max_speed)
114
+ xlim = [speed - speed * 2, speed]
115
+ data = plot_data(radar.rfft)
116
+ plot = UnicodePlot.lineplot(
117
+ data[:x],
118
+ data[:series1],
119
+ name: 'IF1/2 Averaged',
120
+ title: 'Raw FFT',
121
+ height: 25,
122
+ width: 120,
123
+ xlabel: "Speed (km/h), #{speed_label}",
124
+ ylabel: 'Signal (db)', xlim: [-128, 128],
125
+ ylim: [0, 100])
126
+ UnicodePlot.lineplot!(plot, data[:x], data[:series2], name: "Threshold")
127
+ plot
128
+ end
129
+ end
130
+ end
@@ -29,7 +29,7 @@ module RfBeam
29
29
  range: %w[Far Near],
30
30
  speed: %w[Low High]
31
31
  }.freeze
32
-
32
+
33
33
  Param = Data.define(:name, :grps_index, :description, :default, :units, :values) do |_param|
34
34
  def initialize(name:, grps_index:, description: nil, default: nil, units: nil, values: [])
35
35
  super(name:, grps_index:, description:, default:, units:, values:)
@@ -41,7 +41,7 @@ module RfBeam
41
41
  base_frequency: Param.new( name: 'Base Frequency', grps_index: 3, description: '0 = Low, 1 = Middle, 2 = High', default: 1, values: ['Low', 'Middle', 'High'] ),
42
42
  max_speed: Param.new( name: 'Maximum Speed', grps_index: 4, description: '0 = 12km/h, 1 = 25km/h, 2 = 50km/h, 3 = 100km/h', default: 1, units: 'km/h', values: ['12.5', '25', '50', '100'] ),
43
43
  max_range: Param.new( name: 'Maximum Range', grps_index: 5, description: '0 = 5m, 1 = 10m, 2 = 30m, 3 = 100m', default: 1, values: %w[5m 10m 30m 100m] ),
44
- threshhold_offset: Param.new( name: 'Threshold Offset', grps_index: 6, description: '10db - 60db', default: 30, units: 'db' ),
44
+ threshold_offset: Param.new( name: 'Threshold Offset', grps_index: 6, description: '10db - 60db', default: 30, units: 'db' ),
45
45
  tracking_filter: Param.new( name: 'Tracking Filter Type', grps_index: 7, description: '0 = Standard, 2 = Fast Detection, 3 = Long Visibility', default: 0, values: ['standard', 'Fast Detection', 'Long Visibility'] ),
46
46
  vibration_suppression: Param.new( name: 'Vibration Suppression', grps_index: 8, description: '0-16, 0 = No Suppression, 16 = High Suppression', default: 2 ),
47
47
  min_detection_distance: Param.new( name: 'Minimum Detection Distance', grps_index: 9, description: '0 - 100% of range setting', default: 0, units: '%' ),
@@ -1,9 +1,19 @@
1
+ require 'csv'
2
+
1
3
  module RfBeam
2
4
  module KLD7
3
5
  def detection?
4
6
  data = ddat
5
7
  (data[2] == 1)
6
8
  end
9
+
10
+ def rfft
11
+ request_frame_data(:rfft)
12
+
13
+ resp = read(1032).unpack('a4LS256S256')
14
+ resp.shift 2
15
+ resp
16
+ end
7
17
 
8
18
  def pdat(formatted: false)
9
19
  request_frame_data(:pdat)
@@ -30,23 +40,18 @@ module RfBeam
30
40
 
31
41
  def ddat
32
42
  request_frame_data(:ddat)
33
-
34
- read(14).unpack('a4LC6')
43
+ flags = %w[Low High]
44
+ array = read(14).unpack('a4LC6')
45
+ { label: array[0],
46
+ detection: DETECTION_FLAGS[:detection][array[2]],
47
+ micro_detection: DETECTION_FLAGS[:micro_detection][array[3]],
48
+ angle: DETECTION_FLAGS[:angle][array[4]],
49
+ direction: DETECTION_FLAGS[:direction][array[5]],
50
+ range: DETECTION_FLAGS[:range][array[6]],
51
+ speed: DETECTION_FLAGS[:speed][array[7]]
52
+ }
35
53
  end
36
54
 
37
- def config
38
- puts formatted_grps(grps)
39
- end
40
-
41
- def formatted_parameter(param)
42
- return unless PARAMETERS.include? param
43
-
44
- param_data = PARAMETERS[param]
45
- grps_data = grps
46
- index = grps_data[param_data[:grps_index]]
47
- param_data[:values][index]
48
- end
49
-
50
55
  # Get the radar parameter structure
51
56
  def grps
52
57
  command = ['GRPS', 0]
@@ -54,7 +59,25 @@ module RfBeam
54
59
  check_response
55
60
  read(50).unpack('a4LA19C8c2C4cCCCCSCC')
56
61
  end
62
+
63
+ def config
64
+ data = grps
65
+ output = "\n"
66
+ RADAR_PARAMETERS.keys.each do |key|
67
+ output << formatted_parameter(key, data[RADAR_PARAMETERS[key].grps_index])
68
+ end
69
+ output
70
+ end
57
71
 
72
+ def formatted_parameter(param, value = nil)
73
+ param = RADAR_PARAMETERS[param]
74
+ if value.nil?
75
+ data = grps
76
+ value = data[param.grps_index]
77
+ end
78
+ param_str_value = param.values.empty? ? value.to_s : param.values[value]
79
+ "#{param.name}: #{param_str_value}#{param.units}\n"
80
+ end
58
81
 
59
82
  private
60
83
 
@@ -67,15 +90,5 @@ module RfBeam
67
90
  write command.pack('a4LL')
68
91
  check_response
69
92
  end
70
-
71
- def formatted_grps(data)
72
- output = "\n"
73
- RADAR_PARAMETERS.each do |param|
74
- param = param[1]
75
- value = param.values.empty? ? data[param.grps_index] : param.values[data[param.grps_index].to_i]
76
- output << "#{param.name}: #{value}#{param.units}\n"
77
- end
78
- output
79
- end
80
93
  end
81
94
  end
@@ -1,6 +1,13 @@
1
1
  module RfBeam
2
2
  module KLD7
3
3
 
4
+ # -----------------
5
+ # Software Version, 'K-LD7_APP-RFB-XXXX'
6
+ # -----------------
7
+ def sw_version
8
+ query_parameter RADAR_PARAMETERS[:sw_version].grps_index
9
+ end
10
+
4
11
  # -----------------
5
12
  # Base Frequency, 0 = low, 1 = middle (default), 2 = high
6
13
  # -----------------
@@ -52,6 +59,7 @@ module RfBeam
52
59
 
53
60
  def max_range=(range = 1)
54
61
  raise ArgumentError, "Invalid arg: '#{range}'" unless (0..3).include?(range)
62
+ raise ArgumentError, "Expected an Integer" unless range.is_a?(Integer)
55
63
 
56
64
  set_parameter :rrai, range, :uint32
57
65
  end
@@ -68,7 +76,7 @@ module RfBeam
68
76
 
69
77
  def threshold_offset=(offset = 30)
70
78
  raise ArgumentError, "Invalid arg: '#{offset}'" unless (10..60).include?(offset)
71
- raise ArgumentError, "Expected an Integer" unless range.is_a?(Integer)
79
+ raise ArgumentError, "Expected an Integer" unless offset.is_a?(Integer)
72
80
 
73
81
  set_parameter :thof, offset, :uint32
74
82
  end
@@ -83,13 +91,14 @@ module RfBeam
83
91
  query_parameter RADAR_PARAMETERS[:tracking_filter].grps_index
84
92
  end
85
93
 
86
- def set_tracking_filter(type = 0)
94
+ def tracking_filter=(type = 0)
87
95
  raise ArgumentError, "Invalid arg: '#{type}'" unless (0..2).include?(type)
88
96
  raise ArgumentError, "Expected an Integer" unless type.is_a?(Integer)
89
97
 
90
98
  set_parameter :trft, type, :uint32
91
99
  end
92
- alias trtf set_tracking_filter
100
+ alias trtf= tracking_filter=
101
+ alias set_tracking_filter tracking_filter=
93
102
 
94
103
  # -----------------
95
104
  # Vibration suppression, 0 - 16, 0 = No Suppression, 16 = High Suppression, default = 2
@@ -271,7 +280,7 @@ module RfBeam
271
280
  # Digital output 1, 0 = Direction, 1 = Angle, 2 = Range, 3 = Speed, 4 = Micro Detection, default = 0
272
281
  # -----------------
273
282
  def digital_output1
274
- query_parameter RADAR_PARAMETERS[:digital_output1]grps_index
283
+ query_parameter RADAR_PARAMETERS[:digital_output1].grps_index
275
284
  end
276
285
 
277
286
  def digital_output1=(value = 0)
@@ -287,7 +296,7 @@ module RfBeam
287
296
  # Digital output 2, 0 = Direction, 1 = Angle, 2 = Range, 3 = Speed, 4 = Micro Detection, default = 1
288
297
  # -----------------
289
298
  def digital_output2
290
- query_parameter RADAR_PARAMETERS[:digital_output2]grps_index
299
+ query_parameter RADAR_PARAMETERS[:digital_output2].grps_index
291
300
  end
292
301
 
293
302
  def digital_output2=(value = 1)
@@ -296,7 +305,7 @@ module RfBeam
296
305
 
297
306
  set_parameter :dig2, value, :uint32
298
307
  end
299
- alias dig2= set_digital_output2=
308
+ alias dig2= digital_output2=
300
309
  alias set_digital_output2 digital_output2=
301
310
 
302
311
  # -----------------
@@ -360,8 +369,8 @@ module RfBeam
360
369
 
361
370
  set_parameter :mids, value, :uint32
362
371
  end
363
- alias mids= micro_detection_sensitivty=
364
- alias set_micro_detection_sensitivity micro_detection_sensitivty=
372
+ alias mids= micro_detection_sensitivity=
373
+ alias set_micro_detection_sensitivity micro_detection_sensitivity=
365
374
 
366
375
  private
367
376
 
@@ -0,0 +1,75 @@
1
+ # rubocop:disable all
2
+ require 'unicode_plot'
3
+ require 'io/console'
4
+ require "stringio"
5
+ require 'tty-screen'
6
+
7
+ module RfBeam
8
+ module KLD7
9
+ class Streamer
10
+ attr_accessor :radar
11
+
12
+ def initialize(radar)
13
+ @radar = radar
14
+ end
15
+
16
+ def monitor_keypress
17
+ loop do
18
+ key = STDIN.getch
19
+ if key.downcase == "q"
20
+ @stop_streaming = true
21
+ break
22
+ end
23
+ end
24
+ end
25
+
26
+ def rfft
27
+ out = StringIO.new
28
+ def out.tty?
29
+ true
30
+ end
31
+
32
+ Thread.new { monitor_keypress }
33
+
34
+ loop do
35
+ out.truncate(0)
36
+
37
+ plot = rfft_plot(@radar)
38
+ plot.render(out)
39
+
40
+ lines = out.string.lines
41
+ lines.each { |line| $stdout.print "\r#{line}" }
42
+ $stdout.print "\e[0J"
43
+ $stdout.flush
44
+ break if @stop_streaming
45
+
46
+ n = lines.count
47
+ $stdout.print "\e[#{n}F"
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ def plot_data(data)
54
+ { x: Array(-128...128), series1: data.shift(256).map { |value| value / 100 }, series2: data.shift(256).map { |value| value.to_i / 100 } }
55
+ end
56
+
57
+ def rfft_plot(radar)
58
+ width = TTY::Screen.width * 0.65
59
+ data = plot_data(radar.rfft)
60
+ plot = UnicodePlot.lineplot(
61
+ data[:x],
62
+ data[:series1],
63
+ name: 'IF1/2 Averaged',
64
+ title: 'Raw FFT',
65
+ height: 25,
66
+ width: width,
67
+ xlabel: "Speed (km/h)",
68
+ ylabel: 'Signal (db)', xlim: [-128, 128],
69
+ ylim: [0, 100])
70
+ UnicodePlot.lineplot!(plot, data[:x], data[:series2], name: "Threshold")
71
+ plot
72
+ end
73
+ end
74
+ end
75
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RfBeam
4
- VERSION = '0.3.5'
4
+ VERSION = '0.4.0'
5
5
  end
data/lib/rfbeam.rb CHANGED
@@ -4,7 +4,10 @@ require 'rfbeam/kld7/radar_parameters'
4
4
  require 'rfbeam/kld7/radar_messages'
5
5
  require 'rfbeam/kld7/serial_connection'
6
6
  require 'rfbeam/kld7/constants'
7
- require_relative 'rfbeam/version'
7
+ require 'rfbeam/kld7/streamer'
8
+ require 'rfbeam/version'
9
+ require 'rfbeam/cli'
10
+
8
11
 
9
12
  module RfBeam
10
13
  class Error < StandardError
data/output.csv ADDED
@@ -0,0 +1,257 @@
1
+ 0,2105,2105
2
+ 1,3070,2915
3
+ 2,2915,805
4
+ 3,2325,2830
5
+ 4,805,3420
6
+ 5,1000,1340
7
+ 6,2830,1555
8
+ 7,3810,2645
9
+ 8,3420,1270
10
+ 9,1645,1400
11
+ 10,1340,1130
12
+ 11,1285,1350
13
+ 12,1555,1085
14
+ 13,1500,910
15
+ 14,2645,1400
16
+ 15,2785,1435
17
+ 16,1270,1150
18
+ 17,500,1545
19
+ 18,1400,1270
20
+ 19,615,1285
21
+ 20,1130,1435
22
+ 21,1000,785
23
+ 22,1350,710
24
+ 23,1565,955
25
+ 24,1085,1165
26
+ 25,1420,1645
27
+ 26,910,1595
28
+ 27,1265,455
29
+ 28,1400,805
30
+ 29,1015,1050
31
+ 30,1435,560
32
+ 31,1060,1530
33
+ 32,1150,3275
34
+ 33,305,3510
35
+ 34,1545,650
36
+ 35,765,1415
37
+ 36,1270,1760
38
+ 37,785,650
39
+ 38,1285,830
40
+ 39,980,560
41
+ 40,1435,850
42
+ 41,1085,0
43
+ 42,785,480
44
+ 43,1340,1150
45
+ 44,710,910
46
+ 45,1210,1050
47
+ 46,955,500
48
+ 47,1000,1230
49
+ 48,1165,1040
50
+ 49,1060,955
51
+ 50,1645,910
52
+ 51,2200,150
53
+ 52,1595,455
54
+ 53,1085,150
55
+ 54,455,830
56
+ 55,1400,455
57
+ 56,805,500
58
+ 57,1490,850
59
+ 58,1050,0
60
+ 59,560,980
61
+ 60,560,1040
62
+ 61,800,500
63
+ 62,1530,800
64
+ 63,0,1410
65
+ 64,3275,305
66
+ 65,3990,1570
67
+ 66,3510,1255
68
+ 67,1105,955
69
+ 68,650,150
70
+ 69,700,655
71
+ 70,1415,1245
72
+ 71,1295,455
73
+ 72,1760,710
74
+ 73,1235,560
75
+ 74,650,650
76
+ 75,500,1000
77
+ 76,830,760
78
+ 77,650,760
79
+ 78,560,350
80
+ 79,1240,305
81
+ 80,850,150
82
+ 81,1400,910
83
+ 82,0,650
84
+ 83,805,500
85
+ 84,480,1180
86
+ 85,150,1435
87
+ 86,1150,850
88
+ 87,1360,800
89
+ 88,910,1305
90
+ 89,1190,910
91
+ 90,1050,1260
92
+ 91,1115,455
93
+ 92,500,1000
94
+ 93,800,615
95
+ 94,1230,1265
96
+ 95,980,3955
97
+ 96,1040,3675
98
+ 97,500,615
99
+ 98,955,300
100
+ 99,1285,1825
101
+ 100,910,760
102
+ 101,980,1315
103
+ 102,150,1435
104
+ 103,1200,1260
105
+ 104,455,850
106
+ 105,480,1260
107
+ 106,150,1970
108
+ 107,500,1015
109
+ 108,830,350
110
+ 109,700,735
111
+ 110,455,1680
112
+ 111,150,350
113
+ 112,500,1135
114
+ 113,605,865
115
+ 114,850,1735
116
+ 115,805,850
117
+ 116,0,1165
118
+ 117,710,1965
119
+ 118,980,810
120
+ 119,305,1005
121
+ 120,1040,1200
122
+ 121,150,2885
123
+ 122,500,1095
124
+ 123,710,1060
125
+ 124,800,2455
126
+ 125,1265,2145
127
+ 126,1410,1665
128
+ 127,1175,3230
129
+ 128,305,4328
130
+ 129,1255,4228
131
+ 130,1570,4069
132
+ 131,980,3995
133
+ 132,1255,3946
134
+ 133,1480,3910
135
+ 134,955,3881
136
+ 135,455,3857
137
+ 136,150,3836
138
+ 137,910,3818
139
+ 138,655,3802
140
+ 139,350,3788
141
+ 140,1245,3774
142
+ 141,1150,3762
143
+ 142,455,3751
144
+ 143,560,3741
145
+ 144,710,3731
146
+ 145,150,3722
147
+ 146,560,3714
148
+ 147,830,3706
149
+ 148,650,3698
150
+ 149,655,3691
151
+ 150,1000,3684
152
+ 151,350,3677
153
+ 152,760,3671
154
+ 153,455,3665
155
+ 154,760,3659
156
+ 155,560,3654
157
+ 156,350,3648
158
+ 157,655,3643
159
+ 158,305,3638
160
+ 159,150,3633
161
+ 160,150,3629
162
+ 161,910,3624
163
+ 162,910,3620
164
+ 163,1190,3616
165
+ 164,650,3612
166
+ 165,455,3608
167
+ 166,500,3604
168
+ 167,500,3600
169
+ 168,1180,3596
170
+ 169,1500,3592
171
+ 170,1435,3589
172
+ 171,1265,3586
173
+ 172,850,3582
174
+ 173,650,3579
175
+ 174,800,3576
176
+ 175,1350,3573
177
+ 176,1305,3569
178
+ 177,1260,3566
179
+ 178,910,3563
180
+ 179,805,3561
181
+ 180,1260,3558
182
+ 181,1175,3555
183
+ 182,455,3552
184
+ 183,965,3550
185
+ 184,1000,3547
186
+ 185,755,3544
187
+ 186,615,3542
188
+ 187,350,3539
189
+ 188,1265,3537
190
+ 189,935,3534
191
+ 190,3955,3532
192
+ 191,4445,3530
193
+ 192,3675,3528
194
+ 193,1365,3530
195
+ 194,615,3532
196
+ 195,605,3534
197
+ 196,300,3537
198
+ 197,1135,3539
199
+ 198,1825,3542
200
+ 199,895,3544
201
+ 200,760,3547
202
+ 201,500,3550
203
+ 202,1315,3552
204
+ 203,1330,3555
205
+ 204,1435,3558
206
+ 205,1385,3561
207
+ 206,1260,3563
208
+ 207,920,3566
209
+ 208,850,3569
210
+ 209,615,3573
211
+ 210,1260,3576
212
+ 211,1545,3579
213
+ 212,1970,3582
214
+ 213,1605,3586
215
+ 214,1015,3589
216
+ 215,955,3592
217
+ 216,350,3596
218
+ 217,1270,3600
219
+ 218,735,3604
220
+ 219,1330,3608
221
+ 220,1680,3612
222
+ 221,630,3616
223
+ 222,350,3620
224
+ 223,1200,3624
225
+ 224,1135,3629
226
+ 225,850,3633
227
+ 226,865,3638
228
+ 227,1540,3643
229
+ 228,1735,3648
230
+ 229,500,3654
231
+ 230,850,3659
232
+ 231,150,3665
233
+ 232,1165,3671
234
+ 233,1345,3677
235
+ 234,1965,3684
236
+ 235,1630,3691
237
+ 236,810,3698
238
+ 237,1175,3706
239
+ 238,1005,3714
240
+ 239,500,3722
241
+ 240,1200,3731
242
+ 241,2830,3741
243
+ 242,2885,3751
244
+ 243,1630,3762
245
+ 244,1095,3774
246
+ 245,980,3788
247
+ 246,1060,3802
248
+ 247,1190,3818
249
+ 248,2455,3836
250
+ 249,3045,3857
251
+ 250,2145,3881
252
+ 251,1500,3910
253
+ 252,1665,3946
254
+ 253,1975,3995
255
+ 254,3230,
256
+ 255,3470,
257
+ 256,4328,
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.3.5
4
+ version: 0.4.0
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-04-01 00:00:00.000000000 Z
11
+ date: 2023-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -55,7 +55,8 @@ dependencies:
55
55
  description: Currently only tested with K-LD7 on MacOS & Raspian (bullseye)
56
56
  email:
57
57
  - robc@hey.com
58
- executables: []
58
+ executables:
59
+ - rfbeam
59
60
  extensions: []
60
61
  extra_rdoc_files: []
61
62
  files:
@@ -68,11 +69,14 @@ files:
68
69
  - LICENSE.txt
69
70
  - README.md
70
71
  - Rakefile
72
+ - exe/rfbeam
71
73
  - lib/rfbeam.rb
74
+ - lib/rfbeam/cli.rb
72
75
  - lib/rfbeam/kld7/constants.rb
73
76
  - lib/rfbeam/kld7/radar_messages.rb
74
77
  - lib/rfbeam/kld7/radar_parameters.rb
75
78
  - lib/rfbeam/kld7/serial_connection.rb
79
+ - lib/rfbeam/kld7/streamer.rb
76
80
  - lib/rfbeam/version.rb
77
81
  - node_modules/.bin/prettier
78
82
  - node_modules/.yarn-integrity
@@ -159,6 +163,7 @@ files:
159
163
  - node_modules/prettier/parser-yaml.js
160
164
  - node_modules/prettier/standalone.js
161
165
  - node_modules/prettier/third-party.js
166
+ - output.csv
162
167
  - package.json
163
168
  - rfbeam.gemspec
164
169
  - sig/rfbeam.rbs