Modem

wie programmier ich ein normales Modem?
und zwar hätt ich gern dass es einfach nur eine Nummer wählt, und dann wenn die andere Seite abbricht, abbricht…

probiert hab ichs, aber… TAPI läuft irgendwie nicht so automatisiert (kommt immer so ein lästiges Standardfester) und das Besetztzeichen nach dem Auflegen der anderen Seite wird nicht erkannt…
mit ATDT-Befehlen bzw dem MSCOMM Objekt bricht die Verbindung nach einer Minute ab (Zeit bis die Datenübertragung klappen muss?)
Betriebsystem ist Windows 98, und programmiert soll das ganze in VC 6.0 werden…

Guck Artikel „Schnittstelle ansprechen“ - die Antwort von Paulus
ist sehr gut!
noch dazu was ich selbst von kurzem herausbekommen habe:
Um per Modem Tel. Nr. zu wählen muss du folgendes String abschicken: „ATDT“+Nummer+";\r"
Einwahl abbrechen ist gleich der Option „Modem trennen“ mit dem String „ATH\r“

Mehr zu Zeit weiss ich auch nicht, z.B. wie ich OK von Modem nach Höhrer Abnahme kriege.
Hast du was, kannst du mir mailen.

Lech

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hab geguckt, ist wirklich gar nicht schlecht…
dürfte unter NT sein, unter 98 ist es gar nicht so schwer direkt was auf die Schnittstelle zu kriegen…
faulerweise verwende ich dazu das MSComm Objekt (bzw. den Code dahinter…der baut auch nur auf AT-Befehlen auf…)
das ist die Variante die automatisch nach etwa einer Minute wegen fehlender Datenverbindung abbricht…

das MS-Comm-Objekt verwendet den Befehl „+++ATDT%s\r\n“ (%s ist die Nummer… der Strichpunkt ändert doch nichts?)

probier das mal!
nach so einer Minute (wenn das Telefon abgehoben hat, bricht die Verbindung ab…)
falls es bei dir nicht so ist, dann… bitte, bitte den genauen Code!! :smile:

die andere Variante mit der TAPI-Schnittstelle, greift nicht direkt auf die Schnittstelle zu (leider, denn sonst könnt ich sehen wie… und die Verfolgung in ASM ist nicht witzig…)

Lex

Guck Artikel „Schnittstelle ansprechen“ - die Antwort von
Paulus
ist sehr gut!
noch dazu was ich selbst von kurzem herausbekommen habe:
Um per Modem Tel. Nr. zu wählen muss du folgendes String
abschicken: „ATDT“+Nummer+";\r"
Einwahl abbrechen ist gleich der Option „Modem trennen“ mit
dem String „ATH\r“

Mehr zu Zeit weiss ich auch nicht, z.B. wie ich OK von Modem
nach Höhrer Abnahme kriege.
Hast du was, kannst du mir mailen.

Lech

Hallo,
Die fertige AktiveX mag ich nicht, weil man ist nicht genug flexibel.
Um per Modem Tel. Nr. zu wählen muss du folgendes String abschicken:
„ATDT“+Nummer+";\r"
Einwahl abbrechen ist gleich der Option Modem trennen mit String
„ATH\r“, was man kann nach dem eigenen Höhrer abnehmen tun.

Beispiel:
void CMeinProgrammDlg::open_mouth:nTelWahl()
{
CString Tel_Wahl_Nr;
int Nummer = 2345 ; // Tel Nr. zu wählen
HANDLE hCom;
DWORD dwError;
DCB dcb;
int fSuccess;
unsigned long aa;

Tel_Wahl_Nr.Format("%d",Nummer);
Tel_Wahl_Nr = „ATDT“ + Nummer + „;\r“;

hCom = CreateFile(„COM1“,GENERIC_WRITE,0,
NULL,OPEN_EXISTING,0,NULL);

if(hCom ==INVALID_HANDLE_VALUE)
{
dwError = GetLastError();
AfxMessageBox(„ERROR bei öffnen COM PORT“);
}

fSuccess = GetCommState(hCom, &dcb);

dcb.BaudRate = 9600;
dcb.ByteSize = 7;
dcb.fOutxDsrFlow = TRUE;
dcb.fOutxCtsFlow = TRUE;
dcb.fParity = TRUE;
dcb.Parity = ODDPARITY;
dcb.StopBits = ONESTOPBIT;

fSuccess = SetCommState(hCom, &dcb);

if(WriteFile(hCom,Tel_Wahl_Nr.GetBuffer(Tel_Wahl_Nr.GetLength()),
Tel_Wahl_Nr.GetLength(),&aa,0)==0)
AfxMessageBox („fehler“);

CloseHandle(hCom);
}

CreateFile(…) übergibt die benötigte hCom Handle für WriteFile(…)
Es gibt auch ReadFile(…) Funktion. Guck in die Hilfe von Visual C++.
Wenn ich was weiter herauskriege, sage bescheid.
Solltest du noch problemme haben, schicke ich dir ein kleines programm.
Ich hoffe, konnte dir helfen.

viel Spass
Lech

das MSComm unter VC++ ist genug flexibel… man sieht alles bis zur Hexadresse an die es geschoben wird… (und wegen dem Abnehmen besetzt usw. gibt es eine CallBack-Funktion…)

leider will dein Programm bei mir nicht (im Moment könnts aber dran liegen, dass ich hier nur ein ISDN-simuliertes Modem hab, aber das Programm bleibt einfach stehen… ich werds am Sonntag mit einem ganz normalen Anschluss nachholen)

aber wenn es funktioniert, müsste es genauso nach einer Minute abbrechen, da er ja eine Datenverbindung sucht, oder? (hast du das ausprobiert?)

Lex

Hallo,
also ich hab jetzt den Fehler genau eingekreist… *g*
der Unterschied zu dir war das ‚;‘ das in den Befehlsmodus zurückwechselt… allerdings wird dann das Besetztzeichen nicht mehr erkannt (denn das wird sonst einfach über die COM1 zurückgeschrieben)…
weißt du wie man im Befehlsmodus (also nach dem „ATDT“+Nummer+";\r"-Befehl), das Besetztzeichen erkennt?

mfg,
Lex