--- trunk/H7 Server/H7 ServerDlg.cpp 2007/01/29 10:52:02 5 +++ trunk/H7 Server/H7 ServerDlg.cpp 2007/01/31 17:22:59 33 @@ -5,12 +5,61 @@ #include "H7 Server.h" #include "H7 ServerDlg.h" #include ".\h7 serverdlg.h" +#include +#include "Define.h" #ifdef _DEBUG #define new DEBUG_NEW #endif +void WriteLastError(char *format) +{ + LPVOID lpMsgBuf; + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language + (LPTSTR) &lpMsgBuf, + 0, + NULL + ); + printf(format, lpMsgBuf); + CString Tmp; + Tmp.Format( "%s", lpMsgBuf); + MessageBox(0,Tmp,"",MB_OK); +} + + std::vector GetAvailableComPorts() + { + std::vector ports; + + for (int i = 1; i < 20; i++) + { + CString port; + port.Format("COM%d", i); + + + HANDLE handle = CreateFile(port, + GENERIC_READ | GENERIC_WRITE, + 0, + 0, + OPEN_EXISTING, + 0, + NULL); + + if (handle != INVALID_HANDLE_VALUE) + { + CloseHandle(handle); + ports.push_back(port); + } + } + return ports; + } + // CAboutDlg dialog used for App About class CAboutDlg : public CDialog @@ -70,6 +119,9 @@ ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_Start, OnBnClickedStart) + ON_BN_CLICKED(IDC_TEST, OnBnClickedTest) + ON_BN_CLICKED(IDC_RESTART, OnBnClickedRestart) + ON_BN_CLICKED(IDC_STOP, OnBnClickedStop) END_MESSAGE_MAP() @@ -104,8 +156,14 @@ /**********************************************************************/ // TODO: Add extra initialization here - - + + // if there is no free com ports, the program shut down. + if (!ServerInit() ) + { + OnOK(); + return false; + } + m_First = true; /**********************************************************************/ return TRUE; // return TRUE unless you set the focus to a control } @@ -159,28 +217,193 @@ return static_cast(m_hIcon); } +void CH7ServerDlg::OnBnClickedRestart() +{ + StartSerial(); +} + void CH7ServerDlg::OnBnClickedStart() { - CString Port = NULL; - CString Tmp; - m_Port.GetWindowText(Port); +// Add's user defined Baud-Rate to regedit before the server start. CRegKey reg; + CString Baud = "9600"; +// m_BaudRate.GetWindowText(Baud); + reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server"); - reg.SetStringValue("Port",Port); + reg.SetDWORDValue("BaudRate", atoi(Baud) ); + + StartTcp(); + StartSerial(); + UpdateClient(); +} + +int CH7ServerDlg::StartTcp(void) +{ +// Get the TCP Port number from regedit. + CString Current_Port; + unsigned long Port; + m_Port.GetWindowText(Current_Port); + CRegKey reg; + reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server"); + reg.SetDWORDValue("Port",atoi(Current_Port) ); + reg.QueryDWORDValue("Port", Port); reg.Close(); +// Restarts the TCP Connection + TcpServer.Close(); + + if (!TcpServer.Create(Port)) + MessageBox("Crap"); + if (!TcpServer.Listen()) + MessageBox("Loads of crap"); + +// Prints TCP Port number to the status box. + CString tmp; + tmp.Format("%d", Port); + m_Port.SetWindowText(tmp); - m_Status.SetWindowText(Port); + return 0; } -/*CString CH7ServerDlg::SetTcpPort(CString Port) -{ - CString Tmp; - m_Port.GetWindowText(Tmp); -// if( Tmp ) -// Port = atoi(Tmp); - MessageBox(Port); +void CH7ServerDlg::OnBnClickedTest() +{ + CWaitCursor wait; + UpdateClient(); +} + + +int CH7ServerDlg::StartSerial(void) +{ + char SerialPort[6]; + unsigned long size = 6; + unsigned long Baud; + + + CRegKey reg; + + reg.Create(HKEY_LOCAL_MACHINE, "SOFTWARE\\Projekt\\Server"); + reg.QueryStringValue("Serial", SerialPort, &size); + reg.QueryDWORDValue("BaudRate", Baud); + +// Starter Serial forbindelsen, hvis den ikke allerede er startet. + if( m_First == 1 ){ + Baud = 9600; + } + else + { + int selected = m_BaudRate.GetCurSel(); + try + { + H7Serial.writeTarget(10,selected); + } + catch (std::exception e) + { + MessageBox("PIC could not use selected baudrate"); + return 0; - return Port; + } + switch (selected) + { + case 0: + Baud = 1200; + break; + case 1: + Baud = 2400; + break; + case 2: + Baud = 4800; + break; + case 3: + Baud = 9600;; + break; + case 4: + Baud = 19200; + break; + + default: //this should not be possible, but ... + Baud = 9600; + break; + } + H7Serial.close(); + } + + if (!H7Serial.isOpen()) + H7Serial.open(SerialPort,Baud); + + + m_First = false; +// Nulstiller LED's + H7Serial.writeTarget(LED3,OFF); + H7Serial.writeTarget(LED4,OFF); + H7Serial.writeTarget(LED5,OFF); + return 0; +} + +void CH7ServerDlg::UpdateClient(void) +{ +// Updater status vindue. + const int sleep = 10; + + m_Status.SetWindowText(""); + UpdateStatus( "LED3: ",H7Serial.readTarget(0) ); + Sleep(sleep); + UpdateStatus( "LED4: ",H7Serial.readTarget(1) ); + Sleep(sleep); + UpdateStatus( "LED5: ",H7Serial.readTarget(2) ); + Sleep(sleep); + UpdateStatus( "Switch2: ",H7Serial.readTarget(3) ); + Sleep(sleep); + UpdateStatus( "Switch3: ", H7Serial.readTarget(4) ); + Sleep(sleep); + UpdateStatus( "Potmeter: ", H7Serial.readTarget(5) ); + Sleep(sleep); + UpdateStatus( "Temperatur: ", H7Serial.readTarget(6) ); + Sleep(sleep); +} + +void CH7ServerDlg::NewLine(void) +{ + CString nLine = ""; + m_Status.GetWindowText(nLine); + if( nLine.GetLength() != 0 ) + nLine += "\r\n"; + m_Status.SetWindowText(nLine); } -*/ \ No newline at end of file + +CString CH7ServerDlg::OnOff(int value) +{ + CString Test; + if( value == 0 ) + Test = "Slukket"; + else + Test = "Tændt"; + + return CString(Test); +} + +void CH7ServerDlg::UpdateStatus(CString name, short value) +{ + CString tmp,StatusWindow; + tmp.Format( "%d", value ); + m_Status.GetWindowText(StatusWindow); + StatusWindow += name; + StatusWindow += tmp; + m_Status.SetWindowText(StatusWindow); + NewLine(); + +} + +void CH7ServerDlg::OnBnClickedStop() +{ +// Close TCP and Sreial connections + TcpServer.Close(); + H7Serial.close(); + // Close server app. + OnOK(); +} + +void CH7ServerDlg::TcpStatus(void) +{ + +} +