/[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 6 by hedin, Mon Jan 29 13:01:26 2007 UTC revision 34 by hedin, Wed Jan 31 17:32:22 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
13  #endif  #endif
14    
15    
16    void WriteLastError(char *format)
17    {
18            LPVOID lpMsgBuf;
19            FormatMessage(
20                    FORMAT_MESSAGE_ALLOCATE_BUFFER |
21                    FORMAT_MESSAGE_FROM_SYSTEM |
22                    FORMAT_MESSAGE_IGNORE_INSERTS,
23                    NULL,
24                    GetLastError(),
25                    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),      // Default language
26                    (LPTSTR) &lpMsgBuf,
27                    0,
28                    NULL
29            );
30            printf(format, lpMsgBuf);
31            CString Tmp;
32            Tmp.Format( "%s", lpMsgBuf);
33            MessageBox(0,Tmp,"",MB_OK);
34    }
35    
36      std::vector<CString> GetAvailableComPorts()      std::vector<CString> GetAvailableComPorts()
37      {      {
38          std::vector<CString> ports;          std::vector<CString> ports;
# Line 99  BEGIN_MESSAGE_MAP(CH7ServerDlg, CDialog) Line 120  BEGIN_MESSAGE_MAP(CH7ServerDlg, CDialog)
120          //}}AFX_MSG_MAP          //}}AFX_MSG_MAP
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)
124            ON_BN_CLICKED(IDC_STOP, OnBnClickedStop)
125  END_MESSAGE_MAP()  END_MESSAGE_MAP()
126    
127    
# Line 133  BOOL CH7ServerDlg::OnInitDialog() Line 156  BOOL CH7ServerDlg::OnInitDialog()
156    
157  /**********************************************************************/  /**********************************************************************/
158          // TODO: Add extra initialization here          // TODO: Add extra initialization here
159          // Sets values in baud-rate combo box            
160          m_BaudRate.AddString("1200");                                            // if there is no free com ports, the program shut down.
161          m_BaudRate.AddString("2400");                                            if (!ServerInit() )
162          m_BaudRate.AddString("4800");                                            {
163          m_BaudRate.AddString("9600");                                                    OnOK();
164          m_BaudRate.AddString("19200");                  return false;
165            }
166          std::vector<CString> Serial = GetAvailableComPorts();          m_First = true;
         for (int i=0;i<Serial.size();i++)  
                 m_Serial.AddString(Serial[i]);  
         m_Serial.SetCurSel(0);  
   
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 198  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.
228          CRegKey reg;          CRegKey reg;
229            CString Baud = "9600";
230    //      m_BaudRate.GetWindowText(Baud);
231    
232          reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");          reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");
233          unsigned long Port;          reg.SetDWORDValue("BaudRate", atoi(Baud) );
         reg.QueryDWORDValue("Port", Port);  
234    
235          CString tmp;          StartTcp();
236          tmp.Format("%d", Port);          StartSerial();
237          m_Port.SetWindowText(tmp);          UpdateClient();
238  }  }
239    
240  int CH7ServerDlg::StartTcp(void)  int CH7ServerDlg::StartTcp(void)
241  {  {
242    // 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          TcpServer.Create(Port);          reg.Close();
251          TcpServer.Listen();  
252    // Restarts the TCP Connection
253            TcpServer.Close();
254    
255            if (!TcpServer.Create(Port))
256                    MessageBox("Crap");
257            if (!TcpServer.Listen())
258                    MessageBox("Loads of crap");
259    
260    // Prints TCP Port number to the status box.
261            CString tmp;
262            tmp.Format("%d", Port);
263            m_Port.SetWindowText(tmp);
264    
265          return 0;          return 0;
266  }  }
267    
268  void CH7ServerDlg::OnBnClickedTest()  void CH7ServerDlg::OnBnClickedTest()
269  {  {
270          //**************** <TCP Port section> ****************/          CWaitCursor wait;
271          CString Port = "";          UpdateClient();
272            }
273          m_Port.GetWindowText(Port);  
274  // Saving Port number in regedit as int  
275    int CH7ServerDlg::StartSerial(void)
276    {
277            CString SerialPort;
278            unsigned long size = 6;
279            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");
285          reg.SetDWORDValue("Port", atoi(Port) );          reg.QueryDWORDValue("BaudRate", Baud);
286          reg.Close();          m_Serial.GetWindowText(SerialPort);
287  // Debug info to the status edit box.  
288          m_Status.SetWindowText(Port);  // Starter Serial forbindelsen, hvis den ikke allerede er startet.
289  //**************** </TCP Port section> ****************/          if( m_First == 1 ){
290          StartTcp();                  Baud = 9600;
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    
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                    default: //this should not be possible, but ...
324                            Baud = 9600;
325                            break;
326                    }
327                    H7Serial.close();
328            }
329    
330            if (!H7Serial.isOpen())
331                    H7Serial.open( SerialPort,Baud);
332            
333    
334            m_First = false;
335    // Nulstiller LED's
336            H7Serial.writeTarget(LED3,OFF);
337            H7Serial.writeTarget(LED4,OFF);
338            H7Serial.writeTarget(LED5,OFF);
339            return 0;
340    }
341    
342    void CH7ServerDlg::UpdateClient(void)
343    {
344    // Updater status vindue.
345            const int sleep = 10;
346    
347            m_Status.SetWindowText("");
348            UpdateStatus( "LED3: ",H7Serial.readTarget(0) );
349            Sleep(sleep);
350            UpdateStatus( "LED4: ",H7Serial.readTarget(1) );
351            Sleep(sleep);
352            UpdateStatus( "LED5: ",H7Serial.readTarget(2) );
353            Sleep(sleep);
354            UpdateStatus( "Switch2: ",H7Serial.readTarget(3) );
355            Sleep(sleep);
356            UpdateStatus( "Switch3: ", H7Serial.readTarget(4) );
357            Sleep(sleep);
358            UpdateStatus( "Potmeter: ", H7Serial.readTarget(5) );
359            Sleep(sleep);
360            UpdateStatus( "Temperatur: ", H7Serial.readTarget(6) );
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            return CString(Test);
382    }
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    
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.6  
changed lines
  Added in v.34

  ViewVC Help
Powered by ViewVC 1.1.20