WO2022066145A1 - Virtual machines of peripheral devices - Google Patents

Virtual machines of peripheral devices Download PDF

Info

Publication number
WO2022066145A1
WO2022066145A1 PCT/US2020/052020 US2020052020W WO2022066145A1 WO 2022066145 A1 WO2022066145 A1 WO 2022066145A1 US 2020052020 W US2020052020 W US 2020052020W WO 2022066145 A1 WO2022066145 A1 WO 2022066145A1
Authority
WO
WIPO (PCT)
Prior art keywords
peripheral device
instructions
virtual machine
examples
memory
Prior art date
Application number
PCT/US2020/052020
Other languages
French (fr)
Inventor
Cyrille Marie Henri Herve DE BREBISSON
Timothy James Wessman
Original Assignee
Hewlett-Packard Development Company, L.P.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hewlett-Packard Development Company, L.P. filed Critical Hewlett-Packard Development Company, L.P.
Priority to PCT/US2020/052020 priority Critical patent/WO2022066145A1/en
Publication of WO2022066145A1 publication Critical patent/WO2022066145A1/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45575Starting, stopping, suspending or resuming virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage

Definitions

  • Figure 1 is a flow diagram illustrating an example of a method for executing a virtual machine by a peripheral device
  • Figure 2 is a block diagram of an example of a peripheral device that may be used in running a virtual machine
  • Figure 3 is a block diagram illustrating an example of a computer- readable medium for performing emulation.
  • Figure 4 is a diagram illustrating an example of a peripheral device.
  • An electronic device may be a device that includes electronic circuitry.
  • an electronic device may include integrated circuitry (e.g., transistors, digital logic, semiconductor technology, etc.).
  • Examples of electronic devices include computing devices, laptop computers, desktop computers, smartphones, tablet devices, wireless communication devices, game consoles, smart appliances, vehicles with electronic components, aircraft, drones, robots, smart appliances, tracking devices, peripheral devices, etc.
  • a peripheral device is an electronic device to be linked to a host device and/or to provide auxiliary functionality relative to the host device.
  • a peripheral device may be an accessory to a host device. Examples of peripheral devices include mice, keyboards, headsets, cameras, monitors, stylus pads, microphones, controllers, remote controls, etc.
  • a host device is a computing device that allows linking with a peripheral device or devices.
  • a host device may execute an operating system (OS). Examples of host devices include desktop computers, laptop computers, servers, smartphones, tablet devices, etc.
  • OS operating system
  • the term “peripheral device” may exclude host devices.
  • a peripheral device may have and/or utilize a resource or resources that are able to be allocated by an OS executing on the host device.
  • an OS may allocate processor and/or memory resources to be utilized by a peripheral device.
  • the OS may allocate processing and/or memory resources to produce images (e.g., video) for use by a peripheral device (e.g., monitor), to produce an audio signal for use by a peripheral device (e.g., headset), to track a mouse input (e.g., movement and/or clicks), and/or to utilize a keyboard input (e.g., button presses), etc.
  • the OS may execute a driver or drivers to communicate with and/or operate a peripheral device (e.g., to receive and/or process peripheral device input).
  • a peripheral device may link to a host device with a wired or wireless connection.
  • a link is a channel of communication.
  • a link may allow a peripheral device to transmit a signal to a host device and/or receive a signal from a host device.
  • a link may enable unidirectional or bidirectional communication of a signal, information, and/or data between devices.
  • a link may be established with a wired and/or wireless connection (e.g., cable, radio frequency (RF) channel, etc.) between devices.
  • RF radio frequency
  • a link may be established using a protocol or protocols and/or interfacing hardware (e.g., port(s), transceiver(s), etc.) on the peripheral device and/or host device.
  • a peripheral device may be linked to a host device via a Universal Serial Bus (USB), Lightning, High Definition Multimedia Interface (HDMI), DisplayPort, and/or Bluetooth, etc., connection.
  • a peripheral device may provide input to the host device.
  • a peripheral device may provide detected input (e.g., directional movement, click events, button events, button presses, motion input, taps, contact locations, audio, etc.).
  • a peripheral device may present host device outputs.
  • a peripheral device may output images (e.g., graphics, video, etc.) provided by a host device, audio provided by a host device, etc.
  • peripheral devices may be hardware devices that include processing and/or memory resources.
  • peripheral devices may include fewer processing and/or memory resources than a host device.
  • a peripheral device may include a processor with a smaller word length, smaller register length, lower clock frequency, and/or fewer transistors, etc., relative to a processor of a host device.
  • a peripheral device may include a memory with a smaller capacity and/or clock frequency, etc., relative to a memory of a host device.
  • Some examples of peripheral devices may include an advanced reduced instruction set computer (RISC) machine (ARM) processor.
  • peripheral devices may include memory (e.g., read-only memory (ROM)) that includes base hardware instructions.
  • ROM read-only memory
  • Base hardware instructions may be instructions to perform hardware operations on the peripheral device.
  • base hardware instructions may provide for basic hardware operation of a peripheral.
  • Examples of base hardware instructions may include firmware and/or basic input and output system (BIOS) instructions.
  • BIOS basic input and output system
  • Base hardware instructions may be stored in ROM in some examples.
  • base hardware instructions may be modifiable. Modification of base hardware instructions may occur rarely or may be avoided, as an error in base hardware instructions may cause peripheral device malfunction and/or may render a peripheral device inoperable in some cases.
  • a feature list is created ahead of product manufacture.
  • the features are implemented directly in the base hardware instructions (e.g., firmware) and triggered from a host device (e.g., personal computer).
  • the feature set may be different, the development and implementation may be redone, and/or feature addition may not be easily accomplished once the peripheral devices are released due to the risk of modifying base hardware instructions.
  • peripheral devices that provide increased functionality.
  • peripheral devices that provide enhanced functionality may be useful for gaming and other applications.
  • Some examples of the techniques described herein may provide a programming language or languages that may be useful for many kinds of peripheral devices.
  • a virtual machine may be executed on a peripheral device, which may enable running the programming language.
  • a virtual machine is an emulated computing environment.
  • virtual machine instructions may be executed to emulate operation of a computing resource or resources (e.g., processor, memory, computing environment, etc.).
  • peripheral device features may be changed and/or modified after product release without modifying the base hardware instructions (e.g., without updating firmware).
  • Some of the techniques described herein may be agnostic to peripheral device type. For instance, one programming language may be utilized for a variety of peripheral devices (e.g., mice, keyboards, headsets, controllers, etc.), which may reduce development costs.
  • Figure 1 is a flow diagram illustrating an example of a method 100 for executing a virtual machine by a peripheral device.
  • the method 100 and/or a method 100 element or elements may be performed by a peripheral device.
  • the peripheral device may be a mouse, a keyboard, a headset, a monitor, etc.
  • the method 100 may be performed by the peripheral device 202 described in relation to Figure 2.
  • the peripheral device may execute 102 a virtual machine.
  • the peripheral device may include a processor and virtual machine instructions stored in memory.
  • the peripheral device may execute the virtual machine instructions to instantiate and/or execute the virtual machine.
  • the base hardware instructions (e.g., firmware) of the peripheral device may include the virtual machine instructions.
  • the virtual machine may be an emulated computing environment.
  • the processor of the peripheral device may create an emulated computing environment by executing the virtual machine instructions.
  • the virtual machine may operate within a limited memory space of the peripheral device.
  • the virtual machine may be limited to accessing (e.g., reading from and/or writing to) a limited address range or ranges of the memory of the peripheral device.
  • the virtual machine may not access (e.g., may not have reference to) a portion of memory that includes base hardware instructions for the peripheral device.
  • the virtual machine may include virtualized and/or emulated hardware.
  • the virtual machine may include an emulated and/or virtualized processor.
  • the base hardware instructions of the peripheral device may be executed to interface the processor of the peripheral device with the emulated processor of the virtual machine.
  • executing an OS on a host device or another device, for instance
  • an OS may be executed with actual hardware (e.g., actual processor and/or actual memory).
  • a virtual machine may be executed with virtualized hardware (e.g., a virtualized processor and/or virtual memory).
  • a set of instructions may be executed to manage a virtual machine and/or may interface the virtual machine with actual hardware.
  • a virtual machine may be isolated from (e.g., may not have direct access to) actual hardware (e.g., processor and/or memory).
  • an OS may have access to actual hardware.
  • the peripheral device may execute 104, by the virtual machine of the peripheral device, programmatic instructions from a computing device.
  • the virtual machine may utilize a virtualized processor of the virtual machine to execute the programmatic instructions.
  • the virtual machine e.g., virtualized processor
  • Programmatic instructions are instructions for performing an operation or operations.
  • the virtual machine may utilize virtual memory to execute the programmatic instructions.
  • the virtual machine e.g., virtual memory
  • the programmatic instructions and/or a portion or portions of the programmatic instructions may be loaded into virtual memory.
  • the programmatic instructions are instructions of a Turing-complete programming language.
  • the virtual machine may execute a Turing-complete programming language.
  • a Turing-complete programming language is a programming language that is capable of simulating a Turing machine (e.g., any Turing machine).
  • a Turing-complete programming language may have a conditional branching capability.
  • a Turing-complete programming language may be capable of handling “if” statements and/or “goto” statements.
  • the programmatic instructions may include a logical conditional instruction. This may be in contrast to some macros, which may be incapable of handling logical conditional instructions.
  • a Turing-complete programming language may be capable of performing multiple loops (e.g., an arbitrary or indefinite quantity of loops).
  • the programmatic instructions may cause the processor to perform programmatic loops on the peripheral device in some cases.
  • a Turning-complete programming language may not guarantee finite looping and/or may allow infinite looping.
  • Turing-complete programming language may be deployed on a peripheral device or devices (e.g., mice, keyboards, headsets, monitors, etc.).
  • the programming language may allow creation and/or addition of features and/or operations on the peripheral devices without further development of base hardware instructions (e.g., firmware).
  • a program may be created on a computing device (e.g., host device), which may be sent to the peripheral device for execution.
  • the program may be created and/or compiled on a computing device or devices to produce the programmatic instructions.
  • the programmatic instructions may be sent to a peripheral device and executed by a virtual machine running on the peripheral device.
  • Some of the techniques described herein may be useful by simplifying feature development for peripheral devices. Some of the techniques described herein may allow many peripheral devices to share a new feature and/or operation without updating base hardware instructions (e.g., without updating firmware). For example, some of the techniques may provide flexibility regarding peripheral device features and/or operations, as a feature or operation may be changed through adding and/or modifying the programmatic instructions, even after a product is released. In some examples of the techniques described herein, the programmatic instructions may add and/or modify a functionality of the peripheral device without changing base hardware instructions.
  • the Turing- complete programming language may allow for performing math operations (e.g., addition, subtraction, multiplication, division, trigonometric functions, exponential functions, roots, integration, differentiation, etc.) and/or for simulation of peripheral device actions (e.g., mouse movement, mouse clicks, virtual keyboard buttons, triggering of internal peripheral device functions, etc.).
  • math operations e.g., addition, subtraction, multiplication, division, trigonometric functions, exponential functions, roots, integration, differentiation, etc.
  • peripheral device actions e.g., mouse movement, mouse clicks, virtual keyboard buttons, triggering of internal peripheral device functions, etc.
  • the programming language e.g., programmatic instructions
  • the programmatic instructions may stop the mouse from sending movements to the host device until released, but may monitor mouse movements and execute an action or actions (e.g., user selectable actions) based on the movements (e.g., up, down, right, and/or left moves). For instance, the programmatic instructions may, upon detection of a button press, suspend sending mouse movements to a host device while a pattern or gesture is captured. When the mouse recognizes the pattern or gesture, the mouse may send a corresponding command (e.g., copy command, paste command, close window command, undo, redo, type a number, write a word, draw a picture, input a series of mouse movements and/or clicks, etc.).
  • a peripheral device e.g., mouse
  • the programmatic instructions may cause a mouse to send an ALT+TAB command to the host and then send right or left button signals when the mouse moves right or left, which may allow selection of an application on the host.
  • the programmatic instructions may cause a mouse to draw a fractal in a drawing application, programmatically simulating mouse movements and clicks.
  • the programmatic instructions may cause a mouse to calculate and send prime numbers (e.g., simulate button presses that indicate prime numbers) to the host.
  • prime numbers e.g., simulate button presses that indicate prime numbers
  • the peripheral device may receive the programmatic instructions from the computing device.
  • the peripheral device may be linked to (e.g., in communication with, connected to, and/or coupled to, etc.) the computing device.
  • the link may be a wired or wireless link (e.g., USB, Lightning, HDMI, Bluetooth, Wi-Fi, etc.).
  • the peripheral device may receive the programmatic instructions via the link.
  • the programmatic instructions may be compiled by a computing device (e.g., a host device that is linked to the peripheral device or another device).
  • the programmatic instruction may be compiled by a computing device (e.g., host device) that is linked to the peripheral device.
  • the programmatic instructions may be developed on the computing device.
  • the computing device may receive development code (e.g., high-level programming language code).
  • the computing device may receive the development code from a peripheral device (e.g., the peripheral device may detect the programming code being entered by a user and may send the programming code to the computing device).
  • the computing device may compile the programming code to produce the programmatic instructions.
  • the computing device may translate (e.g., optimize) the programming code into machine language (e.g., may optimize the programming code for reducing power consumption and/or memory consumption).
  • the programming language and/or programmatic instructions may not be a scripting language (where a scripting language is interpreted rather than compiled, for instance).
  • the virtual machine may be executed at a virtualization layer that is different from a base hardware instruction (e.g., firmware) layer of the peripheral device.
  • the virtual machine may be layered on top of the base hardware instruction layer.
  • the programmatic instructions may be expressed and/or indicated in a programming language that is different from a programming language of the base hardware instructions (e.g., firmware).
  • the virtual machine is executed in ARM code.
  • the base hardware instructions may include ARM code to instantiate the virtual machine.
  • the virtual machine may be executed in ARM code, while the programmatic instructions may not be expressed and/or indicated in ARM code.
  • FIG. 2 is a block diagram of an example of a peripheral device 202 that may be used in running a virtual machine.
  • the peripheral device 202 include a mouse, keyboard, headset, camera, monitor, stylus pad, microphone, controller, remote control, etc.
  • the peripheral device 202 may include a peripheral device processor 204, a peripheral device memory 206, and/or a communication interface 208.
  • the peripheral device 202 may include additional components (not shown) and/or some of the components described herein may be removed and/or modified without departing from the scope of the techniques described herein.
  • the peripheral device 202 includes a communication interface 208 to communicate with the host device 214.
  • the peripheral device 202 may be in communication with (e.g., coupled to, have a communication link with) a host device 214.
  • the communication interface 208 may be hardware (e.g., port(s), controller(s), circuitry(ies), transceiver(s), antenna(s), etc.) that enables a wired (e.g., USB, HDMI, DisplayPort, Lightning, Ethernet, etc.) and/or wireless (e.g., Bluetooth, Wi-Fi, etc.) link with the host device 214.
  • wired e.g., USB, HDMI, DisplayPort, Lightning, Ethernet, etc.
  • wireless e.g., Bluetooth, Wi-Fi, etc.
  • peripheral device 202 may include another component or components (not shown in Figure 2).
  • the peripheral device 202 may include button(s), scroll wheel(s), screen(s), touch pad(s), pressure sensor(s), motion sensor(s), lights (e.g., light-emitting diode(s)), and/or optical sensor(s), etc.
  • the peripheral device 202 may include an input device or devices and/or an output device or device(s).
  • the peripheral device 202 may detect user input and/or may provide detected input to the host device 214.
  • the peripheral device processor 204 may be any of a central processing unit (CPU), a semiconductor-based microprocessor, field- programmable gate array (FPGA), an application-specific integrated circuit (ASIC), ARM, and/or other hardware device suitable for retrieval and execution of instructions stored in the peripheral device memory 206.
  • the peripheral device processor 204 may be coupled to the peripheral device memory 206.
  • the peripheral device processor 204 may fetch, decode, and/or execute instructions (e.g., base hardware instructions 210 and/or programmatic instructions 212) stored in the peripheral device memory 206.
  • the peripheral device processor 204 may include an electronic circuit or circuits that include electronic components for performing a function or functions of the instructions (e.g., base hardware instructions 210 and/or programmatic instructions 212).
  • the peripheral device processor 204 may perform one, some, or all of the functions, operations, elements, methods, etc., described in relation to one, some, or all of Figures 1- 4.
  • the peripheral device memory 206 may be any electronic, magnetic, optical, or other physical storage device that contains or stores electronic information (e.g., executable instructions, executable code, and/or data).
  • the peripheral device memory 206 may be, for example, read-only memory (ROM), random-access memory (RAM), electrically erasable programmable read-only memory (EEPROM), and/or a storage device, etc.
  • the peripheral device memory 206 may include volatile and/or non-volatile memory, such as dynamic random-access memory (DRAM), EEPROM, magnetoresistive random-access memory (MRAM), phase change RAM (PCRAM), memristor, flash memory, and/or ROM, etc.
  • DRAM dynamic random-access memory
  • MRAM magnetoresistive random-access memory
  • PCRAM phase change RAM
  • memristor flash memory
  • flash memory and/or ROM, etc.
  • the peripheral device memory 206 may be a non-transitory tangible machine-readable storage medium, where the term “non-transitory” does not encompass transitory propagating signals.
  • the peripheral device memory 206 may include multiple devices (e.g., a ROM memory device and a RAM memory device).
  • the peripheral device memory 206 may store base hardware instructions 210 and/or programmatic instructions 212.
  • the peripheral device memory 206 may be ROM.
  • the peripheral device memory 206 may include separate memory devices.
  • the peripheral device memory 206 may include a ROM chip to store the base hardware instructions 210 and/or a RAM chip for loading data and/or instructions.
  • the programmatic instructions 212 may be stored in ROM.
  • the programmatic instructions 212 may be stored in ROM to preserve the programmatic instructions 212 through powering down and powering up (e.g., power cycling).
  • the programmatic instructions 212 may not be stored in ROM.
  • the programmatic instructions 212 may be loaded into RAM.
  • the peripheral device processor 204 may run the base hardware instructions 210 to operate the peripheral device 202. For instance, the peripheral device processor 204 may run the base hardware instructions to perform basic hardware operations (e.g., activate or boot, detect input, operate the communication interface, etc.) on the peripheral device 202. In some examples, the peripheral device processor 204 may run the base hardware instructions 210 to instantiate and/or the run a virtual machine.
  • basic hardware operations e.g., activate or boot, detect input, operate the communication interface, etc.
  • the peripheral device processor 204 may run the base hardware instructions 210 to instantiate and/or the run a virtual machine.
  • the peripheral device processor 204 may run the programmatic instructions 212 from the host device 214 in a virtual machine.
  • the peripheral device 202 e.g., communication interface 208 may receive the programmatic instructions 212 from the host device 214.
  • the peripheral device memory 206 may store the programmatic instructions 212 received from the host device 214.
  • the programmatic instructions 212 may provide an operation that is (or operations that are) unavailable in the base hardware instructions 210.
  • the peripheral device memory 206 may store the programmatic instructions 212 without modifying the base hardware instructions 210.
  • the host device 214 may be a computing device, such as a personal computer, a server computer, a smartphone, a tablet computer, etc.
  • the host device 214 may include a host processor 216, a host memory 218, and/or a communication interface 222.
  • the host device 214 may be in communication with (e.g., coupled to, have a communication link with) the peripheral device 202.
  • the host device 214 may include additional components (not shown) and/or some of the components described herein may be removed and/or modified without departing from the scope of the techniques described herein.
  • the host processor 216 may be any of a central processing unit (CPU), a semiconductor-based microprocessor, graphics processing unit (GPU), field-programmable gate array (FPGA), an application-specific integrated circuit (ASIC), and/or other hardware device suitable for retrieval and execution of instructions stored in the host memory 218.
  • the host processor 216 may fetch, decode, and/or execute instructions (e.g., development instructions 220) stored in the host memory 218.
  • the host processor 216 may include an electronic circuit or circuits that include electronic components for performing a function or functions of the instructions (e.g., development instructions 220).
  • the host processor 216 may perform one, some, or all of the functions, operations, elements, methods, etc., of a host device described in relation to one, some, or all of Figures 1-4.
  • the host memory 218 may be any electronic, magnetic, optical, or other physical storage device that contains or stores electronic information (e.g., executable instructions, executable code, and/or data).
  • the host memory 218 may be, for example, RAM, EEPROM, a storage device, an optical disc, and the like.
  • the host memory 218 may be volatile and/or nonvolatile memory, such as DRAM, EEPROM, MRAM, PCRAM, memristor, flash memory, and the like.
  • the host memory 218 may be a non- transitory tangible machine-readable storage medium, where the term “non- transitory” does not encompass transitory propagating signals.
  • the host memory 218 may include multiple devices (e.g., a RAM card and a solid-state drive (SSD)).
  • the peripheral device processor 204 may have lesser processing capability and/or resources than the host processor 216.
  • the peripheral device processor 204 may be an 8-bit processor, while the host processor 216 may be a 64-bit processor in some cases.
  • the peripheral device processor 204 may execute with a lower clock speed (e.g., 30 megahertz) than the host processor 216 (e.g., over 1 gigahertz (GHz)).
  • the peripheral device memory 206 may have fewer resources (e.g., a smaller capacity) than the host memory 218.
  • the peripheral device memory 206 may have 64 kilobytes (kB) of memory space, while the host memory 218 may have gigabytes (GB) (e.g., 8 GB, 16 GB, 32 GB, etc.).
  • the host device 214 includes a communication interface 222 to communicate with the peripheral device 202.
  • the host device 214 may be in communication with (e.g., coupled to, have a communication link with) the peripheral device 202.
  • the communication interface 222 may be hardware (e.g., port(s), controller(s), circuitry(ies), transceiver(s), antenna(s), etc.) that enables a wired (e.g., USB, HDMI, DisplayPort, Lightning, Ethernet, etc.) and/or wireless (e.g., Bluetooth, Wi-Fi, etc.) link with the peripheral device 202.
  • wired e.g., USB, HDMI, DisplayPort, Lightning, Ethernet, etc.
  • wireless e.g., Bluetooth, Wi-Fi, etc.
  • the host memory 218 may store development instructions 220.
  • the host processor 216 may execute the development instructions 220 to develop programmatic instructions 212, which may be sent to the peripheral device 202 for execution.
  • the development instructions 220 may be executed to provide a development environment (e.g., produce an interface into which programming code or development code may be entered).
  • the host device 214 may receive programming code or development code from user input (via the peripheral device 202 and/or another peripheral device, for example) and/or from another device (e.g., network device, server, etc.).
  • the development instructions 220 may be executed to compile programming code or development code to produce the programmatic instructions 212.
  • the compiled programmatic instructions 212 may be sent to the peripheral device 202 via the communication interface 222.
  • Figure 3 is a block diagram illustrating an example of a computer- readable medium 324 for performing emulation.
  • the computer-readable medium is a non-transitory, tangible computer-readable medium 324.
  • the computer-readable medium 324 may be, for example, ROM, RAM, EEPROM, and/or a storage device, etc.
  • the computer-readable medium 324 may be volatile and/or non-volatile memory, such as ROM, DRAM, EEPROM, MRAM, PCRAM, memristor, and/or flash memory, etc.
  • the peripheral device memory 206 described in relation to Figure 2 may be an example of the computer-readable medium 324 described in relation to Figure 3.
  • the computer-readable medium 324 may include code (e.g., data and/or instructions).
  • the computer-readable medium 324 may include virtual machine instructions 326 and/or programmatic instructions 328.
  • the virtual machine instructions 326 may include code to cause a processor of a peripheral device to instantiate a virtual machine.
  • instantiating a virtual machine may be performed as described in relation to Figure 1 and/or Figure 2.
  • a processor of a peripheral device may execute the virtual machine instructions 326 to instantiate a computing environment on a peripheral device.
  • the programmatic instructions 328 are code to cause the processor to execute the programmatic instructions 328 compiled by a host device in the virtual machine. In some examples, executing the programmatic instructions 328 may be accomplished as described in relation to Figure 1 and/or Figure 2. For example, the programmatic instructions 328 may cause the processor to output a simulated mouse movement. In some examples, the programmatic instructions 328 may cause the processor to perform multiple programmatic loops on the peripheral device.
  • FIG 4 is a diagram illustrating an example of a peripheral device 430.
  • the peripheral device 430 may include a processor 440, base hardware instructions 438, and programmatic instructions 434.
  • the peripheral device 430, the processor 440, the base hardware instructions 438, and/or the programmatic instructions 434 may be examples of a corresponding element or elements described in relation to Figure 1 , Figure 2, and/or Figure 3.
  • the base hardware instructions 438 may be executed by the processor 440 at a base hardware instruction layer 436.
  • the base hardware instruction layer 436 may be a functional layer at which the peripheral device 430 hardware (e.g., all of the peripheral device hardware) is accessible relative to the base hardware instructions 438.
  • the processor 440 may execute the base hardware instructions 438 to access any memory space and/or to detect any event (e.g., button press, sensor input, etc.) on the peripheral device 430.
  • the programmatic instructions 434 may be executed by the processor 440 at a virtualization layer 432.
  • the virtualization layer 432 may be a functional layer at which access to an aspect or aspects of the peripheral device 430 may be limited.
  • the programmatic instructions 434 may not have access to change a portion of memory in which the base hardware instructions 438 are stored.
  • the virtualization layer 432 may provide a computing environment.
  • the computing environment may be provided via a virtual machine.
  • the virtual machine may implement a Turing-complete programming language.
  • the virtual machine e.g., a virtualized processor
  • the virtual machine may execute the programmatic instructions 434.
  • the programmatic instructions 434 may be modified and/or operated without modifying the base hardware instructions 438. Accordingly, the programmatic instructions 434 may modify and/or add operation(s), function(s), and/or behavior(s) that are not included in the base hardware instructions 438.
  • the term “and/or” may mean an item or items.
  • the phrase “A, B, and/or C” may mean any of: A (without B and C), B (without A and C), C (without A and B), A and B (but not C), B and C (but not A), A and C (but not B), or all of A, B, and C.

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

Examples of methods for peripheral device virtual machines are described herein. In some examples, a method includes executing a virtual machine. In some examples, the virtual machine is executed by a peripheral device. In some examples, the method includes executing, by the virtual machine of the peripheral device, programmatic instructions from a computing device.

Description

VIRTUAL MACHINES OF PERIPHERAL DEVICES
BACKGROUND
[0001] Electronic technology has advanced to become virtually ubiquitous in society and has been used for many activities in society. For example, electronic devices are used to perform a variety of tasks, including work activities, communication, research, and entertainment. Different varieties of electronic circuitry may be utilized to provide different varieties of electronic technology.
BRIEF DESCRIPTION OF THE DRAWINGS
[0002] Figure 1 is a flow diagram illustrating an example of a method for executing a virtual machine by a peripheral device;
[0003] Figure 2 is a block diagram of an example of a peripheral device that may be used in running a virtual machine;
[0004] Figure 3 is a block diagram illustrating an example of a computer- readable medium for performing emulation; and
[0005] Figure 4 is a diagram illustrating an example of a peripheral device.
DETAILED DESCRIPTION
[0006] An electronic device may be a device that includes electronic circuitry. For instance, an electronic device may include integrated circuitry (e.g., transistors, digital logic, semiconductor technology, etc.). Examples of electronic devices include computing devices, laptop computers, desktop computers, smartphones, tablet devices, wireless communication devices, game consoles, smart appliances, vehicles with electronic components, aircraft, drones, robots, smart appliances, tracking devices, peripheral devices, etc.
[0007] A peripheral device is an electronic device to be linked to a host device and/or to provide auxiliary functionality relative to the host device. In some examples, a peripheral device may be an accessory to a host device. Examples of peripheral devices include mice, keyboards, headsets, cameras, monitors, stylus pads, microphones, controllers, remote controls, etc. A host device is a computing device that allows linking with a peripheral device or devices. In some examples, a host device may execute an operating system (OS). Examples of host devices include desktop computers, laptop computers, servers, smartphones, tablet devices, etc. In some examples, the term “peripheral device” may exclude host devices. In some examples, a peripheral device may have and/or utilize a resource or resources that are able to be allocated by an OS executing on the host device. For instance, an OS may allocate processor and/or memory resources to be utilized by a peripheral device. For example, the OS may allocate processing and/or memory resources to produce images (e.g., video) for use by a peripheral device (e.g., monitor), to produce an audio signal for use by a peripheral device (e.g., headset), to track a mouse input (e.g., movement and/or clicks), and/or to utilize a keyboard input (e.g., button presses), etc. In some examples, the OS may execute a driver or drivers to communicate with and/or operate a peripheral device (e.g., to receive and/or process peripheral device input).
[0008] In some examples, a peripheral device may link to a host device with a wired or wireless connection. A link is a channel of communication. For example, a link may allow a peripheral device to transmit a signal to a host device and/or receive a signal from a host device. For instance, a link may enable unidirectional or bidirectional communication of a signal, information, and/or data between devices. In some examples, a link may be established with a wired and/or wireless connection (e.g., cable, radio frequency (RF) channel, etc.) between devices. In some examples, a link may be established using a protocol or protocols and/or interfacing hardware (e.g., port(s), transceiver(s), etc.) on the peripheral device and/or host device. For example, a peripheral device may be linked to a host device via a Universal Serial Bus (USB), Lightning, High Definition Multimedia Interface (HDMI), DisplayPort, and/or Bluetooth, etc., connection. In some examples, a peripheral device may provide input to the host device. For instance, a peripheral device may provide detected input (e.g., directional movement, click events, button events, button presses, motion input, taps, contact locations, audio, etc.). In some examples, a peripheral device may present host device outputs. For instance, a peripheral device may output images (e.g., graphics, video, etc.) provided by a host device, audio provided by a host device, etc.
[0009] In some examples, peripheral devices may be hardware devices that include processing and/or memory resources. For instance, peripheral devices may include fewer processing and/or memory resources than a host device. For example, a peripheral device may include a processor with a smaller word length, smaller register length, lower clock frequency, and/or fewer transistors, etc., relative to a processor of a host device. A peripheral device may include a memory with a smaller capacity and/or clock frequency, etc., relative to a memory of a host device. Some examples of peripheral devices may include an advanced reduced instruction set computer (RISC) machine (ARM) processor. In some examples, peripheral devices may include memory (e.g., read-only memory (ROM)) that includes base hardware instructions. Base hardware instructions may be instructions to perform hardware operations on the peripheral device. For instance, base hardware instructions may provide for basic hardware operation of a peripheral. Examples of base hardware instructions may include firmware and/or basic input and output system (BIOS) instructions. Base hardware instructions may be stored in ROM in some examples. In some examples, base hardware instructions may be modifiable. Modification of base hardware instructions may occur rarely or may be avoided, as an error in base hardware instructions may cause peripheral device malfunction and/or may render a peripheral device inoperable in some cases.
[0010] In some approaches to develop peripheral devices, a feature list is created ahead of product manufacture. In these approaches, the features are implemented directly in the base hardware instructions (e.g., firmware) and triggered from a host device (e.g., personal computer). In these approaches, for each new peripheral device, the feature set may be different, the development and implementation may be redone, and/or feature addition may not be easily accomplished once the peripheral devices are released due to the risk of modifying base hardware instructions.
[0011] There is a demand for peripheral devices that provide increased functionality. For example, peripheral devices that provide enhanced functionality may be useful for gaming and other applications. Some examples of the techniques described herein may provide a programming language or languages that may be useful for many kinds of peripheral devices. For example, a virtual machine may be executed on a peripheral device, which may enable running the programming language. A virtual machine is an emulated computing environment. For example, virtual machine instructions may be executed to emulate operation of a computing resource or resources (e.g., processor, memory, computing environment, etc.).
[0012] Some of the techniques described herein may provide for a current feature set while allowing functionality to be added to a peripheral device. Accordingly, peripheral device features may be changed and/or modified after product release without modifying the base hardware instructions (e.g., without updating firmware). Some of the techniques described herein may be agnostic to peripheral device type. For instance, one programming language may be utilized for a variety of peripheral devices (e.g., mice, keyboards, headsets, controllers, etc.), which may reduce development costs.
[0013] Throughout the drawings, identical or similar reference numbers may or may not designate similar elements or may or may not designate identical elements. When an element is referred to without a reference number, this may refer to the element generally, and may or may not refer to the element without limitation to any particular Figure. The figures may or may not be to scale, and the size of some parts may be exaggerated to more clearly illustrate the example shown. Moreover, the drawings provide examples in accordance with the description; however, the description is not limited to the examples provided in the drawings. [0014] Figure 1 is a flow diagram illustrating an example of a method 100 for executing a virtual machine by a peripheral device. The method 100 and/or a method 100 element or elements may be performed by a peripheral device. For instance, the peripheral device may be a mouse, a keyboard, a headset, a monitor, etc. In some examples, the method 100 may be performed by the peripheral device 202 described in relation to Figure 2.
[0015] The peripheral device may execute 102 a virtual machine. For example, the peripheral device may include a processor and virtual machine instructions stored in memory. The peripheral device may execute the virtual machine instructions to instantiate and/or execute the virtual machine. In some examples, the base hardware instructions (e.g., firmware) of the peripheral device may include the virtual machine instructions. The virtual machine may be an emulated computing environment. For example, the processor of the peripheral device may create an emulated computing environment by executing the virtual machine instructions.
[0016] In some examples, the virtual machine may operate within a limited memory space of the peripheral device. For example, the virtual machine may be limited to accessing (e.g., reading from and/or writing to) a limited address range or ranges of the memory of the peripheral device. For instance, the virtual machine may not access (e.g., may not have reference to) a portion of memory that includes base hardware instructions for the peripheral device.
[0017] In some examples, the virtual machine may include virtualized and/or emulated hardware. For instance, the virtual machine may include an emulated and/or virtualized processor. In some examples, the base hardware instructions of the peripheral device may be executed to interface the processor of the peripheral device with the emulated processor of the virtual machine. In some examples, executing an OS (on a host device or another device, for instance) may differ from executing a virtual machine (on a peripheral device or another device, for instance). For example, an OS may be executed with actual hardware (e.g., actual processor and/or actual memory). A virtual machine may be executed with virtualized hardware (e.g., a virtualized processor and/or virtual memory). In some examples, a set of instructions (e.g., a hypervisor and/or a portion of base hardware instructions) may be executed to manage a virtual machine and/or may interface the virtual machine with actual hardware. A virtual machine may be isolated from (e.g., may not have direct access to) actual hardware (e.g., processor and/or memory). In some examples, an OS may have access to actual hardware.
[0018] The peripheral device may execute 104, by the virtual machine of the peripheral device, programmatic instructions from a computing device. For instance, the virtual machine may utilize a virtualized processor of the virtual machine to execute the programmatic instructions. In some examples, the virtual machine (e.g., virtualized processor) may interface (via a hypervisor and/or base hardware instructions, for instance) with the actual processor of the peripheral device to execute the programmatic instructions. Programmatic instructions are instructions for performing an operation or operations. In some examples, the virtual machine may utilize virtual memory to execute the programmatic instructions. In some examples, the virtual machine (e.g., virtual memory) may interface (via a hypervisor and/or base hardware instructions, for instance) with the actual memory of the peripheral device. For instance, the programmatic instructions and/or a portion or portions of the programmatic instructions may be loaded into virtual memory. In some examples, the programmatic instructions are instructions of a Turing-complete programming language. The virtual machine may execute a Turing-complete programming language.
[0019] A Turing-complete programming language is a programming language that is capable of simulating a Turing machine (e.g., any Turing machine). In some examples, a Turing-complete programming language may have a conditional branching capability. For instance, a Turing-complete programming language may be capable of handling “if” statements and/or “goto” statements. For example, the programmatic instructions may include a logical conditional instruction. This may be in contrast to some macros, which may be incapable of handling logical conditional instructions. In some examples, a Turing-complete programming language may be capable of performing multiple loops (e.g., an arbitrary or indefinite quantity of loops). For instance, the programmatic instructions may cause the processor to perform programmatic loops on the peripheral device in some cases. For example, a Turning-complete programming language may not guarantee finite looping and/or may allow infinite looping.
[0020] Some of the techniques described herein may provide a Turing- complete programming language. The Turing-complete programming language may be deployed on a peripheral device or devices (e.g., mice, keyboards, headsets, monitors, etc.). In some examples, the programming language may allow creation and/or addition of features and/or operations on the peripheral devices without further development of base hardware instructions (e.g., firmware). For instance, a program may be created on a computing device (e.g., host device), which may be sent to the peripheral device for execution. In some examples, the program may be created and/or compiled on a computing device or devices to produce the programmatic instructions. The programmatic instructions may be sent to a peripheral device and executed by a virtual machine running on the peripheral device.
[0021] Some of the techniques described herein may be useful by simplifying feature development for peripheral devices. Some of the techniques described herein may allow many peripheral devices to share a new feature and/or operation without updating base hardware instructions (e.g., without updating firmware). For example, some of the techniques may provide flexibility regarding peripheral device features and/or operations, as a feature or operation may be changed through adding and/or modifying the programmatic instructions, even after a product is released. In some examples of the techniques described herein, the programmatic instructions may add and/or modify a functionality of the peripheral device without changing base hardware instructions.
[0022] In some examples of the techniques described herein, the Turing- complete programming language may allow for performing math operations (e.g., addition, subtraction, multiplication, division, trigonometric functions, exponential functions, roots, integration, differentiation, etc.) and/or for simulation of peripheral device actions (e.g., mouse movement, mouse clicks, virtual keyboard buttons, triggering of internal peripheral device functions, etc.). For example, the programming language (e.g., programmatic instructions) may be utilized, for example, to cause a mouse to send a Ctrl+C command when a button is pressed. Or, when a button is pressed, the programmatic instructions may stop the mouse from sending movements to the host device until released, but may monitor mouse movements and execute an action or actions (e.g., user selectable actions) based on the movements (e.g., up, down, right, and/or left moves). For instance, the programmatic instructions may, upon detection of a button press, suspend sending mouse movements to a host device while a pattern or gesture is captured. When the mouse recognizes the pattern or gesture, the mouse may send a corresponding command (e.g., copy command, paste command, close window command, undo, redo, type a number, write a word, draw a picture, input a series of mouse movements and/or clicks, etc.). Accordingly, a peripheral device (e.g., mouse) may perform a program to map gestures to commands (as contrasted with having the host detect gestures and/or map the gestures to commands, for instance).
[0023] In some examples, the programmatic instructions may cause a mouse to send an ALT+TAB command to the host and then send right or left button signals when the mouse moves right or left, which may allow selection of an application on the host. In some examples, the programmatic instructions may cause a mouse to draw a fractal in a drawing application, programmatically simulating mouse movements and clicks. In some examples, the programmatic instructions may cause a mouse to calculate and send prime numbers (e.g., simulate button presses that indicate prime numbers) to the host. Other examples of programmatic instructions may be executed by the virtual machine of a peripheral device in accordance with the techniques described herein.
[0024] In some examples, the peripheral device may receive the programmatic instructions from the computing device. For instance, the peripheral device may be linked to (e.g., in communication with, connected to, and/or coupled to, etc.) the computing device. In some examples, the link may be a wired or wireless link (e.g., USB, Lightning, HDMI, Bluetooth, Wi-Fi, etc.). The peripheral device may receive the programmatic instructions via the link. [0025] In some examples, the programmatic instructions may be compiled by a computing device (e.g., a host device that is linked to the peripheral device or another device). For instance, the programmatic instruction may be compiled by a computing device (e.g., host device) that is linked to the peripheral device. In some examples, the programmatic instructions may be developed on the computing device. For instance, the computing device may receive development code (e.g., high-level programming language code). In some examples, the computing device may receive the development code from a peripheral device (e.g., the peripheral device may detect the programming code being entered by a user and may send the programming code to the computing device). The computing device may compile the programming code to produce the programmatic instructions. For instance, the computing device may translate (e.g., optimize) the programming code into machine language (e.g., may optimize the programming code for reducing power consumption and/or memory consumption). In some examples, the programming language and/or programmatic instructions may not be a scripting language (where a scripting language is interpreted rather than compiled, for instance).
[0026] In some examples, the virtual machine may be executed at a virtualization layer that is different from a base hardware instruction (e.g., firmware) layer of the peripheral device. For example, the virtual machine may be layered on top of the base hardware instruction layer.
[0027] In some examples, the programmatic instructions may be expressed and/or indicated in a programming language that is different from a programming language of the base hardware instructions (e.g., firmware). In some examples, the virtual machine is executed in ARM code. For instance, the base hardware instructions may include ARM code to instantiate the virtual machine. In some examples, the virtual machine may be executed in ARM code, while the programmatic instructions may not be expressed and/or indicated in ARM code.
[0028] Figure 2 is a block diagram of an example of a peripheral device 202 that may be used in running a virtual machine. Examples of the peripheral device 202 include a mouse, keyboard, headset, camera, monitor, stylus pad, microphone, controller, remote control, etc. The peripheral device 202 may include a peripheral device processor 204, a peripheral device memory 206, and/or a communication interface 208. The peripheral device 202 may include additional components (not shown) and/or some of the components described herein may be removed and/or modified without departing from the scope of the techniques described herein.
[0029] In some examples, the peripheral device 202 includes a communication interface 208 to communicate with the host device 214. For instance, the peripheral device 202 may be in communication with (e.g., coupled to, have a communication link with) a host device 214. For example, the communication interface 208 may be hardware (e.g., port(s), controller(s), circuitry(ies), transceiver(s), antenna(s), etc.) that enables a wired (e.g., USB, HDMI, DisplayPort, Lightning, Ethernet, etc.) and/or wireless (e.g., Bluetooth, Wi-Fi, etc.) link with the host device 214.
[0030] In some examples, peripheral device 202 may include another component or components (not shown in Figure 2). For example, the peripheral device 202 may include button(s), scroll wheel(s), screen(s), touch pad(s), pressure sensor(s), motion sensor(s), lights (e.g., light-emitting diode(s)), and/or optical sensor(s), etc. For instance, the peripheral device 202 may include an input device or devices and/or an output device or device(s). In some examples, the peripheral device 202 may detect user input and/or may provide detected input to the host device 214.
[0031] The peripheral device processor 204 may be any of a central processing unit (CPU), a semiconductor-based microprocessor, field- programmable gate array (FPGA), an application-specific integrated circuit (ASIC), ARM, and/or other hardware device suitable for retrieval and execution of instructions stored in the peripheral device memory 206. The peripheral device processor 204 may be coupled to the peripheral device memory 206. The peripheral device processor 204 may fetch, decode, and/or execute instructions (e.g., base hardware instructions 210 and/or programmatic instructions 212) stored in the peripheral device memory 206. In some examples, the peripheral device processor 204 may include an electronic circuit or circuits that include electronic components for performing a function or functions of the instructions (e.g., base hardware instructions 210 and/or programmatic instructions 212). In some examples, the peripheral device processor 204 may perform one, some, or all of the functions, operations, elements, methods, etc., described in relation to one, some, or all of Figures 1- 4.
[0032] The peripheral device memory 206 may be any electronic, magnetic, optical, or other physical storage device that contains or stores electronic information (e.g., executable instructions, executable code, and/or data). The peripheral device memory 206 may be, for example, read-only memory (ROM), random-access memory (RAM), electrically erasable programmable read-only memory (EEPROM), and/or a storage device, etc. In some examples, the peripheral device memory 206 may include volatile and/or non-volatile memory, such as dynamic random-access memory (DRAM), EEPROM, magnetoresistive random-access memory (MRAM), phase change RAM (PCRAM), memristor, flash memory, and/or ROM, etc. In some examples, the peripheral device memory 206 may be a non-transitory tangible machine-readable storage medium, where the term “non-transitory” does not encompass transitory propagating signals. In some examples, the peripheral device memory 206 may include multiple devices (e.g., a ROM memory device and a RAM memory device).
[0033] In some examples, the peripheral device memory 206 may store base hardware instructions 210 and/or programmatic instructions 212. In some examples, the peripheral device memory 206 may be ROM. In some examples, the peripheral device memory 206 may include separate memory devices. For instance, the peripheral device memory 206 may include a ROM chip to store the base hardware instructions 210 and/or a RAM chip for loading data and/or instructions. In some examples, the programmatic instructions 212 may be stored in ROM. For instance, the programmatic instructions 212 may be stored in ROM to preserve the programmatic instructions 212 through powering down and powering up (e.g., power cycling). In some examples, the programmatic instructions 212 may not be stored in ROM. In some examples, the programmatic instructions 212 may be loaded into RAM.
[0034] In some examples, the peripheral device processor 204 may run the base hardware instructions 210 to operate the peripheral device 202. For instance, the peripheral device processor 204 may run the base hardware instructions to perform basic hardware operations (e.g., activate or boot, detect input, operate the communication interface, etc.) on the peripheral device 202. In some examples, the peripheral device processor 204 may run the base hardware instructions 210 to instantiate and/or the run a virtual machine.
[0035] In some examples, the peripheral device processor 204 may run the programmatic instructions 212 from the host device 214 in a virtual machine. For instance, the peripheral device 202 (e.g., communication interface 208) may receive the programmatic instructions 212 from the host device 214. The peripheral device memory 206 may store the programmatic instructions 212 received from the host device 214. In some examples, the programmatic instructions 212 may provide an operation that is (or operations that are) unavailable in the base hardware instructions 210. In some examples, the peripheral device memory 206 may store the programmatic instructions 212 without modifying the base hardware instructions 210.
[0036] The host device 214 may be a computing device, such as a personal computer, a server computer, a smartphone, a tablet computer, etc. The host device 214 may include a host processor 216, a host memory 218, and/or a communication interface 222. In some examples, the host device 214 may be in communication with (e.g., coupled to, have a communication link with) the peripheral device 202. The host device 214 may include additional components (not shown) and/or some of the components described herein may be removed and/or modified without departing from the scope of the techniques described herein.
[0037] The host processor 216 may be any of a central processing unit (CPU), a semiconductor-based microprocessor, graphics processing unit (GPU), field-programmable gate array (FPGA), an application-specific integrated circuit (ASIC), and/or other hardware device suitable for retrieval and execution of instructions stored in the host memory 218. The host processor 216 may fetch, decode, and/or execute instructions (e.g., development instructions 220) stored in the host memory 218. In some examples, the host processor 216 may include an electronic circuit or circuits that include electronic components for performing a function or functions of the instructions (e.g., development instructions 220). In some examples, the host processor 216 may perform one, some, or all of the functions, operations, elements, methods, etc., of a host device described in relation to one, some, or all of Figures 1-4.
[0038] The host memory 218 may be any electronic, magnetic, optical, or other physical storage device that contains or stores electronic information (e.g., executable instructions, executable code, and/or data). The host memory 218 may be, for example, RAM, EEPROM, a storage device, an optical disc, and the like. In some examples, the host memory 218 may be volatile and/or nonvolatile memory, such as DRAM, EEPROM, MRAM, PCRAM, memristor, flash memory, and the like. In some examples, the host memory 218 may be a non- transitory tangible machine-readable storage medium, where the term “non- transitory” does not encompass transitory propagating signals. In some examples, the host memory 218 may include multiple devices (e.g., a RAM card and a solid-state drive (SSD)).
[0039] In some examples, the peripheral device processor 204 may have lesser processing capability and/or resources than the host processor 216. For instance, the peripheral device processor 204 may be an 8-bit processor, while the host processor 216 may be a 64-bit processor in some cases. In some examples, the peripheral device processor 204 may execute with a lower clock speed (e.g., 30 megahertz) than the host processor 216 (e.g., over 1 gigahertz (GHz)). In some examples, the peripheral device memory 206 may have fewer resources (e.g., a smaller capacity) than the host memory 218. For instance, the peripheral device memory 206 may have 64 kilobytes (kB) of memory space, while the host memory 218 may have gigabytes (GB) (e.g., 8 GB, 16 GB, 32 GB, etc.).
[0040] In some examples, the host device 214 includes a communication interface 222 to communicate with the peripheral device 202. For instance, the host device 214 may be in communication with (e.g., coupled to, have a communication link with) the peripheral device 202. For example, the communication interface 222 may be hardware (e.g., port(s), controller(s), circuitry(ies), transceiver(s), antenna(s), etc.) that enables a wired (e.g., USB, HDMI, DisplayPort, Lightning, Ethernet, etc.) and/or wireless (e.g., Bluetooth, Wi-Fi, etc.) link with the peripheral device 202.
[0041] In some examples, the host memory 218 may store development instructions 220. The host processor 216 may execute the development instructions 220 to develop programmatic instructions 212, which may be sent to the peripheral device 202 for execution. In some examples, the development instructions 220 may be executed to provide a development environment (e.g., produce an interface into which programming code or development code may be entered). For instance, the host device 214 may receive programming code or development code from user input (via the peripheral device 202 and/or another peripheral device, for example) and/or from another device (e.g., network device, server, etc.). In some examples, the development instructions 220 may be executed to compile programming code or development code to produce the programmatic instructions 212. The compiled programmatic instructions 212 may be sent to the peripheral device 202 via the communication interface 222.
[0042] Figure 3 is a block diagram illustrating an example of a computer- readable medium 324 for performing emulation. The computer-readable medium is a non-transitory, tangible computer-readable medium 324. The computer-readable medium 324 may be, for example, ROM, RAM, EEPROM, and/or a storage device, etc. In some examples, the computer-readable medium 324 may be volatile and/or non-volatile memory, such as ROM, DRAM, EEPROM, MRAM, PCRAM, memristor, and/or flash memory, etc. In some examples, the peripheral device memory 206 described in relation to Figure 2 may be an example of the computer-readable medium 324 described in relation to Figure 3. [0043] The computer-readable medium 324 may include code (e.g., data and/or instructions). For example, the computer-readable medium 324 may include virtual machine instructions 326 and/or programmatic instructions 328.
[0044] The virtual machine instructions 326 may include code to cause a processor of a peripheral device to instantiate a virtual machine. In some examples, instantiating a virtual machine may be performed as described in relation to Figure 1 and/or Figure 2. For instance, a processor of a peripheral device may execute the virtual machine instructions 326 to instantiate a computing environment on a peripheral device.
[0045] In some examples, the programmatic instructions 328 are code to cause the processor to execute the programmatic instructions 328 compiled by a host device in the virtual machine. In some examples, executing the programmatic instructions 328 may be accomplished as described in relation to Figure 1 and/or Figure 2. For example, the programmatic instructions 328 may cause the processor to output a simulated mouse movement. In some examples, the programmatic instructions 328 may cause the processor to perform multiple programmatic loops on the peripheral device.
[0046] Figure 4 is a diagram illustrating an example of a peripheral device 430. The peripheral device 430 may include a processor 440, base hardware instructions 438, and programmatic instructions 434. The peripheral device 430, the processor 440, the base hardware instructions 438, and/or the programmatic instructions 434 may be examples of a corresponding element or elements described in relation to Figure 1 , Figure 2, and/or Figure 3.
[0047] The base hardware instructions 438 may be executed by the processor 440 at a base hardware instruction layer 436. The base hardware instruction layer 436 may be a functional layer at which the peripheral device 430 hardware (e.g., all of the peripheral device hardware) is accessible relative to the base hardware instructions 438. For example, the processor 440 may execute the base hardware instructions 438 to access any memory space and/or to detect any event (e.g., button press, sensor input, etc.) on the peripheral device 430. [0048] The programmatic instructions 434 may be executed by the processor 440 at a virtualization layer 432. The virtualization layer 432 may be a functional layer at which access to an aspect or aspects of the peripheral device 430 may be limited. For instance, the programmatic instructions 434 may not have access to change a portion of memory in which the base hardware instructions 438 are stored. The virtualization layer 432 may provide a computing environment. For instance, the computing environment may be provided via a virtual machine. The virtual machine may implement a Turing-complete programming language. The virtual machine (e.g., a virtualized processor) may execute the programmatic instructions 434. For instance, the programmatic instructions 434 may be modified and/or operated without modifying the base hardware instructions 438. Accordingly, the programmatic instructions 434 may modify and/or add operation(s), function(s), and/or behavior(s) that are not included in the base hardware instructions 438.
[0049] As used herein, the term “and/or” may mean an item or items. For example, the phrase “A, B, and/or C” may mean any of: A (without B and C), B (without A and C), C (without A and B), A and B (but not C), B and C (but not A), A and C (but not B), or all of A, B, and C.
[0050] While various examples are described herein, the disclosure is not limited to the examples. Variations of the examples described herein may be within the scope of the disclosure. For example, aspects or elements of the examples described herein may be omitted or combined.

Claims

1 . A method, comprising: executing, by a peripheral device, a virtual machine; and executing, by the virtual machine of the peripheral device, programmatic instructions from a computing device.
2. The method of claim 1 , wherein the virtual machine is to execute a Turing-complete programming language.
3. The method of claim 1 , wherein the programmatic instructions are compiled by the computing device that is linked to the peripheral device.
4. The method of claim 1 , wherein the virtual machine is executed at a virtualization layer that is different from a base hardware instruction layer of the peripheral device.
5. The method of claim 1 , wherein the programmatic instructions add a functionality of the peripheral device without changing base hardware instructions.
6. The method of claim 1 , wherein the peripheral device is a mouse, a keyboard, or a headset.
7. The method of claim 1 , wherein the virtual machine is executed in advanced reduced instruction set computer (RISC) machine (ARM) code, and wherein the programmatic instructions are not indicated in ARM code.
8. The method of claim 1 , wherein the programmatic instructions include a logical conditional instruction.
9. A peripheral device, comprising: a communication interface to communicate with a host device; a memory; and a processor coupled to the memory, wherein the processor is to: run base hardware instructions to operate the peripheral device; and run programmatic instructions from the host device in a virtual machine.
10. The peripheral device of claim 9, wherein the memory is read-only memory (ROM).
11 . The peripheral device of claim 9, wherein the programmatic instructions provide an operation that is unavailable in the base hardware instructions.
12. The peripheral device of claim 9, wherein the memory is to store the programmatic instructions without modifying the base hardware instructions.
13. A non-transitory tangible computer-readable medium storing executable code, comprising: code to cause a processor of a peripheral device to instantiate a virtual machine; and code to cause the processor to execute programmatic instructions compiled by a host device in the virtual machine.
14. The computer-readable medium of claim 13, wherein the programmatic instructions cause the processor to output a simulated mouse movement.
15. The computer-readable medium of claim 13, wherein the programmatic instructions cause the processor to perform multiple programmatic loops on the peripheral device.
PCT/US2020/052020 2020-09-22 2020-09-22 Virtual machines of peripheral devices WO2022066145A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/US2020/052020 WO2022066145A1 (en) 2020-09-22 2020-09-22 Virtual machines of peripheral devices

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2020/052020 WO2022066145A1 (en) 2020-09-22 2020-09-22 Virtual machines of peripheral devices

Publications (1)

Publication Number Publication Date
WO2022066145A1 true WO2022066145A1 (en) 2022-03-31

Family

ID=80846804

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/US2020/052020 WO2022066145A1 (en) 2020-09-22 2020-09-22 Virtual machines of peripheral devices

Country Status (1)

Country Link
WO (1) WO2022066145A1 (en)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6003065A (en) * 1997-04-24 1999-12-14 Sun Microsystems, Inc. Method and system for distributed processing of applications on host and peripheral devices
US8527982B1 (en) * 2007-01-12 2013-09-03 moka5. Inc. Auto install virtual machine monitor
US10067800B2 (en) * 2014-11-06 2018-09-04 Vmware, Inc. Peripheral device sharing across virtual machines running on different host computing systems

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6003065A (en) * 1997-04-24 1999-12-14 Sun Microsystems, Inc. Method and system for distributed processing of applications on host and peripheral devices
US8527982B1 (en) * 2007-01-12 2013-09-03 moka5. Inc. Auto install virtual machine monitor
US10067800B2 (en) * 2014-11-06 2018-09-04 Vmware, Inc. Peripheral device sharing across virtual machines running on different host computing systems

Similar Documents

Publication Publication Date Title
US10908789B2 (en) Application switching method and apparatus and graphical user interface
AU2017259344B2 (en) Method and apparatus for controlling multi-window display in interface
JP6090452B2 (en) Computing device, method, program, and machine-readable storage medium
US10606607B2 (en) Selecting operating systems based on a computing device mode
US9542211B2 (en) Co-designed dynamic language accelerator for a processor
US9652142B2 (en) System and method of mode-switching for a computing device
KR20170057237A (en) Supporting multiple operating system environments in computing device without contents conversion
US11693707B2 (en) Electronic device for executing multiple operating systems and method of controlling same
US10599236B2 (en) Trackpads and methods for controlling a trackpad
US20160342252A1 (en) Computer device with a touch controller and method for updating the touch controller
WO2015148078A1 (en) Using usb over ip to share a non-usb sensor with another device
JP6293910B2 (en) Hardware acceleration for inline caching in dynamic languages
US20130030786A1 (en) Emulating input/output components
US11086538B2 (en) Method and electronic device for initializing storage
JP2017509950A (en) Hardware acceleration for inline caching in dynamic languages
WO2022066145A1 (en) Virtual machines of peripheral devices
US9507649B2 (en) Web browser for spoofing supported features
EP3115898B1 (en) Method for generating user-level events for an application
US10429988B2 (en) Touch screen support by emulating a legacy device
US11836314B1 (en) Sensitivity adjustment for a touchpad of an information handling system
CN111078301A (en) Multi-core arithmetic device and operation method thereof
US11775219B2 (en) Access control structure for shared memory
CN117917616A (en) Touch pad with multiple zones for different user interface functionalities
US20240226716A1 (en) Directional pads comprising a force sensor and methods of using the same
KR20220077694A (en) Virtual machine monitoring method using hypervisor and electronic device supporting the same

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 20955431

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 20955431

Country of ref document: EP

Kind code of ref document: A1