Ich arbeite z.Zt an einem kleinen privaten Projekt.
Grob handelt es sich um ein SQL-Datenbank gestütztes Telefonbuch, mit Rufnummernerkennung. Letzteres stellt das Problem dar.
Bis vor kurzem sah die Verbindungskette noch folgendermaßen aus: NTBA
-> Fritz!Card.
Mittlerweile hängt eine Nebenstellenanlage als erstes Gerät in der Kette.
Mit der alten Konstellation lief alles einwandfrei.
CONNECT_IND_CALLINGPARTNUMBER(&CMSG) sendete erwartungsgemäß die Rufnummer zurück.
Die neue Konstellation weigert sich jedoch wehement.
Alle anderen Rückgabewerte scheinen aber noch immer anzukommen.
Auch Standartsoftware wie Fritz!Fon oder gar die demo32 aus der avm-adk lesen die Telefonnummer problemlos ein.
Was mir aufgefallen ist:
Standartmäßig scheint CONNECT_IND_CALLINGPARTNUMBER(&CMSG)nicht die erste „0“ zurückzugeben (etwa bei der Ortsvorwahl) die demo32, setzt jedoch gleich zwei „0“ also: 0089xxxxx. Desweiteren wird bei der Nebenstellenanlage auch nicht mehr die gerufene Telefonnummer angezeigt sonder die MSN.
So jetzt noch im groben der Ablauf, wie ich CAPI anspreche. Vieleicht haben Sie noch eine rettende Idee für mich.
// Natürlich das nötige zum initialisieren
unsigned short Appl_Id = 0;
#define MaxNumBChan 2
#define MaxNumB3DataBlocks 7
#define MaxB3DataBlockSize 2048
#define MsgBufSize (1024 + (1024 * MaxNumBChan))
//RegisterCapi um eine Appl_Id zugewiesen zu bekommen
unsigned RegisterCAPI (void) {
CAPI_REGISTER_ERROR ErrorCode;
unsigned numController;
numController = GetNumController();
Appl_Id = CAPI20_REGISTER(MsgBufSize, MaxNumBChan,
MaxNumB3DataBlocks, MaxB3DataBlockSize, &ErrorCode);
return numController;
}
//Dies ist nun die Fragliche Funktion
QString Funktion::xy {
_cmsg CMSG;
LISTEN_REQ_HEADER(&CMSG, Appl_Id, 0, 1);
LISTEN_REQ_INFOMASK(&CMSG) = 0xffff;
LISTEN_REQ_CIPMASK(&CMSG) = ALL_SERVICES;
LISTEN_REQ_CIPMASK2(&CMSG) = ALL_SERVICES;
LISTEN_REQ_CALLINGPARTYNUMBER(&CMSG) = 0;
LISTEN_REQ_CALLINGPARTYSUBADDRESS(&CMSG) = 0;
CAPI_PUT_CMSG(&CMSG);
if ((int)CAPI20_WAIT_FOR_SIGNAL(Appl_Id) == 0 ){
CAPI_GET_CMSG(&CMSG,Appl_Id);
QVariant var = (char *)CONNECT_IND_CALLINGPARTYNUMBER(&CMSG);
…
}
//Hier nun die Startfunktion
void Funktion::Hauptfunktion {
RegisterCapi();
timer = new QTimer(this); //Startet eine Impulsgeber
//Da ich noch nicht weiß, wie ich mit dem Signal
//CAPI20_WAIT_FOR_SIGNAL sinvoller arbeiten kann
//führt ein Timer alle 100ms die Fuktion xy aus
//Verbindet den timer mit der Funktion
connect(timer, SIGNAL(timeout()), this, SLOT(xy()));
timer->start(100); //Startet den timer, öffnet also alle 100ms die Funktion xy
…
}
Vielen Dank für Ihre Hilfe im Vorraus.
Freundlichst: Günter W.