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));
}
Exemple #2
0
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;
}
Exemple #3
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;
}