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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 71 - (show 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 // 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 #include <vector>
9 #include "Define.h"
10
11 #ifdef _DEBUG
12 #define new DEBUG_NEW
13 #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()
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 // 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 DDX_Control(pDX, IDC_Start, m_StartB);
115 }
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 ON_BN_CLICKED(IDC_TEST, OnBnClickedTest)
124 ON_BN_CLICKED(IDC_RESTART, OnBnClickedRestart)
125 ON_BN_CLICKED(IDC_STOP, OnBnClickedStop)
126 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
161 // if there is no free com ports, the program shut down.
162 if (!ServerInit() )
163 {
164 OnOK();
165 return false;
166 }
167 m_Restart.EnableWindow(false);
168 m_Stop.EnableWindow(false)
169 /**********************************************************************/
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 void CH7ServerDlg::OnBnClickedRestart()
223 {
224 StartSerial();
225 }
226
227 void CH7ServerDlg::OnBnClickedStart()
228 {
229 StartTcp();
230 StartSerial();
231 m_Stop.EnableWindow(true);
232 m_Restart.EnableWindow(true);
233 m_StartB.EnableWindow(false);
234 }
235
236 int CH7ServerDlg::StartTcp(void)
237 {
238 // Get the TCP Port number from regedit.
239 CString Current_Port;
240 unsigned long Port;
241 m_Port.GetWindowText(Current_Port);
242 CRegKey reg;
243 reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");
244 reg.SetDWORDValue("Port",atoi(Current_Port) );
245 reg.QueryDWORDValue("Port", Port);
246 reg.Close();
247
248 // Restarts the TCP Connection
249 TcpServer.Close();
250
251 if (!TcpServer.Create(Port))
252 MessageBox("TCP Crap");
253 if (!TcpServer.Listen())
254 MessageBox("Loads of TCP crap");
255
256 // Prints TCP Port number to the status box.
257 CString Status = "TCP Port: ";
258 UpdateStatus(Status, Port);
259
260 return 0;
261 }
262
263 void CH7ServerDlg::OnBnClickedTest()
264 {
265 //CWaitCursor wait;
266 //UpdateClient();
267 }
268
269
270 int CH7ServerDlg::StartSerial(void)
271 {
272 int Baud;
273 int dBaud;
274 CString SerialPort;
275
276 Baud = m_BaudRate.GetCurSel();
277 m_Serial.GetWindowText(SerialPort);
278
279 switch (Baud)
280 {
281 case 0:
282 dBaud = 1200;
283 break;
284 case 1:
285 dBaud = 2400;
286 break;
287 case 2:
288 dBaud = 4800;
289 break;
290 case 3:
291 dBaud = 9600;
292 break;
293 case 4:
294 dBaud = 19200;
295 break;
296
297 default: //this should not be possible, but ...
298 dBaud = 9600;
299 break;
300 }
301
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 H7Serial.close();
313 H7Serial.open( SerialPort, dBaud );
314 }
315 else {
316 H7Serial.open( SerialPort, dBaud );
317 }
318
319 // Udskriver Serial Port og Baud Rate til Status vinduet.
320 UpdateStatus(SerialPort, dBaud);
321 /*
322 Sleep(50);
323
324
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 */
336
337 return 0;
338 }
339
340 void CH7ServerDlg::UpdateClient(TcpClientClass* caller)
341 {
342 // Updater status vindue.
343 m_Status.SetWindowText("");
344 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
352 }
353
354 void CH7ServerDlg::NewLine(void)
355 {
356 // Laver linieskift i Status vinduet.
357 CString nLine = "";
358 m_Status.GetWindowText(nLine);
359 if( nLine.GetLength() != 0 )
360 nLine += "\r\n";
361 m_Status.SetWindowText(nLine);
362 }
363
364 CString CH7ServerDlg::OnOff(int value)
365 {
366 // undersøger om LED3-5 er tændt eller slukket.
367 CString Test;
368 if( value == 0 )
369 Test = "Slukket";
370 else
371 Test = "Tændt";
372
373 return CString(Test);
374 }
375
376 void CH7ServerDlg::UpdateStatus(CString name, short value)
377 {
378 // Updater Status Vinduet.
379 CString Format,StatusWindow;
380 Format.Format( "%d", value );
381 m_Status.GetWindowText(StatusWindow);
382 StatusWindow += name;
383 StatusWindow += Format;
384 m_Status.SetWindowText(StatusWindow);
385 NewLine();
386 }
387
388 void CH7ServerDlg::OnBnClickedStop()
389 {
390 // Close TCP and Serial connections
391 TcpServer.Close();
392 H7Serial.close();
393 // Close server app.
394 OnOK();
395 }
396
397 void CH7ServerDlg::OnCancel()
398 {
399 // Lukker TCP og Serial corbindelserne, inden Serveren luller.
400 OnBnClickedStop();
401 // CDialog::OnCancel();
402 }
403
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