Browse Source

Added ethernet socket to FrequencyExtractWidget

Timo Dritschler 3 years ago
parent
commit
2abc3aa7aa
1 changed files with 79 additions and 0 deletions
  1. 79 0
      KCG/widgets/FrequencyExtractWidget.py

+ 79 - 0
KCG/widgets/FrequencyExtractWidget.py

@@ -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)