Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # include <stdio.h>
- # include <windows.h>
- # include <conio.h>
- #include <string.h>
- int strl=0;
- void zobrazit(HANDLE hCom,HANDLE hConsole,DCB & PortDCB);
- void timeouty(HANDLE hCom,HANDLE hConsole);
- int main()
- {
- HANDLE hConsole;
- hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
- SetConsoleTextAttribute(hConsole,14);
- // otvorenie portu
- HANDLE hCom; // Handle na objekt typu súbor
- hCom = CreateFile(
- "COM1:", // Názov portu, ktorý otvárame
- GENERIC_READ | GENERIC_WRITE, // Otvárame na c(ítanie aj na zápis
- 0, // Zdiel(anie nebude žiadne
- NULL, // Bezpec(nostné info žiadne
- OPEN_EXISTING, // Otvárame existujúci (port)
- 0, // Žiadne atribúty súboru
- NULL); // Musí byt( NULL
- if ( hCom == INVALID_HANDLE_VALUE )
- printf("\n Chyba: Port sa neda otvorit.\n");
- // potom nasleduje CloseHandle(hCom); a potom asi exit...
- else
- printf("\n OK, port je uspesne otvoreny.\n");
- DCB PortDCB; // Štruktúra, v ktorej sú uložené parametre
- PortDCB.DCBlength = sizeof(DCB); // Inicializuj položku DCBlength
- GetCommState(hCom,&PortDCB); // Naèítaj aktuálne nastavenia
- //*****************
- zobrazit(hCom,hConsole,PortDCB); //zobrazenie konfiguracie
- //------------- zmena ---------------------------------------
- PortDCB.BaudRate = 9600; // Zmeníme parametere
- PortDCB.Parity = 0;
- PortDCB.ByteSize = 8;
- PortDCB.StopBits = 1;
- int err;
- err = SetCommState(hCom,&PortDCB); // Nastav aktuálne nastavenia na port
- if(err)
- {
- printf("Chyba: Port sa neda nakonfigurovat.\n");
- }
- else
- {
- SetConsoleTextAttribute(hConsole,2);
- printf("Port je uspesne nakonfigurovany.\n");
- }
- //-------------------------------------------------------------
- zobrazit(hCom,hConsole,PortDCB); //zobrazenie konfiguracie portu
- //-------------------------------------------------------------
- DWORD Pocet=0;
- // char Data=getch();
- unsigned char Data=getchar();
- while(1){
- WriteFile(
- hCom, // Handle portu, ktory ste otvorili CreateFile
- &Data, // Smernik (pointer) na data, ktore chcem vysielat
- 1, // Pocet bytov, ktore chcem vyslat
- &Pocet, // Smernik (pointer) na pocet vyslanych dat
- NULL); // Musi byt NULL
- if( Pocet != 1 ) // Ak pocet prenesenych dat nesuhlasi
- printf("\n Chyba: Zapis na port sa nepodaril.\n");
- // a zasa nasleduje CloseHandle(hCom); a potom exit...
- else
- printf("\n OK.");
- printf("ja: %c", Data);
- }
- //-------------------------------------------------------------
- DWORD Pocet1=0; // Poc(et prijatých dát
- //unsigned char Data; // Sem ulož prijatý znak
- timeouty(hCom,hConsole);
- PurgeComm(hCom,PURGE_TXCLEAR | PURGE_RXCLEAR);
- ReadFile(
- hCom, // Handle portu, z ktorého c(ítame
- &Data, // Pointer na buffer, kam ukladáme prijaté dáta
- 1, // Poc(et bytov, na ktoré c(akáme
- // &d, // Pointer na skutoc(ný poc(et prijatých dát
- &Pocet1, // Pointer na skutoc(ný poc(et prijatých dát
- NULL); // Musí byt( NULL
- // Funkcia ReadFile tu teraz c(aká, až kým niec(o
- // nepríde, ale môže aj skonc(it( bez zachyteného znaku,
- // ak medzitým vypršia timeouty.
- if( Pocet1 != 1 ) // Ak poc(et prenesených dát nesúhlasí
- printf("\n Chyba: Citanie z portu nedalo nic.\n");
- else
- printf("\n OK, z portu sme uspesne prijali [%c].\n",Data);
- //-------------------------------------------------------------
- CloseHandle(hCom); // zatvorime port
- return 0;
- }
- // *********************************************************************************
- // zobrazenie komunikacne parametre
- void zobrazit(HANDLE hCom,HANDLE hConsole,DCB & PortDCB)
- {
- SetConsoleTextAttribute(hConsole,15);
- printf("\nKomunikacne parametre:\n");
- printf("Baud Rate: %d\n",PortDCB.BaudRate);
- printf("Parity: %d\n",PortDCB.Parity);
- printf("Byte Size: %d\n",PortDCB.ByteSize);
- printf("Stop Bits: %d\n",PortDCB.StopBits);
- printf("\n");
- }
- // nastavenie timeoutov
- void timeouty(HANDLE hCom,HANDLE hConsole)
- {
- COMMTIMEOUTS timeouts;
- timeouts.ReadIntervalTimeout = 20;
- timeouts.ReadTotalTimeoutMultiplier = 10;
- timeouts.ReadTotalTimeoutConstant = 100;
- timeouts.WriteTotalTimeoutMultiplier = 10;
- timeouts.WriteTotalTimeoutConstant = 100;
- if (!SetCommTimeouts(hCom,&timeouts)){
- SetConsoleTextAttribute(hConsole, 5);
- Sleep(1000);
- printf("\n Chyba: Timeouty nenastavene.\n"); }
- // a asi exit...
- else{
- SetConsoleTextAttribute(hConsole, 5);
- Sleep(1000);
- printf("\n OK, nastavene Timeouty\n");}
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement