806 lines
37 KiB
VB.net
806 lines
37 KiB
VB.net
Imports sipdotnet
|
|
Imports System.ComponentModel
|
|
Imports System.Text
|
|
Imports TAPI3Lib
|
|
Imports Bria_API_CSharp_SampleApp
|
|
Imports Bria_API_CSharp_SampleApp.BriaPhoneRemoteControl
|
|
Imports Bria_API_CSharp_SampleApp.CallHistoryView
|
|
|
|
Public Class frmTapi
|
|
|
|
Private Const MediaAudio As Integer = 8
|
|
Private Const MediaModem As Integer = 16
|
|
Private Const MediaFax As Integer = 32
|
|
Private Const MediaVideo As Integer = 32768
|
|
|
|
Private WithEvents oTAPI As TAPI3Lib.TAPI ' will hold our TAPI object
|
|
' will hold our selected address (you can hold many addresses in an array)
|
|
Private oAddress As ITAddress
|
|
Private RegCookie As Integer
|
|
|
|
|
|
Dim briaAPI As BriaAPI
|
|
Private phoneLines As PhoneLine() = New PhoneLine(5) {}
|
|
|
|
|
|
Sub New()
|
|
Try
|
|
InitializeComponent()
|
|
' creating a new instance to first initialize TAPI
|
|
' before attaching the events
|
|
Dim m_TAPI As New TAPI3Lib.TAPIClass
|
|
' a variable to hold supported media types for the address
|
|
Dim MediaTypes As Integer
|
|
' initializing TAPI
|
|
m_TAPI.Initialize()
|
|
' attaching event sink
|
|
oTAPI = m_TAPI
|
|
' getting rid of the private instance as we have another
|
|
' global instance (oTAPI)
|
|
m_TAPI = Nothing
|
|
Dim AddressCollection As ITCollection = oTAPI.Addresses()
|
|
' looping through address collection
|
|
For Each Address As ITAddress In AddressCollection
|
|
' checking if address is working
|
|
If Address.State = ADDRESS_STATE.AS_INSERVICE Then
|
|
' extracting media support interface from the address
|
|
Dim MediaSupport As ITMediaSupport = Address
|
|
' extracting media types supporting
|
|
MediaTypes = MediaSupport.MediaTypes
|
|
MediaSupport = Nothing ' dispose of the object
|
|
|
|
|
|
'If (MediaTypes And MediaModem) = MediaModem Then
|
|
If MediaModem = MediaModem Then
|
|
' the address is a data Modem
|
|
If MediaTypes = MediaAudio Then
|
|
' Select the address since it supports Audio
|
|
' and is a FAX/Modem
|
|
oAddress = Address ' select this address
|
|
' show the selected address name
|
|
SetLabStatus(lblStatusTAPI, "we have selected this address: " & oAddress.AddressName)
|
|
Exit For
|
|
End If
|
|
End If
|
|
End If
|
|
Next Address
|
|
If Not (oAddress Is Nothing) Then
|
|
' registering notifications for the selected address
|
|
RegCookie = oTAPI.RegisterCallNotifications(oAddress, True, False, MediaTypes, 1)
|
|
' Note: this registration can be done on
|
|
' as many addresses as you want
|
|
' we will not receive notifications unless we specify
|
|
' which type of events we are interested in
|
|
oTAPI.EventFilter = (TAPI_EVENT.TE_CALLNOTIFICATION Or
|
|
TAPI_EVENT.TE_CALLSTATE Or TAPI_EVENT.TE_CALLINFOCHANGE)
|
|
Else
|
|
MsgBox("no address selected")
|
|
End If
|
|
Catch ex As Exception
|
|
MsgBox("Error occurred:" & vbCrLf & ex.Message,
|
|
MsgBoxStyle.Critical, "VBCITY.VBTAPI")
|
|
End Try
|
|
' by now we are done for the initialization and registration
|
|
' and the events should fire
|
|
' Note: you must dispose of TAPI before you destroy the class
|
|
' and I will leave this for now
|
|
End Sub
|
|
|
|
Private Sub oTAPI_Event(ByVal TapiEvent As TAPI3Lib.TAPI_EVENT,
|
|
ByVal pEvent As Object) Handles oTAPI.Event
|
|
' making a thread asynchronously process the event
|
|
Dim thAsyncCall As System.Threading.Thread
|
|
Select Case TapiEvent
|
|
|
|
Case TAPI_EVENT.TE_CALLNOTIFICATION 'Call Notification Arrived
|
|
' assigning our sub's delegate to the thread
|
|
thAsyncCall = New Threading.Thread(AddressOf CallNotificationEvent)
|
|
' passing the variable for the thread
|
|
CallNotificationObject = CType(pEvent, ITCallNotificationEvent)
|
|
' starting the thread
|
|
thAsyncCall.Start()
|
|
|
|
Case TAPI_EVENT.TE_CALLSTATE 'Call State Changes
|
|
' assigning our sub's delegate to the thread
|
|
thAsyncCall = New Threading.Thread(AddressOf CallStateEvent)
|
|
' passing the variable for the thread
|
|
CallStateObject = CType(pEvent, ITCallStateEvent)
|
|
' starting the thread
|
|
thAsyncCall.Start()
|
|
|
|
Case TAPI_EVENT.TE_CALLINFOCHANGE 'Call Info Changes
|
|
' assigning our sub's delegate to the thread
|
|
thAsyncCall = New Threading.Thread(AddressOf CallInfoEvent)
|
|
' passing the variable for the thread
|
|
CallInfoObject = CType(pEvent, ITCallInfoChangeEvent)
|
|
' starting the thread
|
|
thAsyncCall.Start()
|
|
|
|
End Select
|
|
End Sub
|
|
|
|
Private CallNotificationObject As ITCallNotificationEvent
|
|
Private Sub CallNotificationEvent()
|
|
' here we should check to see various notifications of new and ended calls
|
|
Select Case CallNotificationObject.Event
|
|
|
|
Case CALL_NOTIFICATION_EVENT.CNE_MONITOR
|
|
' the notification is for a monitored call
|
|
Case CALL_NOTIFICATION_EVENT.CNE_OWNER
|
|
' the notification is for an owned call
|
|
|
|
End Select
|
|
End Sub
|
|
|
|
Private CallStateObject As ITCallStateEvent
|
|
Private Sub CallStateEvent()
|
|
|
|
|
|
' here we should check to see call state and handle connects and disconnects
|
|
Select Case CallStateObject.State
|
|
|
|
Case CALL_STATE.CS_IDLE
|
|
SetLabStatus(lblStatusTAPI, "CS_IDLE")
|
|
Case CALL_STATE.CS_INPROGRESS
|
|
SetLabStatus(lblStatusTAPI, "CS_IDLE")
|
|
Case CALL_STATE.CS_OFFERING
|
|
' a call is offering so if you don't want it then pass it
|
|
' The code to pass the call is the following
|
|
' Dim CallControl As ITBasicCallControl = CallStateObject.Call
|
|
' CallControl.HandoffIndirect(CallStateObject.Call.CallInfoLong(CALLINFO_LONG.CIL_MEDIATYPESAVAILABLE))
|
|
'Dim c = CallStateObject.Call.get_CallInfoString(TAPI3Lib.CALLINFO_STRING.CIS_CALLERIDNUMBER)
|
|
Dim target = CallStateObject.Call.Address.DialableAddress
|
|
'SetLabStatus(lblStatusTAPI, CallStateObject.)
|
|
SetLabStatus(Label1, target)
|
|
Dim oCallInfo As ITCallInfo2 = CallStateObject.Call
|
|
|
|
|
|
'SetLabStatus(lblStatusTAPI, CallStateObject.Call.CallInfoString(CALLINFO_STRING.CIS_CALLERIDNAME))
|
|
SetLabStatus(Label1, CallStateObject.Call.CallInfoString(CALLINFO_STRING.CIS_CALLERIDNUMBER))
|
|
' SetLabStatus(lblStatusTAPI, CallStateObject.Call.CallInfoString(CALLINFO_STRING.CIS_CALLERIDNUMBER)) ' oCallInfo.get_CallInfoString(CALLINFO_STRING.CIS_CALLERIDNAME))
|
|
' SetLabStatus(lblStatusTAPI, oCallInfo.CallInfoString(CALLINFO_STRING.CIS_CALLERIDNAME))' oCallInfo.get_CallInfoString(CALLINFO_STRING.CIS_CALLERIDNAME))
|
|
|
|
|
|
|
|
Case CALL_STATE.CS_CONNECTED
|
|
' call is connected
|
|
SetLabStatus(lblStatusTAPI, " call is connected ")
|
|
SetLabStatus(lblCallState, "Anruf läuft, bitte nennen Sie Ihr Anliegen.")
|
|
|
|
' CallStateObject.Call.
|
|
'CallStateObject.Call.CallInfoString()
|
|
|
|
Case CALL_STATE.CS_QUEUED
|
|
' call is being queued
|
|
SetLabStatus(lblStatusTAPI, " call is being queued ")
|
|
Case CALL_STATE.CS_HOLD
|
|
' call is on hold
|
|
SetLabStatus(lblStatusTAPI, "call is on hold ")
|
|
Case CALL_STATE.CS_DISCONNECTED
|
|
' call is disconnected
|
|
SetLabStatus(lblStatusTAPI, "call is disconnected ")
|
|
'SetLabStatus(lblCallState, "Anruf beendet.")
|
|
End Select
|
|
End Sub
|
|
|
|
|
|
|
|
'threadsicherer Aufruf
|
|
Delegate Sub SetLabStatusCallback(lbl As Label, txt As String)
|
|
Private Sub SetLabStatus(lbl As Label, txt As String)
|
|
If Me.InvokeRequired Then
|
|
Dim d As New SetLabStatusCallback(AddressOf SetLabStatus)
|
|
Try
|
|
Me.Invoke(d, New Object() {lbl, txt})
|
|
Catch ex As Exception : End Try
|
|
Else
|
|
lbl.Text = txt
|
|
End If
|
|
|
|
End Sub
|
|
|
|
Private CallInfoObject As ITCallInfoChangeEvent
|
|
Private Sub CallInfoEvent()
|
|
' here you can extract information from the call
|
|
' the code to extract the caller ID
|
|
' >>> put the following code in a try block and
|
|
' swallow the exception if it gives errors
|
|
Try
|
|
|
|
Dim CallerID As String
|
|
CallerID = CallInfoObject.Call.CallInfoString(CALLINFO_STRING.CIS_CALLERIDNAME)
|
|
|
|
Catch ex As Exception
|
|
|
|
End Try
|
|
|
|
|
|
|
|
End Sub
|
|
|
|
Private Sub btn_Click(sender As Object, e As EventArgs) Handles btn.Click
|
|
Dim PhoneNumber As String = "00436644178557"
|
|
' Dim PhoneNumber As String = "147"
|
|
makePhoneCall(PhoneNumber)
|
|
'makeVideoCall(PhoneNumber)
|
|
End Sub
|
|
|
|
|
|
Dim CURRENTCALL As TAPI3Lib.ITBasicCallControl
|
|
Sub makePhoneCall(PhoneNumber As String)
|
|
Try
|
|
' Dim lMediaTypes As Long = TAPI3Lib.TapiConstants.TAPIMEDIATYPE_VIDEO, lCallbackInstance As Long = 1
|
|
Dim lMediaTypes As Long = TAPI3Lib.TapiConstants.TAPIMEDIATYPE_AUDIO, lCallbackInstance As Long = 1
|
|
Dim TestCall As TAPI3Lib.ITBasicCallControl
|
|
|
|
Dim lAddressType As Long = TAPI3Lib.TapiConstants.LINEADDRESSTYPE_PHONENUMBER
|
|
TestCall = oAddress.CreateCall(PhoneNumber, lAddressType, TapiConstants.TAPIMEDIATYPE_AUDIO)
|
|
TestCall.Connect(False)
|
|
CURRENTCALL = TestCall
|
|
'Dim pITMediaSupport = .QueryDispatchInterface(IID_String_ITMediaSupport, pITAddress)
|
|
Catch ex As Exception
|
|
MsgBox(ex.Message & ex.StackTrace)
|
|
End Try
|
|
End Sub
|
|
|
|
Sub makeVideoCall(PhoneNumber As String)
|
|
Try
|
|
' Dim lMediaTypes As Long = TAPI3Lib.TapiConstants.TAPIMEDIATYPE_VIDEO, lCallbackInstance As Long = 1
|
|
Dim lMediaTypes As Long = TAPI3Lib.TapiConstants.TAPIMEDIATYPE_VIDEO, lCallbackInstance As Long = 1
|
|
Dim TestCall As TAPI3Lib.ITBasicCallControl
|
|
|
|
Dim lAddressType As Long = TAPI3Lib.TapiConstants.LINEADDRESSTYPE_PHONENUMBER
|
|
TestCall = oAddress.CreateCall(PhoneNumber, lAddressType, TapiConstants.TAPIMEDIATYPE_AUDIO Or TapiConstants.TAPIMEDIATYPE_VIDEO)
|
|
TestCall.Connect(False)
|
|
|
|
'Dim pITMediaSupport = .QueryDispatchInterface(IID_String_ITMediaSupport, pITAddress)
|
|
Catch ex As Exception
|
|
MsgBox(ex.Message & ex.StackTrace)
|
|
End Try
|
|
End Sub
|
|
Sub makeVideoCallBRIA(PhoneNumber As String)
|
|
Try
|
|
|
|
Dim connected = True
|
|
If connected Then
|
|
|
|
briaAPI.RequestPlaceCall(PhoneNumber, Bria_API_CSharp_SampleApp.BriaAPI.CallTypes.video)
|
|
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
MsgBox(ex.Message & ex.StackTrace)
|
|
End Try
|
|
End Sub
|
|
|
|
|
|
Sub makeVideoCall2(PhoneNumber As String)
|
|
|
|
SetLabStatus(lblStatusTAPI, "Dialing to " & PhoneNumber & " ...")
|
|
Dim call_control As TAPI3Lib.ITBasicCallControl
|
|
call_control = oAddress.CreateCall(PhoneNumber, TapiConstants.LINEADDRESSTYPE_IPADDRESS, TapiConstants.TAPIMEDIATYPE_AUDIO Or TapiConstants.TAPIMEDIATYPE_VIDEO)
|
|
' call_control = call_address.CreateCall(addr, TapiConstants.LINEADDRESSTYPE_IPADDRESS, TapiConstants.TAPIMEDIATYPE_AUDIO Or TapiConstants.TAPIMEDIATYPE_VIDEO)
|
|
' button1.Enabled = False
|
|
Dim enum_stream As IEnumStream
|
|
'Dim pstream_control As ITStreamControl
|
|
'pstream_control = CType(call_control, ITStreamControl)
|
|
' pstream_control.EnumerateStreams(enum_stream)
|
|
Dim p_stream As ITStream
|
|
Dim a11 As UInteger = 0
|
|
call_control.EnumerateStreams(enum_stream)
|
|
enum_stream.[Next](1, p_stream, a11)
|
|
Dim imedia As Integer
|
|
imedia = p_stream.MediaType
|
|
Dim dir As TERMINAL_DIRECTION
|
|
dir = p_stream.Direction
|
|
Dim termi, termi1 As ITTerminal
|
|
Dim term_support As ITTerminalSupport = CType(oAddress, ITTerminalSupport)
|
|
termi = term_support.GetDefaultStaticTerminal(imedia, dir)
|
|
p_stream.SelectTerminal(termi)
|
|
enum_stream.[Next](1, p_stream, a11)
|
|
termi1 = term_support.GetDefaultStaticTerminal(imedia, TERMINAL_DIRECTION.TD_CAPTURE)
|
|
p_stream.SelectTerminal(termi1)
|
|
call_control.EnumerateStreams(enum_stream)
|
|
call_control.Connect(False)
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
Private Sub btn3_Click(sender As Object, e As EventArgs) Handles Button1.Click
|
|
' Try
|
|
|
|
'MsgBox(PlathosysApiWrapper.Plathosys.ApiVersionNumber())
|
|
openConnectionPLATHOSYS()
|
|
|
|
|
|
|
|
'Dim HookPttInfo = -1
|
|
'PlathosysApiWrapper.Plathosys.ReadHookAndPTT(HookPttInfo)
|
|
'MsgBox(HookPttInfo)
|
|
|
|
'PlathosysApiWrapper.Plathosys.Closedevice()
|
|
|
|
|
|
|
|
' Catch ex As Exception
|
|
' MsgBox(ex.Message & ex.StackTrace)
|
|
' End Try
|
|
End Sub
|
|
|
|
|
|
Function openConnectionPLATHOSYS() As Boolean
|
|
Try
|
|
Dim isDeviceOpen As Boolean = PlathosysApiWrapper.Plathosys.IsDeviceOpen()
|
|
If Not isDeviceOpen Then
|
|
Dim apiVersionNumber As Integer = PlathosysApiWrapper.Plathosys.ApiVersionNumber()
|
|
Console.WriteLine("ApiVersionNumber: {0}", Convert.ToString(apiVersionNumber, 2))
|
|
Dim successful As Boolean
|
|
Dim vendorID As Integer = 0
|
|
Dim productID As Integer = 0
|
|
Dim selectedVendorID As Integer
|
|
Dim selectedProductID As Integer
|
|
Dim deviceName As StringBuilder = New StringBuilder(200)
|
|
Dim serialNumber As StringBuilder = New StringBuilder(200)
|
|
successful = PlathosysApiWrapper.Plathosys.Opendevice(vendorID, productID, selectedVendorID, selectedProductID, deviceName, serialNumber)
|
|
Console.WriteLine($"Open successful? {successful}")
|
|
Console.WriteLine("Selected Vendor ID: {0:X}", selectedVendorID)
|
|
Console.WriteLine("Selected Product ID: {0:X}", selectedProductID)
|
|
Console.WriteLine($"Device name: {deviceName}")
|
|
Console.WriteLine($"Serial number: {serialNumber}")
|
|
|
|
If successful Then
|
|
|
|
|
|
successful = PlathosysApiWrapper.Plathosys.SetHandsetVolume(200)
|
|
successful = PlathosysApiWrapper.Plathosys.SetIntSpeakerVolume(0)
|
|
successful = PlathosysApiWrapper.Plathosys.SetHandsetMicVolume(128)
|
|
|
|
successful = PlathosysApiWrapper.Plathosys.SetMicMute(False)
|
|
|
|
'successful = PlathosysApiWrapper.Plathosys.SetSpeakerOutMute(False) 'alle
|
|
'successful = PlathosysApiWrapper.Plathosys.SetIntSpeakerMute(True)
|
|
'' Console.WriteLine($"SetHeadsetActive successful? {successful}")
|
|
''PlathosysApiWrapper.Plathosys.SetIntSpeakerMute(False)
|
|
''PlathosysApiWrapper.Plathosys.SetIntSpeakerVolume(255)
|
|
''PlathosysApiWrapper.Plathosys.SetHandsetVolume(128)
|
|
'successful = PlathosysApiWrapper.Plathosys.SetConference(False)
|
|
'Console.WriteLine($"SetConference successful? {successful}")
|
|
|
|
' PlathosysApiWrapper.Plathosys.SetConference(False) 'Lautsprecher deaktivieren
|
|
'PlathosysApiWrapper.Plathosys.SetHeadsetEar(True) 'Hörer aktivieren
|
|
' PlathosysApiWrapper.Plathosys.SetIntSpeakerVolume(0) 'Hörer Lautstäreke = 0
|
|
|
|
|
|
isDeviceOpen = PlathosysApiWrapper.Plathosys.IsDeviceOpen()
|
|
If isDeviceOpen Then
|
|
Timer.Enabled = True
|
|
Return True
|
|
End If
|
|
End If
|
|
End If
|
|
' Public Shared Function Opendevice(ByVal vendorID As Integer, ByVal productID As Integer, <Out> ByRef gotVendorID As Integer, <Out> ByRef gotProductID As Integer, ByVal gotProductName As StringBuilder, ByVal gotSerialNumber As StringBuilder) As Boolean
|
|
|
|
|
|
Catch ex As Exception
|
|
MsgBox(ex.Message & ex.StackTrace)
|
|
End Try
|
|
Return False
|
|
End Function
|
|
Sub allFunc()
|
|
' Try
|
|
|
|
MsgBox(PlathosysApiWrapper.Plathosys.ApiVersionNumber())
|
|
|
|
|
|
|
|
'Dim HookPttInfo = -1
|
|
'PlathosysApiWrapper.Plathosys.ReadHookAndPTT(HookPttInfo)
|
|
'MsgBox(HookPttInfo)
|
|
|
|
'PlathosysApiWrapper.Plathosys.Closedevice()
|
|
Try
|
|
|
|
Dim apiVersionNumber As Integer = PlathosysApiWrapper.Plathosys.ApiVersionNumber()
|
|
Console.WriteLine("ApiVersionNumber: {0}", Convert.ToString(apiVersionNumber, 2))
|
|
Dim successful As Boolean
|
|
Dim vendorID As Integer = 0
|
|
Dim productID As Integer = 0
|
|
Dim selectedVendorID As Integer
|
|
Dim selectedProductID As Integer
|
|
Dim deviceName As StringBuilder = New StringBuilder(200)
|
|
Dim serialNumber As StringBuilder = New StringBuilder(200)
|
|
successful = PlathosysApiWrapper.Plathosys.Opendevice(vendorID, productID, selectedVendorID, selectedProductID, deviceName, serialNumber)
|
|
Console.WriteLine($"Open successful? {successful}")
|
|
Console.WriteLine("Selected Vendor ID: {0:X}", selectedVendorID)
|
|
Console.WriteLine("Selected Product ID: {0:X}", selectedProductID)
|
|
Console.WriteLine($"Device name: {deviceName}")
|
|
Console.WriteLine($"Serial number: {serialNumber}")
|
|
Dim isDeviceOpen As Boolean = PlathosysApiWrapper.Plathosys.IsDeviceOpen()
|
|
Console.WriteLine($"IsDeviceOpen? {isDeviceOpen}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetHandsetVolume(128)
|
|
Console.WriteLine($"SetHandsetVolume successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetHeadsetVolume(128)
|
|
Console.WriteLine($"SetHeadsetVolume successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetIntSpeakerVolume(128)
|
|
Console.WriteLine($"SetIntSpeakerVolume successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetIntSpeakerMute(True)
|
|
Console.WriteLine($"SetIntSpeakerMute successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetHandsetMicVolume(128)
|
|
Console.WriteLine($"SetHandsetMicVolume successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetExtMicVolume(128)
|
|
Console.WriteLine($"SetExtMicVolume successful? {successful}")
|
|
Dim info1, info2, info3, info4, info5, info6, info7, info8, info9, info10 As Byte
|
|
successful = PlathosysApiWrapper.Plathosys.ReadCurrentInfo(info1, info2, info3, info4, info5, info6, info7, info8, info9, info10)
|
|
Console.WriteLine($"ReadCurrentInfo successful? {successful}")
|
|
Console.WriteLine($"Connected / PTT Info: {Convert.ToString(info1, 2).PadLeft(8, "0"c)}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetSideTone(True)
|
|
Console.WriteLine($"SetSideTone successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetMicMute(True)
|
|
Console.WriteLine($"SetMicMute successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetWideBand(True)
|
|
Console.WriteLine($"SetWideBand successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetEchoCanceller(True)
|
|
Console.WriteLine($"SetEchoCanceller successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetExtMic(True)
|
|
Console.WriteLine($"SetExtMic successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetConference(True)
|
|
Console.WriteLine($"SetConference successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetHeadsetActive(True)
|
|
Console.WriteLine($"SetHeadsetActive successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetWirelessHeadsetRinging(True)
|
|
Console.WriteLine($"SetWirelessHeadsetRinging successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetWirelessCall(True)
|
|
Console.WriteLine($"SetWirelessCall successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetPttFunctions(9)
|
|
Console.WriteLine($"SetPttPlathosys successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetHeadsetEar(1)
|
|
Console.WriteLine($"SetHeadsetEar successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetExtmicLed(True)
|
|
Console.WriteLine($"SetExtmicLed successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetByListening(True)
|
|
Console.WriteLine($"SetByListening successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetCodecType(1)
|
|
Console.WriteLine($"SetCodecType successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetSerialNumber(12345678)
|
|
Console.WriteLine($"SetSerialNumber successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.InitHookAndPTTState()
|
|
Console.WriteLine($"InitHookAndPTTState successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.MuteSpkCt140(True)
|
|
Console.WriteLine($"MuteSpkCt140 successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.MuteMicCt140(True)
|
|
Console.WriteLine($"MuteMicCt140 successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetHeadsetdBVolume(-6)
|
|
Console.WriteLine($"SetHeadsetdBVolume successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetHeadsetMicdBVolume(6)
|
|
Console.WriteLine($"SetHeadsetMicdBVolume successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetExtMicdBVolume(3)
|
|
Console.WriteLine($"SetExtMicdBVolume successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetIntSpeakerdBVolume(3)
|
|
Console.WriteLine($"SetIntSpeakerdBVolume successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetIntAlarmSpeakerdBVolume(3)
|
|
Console.WriteLine($"SetIntAlarmSpeakerdBVolume successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetIntAlarmSpeakerVolume(3)
|
|
Console.WriteLine($"SetIntAlarmSpeakerVolume successful? {successful}")
|
|
successful = PlathosysApiWrapper.Plathosys.SetLyncFeature(True)
|
|
Console.WriteLine($"SetLyncFeature successful? {successful}")
|
|
Dim info11, info12, info13, info14, info15, info16 As Byte
|
|
successful = PlathosysApiWrapper.Plathosys.ReadCurrentInfodB(info1, info2, info3, info4, info5, info6, info7, info8, info9, info10, info11, info12, info13, info14, info15, info16)
|
|
Console.WriteLine($"ReadCurrentInfodB successful? {successful}")
|
|
Console.WriteLine($"Connected Info: {Convert.ToString(info1, 2).PadLeft(8, "0"c)}")
|
|
Console.WriteLine($"Standard headset connected? {(info1 And 2) <> 0}")
|
|
Console.WriteLine($"Info3: {info3}")
|
|
Dim hardwareVersion As String = Convert.ToString(info3, 2).PadLeft(8, "0"c)
|
|
Dim first As Integer = Convert.ToInt32(hardwareVersion.Substring(0, 4), 2)
|
|
Dim second As Integer = Convert.ToInt32(hardwareVersion.Substring(4, 4), 2)
|
|
Console.WriteLine($"Hardware version: {first}.{second}")
|
|
Console.WriteLine($"Info4: {info4}")
|
|
Dim softwareVersion As String = Convert.ToString(info4, 2).PadLeft(8, "0"c)
|
|
first = Convert.ToInt32(hardwareVersion.Substring(0, 4), 2)
|
|
second = Convert.ToInt32(hardwareVersion.Substring(4, 4), 2)
|
|
Console.WriteLine($"Software version: {first}.{second}")
|
|
Console.WriteLine($"Serial number high: {info7}")
|
|
Console.WriteLine($"Serial number: {info8}")
|
|
Console.WriteLine($"Serial number: {info9}")
|
|
Console.WriteLine($"Serial number low: {info10}")
|
|
Console.WriteLine($"Speaker volume on bylisten: {info14}")
|
|
Dim hookAndPttInfo As Integer
|
|
successful = PlathosysApiWrapper.Plathosys.ReadHookAndPTT(hookAndPttInfo)
|
|
Console.WriteLine($"ReadHooAndPttInfo successful? {successful}")
|
|
Console.WriteLine($"HookAndPttInfo: {Convert.ToString(hookAndPttInfo, 2).PadLeft(4, "0"c)}")
|
|
Console.WriteLine($"HookOff? {(hookAndPttInfo And 1) <> 0}")
|
|
isDeviceOpen = PlathosysApiWrapper.Plathosys.IsDeviceOpen()
|
|
Console.WriteLine($"IsDeviceOpen: {isDeviceOpen}")
|
|
successful = PlathosysApiWrapper.Plathosys.Closedevice()
|
|
Console.WriteLine($"DeviceClosed successful? {successful}")
|
|
isDeviceOpen = PlathosysApiWrapper.Plathosys.IsDeviceOpen()
|
|
Console.WriteLine($"IsDeviceOpen: {isDeviceOpen}")
|
|
''Public Static extern bool Opendevice(
|
|
''Int VendorID,
|
|
''Int productID,
|
|
''out Int gotVendorID,
|
|
''out Int gotProductID,
|
|
''StringBuilder GotProductName,
|
|
''StringBuilder gotSerialNumber);
|
|
'Dim VendorID As Integer '= &H299D '&H299D '
|
|
''Dim VendorID = 665
|
|
'Dim ProductID As Integer '= &H1 '0
|
|
'Dim GotVendorID As Integer
|
|
'Dim GotProductID As Integer
|
|
'Dim GotProductName As String = ""
|
|
'Dim gotSerialNumber As String = ""
|
|
'MsgBox(PlathosysApiWrapper.Plathosys.IsDeviceOpen())
|
|
|
|
'If PlathosysApiWrapper.Plathosys.Opendevice(VendorID, ProductID, GotVendorID, GotProductID, GotProductName, gotSerialNumber) Then
|
|
' MsgBox(GotVendorID)
|
|
' MsgBox(GotProductID)
|
|
'Else
|
|
' MsgBox("No")
|
|
'End If
|
|
|
|
|
|
|
|
' Public Shared Function Opendevice(ByVal vendorID As Integer, ByVal productID As Integer, <Out> ByRef gotVendorID As Integer, <Out> ByRef gotProductID As Integer, ByVal gotProductName As StringBuilder, ByVal gotSerialNumber As StringBuilder) As Boolean
|
|
|
|
|
|
Catch ex As Exception
|
|
MsgBox(ex.Message & ex.StackTrace)
|
|
End Try
|
|
|
|
|
|
' Catch ex As Exception
|
|
' MsgBox(ex.Message & ex.StackTrace)
|
|
' End Try
|
|
End Sub
|
|
|
|
Private Sub frmTapi_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
|
|
Try
|
|
Dim isDeviceOpen = PlathosysApiWrapper.Plathosys.IsDeviceOpen()
|
|
If isDeviceOpen Then
|
|
Dim successful = PlathosysApiWrapper.Plathosys.Closedevice()
|
|
Console.WriteLine($"DeviceClosed successful? {successful}")
|
|
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
|
|
End Try
|
|
End Sub
|
|
|
|
|
|
Dim STATE = "NOT PICKUP"
|
|
Private Sub Timer_Tick(sender As Object, e As EventArgs) Handles Timer.Tick
|
|
|
|
|
|
Dim isDeviceOpen = PlathosysApiWrapper.Plathosys.IsDeviceOpen()
|
|
If isDeviceOpen Then
|
|
Dim HookPttInfo = -1
|
|
Dim ReadHook = PlathosysApiWrapper.Plathosys.ReadHookAndPTT(HookPttInfo)
|
|
|
|
' Console.WriteLine($"ReadHook? {ReadHook}")
|
|
' Console.WriteLine($"HookPttInfo? {HookPttInfo}")
|
|
|
|
'Dim HookAndPTTState = PlathosysApiWrapper.Plathosys.InitHookAndPTTState()
|
|
'Console.WriteLine($"HookAndPTTState? {HookAndPTTState}")
|
|
|
|
Select Case HookPttInfo
|
|
Case "17" 'PICKUP
|
|
If STATE <> "PICKUP" Then
|
|
STATE = "PICKUP"
|
|
' --> ANRUF STARTEN
|
|
picCallState.BackgroundImage = My.Resources._call
|
|
|
|
'picCallState.BackgroundImage = Nothing
|
|
'picCallState.Image = My.Resources._call
|
|
lblCallState.Text = "Anruf wird gestartet..."
|
|
Dim PhoneNumber As String = "800" '"00436644178557"
|
|
' Dim PhoneNumber As String = "147"
|
|
'makePhoneCall(PhoneNumber)
|
|
endCall()
|
|
makeVideoCallBRIA(PhoneNumber)
|
|
|
|
End If
|
|
Case Else
|
|
If STATE = "PICKUP" Then
|
|
STATE = "NOT PICKUP"
|
|
' --> ANRUF BEENDEN
|
|
picCallState.BackgroundImage = My.Resources.PLATHOSYS
|
|
'picCallState.BackgroundImage = My.Resources.PLATHOSYS
|
|
'picCallState.Image = Nothing
|
|
lblCallState.Text = "Bitte heben Sie den Höhrer ab, um den Anruf zu starten."
|
|
'CURRENTCALL.Disconnect(DISCONNECT_CODE.DC_NORMAL)
|
|
endCall()
|
|
|
|
|
|
|
|
'briaAPI.Stop()
|
|
' MsgBox("PICKUP DOWN!!!")
|
|
End If
|
|
End Select
|
|
Else
|
|
'NEU VERBINDEN
|
|
openConnectionPLATHOSYS()
|
|
End If
|
|
End Sub
|
|
|
|
|
|
Private Sub endCall()
|
|
Try
|
|
' briaAPI.
|
|
For Each phoneLine As PhoneLine In phoneLines
|
|
|
|
If (phoneLine IsNot Nothing) Then
|
|
MsgBox(phoneLine.Id)
|
|
|
|
briaAPI.RequestEndCall(phoneLine.Id)
|
|
|
|
End If
|
|
|
|
Next
|
|
Catch ex As Exception
|
|
MsgBox(ex.Message & ex.StackTrace)
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub frmTapi_Load(sender As Object, e As EventArgs) Handles Me.Load
|
|
'allFunc()
|
|
Timer.Enabled = True
|
|
'SipLinphone()
|
|
|
|
Try
|
|
briaAPI = New Bria_API_CSharp_SampleApp.BriaAPI()
|
|
|
|
briaAPI.Start()
|
|
'AddHandler briaAPI.OnCallStatus, AddressOf OnCallOptionsStatus(Me, aes As BriaAPI.CallOptionsStatusEventArgs)
|
|
'AddHandler briaAPI.OnCallStatus, AddressOf MainThread_OnCallStatus(New BriaAPI.CallStatusEventArgs)
|
|
' AddHandler briaAPI.OnCallOptionsStatus, AddressOf OnCallStatus
|
|
AddHandler briaAPI.OnCallStatus, AddressOf OnCallStatus
|
|
|
|
' briaAPI.OnCallOptionsStatus += New EventHandler(Of BriaAPI.CallOptionsStatusEventArgs)(OnCallOptionsStatus)
|
|
|
|
Catch ex As Exception
|
|
|
|
End Try
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
Private Delegate Sub OnCallStatusDelegate() ' As OnCallOptionsStatusDelegateEv
|
|
|
|
Private Event OnCallStatusDelegateEv(ByVal args As BriaAPI.CallStatusEventArgs)
|
|
|
|
'Private Delegate Sub OnCallOptionsStatus() As OnCallOptionsStatusDelegate
|
|
'Private Event OnCallOptionsStatusDelegate(ByVal args As BriaAPI.CallStatusEventArgs)
|
|
|
|
'Private Delegate void OnCallOptionsStatusDelegate(BriaAPI.CallOptionsStatusEventArgs args);
|
|
' Private OnCallOptionsStatusDelegate onCallOptionsStatusDelegate;
|
|
|
|
Private Sub OnCallStatus(ByVal sender As Object, ByVal args As BriaAPI.CallStatusEventArgs)
|
|
Dim lineInUse As Boolean() = New Boolean(5) {}
|
|
Dim callList As List(Of BriaAPI.[Call]) = args.CallList
|
|
|
|
|
|
phoneLines = New PhoneLine(5) {}
|
|
|
|
Dim cnt = 0
|
|
|
|
For Each [call] As BriaAPI.[Call] In callList
|
|
Dim existingCall As Boolean = False
|
|
Dim phoneLine As PhoneLine = Nothing
|
|
Dim newPhoneLine As PhoneLine = New PhoneLine([call].CallId)
|
|
|
|
|
|
phoneLines(cnt) = newPhoneLine
|
|
|
|
|
|
|
|
phoneLine.HoldState = [call].HoldState
|
|
|
|
For Each participant As BriaAPI.CallParticipant In [call].ParticipantList
|
|
Dim remoteParty As RemoteParty = New RemoteParty()
|
|
remoteParty.Number = participant.Number
|
|
remoteParty.DisplayName = participant.DisplayName
|
|
remoteParty.TimeInitiated = participant.TimeInitiated
|
|
remoteParty.State = participant.CallState
|
|
phoneLine.RemoteParties.Add(remoteParty)
|
|
|
|
If (phoneLine.RemoteParties.Count = 1) AndAlso (remoteParty.State = BriaAPI.CallStates.Ringing) Then
|
|
phoneLine.IsRinging = True
|
|
Else
|
|
phoneLine.IsRinging = False
|
|
End If
|
|
Next
|
|
Next
|
|
|
|
For i As Integer = 0 To 6 - 1
|
|
|
|
If lineInUse(i) = False Then
|
|
phoneLines(i) = Nothing
|
|
End If
|
|
Next
|
|
|
|
UpdateCallStates()
|
|
End Sub
|
|
|
|
Private Sub lblClose_Click(sender As Object, e As EventArgs) Handles lblClose.Click
|
|
Me.Close()
|
|
End Sub
|
|
|
|
Private Sub lblClose_MouseHover(sender As Object, e As EventArgs) Handles lblClose.MouseHover
|
|
lblClose.BackColor = Color.Red
|
|
lblClose.ForeColor = Color.White
|
|
End Sub
|
|
|
|
Private Sub lblClose_MouseLeave(sender As Object, e As EventArgs) Handles lblClose.MouseLeave
|
|
lblClose.BackColor = Panel2.BackColor
|
|
lblClose.ForeColor = Panel2.BackColor
|
|
End Sub
|
|
|
|
'Private Sub SurroundingSub()
|
|
' Dim callee As Address = Factory.Instance.CreateAddress("sip:janedoe@sip.example.org")
|
|
' Dim callParams As CallParams = Core.CreateCallParams(Nothing)
|
|
' callParams.MediaEncryption = MediaEncryption.SRTP
|
|
' callParams.VideoEnabled = True
|
|
' Dim [call] As [Call] = Core.InviteAddressWithParams(callee, callParams)
|
|
' [call].Listener.OnStateChanged += Function(ByVal delegateCall As [Call], ByVal state As CallState, ByVal message As String)
|
|
|
|
' Select Case state
|
|
' Case CallState.Connected
|
|
' loggingService.Message("Call is connected")
|
|
' Case Else
|
|
' loggingService.Message("Call is " & state.ToString())
|
|
' End Select
|
|
' End Function
|
|
'End Sub
|
|
|
|
'Sub SipLinphone()
|
|
' Dim account As Account = New Account("0p6ou3lEGC", "WarT4jO5Us", "sip:verag.3cx.at")
|
|
' Dim phone As Phone = New Phone(account)
|
|
' AddHandler phone.PhoneConnectedEvent, Sub()
|
|
' Console.WriteLine("Phone connected. Calling...")
|
|
' ' phone.MakeCallAndRecord("phonenumber", "/tmp/filename.wav")
|
|
' phone.MakeCall("phonenumber")
|
|
' End Sub
|
|
' AddHandler phone.CallActiveEvent, Sub()
|
|
' Console.WriteLine("Answered. Call is active!")
|
|
' End Sub
|
|
' AddHandler phone.CallCompletedEvent, Sub()
|
|
' Console.WriteLine("Completed.")
|
|
' End Sub
|
|
' AddHandler phone.PhoneConnectedEvent, Sub()
|
|
' Console.WriteLine("Connected.")
|
|
' End Sub
|
|
' AddHandler phone.PhoneDisconnectedEvent, Sub()
|
|
' Console.WriteLine("Disonnected.")
|
|
' End Sub
|
|
' Console.WriteLine("Go....")
|
|
|
|
|
|
|
|
' phone.Connect() ' // connecting
|
|
|
|
' Console.WriteLine(phone.CurrentConnectState)
|
|
' 'phone.MakeCall("800")
|
|
' 'Console.ReadLine()
|
|
' 'phone.Disconnect() ' // terminate all calls And disconnect
|
|
'End Sub
|
|
|
|
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
|
|
|
|
|
|
End Sub
|
|
|
|
Private Sub UpdateCallStates()
|
|
'Dim active1 As Boolean = UpdatePhoneLine(Me.PhoneLine1Status_Text, Me.PhoneLine1Hold_Button, Me.PhoneLine1Resume_Button, Me.PhoneLine1End_Button, phoneLines(0))
|
|
'Dim active2 As Boolean = UpdatePhoneLine(Me.PhoneLine2Status_Text, Me.PhoneLine2Hold_Button, Me.PhoneLine2Resume_Button, Me.PhoneLine2End_Button, phoneLines(1))
|
|
'Dim active3 As Boolean = UpdatePhoneLine(Me.PhoneLine3Status_Text, Me.PhoneLine3Hold_Button, Me.PhoneLine3Resume_Button, Me.PhoneLine3End_Button, phoneLines(2))
|
|
'Dim active4 As Boolean = UpdatePhoneLine(Me.PhoneLine4Status_Text, Me.PhoneLine4Hold_Button, Me.PhoneLine4Resume_Button, Me.PhoneLine4End_Button, phoneLines(3))
|
|
'Dim active5 As Boolean = UpdatePhoneLine(Me.PhoneLine5Status_Text, Me.PhoneLine5Hold_Button, Me.PhoneLine5Resume_Button, Me.PhoneLine5End_Button, phoneLines(4))
|
|
'Dim active6 As Boolean = UpdatePhoneLine(Me.PhoneLine6Status_Text, Me.PhoneLine6Hold_Button, Me.PhoneLine6Resume_Button, Me.PhoneLine6End_Button, phoneLines(5))
|
|
'm_IsActiveOnThePhone = active1 OrElse active2 OrElse active3 OrElse active4 OrElse active5 OrElse active6
|
|
'UpdatePhoneState()
|
|
Me.Update()
|
|
End Sub
|
|
|
|
End Class |