Changeset 26638 in vbox for trunk/src/VBox/Devices
- Timestamp:
- Feb 18, 2010 9:18:04 PM (15 years ago)
- Location:
- trunk/src/VBox/Devices/Input
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Input/DevPS2.cpp
r26624 r26638 230 230 int32_t mouse_dw; 231 231 int32_t mouse_flags; 232 int32_t mouse_cx;233 int32_t mouse_cy;232 uint32_t mouse_cx; 233 uint32_t mouse_cy; 234 234 uint8_t mouse_buttons; 235 235 uint8_t mouse_buttons_reported; … … 847 847 { 848 848 int aux = fToCmdQueue ? 1 : 2; 849 int cx1 = s->mouse_cx * 4096/ 0xffff;850 int cy1 = 4096 - (s->mouse_cy * 4096/ 0xffff);849 unsigned cx1 = s->mouse_cx * 4095 / 0xffff; 850 unsigned cy1 = 4095 - (s->mouse_cy * 4095 / 0xffff); 851 851 unsigned fButtons = s->mouse_buttons & 0x03; 852 unsigned int b ;852 unsigned int b[6]; 853 853 854 854 LogRel3(("%s: cx1=%d, cy1=%d, fButtons=0x%x\n", __PRETTY_FUNCTION__, 855 855 cx1, cy1, fButtons)); 856 b = 4 /* Screen is being touched */ | fButtons; 857 kbd_queue(s, b, aux); 858 b = ((cy1 << 2) & 0xc0) | (cx1 >> 6); 859 kbd_queue(s, b, aux); 860 b = ((cx1 << 2) & 0xc0) | (cx1 & 0x3f); 861 kbd_queue(s, b, aux); 862 kbd_queue(s, 0xc0, aux); /* This byte is really wasted in the protocol */ 863 b = ((cx1 << 2) & 0xc0) | (cy1 >> 6); 864 kbd_queue(s, b, aux); 865 b = ((cy1 << 2) & 0xc0) | (cy1 & 0x3f); 866 kbd_queue(s, b, aux); 856 b[0] = 4 /* Screen is being touched */ | fButtons; 857 Assert((b[0] & 0xf8) == 0); 858 kbd_queue(s, b[0], aux); 859 b[1] = ((cy1 << 2) & 0xc0) | (cx1 >> 6); 860 kbd_queue(s, b[1], aux); 861 b[2] = ((cx1 << 2) & 0xc0) | (cx1 & 0x3f); 862 Assert(((b[2] & 0x30) << 2) == (b[2] & 0xc0)); 863 kbd_queue(s, b[2], aux); 864 b[3] = 0xc0; 865 kbd_queue(s, b[3], aux); /* This byte is really wasted in the protocol */ 866 b[4] = ((cx1 << 2) & 0xc0) | (cy1 >> 6); 867 Assert((b[4] & 0xc0) == (b[2] & 0xc0)); 868 kbd_queue(s, b[4], aux); 869 b[5] = ((cy1 << 2) & 0xc0) | (cy1 & 0x3f); 870 Assert( (((b[5] & 0x30) << 2) == (b[1] & 0xc0)) 871 && ((b[5] & 0xc0) == (b[1] & 0xc0))); 872 kbd_queue(s, b[5], aux); 867 873 } 868 874 … … 1339 1345 if (version_id > 3) 1340 1346 { 1341 SSMR3Get S32(f, &s->mouse_cx);1342 SSMR3Get S32(f, &s->mouse_cy);1347 SSMR3GetU32(f, &s->mouse_cx); 1348 SSMR3GetU32(f, &s->mouse_cy); 1343 1349 SSMR3GetU8(f, &s->mouse_buttons_reported); 1344 1350 SSMR3GetU8(f, &s->mouse_last_button); … … 1681 1687 * @param i32cY The Y value. 1682 1688 */ 1683 static DECLCALLBACK(int) kbdMousePutEventAbs(PPDMIMOUSEPORT pInterface, int32_t i32cX, int32_t i32cY)1689 static DECLCALLBACK(int) kbdMousePutEventAbs(PPDMIMOUSEPORT pInterface, uint32_t u32cX, uint32_t u32cY, int32_t dz, int32_t dw, uint32_t fButtons) 1684 1690 { 1685 1691 KBDState *pThis = RT_FROM_MEMBER(pInterface, KBDState, Mouse.IPort); … … 1687 1693 AssertReleaseRC(rc); 1688 1694 1689 pc_kbd_mouse_event_abs(pThis, i32cX, i32cY); 1695 if (u32cX != pThis->mouse_cx || u32cY != pThis->mouse_cy) 1696 pc_kbd_mouse_event_abs(pThis, u32cX, u32cY); 1697 if (dz || dw || fButtons != pThis->mouse_buttons) 1698 pc_kbd_mouse_event(pThis, 0, 0, dz, dw, fButtons); 1690 1699 1691 1700 PDMCritSectLeave(&pThis->CritSect); -
trunk/src/VBox/Devices/Input/DrvMouseQueue.cpp
r26624 r26638 75 75 int32_t i32DeltaW; 76 76 uint32_t fButtonStates; 77 int32_t i32cX;78 int32_t i32cY;77 uint32_t u32cX; 78 uint32_t u32cY; 79 79 } DRVMOUSEQUEUEITEM, *PDRVMOUSEQUEUEITEM; 80 80 … … 112 112 * @param i32DeltaY The Y delta. 113 113 * @param i32DeltaZ The Z delta. 114 * @param i32DeltaW The W delta. 114 115 * @param fButtonStates The button states. 115 116 * @thread Any thread. … … 142 143 * @returns VBox status code. 143 144 * @param pInterface Pointer to interface structure. 144 * @param i32cX The X value. 145 * @param i32cY The Y value. 145 * @param u32cX The X value. 146 * @param u32cY The Y value. 147 * @param i32DeltaZ The Z delta. 148 * @param i32DeltaW The W delta. 149 * @param fButtonStates The button states. 146 150 * @thread Any thread. 147 151 */ 148 static DECLCALLBACK(int) drvMouseQueuePutEventAbs(PPDMIMOUSEPORT pInterface, int32_t i32cX, int32_t i32cY)152 static DECLCALLBACK(int) drvMouseQueuePutEventAbs(PPDMIMOUSEPORT pInterface, uint32_t u32cX, uint32_t u32cY, int32_t i32DeltaZ, int32_t i32DeltaW, uint32_t fButtonStates) 149 153 { 150 154 PDRVMOUSEQUEUE pDrv = IMOUSEPORT_2_DRVMOUSEQUEUE(pInterface); … … 156 160 { 157 161 pItem->fAbs = 1; 158 pItem->i32cX = i32cX; 159 pItem->i32cY = i32cY; 162 pItem->u32cX = u32cX; 163 pItem->u32cY = u32cY; 164 pItem->i32DeltaZ = i32DeltaZ; 165 pItem->i32DeltaW = i32DeltaW; 166 pItem->fButtonStates = fButtonStates; 160 167 PDMQueueInsert(pDrv->pQueue, &pItem->Core); 161 168 return VINF_SUCCESS; … … 203 210 rc = pThis->pUpPort->pfnPutEvent(pThis->pUpPort, pItem->i32DeltaX, pItem->i32DeltaY, pItem->i32DeltaZ, pItem->i32DeltaW, pItem->fButtonStates); 204 211 else 205 rc = pThis->pUpPort->pfnPutEventAbs(pThis->pUpPort, pItem-> i32cX, pItem->i32cY);212 rc = pThis->pUpPort->pfnPutEventAbs(pThis->pUpPort, pItem->u32cX, pItem->u32cY, pItem->i32DeltaZ, pItem->i32DeltaW, pItem->fButtonStates); 206 213 return RT_SUCCESS(rc); 207 214 }
Note:
See TracChangeset
for help on using the changeset viewer.