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

📄 fax.bas

📁 三汇CTI示例程序源码
💻 BAS
📖 第 1 页 / 共 3 页
字号:
            If (szOldStat <> szNewStat) Then
                Fax.m_FaxChList.TextArray(nIndex + 7) = szNewStat
            End If
            nRow = nRow + 1
        End If
    Next i
End Sub



Public Sub UpdateTrunkChListCtrl()                  'update trunk control FLEXGRID
    Dim szNewStat As String * 200
    Dim szOldStat As String * 200
    Dim nIndex As Long
    Dim nChState As Long
    Dim nRow As Long
    Dim i As Long
    Dim nChType As Long
    nRow = 0
    For i = 0 To m_nTotalCh - 1
        nChType = SsmGetChType(i)
        If (nChType <> 5 And nChType <> 9 And m_TrkCh(i).bEnCalled = True) Then
            nIndex = Fax.m_TrkChList.Cols * (nRow + 1)

            'state of trunk channel
            nChState = SsmGetChState(i)
            Select Case (nChState)
                Case -1
                    szNewStat = "-1"
                Case ChState.S_CALL_STANDBY
                    szNewStat = "Idle"
                Case ChState.S_CALL_PICKUPED
                    szNewStat = "Off-hook"
                Case ChState.S_CALL_RINGING
                    szNewStat = "Ringing"
                Case ChState.S_CALL_TALKING
                    szNewStat = "Talking"
                Case ChState.S_CALL_ANALOG_WAITDIALTONE
                    szNewStat = "WtDT"
                Case ChState.S_CALL_ANALOG_TXPHONUM
                    szNewStat = "Dl.."
                Case ChState.S_CALL_ANALOG_WAITDIALRESULT
                    szNewStat = "WtDl"
                Case ChState.S_CALL_PENDING
                    szNewStat = "Pending"
                Case ChState.S_CALL_OFFLINE
                    szNewStat = "Off-line"
                Case ChState.S_CALL_WAIT_REMOTE_PICKUP
                    szNewStat = "Ringback tone"
                Case ChState.S_CALL_UNAVAILABLE
                    szNewStat = "Unavailable"
                Case ChState.S_CALL_LOCKED
                    szNewStat = "Outbound call locked"
                Case ChState.S_CALL_LocalBlock
                    szNewStat = "Local block"
                Case ChState.S_CALL_RemoteBlock
                    szNewStat = "Remote block"
                Case ChState.S_CALL_Ss1InWaitPhoNum
                    szNewStat = "Receiving called party number"
                Case ChState.S_CALL_Ss1InWaitFwdStop
                    szNewStat = "Waiting for forward signal"
                Case ChState.S_CALL_Ss1InWaitCallerID
                    szNewStat = "Receiving calling party number"
                Case ChState.S_CALL_Ss1InWaitKD
                    szNewStat = "Receiving KD"
                Case ChState.S_CALL_Ss1InWaitKDStop
                    szNewStat = "Waiting for KD off"
                Case ChState.S_CALL_SS1_SAYIDLE
                    szNewStat = "Sending idle signal"
                Case ChState.S_CALL_SS1WaitIdleCAS
                    szNewStat = "Waiting for the idle signal from the other side"
                Case ChState.S_CALL_SS1PhoNumHoldup
                    szNewStat = "S_CALL_SS1PhoNumHoldup"
                Case ChState.S_CALL_Ss1InWaitStopSendA3p
                    szNewStat = "S_CALL_Ss1InWaitStopSendA3p"
                Case ChState.S_CALL_Ss1OutWaitBwdAck
                    szNewStat = "Waiting for a signal confirming backward occupation"
                Case ChState.S_CALL_Ss1OutTxPhoNum
                    szNewStat = "Sending called party number"
                Case ChState.S_CALL_Ss1OutWaitAppendPhoNum
                    szNewStat = "Incomplete number"
                Case ChState.S_CALL_Ss1OutTxCallerID
                    szNewStat = "Sending calling party number"
                Case ChState.S_CALL_Ss1OutWaitKB
                    szNewStat = "Waiting for KB"
                Case ChState.S_FAX_ROUND
                    szNewStat = "In state transition"
                Case ChState.S_FAX_PhaseA
                    szNewStat = "Call setup"
                Case ChState.S_FAX_PhaseB
                    szNewStat = "Message preprocessing"
                Case ChState.S_FAX_SendDCS
                    szNewStat = "Sending DCS"
                Case ChState.S_FAX_Train
                    szNewStat = "Transmit training"
                Case ChState.S_FAX_PhaseC
                    szNewStat = "Message transmitting"
                Case ChState.S_FAX_PhaseD
                    szNewStat = "Message postprocessing"
                Case ChState.S_FAX_NextPage
                    szNewStat = "Transmitting next page"
                Case ChState.S_FAX_AllSent
                    szNewStat = "End of transmission"
                Case ChState.S_FAX_PhaseE
                    szNewStat = "Call release"
                Case ChState.S_FAX_Reset
                    szNewStat = "Modem reset"
                Case ChState.S_FAX_Init
                    szNewStat = "Initializing modem"
                Case ChState.S_FAX_RcvDCS
                    szNewStat = "Receiving DCS"
                Case ChState.S_FAX_SendFTT
                    szNewStat = "Sending Signal FTT"
                Case ChState.S_FAX_SendCFR
                    szNewStat = "Sending Signal CFR "
                Case ChState.S_TUP_WaitPcmReset
                    szNewStat = "Circuit reset"
                Case ChState.S_TUP_WaitSAM
                    szNewStat = "Waiting for SAM"
                Case ChState.S_TUP_WaitGSM
                    szNewStat = "Waiting for GSM"
                Case ChState.S_TUP_WaitCLF
                    szNewStat = "Waiting for CLF"
                Case ChState.S_TUP_WaitPrefix
                    szNewStat = "Receiving prefix"
                Case ChState.S_TUP_WaitDialAnswer
                    szNewStat = "Waiting for response"
                Case ChState.S_TUP_WaitRLG
                    szNewStat = "Waiting for RLG"
                Case ChState.S_ISDN_OUT_WAIT_NET_RESPONSE
                    szNewStat = "Waiting for network response"
                Case ChState.S_ISDN_OUT_PLS_APPEND_NO
                    szNewStat = "Waiting for number to be appended"
                Case ChState.S_ISDN_IN_CHK_CALL_IN
                    szNewStat = "Inbound call detected"
                Case ChState.S_ISDN_IN_RCVING_NO
                    szNewStat = "Receiving number"
                Case ChState.S_ISDN_IN_WAIT_TALK
                    szNewStat = "Ready to talk"
                Case ChState.S_ISDN_OUT_WAIT_ALERT
                    szNewStat = "Waiting for alerting signal"
                Case ChState.S_ISDN_CALL_BEGIN
                    szNewStat = "Start calling"
                Case ChState.S_ISDN_WAIT_HUANGUP
                    szNewStat = "Waiting for release"
                Case ChState.S_CALL_SENDRING
                    szNewStat = "Sending ring"
                Case Else
                    szNewStat = "S=%d"
            End Select
            szOldStat = Fax.m_TrkChList.TextArray(nIndex + 1)
            If (szOldStat <> szNewStat) Then
                Fax.m_TrkChList.TextArray(nIndex + 1) = szNewStat
            End If
            'state of a channel in faxing process
            Select Case (m_TrkCh(i).nStep)
        
                Case TrkChState.TRK_IDLE
                    szNewStat = "Idle"
        
                Case TrkChState.TRK_PLAY_VOC1
                    szNewStat = "Play voice1"
        
                Case TrkChState.TRK_PLAY_VOC2
                    szNewStat = "Play voice2"
        
                Case TrkChState.TRK_FAXING
                    szNewStat = "Talking..."
        
                Case TrkChState.TRK_DIALING
                    szNewStat = "Dialing..."
        
                Case Else
                    szNewStat = "Undefined"
        
            End Select
            szOldStat = Fax.m_TrkChList.TextArray(nIndex + 2)
            If (szOldStat <> szNewStat) Then
                Fax.m_TrkChList.TextArray(nIndex + 2) = szNewStat
            End If
        
        
            'display calling party number
            szNewStat = m_TrkCh(i).szCallerId
            szOldStat = Fax.m_TrkChList.TextArray(nIndex + 3)
            If (szOldStat <> szNewStat) Then
                Fax.m_TrkChList.TextArray(nIndex + 3) = szNewStat
            End If
        
            ' display DTMF
            szNewStat = m_TrkCh(i).szDtmf
            szOldStat = Fax.m_TrkChList.TextArray(nIndex + 4)
            If (szOldStat <> szNewStat) Then
                Fax.m_TrkChList.TextArray(nIndex + 4) = szNewStat
            End If
        
            'display error messages
            szNewStat = m_TrkCh(i).szChErrMsg
            szOldStat = Fax.m_TrkChList.TextArray(nIndex + 5)
            If (szOldStat <> szNewStat) Then
                Fax.m_TrkChList.TextArray(nIndex + 5) = szNewStat
            End If
            nRow = nRow + 1
        End If
    Next i
End Sub

Public Function CallbackPt(ByVal PtValue As Long) As Long           ' pack callback function
        CallbackPt = PtValue
End Function


'callback function
Public Function CallBack_MessageProc(ByVal wEvent As Integer, ByVal nReference As Long, ByVal dwParam As Long, ByVal dwUser As Long) As Long
        Dim nEventCode As Long    'event ID
        Dim nCh As Long             '= -1  'channel ID
        Dim nCheck As Long
        Dim i As Long

        nEventCode = wEvent And &HFFFF&
        If nEventCode = ShEvent.E_SYS_TIMEOUT Then

            'identify the channel number according to the flag 'timer'
            For i = 0 To m_nTotalCh - 1
                If (nReference = m_TrkCh(i).nTimer) Then
                    nCh = i
                    GoTo breakWndProcLoc
                End If
            Next i
breakWndProcLoc:
        Else
            nCh = nReference
            nCheck = SsmGetChType(nCh)
            If (nCheck = ChType.FAX_CH Or nCheck = ChType.SOFTFAX_CH) Then
                FaxProc nEventCode, nCh, dwParam
            Else
                If (m_TrkCh(nCh).bEnCalled = True) Then
                    TrunkProc nEventCode, nCh, dwParam
                End If
            End If
        End If
End Function


'state transition for analog trunk channel
Public Sub TrunkProc(ByVal Event1 As Long, ByVal nwParam As Long, ByVal nlParam As Long)
    Dim nCh As Long                     ' trunk channel number
    Dim nChannel As Long                   'fax channel number
    Dim szRecFile As String             'name of recording file
    Dim sztemp As String                ' channel number in string format
    Dim dwDtmf As Long                  ' dtmf number
    Dim dwToneAnalyze As Long           'tone analysis result
    'Dim i As Long
    Dim temp As String                  'DTMF dtmf character
    Dim nNewState As Long               ' new state
    Dim strbErrMsg As String * 200      ' error message
    nCh = nwParam
    Select Case Event1
        ' the event is triggered when state of a channel change
        Case ShEvent.E_CHG_ChState
            nNewState = nlParam Mod 65536
           
            If (nNewState = ChState.S_CALL_RINGING) Then         'called party is ringing
                If (m_TrkCh(nCh).nStep = TrkChState.TRK_IDLE) Then
                    m_TrkCh(nCh).bUseful = True
                    
                    SsmPickup (nCh)               ' pick up a channel
                                  m_TrkCh(nCh).nCallFlag = 0
                    sztemp = Format(nCh)
                    szRecFile = sztemp & "channel" & ".pcm" & Chr(0)
                    If (m_TrkCh(nCh).bRecord) Then

                        SsmRecToFile nCh, szRecFile, -1, 0, -1, -1, 0            'record
                            
                        'turn on record mixer
                        SsmSetRecMixer nCh, True, 0
                    End If
                    ' get Calling party's number
                    SsmGetCallerId nCh, m_TrkCh(nCh).szCallerId
                    
                    nChannel = FindAnIdleFaxCh()
                    If (nChannel = -1) Then

                        'idle fax channel is unavailable
                        HangUp (nCh)
                        Return
                    End If

                    'idle fax channel is available
                    m_FaxCh(nChannel).bUseful = True

                    ' manual

                    m_TrkCh(nCh).nStep = TrkChState.TRK_PLAY_VOC1
                    m_TrkCh(nCh).nToFaxCh = nChannel
                    m_TrkCh(nCh).bLinked = True
                    m_FaxCh(nChannel).nTrunkCh = nCh
                    'turn on 'DTMF_stop_play' switch
                    SsmSetDtmfStopPlay nCh, True
                    SsmPlayIndexString nCh, "1"          'play voice 1
                    SsmClearRxDtmfBuf (nCh)      'Clear buffer
                    ' turn on timer
                    m_TrkCh(nCh).nTimer = SsmStartTimer(15000, 1)
                End If
                'remote hungup
            ElseIf (nNewState = ChState.S_CALL_PENDING) Then
                If (m_TrkCh(nCh).nStep = TrkChState.TRK_PLAY_VOC1) Then
                    'turn off timer
                    SsmStopTimer (m_TrkCh(nCh).nTimer)
                    m_TrkCh(nCh).nTimer = -1
                    SsmStopPlayIndex (nCh)
                ElseIf (m_TrkCh(nCh).nStep = TrkChState.TRK_PLAY_VOC2) Then
                 
                    SsmStopPlayIndex (nCh)
                ElseIf (m_TrkCh(nCh).nStep = TrkChState.TRK_FAXING) Then

                    ' tear down bus connection between fax and trunk channel
                    SsmStopTalkWith nCh, m_TrkCh(nCh).nToFaxCh

⌨️ 快捷键说明

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