Changeset 47422 in vbox for trunk/src/VBox/Devices/Input
- Timestamp:
- Jul 26, 2013 12:22:50 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 87574
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Input/testcase/tstUsbMouse.cpp
r47248 r47422 111 111 112 112 113 static int tstMouseConstruct(int iInstance, bool isAbsolute, uint8_t u8CoordShift,114 PPDMUSBINS *ppThis)113 static int tstMouseConstruct(int iInstance, const char *pcszMode, 114 uint8_t u8CoordShift, PPDMUSBINS *ppThis) 115 115 { 116 116 int rc = VERR_NO_MEMORY; … … 121 121 pCfg = CFGMR3CreateTree(NULL); 122 122 if (pCfg) 123 rc = CFGMR3Insert Integer(pCfg, "Absolute", isAbsolute);123 rc = CFGMR3InsertString(pCfg, "Mode", pcszMode); 124 124 if (RT_SUCCESS(rc)) 125 125 rc = CFGMR3InsertInteger(pCfg, "CoordShift", u8CoordShift); … … 150 150 PPDMUSBINS pThis; 151 151 RTTestSub(hTest, "simple construction and destruction"); 152 int rc = tstMouseConstruct(0, false, 1, &pThis);152 int rc = tstMouseConstruct(0, "relative", 1, &pThis); 153 153 RTTEST_CHECK_RC_OK(hTest, rc); 154 154 if (pThis) … … 157 157 158 158 159 static void testSendPosition (RTTEST hTest)159 static void testSendPositionRel(RTTEST hTest) 160 160 { 161 161 PPDMUSBINS pThis = NULL; 162 162 VUSBURB Urb; 163 RTTestSub(hTest, "sending a position event"); 164 int rc = tstMouseConstruct(0, true, 1, &pThis); 163 RTTestSub(hTest, "sending a relative position event"); 164 int rc = tstMouseConstruct(0, "relative", 1, &pThis); 165 RT_ZERO(Urb); 166 if (RT_SUCCESS(rc)) 167 rc = g_UsbHidMou.pfnUsbReset(pThis, false); 168 if (RT_SUCCESS(rc) && !s_drvTstMouse.pDrv) 169 rc = VERR_PDM_MISSING_INTERFACE; 170 RTTEST_CHECK_RC_OK(hTest, rc); 171 if (RT_SUCCESS(rc)) 172 { 173 s_drvTstMouse.pDrv->pfnPutEvent(s_drvTstMouse.pDrv, 123, -16, 1, -1, 3); 174 Urb.EndPt = 0x01; 175 rc = g_UsbHidMou.pfnUrbQueue(pThis, &Urb); 176 } 177 if (RT_SUCCESS(rc)) 178 { 179 PVUSBURB pUrb = g_UsbHidMou.pfnUrbReap(pThis, 0); 180 if (pUrb) 181 { 182 if (pUrb == &Urb) 183 { 184 if ( Urb.abData[0] != 3 /* Buttons */ 185 || Urb.abData[1] != 123 /* x */ 186 || Urb.abData[2] != 240 /* 256 - y */ 187 || Urb.abData[3] != 255 /* z */) 188 rc = VERR_GENERAL_FAILURE; 189 } 190 else 191 rc = VERR_GENERAL_FAILURE; 192 } 193 else 194 rc = VERR_GENERAL_FAILURE; 195 } 196 RTTEST_CHECK_RC_OK(hTest, rc); 197 if (pThis) 198 g_UsbHidMou.pfnDestruct(pThis); 199 } 200 201 202 static void testSendPositionAbs(RTTEST hTest) 203 { 204 PPDMUSBINS pThis = NULL; 205 VUSBURB Urb; 206 RTTestSub(hTest, "sending an absolute position event"); 207 int rc = tstMouseConstruct(0, "absolute", 1, &pThis); 165 208 RT_ZERO(Urb); 166 209 if (RT_SUCCESS(rc)) … … 173 216 s_drvTstMouse.pDrv->pfnPutEventAbs(s_drvTstMouse.pDrv, 300, 200, 1, 174 217 0, 3); 218 else 219 rc = VERR_PDM_MISSING_INTERFACE; 220 } 221 if (RT_SUCCESS(rc)) 222 { 223 Urb.EndPt = 0x01; 224 rc = g_UsbHidMou.pfnUrbQueue(pThis, &Urb); 225 } 226 if (RT_SUCCESS(rc)) 227 { 228 PVUSBURB pUrb = g_UsbHidMou.pfnUrbReap(pThis, 0); 229 if (pUrb) 230 { 231 if (pUrb == &Urb) 232 { 233 if ( *(uint16_t *)&Urb.abData[0] != 150 /* x >> 1 */ 234 || *(uint16_t *)&Urb.abData[2] != 100 /* y >> 1 */ 235 || Urb.abData[4] != 3 /* Buttons */) 236 rc = VERR_GENERAL_FAILURE; 237 } 238 else 239 rc = VERR_GENERAL_FAILURE; 240 } 241 else 242 rc = VERR_GENERAL_FAILURE; 243 } 244 RTTEST_CHECK_RC_OK(hTest, rc); 245 if (pThis) 246 g_UsbHidMou.pfnDestruct(pThis); 247 } 248 249 250 static void testSendPositionMT(RTTEST hTest) 251 { 252 PPDMUSBINS pThis = NULL; 253 VUSBURB Urb; 254 RTTestSub(hTest, "sending a multi-touch position event"); 255 int rc = tstMouseConstruct(0, "multitouch", 1, &pThis); 256 RT_ZERO(Urb); 257 if (RT_SUCCESS(rc)) 258 { 259 rc = g_UsbHidMou.pfnUsbReset(pThis, false); 260 } 261 if (RT_SUCCESS(rc)) 262 { 263 if (s_drvTstMouse.pDrv) 264 s_drvTstMouse.pDrv->pfnPutEventMT(s_drvTstMouse.pDrv, 300, 200, 2, 265 3); 175 266 else 176 267 rc = VERR_PDM_MISSING_INTERFACE; … … 189 280 { 190 281 if ( Urb.abData[0] != 1 /* Report ID */ 191 || Urb.abData[1] != 3 /* Buttons */192 || (int8_t)Urb.abData[2] != -1 /* Wheel, inverted*/193 || *(uint16_t *)&Urb.abData[4] != 1 50 /* x>> 1 */194 || *(uint16_t *)&Urb.abData[6] != 100 /* y >> 1*/)282 || Urb.abData[1] != 3 /* Contact flags */ 283 || *(uint16_t *)&Urb.abData[2] != 150 /* x >> 1 */ 284 || *(uint16_t *)&Urb.abData[4] != 100 /* y >> 1 */ 285 || Urb.abData[6] != 2 /* Contact number */) 195 286 rc = VERR_GENERAL_FAILURE; 196 287 } … … 229 320 */ 230 321 testConstructAndDestruct(hTest); 231 testSendPosition(hTest); 322 testSendPositionRel(hTest); 323 testSendPositionAbs(hTest); 324 testSendPositionMT(hTest); 232 325 return RTTestSummaryAndDestroy(hTest); 233 326 }
Note:
See TracChangeset
for help on using the changeset viewer.