|
@@ -10,6 +10,11 @@ from .. import config
|
|
|
import pyqtgraph as pg
|
|
|
from math import ceil
|
|
|
import numpy as np
|
|
|
+import socket
|
|
|
+<<<<<<< HEAD
|
|
|
+import sys
|
|
|
+=======
|
|
|
+>>>>>>> da4c26e... Added ethernet socket to FrequencyExtractWidget
|
|
|
|
|
|
|
|
|
|
|
@@ -91,13 +96,86 @@ class FrequencyExtractWidget(kcgw.KCGWidgets):
|
|
|
self.frequencyTools.addWidget(self.freqText)
|
|
|
|
|
|
|
|
|
+ self.ethernetControls = QtGui.QHBoxLayout()
|
|
|
+
|
|
|
+ self.ethernetControls.addWidget(self.createLabel("IP:"))
|
|
|
+ self.ip = QtGui.QLineEdit(self)
|
|
|
+ self.ethernetControls.addWidget(self.ip)
|
|
|
+ self.ethernetControls.addWidget(self.createLabel("Port:"))
|
|
|
+ self.port = self.createSpinbox(1024, 65535)
|
|
|
+ self.port.setValue(56000)
|
|
|
+ self.ethernetControls.addWidget(self.port)
|
|
|
+ self.ethButton = self.createButton("Connect", connect=self.connectEthernet)
|
|
|
+ self.ethernetControls.addWidget(self.ethButton)
|
|
|
+
|
|
|
+ self.socketConnected = False
|
|
|
+
|
|
|
+
|
|
|
self.layout.addLayout(self.plotBox)
|
|
|
self.layout.addLayout(self.controlsBox)
|
|
|
self.layout.addLayout(self.frequencyTools)
|
|
|
+ self.layout.addLayout(self.ethernetControls)
|
|
|
self.setLayout(self.layout)
|
|
|
self.setWindowTitle("Frequency Extract")
|
|
|
|
|
|
|
|
|
+ def connectEthernet(self):
|
|
|
+ if not self.socketConnected:
|
|
|
+
|
|
|
+ #closing the socket also frees the underlying File-Descriptor,
|
|
|
+ #so we need to create a new socket every time we want to create
|
|
|
+ #a new connection
|
|
|
+ self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
+
|
|
|
+ try:
|
|
|
+ socket.inet_aton(self.ip.text())
|
|
|
+ except OSError:
|
|
|
+ print("Malformed IP: %s"%self.ip.text())
|
|
|
+ return
|
|
|
+
|
|
|
+ try:
|
|
|
+ self.socket.connect((self.ip.text(), self.port.value()))
|
|
|
+ self.socketConnected = True
|
|
|
+ self.ethButton.setText("Disconnect")
|
|
|
+ except:
|
|
|
+ print("Failed to connect to %s"%self.ip.text())
|
|
|
+ self.socket = None
|
|
|
+ else:
|
|
|
+ self.socket.close()
|
|
|
+ self.socketConnected = False
|
|
|
+ self.ethButton.setText("Connect")
|
|
|
+
|
|
|
+ def sendFreqEth(self, freq):
|
|
|
+ if not self.socketConnected:
|
|
|
+ return
|
|
|
+
|
|
|
+ #We work in the kHz domain
|
|
|
+ freq /= 1000
|
|
|
+
|
|
|
+ offset = 10
|
|
|
+ step = 0.08
|
|
|
+ max = (offset + (step * 127))
|
|
|
+
|
|
|
+ if (freq > max) or (freq < offset):
|
|
|
+ print("Frequency outside range: %.2fkhZ - %.2fkHz! Won't send..."%(offset,max))
|
|
|
+ return
|
|
|
+
|
|
|
+ tmp = freq - offset - step
|
|
|
+ count = 0
|
|
|
+ while tmp > 0:
|
|
|
+ tmp -= step
|
|
|
+ count += 1
|
|
|
+
|
|
|
+ #bytes converts an array of integers into their shortest possible
|
|
|
+ #bytewise representation.
|
|
|
+ try:
|
|
|
+ self.socket.sendall(bytes([count]))
|
|
|
+ except:
|
|
|
+ print("Failed to send... closing down connection")
|
|
|
+ self.socket.close()
|
|
|
+ self.socketConnected = False
|
|
|
+
|
|
|
+
|
|
|
def dataSetChanged(self, data=None):
|
|
|
self.data = data
|
|
|
self.doPlot()
|
|
@@ -180,6 +258,7 @@ class FrequencyExtractWidget(kcgw.KCGWidgets):
|
|
|
|
|
|
self.freqText.setText(str(self.fftXValues[indexInData][0]*xAxisScale))
|
|
|
self.isFreqValid = True
|
|
|
+ self.sendFreqEth(self.fftXValues[indexInData][0]*xAxisScale)
|
|
|
|
|
|
|
|
|
|