Max Kotasek <mawr...@gmail.com> writes: > Hello to all out there, > > I'm trying to figure out how to parse the responses from fcntl.ioctl() > calls that modify the serial lines in a way that asserts that the line > is now changed. For example I may want to drop RTS explicitly, and > assert that the line has been dropped before returning. > > Here is a brief snippet of code that I've been using to do that, but > not sure what to do with the returned response: > > def set_RTS(self, state=True): > if self.fd is None: > return 0 > > p = struct.pack('I', termios.TIOCM_RTS) > if state: > return fcntl.ioctl(self.fd, termios.TIOCMBIS, p) > else: > return fcntl.ioctl(self.fd, termios.TIOCMBIC, p) > > The problem is I get responses like '\x01\x00\x00\x00', or > '\x02\x00\x00\x00' and I'm not sure what they mean.
I'm not an expert in this by any means. However, I don't think that fcntl call actually returns the port status after the bit setting. But why not check it explicitly with termios.TIOCMGET? At least then I seem to be able to toggle the RTS bit (bit 2) in the register. Here are the trivial functions I used: def set_rts(fd): print "Setting RTS." p = struct.pack('I', termios.TIOCM_RTS) fcntl.ioctl(fd, termios.TIOCMBIS, p) def clear_rts(fd): print "Clearing RTS." p = struct.pack('I', termios.TIOCM_RTS) fcntl.ioctl(fd, termios.TIOCMBIC, p) def get_status(fd): print "Querying RTS state." stat = struct.pack('I', 0) rc = fcntl.ioctl(fd, termios.TIOCMGET, stat) if struct.unpack('I', rc)[0] & termios.TIOCM_RTS: print "RTS bit is on." else: print "RTS bit is off." It seems to me also that RTS is always on after the port has been opened. I didn't dig out my voltmeter or anything to check this, though. -- http://mail.python.org/mailman/listinfo/python-list