VirtualBox

Changeset 27060 in vbox for trunk/src/VBox/Devices


Ignore:
Timestamp:
Mar 4, 2010 9:44:59 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
58377
Message:

Devices, Main: add support for multiple pointing devices and let the guest choose which to use

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Input/DevPS2.cpp

    r26925 r27060  
    797797            kbd_mouse_send_packet(s, false);
    798798}
     799
     800/* Report a change in status down the driver chain */
     801static void kbd_mouse_update_downstream_status(KBDState *pThis)
     802{
     803    PPDMIMOUSECONNECTOR pDrv = pThis->Mouse.pDrv;
     804    bool fEnabled = pThis->mouse_status & MOUSE_STATUS_ENABLED;
     805    pDrv->pfnReportModes(pDrv, fEnabled, false);
     806}
    799807#endif /* IN_RING3 */
    800808
     
    804812    LogRelFlowFunc(("kbd: write mouse 0x%02x\n", val));
    805813#endif
     814    int rc = VINF_SUCCESS;
    806815    /* Flush the mouse command response queue. */
    807816    s->mouse_command_queue.count = 0;
     
    863872            break;
    864873        case AUX_ENABLE_DEV:
     874#ifdef IN_RING3
     875            LogRelFlowFunc(("Enabling mouse device\n"));
    865876            s->mouse_status |= MOUSE_STATUS_ENABLED;
    866877            kbd_queue(s, AUX_ACK, 1);
     878            kbd_mouse_update_downstream_status(s);
     879#else
     880            LogRelFlowFunc(("Enabling mouse device, R0 stub\n"));
     881            rc = VINF_IOM_HC_IOPORT_WRITE;
     882#endif
    867883            break;
    868884        case AUX_DISABLE_DEV:
     885#ifdef IN_RING3
    869886            s->mouse_status &= ~MOUSE_STATUS_ENABLED;
    870887            kbd_queue(s, AUX_ACK, 1);
     
    873890            s->mouse_event_queue.rptr = 0;
    874891            s->mouse_event_queue.wptr = 0;
     892            kbd_mouse_update_downstream_status(s);
     893#else
     894            rc = VINF_IOM_HC_IOPORT_WRITE;
     895#endif
    875896            break;
    876897        case AUX_SET_DEFAULT:
     898#ifdef IN_RING3
    877899            s->mouse_sample_rate = 100;
    878900            s->mouse_resolution = 2;
    879901            s->mouse_status = 0;
    880902            kbd_queue(s, AUX_ACK, 1);
     903            kbd_mouse_update_downstream_status(s);
     904#else
     905            rc = VINF_IOM_HC_IOPORT_WRITE;
     906#endif
    881907            break;
    882908        case AUX_RESET:
     909#ifdef IN_RING3
    883910            s->mouse_sample_rate = 100;
    884911            s->mouse_resolution = 2;
     
    892919            s->mouse_event_queue.rptr = 0;
    893920            s->mouse_event_queue.wptr = 0;
     921            kbd_mouse_update_downstream_status(s);
     922#else
     923            rc = VINF_IOM_HC_IOPORT_WRITE;
     924#endif
    894925            break;
    895926        default:
     
    9751006        break;
    9761007    }
    977     return VINF_SUCCESS;
     1008    return rc;
    9781009}
    9791010
     
    10251056        break;
    10261057    }
    1027     s->write_cmd = 0;
     1058    /** @todo this was unconditional before.  That looks wrong to me, but I
     1059     * just can't believe that no one would have noticed before... */
     1060    if (rc != VINF_IOM_HC_IOPORT_WRITE)
     1061        s->write_cmd = 0;
    10281062    return rc;
    10291063}
     
    10471081    s->translate = 0;
    10481082    s->scancode_set = 2;
    1049     s->mouse_status = 0;
     1083    if (s->mouse_status)
     1084    {
     1085        s->mouse_status = 0;
     1086        kbd_mouse_update_downstream_status(s);
     1087    }
    10501088    s->mouse_resolution = 0;
    10511089    s->mouse_sample_rate = 0;
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette