Skip to main content

Ymodem Python implementation

Project description

ymodem-logo

The YMODEM project is based on XMODEM implementation written by tehmaze. It is also compatible with XMODEM mode.

license

README: ENGLISH | 简体中文

Demo

Test the sending and receiving functions

SenderAndReceiver

Interact with SecureCRT

Interact with SecureCRT as sender SecureCRT1

Interact with SecureCRT as Finder SecureCRT2

Installation

pip install ymodem

Usage

CLI TOOL

# To get help
ymodem -h
# or
python -m ymodem -h

Sending a batch of files

ymodem send ./file.bin ./file2.bin -p COM4 -b 115200
# or
python -m ymodem send ./file.bin ./file2.bin -p COM4 -b 115200

Receive a file

ymodem recv ./ -p COM4 -b 115200
# or
python -m ymodem recv ./ -p COM4 -b 115200

Source Code

from ymodem.Socket import ModemSocket

# define read
def read(size, timeout = 3):
    # implementation

# define write
def write(data, timeout = 3):
    # implementation

# create socket
cli = ModemSocket(read, write)

# send multi files
cli.send([file_path1, file_path2, file_path3 ...])

# receive multi files
cli.recv(folder_path)

For more detailed usage, please refer to main.py.

API

Create MODEM Object

def __init__(self, 
             read: Callable[[int, Optional[float]], Any], 
             write: Callable[[Union[bytes, bytearray], Optional[float]], Any], 
             protocol_type: int = ProtocolType.YMODEM, 
             protocol_type_options: List[str] = [],
             packet_size: int = 1024,
             style_id: int = _psm.get_available_styles()[0]):
  • protocol_type: Protocol type, see Protocol.py
  • protocol_type_options: such as g representing the YMODEM-G in the YMODEM protocol.
  • packet_size: The size of a single packet, 128/1024 bytes, may be adjusted depending on the protocol style
  • style_id: Protocol style, different styles have different support for functional features

Send files

def send(self, 
         paths: List[str], 
         callback: Optional[Callable[[int, str, int, int], None]] = None
        ) -> bool:
  • callback: callback function. see below.

    Parameter Description
    task index index of current task
    task (file) name name of the file
    total packets number of packets plan to send
    success packets number of packets successfully sent

Receive files

def recv(self, 
         path: str, 
         callback: Optional[Callable[[int, str, int, int], None]] = None
        ) -> bool:
  • path: folder path for storing the target file
  • callback: callback function. Same as the callback of send().

ATTENTION

Depending on different communication environments, developers may need to manually adjust timeout parameters in _read_and_wait or _write_and_wait.

Debug

If you want to output debugging information, set the log level to DEBUG.

logging.basicConfig(level=logging.DEBUG, format='%(message)s')

Changelog

v1.5 (2024/02/03)

  • Added cli tool to iteract with YMODEM via Serial bus

v1.5 (2023/05/20 11:00 +00:00)

  • Rewritten send() and recv()
  • Support YMODEM-G. The success rate of YMODEM-G based on pyserial depends on the user's OS, and after testing, the success rate is very low without any delay.

License

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ymodem-1.5.3.tar.gz (1.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ymodem-1.5.3-py3-none-any.whl (22.1 kB view details)

Uploaded Python 3

File details

Details for the file ymodem-1.5.3.tar.gz.

File metadata

  • Download URL: ymodem-1.5.3.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for ymodem-1.5.3.tar.gz
Algorithm Hash digest
SHA256 2e53628d9f538abcac93bc9ffb72919df7467b026646f755d8cf05c5d552289d
MD5 756b09c49b05541e5514cad088f4850f
BLAKE2b-256 487c44f340e03a738686262799aa6b69f0744a02fcb87f02c4b98bcc42060a12

See more details on using hashes here.

File details

Details for the file ymodem-1.5.3-py3-none-any.whl.

File metadata

  • Download URL: ymodem-1.5.3-py3-none-any.whl
  • Upload date:
  • Size: 22.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for ymodem-1.5.3-py3-none-any.whl
Algorithm Hash digest
SHA256 79b4e88c70afc277369183c98d1443e57d545e5e3cecb6144aa07138a69aaf10
MD5 1952877a4a037eefb65896cc3bb8427e
BLAKE2b-256 ff6b66ffe5ce3359981e8517c4e26d59e80d29ccbd9766d2abdc1c6eb199775b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page