Portál AbcLinuxu, 10. května 2025 05:58
/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.