2009-12-02 3 views
2

У меня есть рабочее соединение с моим последовательным устройством через PySerial, но я также хочу передавать файлы через протокол xmodem как часть моей программы.Могу ли я использовать протокол xmodem с PySerial?

Какой был бы самый нейтральный для платформы способ? В худшем случае я мог close() мой serial.Serial объект в Python и использовать subprocess, чтобы позвонить по телефону /usr/bin/sb, но это кажется неэлегантным.

Я сейчас на Ubuntu 9.10 и использую адаптер USB-TTY.

Любые идеи?

+0

Вам нужно передать или получить или оба? –

+0

Я только хочу передать. – lfaraone

ответ

4

В PyPi есть модуль xmodem. Он принимает две функции в конструкторе для чтения и записи данных, реализует их для работы с вашим открытым последовательным портом. Ниже приведен простой пример его использования:

import serial 
try: 
    from cStringIO import StringIO 
except: 
    from StringIO import StringIO 
from xmodem import XMODEM, CRC 
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 send ACK 


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 loads data via xmodem\r\n") 
sleep(0.02) # give device time to handle command 
readUntil(CRC) 
buffer = StringIO('data to send') 
XMODEM(getc, putc).send(buffer, quiet = 1) 
buffer.close() 
readUntil() 
0

Я не знаком с деталями протокола X-Modem, но один человек, отвечая на xmodem-for-python вопрос, как представляется, и даже при условии, что выглядит как сырая реализация XMODEM в Python. Возможно, вы могли бы использовать это или идеи из других ответов там.

+0

Хммм, вопросник хотел ПОЛУЧИТЬ с сенсорного устройства; ответ, на который вы ссылаетесь, является грубой реализацией ОТПРАВКИ. –

Смежные вопросы