Initialize invert_probe
[clinton/Smoothieware.git] / fast-stream.py
... / ...
CommitLineData
1#!/usr/bin/env python
2"""\
3Stream g-code to Smoothie USB serial connection
4
5Based on GRBL stream.py, but completely different
6"""
7
8from __future__ import print_function
9import sys
10import argparse
11import serial
12import threading
13import time
14import signal
15import sys
16
17errorflg= False
18intrflg= False
19
20def signal_term_handler(signal, frame):
21 global intrflg
22 print('got SIGTERM...')
23 intrflg= True
24
25signal.signal(signal.SIGTERM, signal_term_handler)
26
27# Define command line argument interface
28parser = argparse.ArgumentParser(description='Stream g-code file to Smoothie over telnet.')
29parser.add_argument('gcode_file', type=argparse.FileType('r'),
30 help='g-code filename to be streamed')
31parser.add_argument('device',
32 help='Smoothie Serial Device')
33parser.add_argument('-q','--quiet',action='store_true', default=False,
34 help='suppress output text')
35args = parser.parse_args()
36
37f = args.gcode_file
38verbose = not args.quiet
39
40# Stream g-code to Smoothie
41
42dev= args.device
43
44# Open port
45s = serial.Serial(dev, 115200)
46s.flushInput() # Flush startup text in serial input
47
48print("Streaming " + args.gcode_file.name + " to " + args.device)
49
50okcnt= 0
51
52def read_thread():
53 """thread worker function"""
54 global okcnt, errorflg
55 flag= 1
56 while flag :
57 rep= s.readline()
58 n= rep.count("ok")
59 if n == 0 :
60 print("Incoming: " + rep)
61 if "error" in rep or "!!" in rep or "ALARM" in rep or "ERROR" in rep:
62 errorflg= True
63 break
64 else :
65 okcnt += n
66
67 print("Read thread exited")
68 return
69
70# start read thread
71t = threading.Thread(target=read_thread)
72t.daemon = True
73t.start()
74
75linecnt= 0
76try:
77 for line in f:
78 if errorflg :
79 break
80 # strip comments
81 if line.startswith(';') :
82 continue
83 l= line.strip()
84 s.write(l + '\n')
85 linecnt+=1
86 if verbose: print("SND " + str(linecnt) + ": " + line.strip() + " - " + str(okcnt))
87
88except KeyboardInterrupt:
89 print("Interrupted...")
90 intrflg= True
91
92if intrflg :
93 # We need to consume oks otherwise smoothie will deadlock on a full tx buffer
94 print("Sending Abort - this may take a while...")
95 s.write('\x18') # send halt
96
97if errorflg :
98 print("Target halted due to errors")
99
100else :
101 print("Waiting for complete...")
102 while okcnt < linecnt :
103 if verbose: print(str(linecnt) + " - " + str(okcnt) )
104 if errorflg :
105 s.read(s.inWaiting()) # rad all remaining characters
106 break
107 time.sleep(1)
108
109 # Wait here until finished to close serial port and file.
110 raw_input(" Press <Enter> to exit")
111
112
113# Close file and serial port
114f.close()
115s.close()