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.