⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simpletapi.cpp

📁 DOS下采用中断接收数据的串口通讯的例子,很难找到的好东西!
💻 CPP
📖 第 1 页 / 共 3 页
字号:
            //
            // Note that when the call is dropped I call 
            // TAPI to free up the m_hCall handle that was
            // associated with this call way back when it
            // was first initiated.
            //
            if ( tapi->m_hCall ) {
                HCALL temp_hcall = tapi->m_hCall;
                tapi->m_hCall = 0;
                tapi->DisconnectedEvent();
                m_Trace << "Call was dropped\n";
                lineDeallocateCall( temp_hcall );
                tapi->m_bCallHandleValid = 0;
                if ( tapi->m_ReplyAction == HANDLE_DROP_RESULT ) { //hack, I never see it o/w
                    tapi->HandleDropResult( 0 );
                    tapi->m_ReplyAction = NOTHING;
                }
            }
            break;
            //
            // In SimpleTapi, we will always answer an 
            // incoming call that is being offered if the
            // line is open. So if you don't want to answer
            // an incoming call, don't open the line. Note 
            // that this creates the m_hCall handle, which
            // will be used for the duration of the call.
            // The call to lineAnswer() will almost always 
            // be given asynchronously, with a result code
            // of > 0.
            //
        case LINECALLSTATE_OFFERING :
            {
                tapi->m_hCall = (HCALL) hDevice;
                LONG result = lineAnswer( tapi->m_hCall, NULL, 0 );
                if ( result < 0 ) {
                    tapi->Error( "Error returned from lineAnswer : ", result );
                } else if ( result == 0 ) {
                    m_Trace << "lineAnswer returned : "
                            << result
                            << "\n";
                    tapi->HandleAnswerResult( 0 );
                } else {
                    tapi->m_ReplyAction = HANDLE_ANSWER_RESULT;
                    tapi->m_dwPendingReplyCode = result;
                }
            }
            break;
        }
        tapi->m_lCallState = dwParam1;
    }
}

//
// This static member function simply transates one of the
// seemingly infinite TAPI error status codes to a string.
// This makes the trace information easier to read.
//
string SimpleTapi::TranslateTapiError( LONG code )
{
    switch (code ) {
    case LINEERR_ALLOCATED :
        return "LINEERR_ALLOCATED";
    case LINEERR_BADDEVICEID :
        return "LINEERR_BADDEVICEID";
    case LINEERR_BEARERMODEUNAVAIL:
        return "LINEERR_BEARERMODEUNAVAIL";
    case LINEERR_CALLUNAVAIL:
        return "LINEERR_CALLUNAVAIL";
    case LINEERR_COMPLETIONOVERRUN:
        return "LINEERR_COMPLETIONOVERRUN";
    case LINEERR_CONFERENCEFULL:
        return "LINEERR_CONFERENCEFULL";
    case LINEERR_DIALBILLING:
        return "LINEERR_DIALBILLING";
    case LINEERR_DIALDIALTONE:
        return "LINEERR_DIALDIALTONE";
    case LINEERR_DIALPROMPT:
        return "LINEERR_DIALPROMPT";
    case LINEERR_DIALQUIET:
        return "LINEERR_DIALQUIET";
    case LINEERR_INCOMPATIBLEAPIVERSION:
        return "LINEERR_INCOMPATIBLEAPIVERSION";
    case LINEERR_INCOMPATIBLEEXTVERSION:
        return "LINEERR_INCOMPATIBLEEXTVERSION";
    case LINEERR_INIFILECORRUPT:
        return "LINEERR_INIFILECORRUPT";
    case LINEERR_INUSE:
        return "LINEERR_INUSE";
    case LINEERR_INVALADDRESS:
        return "LINEERR_INVALADDRESS";
    case LINEERR_INVALADDRESSID:
        return "LINEERR_INVALADDRESSID";
    case LINEERR_INVALADDRESSMODE:
        return "LINEERR_INVALADDRESSMODE";
    case LINEERR_INVALADDRESSSTATE:
        return "LINEERR_INVALADDRESSSTATE";
    case LINEERR_INVALAPPHANDLE:
        return "LINEERR_INVALAPPHANDLE";
    case LINEERR_INVALAPPNAME:
        return "LINEERR_INVALAPPNAME";
    case LINEERR_INVALBEARERMODE:
        return "LINEERR_INVALBEARERMODE";
    case LINEERR_INVALCALLCOMPLMODE:
        return "LINEERR_INVALCALLCOMPLMODE";
    case LINEERR_INVALCALLHANDLE:
        return "LINEERR_INVALCALLHANDLE";
    case LINEERR_INVALCALLPARAMS:
        return "LINEERR_INVALCALLPARAMS";
    case LINEERR_INVALCALLPRIVILEGE:
        return "LINEERR_INVALCALLPRIVILEGE";
    case LINEERR_INVALCALLSELECT:
        return "LINEERR_INVALCALLSELECT";
    case LINEERR_INVALCALLSTATE:
        return "LINEERR_INVALCALLSTATE";
    case LINEERR_INVALCALLSTATELIST:
        return "LINEERR_INVALCALLSTATELIST";
    case LINEERR_INVALCARD:
        return "LINEERR_INVALCARD";
    case LINEERR_INVALCOMPLETIONID:
        return "LINEERR_INVALCOMPLETIONID";
    case LINEERR_INVALCONFCALLHANDLE:
        return "LINEERR_INVALCONFCALLHANDLE";
    case LINEERR_INVALCONSULTCALLHANDLE:
        return "LINEERR_INVALCONSULTCALLHANDLE";
    case LINEERR_INVALCOUNTRYCODE:
        return "LINEERR_INVALCOUNTRYCODE";
    case LINEERR_INVALDEVICECLASS:
        return "LINEERR_INVALDEVICECLASS";
    case LINEERR_INVALDEVICEHANDLE:
        return "LINEERR_INVALDEVICEHANDLE";
    case LINEERR_INVALDIALPARAMS:
        return "LINEERR_INVALDIALPARAMS";
    case LINEERR_INVALDIGITLIST:
        return "LINEERR_INVALDIGITLIST";
    case LINEERR_INVALDIGITMODE:
        return "LINEERR_INVALDIGITMODE";
    case LINEERR_INVALDIGITS:
        return "LINEERR_INVALDIGITS";
    case LINEERR_INVALEXTVERSION:
        return "LINEERR_INVALEXTVERSION";
    case LINEERR_INVALGROUPID:
        return "LINEERR_INVALGROUPID";
    case LINEERR_INVALLINEHANDLE:
        return "LINEERR_INVALLINEHANDLE";
    case LINEERR_INVALLINESTATE:
        return "LINEERR_INVALLINESTATE";
    case LINEERR_INVALLOCATION:
        return "LINEERR_INVALLOCATION";
    case LINEERR_INVALMEDIALIST:
        return "LINEERR_INVALMEDIALIST";
    case LINEERR_INVALMEDIAMODE:
        return "LINEERR_INVALMEDIAMODE";
    case LINEERR_INVALMESSAGEID:
        return "LINEERR_INVALMESSAGEID";
    case LINEERR_INVALPARAM:
        return "LINEERR_INVALPARAM";
    case LINEERR_INVALPARKID:
        return "LINEERR_INVALPARKID";
    case LINEERR_INVALPARKMODE:
        return "LINEERR_INVALPARKMODE";
    case LINEERR_INVALPOINTER:
        return "LINEERR_INVALPOINTER";
    case LINEERR_INVALPRIVSELECT:
        return "LINEERR_INVALPRIVSELECT";
    case LINEERR_INVALRATE:
        return "LINEERR_INVALRATE";
    case LINEERR_INVALREQUESTMODE:
        return "LINEERR_INVALREQUESTMODE";
    case LINEERR_INVALTERMINALID:
        return "LINEERR_INVALTERMINALID";
    case LINEERR_INVALTERMINALMODE:
        return "LINEERR_INVALTERMINALMODE";
    case LINEERR_INVALTIMEOUT:
        return "LINEERR_INVALTIMEOUT";
    case LINEERR_INVALTONE:
        return "LINEERR_INVALTONE";
    case LINEERR_INVALTONELIST:
        return "LINEERR_INVALTONELIST";
    case LINEERR_INVALTONEMODE:
        return "LINEERR_INVALTONEMODE";
    case LINEERR_INVALTRANSFERMODE:
        return "LINEERR_INVALTRANSFERMODE";
    case LINEERR_LINEMAPPERFAILED:
        return "LINEERR_LINEMAPPERFAILED";
    case LINEERR_NOCONFERENCE:
        return "LINEERR_NOCONFERENCE";
    case LINEERR_NODEVICE:
        return "LINEERR_NODEVICE";
    case LINEERR_NODRIVER:
        return "LINEERR_NODRIVER";
    case LINEERR_NOMEM:
        return "LINEERR_NOMEM";
    case LINEERR_NOREQUEST:
        return "LINEERR_NOREQUEST";
    case LINEERR_NOTOWNER:
        return "LINEERR_NOTOWNER";
    case LINEERR_NOTREGISTERED:
        return "LINEERR_NOTREGISTERED";
    case LINEERR_OPERATIONFAILED:
        return "LINEERR_OPERATIONFAILED";
    case LINEERR_OPERATIONUNAVAIL:
        return "LINEERR_OPERATIONUNAVAIL";
    case LINEERR_RATEUNAVAIL:
        return "LINEERR_RATEUNAVAIL";
    case LINEERR_RESOURCEUNAVAIL:
        return "LINEERR_RESOURCEUNAVAIL";
    case LINEERR_REQUESTOVERRUN:
        return "LINEERR_REQUESTOVERRUN";
    case LINEERR_STRUCTURETOOSMALL:
        return "LINEERR_STRUCTURETOOSMALL";
    case LINEERR_TARGETNOTFOUND:
        return "LINEERR_TARGETNOTFOUND";
    case LINEERR_TARGETSELF:
        return "LINEERR_TARGETSELF";
    case LINEERR_UNINITIALIZED:
        return "LINEERR_UNINITIALIZED";
    case LINEERR_USERUSERINFOTOOBIG:
        return "LINEERR_USERUSERINFOTOOBIG";
    case LINEERR_REINIT:
        return "LINEERR_REINIT";
    case LINEERR_ADDRESSBLOCKED:
        return "LINEERR_ADDRESSBLOCKED";
    case LINEERR_BILLINGREJECTED:
        return "LINEERR_BILLINGREJECTED";
    case LINEERR_INVALFEATURE:
        return "LINEERR_INVALFEATURE";
    case LINEERR_NOMULTIPLEINSTANCE:
        return "LINEERR_NOMULTIPLEINSTANCE";
    }
    char buf[ 128 ];
    wsprintf( buf, "Unknown error code: %08lx", code );
    return buf;
}

//
// This static member function simply transates one of the
// TAPI call state codes to a string. This makes the trace 
// information easier to read.
//
string SimpleTapi::TranslateCallState( LONG state )
{
    switch ( state ) {
    case LINECALLSTATE_IDLE:
        return "LINECALLSTATE_IDLE";
    case LINECALLSTATE_OFFERING:
        return "LINECALLSTATE_OFFERING";
    case LINECALLSTATE_ACCEPTED:
        return "LINECALLSTATE_ACCEPTED";
    case LINECALLSTATE_DIALTONE:
        return "LINECALLSTATE_DIALTONE";
    case LINECALLSTATE_DIALING:
        return "LINECALLSTATE_DIALING";
    case LINECALLSTATE_RINGBACK:
        return "LINECALLSTATE_RINGBACK";
    case LINECALLSTATE_BUSY:
        return "LINECALLSTATE_BUSY";
    case LINECALLSTATE_SPECIALINFO:
        return "LINECALLSTATE_SPECIALINFO";
    case LINECALLSTATE_CONNECTED:
        return "LINECALLSTATE_CONNECTED";
    case LINECALLSTATE_PROCEEDING:
        return "LINECALLSTATE_PROCEEDING";
    case LINECALLSTATE_ONHOLD:
        return "LINECALLSTATE_ONHOLD";
    case LINECALLSTATE_CONFERENCED:
        return "LINECALLSTATE_CONFERENCED";
    case LINECALLSTATE_ONHOLDPENDCONF:
        return "LINECALLSTATE_ONHOLDPENDCONF";
    case LINECALLSTATE_ONHOLDPENDTRANSFER:
        return "LINECALLSTATE_ONHOLDPENDTRANSFER";
    case LINECALLSTATE_DISCONNECTED:
        return "LINECALLSTATE_DISCONNECTED";
    case LINECALLSTATE_UNKNOWN:
        return "LINECALLSTATE_UNKNOWN";
    case -1:
        return "";
    }
    char buf[ 128 ];
    wsprintf( buf, "Unknown call state: %08lx", state );
    return buf;
}

//
// TAPI is kind enough to provide a thorough configuration
// dialog for the devices it supports, relieving programmers
// of the horrible prospect of writing customized dialogs 
// for any device a user might care to employ. All we have
// to do to invoke this ID is to come up with a device ID 
// number and a parent window handle.
//
void SimpleTapi::ConfigureDevice( int index )
{
    int dev_id = m_Devices[ index ].m_iDeviceNumber;
    LONG result = lineConfigDialog( dev_id,
                                    GetWindow(),
                                    "comm/datamodem" );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -