#include #include #include SerialDlg::SerialDlg(void) { mInitHandler.setCallback(this,&SerialDlg::initHandler); mDestroyHandler.setCallback(this,&SerialDlg::destroyHandler); mCommandHandler.setCallback(this,&SerialDlg::commandHandler); mCloseHandler.setCallback(this,&SerialDlg::closeHandler); DWindow::insertHandler(VectorHandler::InitDialogHandler,&mInitHandler); DWindow::insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); DWindow::insertHandler(VectorHandler::CommandHandler,&mCommandHandler); DWindow::insertHandler(VectorHandler::CloseHandler,&mCloseHandler); } SerialDlg::~SerialDlg() { DWindow::removeHandler(VectorHandler::InitDialogHandler,&mInitHandler); DWindow::removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); DWindow::removeHandler(VectorHandler::CommandHandler,&mCommandHandler); DWindow::removeHandler(VectorHandler::CloseHandler,&mCloseHandler); } SerialDlg &SerialDlg::operator=(const SerialDlg &/*someSerialDlg*/) { // private implementation return *this; } BOOL SerialDlg::perform(GUIWindow &parentWindow) // ,SerialSettings &serialSettings) { return ::DialogBoxParam(processInstance(),(LPSTR)"SERIAL",(HWND)parentWindow,DWindow::DlgProc,(LPARAM)(DWindow*)this); } CallbackData::ReturnType SerialDlg::initHandler(CallbackData &/*someCallbackData*/) { mStatusBar=::new StatusBarEx(*this,StatusBarID); mStatusBar.disposition(PointerDisposition::Delete); initSerialSettings(); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType SerialDlg::destroyHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType SerialDlg::commandHandler(CallbackData &someCallbackData) { switch(someCallbackData.wmCommandID()) { case IDOK : if(applySerialSettings())endDialog(TRUE); break; case IDCANCEL : endDialog(FALSE); break; case SerialStopBits : case SerialParity : case SerialDataBits : case SerialBaud : case SerialPort : mStatusBar->setText(" "); break; case SerialApply : applySerialSettings(); break; case SerialReset : reset(); break; } return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType SerialDlg::closeHandler(CallbackData &/*someCallbackData*/) { return (CallbackData::ReturnType)FALSE; } void SerialDlg::initSerialSettings(void) { AppReg appReg; initPorts(); initBaud(); initDataBits(); initStopBits(); initParity(); sendMessage(SerialPort,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)appReg.getPort()); sendMessage(SerialBaud,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)appReg.getBaud()); sendMessage(SerialDataBits,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)appReg.getDataBits()); sendMessage(SerialParity,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)appReg.getParity()); sendMessage(SerialStopBits,CB_SELECTSTRING,-1,(LPARAM)(LPSTR)appReg.getStopBits()); } void SerialDlg::initPorts(void) { String strPort; CommControl commControl; Block ports; sendMessage(SerialPort,CB_RESETCONTENT,0,0L); commControl.enumerateDevices(ports); for(int index=0;indexsetText("Error opening port."); ::MessageBeep(0); return false; } if(!commControl.setDeviceControlBlock(strCommSettings)){mStatusBar->setText("Failed to apply settings.");return false;} sendMessage(SerialBaud,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strBaud); appReg.setBaud(strBaud); sendMessage(SerialDataBits,WM_GETTEXT,String::MaxString,(LPARAM)(LPSTR)strDataBits); appReg.setDataBits(strDataBits); currSel=sendMessage(SerialParity,CB_GETCURSEL,0,0L); sendMessage(SerialParity,CB_GETLBTEXT,0,(LPARAM)(LPSTR)strParity); if(String("None")==strParity)strParity="N"; else if(String("Odd")==strParity)strParity="O"; else if(String("Even")==strParity)strParity="E"; else if(String("Space")==strParity)strParity="S"; appReg.setParity(strParity); currSel=sendMessage(SerialStopBits,CB_GETCURSEL,0,0L); sendMessage(SerialStopBits,CB_GETLBTEXT,0,(LPARAM)(LPSTR)strStopBits); appReg.setStopBits(strStopBits); mStatusBar->setText("Settings have been applied."); return true; } void SerialDlg::reset() { AppReg appReg; CommControl commControl; Block deviceList; if(IDCANCEL==::MessageBox(*this,"Reset serial settings to default values?","Confirm",MB_OKCANCEL))return; commControl.enumerateDevices(deviceList); appReg.setBaud("19200"); appReg.setParity("N"); appReg.setDataBits("8"); appReg.setStopBits("1"); appReg.setPort(deviceList.size()?deviceList[0]:"COM1"); initSerialSettings(); } /*void SerialDlg::testDevice() { CommControl commControl; DeviceControlBlock dcb; if(!commControl.open(getCommPort())){mStatusBar->setText("Error opening port.");return;} if(!commControl.setDeviceControlBlock(getCommSettings())){mStatusBar->setText("Failed to apply settings.");return;} mStatusBar->setText("loading data..."); commControl.getDeviceControlBlock(dcb); dcb.dtrControl(DeviceControlBlock::DtrControlEnable); dcb.rtsControl(DeviceControlBlock::RtsControlEnable); commControl.setDeviceControlBlock(dcb); } */ /* void printDCB(CommControl &control,bool wait); bool getControlData(CommControl &control); Console console; DeviceControlBlock dcb; CommControl control; Block deviceList; String selDevice; String strPrompt; String strCommState="baud=19200 parity=N data=8 stop=1"; control.enumerateDevices(deviceList); for(int index=0;index strLines; FormatLines::hexasciiLines(strLines,rcvBuff,sizeof(rcvBuff)); for(int index=0;index