1
from SCons.Script import *
3
def SerialOutput(env, target, source):
5
import serial.tools.list_ports
9
portList = list(serial.tools.list_ports.comports())
10
firstPort = portList[0]
12
portName = firstPort[0]
13
if "PORT_NAME" in env:
14
portName = env["PORT_NAME"]
15
portName = ARGUMENTS.get('PORT_NAME', portName)
18
if "BAUD_RATE" in env:
19
baudRate = env["BAUD_RATE"]
20
baudRate = ARGUMENTS.get('BAUD_RATE', baudRate)
22
print( "Listening serial port %s: " % portName)
23
port = serial.Serial(portName, baudRate, bytesize=8, parity='N', stopbits=1, timeout=0.2)
24
timeStart = time.time()
25
timeout = 10 # seconds
26
if 'PORT_TIMEOUT' in env:
27
timeout = env['PORT_TIMEOUT']
31
if "SERIAL_TRIGGER_MESSAGE" in env:
32
triggerMessage = env["SERIAL_TRIGGER_MESSAGE"]
35
wait = ['-', '\\', '|', '/']
37
logFile = open(target[0].abspath, 'w')
38
logFile.write('Log from %s %s\n' % (portName, datetime.datetime.now() ) )
40
if len(triggerMessage) > 0:
41
port.write(triggerMessage)
43
while timeStart + timeout > time.time():
46
timeStart = time.time()
47
if gotResponce == False:
50
if 3 in list(ord(b) for b in s):
51
print("----------- End of transfer ---------------")
52
logFile.write("----------- End of transfer ---------------")
56
if gotResponce == False:
57
sys.stdout.write('\b')
58
sys.stdout.write(wait[waitState])
59
waitState = waitState + 1
60
if waitState >= len(wait):
62
if gotResponce == False:
64
logFile.write("Timeout")
65
return "No responce on %s" % portName
68
def generate(env, **kw):
70
action = SerialOutput,
72
env.Append(BUILDERS = {'SerialOutput': serialOut})