📄 fax.bas
字号:
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 + -