Commit 27cbef59 authored by Elias's avatar Elias

implented ethernet in printcore for the experimental branch

parent 42425257
......@@ -17,10 +17,12 @@
from serial import Serial, SerialException
from threading import Thread
from select import error as SelectError
from select import error as SelectError, select
import time, getopt, sys
import platform, os
from GCodeAnalyzer import GCodeAnalyzer
import socket # Network
import re # Regex
def control_ttyhup(port, disable_hup):
"""Controls the HUPCL"""
......@@ -36,6 +38,9 @@ def enable_hup(port):
def disable_hup(port):
control_ttyhup(port, True)
def is_socket(printer):
return (type(printer) == socket._socketobject)
class printcore():
def __init__(self, port = None, baud = None):
"""Initializes a printcore instance. Pass the port and baud rate to connect immediately
......@@ -98,8 +103,15 @@ class printcore():
if baud is not None:
self.baud = baud
if self.port is not None and self.baud is not None:
disable_hup(self.port)
self.printer = Serial(port = self.port, baudrate = self.baud, timeout = 0.25)
# Connect to socket if "port" is an IP, device if not
p = re.compile("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$")
if p.match(port):
self.printer = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.timeout = 0.25
self.printer.connect((port, baud))
else:
disable_hup(self.port)
self.printer = Serial(port = self.port, baudrate = self.baud, timeout = 0.25)
self.stop_read_thread = False
self.read_thread = Thread(target = self._listen)
self.read_thread.start()
......@@ -107,14 +119,27 @@ class printcore():
def reset(self):
"""Reset the printer
"""
if self.printer:
if self.printer and not is_socket(self.printer):
self.printer.setDTR(1)
time.sleep(0.2)
self.printer.setDTR(0)
def _readline(self):
try:
line = self.printer.readline()
# Read line if socket
if is_socket(self.printer):
line = ''
ready = select([self.printer], [], [], self.timeout)
if ready[0]:
while not "\n" in line:
chunk = self.printer.recv(1)
if chunk == '':
raise RuntimeError("socket connection broken")
line = line + chunk
# Read if tty
else:
line = self.printer.readline()
if len(line) > 1:
self.log.append(line)
if self.recvcb:
......@@ -136,6 +161,8 @@ class printcore():
return None
def _listen_can_continue(self):
if is_socket(self.printer):
return not self.stop_read_thread and self.printer
return not self.stop_read_thread and self.printer and self.printer.isOpen()
def _listen_until_online(self):
......@@ -418,10 +445,21 @@ class printcore():
if self.sendcb:
try: self.sendcb(command)
except: pass
try:
self.printer.write(str(command+"\n"))
except SerialException, e:
print "Can't write to printer (disconnected?)."
# If the printer is connected via Ethernet, use send
if is_socket(self.printer):
msg = str(command+"\n")
totalsent = 0
while totalsent < len(msg):
sent = self.printer.send(msg[totalsent:])
if sent == 0:
raise RuntimeError("socket connection broken")
totalsent = totalsent + sent
else:
try:
self.printer.write(str(command+"\n"))
except SerialException, e:
print "Can't write to printer (disconnected?)."
if __name__ == '__main__':
baud = 115200
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment