Я пишу программу, которая требует использования XMODEM для передачи данных с сенсорного устройства. Я бы хотел, чтобы не писать собственный код XMODEM, поэтому мне было интересно, знает ли кто-нибудь, есть ли доступный где-нибудь модуль Python XMODEM?XMODEM для python
ответ
Я думаю, вы застряли в сворачивании своих собственных.
Возможно, вы используете sz, который реализует X/Y/ZMODEM. Вы можете обратиться к двоичному файлу или перенести необходимый код на Python.
Вы можете попробовать использовать SWIG для создания привязок Python для библиотек C, связанных выше (или любых других библиотек C/C++, которые вы найдете в Интернете). Это позволит вам использовать один и тот же API C непосредственно из Python.
Фактическая реализация, конечно же, будет по-прежнему находиться на C/C++, поскольку SWIG просто создает привязки к интересующим функциям.
def xmodem_send(serial, file):
t, anim = 0, '|/-\\'
serial.setTimeout(1)
while 1:
if serial.read(1) != NAK:
t = t + 1
print anim[t%len(anim)],'\r',
if t == 60 : return False
else:
break
p = 1
s = file.read(128)
while s:
s = s + '\xFF'*(128 - len(s))
chk = 0
for c in s:
chk+=ord(c)
while 1:
serial.write(SOH)
serial.write(chr(p))
serial.write(chr(255 - p))
serial.write(s)
serial.write(chr(chk%256))
serial.flush()
answer = serial.read(1)
if answer == NAK: continue
if answer == ACK: break
return False
s = file.read(128)
p = (p + 1)%256
print '.',
serial.write(EOT)
return True
В 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()
Существует модуль питона, который можно использовать ->https://pypi.python.org/pypi/xmodem
Вы можете увидеть протокол передачи в http://pythonhosted.org//xmodem/xmodem.html
- 1. отправить файл с помощью XMODEM в python
- 2. Автоматизация загрузки файла xmodem
- 3. Java Xmodem только для отправки файла
- 4. Обеспечение XMODEM Передает файл Faithfully
- 5. Получение файла через XModem на HyperTerminal
- 6. Внедрение CRC-CCITT (XModem) в javascript
- 7. Проблема повторения блока с реализацией Java XMODEM
- 8. Могу ли я использовать протокол xmodem с PySerial?
- 9. Контрольная сумма CRC16: HCS08 против Kermit против XMODEM
- 10. Только для Python-модулей для Python 2
- 11. Использование Pyserial для отправки файла?
- 12. Python wrapper для программы Python
- 13. Python Cookbook для Python 2.4
- 14. Python-pptx для Python 3.5.1
- 15. Ярлык синтаксиса Python для Python
- 16. Отправить файл через последовательный порт из Python
- 17. C++ для Python для цикла?
- 18. Python для петель для оптимизации
- 19. Javascript для Python для серийного
- 20. IDLE для Python для Java
- 21. Программа для Python для Windows
- 22. Parse python module installtion для python 2.7
- 23. Python для java-выражений в python 3
- 24. Python: Cast SwigPythonObject для объекта Python
- 25. Задание интерпретатора Python для команды vim's: python
- 26. piping имя скрипта python для python
- 27. Python-парсер для Python-подобного языка
- 28. импорт h5py для python Python 2.7.3
- 29. Python regex для сигнатур функций Python
- 30. Новое для Python ... Python 3 и Matplotlib