Browse Source

lowl-vcom: Implement set_serial_rts for Windows

Luke Dashjr 12 years ago
parent
commit
9a769f2b3f
2 changed files with 24 additions and 0 deletions
  1. 23 0
      lowl-vcom.c
  2. 1 0
      lowl-vcom.h

+ 23 - 0
lowl-vcom.c

@@ -1140,6 +1140,29 @@ int get_serial_cts(const int fd)
 
 
 	return (flags & MS_CTS_ON) ? 1 : 0;
 	return (flags & MS_CTS_ON) ? 1 : 0;
 }
 }
+
+int set_serial_rts(int fd, int rts)
+{
+	if (fd == -1)
+		return -1;
+	const HANDLE fh = (HANDLE)_get_osfhandle(fd);
+	if (fh == INVALID_HANDLE_VALUE)
+		return -1;
+	
+	DCB dcb;
+	if (!GetCommState(fh, &dcb))
+		applogfailinfor(-1, LOG_DEBUG, "GetCommState", "%s", bfg_strerror(GetLastError(), BST_SYSTEM));
+	
+	if (rts)
+		dcb.fRtsControl = RTS_CONTROL_ENABLE;
+	else
+		dcb.fRtsControl = RTS_CONTROL_DISABLE;
+	
+	if (!SetCommState(fh, &dcb))
+		applogfailinfor(-1, LOG_DEBUG, "SetCommState", "%s", bfg_strerror(GetLastError(), BST_SYSTEM));
+	
+	return rts ? 1 : 0;
+}
 #endif // ! WIN32
 #endif // ! WIN32
 
 
 struct lowlevel_driver lowl_vcom = {
 struct lowlevel_driver lowl_vcom = {

+ 1 - 0
lowl-vcom.h

@@ -39,6 +39,7 @@ extern ssize_t _serial_read(int fd, char *buf, size_t buflen, char *eol);
 extern int serial_close(int fd);
 extern int serial_close(int fd);
 
 
 extern int get_serial_cts(int fd);
 extern int get_serial_cts(int fd);
+extern int set_serial_rts(int fd, int rts);
 extern bool valid_baud(int baud);
 extern bool valid_baud(int baud);
 
 
 #endif
 #endif