[PD-cvs] externals/iem/comport/comport comport.c,1.24,1.25

Martin Peach mrpeach at users.sourceforge.net
Mon Oct 16 23:30:31 CEST 2006


Update of /cvsroot/pure-data/externals/iem/comport/comport
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12924

Modified Files:
	comport.c 
Log Message:
write_serial:
Windows version checks GetOverlappedResult to avoid Tx overruns


CVSCVS: Committing in .


Index: comport.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/comport/comport/comport.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -C2 -d -r1.24 -r1.25
*** comport.c	4 Oct 2006 01:24:20 -0000	1.24
--- comport.c	16 Oct 2006 21:30:29 -0000	1.25
***************
*** 14,17 ****
--- 14,18 ----
  MP 20060924 added comport_enum to list available ports in Windows
  MP 20060925 add devices message to enumerate actual devices, info just outputs current port state
+ MP 20061016 write_serial checks for GetOverlappedResult to avoid tx buffer overflow errors
  */
  
***************
*** 496,500 ****
      if (!GetCommTimeouts(fd, &(x->old_timeouts)))
      {
!         post("[comport] Couldn't get old timeouts for serial device");
      }
  
--- 497,501 ----
      if (!GetCommTimeouts(fd, &(x->old_timeouts)))
      {
!         post("[comport] Couldn't get old timeouts for serial device (%d)", GetLastError());
      }
  
***************
*** 508,515 ****
      if (!SetCommTimeouts(fd, &timeouts))
      {
!         post("Couldn't set timeouts for serial device");
          return INVALID_HANDLE_VALUE;
      }
! 
      x->comport = com_num;/* output on next tick */
      return fd;
--- 509,520 ----
      if (!SetCommTimeouts(fd, &timeouts))
      {
!         post("Couldn't set timeouts for serial device (%d)", GetLastError());
          return INVALID_HANDLE_VALUE;
      }
! 	if (!SetupComm(x->comhandle, 4096L, 4096L))/* try to get big buffers to avoid overruns*/
! 	{
! 		post("[comport] Couldn't do SetupComm (%d)", GetLastError());
! 	}
! 	
      x->comport = com_num;/* output on next tick */
      return fd;
***************
*** 540,546 ****
      OVERLAPPED osWrite = {0};
      DWORD      dwWritten;
!     DWORD      dwToWrite = 1;
      DWORD      dwErr;
!     char       cErr[100];
  
      osWrite.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
--- 545,551 ----
      OVERLAPPED osWrite = {0};
      DWORD      dwWritten;
!     DWORD      dwToWrite = 1L;
      DWORD      dwErr;
! 	DWORD      numTransferred = 0L;
  
      osWrite.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
***************
*** 556,564 ****
          if (dwErr != ERROR_IO_PENDING)
          {
!             sprintf(cErr, "WriteFile error: %d", (int)dwErr);
!             post(cErr);
              return 0;
          }
      }
      CloseHandle(osWrite.hEvent);
      return 1;
--- 561,573 ----
          if (dwErr != ERROR_IO_PENDING)
          {
!             post("WriteFile error: %d", (int)dwErr);
              return 0;
          }
      }
+ 	if (!GetOverlappedResult(x->comhandle, &osWrite, &numTransferred, TRUE))
+ 	{/* wait for the character to be sent */
+         dwErr = GetLastError();
+ 		post("WriteFile:GetOverlappedResult error: %d", (int)dwErr);
+ 	}
      CloseHandle(osWrite.hEvent);
      return 1;





More information about the Pd-cvs mailing list