XMODEM для питона

Я пишу программу, которая требует использования XMODEM для передачи данных с сенсорного устройства. Я бы не хотел писать свой собственный код XMODEM, поэтому мне было интересно, знает ли кто-нибудь, есть ли где-нибудь доступный модуль Python XMODEM?


person Community    schedule 11.12.2008    source источник


Ответы (5)


На PyPi есть модуль XMODEM. Он обрабатывает как отправку, так и получение данных с помощью XModem. Ниже приведен пример его использования:

import serial
try:
    from cStringIO import StringIO
except:
    from StringIO import StringIO
from xmodem import XMODEM, NAK
from time import sleep

def readUntil(char = None):
    def serialPortReader():
        while True:
            tmp = port.read(1)
            if not tmp or (char and char == tmp):
                break
            yield tmp
    return ''.join(serialPortReader())

def getc(size, timeout=1):
    return port.read(size)

def putc(data, timeout=1):
    port.write(data)
    sleep(0.001) # give device time to prepare new buffer and start sending it

port = serial.Serial(port='COM5',parity=serial.PARITY_NONE,bytesize=serial.EIGHTBITS,stopbits=serial.STOPBITS_ONE,timeout=0,xonxoff=0,rtscts=0,dsrdtr=0,baudrate=115200)
port.write("command that initiates xmodem send from device\r\n")
sleep(0.02) # give device time to handle command and start sending response
readUntil(NAK)
buffer = StringIO()
XMODEM(getc, putc).recv(buffer, crc_mode = 0, quiet = 1)
contents = buffer.getvalue()
buffer.close()
readUntil()
person Artem Zankovich    schedule 04.03.2011

Я думаю, вы застряли в своем собственном.

Вы можете использовать sz, который реализует X/Y/ZMODEM. Вы можете обратиться к двоичному файлу или перенести необходимый код на Python.

person ieure    schedule 11.12.2008

Вот ссылка на документацию XMODEM, которая будет полезна, если вам нужно написать твой собственный. Он имеет подробное описание оригинального XMODEM, XMODEM-CRC и XMODEM-1K.

Вас также может заинтересовать этот c-code.

person some    schedule 11.12.2008

Вы можете попробовать использовать SWIG для создания привязок Python для библиотек C, указанных выше (или любых других библиотек C/C++). вы найдете в Интернете). Это позволит вам использовать тот же C API непосредственно из Python.

Фактическая реализация, конечно же, все еще будет на C/C++, поскольку SWIG просто создает привязки к интересующим функциям.

person codelogic    schedule 11.12.2008

Существует модуль Python, который вы можете использовать -> https://pypi.python.org/pypi/xmodem< /а>

Вы можете увидеть протокол передачи в http://pythonhosted.org//xmodem/xmodem.html

person slayra    schedule 05.11.2014