Directional controllers are commonly used in computer processing devices such as personal computers, laptops, ultra-portables, cell phones, etc. A directional controller allows a user of a device to move a pointer on a display screen to manipulate objects, make menu selections, initiate functions or perform other operations. Examples of directional controllers include a pointing stick, touch pad, touch screen, mouse, trackball, joystick, etc. Small controllers such as a pointing stick or touchpad have become popular for use with small portable computing devices, such as handheld computers, cell phones, or the like.
The effectiveness of a directional controller is largely dependent upon the sensitivity, consistency, and overall performance. In order to make a directional controller's performance acceptable to a user, it is usually necessary to perform corrections or to otherwise compensate or calibrate a directional controller for undesirable physical effects such as drift, noise, thermal or other environmental effects, etc. Also, a directional controller should adapt to different users' habits such as the speed of movement, frequency or force of presses (i.e., “click” detection), and other factors which may vary over time even for the same user.
Embodiments of the invention provide a user-operated directional controller for an electronic device. One embodiment provides an apparatus that includes a pointing device which receives raw signal data in an electronic device, one or more processors, and logic encoded in one or more tangible media for execution by the one or more processors and when executed operable to: determine a first coordinate value for a cursor position by reading x, y coordinate values from a directional controller; determine a remainder value associated with the first coordinate value; store the remainder value; determine a second coordinate value for a second cursor position by reading x, y coordinates from the directional controller; compute the second coordinate value by using a residual value, wherein the residual value is derived from the stored remainder value from a previous calibration operation; and store the subsequent remainder value.
Coordinate values may include an n-tuple of numbers or scalars, where each component of a given tuple corresponds to a point in an n-dimensional space. Embodiments of the present invention may be applied to various different types of coordinate systems, depending on the specific application. Such coordinate systems may include but are not limited to, for example, a Cartesian coordinate system, a polar coordinate system, curvilinear coordinate system, etc.
Drift is the motion of a cursor that occurs even when no user is moving the pointing device.
A human cursor movement threshold may be defined as a point or value at which the movement of a cursor is deemed to be caused by a user. For example, if changes in the position of a cursor meet a predetermined human cursor movement threshold, the movement is deemed to be caused by a user. Otherwise, if the predetermined human cursor movement threshold is not met, the movement is deemed to be caused by something other than a user (e.g., drift, correction operation, etc.).
A pointing device is an input interface that enables a user to input spatial data into a computer to control the position or movement of a pointer in the display. For example, a pointing device may include a pressure-responsive directional controller device such as a track stick, joystick, etc. A pressure-responsive directional controller device requires sensing a human exerting a force on a fixed physical structure. This is different from, for example, devices such as a mouse (optical or mechanical), trackball, etc.
Quantization is an operation that converts a set of more continuous values to a set of less continuous, or discrete, values, referred to as quantization values. For example, real numbers may be quantized to integers. A first set of integers can be quantized to a second set of integers where the second set of integers has coarser values than the first set. A quantization process may produce quantization values and corresponding residual values.
A sample is one or more readings from a set of values. For example, a sample may include one or more coordinate values of a pointer position (e.g., x, y coordinate values).
Description
As shown in
In one embodiment, embedded controller 136 receives x and y coordinate values that correspond to pressure that a user applies to directional controller 130. In one embodiment, directional controller 130 receives raw signal data based on input from the user and sends the raw signal data to analog-to-digital converter (ADC) 134, which converts the raw signal data to x and y coordinate values (digital data), and sends the x and y coordinate values to embedded controller 136. Embedded controller 136 sends the x and y coordinate values to the processor 160, which then moves a cursor shown on display 110 based on the x and y coordinate values.
In one embodiment, directional controller 130 includes an x-channel 140 and a y-channel 142. The x-channel 140 and a y-channel 142 each include a differential amplifier 132, a network of resistors R1-R6, and a capacitor C. In one embodiment, the gain of each amplifier 132 is R6/R4, where R1=R2, R3>>R1, R4≈R5, and R6>>R4. In one embodiment, resistors R4 and R5 are variable resistors. In one embodiment, resistors R4 and R5 are strain gauge resistors.
Other embodiments of the directional controller are possible. For example, the directional controller may include R4 and R5, where the remaining resistors R1, R2, R3, and R6, and capacitor C may be a part of an intermediary circuit.
The embedded controller 136 provides a reference voltage to one of the inputs to each of the amplifiers 132 via resistors R1-R6; and the other of the inputs to each of the amplifiers 132 is controlled by the raw signal data based on input from the user. In one embodiment, the embedded controller 136 provides a single reference voltage to both amplifiers 132. In another embodiment, the embedded controller 136 may provide two separate reference voltages, one for each of the amplifiers 132. In one embodiment, the embedded controller 136 includes a digital-to-analog converter (DAC) to drive Vin. In another embodiment, the embedded controller 136 includes a pulse-width modulated output that to drives Vin through a low-pass filter.
In one embodiment, for each amplifier 132, Vin (i.e., Vinx or Viny) is initially at the midpoint between the V+ input and ground. If embedded controller 136 detects that Vout (i.e., Voutx or Vouty) is above the midpoint, the embedded controller 136 reduces Vin in order to bring Vout to the midpoint, or as close to the midpoint as possible. In one embodiment, embedded controller 136 performs a binary search adjust Vin in order to bring Vout to the midpoint, or as close as possible to the midpoint. As such, each amplifier is automatically nulled by embedded controller 136. In one embodiment, this nulling operation is performed during initialization of the handheld computing device 100. In other embodiments, as described in more detail below, this nulling operation may also be performed during a drift correction operation.
As indicated above, the amplified x, y signals are provided to ADC 134, which also serves to track and update a location of a virtual pointer. Thus, the analog signal inputs to ADC 134 represent pressure applied in the x and y directions. ADC 134 converts the analog signal inputs to digital coordinates of a current x, y screen position of a pointer.
In one embodiment, processor 160 determines an operating point by performing a binary search to converge on a null value at a predefined time (e.g., upon system power-up, when a lid of the electronic device is lifted, etc.).
Note that
The circuits illustrated in amplifiers 132 are symbolic and not intended to represent an actual circuit. Any manner of amplification, conditioning or signal processing may be employed, as desired.
Embodiments of the invention include the following:
Smoothing Operation
At step 406, processor 160 determines a remainder value associated with each coordinate value. In one embodiment, to determine remainder values, processor 160 performs a quantization operation on each of the coordinate values to generate a coordinate value (i.e., quantization value) and a corresponding residual value. In particular embodiments, a remainder value is derived from a residual value resulting from a quantization operation. For example, a remainder value may be a multiplier (e.g., 0.5) of a particular residual value.
In one embodiment, processor 160 may compute a frequency of movement of a given coordinate value. If the frequency of movement is greater than a predefined value, processor 160 may remove a portion of the coordinate value from a calculation of a new pointer position based on the frequency of movement.
At step 408, processor 160 stores the remainder value. In one embodiment, processor 160 discards (or alternatively stores) any remaining portion of the residual value (e.g., that is not stored as a part of the remainder value). In one embodiment, the portion of the residual value that is discarded is between 17% and 37%. In other embodiments, different proportions may be used to achieve a desired behavior of the system. In one embodiment, remainder values are initialized to zero before a first calibration operation.
At step 410, processor 160 determines one or more coordinate values for a subsequent cursor position by reading coordinates (e.g., x, y coordinates) from directional controller 130. At step 412, the processor 160 computes the second coordinate value by using the residual value. In one embodiment, processor 160 computes the second coordinate value by adding the residual value to the determined coordinate value. In one embodiment, the computation results in a subsequent remainder value. For example, in one embodiment, the computed second coordinate value may be quantized, which would result in a quantized second coordinate value (e.g., an integer) and the resulting subsequent remainder value.
At step 414, processor 160 stores the subsequent remainder value. In one embodiment, the subsequent remainder value is used in a future calibration operation (e.g., the next calibration operation). The routine exits at step 416. In one embodiment, processor 160 stores the coordinate values in a memory (e.g., RAM 168). The coordinate values may then be used to influence cursor movement.
Drift Correction for a User-Operated Directional Controller
In one embodiment, processor 160 may execute a drift correction operation to prevent the cursor from drifting when the user does not intend to move the cursor (e.g., when the user is not applying any pressure on directional controller 130). A drift correction operation that is erroneously applied causes the cursor position to move even when a user is not moving the directional controller. The following embodiments prevent erroneous application of the drift correction operation.
At step 508, processor 160 determines when changes in the position data meet a predetermined human cursor movement threshold. In one embodiment, the human cursor movement threshold may be based on variations in the rate that the coordinate values change. For example, when the rate of change from sample-to-sample does not vary, or varies by just a little, such a steady force application may be deemed to be impossible or implausible for a human user. The human cursor movement threshold may not be met if such constant or low variations are present.
At step 510, processor 160 detects when the cursor position is moving without a user moving the pointing device, based on the determining operation. For example, if the cursor position is changing at a constant rate for a predefined period of time, the cursor movement may be deemed to be not caused by a user (e.g., caused by drift). In a more specific embodiment, after receiving samples of coordinate values for the cursor position, processor 160 may determine the magnitude values for coordinate values. If the magnitude values remain constant for a predefined period of time, the cursor position is deemed to be moving without a user moving the pointing device.
In alternative embodiments, the human cursor movement threshold may be based on other metrics such as velocity (e.g., constant velocity=non-human cause) or acceleration (e.g., zero acceleration=non-human cause).
At step 512, processor 160 performs a cursor position reset operation in response to the detecting operation. In one embodiment, to perform a cursor position reset operation, processor 160 nulls the coordinate values; and the cursor position reset operation is performed if the cursor position is deemed to be moving without a user moving the pointing device. In one embodiment, processor 160 disables the cursor position reset operation (or drift correction operation) when the cursor position moves without a user moving the pointing device. The routine exits at step 514.
Detection of User-Initiated Cursor Movement
At step 608, processor 160 determines when changes in the position data meet a predefined human cursor movement threshold. As described above, if the changes in the position data meet a predefined human cursor movement threshold, the changes are deemed to be caused by a user. If the cursor movement (i.e., changes in the position data) is deemed to be caused by a user, the processor 160 disables any drift correction operations.
In one embodiment, the predefined human cursor movement threshold is based on differences between adjacent samples of coordinate values. For example, the predefined human cursor movement threshold may be any measured differences between adjacent samples of coordinate values. For example, changes in the position data meet a predefined human cursor movement threshold when processor 160 measures differences between absolute values of adjacent samples of the coordinate values. In other words, the existence of differences between absolute values of adjacent samples of the coordinate values indicates that a user is causing the changes in the cursor position by the user moving the directional controller.
In one embodiment, the predefined human cursor movement threshold may be a predefined absolute value. For example, a predefined human cursor movement threshold may be met if processor 160 measures an absolute value of at least one of the coordinate values, compares it to the predefined human cursor movement threshold, and determines that the measured absolute value is equal to or greater than the predefined human cursor movement threshold. In other words, a measure absolute value being equal to or greater than the predefined human cursor movement threshold indicates that a user is causing the changes in the cursor position by the user moving the directional controller.
At step 610, processor 160 detects when the cursor position is moving in response to a user moving the directional controller 130 (e.g., pointing device), based on the determining operation above. In particular embodiments, if the human cursor movement threshold is met, the cursor is deemed to be caused by a user moving the pointing device. At step 612, processor 160 disables cursor position reset operations in response to the detecting operation. In one embodiment, processor 160 applies a cursor position reset operation to the coordinate values when a user is not moving the pointing device in order to cause the coordinate values to equal zero. The routine exits at step 614.
Source code shown in Table I, below, provides details by which track stick calibration and control is performed in a particular embodiment. Instructions represented by the source code are executed by embedded controller 136 and the results of the pointer x, y updated position and behavior are provided to host CPU 160 so that the host CPU can invoke functions based on the user's manipulation of an onscreen pointer or other selection mechanism. Note that this example includes diagnostic statements such as the “printf” statements that would not normally be included in a consumer product.
Although specific embodiments of the invention have been described, variations of such embodiments are possible and are within the scope of the invention.
Any suitable programming language can be used to implement the functionality of the present invention including C, C++, Java, assembly language, etc. Different programming techniques can be employed such as procedural or object oriented. The routines can execute on a single processing device or multiple processors. Although the steps, operations or computations may be presented in a specific order, this order may be changed in different embodiments unless otherwise specified. In some embodiments, multiple steps shown as sequential in this specification can be performed at the same time. The sequence of operations described herein can be interrupted, suspended, or otherwise controlled by another process, such as an operating system, kernel, etc. The routines can operate in an operating system environment or as stand-alone routines occupying all, or a substantial part, of the system processing. The functions may be performed in hardware, software or a combination of both.
In the description herein, numerous specific details are provided, such as examples of components and/or methods, to provide a thorough understanding of embodiments of the present invention. One skilled in the relevant art will recognize, however, that an embodiment of the invention can be practiced without one or more of the specific details, or with other apparatus, systems, assemblies, methods, components, materials, parts, and/or the like. In other instances, well-known structures, materials, or operations are not specifically shown or described in detail to avoid obscuring aspects of embodiments of the present invention.
A “computer-readable medium” for purposes of embodiments of the present invention may be any medium that can contain and store the program for use by or in connection with the instruction execution system, apparatus, system or device. The computer readable medium can be, by way of example only but not by limitation, a semiconductor system, apparatus, system, device, or computer memory.
A “processor” or “process” includes any human, hardware and/or software system, mechanism or component that processes data, signals or other information. A processor can include a system with a general-purpose central processing unit, multiple processing units, dedicated circuitry for achieving functionality, or other systems. Processing need not be limited to a geographic location, or have temporal limitations. Functions and parts of functions described herein can be achieved by devices in different places and operating at different times. For example, a processor can perform its functions in “real time,” “offline,” in a “batch mode,” etc. Parallel, distributed or other processing approaches can be used.
Reference throughout this specification to “one embodiment”, “an embodiment”, or “a specific embodiment” means that a particular feature, structure, or characteristic described in connection with the embodiment is included in at least one embodiment of the present invention and not necessarily in all embodiments. Thus, respective appearances of the phrases “in one embodiment”, “in an embodiment”, or “in a specific embodiment” in various places throughout this specification are not necessarily referring to the same embodiment. Furthermore, the particular features, structures, or characteristics of any specific embodiment of the present invention may be combined in any suitable manner with one or more other embodiments. It is to be understood that other variations and modifications of the embodiments of the present invention described and illustrated herein are possible in light of the teachings herein and are to be considered as part of the spirit and scope of the present invention.
Embodiments of the invention may be implemented by using a programmed general purpose digital computer, by using application specific integrated circuits, programmable logic devices, field programmable gate arrays, optical, chemical, biological, quantum or nanoengineered systems, components and mechanisms may be used. In general, the functions of the present invention can be achieved by any means as is known in the art. Distributed, or networked systems, components and circuits can be used. Communication, or transfer, of data may be wired, wireless, or by any other means.
It will also be appreciated that one or more of the elements depicted in the drawings/figures can also be implemented in a more separated or integrated manner, or even removed or rendered as inoperable in certain cases, as is useful in accordance with a particular application. It is also within the spirit and scope of the present invention to implement a program or code that can be stored in a machine-readable medium to permit a computer to perform any of the methods described above.
Additionally, any signal arrows in the drawings/Figures should be considered only as exemplary, and not limiting, unless otherwise specifically noted. Furthermore, the term “or” as used herein is generally intended to mean “and/or” unless otherwise indicated. Combinations of components or steps will also be considered as being noted, where terminology is foreseen as rendering the ability to separate or combine is unclear.
As used in the description herein and throughout the claims that follow, “a”, “an”, and “the” includes plural references unless the context clearly dictates otherwise. Also, as used in the description herein and throughout the claims that follow, the meaning of “in” includes “in” and “on” unless the context clearly dictates otherwise.
The foregoing description of illustrated embodiments of the present invention, including what is described in the Abstract, is not intended to be exhaustive or to limit the invention to the precise forms disclosed herein. While specific embodiments of, and examples for, the invention are described herein for illustrative purposes only, various equivalent modifications are possible within the spirit and scope of the present invention, as those skilled in the relevant art will recognize and appreciate. As indicated, these modifications may be made to the present invention in light of the foregoing description of illustrated embodiments of the present invention and are to be included within the spirit and scope of the present invention.
Thus, while the present invention has been described herein with reference to particular embodiments thereof, a latitude of modification, various changes and substitutions are intended in the foregoing disclosures, and it will be appreciated that in some instances some features of embodiments of the invention will be employed without a corresponding use of other features without departing from the scope and spirit of the invention as set forth. Therefore, many modifications may be made to adapt a particular situation or material to the essential scope and spirit of the present invention. It is intended that the invention not be limited to the particular terms used in following claims and/or to the particular embodiment disclosed as the best mode contemplated for carrying out this invention, but that the invention will include any and all embodiments and equivalents falling within the scope of the appended claims.
Thus, the scope of the invention is to be determined solely by the appended claims.
This application claims the benefit of the following provisional patent application which is hereby incorporated by reference as if set forth in full in this specification for all purposes: U.S. Patent Application Ser. No. 61/019,160 entitled “USER-OPERATED DIRECTIONAL CONTROLLER FOR AN ELECTRONIC DEVICE,” filed on Jan. 4, 2008, (Attorney docket numbers 100127-002700US and OQO/USR0606S).
Number | Date | Country | |
---|---|---|---|
61019160 | Jan 2008 | US |