-
1. Data: 2009-03-05 23:05:50
Temat: WinAPi serial port
Od: "cubah" <c...@t...pl>
Hello, mam podlaczony modul GSM do RS232, pod hyperterminalem po kazdym
wyslanym znaku "A" dostaje odpowiedz od modulka (znak ktory wyslalem).
Napisalem kod jak ponizej:
ok = ::WriteFile ( m_hCom, "A", 1, &len, NULL );
ASSERT( ok );
ASSERT( len == 1 );
::Sleep( 100 );
ok = ::ReadFile( m_hCom, buf, 1, &len, NULL );
ASSERT( ok );
ASSERT( len == 1 );
i kod zatrzymuje sie na funckji ReadFile.
Juz mnie trafia szukalem z 5 godzin co moze byc nie tak i nie wiem czemu
synchorniczny odczyt/zapis nie dziala skoro na stronie MSDN taki sposob
rekomenduja (ponad OVERLAPPED).
Kuba
-
2. Data: 2009-03-05 23:12:23
Temat: Re: WinAPi serial port
Od: "cubah" <c...@t...pl>
To otwarcie portu:
m_hCom = ::CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security attributes
OPEN_EXISTING,
0,
NULL );
// Driver setup = HT:
ok = ::SetupComm( m_hCom, 8192, 8192 );
ASSERT( ok );
DCB m_Dcb;
ok = ::GetCommState( m_hCom, &m_Dcb );
ASSERT( ok );
m_Dcb.fParity = 0; // no errors reported
m_Dcb.fBinary = TRUE;
// Flow ctrl:
m_Dcb.fInX = FALSE;
m_Dcb.fOutX = FALSE;
m_Dcb.fOutxCtsFlow = FALSE; // RTS/CTS
m_Dcb.fRtsControl = RTS_CONTROL_DISABLE;
m_Dcb.fOutxDsrFlow = FALSE; // DTR/DSR
m_Dcb.fDtrControl = DTR_CONTROL_DISABLE;
m_Dcb.BaudRate = CBR_19200;
m_Dcb.Parity = NOPARITY; // no parity
m_Dcb.StopBits = ONESTOPBIT;
m_Dcb.ByteSize = 8;
m_Dcb.fAbortOnError = 1;
m_Dcb.fDtrControl = 1;
m_Dcb.fTXContinueOnXoff = 1;
m_Dcb.fRtsControl = 1;
m_Dcb.XonLim = 80;
m_Dcb.XoffLim = 200;
ok = ::SetCommState( m_hCom, &m_Dcb );
ASSERT( ok );
COMMTIMEOUTS m_CommTimeouts;;
m_CommTimeouts.ReadIntervalTimeout = 10;
m_CommTimeouts.ReadTotalTimeoutConstant = 0;
m_CommTimeouts.ReadTotalTimeoutMultiplier = 0;
m_CommTimeouts.WriteTotalTimeoutConstant = 5000;
m_CommTimeouts.WriteTotalTimeoutMultiplier= 0;
ok = ::SetCommTimeouts( m_hCom, &m_CommTimeouts );
ASSERT( ok );
ok = SetCommMask( m_hCom, EV_RXCHAR | EV_ERR );
ASSERT( ok );
tu reszta kodu ktory juz przeslalem....
Użytkownik "cubah" <c...@t...pl> napisał w wiadomości
news:gopmcp$mik$1@mx1.internetia.pl...
> Hello, mam podlaczony modul GSM do RS232, pod hyperterminalem po kazdym
> wyslanym znaku "A" dostaje odpowiedz od modulka (znak ktory wyslalem).
> Napisalem kod jak ponizej:
>
> ok = ::WriteFile ( m_hCom, "A", 1, &len, NULL );
> ASSERT( ok );
> ASSERT( len == 1 );
> ::Sleep( 100 );
> ok = ::ReadFile( m_hCom, buf, 1, &len, NULL );
> ASSERT( ok );
> ASSERT( len == 1 );
>
> i kod zatrzymuje sie na funckji ReadFile.
>
> Juz mnie trafia szukalem z 5 godzin co moze byc nie tak i nie wiem czemu
> synchorniczny odczyt/zapis nie dziala skoro na stronie MSDN taki sposob
> rekomenduja (ponad OVERLAPPED).
>
> Kuba
>
>
>
-
3. Data: 2009-03-05 23:14:27
Temat: Re: WinAPi serial port
Od: "cubah" <c...@t...pl>
Użytkownik "cubah" <c...@t...pl> napisał w wiadomości
news:gopmcp$mik$1@mx1.internetia.pl...
> Hello, mam podlaczony modul GSM do RS232, pod hyperterminalem po kazdym
> wyslanym znaku "A" dostaje odpowiedz od modulka (znak ktory wyslalem).
> Napisalem kod jak ponizej:
>
> ok = ::WriteFile ( m_hCom, "A", 1, &len, NULL );
> ASSERT( ok );
> ASSERT( len == 1 );
> ::Sleep( 100 );
> ok = ::ReadFile( m_hCom, buf, 1, &len, NULL );
> ASSERT( ok );
> ASSERT( len == 1 );
>
> i kod zatrzymuje sie na funckji ReadFile.
>
> Juz mnie trafia szukalem z 5 godzin co moze byc nie tak i nie wiem czemu
> synchorniczny odczyt/zapis nie dziala skoro na stronie MSDN taki sposob
> rekomenduja (ponad OVERLAPPED).
>
> Kuba
>
Osobiscie podejrzewam, ze po fukcji WriteFile bajt jest wysylany przez
urzadzenie szybciej niz zacznie wykonywac sie funkcja ReadFIle. Ale z
drugiej strony to przeciez ten bajt laduje w buforze drivera (??) wiec
powinienem go odczytac?