Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # include <stdio.h>
- # include <windows.h>
- # include <conio.h>
- void wiev_dcb(HANDLE hCom,HANDLE hConsole,DCB & PortDCB);
- void set_dcb(HANDLE hCom,HANDLE hConsole,DCB & PortDCB,int baudrate,int parity, int bytesize,int stopbits);
- void time(HANDLE hCom,HANDLE hConsole);
- void load(HANDLE hConsole);
- HANDLE open_port(HANDLE hCom,HANDLE hConsole);
- void send_znak(HANDLE hCom,HANDLE hConsole);
- bool IsKeyPressed(int virtualKey);
- int vysielanie(HANDLE hCom, HANDLE hConsole);
- void prijimanie(HANDLE hCom, HANDLE hConsole);
- int chat(HANDLE hCom, HANDLE hConsole);
- // *********************************************************************************
- // *********************************************************************************
- // *********************************************************************************
- int main()
- {
- HANDLE hConsole;
- hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
- SetConsoleTextAttribute(hConsole,15);
- system ("cls");
- // *********************************************************************************
- // otvorenie portu
- HANDLE hCom; // Handle na objekt typu súbor
- SetConsoleTextAttribute(hConsole,15);
- printf("Vyber port:\n"
- "(1) Com1\n"
- "(2) Com2\n"
- "(3) Com3\n"
- "(4) Com4\n");
- switch(getch())
- {
- case '1':
- load(hConsole);
- hCom = CreateFile(
- "COM1:",
- GENERIC_READ | GENERIC_WRITE,
- 0,
- NULL,
- OPEN_EXISTING,
- 0,
- NULL);
- break;
- case '2':
- load(hConsole);
- hCom = CreateFile(
- "COM2:",
- GENERIC_READ | GENERIC_WRITE,
- 0,
- NULL,
- OPEN_EXISTING,
- 0,
- NULL);
- break;
- case '3':
- load(hConsole);
- hCom = CreateFile(
- "COM3:",
- GENERIC_READ | GENERIC_WRITE,
- 0,
- NULL,
- OPEN_EXISTING,
- 0,
- NULL);
- break;
- case '4':
- load(hConsole);
- hCom = CreateFile(
- "COM4:",
- GENERIC_READ | GENERIC_WRITE,
- 0,
- NULL,
- OPEN_EXISTING,
- 0,
- NULL);
- break;
- default:
- SetConsoleTextAttribute(hConsole,12);
- printf("\nZla volba!!\n\n\n");
- SetConsoleTextAttribute(hConsole,15);
- return 1;
- break;
- }
- 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
- // koniec - otvorenie portu
- // *********************************************************************************
- time(hCom,hConsole); //nastavenie timeoutov
- load(hConsole);
- wiev_dcb(hCom,hConsole,PortDCB); //zobrazenie konfiguracie portu
- load(hConsole);
- set_dcb(hCom,hConsole,PortDCB,9600,0,8,1); //nastavenie konfiguracie portu
- load(hConsole);
- wiev_dcb(hCom,hConsole,PortDCB); //zobrazenie konfiguracie portu
- load(hConsole);
- Sleep(1000);
- while (1)
- {
- system ("cls");
- COORD point = {30,0};
- SetConsoleCursorPosition(hConsole, point);
- SetConsoleTextAttribute(hConsole,14);
- printf("RS-232 komunikator v1.20\n\n");
- SetConsoleTextAttribute(hConsole,15);
- printf("Menu:\n");
- printf("(1) Chat \n");
- printf("(2) - - - - - \n");
- printf("(3) Opakovane odosielanie znaku \n");
- printf("(4) - - - - - \n");
- printf("(5) Ukazat nastavenia portu \n");
- printf("(6) Nastavenit port \n");
- printf("(7) Nastavenit timeouty \n");
- printf("(8) Vyber portu \n");
- printf("(9) - - - - - \n");
- printf("(0) Koniec \n\n");
- Sleep(100);
- switch(getch())
- {
- case '1':
- load(hConsole);
- chat(hCom,hConsole);
- SetConsoleTextAttribute(hConsole,12);
- printf(" Koniec\n");
- // getch();
- Sleep(1000);
- SetConsoleTextAttribute(hConsole,15);
- Sleep(500);
- break;
- case '2':
- load(hConsole);
- getch();
- break;
- case '3':
- load(hConsole);
- send_znak(hCom,hConsole);
- getch();
- break;
- case '4':
- load(hConsole);
- getch();
- break;
- case '5':
- load(hConsole);
- wiev_dcb(hCom,hConsole,PortDCB);
- getch();
- break;
- case '6':
- int baudrate, parity, bytesize, stopbits;
- SetConsoleTextAttribute(hConsole,15);
- printf("\nZadaj parametre:");
- printf("\n\nBaudRate(9600):\t");
- scanf("%d", &baudrate);
- printf("Parity(0): \t");
- scanf("%d", &parity);
- printf("ByteSize(8): \t");
- scanf("%d", &bytesize);
- printf("StopBits(1): \t");
- scanf("%d", &stopbits);
- load(hConsole);
- set_dcb(hCom,hConsole,PortDCB,baudrate,parity,bytesize,stopbits);
- wiev_dcb(hCom,hConsole,PortDCB);
- getch();
- break;
- case '7':
- load(hConsole);
- time(hCom,hConsole);
- Sleep(500);
- break;
- case '8':
- open_port(hCom,hConsole);
- Sleep(500);
- break;
- case '0':
- SetConsoleTextAttribute(hConsole,14);
- printf("Dakujem za pouzivanie tohto programu :D\n\n");
- SetConsoleTextAttribute(hConsole,15);
- CloseHandle(hCom);
- getch();
- exit (0);
- break;
- case VK_ESCAPE:
- Sleep(500);
- break;
- default:
- SetConsoleTextAttribute(hConsole,12);
- printf("Zla volba!!\n\n");
- Sleep(500);
- break;
- }
- }
- CloseHandle(hCom); // zatvorime port
- return 1;
- }
- // *********************************************************************************
- // *********************************************************************************
- // *********************************************************************************
- // *********************************************************************************
- // funkcia na zobrazenie komunikacnych nastaveni portu
- void wiev_dcb(HANDLE hCom,HANDLE hConsole,DCB & PortDCB)
- {
- SetConsoleTextAttribute(hConsole,15);
- printf("\nAktualne nastavenia portu:\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");
- }
- // *********************************************************************************
- // funkcia na nastavenie komunikacnych nastaveni portu
- void set_dcb(HANDLE hCom,HANDLE hConsole,DCB & PortDCB,int baudrate,int parity, int bytesize,int stopbits)
- {
- PortDCB.BaudRate = baudrate; // Zmeníme parametere v DCB
- PortDCB.Parity = parity;
- PortDCB.ByteSize = bytesize;
- PortDCB.StopBits = stopbits;
- int err;
- err = SetCommState(hCom,&PortDCB); // Nastav aktuálne nastavenia na port
- if(err)
- {
- SetConsoleTextAttribute(hConsole,12);
- printf("Chyba: Port sa neda nakonfigurovat.\n");
- return ;
- }
- else
- {
- SetConsoleTextAttribute(hConsole,10);
- printf("Port je uspesne nakonfigurovany.\n");
- }
- }
- // *********************************************************************************
- // funkcia na nastavenie timeoutov
- void time(HANDLE hCom,HANDLE hConsole)
- {
- COMMTIMEOUTS timeouts;
- timeouts.ReadIntervalTimeout = 20; //20
- timeouts.ReadTotalTimeoutMultiplier = 10; //10
- timeouts.ReadTotalTimeoutConstant = 10; //100
- timeouts.WriteTotalTimeoutMultiplier = 10; //10
- timeouts.ReadTotalTimeoutConstant = 10; //100
- if (!SetCommTimeouts(hCom,&timeouts))
- {
- SetConsoleTextAttribute(hConsole,12);
- printf("Chyba: Timeouty nenastavene.\n");
- return ;
- }
- else
- {
- SetConsoleTextAttribute(hConsole,10);
- printf("Timeouty nastavene \n");
- }
- }
- // *********************************************************************************
- // funkcia na vyber portu
- HANDLE open_port(HANDLE hCom,HANDLE hConsole)
- {
- SetConsoleTextAttribute(hConsole,15);
- printf("\nVyber port:\n"
- "(1) Com1\n"
- "(2) Com2\n"
- "(3) Com3\n"
- "(4) Com4\n");
- switch(getch())
- {
- case '1':
- // CloseHandle(hCom);
- load(hConsole);
- hCom = CreateFile(
- "COM1:",
- GENERIC_READ | GENERIC_WRITE,
- 0,
- NULL,
- OPEN_EXISTING,
- 0,
- NULL);
- break;
- case '2':
- // CloseHandle(hCom);
- load(hConsole);
- hCom = CreateFile(
- "COM2:",
- GENERIC_READ | GENERIC_WRITE,
- 0,
- NULL,
- OPEN_EXISTING,
- 0,
- NULL);
- break;
- case '3':
- // CloseHandle(hCom);
- load(hConsole);
- hCom = CreateFile(
- "COM3:",
- GENERIC_READ | GENERIC_WRITE,
- 0,
- NULL,
- OPEN_EXISTING,
- 0,
- NULL);
- break;
- case '4':
- // CloseHandle(hCom);
- load(hConsole);
- hCom = CreateFile(
- "COM4:",
- GENERIC_READ | GENERIC_WRITE,
- 0,
- NULL,
- OPEN_EXISTING,
- 0,
- NULL);
- break;
- default:
- SetConsoleTextAttribute(hConsole,12);
- printf("\nZla volba!!\n\n");
- return 0;
- break;
- }
- if ( hCom == INVALID_HANDLE_VALUE )
- {
- SetConsoleTextAttribute(hConsole,12);
- printf("\nChyba: Port sa neda otvorit.\n\n");
- return 0;
- }
- else
- {
- SetConsoleTextAttribute(hConsole,10);
- printf("\nPort je uspesne otvoreny.\n");
- }
- return hCom;
- }
- // *********************************************************************************
- // funkcia load
- void load(HANDLE hConsole)
- {
- SetConsoleTextAttribute(hConsole,15);
- int n;
- for (n=1;n<11;n++)
- {
- printf(".");
- Sleep(100);
- }
- printf("\n");
- }
- // *********************************************************************************
- // funkcia opakovane vysielanie znaku na port
- void send_znak(HANDLE hCom,HANDLE hConsole)
- {
- DWORD PocetOdo=0;
- SetConsoleTextAttribute(hConsole,14);
- printf("\nZvol odosielany znak");
- char DataOdo=getch();
- while (1)
- {
- WriteFile(
- hCom, // Handle portu, ktory ste otvorili CreateFile
- &DataOdo, // Smernik (pointer) na data, ktore chcem vysielat
- 1, // Pocet bytov, ktore chcem vyslat
- &PocetOdo, // Smernik (pointer) na pocet vyslanych dat
- NULL); // Musi byt NULL
- if( PocetOdo != 1 ) // Ak pocet prenesenych dat nesuhlasi
- {
- SetConsoleTextAttribute(hConsole,12);
- printf("\nChyba: Zapis na port sa nepodaril.\n\n");
- CloseHandle(hCom);
- Sleep(1000);
- return;
- }
- else
- {
- SetConsoleTextAttribute(hConsole,10);
- printf("\nOdoslany znak ");
- SetConsoleTextAttribute(hConsole,15);
- printf("%c", DataOdo);
- }
- if (IsKeyPressed(VK_ESCAPE))
- {
- SetConsoleTextAttribute(hConsole,12);
- printf("\nKoniec prenosu");
- Sleep(500);
- SetConsoleTextAttribute(hConsole,15);
- return;
- }
- Sleep(100);
- }
- }
- // *********************************************************************************
- // funkcia detekujuca stacenie klavesy
- bool IsKeyPressed(int virtualKey)
- {
- return ((GetAsyncKeyState(virtualKey)&0x8000)!=0?true:false);
- }
- // *********************************************************************************
- // funkcia na chat
- int chat(HANDLE hCom, HANDLE hConsole)
- {
- SetConsoleTextAttribute(hConsole,9);
- printf("\nChat\n\n");
- SetConsoleTextAttribute(hConsole,15);
- // unsigned int Data; // povodne char
- DWORD Pocet_pri = 0;
- char Data_pri[200]={0}; // Sem ulož prijatý znak
- DWORD Pocet_odo = 0;
- char Data_vys[150]={0};
- unsigned int dlzka;
- PurgeComm(hCom,PURGE_TXCLEAR | PURGE_RXCLEAR);
- while(1)
- {
- while (1)
- {
- Pocet_pri=0;
- ReadFile(
- hCom,
- Data_pri,
- 100,
- &Pocet_pri,
- NULL);
- if(Pocet_pri != 0)
- {
- SetConsoleTextAttribute(hConsole, 14);
- printf("ON:%s\n", Data_pri);
- if (strcmp(Data_pri, "KONIEC") == 0)
- return 1;
- }
- if (IsKeyPressed(VK_SHIFT))
- break;
- if (IsKeyPressed(VK_ESCAPE))
- return 1;
- }
- SetConsoleTextAttribute(hConsole, 10);
- printf("JA:");
- Sleep(100);
- gets(Data_vys);
- dlzka = strlen(Data_vys);
- WriteFile (
- hCom, // Handle portu, z ktorého cítame
- &Data_vys, // Pointer na buffer, kam ukladáme prijaté dáta
- dlzka, // Pocet bytov, na ktoré cakáme
- &Pocet_pri, // Pointer na skutocný pocet prijatých dát
- NULL); // Musí byt NULL
- if( Pocet_pri != dlzka )
- {
- printf("\n Chyba pri posielani spravy.\n");
- CloseHandle(hCom);
- return 0;
- }
- if(strcmp(Data_vys, "KONIEC") == 0)
- return 1;
- if (IsKeyPressed(VK_ESCAPE))
- return 1;
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment