Portál AbcLinuxu, 11. listopadu 2025 01:19
/dev/ttySx
Pokud ti stačí opravdu jenom dva stavy (běží na baterky / neběží na baterky), tak využij CTS pin.

#!/usr/bin/env python
import tty, os, fcntl, struct
fd = os.open('/dev/ttyS0', os.O_RDWR | os.O_SYNC)
bits = [(tty.TIOCM_RTS, 'RTS'),
(tty.TIOCM_DTR, 'DTR'),
(tty.TIOCM_CTS, 'CTS'),
(tty.TIOCM_RNG, 'RNG'),
(tty.TIOCM_CAR, 'CAR'),
(tty.TIOCM_DSR, 'DSR')]
TIOCM_zero_str = struct.pack('I', 0)
mask = tty.TIOCM_CTS | tty.TIOCM_RNG | tty.TIOCM_CAR | tty.TIOCM_DSR
while True:
result = []
fcntl.ioctl(fd, tty.TIOCMIWAIT, mask)
state = fcntl.ioctl(fd, tty.TIOCMGET, TIOCM_zero_str)
state_i = struct.unpack('I', state)[0]
for bit, name in bits:
if state_i & bit:
result.append(name)
else:
result.append(name.lower())
print ' '.join(result)
os.close(fd)
Ten program čeká, dokud se nezmění stav některé z linek. Když dojde ke změně, vypíše jejich stav. Podotýkám, že čekání na změnu nijak nezatěžuje procesor (nejedná se o periodické dotazování, ale o jaderné volání).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.