/[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 19 by hedin, Tue Jan 30 16:13:27 2007 UTC revision 35 by hedin, Thu Feb 1 07:39:56 2007 UTC
# Line 6  Line 6 
6  #include "H7 ServerDlg.h"  #include "H7 ServerDlg.h"
7  #include ".\h7 serverdlg.h"  #include ".\h7 serverdlg.h"
8  #include <vector>  #include <vector>
9    #include "Define.h"
10    
11  #ifdef _DEBUG  #ifdef _DEBUG
12  #define new DEBUG_NEW  #define new DEBUG_NEW
# Line 120  BEGIN_MESSAGE_MAP(CH7ServerDlg, CDialog) Line 121  BEGIN_MESSAGE_MAP(CH7ServerDlg, CDialog)
121          ON_BN_CLICKED(IDC_Start, OnBnClickedStart)          ON_BN_CLICKED(IDC_Start, OnBnClickedStart)
122          ON_BN_CLICKED(IDC_TEST, OnBnClickedTest)          ON_BN_CLICKED(IDC_TEST, OnBnClickedTest)
123          ON_BN_CLICKED(IDC_RESTART, OnBnClickedRestart)          ON_BN_CLICKED(IDC_RESTART, OnBnClickedRestart)
124            ON_BN_CLICKED(IDC_STOP, OnBnClickedStop)
125  END_MESSAGE_MAP()  END_MESSAGE_MAP()
126    
127    
# Line 161  BOOL CH7ServerDlg::OnInitDialog() Line 163  BOOL CH7ServerDlg::OnInitDialog()
163                  OnOK();                  OnOK();
164                  return false;                  return false;
165          }          }
166            m_First = true;
167  /**********************************************************************/  /**********************************************************************/
168          return TRUE;  // return TRUE  unless you set the focus to a control          return TRUE;  // return TRUE  unless you set the focus to a control
169  }  }
# Line 215  HCURSOR CH7ServerDlg::OnQueryDragIcon() Line 217  HCURSOR CH7ServerDlg::OnQueryDragIcon()
217          return static_cast<HCURSOR>(m_hIcon);          return static_cast<HCURSOR>(m_hIcon);
218  }  }
219    
220    void CH7ServerDlg::OnBnClickedRestart()
221    {
222            StartSerial();
223    }
224    
225  void CH7ServerDlg::OnBnClickedStart()  void CH7ServerDlg::OnBnClickedStart()
226  {  {
227  // Add's user defined Baud-Rate to regedit before the server start.  // Add's user defined Baud-Rate to regedit before the server start.
228          CRegKey reg;          CRegKey reg;
229          CString Baud;          CString Baud = "9600";
230          m_BaudRate.GetWindowText(Baud);  //      m_BaudRate.GetWindowText(Baud);
231    
232          reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");          reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");
233          reg.SetDWORDValue("BaudRate", atoi(Baud) );          reg.SetDWORDValue("BaudRate", atoi(Baud) );
234    
235          StartTcp();          StartTcp();
236          StartSerial();          StartSerial();
237            //UpdateClient();
238  }  }
239    
240  int CH7ServerDlg::StartTcp(void)  int CH7ServerDlg::StartTcp(void)
241  {  {
242  // Get the TCP Port number from regedit.  // Get the TCP Port number from regedit.
243            CString Current_Port;
244          unsigned long Port;          unsigned long Port;
245            m_Port.GetWindowText(Current_Port);
246          CRegKey reg;          CRegKey reg;
247          reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");          reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");
248            reg.SetDWORDValue("Port",atoi(Current_Port) );
249          reg.QueryDWORDValue("Port", Port);          reg.QueryDWORDValue("Port", Port);
250          reg.Close();          reg.Close();
251    
252  // Restats the TCP Connection  // Restarts the TCP Connection
253          TcpServer.Close();          TcpServer.Close();
254    
255          TcpServer.Create(Port);          if (!TcpServer.Create(Port))
256          TcpServer.Listen();                  MessageBox("Crap");
257            if (!TcpServer.Listen())
258                    MessageBox("Loads of crap");
259    
260  // Prints TCP Port number to the status box.  // Prints TCP Port number to the status box.
261          CString tmp;          CString tmp;
# Line 252  int CH7ServerDlg::StartTcp(void) Line 265  int CH7ServerDlg::StartTcp(void)
265          return 0;          return 0;
266  }  }
267    
 void CH7ServerDlg::OnBnClickedRestart()  
 {  
         CWaitCursor wait;               // Musen viser timeglas.  
         CString Port;  
         m_Port.GetWindowText(Port);  
         CRegKey reg;  
         reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");  
         reg.SetDWORDValue("Port", atoi(Port) );  
           
         CString tmp;  
         m_Serial.GetWindowText(tmp);  
         reg.SetStringValue("Serial",tmp);  
         reg.Close();  
         StartTcp();  
 }  
   
268  void CH7ServerDlg::OnBnClickedTest()  void CH7ServerDlg::OnBnClickedTest()
269  {  {
270                    CWaitCursor wait;
271            //UpdateClient();
272  }  }
 bool CH7ServerDlg::ServerInit(void)  
 {  
         unsigned int i;  
         CRegKey reg;  
 // Sets values in baud-rate combo box    
         m_BaudRate.AddString("1200");                                    
         m_BaudRate.AddString("2400");                                    
         m_BaudRate.AddString("4800");   // Don't work, used for error test.                      
         m_BaudRate.AddString("9600");                                    
         m_BaudRate.AddString("19200");  
   
         unsigned long Baud;  
         CString GetBaud;  
         reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");  
         reg.QueryDWORDValue("BaudRate", Baud);  
   
         switch (Baud)  
         {  
         case 1200:  
                 m_BaudRate.SetCurSel(0);  
                 break;  
         case 2400:  
                 m_BaudRate.SetCurSel(1);  
                 break;  
         case 4800:  
                 m_BaudRate.SetCurSel(2);  
                 break;  
         case 9600:  
                 m_BaudRate.SetCurSel(3);  
                 break;  
         case 19200:  
                 m_BaudRate.SetCurSel(4);  
                 break;  
         default:  
                 m_BaudRate.SetCurSel(3);  
                 break;  
         }  
   
         m_BaudRate.GetWindowText(GetBaud);  
         reg.SetDWORDValue("BaudRate", atoi(GetBaud) );  
   
 // Checks how many COM ports there are.  
         std::vector<CString> Serial = GetAvailableComPorts();  
         for (i=0; i<Serial.size(); i++)  
                 m_Serial.AddString(Serial[i]);  
   
 // Load saved settings from regedit.  
         unsigned long Port;  
         unsigned long BaudRate;  
   
         // Used to format the loaded values.  
         CString TPort;  
         CString TBaudRate;  
   
         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);  
273    
         m_Port.SetWindowText(TPort);  
         m_BaudRate.SetWindowText(TBaudRate);  
         m_Serial.SetWindowText(LoadCom);  
   
         if( Serial.size() == 0 ){  
                 MessageBox( "No (free) serial port's found" );  
                 return false;  
         }  
 // Checks for valid COM port in regedit.  
         for (i=0; i< Serial.size() ; i++)  
         {  
                 if (LoadCom == Serial[i])  
                 {  
                         m_Serial.SetCurSel(i);  
                         break;  
                 }  
         }  
         if (i == Serial.size() )  
         {  
                 m_Serial.SetCurSel(0);  
                 reg.SetStringValue("Serial", Serial[0]);  
         }  
         reg.Close();  
         return true;  
 }  
274    
275  int CH7ServerDlg::StartSerial(void)  int CH7ServerDlg::StartSerial(void)
276  {  {
277          char SerialPort[6];          CString SerialPort;
278          unsigned long size = 6;          unsigned long size = 6;
279          unsigned long Baud;          unsigned long Baud;
280    
281    
282          CRegKey reg;          CRegKey reg;
283                    
284          reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");          reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");
   
         reg.QueryStringValue("Serial", SerialPort, &size);  
285          reg.QueryDWORDValue("BaudRate", Baud);          reg.QueryDWORDValue("BaudRate", Baud);
286            m_Serial.GetWindowText(SerialPort);
287    
288          HANDLE hComPort;  // Starter Serial forbindelsen, hvis den ikke allerede er startet.
289            if( m_First == 1 ){
290          hComPort = CreateFile( "COM1",                  Baud = 9600;
                                                                                 GENERIC_READ | GENERIC_WRITE,  
                                                                                 0,  
                                                                                 0,  
                                                                                 OPEN_EXISTING,  
                                                                                 FILE_ATTRIBUTE_NORMAL,  
                                                                                 0  
                                                                         );  
   
         // Error check.  
         if( hComPort == INVALID_HANDLE_VALUE ){  
                 WriteLastError("Fail\n%s\n");  
                 return 1;  
291          }          }
292            else
293            {
294                    int selected = m_BaudRate.GetCurSel();
295                    try
296                    {
297                            H7Serial.writeTarget(10,selected);
298                    }
299                    catch (std::exception e)
300                    {
301                            MessageBox("PIC could not use selected baudrate");
302                            return 0;
303    
   
         DCB dcb, dcb_restore;  
           
         // DCB structure for com port setup  
         dcb.DCBlength = sizeof(DCB);  
         dcb_restore.DCBlength = sizeof(DCB);  
   
         // Error check.  
         if( (!GetCommState(hComPort, &dcb)) ||  
                 (!GetCommState(hComPort, &dcb_restore)) ){  
                 WriteLastError("Fail\n%s\n");  
                 return 2;  
304                  }                  }
305                    switch (selected)
306                    {
307                    case 0:
308                            Baud = 1200;
309                            break;
310                    case 1:
311                            Baud = 2400;
312                            break;
313                    case 2:
314                            Baud = 4800;
315                            break;
316                    case 3:
317                            Baud = 9600;;
318                            break;
319                    case 4:
320                            Baud = 19200;
321                            break;
322    
323          // Init com port setup                  default: //this should not be possible, but ...
324          dcb.BaudRate            = Baud;                          Baud = 9600;
325          dcb.ByteSize            = 8;                          break;
326          dcb.Parity                      = NOPARITY;                  }
327          dcb.StopBits            = ONESTOPBIT;                  H7Serial.close();
         dcb.fDtrControl         = DTR_CONTROL_DISABLE;  
         dcb.fRtsControl         = RTS_CONTROL_DISABLE;  
         dcb.fParity                     = FALSE;  
         dcb.fDsrSensitivity = FALSE;  
   
         if( !SetCommState(hComPort,&dcb) ){  
                 WriteLastError("Fail\n%s\n");  
                 return 3;  
328          }          }
       
         // ready to send stuff...  
329    
330            if (!H7Serial.isOpen())
331                    H7Serial.open( SerialPort,Baud);
332            
333    
334          unsigned char receive;          m_First = false;
335          unsigned long rSize;  // Nulstiller LED's
336          CString Tmp;          H7Serial.writeTarget(LED3,OFF);
337          ReadFile(hComPort,&receive,1,&rSize,0);          H7Serial.writeTarget(LED4,OFF);
338          if( rSize != 1 ){          H7Serial.writeTarget(LED5,OFF);
339                  MessageBox( "Error when trying to receive date from serial port" );          return 0;
340                  return false;  }
         }  
         Tmp.Format( "%s", &receive );  
         m_Status.SetWindowText(Tmp);  
341    
342    void CH7ServerDlg::UpdateClient(TcpClientClass* caller)
343    {
344    // Updater status vindue.
345            const int sleep = 10;
346    
347            m_Status.SetWindowText("");
348            UpdateStatus( "LED3: ", caller->mLed3 );
349            //Sleep(sleep);
350            UpdateStatus( "LED4: ", caller->mLed4 );
351            //Sleep(sleep);
352            UpdateStatus( "LED5: ",caller->mLed5 );
353            ///Sleep(sleep);
354            UpdateStatus( "Switch2: ",caller->mSw2 );
355            //Sleep(sleep);
356            UpdateStatus( "Switch3: ", caller->mSw3 );
357            //Sleep(sleep);
358            UpdateStatus( "Potmeter: ", caller->mPot );
359            //Sleep(sleep);
360            UpdateStatus( "Temperatur: ", caller->mTemp );
361            //Sleep(sleep);
362    }
363    
364    void CH7ServerDlg::NewLine(void)
365    {
366            CString nLine = "";
367            m_Status.GetWindowText(nLine);
368            if( nLine.GetLength() != 0 )
369                    nLine += "\r\n";
370            m_Status.SetWindowText(nLine);
371    }
372    
373    CString CH7ServerDlg::OnOff(int value)
374    {
375            CString Test;
376            if( value == 0 )
377                    Test = "Slukket";
378            else
379                    Test = "Tændt";
380    
381          if( !SetCommState( hComPort, &dcb_restore ) ){          return CString(Test);
382                  WriteLastError("Fail\n%s\n");  }
                 return 4;  
         }  
383    
384    void CH7ServerDlg::UpdateStatus(CString name, short value)
385    {
386            CString tmp,StatusWindow;
387            tmp.Format( "%d", value );
388            m_Status.GetWindowText(StatusWindow);
389            StatusWindow += name;
390            StatusWindow += tmp;
391            m_Status.SetWindowText(StatusWindow);
392            NewLine();
393    
         return 0;  
394  }  }
395    
396    void CH7ServerDlg::OnBnClickedStop()
397    {
398    // Close TCP and Sreial connections
399            TcpServer.Close();
400            H7Serial.close();
401            // Close server app.
402            OnOK();
403    }
404    
405    void CH7ServerDlg::TcpStatus(void)
406    {
407            
408    }
409    

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

  ViewVC Help
Powered by ViewVC 1.1.20