www.blafusel.de


  Home  |   Privat  |   Impressum  |   Bücher  |   Computer  |   Mikrocontroller  |   Misc  |   OBD  |   Forum
Aktuelle Zeit: Mittwoch 16. Oktober 2024, 01:36

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: COM Port Bits senden
BeitragVerfasst: Mittwoch 30. Mai 2012, 19:10 
Hallo,

ich möchte einzelne Bits an meinen COM-Port senden. Im Prinzip 0-0-0-0-0-0-0-1 mit jeweils 200ms Abstand.

Mein Ansatz wäre jetzt:
Code:
#include <iostream>
#include <conio.h>
#include <windows.h>
int main(int argc, char* argv[])
{
    char INBUFFER[2]; // Create Input Buffer

    bool Zero = 0x00;
    bool One = 0x01;

    /* Komplement berechnen
    char Komplement = '\xd5' ^ '\xff';
    printf("%d\r\n",Komplement);
    */

    DWORD        bytes_read    = 1;    // Number of bytes read from port
    DWORD        bytes_written = 1;    // Number of bytes written to the port
    HANDLE       comport      = NULL;  // Handle COM port
    int          bStatus;              // Status indicator
    DCB          comSettings;          // Contains various port settings
    COMMTIMEOUTS CommTimeouts;         // Contains various COM timeouts
    // Open COM port
    if ((comport =
         CreateFile("\\\\.\\COM4",                // open com4:
                    GENERIC_READ | GENERIC_WRITE, // for reading and writing
                    0,                            // exclusive access
                    NULL,                         // no security attributes
                    OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL,
                    NULL)) == INVALID_HANDLE_VALUE)
    {
        printf("CreateFile() funktioniert nicht\r\n"); // error processing code goes here
        system("pause");
        exit(0);
    }

    CommTimeouts.ReadIntervalTimeout         = -1;     // Timeout in ms
    CommTimeouts.ReadTotalTimeoutMultiplier  = 0;     // Timeout in ms
    CommTimeouts.ReadTotalTimeoutConstant    = 0;   // Timeout in ms
    CommTimeouts.WriteTotalTimeoutMultiplier = 0;     // Timeout in ms
    CommTimeouts.WriteTotalTimeoutConstant   = 65000;   // Timeout in ms
    bStatus = SetCommTimeouts(comport,&CommTimeouts); // Set COM timeouts
    if (bStatus != 0)
    {
        printf("SetCommTimeouts() funktioniert nicht\r\n"); // error processing code goes here
    }
    GetCommState(comport, &comSettings); // Getting COM state
    comSettings.BaudRate = 9600;           // COM setting
    comSettings.StopBits = ONESTOPBIT;  // COM setting
    comSettings.ByteSize = 7;           // COM setting
    comSettings.Parity   = ODDPARITY;    // COM setting
    comSettings.fParity  = FALSE;       // COM setting
    bStatus = SetCommState(comport, &comSettings); // Setting COM state

    if (bStatus == 0)
    {
        printf("SetCommState() funktioniert nicht.\r\n"); // error processing code goes here
    }

    Sleep(5);
    bStatus = WriteFile(comport, &Zero,1,&bytes_written,NULL);
    Sleep(200);
    bStatus = WriteFile(comport, &Zero,1,&bytes_written,NULL);
    Sleep(200);
    bStatus = WriteFile(comport, &Zero,1,&bytes_written,NULL);
    Sleep(200);
    bStatus = WriteFile(comport, &Zero,1,&bytes_written,NULL);
    Sleep(200);
    bStatus = WriteFile(comport, &Zero,1,&bytes_written,NULL);
    Sleep(200);
    bStatus = WriteFile(comport, &Zero,1,&bytes_written,NULL);
    Sleep(200);
    bStatus = WriteFile(comport, &Zero,1,&bytes_written,NULL);
    Sleep(200);
    bStatus = WriteFile(comport, &One,1,&bytes_written,NULL);
    printf("Sending: %d\r\n", 0x46);

    bStatus = ReadFile(comport,&INBUFFER,2,&bytes_read,NULL);
    printf("Receiving: %d <-> %d\r\n", INBUFFER[0], INBUFFER[1]);

    system("pause");

    CloseHandle(comport);
 return 0;
}


... allerdings ist WriteFile() nur für Bytes ausgelegt, kann ich irgendwie auch einzelne Bits senden? Der Code scheint so jedenfalls nicht zu funktionieren.

Danke & Gruß
COM


Nach oben
  
 
 Betreff des Beitrags: Re: COM Port Bits senden
BeitragVerfasst: Donnerstag 31. Mai 2012, 07:45 
Offline
Administrator
Benutzeravatar

Registriert: Mittwoch 6. Oktober 2004, 09:52
Beiträge: 2127
http://www.blafusel.de/obd/obd2_kw1281.html#5

_________________

:verweis: Alles folgende ist Teil der Antwort und wird oben nicht noch mal explizit wiederholt:

Sieh' in die FAQ! Schaue in die Fahrzeugliste, ob Dein Fahrzeug vorhanden ist. Trage Deine Erfahrungen dort ein und hilf so anderen Nutzern!

Ich freue mich über Infos mit Herstellernummern zu VAG Steuergeräten mit CAN TP 1.6/2.0 oder UDS Protokoll wenn die Pinbelegung (Diagnoseleitungen und Spannungsversorgung) bekannt ist.

Nutze PGP für Deine Emails! (PDF lesen)

Dieser Beitrag kann Werbung enthalten.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: COM Port Bits senden
BeitragVerfasst: Donnerstag 31. Mai 2012, 10:14 
So ich habe mir mal den Source von WBH-Diag angeschaut und die Paketabfolge sowie Timing passt (ungefähr 8) ) soweit. Habe auch die 196ms genommen, weil ich ein USB-Kabel habe. Jetzt hänge ich an INBUFFER, kenn mich zum einen mit Delphi nicht aus und zum anderen habe ich kein Plan, wie sich INBUFFER in einer while-Schleife verändern kann, wenn ich INBUFFER verfolge lande ich bei myReadByte und folgich bei READBYTE. Woher holt der sich die Daten, aus einer Funktion, aus dem Handle?

Im Portmon sehe ich den Inbuffer nicht oder?

Danke & Gruß
COM


Nach oben
  
 
 Betreff des Beitrags: Re: COM Port Bits senden
BeitragVerfasst: Donnerstag 31. Mai 2012, 11:03 
Also mit INBUFFER meine ich die Antwort vom STG :
0x55 Sync Byte zum festlegen der Baudrate
0x01 key word LSB (low significant byte)
0x8A key word HSB (high significant byte)


Nach oben
  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de