---
name: "XQueryDeviceState"
section: "3x"
platform: "linux"
package: "libxi-dev"
version: "4.3.0.dfsg.1-14sarge7"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/XQueryDeviceState/3x"
---

# XQueryDeviceState(3x)

query the state of an extension input device.

## NAME

XQueryDeviceState - query the state of an extension input device.

## SYNTAX

int XQueryDeviceState(Display \**display*, XDevice \**device*);

## ARGUMENTS

- *display*

  Specifies the connection to the X server.

- *device*

  Specifies the device whose state is to be queried.

## DESCRIPTION

The *XQueryDeviceState* request queries the state of an input device.  The current state of  keys and buttons (up or down), and valuators (current value) on the device  is reported by this request.  Each key or button is represented by a bit in the *XDeviceState* structure that is returned.  Valuators on the  device report 0 if they are reporting relative information, and the current value if they are reporting absolute information.

*XQueryDeviceState* can generate a *BadDevice* error.

## STRUCTURES

The *XDeviceState* structure contains:

```
typedef struct {
	XID device_id;
	int num_classes;
	XInputClass *data;
} XDeviceState;
```

The *XValuatorState* structure contains:

```
typedef struct {
	unsigned char class;
	unsigned char length;
	unsigned char num_valuators;
	unsigned char mode;
	int *valuators;
} XValuatorState;
```

The *XKeyState* structure contains:

```
typedef struct {
	unsigned char class;
	unsigned char length;
	short         num_keys;
	char keys[32];
} XKeyState;
```

The *XButtonState* structure contains:

```
typedef struct {
	unsigned char class;
	unsigned char length;
	short         num_buttons;
	char buttons[32];
} XButtonState;
```

## DIAGNOSTICS

- *BadDevice*

  An invalid device was specified.  The specified device does not exist or has  not been opened by this client via *XOpenInputDevice*.  This error may also occur if some other client has caused the specified device to become the X keyboard or X pointer device via the *XChangeKeyboardDevice* or *XChangePointerDevice* requests.

## SEE ALSO

*Programming with Xlib*
