Keresés

Aktív témák

  • ftc

    nagyúr

    Kis segitésg kellene:Van egy progi ami 2 gép közötti soros komunikáciot biztositja .Ha hyperterminálon van az egyik gép akkor hülyeségeket ir ki.Beirom az egész progit,ha valaki tud segitsen.

    #include<stdio.h>
    #include<windows.h>
    #include<conio.h>
    void menu(HANDLE hPort);
    int chat(HANDLE hPort);
    void set_port(HANDLE hPort);
    void wiev(HANDLE hPort);
    void time(HANDLE hPort);
    void vysielanie(HANDLE hPort);
    void primanie(HANDLE hPort);
    bool IsKeyPressed(int virtualKey);

    void main()
    {
    HANDLE hPort;
    hPort = CreateFile(''COM1:'', GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING, 0, NULL);
    if ( hPort == INVALID_HANDLE_VALUE )
    printf(''Port sa neda otvorit\n'');
    else
    printf(''Port je otvoreny\n'');
    time(hPort);
    menu(hPort);
    CloseHandle(hPort);
    }

    void menu(HANDLE hPort)
    {
    printf(''Manual: 1 - Chat 2 - Set port 3 - Actual set port 4 - Quit'');

    while(1)
    {
    printf(''\n\nVolba?'');
    switch (getch())
    {
    case '1':
    chat(hPort); break;
    case '2':
    set_port(hPort); break;
    case '3':
    wiev(hPort); break;
    case '4':
    goto END; break;
    default: printf(''\nZla volba!!'');break;
    }
    }
    printf(''Koniec'');
    END:;
    }

    void time(HANDLE hPort)
    {
    COMMTIMEOUTS timeouts;

    timeouts.ReadIntervalTimeout = 20;
    timeouts.ReadTotalTimeoutMultiplier = 10;
    timeouts.ReadTotalTimeoutConstant = 100;
    timeouts.WriteTotalTimeoutMultiplier = 10;
    timeouts.ReadTotalTimeoutConstant = 100;

    if (!SetCommTimeouts(hPort,&timeouts))
    printf(''Chyba: Timeouty nenastavene.\n\n'');
    // a asi exit...
    else
    printf(''OK,Timeouty nastavene \n\n'');
    }
    void set_port(HANDLE hPort)
    {
    DCB PortDCB;
    PortDCB.DCBlength = sizeof(DCB);
    GetCommState(hPort,&PortDCB);
    printf(''\n\nSet port:'');
    printf(''\nZadaj BaudRate: '');
    scanf(''%d'',&PortDCB.BaudRate);
    printf(''Zadaj ByteSize: '');
    scanf(''%d'',&PortDCB.ByteSize);
    printf(''Zadaj StopBits: '');
    scanf(''%d'',&PortDCB.StopBits);
    printf(''Zadaj Parity: '');
    scanf(''%d'',&PortDCB.Parity);

    if(!SetCommState(hPort,&PortDCB))
    printf(''\nPort sa neda nakonfigurovat'');
    else printf(''\nPort je nakonfigurovany\n'');
    }

    void wiev(HANDLE hPort)
    {
    DCB PortDCB;
    PortDCB.DCBlength = sizeof(PortDCB);
    GetCommState(hPort,&PortDCB);
    printf(''\n\nActual set port:'');
    printf(''\nBaudrate %d'',PortDCB.BaudRate);
    printf(''\nByteSize %d'',PortDCB.ByteSize);
    printf(''\nStopBits %d'',PortDCB.StopBits);
    printf(''\nParity %d'',PortDCB.Parity);
    printf(''\n'');
    }

    int chat(HANDLE hPort)
    {
    printf(''\n\nChat:\n'');
    unsigned char Data;
    PurgeComm(hPort,PURGE_TXCLEAR | PURGE_RXCLEAR);
    DWORD d;
    while(1)
    {
    Data=0;
    ReadFile(hPort,&Data,1,&d,NULL);
    if(Data==0 && IsKeyPressed(VK_SHIFT))
    vysielanie(hPort);
    if(Data!=0)
    primanie(hPort);
    //Data=0;
    if (IsKeyPressed(VK_ESCAPE)) // Klavesa VK_ESCAPE konci program
    {
    printf(''Escape!! \n'');
    getch();
    return(1);
    }
    }
    return(1);
    }

    void vysielanie(HANDLE hPort)
    {
    printf(''\nVysielas:\n'');
    DWORD i=0,b=0;
    DWORD pocet=0;
    unsigned char posielam='a';
    char a[40];
    gets(a);
    b=strlen(a);
    WriteFile(hPort,&posielam,1, &pocet/*smernik*/,NULL);
    Sleep(9);
    while(i<(b+1))
    {
    posielam=a;
    WriteFile(hPort,&posielam,1, &pocet/*smernik*/,NULL);
    i++;
    if( pocet != 1 ) printf(''\nSprava neodoslana!!'');
    pocet=0;
    }
    }

    void primanie(HANDLE hPort)
    {
    printf(''\nPrimam:\n'');
    DWORD Pocet=0; // Počet prijatých dát
    unsigned char Data,a[40]; // Sem ulož prijatý znak
    DWORD i=0,j=0;
    PurgeComm(hPort,PURGE_TXCLEAR | PURGE_RXCLEAR);
    while(a[j]!='\0')
    {
    ReadFile(
    hPort, // Handle portu, z ktorého čítame
    &Data, // Pointer na buffer, kam ukladáme prijaté dáta
    1, // Počet bytov, na ktoré čakáme
    &Pocet, // Pointer na skutočný počet prijatých dát
    NULL); // Musí byť NULL

    // Funkcia ReadFile tu teraz čaká, až kým niečo
    // nepríde, ale môže aj skončiť bez zachyteného znaku,
    // ak medzitým vypršia timeouty.

    a
    =Data;
    a[i+1]='\0';
    i++;
    j=i-1;
    printf(''%c'',Data);
    if( Pocet != Data ) // Ak počet prenesených dát nesúhlasí
    printf(''\n Chyba: Sprava neprisla!!'');
    Pocet=0;
    }
    printf(''\n'');
    }
    /* ************************************************************************** */
    /* */
    /* Funkcia IsKeyPressed(int virtualKey) */
    /* Je prave stlacena klavesa virtualKey? 0 nie, 1 ano */
    /* */
    /* ************************************************************************** */

    bool IsKeyPressed(int virtualKey)
    {
    return ((GetAsyncKeyState(virtualKey)&0x8000)!=0?true:false);
    }

Aktív témák

Hirdetés