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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 71 - (hide annotations) (download)
Mon Feb 12 09:59:36 2007 UTC (17 years, 3 months ago) by hedin
File size: 8885 byte(s)
Made some cleanup and added a few comments.
1 hedin 3 // H7 ServerDlg.cpp : implementation file
2     //
3    
4     #include "stdafx.h"
5     #include "H7 Server.h"
6     #include "H7 ServerDlg.h"
7     #include ".\h7 serverdlg.h"
8 hedin 6 #include <vector>
9 hedin 28 #include "Define.h"
10 hedin 3
11     #ifdef _DEBUG
12     #define new DEBUG_NEW
13     #endif
14    
15    
16 hedin 19 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 hedin 6 std::vector<CString> GetAvailableComPorts()
37     {
38     std::vector<CString> ports;
39    
40     for (int i = 1; i < 20; i++)
41     {
42     CString port;
43     port.Format("COM%d", i);
44    
45    
46     HANDLE handle = CreateFile(port,
47     GENERIC_READ | GENERIC_WRITE,
48     0,
49     0,
50     OPEN_EXISTING,
51     0,
52     NULL);
53    
54     if (handle != INVALID_HANDLE_VALUE)
55     {
56     CloseHandle(handle);
57     ports.push_back(port);
58     }
59     }
60     return ports;
61     }
62    
63 hedin 3 // CAboutDlg dialog used for App About
64    
65     class CAboutDlg : public CDialog
66     {
67     public:
68     CAboutDlg();
69    
70     // Dialog Data
71     enum { IDD = IDD_ABOUTBOX };
72    
73     protected:
74     virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
75    
76     // Implementation
77     protected:
78     DECLARE_MESSAGE_MAP()
79     };
80    
81     CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
82     {
83     }
84    
85     void CAboutDlg::DoDataExchange(CDataExchange* pDX)
86     {
87     CDialog::DoDataExchange(pDX);
88     }
89    
90     BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
91     END_MESSAGE_MAP()
92    
93    
94     // CH7ServerDlg dialog
95    
96    
97    
98     CH7ServerDlg::CH7ServerDlg(CWnd* pParent /*=NULL*/)
99     : CDialog(CH7ServerDlg::IDD, pParent)
100     , m_Start(0)
101     {
102     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
103     }
104    
105     void CH7ServerDlg::DoDataExchange(CDataExchange* pDX)
106     {
107     CDialog::DoDataExchange(pDX);
108     DDX_Control(pDX, IDC_STATUS, m_Status);
109     DDX_Control(pDX, IDC_BaudRate, m_BaudRate);
110     DDX_Control(pDX, IDC_SERIAL, m_Serial);
111     DDX_Control(pDX, IDC_STOP, m_Stop);
112     DDX_Control(pDX, IDC_PORT, m_Port);
113     DDX_Control(pDX, IDC_RESTART, m_Restart);
114 hedin 36 DDX_Control(pDX, IDC_Start, m_StartB);
115 hedin 3 }
116    
117     BEGIN_MESSAGE_MAP(CH7ServerDlg, CDialog)
118     ON_WM_SYSCOMMAND()
119     ON_WM_PAINT()
120     ON_WM_QUERYDRAGICON()
121     //}}AFX_MSG_MAP
122     ON_BN_CLICKED(IDC_Start, OnBnClickedStart)
123 hedin 6 ON_BN_CLICKED(IDC_TEST, OnBnClickedTest)
124 hedin 8 ON_BN_CLICKED(IDC_RESTART, OnBnClickedRestart)
125 hedin 33 ON_BN_CLICKED(IDC_STOP, OnBnClickedStop)
126 hedin 3 END_MESSAGE_MAP()
127    
128    
129     // CH7ServerDlg message handlers
130    
131     BOOL CH7ServerDlg::OnInitDialog()
132     {
133     CDialog::OnInitDialog();
134    
135     // Add "About..." menu item to system menu.
136    
137     // IDM_ABOUTBOX must be in the system command range.
138     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
139     ASSERT(IDM_ABOUTBOX < 0xF000);
140    
141     CMenu* pSysMenu = GetSystemMenu(FALSE);
142     if (pSysMenu != NULL)
143     {
144     CString strAboutMenu;
145     strAboutMenu.LoadString(IDS_ABOUTBOX);
146     if (!strAboutMenu.IsEmpty())
147     {
148     pSysMenu->AppendMenu(MF_SEPARATOR);
149     pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
150     }
151     }
152    
153     // Set the icon for this dialog. The framework does this automatically
154     // when the application's main window is not a dialog
155     SetIcon(m_hIcon, TRUE); // Set big icon
156     SetIcon(m_hIcon, FALSE); // Set small icon
157    
158     /**********************************************************************/
159     // TODO: Add extra initialization here
160 hedin 8
161 hedin 19 // if there is no free com ports, the program shut down.
162     if (!ServerInit() )
163     {
164     OnOK();
165     return false;
166     }
167 hedin 36 m_Restart.EnableWindow(false);
168 hedin 71 m_Stop.EnableWindow(false)
169 hedin 3 /**********************************************************************/
170     return TRUE; // return TRUE unless you set the focus to a control
171     }
172    
173     void CH7ServerDlg::OnSysCommand(UINT nID, LPARAM lParam)
174     {
175     if ((nID & 0xFFF0) == IDM_ABOUTBOX)
176     {
177     CAboutDlg dlgAbout;
178     dlgAbout.DoModal();
179     }
180     else
181     {
182     CDialog::OnSysCommand(nID, lParam);
183     }
184     }
185    
186     // If you add a minimize button to your dialog, you will need the code below
187     // to draw the icon. For MFC applications using the document/view model,
188     // this is automatically done for you by the framework.
189    
190     void CH7ServerDlg::OnPaint()
191     {
192     if (IsIconic())
193     {
194     CPaintDC dc(this); // device context for painting
195    
196     SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
197    
198     // Center icon in client rectangle
199     int cxIcon = GetSystemMetrics(SM_CXICON);
200     int cyIcon = GetSystemMetrics(SM_CYICON);
201     CRect rect;
202     GetClientRect(&rect);
203     int x = (rect.Width() - cxIcon + 1) / 2;
204     int y = (rect.Height() - cyIcon + 1) / 2;
205    
206     // Draw the icon
207     dc.DrawIcon(x, y, m_hIcon);
208     }
209     else
210     {
211     CDialog::OnPaint();
212     }
213     }
214    
215     // The system calls this function to obtain the cursor to display while the user drags
216     // the minimized window.
217     HCURSOR CH7ServerDlg::OnQueryDragIcon()
218     {
219     return static_cast<HCURSOR>(m_hIcon);
220     }
221    
222 hedin 33 void CH7ServerDlg::OnBnClickedRestart()
223     {
224     StartSerial();
225     }
226    
227 hedin 3 void CH7ServerDlg::OnBnClickedStart()
228     {
229 hedin 65 StartTcp();
230 hedin 19 StartSerial();
231 hedin 36 m_Stop.EnableWindow(true);
232     m_Restart.EnableWindow(true);
233     m_StartB.EnableWindow(false);
234 hedin 6 }
235    
236     int CH7ServerDlg::StartTcp(void)
237     {
238 hedin 19 // Get the TCP Port number from regedit.
239 hedin 33 CString Current_Port;
240 hedin 6 unsigned long Port;
241 hedin 33 m_Port.GetWindowText(Current_Port);
242 hedin 6 CRegKey reg;
243     reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");
244 hedin 33 reg.SetDWORDValue("Port",atoi(Current_Port) );
245 hedin 6 reg.QueryDWORDValue("Port", Port);
246 hedin 11 reg.Close();
247    
248 hedin 33 // Restarts the TCP Connection
249 hedin 8 TcpServer.Close();
250    
251 hedin 33 if (!TcpServer.Create(Port))
252 hedin 65 MessageBox("TCP Crap");
253 hedin 33 if (!TcpServer.Listen())
254 hedin 65 MessageBox("Loads of TCP crap");
255 hedin 11
256     // Prints TCP Port number to the status box.
257 hedin 65 CString Status = "TCP Port: ";
258     UpdateStatus(Status, Port);
259 hedin 11
260 hedin 6 return 0;
261     }
262    
263 hedin 11 void CH7ServerDlg::OnBnClickedTest()
264 hedin 8 {
265 hedin 39 //CWaitCursor wait;
266 hedin 35 //UpdateClient();
267 hedin 11 }
268    
269    
270 hedin 19 int CH7ServerDlg::StartSerial(void)
271     {
272 hedin 64 int Baud;
273     int dBaud;
274 hedin 34 CString SerialPort;
275 hedin 28
276 hedin 64 Baud = m_BaudRate.GetCurSel();
277 hedin 34 m_Serial.GetWindowText(SerialPort);
278 hedin 19
279 hedin 64 switch (Baud)
280 hedin 33 {
281     case 0:
282 hedin 64 dBaud = 1200;
283 hedin 33 break;
284     case 1:
285 hedin 64 dBaud = 2400;
286 hedin 33 break;
287     case 2:
288 hedin 64 dBaud = 4800;
289 hedin 33 break;
290     case 3:
291 hedin 64 dBaud = 9600;
292 hedin 33 break;
293     case 4:
294 hedin 64 dBaud = 19200;
295 hedin 33 break;
296    
297     default: //this should not be possible, but ...
298 hedin 64 dBaud = 9600;
299 hedin 33 break;
300     }
301 hedin 64
302     if( H7Serial.isOpen() ){
303     try
304     {
305     H7Serial.writeTarget(10, Baud);
306     }
307     catch (std::exception e)
308     {
309     MessageBox( "Pic could not use selected baud rate." );
310     return 0;
311     }
312 hedin 33 H7Serial.close();
313 hedin 64 H7Serial.open( SerialPort, dBaud );
314 hedin 33 }
315 hedin 64 else {
316     H7Serial.open( SerialPort, dBaud );
317     }
318 hedin 33
319 hedin 65 // Udskriver Serial Port og Baud Rate til Status vinduet.
320     UpdateStatus(SerialPort, dBaud);
321     /*
322 hedin 64 Sleep(50);
323 hedin 19
324 hedin 64
325     try {
326     int pot = H7Serial.readTarget(5);
327     CString debug;
328     debug.Format("%d", pot);
329     MessageBox(debug);
330     }
331     catch (...)
332     {
333     MessageBox("Major fuck-up");
334     }
335 hedin 65 */
336 hedin 64
337     return 0;
338 hedin 33 }
339    
340 hedin 35 void CH7ServerDlg::UpdateClient(TcpClientClass* caller)
341 hedin 33 {
342 hedin 28 // Updater status vindue.
343 hedin 33 m_Status.SetWindowText("");
344 hedin 35 UpdateStatus( "LED3: ", caller->mLed3 );
345     UpdateStatus( "LED4: ", caller->mLed4 );
346     UpdateStatus( "LED5: ",caller->mLed5 );
347     UpdateStatus( "Switch2: ",caller->mSw2 );
348     UpdateStatus( "Switch3: ", caller->mSw3 );
349     UpdateStatus( "Potmeter: ", caller->mPot );
350     UpdateStatus( "Temperatur: ", caller->mTemp );
351 hedin 36
352 hedin 28 }
353 hedin 19
354 hedin 28 void CH7ServerDlg::NewLine(void)
355     {
356 hedin 39 // Laver linieskift i Status vinduet.
357 hedin 28 CString nLine = "";
358     m_Status.GetWindowText(nLine);
359     if( nLine.GetLength() != 0 )
360     nLine += "\r\n";
361     m_Status.SetWindowText(nLine);
362     }
363 hedin 19
364 hedin 28 CString CH7ServerDlg::OnOff(int value)
365     {
366 hedin 39 // undersøger om LED3-5 er tændt eller slukket.
367 hedin 28 CString Test;
368     if( value == 0 )
369     Test = "Slukket";
370     else
371     Test = "Tændt";
372 hedin 19
373 hedin 28 return CString(Test);
374     }
375 hedin 19
376 hedin 28 void CH7ServerDlg::UpdateStatus(CString name, short value)
377     {
378 hedin 71 // Updater Status Vinduet.
379 hedin 65 CString Format,StatusWindow;
380     Format.Format( "%d", value );
381 hedin 28 m_Status.GetWindowText(StatusWindow);
382     StatusWindow += name;
383 hedin 65 StatusWindow += Format;
384 hedin 28 m_Status.SetWindowText(StatusWindow);
385     NewLine();
386 hedin 8 }
387 hedin 33
388     void CH7ServerDlg::OnBnClickedStop()
389     {
390 hedin 71 // Close TCP and Serial connections
391 hedin 33 TcpServer.Close();
392     H7Serial.close();
393     // Close server app.
394     OnOK();
395     }
396    
397 hedin 36 void CH7ServerDlg::OnCancel()
398 hedin 33 {
399 hedin 71 // Lukker TCP og Serial corbindelserne, inden Serveren luller.
400     OnBnClickedStop();
401     // CDialog::OnCancel();
402 hedin 33 }
403 hedin 39
404    
405    
406    
407    
408    
409    
410    
411    
412    
413    
414    
415    
416    
417    
418    
419    
420    
421    
422    
423    
424    
425    
426    
427    
428    
429    
430    
431    
432    
433    
434    
435    
436    
437    
438    
439    
440    
441    
442    
443    
444    
445    
446    
447    
448    

  ViewVC Help
Powered by ViewVC 1.1.20