Once and for all - I hope! So, for the records: Xinput1 events' valuators have a first_axis and axis_count defining the 'range' of valid axes for that event - but valid data in the valuator's array **always** start at zero (which means that, if event reports first axis as being axis 2, axis 2's value is in axis_data[0]).