Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 249304 (10740)

| Suchen
Seiten: 1 2 | Zurück zur Übersicht

Autor | Thema: Fritz! Card ansteuern ???
Christian Edelmann
| Datum:10.12.01 18:16 (idel@idel-online.de) |
Hallo, hat schonmal jemand einen ISDN Adapter (z.B. Fritz! Card) über Profan² angesprochen ? Ich möchte eigentlich nur auswerten ob ein Anruf kommt (und welche MSN angewählt wurde). Ich habe nicht vor irgendwelche Daten zu übertragen... ...leider habe ich keine Ahnung wie ich die Karte ansprechen soll... Da gibt es doch was mit CAPI, oder ? Oder gibts dafür eine DLL (das wäre super)? Ich hoffe es gibt hier jemanden, der sich damit zumindest halbwegs auskennt. Viele Grüße an alle Profaner... C. Edelmann
Thorsten HG
| Datum:10.12.01 20:25 (mrk@mrk-soft.de) |
Hi, eine ISDN Kate lässt sich nur über die CAPI ansprechen, da dort die Funktionen der Karte hinterlegt sind. Wenn ich jedoch schon damals die CAPI Dokumentation richtig verstanden habe, läuft der Zugriff über CallBacK ab !!!
Christian Edelmann
| Datum:10.12.01 22:02 (idel@idel-online.de) |
Erstmal Danke für Deine schnelle Antwort ! Was ist CallBack ??? Wie funktioniert das ? Wie spreche ich die CAPI an? Ist das so eine Art DLL?
Sven Schmidts
| Datum:11.12.01 08:12 (schmidts@flat2serv.de) |
Hallo, CAPI kannst Du nicht ansteuern, weil es ein CallBack Verfahren ist. Sprich: Die CAPI Schnittstelle reagiert auf Anrufe und benachrichtigt registrierte Programme über dieses Ereigniss, liefert bei der Gelegenheit jede Menge Daten mit. Da bekommst Du mehrere Probleme, so scheitert es erstmal daran, dass Profan² dieses "CallBack" nicht kann. CallBack: Du gibst den Zeiger auf eine Prozedur weiter (z.B. an die CAPI) und die ruft dann die Prozedur von draussen mit div. Parametern auf. Profan's Prozeduren haben aber keinen Zeiger, weil sie anders verwaltet werden. Das ist das Problem. Mfg. Sven Schmidts
Thorsten HG
| Datum:11.12.01 08:20 (mrk@mrk-soft.de) |
Moin, Callback heist soviel wie: Das ein Unterprogramm / DLL, usw. als Rückgabe nicht etwa einen Wert liefert, sondern einen Funktion , Programmcode ausführen möchte und zwars an der angegebenden Adresse, die zu Anfang übergeben wurde. Dazu ist Profan aber leier nicht in der Lage, also ist Callback mit Profan NICHT möglich. den eine Prozedure al Adressea nzugeben ist ebend nicht möglich .... (jedenfalls normalerweise, Irgendwer hatte sich mal an DirectDraw mit Porofan versucht und als Call-Back Adresse im Profan Programm dieekten Assemlber-Code in Bereichsvariabeln abgelegt, der dort ausgeführt wurde. Fand ich ehrlich faszinierend, nur ist sowas einfach zu Aufwendig und der Code ist schwer zu warten.) Ich schau mal nach, ob ich die Doku noch finde, wenn ich wieder "To Home" bin, (heute Abend), nur ist die komplett, wie fast alles, in Englisch.
Sebastian König
| Datum:11.12.01 16:21 (feedback@sekoenig.de) |
Hallo, > (jedenfalls normalerweise, Irgendwer hatte sich mal an > DirectDraw mit Porofan versucht und als Call-Back Adresse > im Profan Programm dieekten Assemlber-Code in > Bereichsvariabeln abgelegt, der dort ausgeführt wurde. > Fand ich ehrlich faszinierend, nur ist sowas einfach > zu Aufwendig und der Code ist schwer zu warten.) der besagte Quellcode stammt von mir und beschäftigt sich mit MDI (Multiple Document Interface) und Profan²; zu finden ist er hier. Für DirectDraw mit Profan² benötigt man nicht unbedingt Callback-Funktionen... Wie auch immer, mit dieser Methode (Maschinencode in Bereichsvariablen) wäre es zwar wahrscheinlich sogar möglich CAPI mit Profan² zu benutzen, der Aufwand wäre jedoch immens, da man alle wichtigen Teile des Programms als Maschinencode schreiben müsste... Es wäre dann weniger aufwendig, das ganze Programm in Assembler zu schreiben ;-) MfG Sebastian
Christian Edelmann
| Datum:11.12.01 19:18 (idel@idel-online.de) |
Danke erstmal für die Infos ! Also : CallBack mit Profan ist unmöglich... ...aber was ist, wenn man ein anderes Programm (z.B. in Delphi, C, C++, Pascal, o.ä.) als Schnittstelle benutzt ? Also in etwa so : CAPI <---> Interface Programm <---> Profan Programm Man müsste doch irgendwie Daten zwischen einem Delphi o.ä. Programm und einem Profan Programm austauschen können, oder ? Jetzt sollte man nur noch Defphi & Co beherrschen...ich kanns nämlich nicht ! Im Internet unter http://home.t-online.de/home/Peter.Zwosta/index.htm hab ich einen Delphi - Quelltext für einen Anrufmonitor gefunden. Das wäre wahrscheinlich genau das Richtige... Kann man dieses Programm so umfunktionieren, dass es bei einem eingehenden Anruf die MSN an Profan übergibt ? Wäre toll !!!
Sebastian König
| Datum:12.12.01 19:17 (feedback@sekoenig.de) |
Hallo, ich habe auf Basis eines VB-Codes gerade ein wenig mit CAPI experimentiert und dabei bemerkt, dass man kein Callback benötigt, um eingehende Anrufe zu registrieren - es ist ausreichend, in festen Zeitabständen zu kontrollieren, ob neue CAPI-Messages vorhanden sind... Ich bin nun so weit, dass ich bei einem Anruf tatsächlich eine entsprechende Nachricht von der CAPI erhalte - es sollte so auch möglich sein, die Nummer des Anrufers anzuzeigen. Heute Abend habe ich leider keine Zeit mehr, mich weiter mit dem Thema zu beschäftigen, aber wenn alles funktioniert kann ich hier morgen wahrscheinlich einen Code posten, der eingehende Anrufe inkl. Rufnummer anzeigt. MfG Sebastian
Sebastian König
| Datum:13.12.01 21:36 (feedback@sekoenig.de) |
Hallo, ich habe es zwar aus Zeitmangel leider noch nicht geschafft, den Code vollständig fertigzustellen, aber es funktioniert schon ganz gut. Sowohl anrufende als auch gerufene Nummer werden bei einem Anruf korrekt angezeigt. Ihr könnt den Quellcode hier herunterladen. Bei mir (Windows XP, Fritz!Card PCI) funktionert es wunderbar. Folgendes werde ich voraussichtlich morgen noch einbauen: -Auf einen eingehenden Anruf sollte man eine Antwort-Nachricht senden -Wenn der Anrufer kein ISDN verwendet, kann natürlich seine Nummer nicht angezeigt werden - darauf sollte man mit einer entsprechenden Nachricht reagieren... Viel Spaß mit dem Code! MfG Sebastian
Sven Schmidts
| Datum:14.12.01 14:19 (schmidts@flat2serv.de) |
Respekt!
Sebastian König
| Datum:14.12.01 17:32 (feedback@sekoenig.de) |
Hallo, > Respekt! Danke :-) Ich habe den Quellcode nun fertiggestellt. Die Anrufe werden nicht mehr blockiert und auf analoge Telefone und ISDN-Telefone, die keine Nummer senden, wird nun korrekt reagiert. Außerdem habe ich einige kleinere Fehler korrigiert... Hier der Download-Link für die fertige Version des Quellcodes: http://www.sekoenig.de/download/capi.zip MfG Sebastian
Christian Edelmann
| Datum:16.12.01 14:49 (idel@idel-online.de) |
Vielen Dank!!! Ich habe dein kleines Programm ausprobiert und es funktioniert einwandfrei. Genau so habe ich mir das vorgestellt. Ich bin jetzt gerade dabei mein Programm etwas umzustricken, dass ich dein Proggie einbauen kann. Es gibt (fast) nichts, das mit Profan² nicht geht...! Viele Grüße an alle C. Edelmann
Sven Schmidts
| Datum:17.12.01 14:05 (schmidts@flat2serv.de) |
Naja, da fallen mir schon eine Menge Sachen ein, aber gut. Was man nicht kennt, vermisst man nicht *gg* Mfg. Sven Schmidts
Christian Edelmann
| Datum:17.12.01 19:33 (idel@idel-online.de) |
Also... ich hab jetzt den Quellcode in mein Programm eingebaut und bin auf folgendes Problem gestoßen : Man kann 5mal anrufen und alles funktioniert super. Beim 6. mal bekommt man nur noch ein Besetztzeichen und es passiert auch nichts mehr. Ich habe es auch mit dem "originalen" Code (capi.prf) probiert - genau das gleiche Problem. Wenn man das -Programm dann schließt und wieder öffnet funktioniert es - wieder 5mal. Fehlermeldung bekomme ich keine, es passiert nur einfach nix mehr... Vielleicht hat Sebastian, der Author eine Idee ??? Gruß Idel
Sebastian König
| Datum:17.12.01 19:45 (feedback@sekoenig.de) |
Hallo, ich habe es bei mir mal ausprobiert und bin auf einen ähnlichen Fehler gestoßen: Nach dem 5. Anruf klingelt zwar mein Telefon, aber der Anruf wird auf dem PC nicht angezeigt... Ich schätze, dass irgendwelche CAPI-Resourcen nicht freigegeben werden, so dass keine Messages mehr an das Programm gesendet werden. Für diese "Theorie" spricht, dass es nach einem erneuten Start wieder funktioniert. Ich werde mich bei Gelegenheit (wahrscheinlich schon morgen) mal damit beschäftigen und versuchen, das Problem zu beheben. MfG Sebastian
Christian Edelmamm
| Datum:17.12.01 20:38 (idel@idel-online.de) |
Vielen Dank !
Jürgen
| Datum:18.12.01 11:17 |
Baue das mal ein .. da klappt das bei mir ... proc TerminateMessageProcessor; Clear ListenREQ# word ListenREQ#,00 = 26 word ListenREQ#,02 = AppID& byte ListenREQ#,04 = $5 'CAPI_LISTEN byte ListenREQ#,05 = $80 'CAPI_REQ word ListenREQ#,06 = 01 long ListenREQ#,08 = 01 CAPI_PUT_MESSAGE(AppID&,ListenREQ#) endproc '---Timer stoppen und Messages stoppen: KillTimer TerminateMessageProcessor
Sebastian König
| Datum:18.12.01 14:22 (feedback@sekoenig.de) |
Hallo, > Baue das mal ein .. da klappt das bei mir ... > [...] bei mir hat das nicht geholfen, das Problem zu beheben. Aber Du hast natürlich Recht, es ist besser, vor dem Beenden den Listen-Request zu stoppen. Ich habe das nun in meinen CAPI-Beispiel-Quellcode eingebaut. Vielleicht kannst Du mir noch Deinen vollen Namen nennen, damit ich die Quelle im Code korrekt angeben kann. Das von Christian angesprochene Problem habe ich auch lösen können; bei mir funktioniert es jetzt. Die Ursache des Problems war, dass ich Vergessen hatte, die Nachricht CAPI_DISCONNECT ($4) abzufangen und eine Antwort zu senden. Die überarbeitete Version des Quellcodes könnt ihr wieder unter http://www.sekoenig.de/download/capi.zip herunterladen. MfG Sebastian
Jürgen K.
| Datum:18.12.01 14:42 |
Hallo Sebastian ! Ich habe vor langer Zeit mal mit Profan gearbeitet und mit der Capi gespielt. Ich möchte Dir meinen Source geben ... kann man als Include umarbeiten und verwenden. Du darfst den Source verändern und etwas für die Profan-Welt bauen ... viel Spaß damit ... die DEF ... bitte an obere Stelle des Source setzen !!! Viele Grüße Jürgen ' Public Variaben Declare c_CapiName$, i_Capi_ID&, i_Capi_Handle&, i_Message_Nr% c_CapiName$ = "" i_Capi_ID& = 00 i_Capi_Handle& = 00 i_Message_Nr% = 00 Proc GET_CAPI_ID ' Für eventuelle Zusatzfunktionen CAPI_ID zeigen Return i_Capi_ID& EndProc Proc GET_CAPI_DLL_HANDLE ' Für eventuelle Zusatzfunktionen CAPI_DLL_HANDLE zeigen Return i_Capi_Handle& EndProc Proc CAPI_INSTALLED Parameters c_Capi_Dll$ ' Initialisieren und CAPI_Handle holen und für Public erklären c_CapiName$ = c_Capi_Dll$ Declare i_Ret& i_Ret& = 01 If i_Capi_Handle& = 00 i_Capi_Handle& = @UseDLL(c_CapiName$) If i_Capi_Handle& > 32 i_Ret& = 00 Else i_Ret& = 01 Endif IF i_Ret& = 00 Def @_CAPI_INSTALLED(00) ! c_CapiName$ ,"CAPI_INSTALLED" i_Ret& = _CAPI_INSTALLED() IF i_Ret& <> 00 FreeDLL i_Capi_Handle& i_Capi_Handle& = 00 i_Capi_ID& = 00 Endif Endif Else i_Ret& = 00 Endif Return i_RET& EndProc Proc CAPI_RELEASE ' Abmelden einer Applikation Declare i_Ret& i_Ret& = 01 If (i_Capi_Handle& > 00) And (i_Capi_ID& > 00) Def @_CAPI_RELEASE(01) ! c_CapiName$ ,"CAPI_RELEASE" i_Ret& = _CAPI_RELEASE(i_Capi_ID&) If i_Ret& = 00 FreeDLL i_Capi_Handle& i_Capi_Handle& = 00 i_Capi_ID& = 00 i_Ret& = 00 Endif Else If i_Capi_Handle& > 00 FreeDLL i_Capi_Handle& i_Capi_Handle& = 00 i_Capi_ID& = 00 i_Ret& = 00 Else i_Ret& = 00 Endif Endif Return i_Ret& EndProc Proc CAPI_REGISTER Parameters i_Log_Verbindung&, i_B_Datenblock&, i_Bytes_B_Datenblock& ' Registrierung einer Applikation Capi_ID holen und für Public erklären Declare i_Ret&, i_Messages_Bytes& i_Ret& = 01 i_Messages_Bytes& = (1024 + (1024 * i_Log_Verbindung&)) If i_Capi_Handle& > 00 If i_Capi_ID& = 00 Def @_CAPI_REGISTER(05) ! c_CapiName$ ,"CAPI_REGISTER" If _CAPI_REGISTER(i_Messages_Bytes&,i_Log_Verbindung&,i_B_Datenblock&,i_Bytes_B_Datenblock&,Addr(i_Capi_ID&)) = 00 i_Ret& = 00 Else i_Capi_ID& = 00 Endif Else i_Ret& = 00 Endif Endif Return i_Ret& EndProc Proc CapiGetManufacturer Declare c_Text$ c_Text$ = Space$(64) If i_Capi_Handle& > 00 External(c_CapiName$,"CAPI_GET_MANUFACTURER",Addr(c_Text$)) Endif Return Trim$(c_Text$) EndProc Proc CapiGetVersion Declare c_Ret$, c_A&, c_B&, c_C&, c_D& c_Ret$ = "" If i_Capi_Handle& > 00 External(c_CapiName$,"CAPI_GET_VERSION",Addr(c_A&),Addr(c_B&),Addr(c_C&),Addr(c_D&)) c_Ret$ = Str$(c_A&)+"."+Str$(c_B&)+" Release "+Str$(c_C&)+"."+Str$(c_D&) Endif Return Trim$(c_Ret$) EndProc Proc CAPI_WAIT_FOR_SIGNAL ' Warten auf ein Signal über CAPI-Aktivitäten Declare i_Ret& i_Ret& = 01 If (i_Capi_Handle& > 00) And (i_Capi_ID& > 00) Def @_CAPI_WAIT_FOR_SIGNAL(01) ! c_CapiName$ ,"CAPI_WAIT_FOR_SIGNAL" If _CAPI_WAIT_FOR_SIGNAL(i_Capi_ID&) = 00 i_Ret& = 00 Endif Endif Return i_Ret& EndProc Proc GET_FREE_MESSAGE_NUMBER ' Nächste frei Messagenummer holen If i_Capi_ID& > 00 i_Message_Nr% = i_Message_Nr% + 01 If i_Message_Nr% > 255 i_Message_Nr% = 01 Endif Endif Return i_Message_Nr% EndProc Proc CAPI_PUT_MESSAGE Parameters i_Capi_Message& ' Message an die CAPI senden Declare i_Ret& i_Ret& = 00 If (i_Capi_Handle& > 00) And (i_Capi_ID& > 00) Def @_CAPI_PUT_MESSAGE(02) ! c_CapiName$ ,"CAPI_PUT_MESSAGE" i_Ret& = _CAPI_PUT_MESSAGE(i_Capi_ID&,i_Capi_Message&) Endif Return @VAL(@HEX$(i_Ret&)) EndProc '####################################### muß noch bearbeitet werden Proc CAPI_GET_MESSAGE ' Message von der CAPI abholen Declare i_Capi_Message& i_Capi_Message& = 00 Declare i_Ret& i_Ret& = 00 If (i_Capi_Handle& > 00) And (i_Capi_ID& > 00) Def @_CAPI_GET_MESSAGE(02) ! c_CapiName$ ,"CAPI_GET_MESSAGE" i_Ret& = _CAPI_GET_MESSAGE(i_Capi_ID&,Addr(i_Capi_Message&)) If i_Ret& = 00 i_Ret& = i_Capi_Message& Endif Endif Return i_Ret& EndProc Proc CAPI_GET_PROFILE Declare c_Buffer$, i_Adresse& c_Buffer$ = MkStr$(Chr$(00),255) If i_Capi_Handle& > 00 Def @_CAPI_GET_PROFILE(02) ! c_CapiName$ ,"CAPI_GET_PROFILE" _CAPI_GET_PROFILE(Addr(c_Buffer$)+01,01) Endif i_Adresse& = Addr(c_Buffer$) Print "Werte :" Print "ISDN Controler : "; @Word(i_Adresse&,01) Print "B-Channels : "; @Word(i_Adresse&,03) Print "Internal Contr.: "; Byte(i_Adresse&,05) Print "External Equip.: "; Byte(i_Adresse&,06) Print "Handset supp. : "; Byte(i_Adresse&,07) Print "DTMF supp. : "; Byte(i_Adresse&,08) Waitinput EndProc '##################### Main Print "###### müssen 00 sein" GET_CAPI_ID Print "GET_CAPI_ID : "; @&(0) GET_CAPI_DLL_HANDLE Print "GET_CAPI_DLL_HANDLE : "; @&(0) Print "############" GET_FREE_MESSAGE_NUMBER Print "GET_FREE_MESSAGE_NUMBER : "; @%(0) CAPI_INSTALLED "CAPI2032.DLL" Print "CAPI_INSTALLED : "; @&(0) CapiGetManufacturer Print "CAPI - Hersteller : "+@$(0) CapiGetVersion Print "CAPI - Version : "+@$(0) GET_CAPI_DLL_
Jürgen K.
| Datum:18.12.01 14:45 |
Der Source ist wohl nich ganz angekommen ... hier der Rest: '##################### Main Print "###### müssen 00 sein" GET_CAPI_ID Print "GET_CAPI_ID : "; @&(0) GET_CAPI_DLL_HANDLE Print "GET_CAPI_DLL_HANDLE : "; @&(0) Print "############" GET_FREE_MESSAGE_NUMBER Print "GET_FREE_MESSAGE_NUMBER : "; @%(0) CAPI_INSTALLED "CAPI2032.DLL" Print "CAPI_INSTALLED : "; @&(0) CapiGetManufacturer Print "CAPI - Hersteller : "+@$(0) CapiGetVersion Print "CAPI - Version : "+@$(0) GET_CAPI_DLL_HANDLE Print "GET_CAPI_DLL_HANDLE : "; @&(0) CAPI_REGISTER 01,01,128 Print "CAPI_REGISTER : "; @&(0) GET_CAPI_ID Print "GET_CAPI_ID : "; @&(0) 'CAPI_WAIT_FOR_SIGNAL 'Print "CAPI_WAIT_FOR_SIGNAL : "; @&(0) CAPI_GET_PROFILE WaitInput CAPI_RELEASE Print "CAPI_RELEASE : "; @&(0) WaitInput End

Seiten: 1 2 | Zurück zur Übersicht