CROSS-REFERENCE TO RELATED APPLICATIONSThis application claims the benefit and priority of U.S. Provisional Application No. 60/982,684 entitled “Systems and Methods for Providing Unified Mobile Communications,” and filed on Oct. 25, 2007, which is incorporated herein by reference.
BACKGROUND1. Field of the Invention
The present invention relates generally to the field of digital communications interfaces and more specifically to systems and methods for providing a generic interface in a communications environment.
2. Background Art
Digital communications may be performed over a variety of communications media, including voice, email, text messaging, multimedia messaging, etc. These digital communications may utilize any of a variety of protocols. The communications media may not be compatible with one another. Therefore, a communications device may not be able to seamlessly communicate over two different communications media, such as voice and text. In addition, the variety of protocols may also be incompatible with one another. These protocol incompatibilities may prevent a communications device that utilizes one protocol from communicating with another communications device that utilizes a different protocol.
Because of these incompatibilities, a software application that is intended to communicate using more than one communication media and/or protocol may need to include separate code with separate function calls for each communications media and/or protocol. This can become unwieldy and cumbersome, making multiple communications media and/or protocols interoperating seamlessly in the application difficult or impractical.
SUMMARYA method for providing a communications services interface is disclosed. The method includes receiving a first application function call. The first application function call specifies a first communications channel utilizing a first communications protocol to communicate over a network. The method further includes sending a first protocol command to control communications over the first communications channel. The first protocol command is responsive to the first application function call. The method additionally includes receiving a second application function call. The second application function call specifies a second communications channel utilizing a second communications protocol to communicate over the network. The second application function call has a same syntax as the first application function call. The second communications protocol is different than the first communications protocol. The method also includes sending a second protocol command to control communications over the second communications channel. The second protocol command is responsive to the second application function call.
BRIEF DESCRIPTION OF THE DRAWINGSFIG. 1 illustrates an exemplary communications system.
FIG. 2 illustrates an exemplary communications system including a communications device configured to communicate over a network.
FIG. 3 illustrates an exemplary method of allocating and activating communications services.
FIG. 4 illustrates an exemplary method of initiating a call.
FIG. 5 illustrates an exemplary method of terminating a call.
FIG. 6 illustrates an exemplary method of accepting an incoming call.
FIG. 7 illustrates an exemplary method of providing an interface between a communications application and a plurality of communications protocols.
FIG. 8 illustrates an exemplary method of providing communications between multiple entities.
FIG. 9 illustrates an exemplary method of providing a communications services interface.
FIG. 10 illustrates an exemplary communications device.
DETAILED DESCRIPTIONSystems and methods for providing a generic interface in a communications environment are described. These systems and methods enable applications to seamlessly communicate over multiple communications media and/or use multiple communications protocols by using a shared application programming interface. The application programming interface may provide a common command function call configured to interface with multiple protocol stacks. The shared application programming interface may abstract the uniqueness of and differences between various communications media and protocols into a common set of function calls and data structures.
Using the application programming interface, an application may interface to multiple incompatible communications media and communications protocols using a common set of software code. Because the details of the communications protocols are abstracted by the application programming interface, the application software code may not need to address the details of each individual communications protocol. Because the application software code may be independent of the details of the individual communications protocols, the application software code may easily be expanded to support new communications protocols also supported by the application programming interface.
FIG. 1 illustrates anexemplary communications system100. Thecommunications system100 includes acommunications device102 and anetwork104. Thecommunications device102 may be configured to communicate using a variety ofcommunications protocols106 overvarious communications media108. One or morecommunications services providers110 may provide various communications services over thenetwork104.
Thecommunications device102 may include a mobile communications device such as a cellular telephone, cordless telephone handset, portable computer equipped with wireless internet access, personal digital assistant, etc. Thecommunications device102 may be configured to operate in multiple modes, such as both Wi-Fi and cellular, and thereby provide communications viamultiple communications media108 and/ornetworks104 using one ormore communications protocols106. Thecommunications device102 may also include a fixed-location communications device such as a desktop personal computer with internet access, desktop telephone, conference speakerphone, etc. Software configured to implement thecommunications protocols106 may be associated with thecommunications device102. Thecommunications device102 may include a transceiver configured to communicate over thenetwork104.
Thevarious communications media108 may include media connections provided by various communications protocols including circuit-switched (CS) protocols, internet protocol (IP), and proprietary protocols. Thecommunications media108 may include voice communications such as plain old telephone service (POTS), cellular telephone service, voice over internet protocol (VoIP), voice mail, and/or text communications such as email, Short Message Service (SMS), instant messaging (IM), and text chat services. Multimedia communications including text, still images, video, and audio may also be provided as part of thecommunications media108. Thevarious communications media108 may also include internet access, web browsing, file transfer protocol (FTP), and the like.
The media connections provided by thecommunications media108 may include communications services associated with the one or morecommunications services providers110. The one or morecommunications services providers110 may associate a communications services provider account with thecommunications device102. The communications services provider account may be associated with one ormore communications protocols106, usernames, passwords, internet addresses, and other communications attributes.
A communications channel may be provided by thecommunications device102 utilizing the one or morecommunications services providers110 over thenetwork104. The communications channel may be established by thecommunications device102 connecting and authenticating with the one or morecommunications services providers110 using thecommunications protocols106. Thecommunications device102 may establish one or more communications channels simultaneously. Each of the communications channels may use a different protocol or be carried by a differentcommunications services provider110. In some embodiments, more than one communications channel may use a single protocol or be provided by a singlecommunications services provider110. Each communications channel may be associated with a unique service identification tag (ID), and be independent from other communications channels that may be established by thecommunications device102.
Thecommunications protocols106 may adhere to standards defined for communicating over thevarious communications media108. For example,communications protocols106 adhering to internet standards may include HTTP, AJAX, File Transfer Protocol (FTP), User Datagram Protocol (UDP), and Transmission Control Protocol/Internet Protocol (TCP/IP). In addition, communications protocols adhering to voice communications standards may include Global System for Mobile communications (GSM), Extensible Messaging and Presence Protocol (XMPP), and Session Initiation Protocol (SIP). GSM may be used to support cellular telephone communications over cellular networks provided by one or morecommunications services providers110. XMPP may be used to support instant messaging services provided by one or morecommunications services providers110. XMPP and SIP may be used to support voice over internet protocol (VoIP) communications provided by one or morecommunications services provider110. Furthermore, communications protocols adhering to presence and instant messaging standards may include Common Profile for Presence (CPP), Common Profile for Instant Messaging (CPIM), Common Presence and Instant Messaging (CPIM) Message Format, and XMPP.
In one embodiment, thecommunications protocols106 may be implemented on a computing device (not shown) disposed external to thecommunications device102 and communicatively coupled with thecommunications device102 via thenetwork104. In this embodiment, commands configured to exercise thecommunications protocols106 may be issued from thecommunications device102 to the computing device.
Thenetwork104 may include a wired communications network such as an Ethernet local area network (LAN) or a landline POTS network. Thenetwork104 may also include a wireless communications network such as a Wi-Fi network, a WiMax network, or a cellular telephone network. Thenetwork104 may include an internet or World Wide Web (WWW) network. Thenetwork104 may be configured to carry communications associated with thecommunications media108 and thecommunications protocols106.
FIG. 2 illustrates anexemplary communications system200 including thecommunications device102 configured to communicate over thenetwork104. Thecommunications device102 includes acommunications system software202 as well as anoperating system204. Thecommunications system software202 includes anapplication206 configured to communicate with another entity over thenetwork104. The other entity may include another communications device (not shown) configured to communicate over thenetwork104. A communicationsservices interface module208 includes software for providing communications services to theapplication206 to enable theapplication206 to communicate over thenetwork104. Thecommunications system software202 also includes protocol stacks210 and aDSP engine212. The protocol stacks210 may comprise modules including software and/or electronic circuitry configured to implement communications protocols for communicating over thenetwork104 via anetwork interface214. The protocol stacks210 include aXMPP protocol stack210A, anSIP protocol stack210B, a proprietaryprotocols protocol stack210C, an IMservices protocol stack210D, and a cellularservices protocol stack210E, each of which may be hereinafter referred to as a member of the protocol stacks210. TheDSP engine212 may comprise a module including software and/or electronic circuitry configured to perform digital signal processing functions in conjunction with the communicationsservices interface module208.
Each member of the protocol stacks210 may be configured to establish one or more communications channels over thenetwork104 by interfacing with thenetwork104 via thenetwork interface214. Thenetwork interface214 may also interface with, communicate with, and/or interoperate with theoperating system204 to implement the one or more communications channels. Theoperating system204 may include Palm OS, Symbian, Windows CE, Windows Mobile, Windows XP, Windows Vista, MacOS, UNIX, Linux, Solaris, Nucleus OS, Vx Works, etc.
Theapplication206 may comprise a software module including a user interface. The user interface may be configured to receive commands and instructions from a user associated with thecommunications device102 and report a status relating to the one or more communications channels to the user. Theapplication206 may also be configured to receive communications input from the user and provide communications output to the user.
The communicationsservices interface module208 provides generalized control of the protocol stacks210 for establishing and manipulating thecommunications media108. Other protocol stacks (not shown) implementing other communications protocols, such as Simple Traversal of User Datagram Protocol Through Network Address Translators (STUN), may also be controlled by the communicationsservices interface module208. The communicationsservices interface module208 may include data and algorithms taking into account the communications services which each member of the protocol stacks210 is capable of supporting. The communicationsservices interface module208 may also include data and algorithms configured to couple communications services and functionality between one member of the protocol stacks210 or theDSP engine212 with another member of the protocol stacks210 or theDSP engine212. The communicationsservices interface module208 may enable one or more communications services over one ormore communications media108, using one ormore communications protocols106, and carried by the one or morecommunications services providers110 to seamlessly interface with one another.
The communicationsservices interface module208 may utilize theDSP engine212 to provide digital processing of voice, audio, and/or video in conjunction with the protocol stacks210. The communicationsservices interface module208 may create common audio tones used in communications services supported by the protocol stacks210, such as dial tones, call progress tones, DTMF tones, and telephone ringing tones.
The communicationsservices interface module208 may control multimedia streaming over thenetwork104. For example, the communicationsservices interface module208 may control the streaming of voice over thenetwork104. The communicationsservices interface module208 may also control the streaming of audio and/or video over thenetwork104.
The communicationsservices interface module208 includes anapplication programming interface216 and a communicationsservices protocol interface218. Theapplication programming interface216 is configured to provide a variety of function calls related to communications for use by theapplication206. The function calls may be configured to abstract the details of underlying protocols implemented in the protocol stacks210 and theDSP engine212. By abstracting these details, the function calls enable a generalized common interface to the plurality of underlying protocols which may be independent of the details of each of the underlying protocols, according to exemplary embodiments. The function calls may abstract protocol-specific communications between the communicationsservices interface module208 and each member of the protocol stacks210 into common function calls between theapplication206 and the communicationsservices interface module208. Theapplication206 may use the function calls to send one or more API calls220 to the communicationsservices interface module208. Theapplication206 may also use the function calls to configure theapplication206 to process one ormore API events222 which may be received from the communicationsservices interface module208.
Theapplication programming interface216 may provide support for two types of the one or more API calls220. A first type of the one or more API calls220 may be configured to enable theapplication206 to control an action performed by at least one member of the protocol stacks210 or theDSP engine212. A second type of the one or more API calls220 may be configured to establish a feedback mechanism by which at least one member of the protocol stacks210 or theDSP engine212 may notify theapplication206 of an event or status.
The feedback mechanism may include the one ormore API events222. Each API event of the one ormore API events222 may be associated with a particular function call, or instance of the one or more API calls220, which may have established the feedback path associated with the API event. The one ormore API events222 may be asynchronous. Examples illustrating the feedback mechanism are described herein with reference toFIGS. 3-6.
A single function call may be used by theapplication206 to interface with a plurality of the members of the protocol stacks210 by changing a parameter (or argument) of the single function call. For example, source code associated with theapplication206 may include a single function call that includes a parameter specifying that theXMPP protocol stack210A be utilized for performing a communications function. The single function call may then be used again by the application source code to perform the communications function using theSIP protocol stack210B in addition, simply by replacing the parameter specifying that theXMPP protocol stack210A be utilized with a parameter specifying that theSIP protocol stack210B be utilized.
In response to the one or more API calls220 received from theapplication206, the communicationsservices interface module208 may control and communicate with the protocol stacks210 as well as theDSP engine212 to perform functions related to the one or more communications channels carried over thenetwork104. The communicationsservices interface module208 may issue protocol commands224 to the protocol stacks210. The communicationsservices interface module208 may also issue DSP commands226 to theDSP engine212. The protocol commands224 issued to one member of the protocol stacks210, such as theXMPP protocol stack210A, may differ in form and/or syntax from the protocol commands224 issued to another member of the protocol stacks210, such as theSIP protocol stack210B.
A first protocol command, such as one of the protocol commands224, issued in response to a first API call, such as the one or more API calls220, having a given protocol-dependent parameter may be syntactically different from a second protocol command issued in response to a second API call having a same function name as the first API call but a different protocol-dependent parameter than the first API call. The syntactical difference may be embodied by a different function name, a different set of parameters, or both. The syntactical difference may be dependent upon, or responsive to, a syntax required by each protocol implemented within the set of the protocol stacks210 and theDSP engine212. Each protocol command of the protocol commands224 may conform to a syntax standard corresponding to the member of the protocol stacks210 to which the protocol command is directed. Each member of the protocol stacks210 may have a different syntax standard for protocol commands224 than other members of the protocol stacks210.
The communicationsservices interface module208 may receiveprotocol events228 from the protocol stacks210. The communicationsservices interface module208 may also receiveDSP events230 from theDSP engine212. An instance of theprotocol events228 received from one member of the protocol stacks210 may differ in syntax and/or form from another instance of theprotocol events228 received from a different member of the protocol stacks210. A specific protocol event among the instances ofprotocol events228 may be in response to one or more communications232 received through thenetwork104 by thecommunications device102. For example, the specific protocol event may notify the communicationsservices interface module208 that a communications channel has been established in response to a network acknowledgement, which may include an instance of the one or more communications232 received through thenetwork104.
The communicationsservices interface module208 may send the one ormore API events222 to theapplication206 when triggered by theprotocol events228 to notify theapplication206 of a particular occurrence or status. The one ormore API events222 may also be sent from the communicationsservices interface module208 when triggered by an instance of theDSP events230 issued by theDSP engine212 to notify theapplication206 of a particular occurrence or status. Theprotocol events228 and theDSP events230 may be asynchronous.
Each instance of theprotocol events228 issued in response to a first communication, which may include an instance of the one or more communications232, may be syntactically different from the other instances of theprotocol events228 issued in response to a second communication, which may include another instance of the one or more communications232. The syntactical difference between each instance of theprotocol events228 may be dependent upon a syntax standard required by each protocol supported by members of the protocol stacks210. The communicationsservices interface module208 may convert the syntactically different instances of theprotocol events228 and theDSP events230 into the one ormore API events222 having a common syntax. For example, a first API event, such as an instance of the one ormore API events222, sent from the communicationsservices interface module208 to theapplication206 in response to the first communication may have a same function name as a second API event sent from the communicationsservices interface module208 to theapplication206 in response to the second communication, although a first protocol event, such as an instance of theprotocol events228, associated with the first communication and a second protocol event associated with the second communication may be syntactically different. The first API event may differ from the second API event in only a parameter value.
The communicationsservices protocol interface218 may provide a conversion between the common function calls provided by theapplication programming interface216 and the protocol-specific communications between the communicationsservices interface module208 and the protocol stacks210 and theDSP engine212. The communicationsservices protocol interface218 may provide the conversion between a common API call, which may include an instance of the one or more API calls220, and each of the protocol commands224 and the DSP commands226. The communicationsservices protocol interface218 may also provide the conversion between each instance of theprotocol events228 and theDSP events230 and a common API event, which may include an instance of the one ormore API events222.
The protocol stacks210 may communicate with the communicationsservices interface module208 via a command-event model. For example, the communicationsservices interface module208 may send a protocol command, such as an instance of the protocol commands224, to a protocol stack which is a member of the protocol stacks210. The protocol command may contain a block of digital data representative of the command. The communicationsservices interface module208 may then receive a protocol event, such as an instance of theprotocol events228, sent by the protocol stack. The protocol event may contain a block of digital data representative of the event. The event may include a status report in response to the protocol command, an IP event received from a communications channel over thenetwork104, etc. The communicationsservices interface module208 may use one or more Inter-Process Communication (IPC) techniques to send the protocol command and to receive the protocol event. A different IPC technique may be used to send the protocol command than to receive the protocol event. Examples of IPC techniques include pipes, sockets, remote procedure calls (RPC), shared memory, and message passing.
The communicationsservices interface module208 may support hot swapping or plug-and-play operation of the members of the protocol stacks210. For example, a selected member of the protocol stacks210 may be deactivated while the communicationsservices interface module208 continues operating and supporting other members of the protocol stacks210. The selected member of the protocol stacks210 may be deactivated without interrupting or ceasing operation of any communications services or communications channels supported by the other members of the protocol stacks210. The selected member of the protocol stacks210 may be deactivated because the communicationsservices interface module208 detects an error condition in the selected member of the protocol stacks210, because hardware or system resources of thecommunications device102 are not sufficient to support continued operation of the selected member of the protocol stacks210, because the selected member of the protocol stacks210 is being upgraded to a new version of the selected member of the protocol stacks210, because the user associated with thecommunications device102 wishes to deactivate communications services supported by the selected member of the protocol stacks210, because resources associated with thenetwork104 and/or thecommunications services providers110 are insufficient to support operation of communications services supported by the selected member of the protocol stacks210, or other various reasons.
As another example, a new protocol stack may be added as a new member of the protocol stacks210 and be registered with and supported by the communicationsservices interface module208 while the communicationsservices interface module208 continues to operate and support other members of the protocol stacks210 as well as any one or more communications services or communications channels supported by the other members of the protocol stacks210. The new protocol stack may be dynamically added when one or more resources become available to support operation of the new protocol stack. The one or more resources that become available may include hardware or system resources of thecommunications device102 such as a network interface, a required quantity of free memory, or processing capacity. The one or more resources that become available may also include resources associated with thenetwork104 and/or thecommunications services providers110 such as communications services, communications bandwidth, or network servers. The new protocol stack may also be dynamically added when one or more communications services and/or protocols supported by the new protocol stack are desired.
As a further example, the selected member of the protocol stacks210 may be deactivated because of an error condition. Examples of error conditions include bugs, crashes, unresponsiveness, incorrect behavior, etc. Then, the selected member of the protocol stacks210 may be restarted to restore the selected member of the protocol stacks210 to full operation. While any communications services and/or communications channels supported by the selected member of the protocol stacks210 may be interrupted when the selected member of the protocol stacks210 is deactivated, the interrupted communications services and/or communications channels may be restored or reactivated after the selected member of the protocol stacks210 is restarted.
In an embodiment, the communicationsservices interface module208 may monitor usage of the members of the protocol stacks210 as well as available hardware and system resources of thecommunications device102. The communicationsservices interface module208 may dynamically activate and/or deactivate various members of the protocol stacks210 as the various members of the protocol stacks210 are needed and/or as available resources allow. In this way, a set of active members of the protocol stacks210 may dynamically change depending on dynamically changing system resources of thecommunications device102, resources associated with thenetwork104, and/or resources associated with thecommunications services providers110. By dynamically changing the set of active members of the protocol stacks210, memory and/or processing resources of thecommunications device102 may be conserved.
Theapplication206 may be written as source code in a computer language such as C, C++, or Java. The application source code may include function calls provided by theapplication programming interface216 to include communications functionality associated with each of the protocols in the protocol stacks210 as well as theDSP engine212. A software compiler executing on a computing processor (not shown) may compile the source code into object code. The object code may be targeted to a particular computing processor associated with thecommunications device102. Theapplication programming interface216 may include one or more libraries configured to provide object code for various target computing processors. A compiler switch may be set to control the compiler to generate executable object code for the target computing processor associated with the compiler switch setting. Therefore, theapplication programming interface216 may enable a single source code to be targeted to more than one target computing processor and/orcommunications device102 based upon a compiler switch setting.
FIG. 3 illustrates an exemplary method of allocating and activating one or more communications services. The method illustrates how an application programming interface, such as theapplication programming interface216 discussed herein, may be used by an application, such as theapplication206, to allocate and activate communications channels using different protocol stacks, such as the members of the protocol stacks210. The method also illustrates how a communications services interface module, such as the communicationsservices interface module208, may support plug-and-play protocol stacks whereby new members of the protocol stacks210 may be dynamically added and supported by the communicationsservices interface module208 without re-coding, recompiling, or interrupting operation of the communicationsservices interface module208 and/orapplication206. The new members of the protocol stacks210 may be dynamically added and supported without interrupting operation of the one or more communications services already activated. After the one or more communications services are allocated and activated, the communications channels may be used by theapplication206. Theapplication206 may include a state machine configured to implement the method.
Instep302, a protocol stack, such as a member of the protocol stacks210, sends a registration event, such as an instance of theprotocol events228, to the communicationsservices interface module208. By sending the registration event, the protocol stack may register with the communicationsservices interface module208. The registration event may include data regarding the protocol stack such that the communicationsservices interface module208 may use the protocol stack to allocate and activate one or more communications services associated with the protocol stack. The communicationsservices interface module208 may be configured to utilize the protocol stack after receiving the registration event even though the communicationsservices interface module208 may have no data regarding the protocol stack prior to receiving the registration event. In this way, the communicationsservices interface module208 may support plug-and-play operation of a dynamically added protocol stack. The communicationsservices interface module208 may therefore support a communications interface protocol via the dynamically added protocol stack which the communicationsservices interface module208 did not previously support.
Instep304, theapplication206 is notified of the availability of one or more protocols supported by the protocol stack registered instep302. The communicationsservices interface module208 may send a protocol availability event, which may include an instance of the one ormore API events222, to theapplication206. The protocol availability event may include data regarding the one or more protocols supported by the protocol stack registered instep302. In conjunction with the data regarding the one or more protocols, theapplication206 may use the one or more protocols after receiving the protocol availability event even though theapplication206 may have had no data regarding using the one or more protocols via the communicationsservices interface module208 prior to receiving the protocol availability event. In this way, theapplication206 may utilize the one or more protocols supported by the protocol stack which is dynamically added and registered instep302.
Instep306, a new communications service is allocated. Theapplication206 may use an API function call to send an allocation command, which may include an instance of the one or more API calls220, to the communicationsservices interface module208. The allocation command may specify which protocol, and consequently which member of the protocol stacks210, is to be associated with the new communications service.
Instep308, the new communications service is created via the protocol stack associated with the new communications service, which may include a member of the protocol stacks210. The communicationsservices interface module208 may send a communications service creation command, which may include an instance of the protocol commands224, to the protocol stack associated with the new communications service. The communications service creation command may be sent in response to receiving the allocation command sent by theapplication206 instep306. The communications service creation command sent to the protocol stack associated with the new communications service may be syntactically different from another communications service creation command that may be sent to a different member of the protocol stacks210. The communications service creation command sent, and the protocol stack associated with the new communications service, may be responsive to a parameter included in the allocation command sent by theapplication206 to the communicationsservices interface module208 instep306.
The protocol stack associated with the new communications service may perform functions related to creating the new communications service in response to receiving the communications service creation command. The functions performed by the protocol stack associated with the new communications service to create the new communications service may be specific to the protocol associated with the new communications service. For example, theSIP protocol stack210B may initialize a user agent, while theXMPP protocol stack210A may initialize an endpoint.
In step310, a creation status of the new communications service is reported to the communicationsservices interface module208. After the protocol stack associated with the new communications service creates the new communications service, the protocol stack associated with the new communications service may send a protocol service creation event, which may include an instance of theprotocol events228, back to the communicationsservices interface module208 to notify the communicationsservices interface module208 that the protocol stack associated with the new communications service has successfully created the new communications service. In some embodiments, the protocol service creation event may be sent to the communicationsservices interface module208 to report a communications service creation error.
In step312, a communications service allocation status is reported to theapplication206. After the communicationsservices interface module208 receives the protocol service creation event in step310, the communicationsservices interface module208 may send a corresponding interface service creation event, which may include an instance of the one ormore API events222, to theapplication206. The corresponding interface service creation event may report the communications service allocation success or failure status in response to the creation status reported by the protocol stack associated with the new communications service in step310.
Instep314, communications service parameters are set. Theapplication206 may send one or more communications service parameter setting commands, each of which may correspond to an instance of the protocol commands224, to the communicationsservices interface module208 using an API function call which may include an instance of the one or more API calls220. The communications service parameters may include a uniform resource identifier (URI), server name and/or internet address, login userid and/or password, and so forth.
In step316, the protocol stack associated with the new communications service is configured according to the communications service parameters set instep314. The communicationsservices interface module208 may send one or more protocol parameter setting commands, each of which may include an instance of the protocol commands224, to the protocol stack associated with the new communications service. The one or more protocol parameter setting commands may be sent in response to receiving the one or more communications service parameter setting commands sent by theapplication206 instep314. The one or more protocol parameter setting commands sent to the protocol stack associated with the new communications service may be syntactically different from one or more protocol parameter setting commands that may be sent to a different member of the protocol stacks210.
Instep318, the new communications service is activated. Theapplication206 may send an activation command to the communicationsservices interface module208 using an API function call which may include an instance of the one or more API calls220. The activation command may specify the new communications service to be activated by identifying the previously allocated new communications service.
Instep320, the protocol stack associated with the new communications service is activated. The communicationsservices interface module208 may send a communications service activation command, which may include an instance of the protocol commands224, to the protocol stack associated with the new communications service. The communications service activation command may be sent in response to receiving the activation command sent by theapplication206 instep318. The communications service activation command sent to the protocol stack associated with the new communications service may be syntactically different from a communications service activation command that may be sent to a different member of the protocol stacks210.
The protocol stack associated with the new communications service may perform functions related to activating the new communications service in response to receiving the communications service activation command. The functions performed by the protocol stack associated with the new communications service to activate the new communications service may be specific to the protocol associated with the new communications service. For example, theSIP protocol stack210B may register a user agent, while theXMPP protocol stack210A may connect and authenticate against an XMPP server.
In step322, an activation status of the protocol stack associated with the new communications service is reported to the communicationsservices interface module208. After the protocol stack associated with the new communications service activates the new communications service, the protocol stack associated with the new communications service may send a protocol activation event, which may include an instance of theprotocol events228, back to the communicationsservices interface module208 to notify the communicationsservices interface module208 that the protocol stack associated with the new communications service has successfully activated the new communications service. In some embodiments, the protocol activation event may be sent to the communicationsservices interface module208 to report a communications service activation error.
In step324, a communications service activation status is reported to theapplication206. After the communicationsservices interface module208 receives the protocol activation event in step322, the communicationsservices interface module208 may send a corresponding interface service activation event, such as an instance of the one ormore API events222, to theapplication206. The corresponding interface service activation event may report the communications services activation success or failure status in response to the activation status reported by the protocol stack associated with the new communications service in step322.
Inoptional step326, another communications service may be allocated and activated by repeating steps302-324. The other communications service may utilize a different protocol or member of the protocol stacks210 than the prior new communications service. In other embodiments, the other communications service may utilize the same protocol or member of the protocol stacks210 as the prior new communication service, but may allocate and activate a separate communications channel than the prior new communications service.
FIG. 4 illustrates an exemplary method of initiating a call. The call may be initiated over a communications service previously allocated and activated as described with reference toFIG. 3. The call may be initiated by a calling party and directed to a called party. The calling party may include a first communications service endpoint at a first communications device, which may include an example of thecommunications device102. The first communications service endpoint may include a first application, which may include an example of theapplication206. The called party may include a second communications service endpoint at a second communications device, which may include another example of thecommunications device102. The second communications service endpoint may include a second application, which may include another example of theapplication206. Protocol signaling and data traffic may be communicated over a network, such as thenetwork104, between the first communications service endpoint and the second communications service endpoint according to the communications protocol associated with the communications service.
Protocol signaling between the calling party and the called party may include data packets sent and received over thenetwork104 in accordance with the protocol to perform communications functions such as initiating a call, acknowledging a call, accepting a call, rejecting a call, putting a call on hold, resuming a call previously put on hold, initiating a conference call, terminating a call, requesting contact information, sending contact information, requesting presence information or status, sending presence information or status, sending text messages, sending multimedia messages, and so forth.
Instep402, a call initiation is signaled. The first application may send a call initiation command to the communicationsservices interface module208 specifying a called party to call and a communications service to use to call the called party. The call initiation command may be sent using an API function call, which may include an instance of the one or more API calls220. The API function call may have a consistent syntax regardless of which communications service, communications channel, or communications protocol may be associated with the call. API function call parameters may be specified to correspond with the communications service, communications channel, or communications protocol associated with the call.
Instep404, a protocol stack associated with the call is commanded to initiate the call. The protocol stack associated with the call may be chosen among the members of the protocol stacks210 based on the communications service and/or the communications channel specified by the first application or associated with the called party. The communicationsservices interface module208 may then send a protocol call initiation command to the protocol stack associated with the call. The protocol call initiation command may include-an instance of the protocol commands224. Syntax of the protocol call initiation command may depend upon, or be responsive to, the protocol stack associated with the call. For example, the protocol call initiation command may differ in syntax than if a different member of the protocol stacks210 was associated with the call, the communications service, and/or the communications channel.
Instep406, the protocol stack associated with the call performs protocol signaling to call the called party. The protocol signaling may include sending a call initiation data packet corresponding to the protocol associated with the call over thenetwork104 to the called party. The protocol signaling may also include monitoring thenetwork104 for an acknowledgement data packet that may be sent from the called party to the calling party to acknowledge receipt of the call initiation data packet.
Instep408, the protocol signaling of the called party is reported. After the protocol stack associated with the call has sent the data packet to the called party instep406, the protocol stack associated with the call may send a protocol signaling event, which may include an instance of theprotocol events228, to the communicationsservices interface module208. The protocol signaling event may report that the protocol stack associated with the call has begun signaling the called party to initiate the call.
Instep410, calling the called party is reported. The communicationsservices interface module208 may send a calling event, which may include an instance of the one ormore API events222, to the first application to report that the protocol stack associated with the call has signaled the called party to initiate the call. The calling event may be sent to the first application in response to receiving the protocol signaling event from the protocol stack associated with the call indicating that the protocol stack associated with the call has begun protocol signaling to initiate the call.
Instep412, the protocol stack associated with the call's receipt of an acknowledgement from the called party is reported. The received acknowledgement may indicate that the called party is in receipt of the request to initiate the call and is performing protocol signaling in response to the request. The protocol signaling being performed by the called party may include sending an acknowledgement data packet to the calling party. The calling party's protocol stack associated with the call may process the acknowledgement data packet received from the called party and send a protocol acknowledgement event, which may include an instance of theprotocol events228, to the communicationsservices interface module208. The protocol acknowledgement event may report that the called party has acknowledged the initiation of the call.
Instep414, the called party's acknowledgement of the call is reported. The communicationsservices interface module208 may send an interface acknowledgement event, which may include an instance of the one ormore API events222, to the first application to report that the called party has acknowledged receipt of the call initiation. The interface acknowledgement event may be sent to the first application in response to receiving the protocol acknowledgement event sent from the protocol stack associated with the call instep412. As an illustration, the reported acknowledgement may correspond to a called telephone ringing in the earpiece of a calling telephone after dialing a telephone number.
Instep416, the protocol stack associated with the call's receipt of an acceptance of the call from the called party is reported. The called party may send a call acceptance data packet to the calling party over thenetwork104 to tell the calling party that the call is being accepted. The calling party's protocol stack associated with the call may process the call acceptance data packet received from the called party and send a protocol call acceptance event, which may include an instance of theprotocol events228, to the communicationsservices interface module208. The protocol call acceptance event may report that the called party accepts the call from the calling party.
Instep418, the communicationsservices interface module208 reports that the called party accepts the call. The communicationsservices interface module208 may send an interface call acceptance event, which may include an instance of the one ormore API events222, to the first application to report that the called party accepts the call from the calling party. The event may be sent to the first application in response to receiving the protocol call acceptance event sent from the protocol stack associated with the call instep416.
FIG. 5 illustrates an exemplary method of terminating the call. The method illustrated inFIG. 5 assumes that the call between the calling party and the called party has already been initiated as described with reference toFIG. 4. A method similar to that illustrated inFIG. 5 may also be used for another desired communications function, such as placing the call on hold and resuming the call previously placed on hold, by customizing the commands, events, and data-packets to correspond to the other desired communications function. In this exemplary method, the calling party terminates the call in progress. The method may also be applicable to the called party terminating the call in progress.
Instep502, termination of the call in progress is signaled. The first application may send a call termination command to the communicationsservices interface module208 specifying that the call with the called party be terminated. The call termination command may be sent using an API function call, such as an instance of the one or more API calls220. The API function call may have a consistent syntax regardless of which member of the protocol stacks210 is associated with the call in progress.
Instep504, the protocol stack associated with the call in progress is commanded to terminate the call in progress. The communicationsservices interface module208 may determine which member of the protocol stacks210 is associated with the call in progress. The communicationsservices interface module208 may then send a call termination command to the protocol stack associated with the call in progress. The call termination command may include an instance of the protocol commands224. Syntax of the call termination command may depend upon, or be responsive to, the protocol stack associated with the call in progress. For example, the termination command to be sent to the protocol stack associated with the call in progress may differ in syntax than if a different member of the protocol stacks210 was associated with the call in progress.
Instep506, protocol signaling with the called party is performed. The protocol stack associated with the call in progress may perform protocol signaling including sending a call termination data packet corresponding to the protocol associated with the call in progress over thenetwork104 to the called party. The call termination data packet may notify the called party that the call in progress is being terminated. The protocol signaling may also include monitoring thenetwork104 for an acknowledgement data packet that may be sent from the called party to the calling party to acknowledge receipt of the call termination data packet terminating the call.
Instep508, termination of the call in progress by the protocol stack associated with the call in progress is reported. After the protocol stack associated with the call in progress has sent the call termination data packet to the called party instep506, the protocol stack associated with the call in progress may send a protocol call termination event, which may include an instance of theprotocol events228, to the communicationsservices interface module208. The protocol call termination event may report that the protocol stack associated with the call in progress has begun or completed signaling the called party to terminate the call. In some embodiments, the protocol call termination event may be sent to the communicationsservices interface module208 to report a termination error.
Instep510, termination of the call in progress is reported. The communicationsservices interface module208 may send an interface call termination event, which may include an instance of the one ormore API events222, to the first application to report that the protocol stack associated with the call in progress has terminated the call with the called party. The interface call termination event may be sent to the first application in response to receiving the protocol call termination event from the protocol stack associated with the call in progress instep508.
FIG. 6 illustrates an exemplary method of accepting an incoming call. The incoming call may be accepted by the called party in response to the call initiation from the calling party, as described with reference toFIG. 4. In this exemplary method, the called party may include the second communications service endpoint and the second application at the second communications device.
Instep602, protocol signaling for the incoming call is received. A protocol stack associated with the incoming call, which may include a member of the protocol stacks210, may monitor thenetwork104 for the call initiation data packet to arrive. The call initiation data packet may correspond to a call initiation protocol signal. When the protocol stack associated with the incoming call recognizes the call initiation protocol signal received over thenetwork104 as the incoming call initiation data packet, the protocol stack associated with the incoming call may receive the call initiation data packet for processing.
Instep604, a protocol incoming call event, which may include an instance of theprotocol events228, corresponding to the incoming call is generated. The protocol stack associated with the incoming call that receives the incoming call initiation data packet instep602 may process the incoming call initiation data packet. If the protocol stack associated with the incoming call determines that the incoming call initiation data packet represents the incoming call corresponding to the communications service or communications channel supported by the protocol stack associated with the incoming call, the protocol stack associated with the incoming call may send the protocol incoming call event to the communicationsservices interface module208. Syntax of the protocol incoming call event may depend upon, or be responsive to, the protocol stack associated with the incoming call. For example, the protocol incoming call event may differ in syntax than if a different member of the protocol stacks210 was associated with the incoming call, the communications service, and/or the communications channel.
Instep606, the second application is notified of the incoming call. The communicationsservices interface module208 may receive the protocol incoming call event sent instep604. The communicationsservices interface module208 may process the protocol incoming call event, effectively converting the protocol incoming call event whose syntax may be unique to the originating protocol stack associated with the incoming call into a protocol-independent incoming call event to be sent to the second application. The communicationsservices interface module208 may then send the protocol-independent incoming call event, which may include an instance of the one ormore API events222, to the second application to notify the second application of the incoming call. The protocol-independent incoming call event sent to the second application may be in a consistent syntax regardless of which member of the protocol stacks210 is associated with the incoming call.
Instep608, the incoming call is acknowledged. The second application may send an acknowledgement command to the communicationsservices interface module208 specifying that an acknowledgement be sent to the calling party. The acknowledgement command may be sent using an API function call, such as an instance of the one or more API calls220. The acknowledgement command may have a consistent syntax regardless of which member of the protocol stacks210 is associated with the incoming call.
Instep610, a protocol acknowledgement command to acknowledge the incoming call is generated. The communicationsservices interface module208 may send the protocol acknowledgement command to the protocol stack associated with the incoming call. The protocol acknowledgement command may include an instance of the protocol commands224. Syntax of the protocol acknowledgement command may depend upon, or be responsive to, the protocol stack associated with the incoming call. For example, the protocol acknowledgement command may differ in syntax than if a different member of the protocol stacks210 was associated with the incoming call. The protocol stack associated with the incoming call may then signal the calling party to acknowledge the incoming call over thenetwork104.
Instep612, the incoming call is accepted. The second application may send an accept call command to the communicationsservices interface module208 specifying that the incoming call be accepted. The accept call command may be sent using an API function call, which may include an instance of the one or more API calls220. The API function call may have a consistent syntax regardless of which member of the protocol stacks210 is associated with the incoming call.
Instep614, a protocol accept call command to accept the incoming call is generated. The communicationsservices interface module208 may send the protocol accept call command to the protocol stack associated with the incoming call. The protocol accept call command may include an instance of the protocol commands224. Syntax of the protocol accept call command may depend upon, or be responsive to, the protocol stack associated with the incoming call. For example, the protocol accept call command may differ in syntax than if a different member of the protocol stacks210 was associated with the incoming call. The protocol stack associated with the incoming call may then signal the calling party to accept the incoming call over thenetwork104.
FIG. 7 illustrates an exemplary method of providing an interface between a communications application and a plurality of communications protocols. The method includes providing a common function call as part of an API in source code for the communications application, which may include an example of theapplication206, configuring a compiler for a target communications device or processor, and compiling the communications application source code into communications application executable code including the interface.
Instep702, the common function call is included in the communications application source code. The common function call may be part of theapplication programming interface216, described with reference toFIG. 2. The communications application source code may use a same common function call, which may correspond to an instance of the one or more API calls220, for a first protocol stack as a second protocol stack. The first protocol stack and the second protocol stack may each include a member of the protocol stacks210, and may each be different from one another. The first protocol stack or the second protocol stack may require that a protocol command, which may correspond to one of the protocol commands224, be in syntax specific to the first protocol stack or the second protocol stack, respectively. The protocol command syntax for the first protocol stack may be different and incompatible with the protocol command syntax for the second protocol stack.
Instep704, a first target communications device, which may include an instance of thecommunications device102, is targeted by a software compiler. The software compiler and one or more associated function libraries may be configured to compile the communications application source code into executable object code targeted to the first target communications device. The associated function libraries may include libraries associated with theapplication programming interface216. The software compiler and/or the associated function libraries may include an option to target the executable object code to one or moredifferent communications devices102. The option may include a specification of a computing processor and/or an operating system associated with the one or moredifferent communications devices102.
Instep706, the communications application executable code is compiled. The software compiler may compile the communications application source code into the communications application executable code using the associated function libraries on a computing processor. The communications application executable code may include executable API calls, which may include instances of the one or more API calls220, to interface to the communicationsservices interface module208. The communicationsservices interface module208 may be configured to issue an instance of the protocol commands224 to a member of the protocol stacks210, in response to the executable API call to be received from the communications application executable code.
A syntax of the instance of the protocol commands224 may depend upon, or be responsive to, the member of the protocol stacks210 to which the instance of the protocol commands224 is issued. For example, the instance of the protocol commands224 to be issued to one member of the protocol stacks210 may differ in syntax from another instance of the protocol commands224 to be issued to a different member of the protocol stacks210. Therefore, the communicationsservices interface module208 converts a single common function call syntax as received from theapplication206 into a plurality of protocol command syntaxes responsive to the member of the protocol stacks210 to which the instance of the protocol commands224 is to be issued. This conversion enables the communications application source code to be independent of the details of each individual protocol supported by the communicationsservices interface module208.
Inoptional step708,steps704 and706 may be repeated for one or more additional target communications devices. Step708 facilitates the creation of a plurality of different communications application executable codes from a single communications application source code. A first of the plurality of communications application executable codes may execute on the first target communications device while a second and/or subsequent communications application executable code created for a different target communications device than the first communications application executable code may execute on a different target communications device.
FIG. 8 illustrates an exemplary method of providing communications between multiple entities. The multiple entities may include a central entity, a first entity, and a second entity, where the central entity may be communicatively coupled with both the first entity and the second entity. The communications may include voice communications protocols such as XMPP, SIP, GSM, etc. The communications may also include other protocols such as text communications protocols and multimedia communications protocols. The entities may include communications devices such as thecommunications device102. The communications between the multiple entities may be carried over a network such as thenetwork104.
Instep802, a first voice communications protocol is utilized with the first entity. The central entity and the first entity may establish a first communications channel therebetween utilizing the first voice communications protocol. The first voice communications protocol may be implemented using a protocol stack, such as a member of the protocol stacks210, on an example of thecommunications device102.
Instep804, a second voice communications protocol is utilized with the second entity. The central entity and the second entity may establish a second communications channel therebetween utilizing the second voice communications protocol. The second voice communications protocol may be different from the first communications protocol. In other embodiments, the second voice communications protocol may be the same as the first communications protocol. The first voice communications channel and the second voice communications channel may be carried over different communications services providers, such ascommunications services providers110. For example, the first voice communications channel may be carried over a cellular telephone service provider, while the second voice communications channel may be carried over a voice over internet protocol service provider or an internet service provider.
Instep806, the first entity and the second entity are communicatively coupled. In one embodiment, a voice conference service may be provided between the central entity, the first entity, and the second entity, such that all three entities may communicate with each other via the voice conference service by communicatively coupling the first communications channel and the second communications channel. In some embodiments, one or more additional entities may join the voice conference. A new communications channel between the central entity and the one or more additional entities may use a different communications protocol orcommunications services provider110 than either the first communications channel or the second communications channel.
In another embodiment, a voice call may be transferred. The central entity may receive and accept a call from the first entity, and transfer the call to the second entity. The call from the first entity may be received over the first communications channel using the first communications protocol, while the call may be transferred to the second entity over the second communications channel using the second communications protocol. In some embodiments, the first communications protocol and the second communications protocol are different. In other embodiments, the first communications protocol and the second communications protocol may be the same. The first voice communications channel and the second voice communications channel may be carried over differentcommunications services providers110.
In a further embodiment, a voice call may be forwarded. The central entity may receive the call initiation protocol signal from the first entity, and forward the call to the second entity without answering the call. The call initiation protocol signal from the first entity may be received over the first communications channel using the first communications protocol, while the call may be forwarded to the second entity over the second communications channel using the second communications protocol. In some embodiments, the first communications protocol and the second communications protocol may be different. In other embodiments, the first communications protocol and the second communications protocol may be the same. The first voice communications channel and the second voice communications channel may be carried over differentcommunications services providers110.
FIG. 9 illustrates an exemplary method of providing a communications services interface. The method illustrates how the communications services interface, which may include an example of the communicationsservices interface module208 discussed herein, may be used by a communications application, which may include an example of theapplication206, to communicate over multiple communications channels. The multiple communications channels may communicate over a network, such as thenetwork104.
Instep902, the communicationsservices interface module208 receives a first application function call, which may include an instance of the one or more API calls220, from theapplication206. The first application function call may specify a first communications channel to which the first application function call pertains. The first communications channel may be controlled by a first module, which may include a member of the protocol stacks210. The first module may utilize a first module communications protocol to communicate. The first module communications protocol may include any communications protocol supported by the first module.
Instep904, the communicationsservices interface module208 sends a first protocol command, which may include an instance of the protocol commands224, to the first module. The first protocol command may be configured to control communications over the first communications channel. The first protocol command may be responsive to, or configured according to, the first application function call received instep902. The communicationsservices interface module208 may monitor a status of the first communications channel. The communicationsservices interface module208 may send a first status event, which may include an instance of the one ormore API events222, to theapplication206 reporting the status of the first communications channel.
Instep906, the communicationsservices interface module208 receives a second application function call, which may include an instance of the one or more API calls220, from theapplication206. The second application function call may specify a second communications channel to which the second application function call pertains. The second communications channel may be controlled by a second module, which may include a member of the protocol stacks210. The second module may utilize a second module communications protocol to communicate. The second module communications protocol may be any communications protocol supported by the second module.
In some embodiments, the first application function call may have a different syntax from the second application function call. In other embodiments, the first application function call and the second application function call may have a same syntax. In some embodiments, the first module may be a different module from the second module. In other embodiments, the first module and the second module may be a same module. In some embodiments, the first module communications protocol may include a different communications protocol from the second module communications protocol. In other embodiments, the first module communications protocol and the second module communications protocol may include a same communications protocol.
Instep908, the communicationsservices interface module208 sends a second protocol command, which may include an instance of the protocol commands224, to the second module. The second protocol command may be configured to control communications over the second communications channel. The second protocol command may be responsive to, or configured according to, the second application function call received instep906. The communicationsservices interface module208 may monitor a status of the second communications channel. The communicationsservices interface module208 may send a second status event, which may include an instance of the one ormore API events222, to theapplication206 reporting the status of the second communications channel.
In some embodiments, the second protocol command may have a different syntax from the first protocol command. In other embodiments, the second protocol command and the first protocol command may have a same syntax. In some embodiments, the second communications channel may be carried by a different communications services provider, such as an instance of the one or morecommunications services providers110, than the first communications channel. In other embodiments, the second communications channel may be carried by a samecommunications services provider110 as the first communications channel.
FIG. 10 illustrates an exemplary communications device1000. The communications device1000 may comprise thecommunications device102 according to some embodiments. The communications device1000 comprises at least acommunications interface1002, aprocessor1004, amemory1006, andstorage1008, which are all coupled to abus1010. Thebus1010 provides communications between thecommunications interface1002, theprocessor1004, thememory1006, and thestorage1008.
Thecommunications interface1002 may communicate with other communications devices (not shown) via acommunications medium1012. Theprocessor1004 executes instructions. Thememory1006 permanently or temporarily stores data. Some examples of thememory1006 are RAM and ROM. Thestorage1008 also permanently or temporarily stores data. Some examples of thestorage1008 are hard disks and disk drives.
The embodiments discussed herein are illustrative. As these embodiments are described with reference to illustrations, various modifications or adaptations of the methods and/or specific structures described may become apparent to those skilled in the art.
The above-described components and functions can be comprised of instructions that are stored on a computer-readable storage medium. The instructions can be retrieved and executed by a processor (e.g., processor1004). Some examples of instructions are software, program code, and firmware. Some examples of storage medium are memory devices, tape, disks, integrated circuits, and servers. The instructions are operational when executed by the processor to direct the processor to operate in accord with the invention. Those skilled in the art are familiar with instructions, processor(s), and storage medium.
While various embodiments have been described above, it should be understood that they have been presented by way of example only, and not limitation. For example, any of the elements associated with the application programming interface may employ any of the desired functionality set forth hereinabove. Thus, the breadth and scope of a preferred embodiment should not be limited by any of the above-described exemplary embodiments.