Desidero monitorare direttamente la connessione seriale su USB alla mia stampante 3d, che funziona a 250000 baud. ad esempio, potrei monitorarlo con cat /dev/ttyUSB0
Tuttavia prima devo impostare il baud rate, ad esempio stty -F /dev/ttyUSB0 115200
Ma se provo a impostare il baud rate su 250k, fallisce:
stty -F /dev/ttyUSB0 250000
dà risultato:
stty: invalid argument 250000
Sembra che il baud rate 250000 non sia supportato in Ubuntu/Mint. Qualcuno può suggerire un modo alternativo per monitorare questa connessione seriale?
Risposta accettata:
Ci sono alcuni ioctl non documentati che puoi usare per impostare velocità non standard, a condizione che il driver le implementi. Un modo semplice per chiamarli è con un piccolo pezzo di pitone. Ad esempio, inserisci il file mysetbaud.py
e chmod +x
esso:
#!/usr/bin/python
# set nonstandard baudrate. http://unix.stackexchange.com/a/327366/119298
import sys,array,fcntl
# from /usr/lib/python2.7/site-packages/serial/serialposix.py
# /usr/include/asm-generic/termbits.h for struct termios2
# [2]c_cflag [9]c_ispeed [10]c_ospeed
def set_special_baudrate(fd, baudrate):
TCGETS2 = 0x802C542A
TCSETS2 = 0x402C542B
BOTHER = 0o010000
CBAUD = 0o010017
buf = array.array('i', [0] * 64) # is 44 really
fcntl.ioctl(fd, TCGETS2, buf)
buf[2] &= ~CBAUD
buf[2] |= BOTHER
buf[9] = buf[10] = baudrate
assert(fcntl.ioctl(fd, TCSETS2, buf)==0)
fcntl.ioctl(fd, TCGETS2, buf)
if buf[9]!=baudrate or buf[10]!=baudrate:
print("failed. speed is %d %d" % (buf[9],buf[10]))
sys.exit(1)
set_special_baudrate(0, int(sys.argv[1]))
Questo prende del codice da pyserial
pacchetto con costanti per i vari valori necessari da Linux C include file e un array per struct termios2
. Lo usi con un parametro di baud rate e il tuo dispositivo su stdin, ad esempio da bash:
./mysetbaud.py <>/dev/ttyUSB0 250000