Contemporary operating systems are primarily designed for personal computer use, which tends to create complexity when attempting to couple additional computing machines to the personal computer. For example, for many computer users it is a difficult task to establish a connection between the user's personal computer such as a laptop and the user's Smartphone (herein considered a computing machine with mobile telephone capability), even when the two computing machines both run operating systems from the same operating system vendor.
Further, consider a user working with locally networked computers. Even thought the computers are networked, they are disaggregated with respect to resource sharing. For example, each computer system has its own mouse and keyboard, and in general the user cannot seamlessly use the mouse and keyboard of one computer with another computer, (e.g., without manually changing the wired or wireless connections).
This Summary is provided to introduce a selection of representative concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used in any way that would limit the scope of the claimed subject matter.
Briefly, various aspects of the subject matter described herein are directed towards a technology by which a human interface device (e.g., a keyboard, a mouse, or other pointing device) physically coupled to a first computing machine controls a second computing machine. The first computing machine transmits the human interface device data over a communication means to the second computing machine. The second computing machine receives the human interface device data, and simulates a physical connection of the human interface device to the second computing machine by providing the human interface device data to a virtual driver loaded on the second computing machine.
In one aspect, a human interface device physically coupled by a wired or wireless connection to a first computing machine generates data. The first computing machine routes the human interface device data to a second computing machine via a remote communications means. A virtual human interface device driver of the second computing machine receives the data thereby controlling operation of the second computing machine from the human interface device. The virtual human interface device driver may register with a virtual bus driver to receive the data.
In one aspect, a first computing machine is configured as a human interface device producer that generates human interface device data from a corresponding human interface device physically coupled thereto. A second computing machine that is not physically coupled to the human interface device is configured as a human interface device consumer. A virtual driver on the second computing machine that corresponds to the human interface device receives the human interface device data from the first computing machine. In one example, an aggregate device manager of the first computing machine determines that the human interface device is in a device producer state, and as a result, sends the human interface device data to the second computing machine. The producer state continues until receiving information indicating that the human interface device is no longer in that state, in which the human interface device data are sent to an operating system of the first computing machine.
Other advantages may become apparent from the following detailed description when taken in conjunction with the drawings.
The present invention is illustrated by way of example and not limited in the accompanying figures in which like reference numerals indicate similar elements and in which:
Various aspects of the technology described herein are generally directed towards an aggregate (e.g., personal) computing system, in which various computing machines are aggregated into what is generally a unified entity, instead of operating as separate parts. For example, a user can couple two or more computing machines into an aggregated computer system, and thereafter control one machine's connected pointing device (e.g., mouse) and/or keyboard for use on another machine. From the user's perspective, the control and device usage is a seamless and relatively easy computing experience.
While the technology is described with various examples and architectures, it is understood that the architectures and components thereof are only examples of possible implementations. As such, the present invention is not limited to any particular embodiments, aspects, concepts, structures, functionalities or examples described herein. Rather, any of the embodiments, aspects, concepts, structures, functionalities or examples described herein are non-limiting, and the present invention may be used various ways that provide benefits and advantages in computing in general.
Turning to
The network 104 may be any suitable wired or wireless network, or a combination of wired and wireless communication means, such as Ethernet and/or WiFi, and so forth. Remote computing machines and/or their hardware devices also may be coupled by other means, such as USB (Universal Serial Bus), serial, parallel, infrared, FireWire, Bluetooth® and the like; note that while some of these may not necessarily be considered “network” connections in a conventional sense, for purposes of simplicity in this description, any such connections can be considered as networked via the network 104.
Human interface devices such as a keyboard 108 and a mouse (or other pointing device) 110 serve as basic input devices for traditional computers, e.g., in general, a personal computer system includes at least one mouse and one keyboard. Some computer users may have two or more such computer systems in their home or office, each having their own mouse and keyboard. As will be understood, described herein a technology including various mechanisms that enable a computer user to use one computer's human interface device or devices (e.g., mouse and/or keyboard) to control other computers, so that, for example, as little as one mouse and/or keyboard is needed to control multiple computers.
In one example implementation, the remote mouse and keyboard system described herein operates in a peer-to-peer-based software environment. As described in the aforementioned U.S. patent application entitled “Aggregate Personal Computer System,” various computers that make up the aggregate computer system automatically detect other peers (computers) in a local network. Once discovered, a remote computer may be selected to be remotely controlled. If the control request is authorized by the remote computer, the output of the local mouse or keyboard is redirected to the remote computer thereby controlling that computer; note that when a mouse or keyboard is used to control a remote computer, its output is not sent to the local computer, until the remote control operating state is canceled by the user. Further note that mouse and/or keyboard data can be separate, or alternatively handled together; for example a user may select that only mouse data, or only keyboard data can be sent to remotely control another computing machine, or the user can select that both mouse and keyboard data be sent to remotely control the other computing machine. Thus, while the examples herein are directed towards keyboard and pointing device (e.g., mouse) data, it is understood that any human interface device may be used to control a remote computing machine.
As represented in
The user mode includes a user interface 220, an aggregate (personal computer) device manager 222, and an aggregate connection manager 224. The kernel mode includes a virtual bus driver 230, a virtual mouse (filter) driver 232 and a virtual keyboard (filter) driver 234. The kernel mode also includes a real mouse (filter) driver 236 and a real keyboard (filter) driver 238.
The user interface 220 provides interaction with users, and for example is in charge of displaying remote computers and their devices' information, and acquiring requests by a user to control a remote device or devices. The aggregate device manager 222 manages the available networked computers and devices, and in general acts as an intermediary between the user interface 220 and the connection manager 224. Additional details about an example user interface, aggregate device manager and connection manager are described in the aforementioned U.S. patent application entitled “Aggregate Personal Computer System,”
In general, the aggregate device manager 222 sends information about the computers and their devices to the user interface, acquires users' control requests from the user interface 220, and transfers them to the connection manager 224. Management operations may include discovering and registering of physical devices, local and remote device management, device Plug-and-Play management, device connection and data transfer between aggregate computing machines. Management also includes local device broadcasting, connection maintenance between aggregate computing machines, and management of filter driver controllers and virtual driver controllers.
Connectivity to each other aggregate computing machine in the aggregate computer system 100 is provided by the aggregate connection manager 224. For example, the connection manager is in charge of network communication between computers, comprising data transferred between computers including computer and device information, mouse and keyboard data, and control information. In one implementation, the aggregate connection manager 224 allows various types of connections (e.g., via connection modules) between the aggregate computing machines 102 and M1-Mn, to generally provide the same communication experience to other components, and in particular to the aggregate device manager 222, regardless of the actual connection type, e.g., via Ethernet, USB, Bluetooth, Wi-Fi, IrDA or any other connection mechanism.
In one example, the aggregate connection manager 224 further provides various functionalities for the aggregate device manager 222. Such functionalities include registering and management of connection modules, establishing and terminating of communication channels, broadcasting information for the local computing machine, discovering communication channels of the other remote aggregate computing machines, and connection and data transfer between communication channels.
In one example implementation, the aggregate connection manager 224 provides APIs for applications to communicate over a virtual named channel based on a client/server mode. Similar to named pipes, a virtual named channel is a named, duplex channel for communication between a channel server and one or more channel clients. The instances of a virtual named channel share the same pipe name, but each instance has its own buffers and handles, and provides a separate conduit for client-server communication. In general, the aggregate connection manager 224 hides the details of the underlying network including network type and network address, and provides a simple unified APIs for applications to communicate with each other, in an efficient way with respect to establishing a data connection, transferring data and checking network exceptions. For example, one aggregate connection manager includes channel management and host management in which each virtual named channel can be viewed as a server managed by a virtual named channel service. Channel instance management manages the mapping relationship between created virtual named channel instances and the underlying sockets. Data transferring controls how data is receive or sent over the virtual named channel, and exceptions and errors on virtual named channels are handled by an exception handling component. Host management hides the details of discovering available hosts in the network environment via host discovery, and resolves a network address of a host by host address resolving.
As represented in
More particularly, in
Note that the virtual bus driver 230 is provided for a virtual bus on which the virtual device drivers 232 and 234 are installed, whereby the aggregate device manager 222 communicates with virtual devices through the virtual bus driver 230. The virtual bus driver 230 controls data transfer between virtual devices and the aggregate device manager 222, controls the installation of virtual device drivers, controls virtual device registration to the operating system, and controls un-installation of the virtual devices from the operating system. The virtual bus driver 230 provides virtual device management and Plug-and-Play features of the aggregate computer system 100.
In general, the virtual mouse driver 232 and virtual keyboard driver 234 act as virtual devices. More particularly, when a local computer's mouse or keyboard is used to control a remote computer, a new instance of a virtual mouse or keyboard driver is plugged to the remote computer's virtual bus driver 230. As one result, for example, an additional mouse and/or keyboard appear in the remote computer's device manager. To this end, the virtual bus driver 230 communicates with the operating system and manages virtual devices. Each virtual driver 232 or 234 controls its respective virtual device and presents the virtual devices to the operating system as real devices, where, as set forth above.
Because a virtual bus does not control hardware, plug and play is simulated to make the virtual devices usable. To this end, a series of steps are performed to prepare a virtual device for use. As represented in
At step 404, the operating system (e.g., a PnP manager component thereof) sends a PnP event IRP to the virtual bus to query the updated device list. The virtual bus driver 230 responds with an array of the currently attached child devices, as represented by step 406. By comparing (step 408) the device list with a previous one, the operating system recognizes that a new device has been connected, whereby at step 410 the operating system sends a series of PnP events to the virtual bus to query for detailed device information of the newly added device.
The virtual bus driver 230 responds with the device information, as represented by step 412. According to the device information, at step 414 the operating system loads the appropriate virtual driver (e.g., 232 or 234) for the newly added device. At this time, the new device is ready for use, whereby the operating system is able to send data to or receive data from the virtual device like other local devices.
When a virtual device is removed, the operating system sends a series of PnP events to the virtual bus driver 230 and the device driver (e.g., 232 or 234). The virtual bus driver 230 responds by removing the PDO of the corresponding child device from the internal child list, and destroys the PDO.
As can be seen, sending PnP events is one primary way for an operating system to communicate with the virtual bus driver 230 and query information about enumerated devices. The bus driver 230 processes some of these events, and responds with requested data.
From the buffer, the aggregate device manager 222 gets the data, as represented in
If instead at step 504 the device that provided the data is currently in a state in which it is a device producer for a remote machine, the data is instead routed to the aggregate connection manager, which transfers it to the remote machine, where it ultimately will be provided to the appropriate virtual filter driver on that machine, thereby controlling the remote machine. Note that as used herein, the data may be routed in any format, such as compressed and/or encrypted, but is nevertheless received and converted to equivalent data and thus any such intermediate data processing is not considered herein as relevant.
The invention is operational with numerous other general purpose or special purpose computing system environments or configurations. Examples of well known computing systems, environments, and/or configurations that may be suitable for use with the invention include, but are not limited to: personal computers, server computers, hand-held or laptop devices, tablet devices, multiprocessor systems, microprocessor-based systems, set top boxes, programmable consumer electronics, network PCs, minicomputers, mainframe computers, distributed computing environments that include any of the above systems or devices, and the like.
The invention may be described in the general context of computer-executable instructions, such as program modules, being executed by a computer. Generally, program modules include routines, programs, objects, components, data structures, and so forth, which perform particular tasks or implement particular abstract data types. The invention may also be practiced in distributed computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules may be located in local and/or remote computer storage media including memory storage devices.
With reference to
The computer 710 typically includes a variety of computer-readable media. Computer-readable media can be any available media that can be accessed by the computer 710 and includes both volatile and nonvolatile media, and removable and non-removable media. By way of example, and not limitation, computer-readable media may comprise computer storage media and communication media. Computer storage media includes volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules or other data. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can accessed by the computer 710. Communication media typically embodies computer-readable instructions, data structures, program modules or other data in a modulated data signal such as a carrier wave or other transport mechanism and includes any information delivery media. The term “modulated data signal” means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, RF, infrared and other wireless media. Combinations of the any of the above should also be included within the scope of computer-readable media.
The system memory 730 includes computer storage media in the form of volatile and/or nonvolatile memory such as read only memory (ROM) 731 and random access memory (RAM) 732. A basic input/output system 733 (BIOS), containing the basic routines that help to transfer information between elements within computer 710, such as during start-up, is typically stored in ROM 731. RAM 732 typically contains data and/or program modules that are immediately accessible to and/or presently being operated on by processing unit 720. By way of example, and not limitation,
The computer 710 may also include other removable/non-removable, volatile/nonvolatile computer storage media. By way of example only,
The drives and their associated computer storage media, described above and illustrated in
The computer 710 may operate in a networked environment using logical connections to one or more remote computers, such as a remote computer 780. The remote computer 780 may be a personal computer, a server, a router, a network PC, a peer device or other common network node, and typically includes many or all of the elements described above relative to the computer 710, although only a memory storage device 781 has been illustrated in
When used in a LAN networking environment, the computer 710 is connected to the LAN 771 through a network interface or adapter 770. When used in a WAN networking environment, the computer 710 typically includes a modem 772 or other means for establishing communications over the WAN 773, such as the Internet. The modem 772, which may be internal or external, may be connected to the system bus 721 via the user input interface 760 or other appropriate mechanism. A wireless networking component 774 such as comprising an interface and antenna may be coupled through a suitable device such as an access point or peer computer to a WAN or LAN. In a networked environment, program modules depicted relative to the computer 710, or portions thereof, may be stored in the remote memory storage device. By way of example, and not limitation,
An auxiliary subsystem 799 (e.g., for auxiliary display of content) may be connected via the user interface 760 to allow data such as program content, system status and event notifications to be provided to the user, even if the main portions of the computer system are in a low power state. The auxiliary subsystem 799 may be connected to the modem 772 and/or network interface 770 to allow communication between these systems while the main processing unit 720 is in a low power state.
While the invention is susceptible to various modifications and alternative constructions, certain illustrated embodiments thereof are shown in the drawings and have been described above in detail. It should be understood, however, that there is no intention to limit the invention to the specific forms disclosed, but on the contrary, the intention is to cover all modifications, alternative constructions, and equivalents falling within the spirit and scope of the invention.
The present application is related to the copending U.S. patent application entitled “Aggregate Personal Computer System,” assigned to the assignee of the present application, filed concurrently herewith and hereby incorporated by reference.