bin/pwn_gqrx_scanner in pwn-0.5.46 vs bin/pwn_gqrx_scanner in pwn-0.5.47
- old
+ new
@@ -8,15 +8,19 @@
OptionParser.new do |options|
options.banner = "USAGE:
#{$PROGRAM_NAME} [opts]
"
- options.on('-sFREQ', '--start-freq=FREQ', '<Optional - Frequency to Set when Scanning Begins (Defaults to last known frequency)>') do |s|
+ options.on('-tFREQ', '--target-freq=FREQ', '<Required - Frequency to Conclude Scanning (e.g. 900000000 == 900 mHz>') do |s|
opts[:start_freq] = s
end
- options.on('-tFREQ', '--target-freq=FREQ', '<Required - Frequency to Conclude Scanning (e.g. 900000000 == 900 mHz>') do |s|
+ options.on('-dMODE', '--demodulator-mode=MODE', '<Optional - Set Demodulator ModeOFF | RAW | AM | FM | WFM | WFM_ST | WFM_ST_OIRT | LSB |USB | CW | CWL | CWU (Defaults to AM)>') do |d|
+ opts[:demodulator_mode] = d
+ end
+
+ options.on('-sFREQ', '--start-freq=FREQ', '<Optional - Frequency to Set when Scanning Begins (Defaults to last known frequency)>') do |s|
opts[:start_freq] = s
end
options.on('-hHOST', '--host=HOST', '<Optional - GQRX Host (Defaults to 127.0.0.1)>') do |h|
opts[:host] = h
@@ -30,46 +34,73 @@
if opts.empty?
puts `#{$PROGRAM_NAME} --help`
exit 1
end
-def jump_to_freq(opts = {})
+def gqrx_cmd(opts = {})
+ # f - Get frequency [Hz]
+ # F - Set frequency [Hz]
+ # m - Get demodulator mode
+ # M - Set demodulator mode (OFF, RAW, AM, FM, WFM, WFM_ST,
+ # WFM_ST_OIRT, LSB, USB, CW, CWL, CWU)
+ # l STRENGTH - Get signal strength [dBFS]
+ # l SQL - Get squelch threshold [dBFS]
+ # L SQL <sql> - Set squelch threshold to <sql> [dBFS]
+ # u RECORD - Get status of audio recorder
+ # U RECORD <status> - Set status of audio recorder to <status>
+ # c - Close connection
+ # AOS - Acquisition of signal (AOS) event, start audio recording
+ # LOS - Loss of signal (LOS) event, stop audio recording
+ # \dump_state - Dump state (only usable for compatibility)
gqrx_sock = opts[:gqrx_sock]
- freq = opts[:freq]
+ cmd = opts[:cmd]
- gqrx_sock.write("F #{freq}\n")
+ gqrx_sock.write("#{cmd}\n")
does_respond = gqrx_sock.wait_readable
- gqrx_sock.readline.chomp
-
- gqrx_sock.write("f\n")
- does_respond = gqrx_sock.wait_readable
- reached_freq = gqrx_sock.readline.chomp
- puts "Reached #{reached_freq}..."
+ gqrx_sock.readline.chomp if does_respond
end
begin
pwn_provider = 'ruby-gem'
- # pwn_provider = ENV.fetch('PWN_PROVIDER') if ENV.keys.select { |s| s == 'PWN_PROVIDER' }.any?
pwn_provider = ENV.fetch('PWN_PROVIDER') if ENV.keys.any? { |s| s == 'PWN_PROVIDER' }
+ demodulator_mode = opts[:demodulator_mode] ||= 'AM'
+ raise "ERROR: Invalid demodulator mode: #{demodulator_mode}" unless %w[OFF RAW AM FM WFM WFM_ST WFM_ST_OIRT LSB USB CW CWL CWU].include?(demodulator_mode)
+
+ puts "Setting demodulator mode to #{demodulator_mode}..."
+ demod_resp = gqrx_cmd(gqrx_sock: gqrx_sock, cmd: "M #{demodulator_mode}")
+ puts demod_resp
+
start_freq = opts[:start_freq].to_i
+ start_freq = gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'f').to_i if start_freq.zero?
+
end_freq = opts[:end_freq].to_i
+ raise 'ERROR: Invalid end frequency' if end_freq.zero?
+
+ puts "Scanning from #{start_freq} to #{end_freq}..."
+
host = opts[:host] ||= '127.0.0.1'
port = opts[:port] ||= 7356
+ puts "Connecting to GQRX at #{host}:#{port}..."
gqrx_sock = PWN::Plugins::Sock.connect(target: host, port: port)
# If start value is greater than end value, go in reverse
if start_freq > end_freq
end_freq.downto(start_freq) do |freq|
- jump_to_freq(gqrx_sock: gqrx_sock, freq: freq)
+ gqrx_cmd(gqrx_sock: gqrx_sock, cmd: "F #{freq}")
+ resp = gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'f')
+ puts "Reached #{resp}..."
end
else
(start_freq..end_freq).each do |freq|
puts "Scanning #{freq}..."
- jump_to_freq(gqrx_sock: gqrx_sock, freq: freq)
+ gqrx_cmd(gqrx_sock: gqrx_sock, cmd: "F #{freq}")
+ resp = gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'f')
+ puts "Reached #{resp}..."
end
end
rescue SystemExit, Interrupt
puts "\nGoodbye."
ensure
+ resp = gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'c')
gqrx_sock = PWN::Plugins::Sock.disconnect(sock_obj: gqrx_sock)
end