This invention relates to interfaces between an operating system and/or other programmed instructions executing on a computer and one or more drivers employed to access peripheral devices, such as a radio used for wireless network connectivity.
Co-pending U.S. patent application Ser. No. 11/874,962 discloses techniques whereby a computer may maintain simultaneous connections with a plurality of wireless networks using a single radio. In accordance with these techniques, a computer may establish a connection with a first wireless network, such as an 802.11 network through which the computer may connect with the Internet, at the same time that the computer maintains a connection with a second wireless network, such as an 802.11 mesh or other 802.11 ad hoc network or one or more other devices, using a single radio. As a result, the computer may support functions possible only with simultaneous connections to two or more wireless networks via a single radio. For example, a computer may establish simultaneous connections with two or more wireless networks while the computer is moving (e.g., while traveling in a vehicle) and switch seamlessly between the networks if a connection with one of the networks degrades, may simultaneously participate in two wireless or other ad hoc networks and serve as an interconnection between the networks, or may operate as an access point for a first wireless network while simultaneously maintaining a client connection to a second wireless network.
A computer equipped with this capability typically includes a set of programmed instructions that, when executed by the computer, provides an operating system for the computer. Radio hardware (e.g., a wireless network interface card, or NIC) employed by the computer may be constructed and arranged to send and receive wireless signals for communication with at least one device in a wireless network. The computer may include a driver and/or other programmed instructions through which it communicates with the radio hardware. For example, radio hardware may be made available by an independent vendor who also provides the driver and/or other programmed instructions through which the computer (e.g., the operating system and/or other programmed procedures) may communicate with, and invoke various functionality provided by, the radio. These programmed instructions are referred to herein for convenience as a “miniport driver,” although they need not be provided entirely in the form of a driver and may include any component(s) comprising a hardware interface adapted to communicate with radio hardware, provide control signals to radio hardware, and/or receive information regarding wireless signals received by radio hardware from one or more wireless networks.
In accordance with the techniques described in the above-referenced co-pending application, a miniport driver may be capable of presenting a plurality of virtual “ports” to the operating system on a computer, with each port being a virtual representation of a corresponding wireless network. As such, the operating system may initiate connections with, and receive signals from, a different wireless network on each port.
Some embodiments of the invention provide an interface between an operating system and/or other programmed instructions executing on a computer and a miniport driver configured to communicate with radio hardware, to implement various wireless connectivity-related functionality. Such functionality may be implemented or provided by, for example, the radio hardware and/or miniport driver, and the interface may enable the operating system and/or other programmed instructions to invoke the functionality so that the computer may employ it (e.g., on a user's behalf). For example, in some embodiments, the functionality includes a capability whereby a computer may maintain simultaneous connections on a plurality of wireless networks using a single radio. In some embodiments, the functionality includes a capability whereby a computer may function not only as a station on a wireless network (e.g., as a wireless client which gains access to a network, such as the Internet, through an access point), but also as an access point, so that one or more other devices capable of wireless connectivity may gain access to a network (e.g., the Internet) via the computer.
An interface implemented in accordance with aspects of the current invention may take any of numerous forms. For example, in some embodiments, an interface may be implemented via programmed instructions, such as via one or more drivers that pass information and/or instructions between the operating system and the miniport driver. It should be appreciated, however, that the invention is not limited to such an implementation, as an interface may be implemented using hardware, software or any suitable combination thereof. When implemented as one or more drivers, each driver may be separate from, integrated with, or form a part of the operating system and/or miniport driver. For example, one or more of the drivers may form part of the operating system. The invention is not limited to any particular implementation.
In accordance with some embodiments of the invention, the interface includes one or more components that provide the capability to invoke functions or features implemented or provided by a miniport driver and/or radio hardware. For example, in some embodiments, one or more interface components may be capable of issuing calls to functions implemented by a miniport driver. A call may, for example, be accomplished using one or more objects or data constructs referred to herein for convenience as object identifiers, or OIDs. An OID is a conventional vehicle which may be employed to make a function call to one or more components that implement the Network Driver Interface Specification (NDIS). In general, NDIS provides a library of functions which are conventionally employed by miniport drivers as well as higher-lever protocol drivers. An OID may, for example, be used to transfer information between components that implement the NDIS specification. For example, an OID may be used to query information accessible to a miniport driver (e.g., information about the driver's or underlying radio hardware's overall capabilities or current status) and/or set certain variables employed by a miniport driver or underlying radio hardware (e.g., optional features the miniport driver should enable on the radio hardware and/or settings for a particular transmission). Of course, the invention is not limited to employing one or more OIDs (or any other form of object or data construct) to invoke functionality and transfer information between components, as any suitable vehicle(s) and/or technique(s) may be employed.
Some embodiments of the invention provide a computer comprising a processor for executing instructions; a set of computer executable instructions that, when executed by the processor, form an operating system for the computer, the operating system controlling one or more operations of the computer; a radio constructed and arranged to send and receive wireless signals for communication with at least one device in a wireless network; a miniport driver comprising a hardware interface adapted to communicate with the radio, provide control signals to the radio, and receive information regarding wireless signals received by the radio from at least one device via a wireless network; and an interface operable to invoke functionality implemented by the miniport driver, in response to a request issued by the operating system, the functionality relating to enabling the computer to maintain simultaneous connections with at least two wireless networks using the radio and/or to enabling the computer to operate as an access point for a wireless network; wherein the interface invokes the functionality by making a call to the miniport driver using at least one OID.
Other embodiments of the invention provide a method for use in a computer comprising an operating system, a radio operable to send and receive wireless signals to enable the computer to communicate with at least one device in a wireless network, and a miniport driver comprising a hardware interface adapted to communicate with the radio, provide control signals to the radio, and/or receive information regarding wireless signals received by the radio from at least one device via a wireless network. The method comprises an act of: (A) providing an interface enabling the operating system to invoke functionality implemented by the miniport driver and/or the radio, the functionality relating to enabling the computer to maintain simultaneous connections with at least two wireless networks using the radio.
Still other embodiments of the invention provide at least one computer storage medium encoded with instructions which, when executed, perform a method, the method for use in a computer comprising an operating system, a radio operable to send and receive wireless signals to enable the computer to communicate with at least one device in a wireless network, and a miniport driver comprising a hardware interface adapted to communicate with the radio, provide control signals to the radio, and/or receive information regarding wireless signals received by the radio from at least one device via a wireless network. The method comprises an act of: (A) providing an interface enabling the operating system to invoke functionality implemented by the miniport driver and/or radio, the functionality relating to enabling the computer to act as an access point for a wireless network.
The accompanying drawings are not intended to be drawn to scale. In the drawings, each identical or nearly identical component that is illustrated in various figures is represented by a like numeral. For purposes of clarity, not every component may be labeled in every drawing. In the drawings:
Some embodiments of the invention provide an interface between an operating system and/or other programmed instructions executing on a computer and a miniport driver configured and arranged to communicate with radio hardware, provide control signals to radio hardware, and/or receive information regarding wireless signals received by radio hardware from one or more wireless networks. The interface may enable the operating system and/or other programmed instructions executing on the computer to invoke functionality (e.g., on a user's behalf) implemented by the miniport driver and/or radio hardware so that the computer may employ the functionality. Functionality may, for example, include a capability whereby the computer maintains simultaneous connections on a plurality of wireless networks using a single radio (hereinafter referred to for convenience as “virtualization”), and/or whereby the computer functions as an access point to a wireless network (hereinafter referred to for convenience as “software-enabled access point functionality”). Other functionality may also, or alternatively, be supported, as embodiments of the invention are not limited in this respect.
An interface implemented in accordance with some embodiments of the invention may issue a call to a function or feature implemented by a miniport driver and/or radio hardware using one or more OIDs. As described above, an OID may, for example, be employed by the interface to query information accessible to a miniport driver, set certain variables or other information used by a miniport driver or underlying radio hardware (e.g., in transmitting or receiving data via one or more wireless networks), and/or perform other functions.
The sections that follow describe examples wherein OIDs are used to enable virtualization and software-enabled access point functionality, respectively. However, it should be appreciated that the techniques and components described below for implementing various functions relating to wireless connectivity are intended to be merely illustrative and not limiting.
The components depicted in
In accordance with some embodiments of the invention, interface 110 may include various components configured to enable communication between operating system 105 and miniport driver 115. For example, the various components implemented by interface 110 may enable operating system 105 to issue calls to various functions provided by miniport driver 115 and/or radio 120, such as to enable virtualization and/or software-enabled access point functionality (as described in Section II. below).
In the example of
In some embodiments, when virtualization is initialized on the computer on which the components of
Virtual miniport driver 220 is installed between secondary networking stack 201 and virtual WiFi device 225, and receives information from the secondary networking stack intended for virtual WiFi device 225. Virtual miniport driver 220 shares a private interface 212 with virtual WiFi filter driver 210, which is employed to pass information to and receive information from virtual WiFi filter driver 210. As discussed further below, the information passed from virtual miniport driver 220 to virtual WiFi filter driver 210 may include OIDs to call various functions implemented by miniport driver 115 and/or radio 120. Information received from virtual WiFi filter driver 210 may include indications of received packets and various status indications. Virtual miniport driver 120 may pass indications of received packets to secondary networking stack 201.
In the arrangement shown in
In this example, miniport driver 215 presents port 250 for use by device A1 and port 255 for use by device A2. When operating system 105 attempts communication using device A2, virtual WiFi miniport driver 220 sends the communication to virtual WiFi filter driver 210, which routes them to device A1 on port 255. Any information received on port 255 is routed to virtual WiFi miniport driver 220, which then forwards it to secondary networking stack 201. The result is that the operating system “sees” two devices A1 and A2 which it may use to send and receive information on corresponding wireless networks presented by interface 110, but only a single radio is employed.
It should be appreciated that because interface 110 implements components allowing the operating system to employ multiple devices to simultaneously connect with respective wireless networks, other components shown in
In some embodiments, virtual WiFi filter driver 210 is implemented as a modifying filter driver. In this respect, in accordance with aspects of NDIS, a filter driver may reside between two other drivers (in this example, native WiFi driver 206 and miniport driver 115). An NDIS filter driver may be modifying or non-modifying. A non-modifying filter driver is capable only of passing packets received from a first driver in a stack (e.g., the native WiFi driver) to a second driver in the stack (e.g., the miniport driver), and does not “inject” packets into the stack (i.e., pass packets to the second driver in the stack which were not received from the first driver in the stack). A modifying filter driver is capable of injecting packets, and may also be capable of consuming packets (e.g., not passing packets received from the native WiFi driver to the miniport driver).
For example, in the arrangement of
Of course, virtual WiFi filter driver 210 need not be implemented via a filter driver, whether modifying or non-modifying, and may be implemented in any suitable fashion, using any one or more software and/or hardware components. In this respect, all of the components of interface 110 shown in
Wireless LAN service (Wlansvc) 300 is a user mode operating system component capable of accepting user commands to enable virtualization. As described above, native WiFi driver (NWIFI IM driver) 205 is a kernel mode operating system component used conventionally to pass information to miniport driver 215. Once virtualization is enabled, virtual WiFi filter driver (filter driver) 210 is installed, and issues calls to miniport driver (IHV miniport driver) 215 to invoke virtualization-related functions. In some embodiments described below, virtual WiFi filter driver 210 may pass various OIDs to miniport driver 215.
At the start of the sequence depicted in
In act 314, virtual WiFi filter driver 210 issues an IOCTL_CREATE_ADAPTER request to software bus driver 305 to create a new virtual device (e.g., virtual WiFi device 225,
In act 322, virtual WiFi filter driver 210 calls miniport driver 215 to create a new port, in the form of a new media access control (MAC) context. In the embodiment shown, virtual WiFi filter driver 210 does this using an OID (in particular, OID_DOT11_CREATE_MAC). In one example, the data associated with OID_DOT11_CREATE_MAC is defined as represented in Table 1 below.
OID_DOT11_CREATE_MAC may be employed to request that an entity (in the example of
In some embodiments, if the miniport has already created the maximum number of MAC entities it can support, it may respond with a failure indication, such as by calling an NDIS function to indicate that a failure has occurred.
Returning to
In act 328, native WiFi driver 205 requests that virtual WiFi filter driver 210 establish a connection. In the example shown, this is done using an OID (in particular, OID_DOT11_CONNECT_REQUEST). Virtual WiFi filter driver 210 then sends the OID to miniport driver 215, specifying that the connection should occur on port 0, which in this example represents the MAC context created in act 324. In some embodiments, a MAC context may be defined at least in part by a MAC address which is unique from MAC addresses associated with other ports associated with a respective wireless network, although other settings (e.g., data rate, channel, security algorithm employed, etc.) may also define a MAC context.
In act 332, virtual WiFi filter driver 210 and also specifies using OID_DOT11_PREFERRED_MAC that port 0 (specified for the connection) is the preferred MAC state. In this respect, in some embodiments, virtual WiFi filter driver 210 may specify a preferred order of MAC states to the miniport driver, so that the miniport driver may make decisions about which connection(s) to drop in case it can not sustain all connections simultaneously. The data associated with OID_DOT11_PREFERRED_MAC may, for example, be defined as represented below in Table 2.
OID_DOT11_PREFERRED_MAC may be used to establish MAC state preferences in descending order. For example, a preferred order list may include a most specified MAC state as a first entry and other, less preferred MAC states in descending order. This OID may be used to inform miniport driver 115 of the preferred order for previously created MAC entities, so that if miniport driver is forced to make decisions about dropping connections in case it can not sustain all of them simultaneously, it may use the preferred order to make these decisions.
The sequence of
In act 338, native WiFi driver 205 requests a second connection by again passing OID_DOT11_CONNECT_REQUEST to virtual miniport driver 220, which then passes the request to virtual WiFi filter driver 210 in act 340. In act 342, virtual WiFi filter driver 210 passes the OID to miniport driver 115, specifying that the connection should be on port p. Virtual WiFi filter driver 210 also passes OID_DOT11_PREFERRED_MAC to indicate that port p should thereafter be the preferred port to miniport driver 215 in act 344.
Thereafter, native WiFi driver 205 passes OID and data calls to virtual miniport driver 220 in act 346, which virtual miniport driver 220 then passes to virtual WiFi filter driver 210 in act 348. Virtual WiFi driver 210 then passes these OID and data call on port p to miniport driver 215, which then passes data and status indications via port p to virtual WiFi filter driver 210 in act 352. Virtual WiFi filter driver 210 then passes the data and status indications to virtual miniport driver 220 in act 354, which then passes the data and status indications to native WiFi driver 205 in act 356.
In act 358, a user command is received to disable virtualization. This causes wireless LAN service 300 to uninstall the virtual WiFi filter driver 210 in act 358. The virtual WiFi filter driver is then detached from the stack in act 360, and an instruction to delete the adapter is then issued to software bus driver 305, which deletes the adapter and indicates its removal in act 364. The sequence of
It should be appreciated that although the foregoing description relates to an interface which provides capabilities relating to a computer maintaining simultaneous connections on plural wireless networks using a single radio, embodiments of the invention are not so limited. For example, in accordance with some embodiments of the invention, an interface may be employed with multiple radios, accessible via one or more miniport drivers. Embodiments of the invention are not limited to being implemented with any particular radio and/or miniport driver configuration. In addition, embodiments of the invention need not be employed with a radio that includes a single transmitter and receiver. For example, embodiments of the invention might be employed with a radio having either no transmitter or no receiver, or with a radio having a different number of receivers than transmitters (e.g., a hybrid radio having multiple receivers and one transmitter). Embodiments of the invention are not limited to being implemented with any particular hardware and/or software configuration.
Section II below describes an example interface which may be employed in relation to software-enabled access point functionality.
An interface implemented between a computer's operating system and a miniport driver may enable the operating system to invoke functionality implemented by the miniport driver and/or radio to enable the computer to perform as a wireless access point. For example, a user may cause a request to be issued (e.g., using an application, a command line provided by the operating system, and/or any other suitable vehicle(s)) to enable the computer to function as a wireless access point, and the request may be passed from the computer's operating system via an interface implemented in accordance with embodiments of the invention to a miniport driver, causing functionality implemented by the miniport driver and/or radio hardware with which it communicates to be invoked. As with the embodiments of the invention described in Section I. above, an interface may, for example, provide a set of guidelines and rules allowing an operating system to issue calls to functions implemented by a miniport driver and/or radio hardware, and/or allowing the miniport driver and/or radio hardware to provide information to the operating system, using OIDs or any other suitable vehicle(s) and/or technique(s).
The configuration of
After receiving the OID from 802.11 LWF driver 505, miniport driver 115 may employ proprietary logic to cause radio hardware to perform a network scan. For example, radio hardware may be caused to disengage from any active communication then ongoing and listen to all channels for traffic, or to send out probes requesting a reply from surrounding access points or nodes, or to employ any other suitable technique(s) to perform a scan.
In act 622, after the network scan has been completed, miniport driver 115 transmits an indication of completion to 802.11 LWF driver 505. 802.11 LWF driver 505 passes the indication to wireless LAN service 510 in act 624, and in act 626, wireless LAN service 510 notifies wireless UI 615 that the scan has been completed.
Acts 628-638 represent optional actions to retrieve a list of identifiers for access points to which stations may establish a connection. In this example, a list of basic service set identifiers (BSSIDs) is retrieved. In act 628, wireless UI 525 issues a request to get a BSS ID list to wireless LAN service 510, which then passes the request to 802.11 LWF driver 505 in act 630. 802.11 LWF driver 505 then passes the request to miniport driver 215 in act 632 using an OID called OID_DOT11_ENUM_BSS_LIST.
Miniport driver 115 may then employ proprietary logic to retrieve a list of BSS IDs. After retrieval is performed, a list of visible network names and network configuration parameters is passed from miniport driver 115 to 802.11 LWF driver 505 in act 634, which then passes the list to wireless LAN service 510 in act 636. The list is then passed to wireless UI 525 in act 638. The sequence of
802.11 LWF driver 505 passes these commands, in the form of various OIDs, to miniport driver 115 in acts 720, 722 and 724. In the example shown, the 802.11 LWF driver 505 may employ OID_DOT11_CURRENT_OPERATION_MODE to instruct miniport driver 115 to set the interface to access point operational mode, OID_DOT11_START_AP_REQUEST to start access point functionality, and OIDs such as OID_DOT11_DESIRED_SSID_LIST and OID_DOT11_ENABLED_AUTHENTICATION_ALGORITHM to configure various access point settings.
The data associated with OID_DOT11_CURRENT_OPERATION_MODE may, for example, be defined as represented below in Table 3.
The data associated with OID_DOT11_START_AP_REQUEST may, for example, be defined as represented below in Table 4.
The data associated with OID_DOT11_DESIRED_SSID_LIST may, for example, be defined as represented below in Table 5.
The data associated with OID_DOT11_ENABLED_AUTHENTICATION_ALGORITHM may, for example, be defined as represented below in Table 6.
Upon starting access point functionality, miniport driver 115 may begin sending out beacon frames and probe responses, as indicated by the dotted line of act 726.
After access point functionality has been successfully established, 802.11 LWF driver 505 sends an indication to wireless LAN service 510 in act 728. 802.11 LWF driver 505 may also indicates to these components a media connected event in act 730. The wireless LAN service 510 then indicates to wireless UI 525 that access point functionality has been successfully started in act 732.
Process 900 then proceeds to act 910, wherein 802.11 LWF driver then creates a context for the association.
The process then proceeds to act 915, wherein a determination is made whether the miniport sends an association failure indication. If not, process 900 proceeds to act 920. If so, process 900 proceeds to act 945, wherein the context is destroyed, and process 900 completes.
In act 920, a determination is made whether miniport 115 sends an association request. In some embodiments, miniport 115 may send an association request using an OID named NDIS_STATUS_DOT11_INCOMING_ASSOC_REQUEST_RECEIVED.
The data associated with NDIS_STATUS_DOT11_INCOMING_ASSOC_REQUEST_RECEIVED may, for example, be defined as represented below in Table 9.
If it is determined in act 920 that miniport 115 does not send an association request, or if the request has timed out, process 900 proceeds to act 945, wherein the context is destroyed and process 900 completes. If so, the process proceeds to act 925, wherein it is determined whether the 802.11 LWF driver 505 accepts the association request. If not, 802.11 LWF driver 505 sends a failure decision to miniport 115 in act 927, and process 900 proceeds to act 945, wherein the context is destroyed. Process 900 then completes.
If 802.11 LWF driver 505 accepts the association request in act 925, process 900 proceeds to act 930, wherein 802.11 LWF driver 505 sends a success decision to miniport 115. In some embodiments, a success decision may be sent to miniport 115 using an OID named OID_DOT11_INCOMING_ASSOCIATION_DECISION. The data associated with OID_DOT11_INCOMING_ASSOCIATION_DECISION may, for example, be defined as represented below in Table 10.
Process 900 then proceeds to act 935, wherein it is determined whether miniport 115 sends an association completion. In some embodiments, miniport 115 may send an association completion using an OID named NDIS_STATUS_DOT11_INCOMING_ASSOC_COMPLETION. The data associated with NDIS_STATUS_DOT11_INCOMING_ASSOC_COMPLETION may, for example, be defined as represented below in Table 11.
If it is determined in act 935 that miniport 115 does not send an association completion, process 900 proceeds to act 945, wherein the context is destroyed. Process 900 then completes.
If it is determined in act 935 that miniport 115 sends an association completion, process 900 proceeds to act 940, wherein it is determined whether miniport 115 successfully completed the association. If not, process 900 proceeds to act 945, wherein the context is destroyed, and process 900 then completes. If it is determined in act 940 that miniport 115 successfully completed the association, process 900 proceeds to act 965, wherein 802.11 LWF driver 505 sends a “port up” notification to wireless LAN service 510.
Process 900 then proceeds to act 960, wherein a determination is made whether wireless LAN service 510 should control the port. If not, process 900 completes. If so, process 900 proceeds to act 955, wherein MSAM 520 performs port authorization. Process 900 then proceeds to act 950, wherein it is determined whether port authorization was successful. If so, process 900 completes. If not, the process proceeds to act 942, wherein the peer is dissociated, and then to act 945, wherein the peer context is destroyed. Process 900 then completes.
It should be appreciated that, although the examples above describe an interface that provides the capability to invoke functionality relating to either virtualization or software-enabled access point capabilities, embodiments of the invention may provide an interface having the ability to invoke both virtualization and software-enabled access point capabilities. In addition, it should be appreciated that an interface implemented in accordance with embodiments of the invention may include different or additional components than those described above. Further, the example component interactions described above in Sections I and II are merely exemplary, as components may interact in any suitable manner to provide the capability to invoke virtualization and/or software-enabled access point functionality. Embodiments of the invention are not limited to being implemented in any particular manner.
Various aspects of the systems and methods for practicing features of the invention may be implemented on one or more computer systems, such as the exemplary computer system 1000 shown in
The processor 1003 may also execute one or more computer programs to implement various functions. These computer programs may be written in any type of computer program language, including a procedural programming language, object-oriented programming language, macro language, or combination thereof. These computer programs may be stored in storage system 1006. Storage system 1006 may hold information on a volatile or non-volatile medium, and may be fixed or removable. Storage system 1006 is shown in greater detail in
Storage system 1006 typically includes a computer-readable and writable nonvolatile recording medium 1101, on which signals are stored that define a computer program or information to be used by the program. A medium may, for example, be a disk or flash memory. Typically, an operation, the processor 1003 causes data to be read from the nonvolatile recording medium 1101 into a volatile memory 1102 (e.g., a random access memory, or RAM) that allows for faster access to the information by the processor 1003 than does the medium 1101. The memory 1102 may be located in the storage system 1006, as shown in
The above-described embodiments of the present invention can be implemented in any of numerous ways. For example, the above-discussed functionality can be implemented using hardware, software or a combination thereof. When implemented in software, the software code can be executed on any suitable processor or collection of processors, whether provided in a single computer or distributed among multiple computers. In this respect, it should be appreciated that any component or collection of components that perform the functions described herein can be generically considered as one or more controllers that control the above-discussed functions. The one or more controllers can be implemented in numerous ways, such as with dedicated hardware, or by employing one or more processors that are programmed using microcode or software to perform the functions recited above. Where a controller stores or provides data for system operation, such data may be stored in a central repository, in a plurality of repositories, or a combination thereof.
Further, it should be appreciated that a (client or server) computer may be embodied in any of a number of forms, such as a rack-mounted computer, desktop computer, laptop computer, tablet computer, or other type of computer. Additionally, a (client or server) computer may be embedded in a device not generally regarded as a computer but with suitable processing capabilities, including a Personal Digital Assistant (PDA), a smart phone or any other suitable portable or fixed electronic device.
Also, a (client or server) computer may have one or more input and output devices. These devices can be used, among other things, to present a user interface. Examples of output devices that can be used to provide a user interface include printers or display screens for visual presentation of output and speakers or other sound generating devices for audible presentation of output. Examples of input devices that can be used for a user interface including keyboards, and pointing devices, such as mice, touch pads, and digitizing tables. As another example, a computer may receive input information through speech recognition or in other audible format.
Such computers may be interconnected by one or more networks in any suitable form, including as a local area network or a wide area network, such as an enterprise network or the Internet. Such networks may be based on any suitable technology and may operate according to any suitable protocol and may include wireless networks, wired networks or fiber optic networks. Also, the various methods or processes outlined herein may be coded as software that is executable on one or more processors that employ any one of a variety of operating systems or platforms.
Additionally, software may be written using any of a number of suitable programming languages and/or conventional programming or scripting tools, and also may be compiled as executable machine language code or intermediate code that is executed on a framework or virtual machine.
In this respect, the invention may be embodied as a storage medium (or multiple storage media) (e.g., a computer memory, one or more floppy disks, compact disks, optical disks, magnetic tapes, flash memories, circuit configurations in Field Programmable Gate Arrays or other semiconductor devices, or other computer storage media) encoded with one or more programs that, when executed on one or more computers or other processors, perform methods that implement the various embodiments of the invention discussed above. The storage medium or media can be transportable, such that the program or programs stored thereon can be loaded onto one or more different computers or other processors to implement various aspects of the present invention as discussed above.
The terms “program” or “software” are used herein in a generic sense to refer to any type of computer code or set of computer-executable instructions that can be employed to program a computer or other processor to implement various aspects of the present invention as discussed above. Additionally, it should be appreciated that according to one aspect of this embodiment, one or more computer programs that when executed perform methods of the present invention need not reside on a single computer or processor, but may be distributed in a modular fashion amongst a number of different computers or processors to implement various aspects of the present invention.
Computer-executable instructions may be provided in many forms, such as program modules, executed by one or more computers or other devices. Generally, program modules include routines, programs, objects, components, data structures, etc. that perform particular tasks or implement particular abstract data types. Typically the functionality of the program modules may be combined or distributed as desired in various embodiments.
Various aspects of the present invention may be used alone, in combination, or in a variety of arrangements not specifically discussed in the embodiments described in the foregoing and is therefore not limited in its application to the details and arrangement of components set forth in the foregoing description or illustrated in the drawings. For example, aspects described in one embodiment may be combined in any manner with aspects described in other embodiments.
Use of ordinal terms such as “first,” “second,” “third,” etc., in the claims to modify a claim element does not by itself connote any priority, precedence, or order of one claim element over another or the temporal order in which acts of a method are performed, but are used merely as labels to distinguish one claim element having a certain name from another element having a same name (but for use of the ordinal term) to distinguish the claim elements.
Also, the phraseology and terminology used herein is for the purpose of description and should not be regarded as limiting. The use of “including,” “comprising,” or “having,” “containing,” “involving,” and variations thereof herein, is meant to encompass the items listed thereafter and equivalents thereof as well as additional items.
Having thus described several aspects of at least one embodiment of this invention, it is to be appreciated various alterations, modifications, and improvements will readily occur to those skilled in the art. Such alterations, modifications, and improvements are intended to be part of this disclosure, and are intended to be within the spirit and scope of the invention. Accordingly, the foregoing description and drawings are by way of example only.