/[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 36 - (hide annotations) (download)
Thu Feb 1 09:21:43 2007 UTC (17 years, 4 months ago) by hedin
File size: 9085 byte(s)
GUI fix, and a few "features"
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     m_Stop.EnableWindow(false);
169     m_BaudRate.EnableWindow(false);
170 hedin 33 m_First = true;
171 hedin 3 /**********************************************************************/
172     return TRUE; // return TRUE unless you set the focus to a control
173     }
174    
175     void CH7ServerDlg::OnSysCommand(UINT nID, LPARAM lParam)
176     {
177     if ((nID & 0xFFF0) == IDM_ABOUTBOX)
178     {
179     CAboutDlg dlgAbout;
180     dlgAbout.DoModal();
181     }
182     else
183     {
184     CDialog::OnSysCommand(nID, lParam);
185     }
186     }
187    
188     // If you add a minimize button to your dialog, you will need the code below
189     // to draw the icon. For MFC applications using the document/view model,
190     // this is automatically done for you by the framework.
191    
192     void CH7ServerDlg::OnPaint()
193     {
194     if (IsIconic())
195     {
196     CPaintDC dc(this); // device context for painting
197    
198     SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
199    
200     // Center icon in client rectangle
201     int cxIcon = GetSystemMetrics(SM_CXICON);
202     int cyIcon = GetSystemMetrics(SM_CYICON);
203     CRect rect;
204     GetClientRect(&rect);
205     int x = (rect.Width() - cxIcon + 1) / 2;
206     int y = (rect.Height() - cyIcon + 1) / 2;
207    
208     // Draw the icon
209     dc.DrawIcon(x, y, m_hIcon);
210     }
211     else
212     {
213     CDialog::OnPaint();
214     }
215     }
216    
217     // The system calls this function to obtain the cursor to display while the user drags
218     // the minimized window.
219     HCURSOR CH7ServerDlg::OnQueryDragIcon()
220     {
221     return static_cast<HCURSOR>(m_hIcon);
222     }
223    
224 hedin 33 void CH7ServerDlg::OnBnClickedRestart()
225     {
226     StartSerial();
227     }
228    
229 hedin 3 void CH7ServerDlg::OnBnClickedStart()
230     {
231 hedin 19 // Add's user defined Baud-Rate to regedit before the server start.
232 hedin 6 CRegKey reg;
233 hedin 33 CString Baud = "9600";
234     // m_BaudRate.GetWindowText(Baud);
235 hedin 19
236     reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");
237 hedin 11 reg.SetDWORDValue("BaudRate", atoi(Baud) );
238    
239     StartTcp();
240 hedin 19 StartSerial();
241 hedin 36 m_Stop.EnableWindow(true);
242     m_Restart.EnableWindow(true);
243     m_BaudRate.EnableWindow(true);
244     m_StartB.EnableWindow(false);
245 hedin 35 //UpdateClient();
246 hedin 6 }
247    
248     int CH7ServerDlg::StartTcp(void)
249     {
250 hedin 19 // Get the TCP Port number from regedit.
251 hedin 33 CString Current_Port;
252 hedin 6 unsigned long Port;
253 hedin 33 m_Port.GetWindowText(Current_Port);
254 hedin 6 CRegKey reg;
255     reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");
256 hedin 33 reg.SetDWORDValue("Port",atoi(Current_Port) );
257 hedin 6 reg.QueryDWORDValue("Port", Port);
258 hedin 11 reg.Close();
259    
260 hedin 33 // Restarts the TCP Connection
261 hedin 8 TcpServer.Close();
262    
263 hedin 33 if (!TcpServer.Create(Port))
264     MessageBox("Crap");
265     if (!TcpServer.Listen())
266     MessageBox("Loads of crap");
267 hedin 11
268     // Prints TCP Port number to the status box.
269     CString tmp;
270     tmp.Format("%d", Port);
271     m_Port.SetWindowText(tmp);
272    
273 hedin 6 return 0;
274     }
275    
276 hedin 11 void CH7ServerDlg::OnBnClickedTest()
277 hedin 8 {
278 hedin 33 CWaitCursor wait;
279 hedin 35 //UpdateClient();
280 hedin 11 }
281    
282    
283 hedin 19 int CH7ServerDlg::StartSerial(void)
284     {
285 hedin 34 CString SerialPort;
286 hedin 19 unsigned long size = 6;
287     unsigned long Baud;
288 hedin 28
289 hedin 33
290 hedin 19 CRegKey reg;
291    
292     reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server");
293     reg.QueryDWORDValue("BaudRate", Baud);
294 hedin 34 m_Serial.GetWindowText(SerialPort);
295 hedin 19
296 hedin 28 // Starter Serial forbindelsen, hvis den ikke allerede er startet.
297 hedin 33 if( m_First == 1 ){
298     Baud = 9600;
299     }
300     else
301     {
302     int selected = m_BaudRate.GetCurSel();
303     try
304     {
305     H7Serial.writeTarget(10,selected);
306     }
307     catch (std::exception e)
308     {
309     MessageBox("PIC could not use selected baudrate");
310     return 0;
311    
312     }
313     switch (selected)
314     {
315     case 0:
316     Baud = 1200;
317     break;
318     case 1:
319     Baud = 2400;
320     break;
321     case 2:
322     Baud = 4800;
323     break;
324     case 3:
325     Baud = 9600;;
326     break;
327     case 4:
328     Baud = 19200;
329     break;
330    
331     default: //this should not be possible, but ...
332     Baud = 9600;
333     break;
334     }
335     H7Serial.close();
336     }
337    
338 hedin 28 if (!H7Serial.isOpen())
339 hedin 34 H7Serial.open( SerialPort,Baud);
340 hedin 33
341 hedin 19
342 hedin 33 m_First = false;
343     // Nulstiller LED's
344     H7Serial.writeTarget(LED3,OFF);
345     H7Serial.writeTarget(LED4,OFF);
346     H7Serial.writeTarget(LED5,OFF);
347     return 0;
348     }
349    
350 hedin 35 void CH7ServerDlg::UpdateClient(TcpClientClass* caller)
351 hedin 33 {
352 hedin 28 // Updater status vindue.
353 hedin 33 m_Status.SetWindowText("");
354 hedin 35 UpdateStatus( "LED3: ", caller->mLed3 );
355     UpdateStatus( "LED4: ", caller->mLed4 );
356     UpdateStatus( "LED5: ",caller->mLed5 );
357     UpdateStatus( "Switch2: ",caller->mSw2 );
358     UpdateStatus( "Switch3: ", caller->mSw3 );
359     UpdateStatus( "Potmeter: ", caller->mPot );
360     UpdateStatus( "Temperatur: ", caller->mTemp );
361 hedin 36
362 hedin 28 }
363 hedin 19
364 hedin 28 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 hedin 19
373 hedin 28 CString CH7ServerDlg::OnOff(int value)
374     {
375     CString Test;
376     if( value == 0 )
377     Test = "Slukket";
378     else
379     Test = "Tændt";
380 hedin 19
381 hedin 28 return CString(Test);
382     }
383 hedin 19
384 hedin 28 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 hedin 8 }
394 hedin 33
395     void CH7ServerDlg::OnBnClickedStop()
396     {
397     // Close TCP and Sreial connections
398     TcpServer.Close();
399     H7Serial.close();
400     // Close server app.
401     OnOK();
402     }
403    
404 hedin 36 void CH7ServerDlg::OnCancel()
405 hedin 33 {
406 hedin 36 TcpServer.Close();
407     H7Serial.close();
408     // Close server app.
409 hedin 33
410 hedin 36 CDialog::OnCancel();
411 hedin 33 }

  ViewVC Help
Powered by ViewVC 1.1.20