IP Library › Granted Patent US 10,599,444
Granted Patent B2
US 10,599,444 · App. 15/866,163 · Granted Mar 24, 2020

Extensible input stack for processing input device data

Inventors: Narasimhan Raghunath (Redmond, WA); Scott A. Greenlay (Redmond, WA); Francis Miland Hogle, IV (Seattle, WA); Fei Su (Issaquah, WA); Austin B. Hodges (Seattle, WA); Akhilesh Kaza (Sammamish, WA)
Assignee: Microsoft Technology Licensing, LLC
G06F9/4411G06F3/0601G06F13/102G06F13/385G06F13/4226
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,599,444
App. No.
15/866,163
Granted
Mar 24, 2020
Kind
B2
Abstract

Methods, systems, and computer program products are described herein an extensible input stack for processing input device data received from a plurality of different input devices attached to a computing device. The extensible input stack comprises a plurality of stack layers. Each of the plurality of stack layers performs a particular set of processing with respect to the input device data, among other operations. Each of the plurality of stack layers comprises a code interface, which is used to provide and/or or receive data from the input device and/or other stack layers. Each of the stack layers is extensible to include additional functionality to support new input devices. By separating out the functionality performed by the input stack into separate stack layers, and having each layer accessible via a code interface, the functionality of each of stack layers may be easily extended to support any type of input device.

Claims (77)

1. A system, comprising:

at least one processor; and

at least one memory that stores program code configured to be executed by the at least one processor, the program code comprising:

an operating system configured to:

determine an input device coupled to the computing device;

determine an application operable on the computing device that is interacted with via the input device;

determine at least one software component that extends the functionality of at least one stack layer of a plurality of stack layers of an extensible input stack to support operability of the determined input device for the application, the extensible input stack being configured to process input device data generated by the input device;

load the software component for the at least one stack layer;

determine a second application operable on the computing device that is interacted with via the input device;

determine at least a second software component that extends the functionality of at least one stack layer of a plurality of stack layers of the extensible input stack to support operability of the determined input device for the second application; and

load the second software component for the at least one stack layer.

2. The system of claim 1 , wherein the operating system is further configured to:

unload the first software component.

3. The system of claim 1 , wherein the plurality of stack layers comprises:

a raw input data processing layer that is configured to convert input device data received from the input device into a format suitable for handling by at least one further layer of the extensible input stack.

4. The system of claim 3 , wherein the plurality of stack layers further comprises:

an input processing layer configured to determine that the converted input device data is one of a first type or a second type for routing to a corresponding operating system (OS) target component.

5. The system of claim 4 , wherein the plurality of stack layers further comprises:

an input routing layer configured to:

determine a first target component of the OS to which the converted input device data is to be provided in response to the converted input device data being determined to be the first type; and

determine a second target component of the OS to which the converted input device data is to be provided in response to the converted input device data being determined to be the second type.

6. The system of claim 5 , wherein the plurality of stack layers further comprises:

a contextual processing layer configured to:

determine a first component-specific format in which the converted input device data is to be provided to the first target component and convert the converted input device data into the first component-specific format to generate first formatted input device data in response to the converted input device data being determined to be the first type; and

determine a second component-specific format in which the converted input device data is to be provided to the second target component and convert the converted input device data into the second component-specific format to generate second formatted input device data in response to the converted input device data being determined to be the second type.

7. The system of claim 6 , wherein the plurality of stack layers further comprises:

an application input layer configured to:

provide the first formatted input device data to the first target component in response to the converted input device data being determined to be the first type; and

provide the second formatted input device data to the second target component in response to the converted input device data being determined to be the second type.

8. A method in a computing device, comprising:

determining an input device coupled to the computing device;

determining an application operable on the computing device that is interacted with via the input device;

determining at least one software component that extends the functionality of at least one stack layer of a plurality of stack layers of an extensible input stack to support operability of the determined input device for the application, the extensible input stack being configured to process input device data generated by the input device;

loading the software component for the at least one stack layer;

determining a second application operable on the computing device that is interacted with via the input device;

determining at least a second software component that extends the functionality of at least one stack layer of a plurality of stack layers of the extensible input stack to support operability of the determined input device for the second application; and

loading the second software component for the at least one stack layer.

9. The method of claim 8 , further comprising:

unloading the first software component.

10. The method of claim 8 , wherein the plurality of stack layers comprises:

a raw input data processing layer that is configured to convert input device data received from the input device into a format suitable for handling by at least one further layer of the extensible input stack.

11. The method of claim 10 , wherein the plurality of stack layers further comprises:

an input processing layer configured to determine that the converted input device data is one of a first type or a second type for routing to a corresponding operating system (OS) target component.

12. The method of claim 11 , wherein the plurality of stack layers further comprises:

an input routing layer configured to:

determine a first target component of the OS to which the converted input device data is to be provided in response to the converted input device data being determined to be the first type; and

determine a second target component of the OS to which the converted input device data is to be provided in response to the converted input device data being determined to be the second type.

13. The method of claim 12 , wherein the plurality of stack layers further comprises:

a contextual processing layer configured to:

determine a first component-specific format in which the converted input device data is to be provided to the first target component and convert the converted input device data into the first component-specific format to generate first formatted input device data in response to the converted input device data being determined to be the first type; and

determine a second component-specific format in which the converted input device data is to be provided to the second target component and convert the converted input device data into the second component-specific format to generate second formatted input device data in response to the converted input device data being determined to be the second type.

14. The method of claim 13 , wherein the plurality of stack layers further comprises:

an application input layer configured to:

provide the first formatted input device data to the first target component in response to the converted input device data being determined to be the first type; and

provide the second formatted input device data to the second target component in response to the converted input device data being determined to be the second type.

15. A computer-readable storage medium having program instructions recorded thereon that, when executed by at least one processor, perform a method for dynamically loading a software component for an extensible input stack, the method comprising:

determining an input device coupled to a computing device;

determining an application operable on the computing device that is interacted with via the input device;

determining at least one software component that extends the functionality of at least one stack layer of a plurality of stack layers of the extensible input stack to support operability of the determined input device for the application, the extensible input stack being configured to process input device data generated by the input device;

loading the software component for the at least one stack layer; and

determining a second application operable on the computing device that is interacted with via the input device;

determining at least a second software component that extends the functionality of at least one stack layer of a plurality of stack layers of the extensible input stack to support operability of the determined input device for the second application; and

loading the second software component for the at least one stack layer.

16. The computer-readable storage medium of claim 15 , the method further comprising:

unloading the first software component.

17. The computer-readable storage medium of claim 15 , wherein the plurality of stack layers comprises:

a raw input data processing layer that is configured to convert input device data received from the input device into a format suitable for handling by at least one further layer of the extensible input stack.

18. The computer-readable storage medium of claim 17 , wherein the plurality of stack layers further comprises:

an input processing layer configured to determine that the converted input device data is one of a first type or a second type for routing to a corresponding operating system (OS) target component.

19. The computer-readable storage medium of claim 18 , wherein the plurality of stack layers further comprises:

an input routing layer configured to:

determine a first target component of the OS to which the converted input device data is to be provided in response to the converted input device data being determined to be the first type; and

determine a second target component of the OS to which the converted input device data is to be provided in response to the converted input device data being determined to be the second type.

20. The computer-readable storage medium of claim 19 , wherein the plurality of stack layers further comprises:

a contextual processing layer configured to:

determine a first component-specific format in which the converted input device data is to be provided to the first target component and convert the converted input device data into the first component-specific format to generate first formatted input device data in response to the converted input device data being determined to be the first type; and

determine a second component-specific format in which the converted input device data is to be provided to the second target component and convert the converted input device data into the second component-specific format to generate second formatted input device data in response to the converted input device data being determined to be the second type.

Assignments (3)
CORRECTIVE ASSIGNMENT TO CORRECT THE 2ND INVENTOR'S LAST NAME PREVIOUSLY RECORDED AT REEL: 044733 FRAME: 0716. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT. Recorded Sep 20, 2018
From: RAGHUNATH, NARASIMHAM; GREENLAY, SCOTT A.; HOGLE IV, FRANCIS MILAND; SU, FEI; HODGES, AUSTIN B.; KAZA, AKHILESH
To: MICROSOFT TECHNOLOGY LICENSING, LLC
Reel/Frame 047116/0658 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 25, 2018
From: RAGHUNATH, NARASIMHAN; GREELAY, SCOTT A.; HOGLE IV, FRANCIS MILAND; SU, FEI; HODGES, AUSTIN B.; KAZA, AKHILESH
To: MICROSOFT TECHNOLOGY LICENSING, LLC
Reel/Frame 044733/0716 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 24, 2018
From: RAGHUNATH, NARASIMHAN; GREENLAY, SCOTT A.; HOGLE IV, FRANCIS MILAND; SU, FEI; HODGES, AUSTIN B; KAZA, AKHILESH
To: MICROSOFT TECHNOLOGY LICENSING, LLC
Reel/Frame 044722/0233 →
Continuity (1)
Related Publication 20190213016A1 · Jul 11, 2019