/[H7]/trunk/H7 Server/H7 ServerDlg.cpp
ViewVC logotype

Diff of /trunk/H7 Server/H7 ServerDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 8 by hedin, Mon Jan 29 14:35:42 2007 UTC revision 19 by hedin, Tue Jan 30 16:13:27 2007 UTC
# Line 12  Line 12 
12  #endif  #endif
13    
14    
15    void WriteLastError(char *format)
16    {
17            LPVOID lpMsgBuf;
18            FormatMessage(
19                    FORMAT_MESSAGE_ALLOCATE_BUFFER |
20                    FORMAT_MESSAGE_FROM_SYSTEM |
21                    FORMAT_MESSAGE_IGNORE_INSERTS,
22                    NULL,
23                    GetLastError(),
24                    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),      // Default language
25                    (LPTSTR) &lpMsgBuf,
26                    0,
27                    NULL
28            );
29            printf(format, lpMsgBuf);
30            CString Tmp;
31            Tmp.Format( "%s", lpMsgBuf);
32            MessageBox(0,Tmp,"",MB_OK);
33    }
34    
35      std::vector<CString> GetAvailableComPorts()      std::vector<CString> GetAvailableComPorts()
36      {      {
37          std::vector<CString> ports;          std::vector<CString> ports;
# Line 135  BOOL CH7ServerDlg::OnInitDialog() Line 155  BOOL CH7ServerDlg::OnInitDialog()
155  /**********************************************************************/  /**********************************************************************/
156          // TODO: Add extra initialization here          // TODO: Add extra initialization here
157                    
158          // Sets values in baud-rate combo box            // if there is no free com ports, the program shut down.
159          m_BaudRate.AddString("1200");                                            if (!ServerInit() )
160          m_BaudRate.AddString("2400");                                            {
161          m_BaudRate.AddString("4800");   // Don't work, used for error test.                                      OnOK();
162          m_BaudRate.AddString("9600");                                                    return false;
163          m_BaudRate.AddString("19200");          }
   
         // Checks how many COM ports there are.  
         std::vector<CString> Serial = GetAvailableComPorts();  
         for (unsigned int i=0; i<Serial.size(); i++)  
                 m_Serial.AddString(Serial[i]);  
         m_Serial.SetCurSel(0);  
   
         // Load saved settings from regedit.  
         unsigned long Port;  
         unsigned long BaudRate;  
 //      CString LoadCom;  
   
 // Used to format the loaded values.  
         CString TPort;  
         CString TBaudRate;  
   
         CRegKey reg;  
         reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");  
         reg.QueryDWORDValue("Port", Port);  
         reg.QueryDWORDValue("BaudRate", BaudRate);  
   
         char LoadCom[20];  
         unsigned long size = 20;  
         reg.QueryStringValue("Serial", LoadCom, &size);  
   
         TPort.Format("%d", Port);  
         TBaudRate.Format("%d", BaudRate);  
 //      TLoadCom.Format("%s", TLoadCom);  
164    
         m_Port.SetWindowText(TPort);  
         m_BaudRate.SetWindowText(TBaudRate);  
         m_Serial.SetWindowText(LoadCom);  
         MessageBox(LoadCom);  
165  /**********************************************************************/  /**********************************************************************/
166          return TRUE;  // return TRUE  unless you set the focus to a control          return TRUE;  // return TRUE  unless you set the focus to a control
167  }  }
# Line 229  HCURSOR CH7ServerDlg::OnQueryDragIcon() Line 217  HCURSOR CH7ServerDlg::OnQueryDragIcon()
217    
218  void CH7ServerDlg::OnBnClickedStart()  void CH7ServerDlg::OnBnClickedStart()
219  {  {
220    // Add's user defined Baud-Rate to regedit before the server start.
221          CRegKey reg;          CRegKey reg;
222            CString Baud;
223            m_BaudRate.GetWindowText(Baud);
224    
225          reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");          reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");
226          unsigned long Port;          reg.SetDWORDValue("BaudRate", atoi(Baud) );
         reg.QueryDWORDValue("Port", Port);  
227    
228          CString tmp;          StartTcp();
229          tmp.Format("%d", Port);          StartSerial();
         m_Port.SetWindowText(tmp);  
230  }  }
231    
232  int CH7ServerDlg::StartTcp(void)  int CH7ServerDlg::StartTcp(void)
233  {  {
234    // Get the TCP Port number from regedit.
235          unsigned long Port;          unsigned long Port;
236          CRegKey reg;          CRegKey reg;
237          reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");          reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");
238          reg.QueryDWORDValue("Port", Port);          reg.QueryDWORDValue("Port", Port);
239            reg.Close();
240    
241    // Restats the TCP Connection
242          TcpServer.Close();          TcpServer.Close();
243    
244          TcpServer.Create(Port);          TcpServer.Create(Port);
245          TcpServer.Listen();          TcpServer.Listen();
246    
247    // Prints TCP Port number to the status box.
248            CString tmp;
249            tmp.Format("%d", Port);
250            m_Port.SetWindowText(tmp);
251    
252          return 0;          return 0;
253  }  }
254    
255  void CH7ServerDlg::OnBnClickedTest()  void CH7ServerDlg::OnBnClickedRestart()
256  {  {
257          //**************** <TCP Port section> ****************/          CWaitCursor wait;               // Musen viser timeglas.
258          CString Port = "";          CString Port;
           
259          m_Port.GetWindowText(Port);          m_Port.GetWindowText(Port);
 // Saving Port number in regedit as int  
260          CRegKey reg;          CRegKey reg;
261          reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");          reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");
262          reg.SetDWORDValue("Port", atoi(Port) );          reg.SetDWORDValue("Port", atoi(Port) );
263            
264            CString tmp;
265            m_Serial.GetWindowText(tmp);
266            reg.SetStringValue("Serial",tmp);
267          reg.Close();          reg.Close();
 // Debug info to the status edit box.  
         m_Status.SetWindowText(Port);  
 //**************** </TCP Port section> ****************/  
268          StartTcp();          StartTcp();
269  }  }
270    
271    void CH7ServerDlg::OnBnClickedTest()
272    {
273            
274    }
275    bool CH7ServerDlg::ServerInit(void)
276    {
277            unsigned int i;
278            CRegKey reg;
279    // Sets values in baud-rate combo box  
280            m_BaudRate.AddString("1200");                                  
281            m_BaudRate.AddString("2400");                                  
282            m_BaudRate.AddString("4800");   // Don't work, used for error test.                    
283            m_BaudRate.AddString("9600");                                  
284            m_BaudRate.AddString("19200");
285    
286  void CH7ServerDlg::OnBnClickedRestart()          unsigned long Baud;
287            CString GetBaud;
288            reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");
289            reg.QueryDWORDValue("BaudRate", Baud);
290    
291            switch (Baud)
292            {
293            case 1200:
294                    m_BaudRate.SetCurSel(0);
295                    break;
296            case 2400:
297                    m_BaudRate.SetCurSel(1);
298                    break;
299            case 4800:
300                    m_BaudRate.SetCurSel(2);
301                    break;
302            case 9600:
303                    m_BaudRate.SetCurSel(3);
304                    break;
305            case 19200:
306                    m_BaudRate.SetCurSel(4);
307                    break;
308            default:
309                    m_BaudRate.SetCurSel(3);
310                    break;
311            }
312    
313            m_BaudRate.GetWindowText(GetBaud);
314            reg.SetDWORDValue("BaudRate", atoi(GetBaud) );
315    
316    // Checks how many COM ports there are.
317            std::vector<CString> Serial = GetAvailableComPorts();
318            for (i=0; i<Serial.size(); i++)
319                    m_Serial.AddString(Serial[i]);
320    
321    // Load saved settings from regedit.
322            unsigned long Port;
323            unsigned long BaudRate;
324    
325            // Used to format the loaded values.
326            CString TPort;
327            CString TBaudRate;
328    
329            reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");
330            reg.QueryDWORDValue("Port", Port);
331            reg.QueryDWORDValue("BaudRate", BaudRate);
332    
333            char LoadCom[20];
334            unsigned long size = 20;
335            reg.QueryStringValue("Serial", LoadCom, &size);
336    
337            TPort.Format("%d", Port);
338            TBaudRate.Format("%d", BaudRate);
339    
340            m_Port.SetWindowText(TPort);
341            m_BaudRate.SetWindowText(TBaudRate);
342            m_Serial.SetWindowText(LoadCom);
343    
344            if( Serial.size() == 0 ){
345                    MessageBox( "No (free) serial port's found" );
346                    return false;
347            }
348    // Checks for valid COM port in regedit.
349            for (i=0; i< Serial.size() ; i++)
350            {
351                    if (LoadCom == Serial[i])
352                    {
353                            m_Serial.SetCurSel(i);
354                            break;
355                    }
356            }
357            if (i == Serial.size() )
358            {
359                    m_Serial.SetCurSel(0);
360                    reg.SetStringValue("Serial", Serial[0]);
361            }
362            reg.Close();
363            return true;
364    }
365    
366    int CH7ServerDlg::StartSerial(void)
367  {  {
368          CWaitCursor wait;               // Musen viser timeglas.          char SerialPort[6];
369          CString Port;          unsigned long size = 6;
370          m_Port.GetWindowText(Port);          unsigned long Baud;
371          CRegKey reg;          CRegKey reg;
372            
373          reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");          reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");
374          reg.SetDWORDValue("Port", atoi(Port) );  
375          StartTcp();          reg.QueryStringValue("Serial", SerialPort, &size);
376            reg.QueryDWORDValue("BaudRate", Baud);
377    
378            HANDLE hComPort;
379    
380            hComPort = CreateFile( "COM1",
381                                                                                    GENERIC_READ | GENERIC_WRITE,
382                                                                                    0,
383                                                                                    0,
384                                                                                    OPEN_EXISTING,
385                                                                                    FILE_ATTRIBUTE_NORMAL,
386                                                                                    0
387                                                                            );
388    
389            // Error check.
390            if( hComPort == INVALID_HANDLE_VALUE ){
391                    WriteLastError("Fail\n%s\n");
392                    return 1;
393            }
394    
395    
396            DCB dcb, dcb_restore;
397            
398            // DCB structure for com port setup
399            dcb.DCBlength = sizeof(DCB);
400            dcb_restore.DCBlength = sizeof(DCB);
401    
402            // Error check.
403            if( (!GetCommState(hComPort, &dcb)) ||
404                    (!GetCommState(hComPort, &dcb_restore)) ){
405                    WriteLastError("Fail\n%s\n");
406                    return 2;
407                    }
408    
409            // Init com port setup
410            dcb.BaudRate            = Baud;
411            dcb.ByteSize            = 8;
412            dcb.Parity                      = NOPARITY;
413            dcb.StopBits            = ONESTOPBIT;
414            dcb.fDtrControl         = DTR_CONTROL_DISABLE;
415            dcb.fRtsControl         = RTS_CONTROL_DISABLE;
416            dcb.fParity                     = FALSE;
417            dcb.fDsrSensitivity = FALSE;
418    
419            if( !SetCommState(hComPort,&dcb) ){
420                    WriteLastError("Fail\n%s\n");
421                    return 3;
422            }
423        
424            // ready to send stuff...
425    
426    
427            unsigned char receive;
428            unsigned long rSize;
429            CString Tmp;
430            ReadFile(hComPort,&receive,1,&rSize,0);
431            if( rSize != 1 ){
432                    MessageBox( "Error when trying to receive date from serial port" );
433                    return false;
434            }
435            Tmp.Format( "%s", &receive );
436            m_Status.SetWindowText(Tmp);
437    
438    
439    
440            if( !SetCommState( hComPort, &dcb_restore ) ){
441                    WriteLastError("Fail\n%s\n");
442                    return 4;
443            }
444    
445    
446            return 0;
447  }  }

Legend:
Removed from v.8  
changed lines
  Added in v.19

  ViewVC Help
Powered by ViewVC 1.1.20