void add_rawinput_device(running_machine& machine, RAWINPUTDEVICELIST * device) override { // make sure this is a mouse if (device->dwType != RIM_TYPEMOUSE) return; // allocate and link in a new device rawinput_lightgun_device *devinfo = create_rawinput_device<rawinput_lightgun_device>(machine, device); if (devinfo == nullptr) return; // populate the axes for (int axisnum = 0; axisnum < 3; axisnum++) { devinfo->device()->add_item( default_axis_name[axisnum], static_cast<input_item_id>(ITEM_ID_XAXIS + axisnum), generic_axis_get_state<LONG>, &devinfo->lightgun.lX + axisnum); } // populate the buttons for (int butnum = 0; butnum < 5; butnum++) { devinfo->device()->add_item( default_button_name(butnum), static_cast<input_item_id>(ITEM_ID_BUTTON1 + butnum), generic_button_get_state<BYTE>, &devinfo->lightgun.rgbButtons[butnum]); } }
virtual void input_init(running_machine &machine) override { win32_mouse_device *devinfo; int axisnum, butnum; if (!input_enabled() || !mouse_enabled()) return; // allocate a device devinfo = devicelist()->create_device<win32_mouse_device>(machine, "Win32 Mouse 1", *this); if (devinfo == nullptr) return; // populate the axes for (axisnum = 0; axisnum < 2; axisnum++) { devinfo->device()->add_item( default_axis_name[axisnum], static_cast<input_item_id>(ITEM_ID_XAXIS + axisnum), generic_axis_get_state<LONG>, &devinfo->mouse.lX + axisnum); } // populate the buttons for (butnum = 0; butnum < 2; butnum++) { devinfo->device()->add_item( default_button_name(butnum), static_cast<input_item_id>(ITEM_ID_BUTTON1 + butnum), generic_button_get_state<BYTE>, &devinfo->mouse.rgbButtons[butnum]); } }
void add_lightgun_buttons(XAnyClassPtr first_info_class, int num_classes, x11_lightgun_device *devinfo) { XAnyClassPtr any = first_info_class; for (int i = 0; i < num_classes; i++) { switch (any->c_class) { case ButtonClass: XButtonInfoPtr b = (XButtonInfoPtr)any; for (int button = 0; button < b->num_buttons; button++) { input_item_id itemid = (input_item_id)(ITEM_ID_BUTTON1 + button); devinfo->device()->add_item(default_button_name(button), itemid, generic_button_get_state, &devinfo->lightgun.buttons[button]); } break; } any = (XAnyClassPtr)((char *)any + any->length); } }
virtual void input_init(running_machine &machine) override { int max_guns = downcast<windows_options&>(machine.options()).dual_lightgun() ? 2 : 1; // allocate the lightgun devices for (int gunnum = 0; gunnum < max_guns; gunnum++) { static const char *const gun_names[] = { "Win32 Gun 1", "Win32 Gun 2" }; win32_lightgun_device *devinfo; int axisnum, butnum; // allocate a device devinfo = devicelist()->create_device<win32_lightgun_device>(machine, gun_names[gunnum], *this); if (devinfo == nullptr) break; // populate the axes for (axisnum = 0; axisnum < 2; axisnum++) { devinfo->device()->add_item( default_axis_name[axisnum], static_cast<input_item_id>(ITEM_ID_XAXIS + axisnum), generic_axis_get_state<LONG>, &devinfo->mouse.lX + axisnum); } // populate the buttons for (butnum = 0; butnum < 2; butnum++) { devinfo->device()->add_item( default_button_name(butnum), static_cast<input_item_id>(ITEM_ID_BUTTON1 + butnum), generic_button_get_state<BYTE>, &devinfo->mouse.rgbButtons[butnum]); } } }