📄 call.bas
字号:
ChInfo(nCh).szDtmf = ""
End Select
End Select
Case E_MSG_PICKUP
nCh = wParam
Select Case ChInfo(nCh).nStep
Case TRK_CHECK_HOOK
ChInfo(nCh).nStep = TRK_TALKING
SsmStopPlay (nCh)
SsmTalkWith nCh, ChInfo(nCh).nLinkCh
Case USER_F_WAIT
ChInfo(nCh).nStep = USER_F_TALK
SsmStopPlay (nCh)
SsmTalkWith nCh, ChInfo(nCh).nLinkCh
End Select
'event generated by the driver when the timer is overtime
Case E_SYS_TIMEOUT
'identify the channel number according to the flag 'timer'
For i = 0 To nMaxCh - 1
If wParam = ChInfo(i).nTimer Then
nCh = i
Exit For
End If
Next i
If ChInfo(nCh).nStep = TRK_WAIT_DTMF Then
If SsmStopTimer(ChInfo(nCh).nTimer) = -1 Then
MsgBox ("Fail to call SsmStopTimer")
End If
ChInfo(nCh).nTimer = -1
SsmStopPlay (nCh)
If SsmHangup(nCh) = -1 Then
MsgBox ("Fail to call SsmHangup")
End If
ChInfo(nCh).nLinkCh = -1
ChInfo(nCh).szExtensionNum = ""
ChInfo(nCh).szCallerId = ""
ChInfo(nCh).szDtmf = ""
ChInfo(nCh).nStep = TRK_IDLE
End If
If ChInfo(nCh).nStep = USER_WAIT_DTMF Then
SsmStopSendTone nCh 'stop send tone
SsmSendTone nCh, 3 'send howler tone
If SsmStopTimer(ChInfo(nCh).nTimer) = -1 Then
MsgBox ("Fail to call SsmStopTimer")
End If
ChInfo(nCh).nTimer = -1
ChInfo(nCh).nStep = USER_F_HANG
ChInfo(nCh).nLinkCh = -1
ChInfo(nCh).szExtensionNum = ""
End If
Case E_CHG_FlashCount
nCh = wParam
Select Case ChInfo(nCh).nStep
Case USER_TALKING
ChInfo(nCh).nFLinkCh = ChInfo(nCh).nLinkCh
ChInfo(nCh).nLinkCh = -1
SsmStopTalkWith nCh, ChInfo(nCh).nFLinkCh
SsmSendTone nCh, 0 'dial tone
ChInfo(nCh).nTimer = SsmStartTimer(15000, 1)
EventCallbackProc E_F_FLASH, ChInfo(nCh).nFLinkCh, 0, 0
ChInfo(nCh).nStep = USER_WAIT_DTMF
Case USER_F_HANG
SsmStopSendTone nCh
If ChInfo(nCh).bFlag Then
SsmSendTone nCh, 3 'send howler tone
ChInfo(nCh).nStep = USER_WAIT_HANG
ChInfo(nCh).bFlag = False
ChInfo(nCh).nFLinkCh = -1
ChInfo(nCh).nLinkCh = -1
Else
SsmTalkWith nCh, ChInfo(nCh).nFLinkCh
EventCallbackProc E_MSG_CONN, ChInfo(nCh).nFLinkCh, 0, 0
ChInfo(nCh).nLinkCh = ChInfo(nCh).nFLinkCh
ChInfo(nCh).nFLinkCh = -1
ChInfo(nCh).nStep = USER_TALKING
End If
End Select
Case E_F_FLASH
nCh = wParam
If ChInfo(nCh).nStep = TRK_TALKING Then
SsmPlayFile nCh, "bgmusic.wav", 6, 0, &HFFFFFFFF 'play file
ChInfo(nCh).nStep = TRK_FLASH
End If
Case E_MSG_CONN
nCh = wParam
If ChInfo(nCh).nStep = TRK_FLASH Then
SsmStopPlay nCh
ChInfo(nCh).nStep = TRK_TALKING
End If
Case E_MSG_RELEASE
nCh = wParam
Select Case ChInfo(nCh).nStep
Case TRK_TALKING
SsmHangup nCh 'hang up the channel
ChInfo(nCh).nLinkCh = -1
ChInfo(nCh).nStep = TRK_IDLE
ChInfo(nCh).szCallerId = ""
ChInfo(nCh).szDtmf = ""
Case TRK_FLASH
SsmStopPlay nCh
SsmHangup nCh
ChInfo(nCh).nLinkCh = -1
ChInfo(nCh).nStep = TRK_IDLE
ChInfo(nCh).szCallerId = ""
ChInfo(nCh).szDtmf = ""
Case USER_TALKING
SsmSendTone nCh, 3 'send howler tone
ChInfo(nCh).nLinkCh = -1
ChInfo(nCh).nStep = USER_WAIT_HANG
Case USER_F_TALK
SsmSendTone nCh, 3 'send howler tone
ChInfo(nCh).nLinkCh = -1
ChInfo(nCh).nStep = USER_F_HANG
End Select
'Event generated by the driver when the status of user channel changes
Case E_CHG_HookState
nCh = wParam
nRes = lParam
ChInfo(nCh).szDtmf = ""
Select Case ChInfo(nCh).nStep
Case USER_IDLE
If nRes = 1 Then 'user channel pickup
If ChInfo(nCh).bIsPick Then
ChInfo(nCh).bIsPick = False
SsmStopRing nCh 'stop ring to ch1
EventCallbackProc E_MSG_PICKUP, ChInfo(nCh).nLinkCh, 0, 0
ChInfo(nCh).nStep = USER_TALKING
ElseIf ChInfo(nCh).bIsFlash Then
ChInfo(nCh).bIsFlash = False
SsmStopRing nCh 'stop ring to ch2
EventCallbackProc E_MSG_PICKUP, ChInfo(nCh).nLinkCh, 0, 0
ChInfo(nCh).nStep = USER_TALKING
End If
End If
Case USER_TALKING
If nRes = 0 Then 'user channel hangup
SsmStopTalkWith nCh, ChInfo(nCh).nLinkCh
EventCallbackProc E_MSG_RELEASE, ChInfo(nCh).nLinkCh, 0, 0
ChInfo(nCh).nLinkCh = -1
ChInfo(nCh).nStep = USER_IDLE
ChInfo(nCh).szCallerId = ""
End If
Case USER_WAIT_DTMF
If nRes = 0 Then
SsmStopTimer ChInfo(nCh).nTimer
ChInfo(nCh).nTimer = -1
ChInfo(nCh).szExtensionNum = ""
If ChInfo(nCh).bFlag Then
ChInfo(nCh).bFlag = False
ChInfo(nCh).nStep = USER_IDLE
Else
EventCallbackProc E_MSG_RELEASE, ChInfo(nCh).nFLinkCh, 0, 0
ChInfo(nCh).nStep = USER_IDLE
End If
ChInfo(nCh).nLinkCh = -1
ChInfo(nCh).nFLinkCh = -1
ChInfo(nCh).szCallerId = ""
End If
Case USER_F_WAIT
If nRes = 0 Then
ChInfo(ChInfo(nCh).nLinkCh).bIsFlash = False
ChInfo(ChInfo(nCh).nLinkCh).nLinkCh = -1
ChInfo(ChInfo(nCh).nLinkCh).szCallerId = ""
SsmStopRing ChInfo(nCh).nLinkCh
SsmStopPlay nCh
If ChInfo(nCh).bFlag Then
ChInfo(nCh).bFlag = False
ChInfo(nCh).nStep = USER_IDLE
Else
EventCallbackProc E_MSG_RELEASE, ChInfo(nCh).nFLinkCh, 0, 0
ChInfo(nCh).nStep = USER_IDLE
End If
ChInfo(nCh).szCallerId = ""
ChInfo(nCh).nLinkCh = -1
ChInfo(nCh).nFLinkCh = -1
End If
Case USER_WAIT_HANG
If nRes = 0 Then
SsmStopSendTone nCh
ChInfo(nCh).nStep = USER_IDLE
ChInfo(nCh).szCallerId = ""
ChInfo(nCh).szDtmf = ""
End If
Case USER_F_TALK
If nRes = 0 Then
SsmStopTalkWith nCh, ChInfo(nCh).nLinkCh
ChInfo(nCh).szCallerId = ""
If ChInfo(nCh).bFlag Then
ChInfo(nCh).bFlag = False
EventCallbackProc E_MSG_RELEASE, ChInfo(nCh).nLinkCh, 0, 0
ChInfo(nCh).nLinkCh = -1
ChInfo(nCh).nFLinkCh = -1
ChInfo(nCh).nStep = USER_IDLE
Else
SsmTalkWith ChInfo(nCh).nLinkCh, ChInfo(nCh).nFLinkCh
ChInfo(ChInfo(nCh).nLinkCh).nLinkCh = ChInfo(nCh).nFLinkCh
ChInfo(ChInfo(nCh).nFLinkCh).nLinkCh = ChInfo(nCh).nLinkCh
EventCallbackProc E_MSG_CONN, ChInfo(nCh).nFLinkCh, 0, 0
ChInfo(nCh).nLinkCh = -1
ChInfo(nCh).nFLinkCh = -1
ChInfo(nCh).nStep = USER_IDLE
End If
End If
Case USER_F_HANG
If nRes = 0 Then
SsmStopSendTone nCh
If ChInfo(nCh).bFlag Then
ChInfo(nCh).bFlag = False
ChInfo(nCh).nStep = USER_IDLE
Else
EventCallbackProc E_MSG_RELEASE, ChInfo(nCh).nFLinkCh, 0, 0
ChInfo(nCh).nStep = USER_IDLE
End If
ChInfo(nCh).nLinkCh = -1
ChInfo(nCh).nFLinkCh = -1
ChInfo(nCh).szCallerId = ""
End If
End Select
'Event generated by the driver when DTMF is received
Case E_CHG_RcvDTMF
nCh = wParam
cNewDtmf = Chr(&HFFFF& And lParam) 'Newly received DTMF
ChInfo(nCh).szDtmf = ChInfo(nCh).szDtmf + cNewDtmf
Select Case ChInfo(nCh).nStep
Case TRK_WAIT_DTMF
ChInfo(nCh).szExtensionNum = ChInfo(nCh).szExtensionNum + cNewDtmf
For i = 0 To nMaxCh - 1
If ChInfo(nCh).szExtensionNum = ChInfo(i).szOwnNum Then
ChInfo(nCh).bChk = True
ChInfo(nCh).nLinkCh = i
Exit For
End If
Next i
If ChInfo(nCh).bChk Then
SsmStopTimer ChInfo(nCh).nTimer
ChInfo(nCh).nTimer = -1
If CheckChIsUseable(ChInfo(nCh).nLinkCh) Then 'useable
SsmPlayFile nCh, "bgmusic.wav", 6, 0, &HFFFFFFFF
SsmStartRing ChInfo(nCh).nLinkCh
ChInfo(ChInfo(nCh).nLinkCh).bIsPick = True
ChInfo(nCh).szExtensionNum = ""
ChInfo(nCh).bChk = False
ChInfo(ChInfo(nCh).nLinkCh).nLinkCh = nCh
ChInfo(ChInfo(nCh).nLinkCh).szCallerId = ChInfo(nCh).szCallerId
ChInfo(nCh).nStep = TRK_CHECK_HOOK
Else
SsmHangup nCh
ChInfo(nCh).szExtensionNum = ""
ChInfo(nCh).nLinkCh = -1
ChInfo(nCh).bChk = False
ChInfo(nCh).nStep = TRK_IDLE
End If
Else
ChInfo(nCh).nStep = TRK_WAIT_DTMF
End If
Case USER_WAIT_DTMF
ChInfo(nCh).szExtensionNum = ChInfo(nCh).szExtensionNum + cNewDtmf
For i = 0 To nMaxCh - 1
If ChInfo(nCh).szExtensionNum = ChInfo(i).szOwnNum Then
ChInfo(nCh).bChk = True
ChInfo(nCh).nLinkCh = i
Exit For
End If
Next i
If ChInfo(nCh).bChk Then
SsmStopTimer ChInfo(nCh).nTimer
ChInfo(nCh).nTimer = -1
If CheckChIsUseable(ChInfo(nCh).nLinkCh) Then 'useable
SsmPlayFile nCh, "bgmusic.wav", 6, 0, &HFFFFFFFF
SsmStartRing ChInfo(nCh).nLinkCh
ChInfo(ChInfo(nCh).nLinkCh).bIsFlash = True
ChInfo(nCh).szExtensionNum = ""
ChInfo(ChInfo(nCh).nLinkCh).nLinkCh = nCh
ChInfo(ChInfo(nCh).nLinkCh).szCallerId = ChInfo(nCh).szOwnNum
ChInfo(nCh).bChk = False
ChInfo(nCh).nStep = USER_F_WAIT
Else
SsmSendTone nCh, 1 'busy tone
ChInfo(nCh).szExtensionNum = ""
ChInfo(nCh).nLinkCh = -1
ChInfo(nCh).bChk = False
ChInfo(nCh).nStep = USER_F_HANG
ChInfo(nCh).szCallerId = ""
ChInfo(nCh).szDtmf = ""
End If
Else
ChInfo(nCh).nStep = USER_WAIT_DTMF
End If
End Select
End Select
EventCallbackProc = 0
End Function
Public Function CallbackPt(ByVal PtValue As Long) As Long
CallbackPt = PtValue
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -