added windows serial port debug code
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Sat, 12 May 2018 20:30:54 +0000 (20:30 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Sat, 12 May 2018 20:30:54 +0000 (20:30 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@3600 01035d8c-6547-0410-b346-abe4f91aad63

freedv-dev/src/dlg_ptt.cpp
freedv-dev/src/serialport.cpp

index 5dd741964da8d0b4089e858977e87c5d9b44cfb7..69177ebd71de32762b17b3dcdb376cb1d723023c 100644 (file)
@@ -514,7 +514,7 @@ void ComPortsDlg::OnTest(wxCommandEvent& event) {
 #if defined(__WXGTK__) || defined(__WXOSX__)
         ctrlport = m_cbCtlDevicePath->GetValue();
 #endif
-        fprintf(stderr, "opening serial port\n");
+        fprintf(stderr, "opening serial port %s\n", ctrlport.c_str());
 
         bool success = serialport->openport(ctrlport.c_str(),
                                             m_rbUseRTS->GetValue(),
index 59dd0c93936fa3a69362a084c9a38c337ab3e54b..ba4d2e5a58815cd5048229819063d3720543e47c 100644 (file)
@@ -17,8 +17,12 @@ Serialport::~Serialport() {
 
 bool Serialport::openport(const char name[], bool useRTS, bool RTSPos, bool useDTR, bool DTRPos)
 {
+    fprintf(stderr, "starting openport(), name: %s useRTS: %d RTSPos: %d useDTR: %d DTRPos: %d\n",
+            name, useRTS, RTSPos, useDTR, DTRPos);
+
     if (com_handle != COM_HANDLE_INVALID) {
         closeport();
+        fprintf(stderr, "comm_handle invalid, closing\n");
     }
 
     m_useRTS = useRTS;
@@ -26,60 +30,110 @@ bool Serialport::openport(const char name[], bool useRTS, bool RTSPos, bool useD
     m_useDTR = useDTR;
     m_DTRPos = DTRPos;
 
+    
 #ifdef _WIN32
-       {
-               COMMCONFIG CC;
-               DWORD CCsize=sizeof(CC);
-               COMMTIMEOUTS timeouts;
-               DCB     dcb;
-
-               if(GetDefaultCommConfigA(name, &CC, &CCsize)) {
-                       CC.dcb.fOutxCtsFlow             = FALSE;
-                       CC.dcb.fOutxDsrFlow             = FALSE;
-                       CC.dcb.fDtrControl              = DTR_CONTROL_DISABLE;
-                       CC.dcb.fDsrSensitivity  = FALSE;
-                       CC.dcb.fRtsControl              = RTS_CONTROL_DISABLE;
-                       SetDefaultCommConfigA(name, &CC, CCsize);
-               }
+    {
+        COMMCONFIG CC;
+        DWORD CCsize=sizeof(CC);
+        COMMTIMEOUTS timeouts;
+        DCB    dcb;
 
-               if((com_handle=CreateFileA(name
-                       ,GENERIC_READ|GENERIC_WRITE     /* Access */
-                       ,0                                                              /* Share mode */
-                       ,NULL                                                   /* Security attributes */
-                       ,OPEN_EXISTING                                  /* Create access */
-                       ,FILE_ATTRIBUTE_NORMAL                  /* File attributes */
-                       ,NULL                                                   /* Template */
-                       ))==INVALID_HANDLE_VALUE)
-                       return false;
+        if(GetDefaultCommConfigA(name, &CC, &CCsize)) {
+                    
+            CC.dcb.fOutxCtsFlow                = FALSE;
+            CC.dcb.fOutxDsrFlow                = FALSE;
+            CC.dcb.fDtrControl         = DTR_CONTROL_DISABLE;
+            CC.dcb.fDsrSensitivity     = FALSE;
+            CC.dcb.fRtsControl         = RTS_CONTROL_DISABLE;
+            if (!SetDefaultCommConfigA(name, &CC, CCsize)) {
+                fprintf(stderr, "SetDefaultCommConfigA() failed\n");
+                goto error;
+            }
+            
+        } else {
+            fprintf(stderr, "GetDefaultCommConfigA() failed\n");
+            goto error;
+        }
 
-               if(GetCommTimeouts(com_handle, &timeouts)) {
-                       timeouts.ReadIntervalTimeout=MAXDWORD;
-                       timeouts.ReadTotalTimeoutMultiplier=0;
-                       timeouts.ReadTotalTimeoutConstant=0;            // No-wait read timeout
-                       timeouts.WriteTotalTimeoutMultiplier=0;
-                       timeouts.WriteTotalTimeoutConstant=5000;        // 5 seconds
-                       SetCommTimeouts(com_handle,&timeouts);
-               }
+        if((com_handle=CreateFileA(name
+                                   ,GENERIC_READ|GENERIC_WRITE         /* Access */
+                                   ,0                          /* Share mode */
+                                   ,NULL                       /* Security attributes */
+                                   ,OPEN_EXISTING              /* Create access */
+                                   ,FILE_ATTRIBUTE_NORMAL       /* File attributes */
+                                   ,NULL                       /* Template */
+                                   ))==INVALID_HANDLE_VALUE) {
+            fprintf(stderr, "CreateFileA() failed\n");
+            goto error;
+        }
 
-               /* Force N-8-1 mode: */
-               if(GetCommState(com_handle, &dcb)==TRUE) {
-                       dcb.ByteSize            = 8;
-                       dcb.Parity                      = NOPARITY;
-                       dcb.StopBits            = ONESTOPBIT;
-                       dcb.DCBlength           = sizeof(DCB);
-                       dcb.fBinary                     = TRUE;
-                       dcb.fOutxCtsFlow        = FALSE;
-                       dcb.fOutxDsrFlow        = FALSE;
-                       dcb.fDtrControl         = DTR_CONTROL_DISABLE;
-                       dcb.fDsrSensitivity     = FALSE;
-                       dcb.fTXContinueOnXoff= TRUE;
-                       dcb.fOutX                       = FALSE;
-                       dcb.fInX                        = FALSE;
-                       dcb.fRtsControl         = RTS_CONTROL_DISABLE;
-                       dcb.fAbortOnError       = FALSE;
-                       SetCommState(com_handle, &dcb);
-               }
-       }
+        if(GetCommTimeouts(com_handle, &timeouts)) {
+            timeouts.ReadIntervalTimeout=MAXDWORD;
+            timeouts.ReadTotalTimeoutMultiplier=0;
+            timeouts.ReadTotalTimeoutConstant=0;               // No-wait read timeout
+            timeouts.WriteTotalTimeoutMultiplier=0;
+            timeouts.WriteTotalTimeoutConstant=5000;   // 5 seconds
+            SetCommTimeouts(com_handle,&timeouts);
+        } else {
+            fprintf(stderr, "GetCommTimeouts()failed\n");
+            goto error;
+        }
+
+        /* Force N-8-1 mode: */
+        if(GetCommState(com_handle, &dcb)==TRUE) {
+            dcb.ByteSize               = 8;
+            dcb.Parity                 = NOPARITY;
+            dcb.StopBits               = ONESTOPBIT;
+            dcb.DCBlength              = sizeof(DCB);
+            dcb.fBinary                        = TRUE;
+            dcb.fOutxCtsFlow   = FALSE;
+            dcb.fOutxDsrFlow   = FALSE;
+            dcb.fDtrControl            = DTR_CONTROL_DISABLE;
+            dcb.fDsrSensitivity        = FALSE;
+            dcb.fTXContinueOnXoff= TRUE;
+            dcb.fOutX                  = FALSE;
+            dcb.fInX                   = FALSE;
+            dcb.fRtsControl            = RTS_CONTROL_DISABLE;
+            dcb.fAbortOnError  = FALSE;
+            if (!SetCommState(com_handle, &dcb)) {
+                fprintf(stderr, "SetCommState() failed\n");
+                goto error;           
+            }
+        } else {
+            fprintf(stderr, "GetCommState() failed\n");
+            goto error;           
+        }
+
+    error:
+        // Retrieve the system error message for the last-error code
+
+        LPVOID lpMsgBuf;
+        LPVOID lpDisplayBuf;
+        DWORD dw = GetLastError(); 
+
+        FormatMessage(
+                      FORMAT_MESSAGE_ALLOCATE_BUFFER | 
+                      FORMAT_MESSAGE_FROM_SYSTEM |
+                      FORMAT_MESSAGE_IGNORE_INSERTS,
+                      NULL,
+                      dw,
+                      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+                      (LPTSTR) &lpMsgBuf,
+                      0, NULL );
+
+        // Display the error message
+
+        lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, 
+                                          (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR)); 
+        StringCchPrintf((LPTSTR)lpDisplayBuf, 
+                        LocalSize(lpDisplayBuf) / sizeof(TCHAR),
+                        TEXT("%s failed with error %d: %s"), 
+                        lpszFunction, dw, lpMsgBuf); 
+        MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK); 
+
+        LocalFree(lpMsgBuf);
+        LocalFree(lpDisplayBuf);
+    }
 #else
        {
                struct termios t;