-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMySerial.py
111 lines (93 loc) · 3.05 KB
/
MySerial.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#-*- coding: utf-8 -*-
# 为串口创建独立线程,并对pySerial进行二次封装
import threading
from time import strftime, gmtime, sleep
from PyQt4.QtCore import QObject, SIGNAL
from serial import Serial
class MySerial(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.qtobj = QObject()
self.serial = None
self.__terminate = False
self.__stop_rcv = False
self.Send_CNT = 0x0000
self.send_save_file = 'send_file%s.txt' % strftime('%y%m%d%H%M%S',gmtime())
def getPortList(self):
PortList_str = []
for Port_id in range(6):
try:
iserial = Serial(Port_id)
PortList_str.append(iserial.portstr)
iserial.close()
except Exception, msg:
#print "erro",id,msg.message.decode("gbk")
continue
return PortList_str
def open(self, port_str):
try:
self.serial = Serial(port_str, 115200)
self.serial.timeout = 0.1
self.serial.flushInput()
self.serial.flushOutput()
self.__stop_rcv = False
except Exception, msg:
return False, msg.message.decode("gbk")
return True, "success"
def resetArduino(self):
self.serial.setDTR(0)
sleep(0.1)
self.serial.setDTR(1)
def terminate(self):
self.__terminate = True
def send(self, data):
#if self.Send_CNT == 0xFFFF:
# self.Send_CNT = 0x0000
#else:
# self.Send_CNT += 1
#data[12] = self.Send_CNT & 0xFF
#data[13] = (self.Send_CNT >> 8) & 0xFF
#data[13] = sum(data[2:-1]) & 0xFF
#self.serial.write(''.join([chr(x) for x in data]))
self.serial.write(data)
# with open(self.send_save_file,'a+') as send_cmd_save:
# send_cmd_save.write(data)
# send_cmd_save.write('\n')
def __recv(self):
data, iquit = None, False
while 1:
if self.__terminate:
break
if self.__stop_rcv :
break
data = self.serial.read(1)
if data == '':
continue
while not self.__stop_rcv:
n = self.serial.inWaiting()
if n > 0:
data = "%s%s" % (data, self.serial.read(n))
sleep(0.002)
else:
iquit = True
break
if iquit:
break
return data
def close(self):
if self.serial.isOpen():
self.serial.close()
def stop_rcv(self):
self.__stop_rcv = True
def run(self):
while 1:
if self.__terminate:
break
if not self.__stop_rcv :
data = self.__recv()
self.qtobj.emit(SIGNAL("NewData"), data)
sleep(0.02)
else:
sleep(1)
print u"停止接收",self.__stop_rcv
self.serial.close()