RS232_LIB unsigned int rs232_set_flow(struct rs232_port_t *p, enum rs232_flow_e flow) { DCB pdcb; struct rs232_windows_t *wx = p->pt; DBG("p=%p p->pt=%p flow=%d (flow control %s)\n", (void *)p, p->pt, flow, rs232_strflow(flow)); if (!rs232_port_open(p)) return RS232_ERR_PORT_CLOSED; GET_PORT_STATE(wx->fd, &pdcb); switch (flow) { case RS232_FLOW_OFF: pdcb.fOutxCtsFlow = FALSE; pdcb.fRtsControl = RTS_CONTROL_DISABLE; pdcb.fInX = FALSE; pdcb.fOutX = FALSE; break; case RS232_FLOW_HW: pdcb.fOutxCtsFlow = TRUE; pdcb.fRtsControl = RTS_CONTROL_HANDSHAKE; pdcb.fInX = FALSE; pdcb.fOutX = FALSE; break; case RS232_FLOW_XON_XOFF: pdcb.fOutxCtsFlow = FALSE; pdcb.fRtsControl = RTS_CONTROL_DISABLE; pdcb.fInX = TRUE; pdcb.fOutX = TRUE; break; default: return RS232_ERR_UNKNOWN; } SET_PORT_STATE(wx->fd, &pdcb); p->flow = flow; return RS232_ERR_NOERROR; }
RS232_LIB const char * rs232_to_string(struct rs232_port_t *p) { static char str[RS232_STRLEN+1]; DBG("p=%p\n", (void *)p); if (p == NULL) return NULL; snprintf(str, RS232_STRLEN, "device: %s, baud: %s, data bits: %s," " parity: %s, stop bits: %s," " flow control: %s", p->dev, rs232_strbaud(p->baud), rs232_strdata(p->data), rs232_strparity(p->parity), rs232_strstop(p->stop), rs232_strflow(p->flow)); return str; }