ComPort / BitCode



  • Hallo,

    Ich lese den DatenStrom der COM1 Schnittstelle aus und würde diesen gerne als Bitcode angezeigt bekommen.. In wie fern ist das möglich?

    Code:

    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    DCB dcbCommPort;
    HANDLE hComm = NULL;
    COMMTIMEOUTS ctmoNew = { MAXDWORD,0,0,0,0 }, ctmoOld;
    
    struct com
    {
            char command[100];
    };
    
    char c;
    com commandbuffer [20];
    int i, x=0, stackpos=-1, stackmaxpos=-1; 
    char *CommPort[] = {"COM1","COM2","COM3","COM4"} , zwischenBuff[10], my_char_send[100] ;
    
    byte input[1] ;
    unsigned long nob = 0, dwEvent;
    //------------------------------------------------------------------------------
    DWORD WINAPI ThreadProc(LPVOID lpParameter)
    {
            for(;;)
            {
            int test;
                    ReadFile(hComm,
                             input,
                             1,
                             &nob,
                             NULL);
                    if (nob!=0)
                            Form1->Memo1->SetSelTextBuf(input);
                            memset(input, 0x00, sizeof(input));
            }
    }
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    DWORD threadId;
            HANDLE threads[1];
            int c;
    
            //COM1 öffnen
            hComm = CreateFile ("COM1",
                                GENERIC_READ | GENERIC_WRITE,
                                0,
                                0,
                                OPEN_EXISTING,
                                0,
                                NULL);
    
            //Fehler beim öffenen
            if (hComm == INVALID_HANDLE_VALUE)
            {
                    Application->MessageBox("Unable to use Port",
                                            NULL,
                                            MB_OK+MB_ICONERROR);
                    hComm = NULL;
                    exit(EXIT_FAILURE);
            }
    
            // COM-Port konfigurieren
            GetCommTimeouts(hComm, &ctmoOld);
            ctmoNew.ReadIntervalTimeout = 1;
            SetCommTimeouts(hComm, &ctmoNew);
    
            GetCommState (hComm, &dcbCommPort);
            dcbCommPort.BaudRate = 9600;
            dcbCommPort.ByteSize = 8;
            dcbCommPort.Parity = NOPARITY;
            dcbCommPort.StopBits = ONESTOPBIT;
            SetCommState (hComm, &dcbCommPort);
    
            SetCommMask(hComm, EV_RXCHAR);
    
            //Thread erzeugen
            threads[0] = CreateThread(0,0,ThreadProc,0,0,&threadId);
            SetThreadPriority(threads[0], THREAD_PRIORITY_NORMAL);
    
            memset(zwischenBuff, 0x00, sizeof(zwischenBuff));
            memset(my_char_send, 0x00, sizeof(my_char_send));
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
    Sleep(250);
    PurgeComm(hComm, PURGE_RXABORT);
    SetCommTimeouts(hComm, &ctmoOld);
    CloseHandle(hComm);        
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      Close();        
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
      Form1->DoubleBuffered = true;
      Memo1->Lines->Clear();       
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    PurgeComm(hComm, PURGE_RXABORT);
    SetCommTimeouts(hComm, &ctmoOld);
    CloseHandle(hComm);        
    }
    

    Ich hab leider von hier keinen zugriff auf webspace sonst würde ich noch nen screenshot beilegen wie es im moment aussieht.. er spuckt im moment nur so wirrwarr aus mit jeder menge sonderzeichen..

    Kennt sich jemand damit aus, der mir mal helfen könnte?

    [Edit]Bitte UBB- Tags benutzen[/Edit]

    [ Dieser Beitrag wurde am 12.05.2003 um 13:18 Uhr von AndreasW editiert. ]



  • Original erstellt von PHX:
    [...]und würde diesen gerne als Bitcode angezeigt bekommen..

    Was bitte ist "Bitcode"?

    -junix



  • hmm.. vielleicht das falsche wort..

    ich suche nach sowas: 00100110

    statt: dÄ©+\»¦?a°åUã&

    damit ich rein theoretisch übersetzen könnte, was da grade geschrieben wird, weil der scheint das auf ne komische art und weise schon zu interpretieren..

    sinn der sache ist es das ich einem Linx Beschrifter etwas sage, eben ein command

    und er mir dann eine antwort gibt, nämlich den text welchen er drucken soll



  • Da mußt du schon eine eigene Routine schreiben. Sowas wie StrToBin/BinToStr gibt es meines Wissens nicht.
    Sollte aber auch nicht so schwer sein, mittels Bitvergleich (AND) einen entsprechenden String zu erzeugen.


Anmelden zum Antworten