Guest User

Untitled

a guest
May 1st, 2012
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 12.80 KB | None | 0 0
  1. # include <stdio.h>
  2. # include <windows.h>
  3. # include <conio.h>
  4.  
  5. void wiev_dcb(HANDLE hCom,HANDLE hConsole,DCB & PortDCB);
  6. void set_dcb(HANDLE hCom,HANDLE hConsole,DCB & PortDCB,int baudrate,int parity, int bytesize,int stopbits);
  7. void time(HANDLE hCom,HANDLE hConsole);
  8. void load(HANDLE hConsole);
  9. HANDLE open_port(HANDLE hCom,HANDLE hConsole);
  10. void send_znak(HANDLE hCom,HANDLE hConsole);
  11. bool IsKeyPressed(int virtualKey);
  12.  
  13. int vysielanie(HANDLE hCom, HANDLE hConsole);
  14. void prijimanie(HANDLE hCom, HANDLE hConsole);
  15. int chat(HANDLE hCom, HANDLE hConsole);
  16.  
  17.  
  18.  
  19.  
  20.  
  21. // *********************************************************************************
  22. // *********************************************************************************
  23. // *********************************************************************************
  24. int main()
  25. {
  26.  
  27.     HANDLE  hConsole;
  28.     hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  29.  
  30.     SetConsoleTextAttribute(hConsole,15);
  31.  
  32.     system ("cls");
  33.  
  34. // *********************************************************************************
  35. // otvorenie portu
  36.  
  37.     HANDLE hCom;                        // Handle na objekt typu súbor
  38.  
  39.     SetConsoleTextAttribute(hConsole,15);
  40.     printf("Vyber port:\n"
  41.         "(1) Com1\n"
  42.         "(2) Com2\n"
  43.         "(3) Com3\n"
  44.         "(4) Com4\n");
  45.  
  46.  
  47.     switch(getch())
  48.     {
  49.         case '1':
  50.             load(hConsole);
  51.             hCom = CreateFile(                
  52.                 "COM1:",                        
  53.                 GENERIC_READ | GENERIC_WRITE,  
  54.                 0,                              
  55.                 NULL,                            
  56.                 OPEN_EXISTING,                  
  57.                 0,                              
  58.                 NULL);
  59.             break; 
  60.         case '2':
  61.             load(hConsole);
  62.             hCom = CreateFile(                
  63.                 "COM2:",                        
  64.                 GENERIC_READ | GENERIC_WRITE,    
  65.                 0,                              
  66.                 NULL,                            
  67.                 OPEN_EXISTING,                  
  68.                 0,                            
  69.                 NULL);
  70.             break;  
  71.         case '3':
  72.             load(hConsole);
  73.             hCom = CreateFile(                
  74.                 "COM3:",
  75.                 GENERIC_READ | GENERIC_WRITE,
  76.                 0,
  77.                 NULL,
  78.                 OPEN_EXISTING,
  79.                 0,
  80.                 NULL);
  81.             break;
  82.         case '4':
  83.             load(hConsole);
  84.             hCom = CreateFile(                
  85.                 "COM4:",
  86.                 GENERIC_READ | GENERIC_WRITE,
  87.                 0,
  88.                 NULL,
  89.                 OPEN_EXISTING,
  90.                 0,
  91.                 NULL);
  92.             break;
  93.         default:
  94.             SetConsoleTextAttribute(hConsole,12);
  95.             printf("\nZla volba!!\n\n\n");
  96.             SetConsoleTextAttribute(hConsole,15);
  97.             return 1;
  98.             break;
  99.     }
  100.  
  101.     DCB PortDCB;                        // Štruktúra, v ktorej sú uložené parametre  
  102.     PortDCB.DCBlength = sizeof(DCB);    // Inicializuj položku DCBlength
  103.     GetCommState(hCom,&PortDCB);        // Načítaj aktuálne nastavenia
  104.  
  105. // koniec - otvorenie portu
  106. // *********************************************************************************
  107.  
  108.  
  109. time(hCom,hConsole);                        //nastavenie timeoutov
  110.  
  111. load(hConsole);
  112.  
  113. wiev_dcb(hCom,hConsole,PortDCB);            //zobrazenie konfiguracie portu
  114.  
  115. load(hConsole);
  116.  
  117. set_dcb(hCom,hConsole,PortDCB,9600,0,8,1);  //nastavenie konfiguracie portu
  118.  
  119. load(hConsole);
  120.  
  121. wiev_dcb(hCom,hConsole,PortDCB);            //zobrazenie konfiguracie portu
  122.  
  123. load(hConsole);
  124. Sleep(1000);
  125.  
  126.     while (1)
  127.     {
  128.  
  129.         system ("cls");
  130.  
  131.         COORD point = {30,0};
  132.         SetConsoleCursorPosition(hConsole, point);
  133.  
  134.         SetConsoleTextAttribute(hConsole,14);
  135.         printf("RS-232 komunikator v1.20\n\n");
  136.         SetConsoleTextAttribute(hConsole,15);
  137.  
  138.         printf("Menu:\n");
  139.         printf("(1) Chat \n");
  140.         printf("(2) - - - - - \n");
  141.         printf("(3) Opakovane odosielanie znaku \n");
  142.         printf("(4) - - - - - \n");
  143.         printf("(5) Ukazat nastavenia portu \n");
  144.         printf("(6) Nastavenit port \n");
  145.         printf("(7) Nastavenit timeouty \n");
  146.         printf("(8) Vyber portu \n");
  147.         printf("(9) - - - - - \n");
  148.         printf("(0) Koniec \n\n");
  149.  
  150. Sleep(100);
  151.  
  152.         switch(getch())
  153.         {
  154.             case '1':
  155.                 load(hConsole);
  156.                 chat(hCom,hConsole);
  157.  
  158.             SetConsoleTextAttribute(hConsole,12);
  159.             printf("                                   Koniec\n");
  160. //          getch();
  161.             Sleep(1000);
  162.             SetConsoleTextAttribute(hConsole,15);
  163.  
  164.                 Sleep(500);
  165.                 break;
  166.             case '2':
  167.                 load(hConsole);
  168.                
  169.                 getch();
  170.                 break;
  171.             case '3':
  172.                 load(hConsole);
  173.                 send_znak(hCom,hConsole);
  174.                 getch();
  175.                 break;
  176.             case '4':
  177.                 load(hConsole);
  178.                
  179.                 getch();
  180.                 break;
  181.             case '5':
  182.                 load(hConsole);
  183.                 wiev_dcb(hCom,hConsole,PortDCB);
  184.                 getch();
  185.                 break;
  186.             case '6':
  187.  
  188.                 int baudrate, parity, bytesize, stopbits;
  189.  
  190.                 SetConsoleTextAttribute(hConsole,15);
  191.                 printf("\nZadaj parametre:");
  192.                 printf("\n\nBaudRate(9600):\t");
  193.                 scanf("%d", &baudrate);
  194.                 printf("Parity(0): \t");
  195.                 scanf("%d", &parity);
  196.                 printf("ByteSize(8): \t");
  197.                 scanf("%d", &bytesize);
  198.                 printf("StopBits(1): \t");
  199.                 scanf("%d", &stopbits);
  200.                
  201.                 load(hConsole);
  202.                 set_dcb(hCom,hConsole,PortDCB,baudrate,parity,bytesize,stopbits);
  203.  
  204.                 wiev_dcb(hCom,hConsole,PortDCB);
  205.  
  206.                 getch();
  207.                 break;
  208.             case '7':
  209.                 load(hConsole);
  210.                 time(hCom,hConsole);
  211.                 Sleep(500);
  212.                 break;
  213.             case '8':
  214.                 open_port(hCom,hConsole);
  215.                 Sleep(500);
  216.                 break;
  217.             case '0':
  218.                 SetConsoleTextAttribute(hConsole,14);
  219.                 printf("Dakujem za pouzivanie tohto programu :D\n\n");
  220.                 SetConsoleTextAttribute(hConsole,15);
  221.                 CloseHandle(hCom);
  222.                 getch();
  223.                 exit (0);
  224.                 break;
  225. case VK_ESCAPE:
  226. Sleep(500);
  227. break;
  228.             default:
  229.                 SetConsoleTextAttribute(hConsole,12);
  230.                 printf("Zla volba!!\n\n");
  231.                 Sleep(500);
  232.                 break;
  233.         }
  234.  
  235.     }
  236.  
  237.  
  238.  
  239.     CloseHandle(hCom);          // zatvorime port
  240.  
  241.     return 1;
  242. }
  243. // *********************************************************************************
  244. // *********************************************************************************
  245. // *********************************************************************************
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256. // *********************************************************************************
  257. // funkcia na zobrazenie komunikacnych nastaveni portu
  258. void wiev_dcb(HANDLE hCom,HANDLE hConsole,DCB & PortDCB)
  259. {
  260.  
  261.     SetConsoleTextAttribute(hConsole,15);
  262.     printf("\nAktualne nastavenia portu:\n");
  263.     printf("Baud Rate:  %d\n",PortDCB.BaudRate);
  264.     printf("Parity:     %d\n",PortDCB.Parity);
  265.     printf("Byte Size:  %d\n",PortDCB.ByteSize);
  266.     printf("Stop Bits:  %d\n",PortDCB.StopBits);
  267.     printf("\n");
  268.  
  269. }
  270.  
  271.  
  272.  
  273. // *********************************************************************************
  274. // funkcia na nastavenie komunikacnych nastaveni portu
  275. void set_dcb(HANDLE hCom,HANDLE hConsole,DCB & PortDCB,int baudrate,int parity, int bytesize,int stopbits)
  276. {
  277.  
  278.     PortDCB.BaudRate = baudrate;        // Zmeníme parametere v DCB
  279.     PortDCB.Parity = parity;
  280.     PortDCB.ByteSize = bytesize;
  281.     PortDCB.StopBits = stopbits;
  282.  
  283.     int err;
  284.     err = SetCommState(hCom,&PortDCB);  // Nastav aktuálne nastavenia na port
  285.     if(err)
  286.     {
  287.         SetConsoleTextAttribute(hConsole,12);
  288.         printf("Chyba:  Port sa neda nakonfigurovat.\n");
  289.         return ;
  290.     }
  291.     else
  292.     {
  293.         SetConsoleTextAttribute(hConsole,10);
  294.         printf("Port je uspesne nakonfigurovany.\n");
  295.     }
  296.  
  297.  
  298. }
  299.  
  300.  
  301.  
  302. // *********************************************************************************
  303. // funkcia na nastavenie timeoutov
  304. void time(HANDLE hCom,HANDLE hConsole)
  305. {
  306.  
  307.     COMMTIMEOUTS timeouts;
  308.    
  309.     timeouts.ReadIntervalTimeout         =  20; //20
  310.     timeouts.ReadTotalTimeoutMultiplier  =  10; //10
  311.     timeouts.ReadTotalTimeoutConstant    = 10; //100
  312.     timeouts.WriteTotalTimeoutMultiplier =  10; //10
  313.     timeouts.ReadTotalTimeoutConstant    = 10; //100
  314.  
  315.     if (!SetCommTimeouts(hCom,&timeouts))
  316.     {
  317.         SetConsoleTextAttribute(hConsole,12);
  318.         printf("Chyba: Timeouty nenastavene.\n");
  319.         return ;
  320.     }
  321.     else
  322.     {
  323.         SetConsoleTextAttribute(hConsole,10);
  324.         printf("Timeouty nastavene \n");
  325.     }
  326. }
  327.  
  328.  
  329.  
  330. // *********************************************************************************
  331. // funkcia na vyber portu
  332. HANDLE open_port(HANDLE hCom,HANDLE hConsole)
  333. {
  334.  
  335.     SetConsoleTextAttribute(hConsole,15);
  336.     printf("\nVyber port:\n"
  337.         "(1) Com1\n"
  338.         "(2) Com2\n"
  339.         "(3) Com3\n"
  340.         "(4) Com4\n");
  341.  
  342.  
  343.     switch(getch())
  344.     {
  345.         case '1':
  346. //          CloseHandle(hCom);
  347.             load(hConsole);
  348.             hCom = CreateFile(                
  349.                 "COM1:",                        
  350.                 GENERIC_READ | GENERIC_WRITE,  
  351.                 0,                              
  352.                 NULL,                            
  353.                 OPEN_EXISTING,                  
  354.                 0,                              
  355.                 NULL);
  356.             break; 
  357.         case '2':
  358. //          CloseHandle(hCom);
  359.             load(hConsole);
  360.             hCom = CreateFile(                
  361.                 "COM2:",                        
  362.                 GENERIC_READ | GENERIC_WRITE,    
  363.                 0,                              
  364.                 NULL,                            
  365.                 OPEN_EXISTING,                  
  366.                 0,                            
  367.                 NULL);
  368.             break;  
  369.         case '3':
  370. //          CloseHandle(hCom);
  371.             load(hConsole);
  372.             hCom = CreateFile(                
  373.                 "COM3:",
  374.                 GENERIC_READ | GENERIC_WRITE,
  375.                 0,
  376.                 NULL,
  377.                 OPEN_EXISTING,
  378.                 0,
  379.                 NULL);
  380.             break;
  381.         case '4':
  382. //          CloseHandle(hCom);
  383.             load(hConsole);
  384.             hCom = CreateFile(                
  385.                 "COM4:",
  386.                 GENERIC_READ | GENERIC_WRITE,
  387.                 0,
  388.                 NULL,
  389.                 OPEN_EXISTING,
  390.                 0,
  391.                 NULL);
  392.             break;
  393.         default:
  394.             SetConsoleTextAttribute(hConsole,12);
  395.             printf("\nZla volba!!\n\n");
  396.             return 0;
  397.             break;
  398.     }
  399.  
  400.  
  401.     if ( hCom == INVALID_HANDLE_VALUE )
  402.     {
  403.         SetConsoleTextAttribute(hConsole,12);
  404.         printf("\nChyba:  Port sa neda otvorit.\n\n");
  405.         return 0;
  406.     }
  407.     else
  408.     {
  409.         SetConsoleTextAttribute(hConsole,10);
  410.         printf("\nPort je uspesne otvoreny.\n");
  411.     }
  412.    
  413.     return hCom;
  414. }
  415.  
  416.  
  417.  
  418. // *********************************************************************************
  419. // funkcia load
  420. void load(HANDLE hConsole)
  421. {
  422.     SetConsoleTextAttribute(hConsole,15);
  423.  
  424.     int n;
  425.     for (n=1;n<11;n++)
  426.     {
  427.         printf(".");
  428.         Sleep(100);
  429.     }
  430.     printf("\n");
  431. }
  432.  
  433.  
  434.  
  435. // *********************************************************************************
  436. // funkcia opakovane vysielanie znaku na port
  437. void send_znak(HANDLE hCom,HANDLE hConsole)
  438. {
  439.  
  440.     DWORD PocetOdo=0;
  441.  
  442.     SetConsoleTextAttribute(hConsole,14);
  443.     printf("\nZvol odosielany znak");
  444.     char DataOdo=getch();
  445.  
  446.     while (1)
  447.     {
  448.  
  449.         WriteFile(
  450.             hCom,               // Handle portu, ktory ste otvorili CreateFile
  451.             &DataOdo,           // Smernik (pointer) na data, ktore chcem vysielat
  452.             1,                  // Pocet bytov, ktore chcem vyslat
  453.             &PocetOdo,          // Smernik (pointer) na pocet vyslanych dat
  454.             NULL);              // Musi byt NULL
  455.  
  456.         if( PocetOdo != 1 )     // Ak pocet prenesenych dat nesuhlasi
  457.         {
  458.             SetConsoleTextAttribute(hConsole,12);
  459.             printf("\nChyba: Zapis na port sa nepodaril.\n\n");
  460.             CloseHandle(hCom);
  461.             Sleep(1000);
  462.             return;
  463.         }
  464.         else
  465.         {
  466.             SetConsoleTextAttribute(hConsole,10);
  467.             printf("\nOdoslany znak ");
  468.             SetConsoleTextAttribute(hConsole,15);
  469.             printf("%c", DataOdo);
  470.         }
  471.  
  472.         if (IsKeyPressed(VK_ESCAPE))
  473.         {
  474.             SetConsoleTextAttribute(hConsole,12);
  475.             printf("\nKoniec prenosu");
  476.             Sleep(500);
  477.             SetConsoleTextAttribute(hConsole,15);
  478.             return;
  479.         }
  480.  
  481.         Sleep(100);
  482.     }
  483.  
  484. }
  485.  
  486.  
  487.  
  488. // *********************************************************************************
  489. // funkcia detekujuca stacenie klavesy
  490. bool IsKeyPressed(int virtualKey)
  491. {
  492.     return ((GetAsyncKeyState(virtualKey)&0x8000)!=0?true:false);
  493. }
  494.  
  495.  
  496.  
  497.  
  498. // *********************************************************************************
  499. // funkcia na chat
  500. int chat(HANDLE hCom, HANDLE hConsole)
  501. {
  502.  
  503.     SetConsoleTextAttribute(hConsole,9);
  504.     printf("\nChat\n\n");
  505.     SetConsoleTextAttribute(hConsole,15);
  506.  
  507. //  unsigned int Data; // povodne char
  508.  
  509.     DWORD Pocet_pri = 0;
  510.     char Data_pri[200]={0};      // Sem ulož prijatý znak
  511.  
  512.     DWORD Pocet_odo = 0;
  513.     char Data_vys[150]={0};
  514.     unsigned int dlzka;
  515.  
  516.  
  517.     PurgeComm(hCom,PURGE_TXCLEAR | PURGE_RXCLEAR);
  518.  
  519.  
  520.     while(1)
  521.     {
  522.  
  523.         while (1)
  524.         {
  525.  
  526.             Pocet_pri=0;
  527.  
  528.             ReadFile(
  529.                 hCom,
  530.                 Data_pri,
  531.                 100,
  532.                 &Pocet_pri,
  533.                 NULL);
  534.  
  535.             if(Pocet_pri != 0)
  536.             {
  537.                 SetConsoleTextAttribute(hConsole, 14);
  538.                 printf("ON:%s\n", Data_pri);
  539.  
  540.                 if (strcmp(Data_pri, "KONIEC") == 0)
  541.                     return 1;
  542.             }
  543.  
  544. if (IsKeyPressed(VK_SHIFT))            
  545.     break;
  546. if (IsKeyPressed(VK_ESCAPE))            
  547.     return 1;
  548.  
  549.  
  550.         }
  551.  
  552.             SetConsoleTextAttribute(hConsole, 10);
  553.             printf("JA:");
  554.  
  555.             Sleep(100);
  556.  
  557.             gets(Data_vys);
  558.  
  559.             dlzka = strlen(Data_vys);
  560.  
  561.             WriteFile (
  562.                 hCom,                   // Handle portu, z ktorého cítame
  563.                 &Data_vys,              // Pointer na buffer, kam ukladáme prijaté dáta
  564.                 dlzka,                  // Pocet bytov, na ktoré cakáme
  565.                 &Pocet_pri,             // Pointer na skutocný pocet prijatých dát
  566.                 NULL);                  // Musí byt NULL
  567.    
  568.             if( Pocet_pri != dlzka )
  569.             {
  570.                 printf("\n Chyba pri posielani spravy.\n");
  571.                 CloseHandle(hCom);  
  572.                 return 0;
  573.             }
  574.  
  575.             if(strcmp(Data_vys, "KONIEC") == 0)
  576.                 return 1;
  577.    
  578.         if (IsKeyPressed(VK_ESCAPE))            
  579.             return 1;
  580.  
  581.  
  582.     }
  583.  
  584.     return 1;
  585. }
Advertisement
Add Comment
Please, Sign In to add comment