Use the appropriate initialize*() method instead of setting up the structure
manually. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41889 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -163,20 +163,19 @@ BJoystick::Open(const char *portName, bool enhanced)
|
|||||||
if (variableJoystick == NULL)
|
if (variableJoystick == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
|
status_t result;
|
||||||
if (supportsVariable) {
|
if (supportsVariable) {
|
||||||
// The driver supports arbitrary controls.
|
// The driver supports arbitrary controls.
|
||||||
variableJoystick->axis_count = fJoystickInfo->module_info.num_axes;
|
result = variableJoystick->initialize(
|
||||||
variableJoystick->hat_count = fJoystickInfo->module_info.num_hats;
|
fJoystickInfo->module_info.num_axes,
|
||||||
variableJoystick->button_blocks
|
fJoystickInfo->module_info.num_hats,
|
||||||
= (fJoystickInfo->module_info.num_buttons + 31) / 32;
|
fJoystickInfo->module_info.num_buttons);
|
||||||
} else {
|
} else {
|
||||||
// The driver doesn't support our variable requests so we construct
|
// The driver doesn't support our variable requests so we construct
|
||||||
// a data structure that is compatible with extended_joystick and
|
// a data structure that is compatible with extended_joystick and
|
||||||
// just use that in reads. This allows us to use a single data
|
// just use that in reads. This allows us to use a single data
|
||||||
// format internally but be compatible with both inputs.
|
// format internally but be compatible with both inputs.
|
||||||
variableJoystick->axis_count = MAX_AXES;
|
result = variableJoystick->initialize_to_extended_joystick();
|
||||||
variableJoystick->hat_count = MAX_HATS;
|
|
||||||
variableJoystick->button_blocks = (MAX_BUTTONS + 31) / 32;
|
|
||||||
|
|
||||||
// Also ensure that we don't read over those boundaries.
|
// Also ensure that we don't read over those boundaries.
|
||||||
if (fJoystickInfo->module_info.num_axes > MAX_AXES)
|
if (fJoystickInfo->module_info.num_axes > MAX_AXES)
|
||||||
@@ -187,26 +186,11 @@ BJoystick::Open(const char *portName, bool enhanced)
|
|||||||
fJoystickInfo->module_info.num_buttons = MAX_BUTTONS;
|
fJoystickInfo->module_info.num_buttons = MAX_BUTTONS;
|
||||||
}
|
}
|
||||||
|
|
||||||
variableJoystick->data_size = sizeof(bigtime_t) // timestamp
|
if (result != B_OK) {
|
||||||
+ variableJoystick->button_blocks * sizeof(uint32) // bitmaps
|
|
||||||
+ variableJoystick->axis_count * sizeof(int16) // axis values
|
|
||||||
+ variableJoystick->hat_count * sizeof(uint8); // hat values
|
|
||||||
|
|
||||||
variableJoystick->data
|
|
||||||
= (uint8 *)malloc(variableJoystick->data_size);
|
|
||||||
if (variableJoystick->data == NULL) {
|
|
||||||
delete variableJoystick;
|
delete variableJoystick;
|
||||||
return B_NO_MEMORY;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fill in the convenience pointers
|
|
||||||
variableJoystick->timestamp = (bigtime_t *)variableJoystick->data;
|
|
||||||
variableJoystick->buttons = (uint32 *)(&variableJoystick->timestamp[1]);
|
|
||||||
variableJoystick->axes = (int16 *)(&variableJoystick->buttons[
|
|
||||||
variableJoystick->button_blocks]);
|
|
||||||
variableJoystick->hats = (uint8 *)(&variableJoystick->axes[
|
|
||||||
variableJoystick->axis_count]);
|
|
||||||
|
|
||||||
if (!fJoystickData->AddItem(variableJoystick)) {
|
if (!fJoystickData->AddItem(variableJoystick)) {
|
||||||
free(variableJoystick->data);
|
free(variableJoystick->data);
|
||||||
delete variableJoystick;
|
delete variableJoystick;
|
||||||
|
|||||||
Reference in New Issue
Block a user