fldigi 0.1.6 → 0.1.10
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 +15 -0
- data/lib/fldigi.rb +39 -59
- metadata +5 -7
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NmZlZTZmNTkyOWU3N2EwMDQ5ZDVjNTFhY2NjZTJhZTMyZTFkYWY2Mg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MzRhZGUzOWVmODYzNTdjMDg0ZDRhZGU2YTFmOGQ4NTRkYmIxOTdhOQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NzlhOWZjZWE3NzliYzNhMjQ2NWQyMDg5YmJiZWRjOWFhNTkxZDgxMTU5MTcz
|
10
|
+
YzQ4Yzg2MDAxYzQyMTIyYzQ2ZjBjOTZlNTVmYWEyYzYwOTI1NzVjOWY5NDEw
|
11
|
+
MGExYTQxZmY2M2IzMzllOTVkOTFhNGY3ZjRkZGIzZmM0YThjZTg=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NjRiYzhjNTQ2YjUxYTU3M2JiNjkxZjg0ZmVlMjdhYzlmNGJhN2NhYzZlMzdj
|
14
|
+
M2I4MWYwNDgwOWNlZDliODAxN2NiZGJjZWQ0ZTI0MGY2YjQ0MWJmODU4MTQ1
|
15
|
+
NTY3ODdlM2FiMTY4ODhhNDdmYWQzOTJkMGI1MGM3M2UyYTE5MTY=
|
data/lib/fldigi.rb
CHANGED
@@ -23,6 +23,7 @@
|
|
23
23
|
require 'time'
|
24
24
|
require 'xmlrpc/client'
|
25
25
|
require 'thread'
|
26
|
+
require 'digest/crc16_ccitt'
|
26
27
|
|
27
28
|
# Turn 1/0 into false/true (some XMLRPC libraries seem to return 1/0,
|
28
29
|
# others true/false). This cleans up the code a bit.
|
@@ -49,7 +50,7 @@ class Error
|
|
49
50
|
end
|
50
51
|
|
51
52
|
class Fldigi
|
52
|
-
attr_accessor :rigctl, :dial_freq, :carrier, :call, :modem, :afc, :rsid, :sideband, :squelch, :slevel, :spot, :delay, :grid, :phg, :band, :offset, :start_wait, :char_wait, :debug, :errors
|
53
|
+
attr_accessor :rigctl, :dial_freq, :carrier, :call, :modem, :afc, :rsid, :sideband, :squelch, :slevel, :spot, :delay, :grid, :phg, :band, :offset, :start_wait, :char_wait, :debug, :errors, :fexpire
|
53
54
|
|
54
55
|
# Do the initial setup. All arguments are optional, default is
|
55
56
|
# rigctl, localhost, standard port. If you have no rig control,
|
@@ -91,6 +92,8 @@ class Fldigi
|
|
91
92
|
@start_wait=10
|
92
93
|
@char_wait=2
|
93
94
|
@debug=false
|
95
|
+
@fexpire=3
|
96
|
+
@ftime=0
|
94
97
|
|
95
98
|
# Propnet stuff.
|
96
99
|
@band=nil
|
@@ -369,24 +372,33 @@ class Fldigi
|
|
369
372
|
# frequency you most recently specified. IMPORTANT: The returned
|
370
373
|
# value may not be where the radio is currently tuned. This
|
371
374
|
# function returns what you *told* the radio to be, which could be
|
372
|
-
# different than what it's currently set to. It
|
373
|
-
#
|
374
|
-
#
|
375
|
-
#
|
376
|
-
#
|
377
|
-
#
|
378
|
-
#
|
379
|
-
#
|
380
|
-
#
|
381
|
-
#
|
382
|
-
#
|
383
|
-
#
|
384
|
-
#
|
385
|
-
#
|
375
|
+
# different than what it's currently set to. It updates itself
|
376
|
+
# every @fexpire seconds (3 by default), but it's entirely possible
|
377
|
+
# that the user turned the knob in the three seconds since the last
|
378
|
+
# time you set/checked the frequency. If you want to see what the
|
379
|
+
# radio is *actually* tuned to in real time, use the radio_freq()
|
380
|
+
# method (below). This method does, however, go out and read the
|
381
|
+
# actual current carrier, as that tends to float around due to both
|
382
|
+
# the user clicking on the waterfall, and naturally due to AFC. If
|
383
|
+
# you do supply a parameter, it sets the transmit frequency by
|
384
|
+
# subtracting the currently requested carrier (ie, not the actual
|
385
|
+
# current carrier, but what you set @carrier to) from the supplied
|
386
|
+
# frequency, then setting @dial_freq to that value. For example, if
|
387
|
+
# @carrier was set to 1000 and you called self.freq(14071000),
|
388
|
+
# @dial_freq would be set to 14070000. Note that this only sets up
|
389
|
+
# all the values in the object, you still have to "push" them to the
|
390
|
+
# radio with the self.config() method.
|
386
391
|
def freq(f=false)
|
387
392
|
if f
|
388
393
|
@dial_freq=f-@carrier
|
389
394
|
else
|
395
|
+
# If the last time we checked the dial frequency is more than
|
396
|
+
# @fexpire seconds ago, re-read the frequency and update the
|
397
|
+
# timestamp.
|
398
|
+
if Time.now().to_i-@ftime>@fexpire
|
399
|
+
@dial_freq=(self.radio_freq()+self.get_carrier()).to_i
|
400
|
+
@ftime=Time.now().to_i
|
401
|
+
end
|
390
402
|
return (@dial_freq+self.get_carrier()).to_i
|
391
403
|
end
|
392
404
|
end
|
@@ -586,10 +598,18 @@ class Fldigi
|
|
586
598
|
@delay=3600/(@phg[7,1].to_i)
|
587
599
|
end
|
588
600
|
|
589
|
-
# Construct the actual string to be sent.
|
590
|
-
|
591
|
-
|
592
|
-
|
601
|
+
# Construct the actual string to be sent. Do some farting around
|
602
|
+
# with case to be consistent with what I actually see on the
|
603
|
+
# air.
|
604
|
+
tmpmsg="#{@call.upcase}>#{@fsym}:[#{@grid.downcase}]#{@phg.upcase}/"
|
605
|
+
tmpcrc=(Digest::CRC16CCITT.hexdigest(tmpmsg)).upcase
|
606
|
+
# Make sure the CRC is actually four characters long. Doesn't
|
607
|
+
# happen often, but it does happen (and I'm guessing won't be
|
608
|
+
# accepted by PropNet).
|
609
|
+
while tmpcrc.length<4
|
610
|
+
tmpcrc="0"+tmpcrc
|
611
|
+
end
|
612
|
+
@phgtext="FOR INFO: http://www.PropNET.org\n"+tmpmsg+"^"+tmpcrc+"\n"
|
593
613
|
end
|
594
614
|
end
|
595
615
|
|
@@ -612,44 +632,4 @@ class Fldigi
|
|
612
632
|
end
|
613
633
|
end
|
614
634
|
|
615
|
-
# CRC16 function for use with propnet. "Borrowed" from:
|
616
|
-
# http://www.hadermann.be/blog/32/ruby-crc16-implementation/
|
617
|
-
def crc16(buf, crc=0)
|
618
|
-
ccitt_16 = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
|
619
|
-
0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
|
620
|
-
0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
|
621
|
-
0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
|
622
|
-
0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
|
623
|
-
0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
|
624
|
-
0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
|
625
|
-
0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
|
626
|
-
0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
|
627
|
-
0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
|
628
|
-
0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
|
629
|
-
0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
|
630
|
-
0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
|
631
|
-
0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
|
632
|
-
0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
|
633
|
-
0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
|
634
|
-
0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
|
635
|
-
0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
|
636
|
-
0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
|
637
|
-
0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
|
638
|
-
0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
|
639
|
-
0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
|
640
|
-
0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
|
641
|
-
0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
|
642
|
-
0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
|
643
|
-
0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
|
644
|
-
0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
|
645
|
-
0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
|
646
|
-
0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
|
647
|
-
0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
|
648
|
-
0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
|
649
|
-
0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0]
|
650
|
-
|
651
|
-
buf.each_byte{|x| crc = ((crc<<8) ^ ccitt_16[(crc>>8) ^ x])&0xffff} #>>
|
652
|
-
return crc
|
653
|
-
end
|
654
|
-
|
655
635
|
end
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fldigi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.10
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Jeff Francis, N0GQ
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-
|
11
|
+
date: 2014-10-24 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description: A library for talking to FLDigi.
|
15
14
|
email: jeff@gritch.org
|
@@ -21,26 +20,25 @@ files:
|
|
21
20
|
homepage: http://fldigi.gritch.org/
|
22
21
|
licenses:
|
23
22
|
- MIT
|
23
|
+
metadata: {}
|
24
24
|
post_install_message:
|
25
25
|
rdoc_options: []
|
26
26
|
require_paths:
|
27
27
|
- lib
|
28
28
|
required_ruby_version: !ruby/object:Gem::Requirement
|
29
|
-
none: false
|
30
29
|
requirements:
|
31
30
|
- - ! '>='
|
32
31
|
- !ruby/object:Gem::Version
|
33
32
|
version: '0'
|
34
33
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
-
none: false
|
36
34
|
requirements:
|
37
35
|
- - ! '>='
|
38
36
|
- !ruby/object:Gem::Version
|
39
37
|
version: '0'
|
40
38
|
requirements: []
|
41
39
|
rubyforge_project:
|
42
|
-
rubygems_version:
|
40
|
+
rubygems_version: 2.4.1
|
43
41
|
signing_key:
|
44
|
-
specification_version:
|
42
|
+
specification_version: 4
|
45
43
|
summary: A library for talking to FLDigi.
|
46
44
|
test_files: []
|