Poniżej kod
#include <iostream>
#include <windows.h>
using namespace std;
string kodyBledowSystemu( DWORD numer_bledu );
void kontrolaSukcesu( BOOL sukcesu );
HANDLE hPort;
int main()
{
hPort = CreateFile( "COM4", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL ); // Proba otwarcia portu,
if( hPort == INVALID_HANDLE_VALUE ) // Sprawdzenie czy uzyskalismy dostep do portu,
{
cout << "BRAK DOSTEPU DO PORTU" << endl;
}
else
{
cout << "UZYSKANO DOSTEP DO PORTU COM" << endl;
BOOL sukces = 0; // Flaga czy osiagnieto sukces operacji,
COMSTAT comStat;
DWORD Errors = 0;
sukces = ClearCommError( hPort, & Errors, & comStat ); // Pobranie aktualnych danych na temat stanu portu COM,
kontrolaSukcesu( sukces );
cout << "Bufor odbiorczy: " << comStat.cbInQue << endl;
cout << "Bufor nadawczy: " << comStat.cbOutQue << endl;
sukces = ClearCommError( hPort, & Errors, & comStat ); // Pobranie aktualnych danych na temat stanu portu COM,
kontrolaSukcesu( sukces );
sukces = TransmitCommChar( hPort, 'r' );
Sleep( 1 );
kontrolaSukcesu( sukces );
cout << "Wysyl pojedynczego znaku :" << sukces << endl;
sukces = ClearCommError( hPort, & Errors, & comStat ); // Pobranie aktualnych danych na temat stanu portu COM,
cout << "Bufor odbiorczy: " << comStat.cbInQue << endl;
cout << "Bufor nadawczy: " << comStat.cbOutQue << endl;
kontrolaSukcesu( sukces );
}
return 0;
}
// #######################################################################################################################
string kodyBledowSystemu( DWORD numer_bledu )
{
switch( numer_bledu )
{
case 1:
return "ERROR_INVALID_FUNCTION";
}
}
// #######################################################################################################################
void kontrolaSukcesu( BOOL sukces )
{
// Jesli poprzednia operacja nie zakonczyla sie powodzeniem to..
if( !sukces )
{
DWORD numer_bledu = GetLastError();
string nazwa_bledu = kodyBledowSystemu( numer_bledu );
if( nazwa_bledu == "NOWY BLAD" )
{
cout << endl;
cout << "-----------------------------------------------" << endl;
cout << "Nowy blad o numerze: " << numer_bledu << endl;
cout << "Dokonaj nowego wpisu bledu do pamieci!!!" << endl;
cout << "--------------------THE END--------------------" << endl;
system( "pause" );
exit( 0 );
}
else
{
cout << endl;
cout << "-----------------------------------------------" << endl;
cout << "NUMER BLEDU: " << numer_bledu << endl;
cout << "NAZWA BLEDU: " << nazwa_bledu << endl;
cout << "--------------------THE END--------------------" << endl;
system( "pause" );
exit( 0 );
}
}
else
{
cout << "Wszystko jest ok" << endl;
}
}
Program wywala błąd ERROR_INVALID_FUNCTION
i nie mam pojęcia z jakiego powodu. Uprzedzam pytanie dlaczego nie użyję funkcji WriteFile
. Używam ale chciałem sprawdzić również działanie TransmitCommChar
a ona nie działa.
Nie wiem czy jest jakiś błąd w parametrach otwarcia portu COM4 albo parametrów wysyłanej ramki.
Proszę o sugestię gdzie szukać błędu.
Port pracuje jako standardowy port szeregowy przez łącze Bluetooth. Nie wiem czy to może mieć wpływ.