Skip to content

Commit 57151f3

Browse files
author
rivern yuan
committed
add Protocal.py
1 parent 29615c6 commit 57151f3

File tree

2 files changed

+41
-18
lines changed

2 files changed

+41
-18
lines changed

Protocol.py

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import types
2+
3+
4+
class RWBuilder(object):
5+
def __init__(self, rFunc=None, wFunc=None):
6+
self.read = rFunc
7+
self.write = wFunc
8+
9+
10+
class Protocol(object):
11+
12+
@property
13+
def reader(self):
14+
return self._reader
15+
16+
@property
17+
def writer(self):
18+
return self._writer
19+
20+
@reader.setter
21+
def reader(self, r):
22+
if hasattr(r, "read") and isinstance(r.read, types.FunctionType):
23+
self._reader = r
24+
elif isinstance(r, types.FunctionType):
25+
self._reader = RWBuilder(rFunc=r)
26+
else:
27+
raise TypeError("unknown type for reader")
28+
29+
@writer.setter
30+
def writer(self, w):
31+
if hasattr(w, "write") and isinstance(w.write, types.FunctionType):
32+
self._writer = w
33+
elif isinstance(w, types.FunctionType):
34+
self._writer = RWBuilder(wFunc=w)
35+
else:
36+
raise TypeError("unknown type for writer")
37+

ymodem_sender.py

+4-18
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from Protocol import Protocol
1616

1717
logger = logging.getLogger('Modem')
18-
logging.basicConfig(format='%(asctime)s %(levelname)s: %(message)s',level=logging.DEBUG,datefmt='%Y-%m-%d %H:%M:%S')
18+
logging.basicConfig(format='%(asctime)s %(levelname)s: %(message)s', level=logging.ERROR, datefmt='%Y-%m-%d %H:%M:%S')
1919

2020
SOH = b'\x01'
2121
STX = b'\x02'
@@ -164,7 +164,6 @@ def send(self, trans_file, retry=10, timeout=1, callback=None):
164164
crc_mode = self._wait_c(timeout, retry)
165165
if not crc_mode:
166166
return False
167-
168167
# send file body and wait ACK
169168
sequence = 1
170169
while True:
@@ -179,7 +178,6 @@ def send(self, trans_file, retry=10, timeout=1, callback=None):
179178
else:
180179
break
181180
sequence = (sequence + 1) % 0x100
182-
183181
# send EOT and wait NAK
184182
self.writer.write(EOT)
185183
logger.debug("[Sender]: EOT sent and awaiting NAK")
@@ -205,30 +203,21 @@ def _make_file_header_info(self, packet_size, crc_mode, info=None):
205203
if self.program_features & USE_LENGTH_FIELD:
206204
data += bytes(1)
207205
data += str(info["length"]).encode("utf-8")
208-
'''
209-
Optional field: Modification Date
210-
oct() has different representations of octal numbers in different versions of Python:
211-
Python 2+: 0123456
212-
Python 3+: 0o123456
213-
'''
214206
if self.program_features & USE_DATE_FIELD:
215207
mtime = oct(int(info["mtime"]))
216208
if mtime.startswith("0o"):
217209
data += (" " + mtime[2:]).encode("utf-8")
218210
else:
219211
data += (" " + mtime[1:]).encode("utf-8")
220-
221212
# Optional field: Mode
222213
if self.program_features & USE_MODE_FIELD:
223214
if info["source"] == "Unix":
224215
data += (" " + oct(0x8000)).encode("utf-8")
225216
else:
226217
data += " 0".encode("utf-8")
227-
228218
# Optional field: Serial Number
229219
if self.program_features & USE_MODE_FIELD:
230220
data += " 0".encode("utf-8")
231-
232221
data = data.ljust(packet_size, b"\x00")
233222
checksum = self._make_send_checksum(crc_mode, data)
234223
return header + data + checksum
@@ -273,7 +262,6 @@ def _wait_c(self, cancel=0, timeout=10, retry=10):
273262
logger.error("[Sender]: Error, expected NAK, CRC, EOT or CAN but got %r", char)
274263
else:
275264
logger.debug("[Sender]: No valid data was read")
276-
277265
error_count += 1
278266
if error_count > retry:
279267
logger.error("[Sender]: Error, error_count reached {}, aborting...".format(retry))
@@ -388,10 +376,9 @@ def send_callback(total_size, success_count, filename):
388376

389377
sender_write(b"import example\r\n")
390378
sender_write(b"example.exec('/usr/ymodem.py')\r\n")
391-
time.sleep(2)
379+
time.sleep(1)
392380
serial_io.read(serial_io.inWaiting())
393-
394-
file_list = [] # [["main.py", "/usr/main_1.py"], ["Test-Result.xlsx", "/usr/Test-Result.xlsx"]]
381+
file_list = []
395382
for i in args[1:]:
396383
file_list.append(i)
397384
sender = Modem(sender_read, sender_write)
@@ -401,5 +388,4 @@ def send_callback(total_size, success_count, filename):
401388

402389
if __name__ == '__main__':
403390
fire.Fire(send_file)
404-
# ["main.py", "/usr/main_1.py"]
405-
# send_file("COM63", ["run_std_1.log", "/usr/run_std_1.log"])
391+
# send_file("COM63", ["main.py", "/usr/main_1.py")

0 commit comments

Comments
 (0)