The _X_G_e_t_D_e_v_i_c_e_M_o_t_i_o_n_E_v_e_n_t_s request returns all events in the motion history buffer that fall between the specified start and stop times, inclusive. If the start time is later than the stop time or if the start time is in the future, no events are returned. If the stop time is in the future, it is equivalent to specifying _C_u_r_r_e_n_t_T_i_m_e.
The _m_o_d_e indicates whether the device is reporting absolute positional data (mode=_A_b_s_o_l_u_t_e) or relative motion data (mode=_R_e_l_a_t_i_v_e). Some devices allow their mode to be changed via the _X_S_e_t_D_e_v_i_c_e_M_o_d_e request. These constants are defined in the file XI.h. The _a_x_i_s___c_o_u_n_t returns the number of axes or valuators being reported by the device.
_X_G_e_t_D_e_v_i_c_e_M_o_t_i_o_n_E_v_e_n_t_s can generate a _B_a_d_D_e_v_i_c_e, or _B_a_d_M_a_t_c_h error.
typedef struct { Time time; int *data; } XDeviceTimeCoord;
The time member is set to the time, in milliseconds. The data member is a pointer to an array of integers. These integers are set to the values of each valuator or axis reported by the device. There is one element in the array per axis of motion reported by the device. The value of the array elements depends on the mode of the device. If the mode is _A_b_s_o_l_u_t_e, the values are the raw values generated by the device. These may be scaled by client programs using the maximum values that the device can generate. The maximum value for each axis of the device is reported in the max_val field of the _X_A_x_i_s_I_n_f_o returned by the _X_L_i_s_t_I_n_p_u_t_D_e_v_i_c_e_s request. If the mode is _R_e_l_a_t_i_v_e, the data values are the relative values generated by the device.
You should use _X_F_r_e_e_D_e_v_i_c_e_M_o_t_i_o_n_E_v_e_n_t_s to free the data returned by this request.
Errors returned by this request: _B_a_d_D_e_v_i_c_e, _B_a_d_M_a_t_c_h.