void FlashTool::enterBootloader() { CSerial serial; if(!serial.Open(ui->ucPortBox->itemData(ui->ucPortBox->currentIndex()).toString())) { QMessageBox::critical(this, "Error", "Could not open serial port."); return; } serial.Setup(CSerial::EBaud115200); serial.SetupHandshaking(CSerial::EHandshakeOff); serial.SetEventChar(0x0D); int version; proto::SimplePacket<proto::CMD_INIT> init; for(version = 0; version <= proto::VERSION+10; ++version) { init.header.version = version; init.checksum = proto::packetChecksum(init.header, 0); serial.write(&init, sizeof(init)); if(serial.WaitEvent(200) == ERROR_SUCCESS) break; } proto::Packet<proto::CMD_RESET, proto::Reset> reset; reset.header.version = version; memcpy(&reset.payload.key, proto::RESET_KEY, sizeof(proto::RESET_KEY)); reset.updateChecksum(); serial.write(&reset, sizeof(reset)); }
int WINAPI _tWinMain (HINSTANCE /*hInst*/, HINSTANCE /*hInstPrev*/, LPTSTR /*lptszCmdLine*/, int /*nCmdShow*/) { CSerial serial; LONG lLastError = ERROR_SUCCESS; // Attempt to open the serial port (COM1) lLastError = serial.Open(_T("COM1"),0,0,false); if (lLastError != ERROR_SUCCESS) return ::ShowError(serial.GetLastError(), _T("Unable to open COM-port")); // Setup the serial port (9600,N81) using hardware handshaking lLastError = serial.Setup(CSerial::EBaud9600,CSerial::EData8,CSerial::EParNone,CSerial::EStop1); if (lLastError != ERROR_SUCCESS) return ::ShowError(serial.GetLastError(), _T("Unable to set COM-port setting")); // Setup handshaking lLastError = serial.SetupHandshaking(CSerial::EHandshakeHardware); if (lLastError != ERROR_SUCCESS) return ::ShowError(serial.GetLastError(), _T("Unable to set COM-port handshaking")); // The serial port is now ready and we can send/receive data. If // the following call blocks, then the other side doesn't support // hardware handshaking. lLastError = serial.Write("1\n"); if (lLastError != ERROR_SUCCESS) return ::ShowError(serial.GetLastError(), _T("Unable to send data")); // Close the port again serial.Close(); return 0; }
int SerialSetup (CSerial::EBaudrate baud, CSerial::EDataBits data, CSerial::EParity par, CSerial::EStopBits stop, CSerial::EHandshake handshake) { // Attempt to open the serial port (COM1) lLastError = serial.Open(_T("COM1"),0,0,false); if (lLastError != ERROR_SUCCESS) return ::ShowError(serial.GetLastError(), _T("Unable to open COM-port")); // Setup the serial port (9600,N81) using hardware handshaking lLastError = serial.Setup(baud, data, par, stop); if (lLastError != ERROR_SUCCESS) return ::ShowError(serial.GetLastError(), _T("Unable to set COM-port setting")); // Setup handshaking lLastError = serial.SetupHandshaking(handshake); if (lLastError != ERROR_SUCCESS) return ::ShowError(serial.GetLastError(), _T("Unable to set COM-port handshaking")); // if no error return 0; }