From 1ac71c624e6f4c15a4443449708ed66047635873 Mon Sep 17 00:00:00 2001 From: gastonfeng Date: Sat, 16 May 2020 16:50:14 +0800 Subject: [PATCH 1/4] fix --- modem/__init__.py | 11 +++++---- modem/base.py | 4 ++-- modem/protocol/xmodem.py | 11 +++++---- modem/protocol/xmodem1k.py | 8 +++---- modem/protocol/xmodemcrc.py | 8 +++---- modem/protocol/ymodem.py | 48 +++++++++++++++++++------------------ modem/protocol/zmodem.py | 7 +++--- modem/tools.py | 6 ++--- 8 files changed, 54 insertions(+), 49 deletions(-) diff --git a/modem/__init__.py b/modem/__init__.py index f6b6322..6bd4b96 100644 --- a/modem/__init__.py +++ b/modem/__init__.py @@ -7,11 +7,12 @@ __version__ = '0.2.4' import gettext -from modem.protocol.xmodem import XMODEM -from modem.protocol.xmodem1k import XMODEM1K -from modem.protocol.xmodemcrc import XMODEMCRC -from modem.protocol.ymodem import YMODEM -from modem.protocol.zmodem import ZMODEM + +from .protocol.xmodem import XMODEM +from .protocol.xmodem1k import XMODEM1K +from .protocol.xmodemcrc import XMODEMCRC +from .protocol.ymodem import YMODEM +from .protocol.zmodem import ZMODEM gettext.install('modem') diff --git a/modem/base.py b/modem/base.py index 40b2abe..e08a8d9 100644 --- a/modem/base.py +++ b/modem/base.py @@ -1,4 +1,4 @@ -from modem.tools import crc16, crc32 +from .tools import crc16, crc32 class Modem(object): @@ -21,7 +21,7 @@ def calc_checksum(self, data, checksum=0): '0x3c' ''' - return (sum(map(ord, data)) + checksum) % 256 + return (sum(data) + checksum) % 256 def calc_crc16(self, data, crc=0): ''' diff --git a/modem/protocol/xmodem.py b/modem/protocol/xmodem.py index 4c48a44..fdffce0 100644 --- a/modem/protocol/xmodem.py +++ b/modem/protocol/xmodem.py @@ -1,8 +1,9 @@ import time -from modem import error -from modem.base import Modem -from modem import const -from modem.tools import log + +from .. import const +from .. import error +from ..base import Modem +from ..tools import log class XMODEM(Modem): @@ -321,7 +322,7 @@ def _wait_recv(self, error_count, timeout): ''' # Initialize protocol cancel = 0 - retry = 2 + retry = 10 # Loop until the first character is a control character (NAK, CRC) or # we reach the retry limit while True: diff --git a/modem/protocol/xmodem1k.py b/modem/protocol/xmodem1k.py index 1e2d207..ac40e94 100644 --- a/modem/protocol/xmodem1k.py +++ b/modem/protocol/xmodem1k.py @@ -1,9 +1,9 @@ import time -from modem import error -from modem import const -from modem.tools import log -from modem.protocol.xmodem import XMODEM +from .xmodem import XMODEM +from .. import const +from .. import error +from ..tools import log class XMODEM1K(XMODEM): diff --git a/modem/protocol/xmodemcrc.py b/modem/protocol/xmodemcrc.py index 3437005..da598d7 100644 --- a/modem/protocol/xmodemcrc.py +++ b/modem/protocol/xmodemcrc.py @@ -1,9 +1,9 @@ import time -from modem import error -from modem import const -from modem.tools import log -from modem.protocol.xmodem import XMODEM +from .xmodem import XMODEM +from .. import const +from .. import error +from ..tools import log class XMODEMCRC(XMODEM): diff --git a/modem/protocol/ymodem.py b/modem/protocol/ymodem.py index 305f0dc..52b3800 100644 --- a/modem/protocol/ymodem.py +++ b/modem/protocol/ymodem.py @@ -1,10 +1,11 @@ import glob import os import time -from modem import const -from modem.tools import log -from modem.protocol.xmodem import XMODEM -from modem import error + +from .xmodem import XMODEM +from .. import const +from .. import error +from ..tools import log class YMODEM(XMODEM): @@ -15,7 +16,7 @@ class YMODEM(XMODEM): protocol = const.PROTOCOL_YMODEM - def send(self, pattern, retry=3, timeout=60): + def send(self, pattern, retry=3, timeout=10): ''' Send one or more files via the YMODEM protocol. @@ -94,26 +95,27 @@ def send(self, pattern, retry=3, timeout=60): filedesc.close() # WAIT A BEFORE NEXT FILE - error_count = 0 - if not self._wait_recv(error_count, timeout): - log.error(error.ABORT_INIT_NEXT) - # Already aborted - return False + if len(filenames) > 1: + error_count = 0 + if not self._wait_recv(error_count, timeout): + log.error(error.ABORT_INIT_NEXT) + # Already aborted + return False # End of batch transmission, send NULL file name - sequence = 0 - error_count = 0 - packet_size = 128 - data = b'\x00' * packet_size - crc = self.calc_crc16(data) if crc_mode else self.calc_checksum(data) - - # Emit packet - if not self._send_packet( - sequence, data, packet_size, crc_mode, crc, - error_count, retry, timeout): - log.error(error.ABORT_SEND_PACKET) - # Already aborted - return False + # sequence = 0 + # error_count = 0 + # packet_size = 128 + # data = b'\x00' * packet_size + # crc = self.calc_crc16(data) if crc_mode else self.calc_checksum(data) + # + # # Emit packet + # if not self._send_packet( + # sequence, data, packet_size, crc_mode, crc, + # error_count, retry, timeout): + # log.error(error.ABORT_SEND_PACKET) + # # Already aborted + # return False # All went fine return True diff --git a/modem/protocol/zmodem.py b/modem/protocol/zmodem.py index 1d378f1..7962c76 100644 --- a/modem/protocol/zmodem.py +++ b/modem/protocol/zmodem.py @@ -1,9 +1,10 @@ import datetime import os import time -from modem.base import Modem -from modem import const -from modem.tools import log + +from .. import const +from ..base import Modem +from ..tools import log class ZMODEM(Modem): diff --git a/modem/tools.py b/modem/tools.py index b655314..e705e36 100644 --- a/modem/tools.py +++ b/modem/tools.py @@ -1,9 +1,9 @@ -import struct import logging -from zlib import crc32 as _crc32 -from modem.const import CRC16_MAP +import struct from collections.abc import Iterable +from zlib import crc32 as _crc32 +from .const import CRC16_MAP # Configure logging logging.basicConfig( From 9815e8cfdc0250f0bb7e4cd853200587565ac824 Mon Sep 17 00:00:00 2001 From: gastonfeng Date: Sat, 16 May 2020 22:04:31 +0800 Subject: [PATCH 2/4] =?UTF-8?q?chg:=E5=9C=A8=E7=BA=BF=E4=B8=8B=E8=BD=BDPLC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __init__.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 __init__.py diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..3d0f23e --- /dev/null +++ b/__init__.py @@ -0,0 +1 @@ +from modem import * \ No newline at end of file From dde57e436b36b970aea7ffa5f4495bcd8a2f3d55 Mon Sep 17 00:00:00 2001 From: gastonfeng Date: Tue, 3 Aug 2021 15:45:01 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix:=E7=BC=96=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modem/protocol/xmodem.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modem/protocol/xmodem.py b/modem/protocol/xmodem.py index fdffce0..7f9c69e 100644 --- a/modem/protocol/xmodem.py +++ b/modem/protocol/xmodem.py @@ -277,14 +277,16 @@ def _send_packet(self, sequence, data, packet_size, crc_mode, crc, if byte in [b'', const.NAK]: error_count += 1 + log.error(error_count) if error_count >= retry: # Excessive amounts of retransmissions requested - self.error(error.ABORT_ERROR_LIMIT) + log.error(error.ABORT_ERROR_LIMIT) self.abort(timeout=timeout) return False continue # Protocol error + log.error(byte) log.error(error.ERROR_PROTOCOL) error_count += 1 if error_count >= retry: @@ -322,7 +324,7 @@ def _wait_recv(self, error_count, timeout): ''' # Initialize protocol cancel = 0 - retry = 10 + retry = 2 # Loop until the first character is a control character (NAK, CRC) or # we reach the retry limit while True: From add1bcf43fd7433a907a31350c0ae046fcdfd3a4 Mon Sep 17 00:00:00 2001 From: gastonfeng Date: Thu, 10 Mar 2022 13:12:48 +0800 Subject: [PATCH 4/4] fix:calc_crc16 sometime return zero --- modem/protocol/xmodem.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/modem/protocol/xmodem.py b/modem/protocol/xmodem.py index 7f9c69e..5a9ad33 100644 --- a/modem/protocol/xmodem.py +++ b/modem/protocol/xmodem.py @@ -217,9 +217,8 @@ def _send_stream(self, stream, crc_mode, data = data.ljust(packet_size, b'\x00') # Calculate CRC or checksum - crc = crc_mode and self.calc_crc16(data) or \ - self.calc_checksum(data) - + #calc_crc16 sometime return zero + crc = crc_mode and self.calc_crc16(data) #or self.calc_checksum(data) # SENDS PACKET WITH CRC if not self._send_packet( sequence, data, packet_size, crc_mode,