Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
Add BasePlot, SerialPlot, SocketPlot and GenericStreamPlot classes
  • Loading branch information
Suyash458 committed Jan 24, 2016
1 parent 416bc18 commit dcdcb4e
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 81 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,5 @@ docs/_build/

# PyBuilder
target/
notes.txt

133 changes: 52 additions & 81 deletions SoftOscilloscope.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,77 +2,28 @@
import matplotlib.pyplot as plt
from matplotlib import animation
import numpy as np

class Oscilloscope(object):
def __init__(self, stream=None):
self.stream = None
self.stream_type = None

class BasePlot(object):
def __init__(self, stream):
self.stream = stream
self.fig = plt.figure()
self.fig.canvas.mpl_connect('close_event', self.handle_close)
self.plot_list = []
self.stream_is_open = False
self.stream_args = None

def init_serial(self, com_port, baud_rate):
try:
self.stream = serial.Serial()
self.stream.port = com_port
self.stream.baud_rate = baud_rate
self.stream_type = 'serial'
self.stream_args = (com_port, baud_rate)
except SerialException, message:
print message
return

def init_socket(self, address, port):
try:
self.stream = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.stream.connect((address, port))
self.settimeout(5)
self.stream = self.stream.makefile()
self.stream_is_open = True
self.stream_type = 'socket'
self.stream_args = (address, port)
except SocketException, message:
print message
return

def init_stream(self, stream):
if hasattr(stream, 'readline'):
if hasattr(stream, 'open') or hasattr(stream, 'connect'):
self.stream = stream
self.stream_type = 'generic'
else:
return
else:
return


def open_stream(self):
if self.stream is None:
print "Stream not initialized."
return
if not self.stream_is_open
try:
if self.stream_type == 'serial':
self.stream.open()
elif self.stream_type == 'socket':
self.init_socket()
elif self.stream_type == 'generic':
if hasattr(self.stream, 'open'):
self.stream.open()
elif hasattr(self.stream, 'connect'):
self.stream.connect()
else
return
else:
return
self.stream_is_open = True
except error, message:
print message
return
else:
return

self.stream.open()

def close_stream(self):
if hasattr(self.stream, 'flushInput'):
self.stream.flushInput()
if hasattr(self.stream, 'flushOutput'):
self.stream.flushOutput()
self.stream.close()
print "stream closed"

def handle_close_event(self, event):
self.close_stream()

def plot_init(self):
trial_data = self.stream.readline().rstrip().split()
for i in xrange(1, len(trial_data) + 1):
Expand Down Expand Up @@ -101,20 +52,11 @@ def plot_animate(self, fn, read_size=1):
plot[1]._invalidy = True
except ValueError:
pass
except error, message:
print message
return
return [x[1] for x in self.plot_list]

def handle_close(self, evt):
self.close_stream()

def close_stream(self):
if hasattr(self.stream, 'flushInput'):
self.stream.flushInput()
if hasattr(self.stream, 'flushOutput'):
self.stream.flushOutput()
if hasattr(self.stream, 'close'):
self.stream.close()
print "stream closed"


def start(self, read_size=1):
self.open_stream()
animated_plot = animation.FuncAnimation(
Expand All @@ -127,4 +69,33 @@ def start(self, read_size=1):
try:
self.fig.show()
except:
self.close_stream()
self.close_stream()

class SerialPlot(BasePlot):
def __init__(self, com_port, baud_rate):
self.serial_port = serial.Serial()
self.serial_port.baud_rate = baud_rate
self.serial_port.com_port = com_port
super(SerialPlot, self).__init__(self.serial_port)


class SocketPlot(BasePlot):
def __init__(self, address, port):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.settimeout(5)
self.socket.connect((address, port))
super(SocketPlot, self).__init__(self.socket.makefile())

def open_stream(self):
self.socket.connect((address, port))
self.socket.settimeout(5)
self.stream = self.socket.makefile()

class GenericStreamPlot(BasePlot):
def __init__(self, stream):
if hasattr(stream, 'open') \
and hasattr(stream, 'close') \
and hasattr(stream, 'readline'):
super(GenericStreamPlot, self).__init__(stream)
else:
raise BadAttributeError("One of the open/close/readline attributes is missing")

0 comments on commit dcdcb4e

Please sign in to comment.