File: hardware_net.py

package info (click to toggle)
quisk 4.2.32-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,064 kB
  • sloc: python: 22,219; ansic: 19,027; makefile: 38; sh: 2
file content (105 lines) | stat: -rwxr-xr-x 3,286 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105

from __future__ import print_function
from __future__ import absolute_import
from __future__ import division

import threading, time, math, socket, re
from quisk_hardware_model import Hardware as BaseHardware

DEBUG = 1

import _quisk as QS

class Hardware(BaseHardware):
  def __init__(self, app, conf):
    BaseHardware.__init__(self, app, conf)
    self.vfo = None
    self.ptt_button = 0
    self.usbsr_ip_address = conf.usbsr_ip_address
    self.usbsr_port = conf.usbsr_port

  def open(self):			# Called once to open the Hardware
    freq = self.GetFreq()
    if freq:
      print ('Run freq', freq)
      text = "found usbsoftrock daemon"
    else:
      print ('cannot find usbsoftrock daemon')
      text = "cannot find usbsoftrock daemon"
    return text

  def close(self):
    pass
  def ChangeFrequency(self, tune, vfo, source='', band='', event=None):
    if self.vfo != vfo:
       self.SetFreq(vfo) 
       self.vfo = vfo
    return tune, vfo
  
  def ReturnFrequency(self):
    # Return the current tuning and VFO frequency.  If neither have changed,
    # you can return (None, None).  This is called at about 10 Hz by the main.
    # return (tune, vfo)	# return changed frequencies
    return None, None		# frequencies have not changed
 
  def ChangeBand(self, band):
    # band is a string: "60", "40", "WWV", etc.
    pass

  def HeartBeat(self):	# Called at about 10 Hz by the main
    pass

  def GetFreq(self):	# return the running frequency
    MESSAGE = "get freq"
    srsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    srsock.settimeout(1)
    srsock.sendto(MESSAGE.encode('utf-8', errors='ignore'), (self.usbsr_ip_address, self.usbsr_port))
    try:
      data, addr = srsock.recvfrom(1024) # buffer size is 1024 bytes
      data = data.decode('utf-8', errors='replace')
    except:
      srsock.close()
      print ('error')
      return None #maybe return None instead to simplify if statement
    else:
      srsock.close()
      print ('received data', data)
      freq = float(re.findall("\d+.\d+", data)[0])
      freq = int(freq * 1.0e6)
      return freq
  
  def SetFreq(self, freq):
    if freq <= 0 or freq > 30000000:
      return
    freq = freq/float(1.0e6)
    MESSAGE = "set freq " + str(freq)
    srsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    srsock.sendto(MESSAGE.encode('utf-8', errors='ignore'), (self.usbsr_ip_address, self.usbsr_port))
    print (MESSAGE)
    return True

  def OnButtonPTT(self, event=None):
    if event:
      if event.GetEventObject().GetValue():
        self.ptt_button = 1
        message = "set ptt on"
      else:
        self.ptt_button = 0
        message = "set ptt off"
      srsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
      srsock.settimeout(1)
      srsock.sendto(message.encode('utf-8', errors='ignore'), (self.usbsr_ip_address, self.usbsr_port))
      data, addr = srsock.recvfrom(1024) # buffer size is 1024 bytes
      data = data.decode('utf-8', errors='replace')
      srsock.close()
      print (data)
      if data == "ok":
        QS.set_key_down(self.ptt_button)
      else:
        print ('error doing', message)
        text = "error setting ptt on or off!"
        self.config_text = text
  def OnSpot(self, level):
    self.spot_level = level