Ergebnis 1 bis 11 von 11
  1. hallo leute

    hat jemand von euch schon mal ne schnittstelle programmiert? ich habe schon die page www.svenketel.de besucht, doch so richtig schlau werde ich nicht daraus. ich wäre froh wenn mir jemand sowohl hardware wie auch softwaremässig ein wenig starthilfe geben könnte...
    hardware: möchte gerne die com schnittstelle des cradles gebrauchen
    software: verwende embedded visual c++ und habe eigentlich mein programm fertig, aber es will und will nicht funktionieren

    vielen dank im voraus
    0
     

  2. nun, ich habe schon mal die schnittstelle des cradles benutzt. das geht eigentlich ohne Probleme und lästiges umbauen desselbigen, wenn du einen null-modemaddapter benutzt. Damit kannst du dann ein beispielsweise ein Modem an den seriellen Stecker des Cradles hängen und der PocketPC benutzt dieses einwandfrei.
    ich denke, das wird dein problem sein, dass die kommunikation nicht klappt aufgrund des rsr232 protokolls. du benötigst wohl einen männlich-männlich nullmodemaddapter. gib´t überall, bei mediamarkt, bening etc.
    wenn du dir einen selber basteln willst, das geht auch, kommt aber nicht viel billiger.
    und zur software, nunja, kommt halt drauf an was die machen soll. da kann ich dir nur insoweit helfen, dass ich mir das programm ansehen kann wenn du möchtest.

    mfg

    yves
    0
     

  3. erst mal vielen dank für deine antwort..
    ich habe dir hier mal meinen code, mit welchem ich versuche eine com schnittstelle zu eröffnen. ich habe com1 gewählt, weil das meines erachtens nach diejenige des cradles ist.. stimmt das? ach ja übrigens ich verwende einen ipaq 3950..

    Code:
    #include <fstream.h>
    #include "stdafx.h"
    #include "serial.h" 
    #include <commctrl.h>
    #include <atlbase.h>
    
    /CSerial&#58;&#58;CSerial&#40;&#41; &#58; hComm&#40;INVALID_HANDLE_VALUE&#41;
    &#123;
    &#125;
    /*Destruktor&#58; 
    CSerial&#58;&#58;~CSerial&#40;&#41;
    &#123;
       Close &#40;&#41;;
    &#125;
    BOOL CSerial&#58;&#58;ModeSet &#40;int nBaud, int nBits, int nStopp, int nParity&#41; 
    
    &#123;
       if &#40;INVALID_HANDLE_VALUE == hComm&#41; // COM-Port überhaupt geöffnet?
           return &#40;FALSE&#41;;
       DCB dcb; // Struktur vom Typ DCB erzeugen
       ZeroMemory &#40;&dcb, sizeof&#40;dcb&#41;&#41;; // ..und schön löschen &#40;wichtig!&#41;
    // Die bestehenden Parameter holen. Bei Fehler ist hier Schluss!
       if &#40;!GetCommState &#40;hComm, &dcb&#41;&#41; 
       &#123;
          Close &#40;&#41;;
          MessageBox &#40;NULL, L"Fehler beim Ändern der COM-Port Parameter\nGetCommState&#40;&#41;", 
                      NULL, NULL&#41;;
          return &#40;FALSE&#41;;
       &#125;
       // neue Parameter in die Struktur kopieren &#40;Baud&#58; z.B. 9600&#41;
       dcb.BaudRate = nBaud; 
       dcb.ByteSize = &#40;BYTE&#41;nBits; 
       dcb.Parity   = &#40;BYTE&#41;nParity; //Parität &#40;siehe MSDN&#41;
       dcb.StopBits = &#40;BYTE&#41;nStopp;	//Stoppbits &#40;siehe MSDN&#41;
       // neue Parameter setzen. Bei Fehler ist hier Schluss!
       if &#40;!SetCommState &#40;hComm, &dcb&#41;&#41; 
       &#123;
          Close &#40;&#41;;
          MessageBox &#40;NULL, L"Fehler beim Ändern der COM-Port Parameter\nSetCommState&#40;&#41;", 
                      NULL, NULL&#41;;
          return &#40;FALSE&#41;;
       &#125;
       return &#40;TRUE&#41;; // fertig
    &#125;
    
    BOOL CSerial&#58;&#58;Open &#40;int nPort, int nBaud, int nBits, int nStopp, int nParity&#41; 
    &#123;
       if &#40;INVALID_HANDLE_VALUE != hComm&#41;  // COM-Port überhaupt geöffnet?
           return &#40;TRUE&#41;;
       char szPort&#91;15&#93; = "\\\\.\\COM1"; 
       hComm = CreateFile &#40;LPCTSTR&#40;szPort&#41;, // COM-Port öffnen
                           GENERIC_READ | GENERIC_WRITE, // wir wollen lesen und schreiben
                           0,
                           0,
                           OPEN_EXISTING,
                           FILE_ATTRIBUTE_NORMAL,
                           NULL&#41;; // nicht OVERLAPPED, wir holen uns den Port exclusiv
       if &#40;hComm == INVALID_HANDLE_VALUE&#41; // hat es geklappt? Bei Fehler ist hier Schluss!
       &#123;
          MessageBox &#40;NULL, L"Fehler beim Öffnen des COM-Ports!\nCreateFile&#40;&#41;", NULL, NULL&#41;;
          return &#40;FALSE&#41;;
       &#125;
       // Alte Timeouts merken. Bei Fehler ist hier Schluss!
       if &#40;!GetCommTimeouts&#40;hComm, &timeouts_alt&#41;&#41; 
       &#123;
          Close &#40;&#41;;
          MessageBox &#40;NULL, L"Fehler beim Öffnen des COM-Ports!\nGetCommTimeouts&#40;&#41;", 
                      NULL, NULL&#41;;
          return &#40;FALSE&#41;;
       &#125;   
       // Eine Struktur vom Typ COMMTIMEOUTS erzeugen und neue Timeouts setzen
       COMMTIMEOUTS timeouts; 
       timeouts.ReadIntervalTimeout         = 3000;
       timeouts.ReadTotalTimeoutMultiplier  = 3000;
       timeouts.ReadTotalTimeoutConstant    = 3000;
       timeouts.WriteTotalTimeoutMultiplier = 3000;
       timeouts.WriteTotalTimeoutConstant   = 3000;
       // Neue Timeouts setzen. Bei Fehler ist hier Schluss!
       if &#40;!SetCommTimeouts&#40;hComm, &timeouts&#41;&#41; 
       &#123;
          Close &#40;&#41;;
          MessageBox &#40;NULL, L"Fehler beim Öffnen des COM-Ports!\nSetCommTimeouts&#40;&#41;", 
                      NULL, NULL&#41;;
          return &#40;FALSE&#41;;
       &#125;
       DCB dcb; // Struktur vom Typ DCB erzeugen
       ZeroMemory &#40;&dcb, sizeof&#40;dcb&#41;&#41;; // ..und schön löschen &#40;wichtig!&#41;
       // Die bestehenden Parameter holen. Bei Fehler ist hier Schluss!
       if &#40;!GetCommState &#40;hComm, &dcb&#41;&#41; 
       &#123;
          Close &#40;&#41;;
          MessageBox &#40;NULL, L"Fehler beim Öffnen des COM-Ports!\nGetCommState&#40;&#41;", 
                      NULL, NULL&#41;;
          return &#40;FALSE&#41;;
       &#125;
       dcb_alt = dcb; // alte Parameter sichern
       dcb.DCBlength         = sizeof&#40;DCB&#41;;
       dcb.fBinary           = TRUE; // muss immer "TRUE" sein!
       dcb.fParity           = TRUE;
       dcb.fOutxCtsFlow      = FALSE;
       dcb.fOutxDsrFlow      = FALSE;
    		 //dcb.fDtrControl       = DTR_CONTROL_ENABLE;    //XXXXXXXXXXX
    		 //dcb.fRtsControl       = RTS_CONTROL_ENABLE;   //XXXXXXXXXXX
       dcb.fRtsControl=RTS_CONTROL_HANDSHAKE;		//XXXXXXXXXXX
    	dcb.fDtrControl=DTR_CONTROL_HANDSHAKE;		//XXXXXXXXXXX
    	dcb.fDsrSensitivity   = FALSE;
       dcb.fTXContinueOnXoff = TRUE;
       dcb.fOutX             = FALSE;
       dcb.fInX              = FALSE;
       dcb.fErrorChar        = FALSE;
       dcb.fNull             = FALSE;   
       dcb.fAbortOnError     = FALSE;
       dcb.wReserved         = 0; // muss immer "0" sein!
       // neue Parameter in die Struktur kopieren &#40;Baud&#58; z.B. 9600&#41;
       dcb.BaudRate = nBaud; 
       dcb.ByteSize = &#40;BYTE&#41;nBits; 
       dcb.Parity   = &#40;BYTE&#41;nParity;  //Parität &#40;siehe MSDN&#41;
       dcb.StopBits = &#40;BYTE&#41;nStopp;   //Stoppbits &#40;siehe MSDN&#41;
       dcb.fParity = &#40;dcb.Parity != NOPARITY&#41;;
       // neue Parameter setzen. Bei Fehler ist hier Schluss!
       if &#40;!SetCommState &#40;hComm, &dcb&#41;&#41; 
       &#123;
          Close &#40;&#41;;
          MessageBox &#40;NULL, L"Fehler beim setzen der COM-Port Parameter\nSetCommState&#40;&#41;", 
                      NULL, NULL&#41;;
          return &#40;FALSE&#41;;
       &#125;
       return&#40;TRUE&#41;;
    &#125;
    
    /*Schließen des COM-Ports&#58;
    Wie erwartet wird das Handle, was uns CreateFile&#40;&#41; geliefert hat, mit CloseHandle&#40;&#41; geschlossen.
    Die alten Parameter der DCB-Struktur und die alten Timeouts werden zurückgeschrieben. */
    BOOL CSerial&#58;&#58;Close &#40;void&#41;
    &#123;
       if &#40;INVALID_HANDLE_VALUE == hComm&#41; // COM-Port überhaupt geöffnet?
           return&#40;TRUE&#41;;
       if &#40;!SetCommTimeouts&#40;hComm, &timeouts_alt&#41;&#41;
       &#123;
          MessageBox &#40;NULL, L"Fehler beim Schließen des COM-Ports\nSetCommTimeouts&#40;&#41;", 
                      NULL, NULL&#41;;
          return &#40;FALSE&#41;;
       &#125;
       // alte Parameter zurückschreiben. Bei Fehler ist hier Schluss!
       if &#40;!SetCommState &#40;hComm, &dcb_alt&#41;&#41; 
       &#123;
          MessageBox &#40;NULL, L"Fehler beim Schließen des COM-Ports\nSetCommState&#40;&#41;", 
                      NULL, NULL&#41;;
          return &#40;FALSE&#41;;
       &#125;
       CloseHandle &#40;hComm&#41;; // Port schließen
       hComm = INVALID_HANDLE_VALUE; // das Handle zurücksetzen
       return &#40;TRUE&#41;;
    &#125;
    
    
    
    int CSerial&#58;&#58;ReadData &#40;char *buffer,HWND statusBar&#41; // Buffer &#40;*buffer&#41;, der die Zeichen bekommt
    &#123;
    	if &#40;INVALID_HANDLE_VALUE == hComm&#41;						// COM-Port überhaupt geöffnet?
           return&#40;0&#41;;
    
    	DWORD dwRead = 0;
    	char chRead;
    	int i = 0;
    	SendMessage&#40;statusBar,PBM_SETRANGE, 0,MAKELPARAM&#40;0, 850&#41;&#41;; 
    	SendMessage&#40;statusBar,PBM_SETSTEP, &#40;WPARAM&#41; 3, 0&#41;; 
    	while &#40;ReadFile&#40;hComm, &chRead, 1, &dwRead, NULL&#41;&#41;		// wurde ein Zeichen gelesen?
    	&#123;
          if &#40;dwRead != 1&#41;										// ..wenn nicht, dann ist hier Schluß
    			break;
    		buffer&#91;i++&#93; = chRead;								// wann ja, dann das Zeichen in den Buffer schreiben
    	   SendMessage&#40;statusBar,PBM_STEPIT, 0, 0&#41;;
    	&#125;
    	return &#40;i&#41;;												// die Anzahl der gelesenen Bytes zurückgeben
    &#125;
    im hauptprogramm wird als erstes open(...), dann setmode() und dann wieder close() gerufen. doch die abfrage in open() gibt mir immer die meldung, dass createfile fehlgeschlagen hat... was mache ich falsch oder besser gesagt funktioniert es bei dir? dann könnte ich nämlich sicher sein, dass es ein hardwareproblem ist...

    vielen dank und hoffentlich bis bald..

    liebe grüsse marc
    0
     

  4. ich habe gerade urlaub und keinen zugriff auf meine entwicklungsumgebung, aber der code scheint bei kurzem überfliegen ein problem zu haben und nicht die hardware.
    char szPort[15] = "\\\\.\\COM1";
    \\.\COM1 ist so weit ich weis nicht der korrekte bezeichner sieht zu sehr nach *ix aus, aber ich kann mich durchaus auch täuschen. wie gesagt, ich habe die dokumentation und die IDE nicht bei mir, aber mir scheint da das problem zu liegen. wenn der bezeichner stimmt, versuche mal COM2 zu verwenden. wobei dies unsinnig ist, das eigentlich com1 der serielle verbindungport ist und com3 der emulierte serielle für infrarotverbindungen.
    öffnen können sollte der iPAQ den COM1 immer, egal ob da etwas dran angehängt ist oder nicht.
    wie dem auch sei, versuch mal den korrekten bezeichner zu finden für den COM1 (vielleicht >COM1??) und wenn das nicht hilft, nimm mal die kommentare aus der open() anweisung. wer weis, manchmal ist der M$ compiler nicht so zuverlässig wie er sein sollte.
    wenn ich wieder zurück in ausm urlaub kann ich nachsehen, ich hatte schon mal ein paar anwendungen mit serieller schnittstelle geschustert, das würde dir bestimmt weiterhelfen.

    mfg

    yves
    0
     

  5. hier hab ich was du brauchst:
    versuch mal nur COM1: einzugeben als dateinamen.
    hier ein snipplet aus einem meiner älteren projekte:
    Code:
    strPort.Format(_T("COM%d:"), uiPort);
        
        m_irPort = CreateFile((LPCTSTR) strPort, GENERIC_READ | GENERIC_WRITE, 
                              0, NULL, OPEN_EXISTING, 0, NULL);
        if (m_irPort == INVALID_HANDLE_VALUE)
    also wie ich mir dachte. dein "dateinamen" war nicht richtig, daher der fehler beim CreateFile

    mfg yves
    0
     

  6. vielen dank, werde es mal so versuchen...
    was mir aber sonst noch aufgefallen ist, ist dass ich keine verbindung zum pc herstellen kann, aber nur per com, mit der usb schnittstelle funktioniert es...
    melde mich später wieder
    0
     

  7. es geht noch immer nicht....
    muss ich noch etwas am ipaq einstellen?
    wäre sehr froh wenn du dir nochmals kurz zet nehmen könntest, bin ziemlich aufgeschmissen...
    wie kann ich möglichst einfach testen ob mein comport geöffnet werden kann? am besten wäre ein kleiner code dazu...
    0
     

  8. nun, ich würde mal ein einfaches programm schreiben was irgend einen string an den com1 ausgibt. nun könntest du den COM1 an deinem computer anschliessen und mit hyperterminal oder einer anderen software diesen string einlesen quasi als bestätigung. dazu gehst du wie folgt vor:
    ht öffnen (ist bei start,zubehör,kommunikation oder so) einen profilnamen eingeben, nenne es test oder so.(wenn du kein modem auf einem winXP rechner installiertt hast, wird dir hyperterminal ein tapi fehler auswerfen, tut er bei mir zumindest, einfach drüber hinwegsehen und ok clicken) dann com1 auswählen, oder com2 wenn du den benutzt, die einstellungen welche du auch in deinem code benutzt hast, parität und baud müssen natürlich gleich sein. dann kommst du in ein terminalfenster. drt könntest du dann also auch text an deinen iPAQ schicken via serielle verbindung und eben text empfangen. nun lässt du das fenster einfach offen und sagst dem iPAQ er soll den text nun senden.

    oh, mir viel grad was wichtiges ein. mach vorher ctrl-alt-del und beende WCEMGR oder so, also den das activesynch programm. oder aber du gehst in activeSynch unter einstellungen-verbindungsarten und wählst sowohl USB als auch COM ab, damit der iPAQ nicht in versuchung gerät sich zu synchen. tut er das nähmlich, so wird er keine serielle verbindung mehr aufbauen wollen. ich würde AS beenden und nicht die einstellungen ändern, aber eigentlich müsste das auch klappen.
    0
     

  9. tolle idee, habs soeben versucht, aber ich kann noch immer keinen comport eröffnen... scheisse! hast du mir vielleicht bei gelegenheit eine kleine software zur ansteuerung des comports? nur mit open send und close.. wär huere guet
    0
     

  10. hallo leute

    ich habs geschafft...

    mein code zum öffnen der comschnittstelle sieht so aus:

    ich habe jetzt mal das gemacht:



    HANDLE hComm = CreateFile (L"COM1:", // COM-Port öffnen
    GENERIC_READ | GENERIC_WRITE, // wir wollen lesen und schreiben
    0,
    0,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    NULL); // nicht OVERLAPPED, wir holen uns den Port exclusiv


    um das peripheriegerät überhaupt am com des cradles anschliessen und vorallen ansteuern zu können, habe ich einen nullmodemadapter gebraucht und das funktioniert bestens..

    wenn jemand fragen hat zu diesem thema, dann helfe ich ihm gerne:

    thomm1@hta-bi.bfh.ch

    bis dann
    0
     

  11. Gast_neu Gast
    hallo,

    ich habe das serielle Beispiel (CPP- und H-Datei) von Winapi-net runtergeladen und wüsste gerne, wie dieses mt VS2005_Pro ausführen kann!
    Danke
    0
     

Besucher haben diese Seite mit folgenden Suchbegriffen gefunden:

windows ce programmierung serielle schnittstelle

gerätecode beim 3950 ipaq auslesen

windows mobile 6.5 FILE_ATTRIBUTE_NORMAL

c com port auslesen windows

prüfen ob comport geöffnet c

ipaq 3950 rs232

windows mobile 6.5 createfile serial port

windows mobile createfile com1

prüfen ob comport geöffnet

com-port öffnenwin ce 6

über com1 schreiben und öffnen in c

dcb struktur

evc terminal pocketpc

rs232 timeout cpp

ipaq 3950 gerätecode auslesen

com1 in c programmieren

ipaq 3950 code 38

windows ce com port öffnen c createfile

c com1 windows CE

win ce com port öffnen

c programm com port öffnen

visual c serial port timeout abfragen

pocketpc serielle schnittstelle programmieren evc

basteltipps ipaq 3950

Stichworte