fldigi 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/fldigi.rb +81 -29
  2. metadata +1 -1
@@ -16,17 +16,36 @@
16
16
  # More documentation is forthcoming, but for the moment, refer to the
17
17
  # clients published along with this library to see how to use it.
18
18
 
19
+ # Version History:
20
+ #
21
+ # 0.0.9 - 05/26/2014 - jfrancis - Added a lot of code comments.
22
+ #
23
+ # 0.0.8 - 05/26/2014 - jfrancis - Fixed 10m propnet frequency. Got
24
+ # carried away with 0.0.7 fix, and had one too many zeros in there.
25
+ #
26
+ # 0.0.7 - 05/26/2014 - jfrancis - All propnet frequencies were low by
27
+ # an order of magnitude (ie, left off a zero).
28
+ #
29
+ # 0.0.6 - 05/25/2014 - jfrancis - First public release on
30
+ # rubygems.org.
31
+
19
32
  class Fldigi
20
33
  attr_accessor :rigctl, :freq, :carrier, :call, :modem, :afc, :rsid, :sideband, :squelch, :slevel, :spot, :delay, :grid, :phg, :band
21
34
 
22
35
  # Do the initial setup. All arguments are optional, default is
23
- # rigctl, localhost, standard port.
36
+ # rigctl, localhost, standard port. If you have no rig control,
37
+ # call with "Fldigi.new(false)". If you want to remote control an
38
+ # FLDigi instance that's not on the local machine and/or has a
39
+ # non-standard port number, you'll have to supply all three options,
40
+ # like "Fldigi.new(true,10.1.2.3,7362)".
24
41
  def initialize(rigctl=true, host="127.0.0.1", port=7362)
42
+ # Housekeeping.
25
43
  @host=host
26
44
  @port=port
27
45
  @message=""
28
46
  @rigctl=rigctl
29
47
 
48
+ # Set up the defaults.
30
49
  @freq=14070000.0
31
50
  @freq_old=nil
32
51
  @carrier=1000
@@ -48,6 +67,7 @@ class Fldigi
48
67
  @spot=nil
49
68
  @spot_old=nil
50
69
 
70
+ # Propnet stuff.
51
71
  @band=nil
52
72
  @fsym=nil
53
73
  @delay=nil
@@ -55,22 +75,21 @@ class Fldigi
55
75
  @phg=nil
56
76
  @phgtext=""
57
77
 
78
+ # Connect to the FLDigi instance.
58
79
  @srvr=XMLRPC::Client.new(host,"/RPC2",port)
59
80
  end
60
81
 
61
82
  # Send a command to FLDigi.
62
83
  def sendcmd(cmd, param=-1)
63
84
  if param==-1
64
- #puts "#{cmd}"
65
85
  return @srvr.call(cmd)
66
86
  else
67
- #puts "#{cmd} : #{param}"
68
87
  return @srvr.call(cmd,param)
69
88
  end
70
89
  end
71
90
 
72
91
  # Push all of the changed settings to FLDigi. Anything that has not
73
- # changes is not pushed (to save time).
92
+ # changed is not pushed (to save time).
74
93
  def config
75
94
 
76
95
  # Set the audio carrier.
@@ -118,7 +137,8 @@ class Fldigi
118
137
  end
119
138
  end
120
139
 
121
- # Set the sideband ("USB"/"LSB").
140
+ # Set the sideband ("USB"/"LSB"). ToDo: make sure this is
141
+ # correct.
122
142
  if @sideband!=@sideband_old
123
143
  @sideband_old=@sideband
124
144
  if @sideband!=self.sendcmd("main.get_sideband")
@@ -164,11 +184,16 @@ class Fldigi
164
184
  end
165
185
 
166
186
  # Set the radio frequency (in hz). If the user has specified no
167
- # rig control, it simply returns. Otherwise, it returns true if
168
- # successful, false if it fails. The sleep here gives the radio
169
- # time to change frequencies before checking. 0.5 seconds work
170
- # with all of my radios, but it's possible this will need to be
171
- # tweaked.
187
+ # rig control, it simply returns true and ignores the provided
188
+ # value (this is so people who don't have rig control can still
189
+ # use the other features of the library, they just can't set the
190
+ # radio frequency). Otherwise, it returns true if successful in
191
+ # setting the frequency, false if it fails. The sleep here gives
192
+ # the radio time to change frequencies before checking. 0.5
193
+ # seconds work with all of my radios, but it's possible this will
194
+ # need to be tweaked. Send me an e-mail if this value is not
195
+ # adequate for your radio, and I'll figure out a plan. So far, it
196
+ # works on my IC-706MkII, my IC-756Pro, and my FT-817.
172
197
  @freq=@freq.to_f
173
198
  if @freq!=@freq_old and @rigctl
174
199
  @freq_old=@freq
@@ -198,7 +223,10 @@ class Fldigi
198
223
  end
199
224
  end
200
225
 
201
- # Set FLDigi to transmit (immediate).
226
+ # Set FLDigi to transmit (immediate). When switched to transmit,
227
+ # FLDigi will send whatever text exists in FLDigi's transmit buffer
228
+ # (which is *not* the same thing as the object's internal message
229
+ # queue called @message).
202
230
  def transmit
203
231
  if self.sendcmd("main.get_trx_status")=="tx"
204
232
  return true
@@ -213,7 +241,16 @@ class Fldigi
213
241
  end
214
242
 
215
243
  # Send the currently buffered data using the carrier, mode,
216
- # frequency, etc. currently configured.
244
+ # frequency, etc. currently configured. The current code will wait
245
+ # up to ten seconds for the first character to be transmitted (this
246
+ # gives time for really slow modems to get rolling). Once the first
247
+ # sent character is detected, it makes sure it sees as least one
248
+ # character every two seconds (which again, is just enough for the
249
+ # very slowest modem). You can set the two second value lower if
250
+ # you're only going to use fast modems, but if you forget and use a
251
+ # slow modem with this set lower, you'll chop off your own
252
+ # transmissions. This value also affects how long of an idle is
253
+ # left after the last character. Everything's a trade-off...
217
254
  def send_buffer
218
255
  if @message.length > 0
219
256
  self.sendcmd("text.add_tx",@message)
@@ -241,39 +278,44 @@ class Fldigi
241
278
  end
242
279
 
243
280
  # Add a string of text to the outgoing buffer. If you want carriage
244
- # returns, you must supply them.
281
+ # returns, you must supply them as part of the text (ie, "foo\n").
245
282
  def add_tx_string(text)
246
283
  @message=@message+text
247
284
  return @message
248
285
  end
249
286
 
250
- # Get the received data accumulated since the last time you asked.
287
+ # Return the received data accumulated since the last time you asked.
251
288
  def get_rx_data
252
289
  return self.sendcmd("rx.get_data")
253
290
  end
254
291
 
255
- # Get the tranmitted data accumulated since the last time you asked.
292
+ # Return the tranmitted data accumulated since the last time you asked.
256
293
  def get_tx_data
257
294
  return self.sendcmd("tx.get_data")
258
295
  end
259
296
 
260
- # Clear the incoming data buffer (you probably don't want to do
261
- # this).
297
+ # Clear FLDigi's incoming data buffer (you probably don't want to do
298
+ # this, except *possibly* the first time you connect).
262
299
  def clear_rx_data
263
300
  return self.sendcmd("text.clear_rx")
264
301
  end
265
302
 
266
- # Clear any buffered untransmitted data.
303
+ # Clear any buffered untransmitted data (as with clear_rx_data(),
304
+ # this is something you'll use sparingly, if at all).
267
305
  def clear_tx_data
268
306
  return self.sendcmd("text.clear_tx")
269
307
  end
270
308
 
271
- # Clear out the internal buffered message.
309
+ # Clear out the internal buffered message. This clears the internal
310
+ # object's message queue, but does not change what may or may not be
311
+ # queued in FLDigi for transmission (clear_tx_data() does that).
272
312
  def clear_message
273
313
  @message=""
274
314
  end
275
315
 
276
- # Return a list of valid modems.
316
+ # Return a list of valid modems supported by FLDigi. Note that not
317
+ # all modems make sense and/or will work. Like Feld Hell, for
318
+ # example. Or the Wefax modes.
277
319
  def list_modems
278
320
  return self.sendcmd("modem.get_names")
279
321
  end
@@ -284,16 +326,23 @@ class Fldigi
284
326
  return self.sendcmd("fldigi.list")
285
327
  end
286
328
 
287
- # Setup for propnet. Must call config() one time after this before
288
- # propnet() can be called as many times as desired. If @band,
289
- # @grid, @phg, or @call changes between calls to propnet(), this
290
- # method must be called again.
329
+ # Setup for propnet. You must call config() one time after this
330
+ # before propnet() can be called as many times as desired. If
331
+ # @band, @grid, @phg, or @call changes between calls to propnet(),
332
+ # this method (and config()) must be called again.
291
333
  def propnet_config
292
334
  if @call and @grid and @band and @phg
293
335
 
336
+ # We don't want the carrier wandering around while doing
337
+ # propnet.
294
338
  @afc=false
339
+
340
+ # The carrier for North America is 1500hz. Might (probably is)
341
+ # different for other places. ToDo: fix this so it's
342
+ # user-settable.
295
343
  @carrier=1500
296
344
 
345
+ # Transmit frequencies are pre-defined by the propnet folks.
297
346
  case @band.to_i
298
347
  when 80
299
348
  @freq=3598200
@@ -325,27 +374,30 @@ class Fldigi
325
374
  else
326
375
  return false
327
376
  end
328
-
377
+
378
+ # Figure out how long to sleep based on the supplied PHG value.
329
379
  if @phg[7,1].to_i==0
330
380
  @delay=nil
331
381
  else
332
382
  @delay=3600/(@phg[7,1].to_i)
333
383
  end
334
384
 
385
+ # Construct the actual string to be sent.
335
386
  tmp="#{@call.downcase}>#{@fsym}:[#{@grid}]#{@phg}/^"
336
387
  tmp=tmp+((self.crc16(tmp)).to_s(16)).upcase
337
388
  @phgtext="FOR INFO: http://www.PropNET.org\n"+tmp
338
389
  end
339
390
  end
340
391
 
341
- # Construct and queue a PropNET packet. Requires @grid, @call,
342
- # @band, and @phg to be set. Call send_buffer() after.
392
+ # Queue the pre-built PropNET packet (must call propnet_config() and
393
+ # config() first). Requires @grid, @call, @band, and @phg to be
394
+ # set. Call send_buffer() after to start the actual transmission.
343
395
  def propnet
344
396
  self.add_tx_string(@phgtext)
345
397
  end
346
398
 
347
- # Call CQ. Requires that @call be previously set, else returns
348
- # false. Call send_buffer() after.
399
+ # Queues up a CQ call. Requires that @call be previously set, else
400
+ # returns false. Call send_buffer() after to begin transmission.
349
401
  def cq
350
402
  if @call
351
403
  self.add_tx_string("CQ CQ CQ de #{@call} #{@call} #{@call} pse k")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fldigi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: