Changeset 44446 in vbox
- Timestamp:
- Jan 29, 2013 3:07:28 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 83437
- Location:
- trunk/src/VBox/ExtPacks/BusMouseSample
- Files:
-
- 1 edited
- 3 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ExtPacks/BusMouseSample/BusMouse.cpp
r40280 r44446 33 33 *******************************************************************************/ 34 34 #define LOG_GROUP LOG_GROUP_DEV_KBD 35 #include "vl_vbox.h"36 35 #include <VBox/vmm/pdmdev.h> 37 36 #include <iprt/assert.h> 38 37 #include <iprt/uuid.h> 39 38 40 #include "VBoxDD.h" 41 42 /* The Microsoft Bus Mouse was an early mouse sold by Microsoft, originally 39 40 /** @page pg_busmouse DevBusMouse - Microsoft Bus Mouse Emulation 41 * 42 * The Microsoft Bus Mouse was an early mouse sold by Microsoft, originally 43 43 * introduced in 1983. The mouse had a D-shaped 9-pin connector which plugged 44 44 * into a small ISA add-in board. 45 * The mouse itself was very simple (compared to a serial mouse) and most of 46 * the logic was located on the ISA board. Later, Microsoft sold an InPort 47 * mouse, which was also called a "bus mouse", but used a different interface. 45 * 46 * The mouse itself was very simple (compared to a serial mouse) and most of the 47 * logic was located on the ISA board. Later, Microsoft sold an InPort mouse, 48 * which was also called a "bus mouse", but used a different interface. 48 49 * 49 50 * Microsoft part numbers for the Bus Mouse were 037-099 (100 ppi) … … 70 71 */ 71 72 72 /* The original bus mouse controller is fixed at I/O port 0x23C. */ 73 74 /******************************************************************************* 75 * Defined Constants And Macros * 76 *******************************************************************************/ 77 /** The original bus mouse controller is fixed at I/O port 0x23C. */ 73 78 #define BMS_IO_BASE 0x23C 74 79 #define BMS_IO_SIZE 4 75 80 76 /* Offsets relative to the I/O base. */ 77 #define BMS_PORT_DATA 0 /* 8255 Port A. */ 78 #define BMS_PORT_SIG 1 /* 8255 Port B. */ 79 #define BMS_PORT_CTRL 2 /* 8255 Port C. */ 80 #define BMS_PORT_INIT 3 /* 8255 Control Port. */ 81 82 /* Port C bits (control port). */ 83 #define BMS_CTL_INT_DIS RT_BIT(4) /* Disable IRQ (else enabled). */ 84 #define BMS_CTL_SEL_HIGH RT_BIT(5) /* Select hi nibble (else lo). */ 85 #define BMS_CTL_SEL_Y RT_BIT(6) /* Select X to read (else Y). */ 86 #define BMS_CTL_HOLD RT_BIT(7) /* Hold counter (else clear). */ 87 88 /* Port A bits (data port). */ 89 #define BMS_DATA_DELTA 0x0F /* Motion delta in lower nibble. */ 90 #define BMS_DATA_B3_UP RT_BIT(5) /* Button 3 (right) is up. */ 91 #define BMS_DATA_B2_UP RT_BIT(6) /* Button 2 (middle) is up. */ 92 #define BMS_DATA_B1_UP RT_BIT(7) /* Button 1 (left) is up. */ 93 94 /* Convert IRQ level (2/3/4/5) to a bit in the control register. */ 81 /** @name Offsets relative to the I/O base. 82 *@{ */ 83 #define BMS_PORT_DATA 0 /**< 8255 Port A. */ 84 #define BMS_PORT_SIG 1 /**< 8255 Port B. */ 85 #define BMS_PORT_CTRL 2 /**< 8255 Port C. */ 86 #define BMS_PORT_INIT 3 /**< 8255 Control Port. */ 87 /** @} */ 88 89 /** @name Port C bits (control port). 90 * @{ */ 91 #define BMS_CTL_INT_DIS RT_BIT(4) /**< Disable IRQ (else enabled). */ 92 #define BMS_CTL_SEL_HIGH RT_BIT(5) /**< Select hi nibble (else lo). */ 93 #define BMS_CTL_SEL_Y RT_BIT(6) /**< Select X to read (else Y). */ 94 #define BMS_CTL_HOLD RT_BIT(7) /**< Hold counter (else clear). */ 95 /** @} */ 96 97 /** @name Port A bits (data port). 98 * @{ */ 99 #define BMS_DATA_DELTA 0x0F /**< Motion delta in lower nibble. */ 100 #define BMS_DATA_B3_UP RT_BIT(5) /**< Button 3 (right) is up. */ 101 #define BMS_DATA_B2_UP RT_BIT(6) /**< Button 2 (middle) is up. */ 102 #define BMS_DATA_B1_UP RT_BIT(7) /**< Button 1 (left) is up. */ 103 /** @} */ 104 105 /** Convert IRQ level (2/3/4/5) to a bit in the control register. */ 95 106 #define BMS_IRQ_BIT(a) (1 << (5 - a)) 96 107 97 /* IRQ period, corresponds to approx. 30 Hz. */108 /** IRQ period, corresponds to approx. 30 Hz. */ 98 109 #define BMS_IRQ_PERIOD_MS 34 99 110 100 /* Default IRQ setting. */111 /** Default IRQ setting. */ 101 112 #define BMS_DEFAULT_IRQ 3 102 113 114 /** The saved state version. */ 103 115 #define BMS_SAVED_STATE_VERSION 1 104 116 105 117 118 /******************************************************************************* 119 * Structures and Typedefs * 120 *******************************************************************************/ 106 121 typedef struct MouState { 107 122 /* 8255A state */ … … 133 148 /** Pointer to the device instance. */ 134 149 PPDMDEVINSR0 pDevInsR0; 135 /** Critical section protecting the state. */ 136 PDMCRITSECT CritSect; 150 137 151 /** 138 152 * Mouse port - LUN#0. … … 155 169 } MouState; 156 170 171 172 157 173 #ifndef VBOX_DEVICE_STRUCT_TESTCASE 158 174 159 #ifdef IN_RING3 160 161 /* Report a change in status down the driver chain. 162 * We want to report the mouse as enabled if and only if the guest 163 * is "using" it. That way, other devices (e.g. a PS/2 or USB mouse) 164 * can receive mouse events when the bus mouse is disabled. 165 * Enabling interrupts constitutes enabling the bus mouse. The mouse 166 * is considered disabled if interrupts are disabled for several 167 * consecutive mouse timer ticks; this is because the interrupt handler 168 * in the guest typically temporarily disables interrupts and we do not 169 * want to toggle the enabled/disabled state more often than necessary. 175 # ifdef IN_RING3 176 177 /** 178 * Report a change in status down the driver chain. 179 * 180 * We want to report the mouse as enabled if and only if the guest is "using" 181 * it. That way, other devices (e.g. a PS/2 or USB mouse) can receive mouse 182 * events when the bus mouse is disabled. Enabling interrupts constitutes 183 * enabling the bus mouse. The mouse is considered disabled if interrupts are 184 * disabled for several consecutive mouse timer ticks; this is because the 185 * interrupt handler in the guest typically temporarily disables interrupts and 186 * we do not want to toggle the enabled/disabled state more often than 187 * necessary. 170 188 */ 171 189 static void bms_update_downstream_status(MouState *pThis) … … 176 194 } 177 195 178 /* Set the emulated hardware to a known initial state. */179 static void bms_reset(void *opaque) 180 { 181 MouState *s = (MouState*)opaque; 182 196 /** 197 * Set the emulated hardware to a known initial state. 198 */ 199 static void bms_reset(MouState *pThis) 200 { 183 201 /* Clear the device setup. */ 184 s->port_a =s->port_b = 0;185 s->port_c = BMS_CTL_INT_DIS; /* Interrupts disabled. */186 s->ctrl_port = 0x91; /* Default 8255A setup. */202 pThis->port_a = pThis->port_b = 0; 203 pThis->port_c = BMS_CTL_INT_DIS; /* Interrupts disabled. */ 204 pThis->ctrl_port = 0x91; /* Default 8255A setup. */ 187 205 188 206 /* Clear motion/button state. */ 189 s->cnt_held = false;190 s->mouse_dx =s->mouse_dy = 0;191 s->mouse_buttons = 0;192 s->mouse_buttons_reported = 0;193 s->disable_counter = 0;194 s->irq_toggle_counter = 1000;195 196 if ( s->mouse_enabled)197 { 198 s->mouse_enabled = false;199 bms_update_downstream_status( s);207 pThis->cnt_held = false; 208 pThis->mouse_dx = pThis->mouse_dy = 0; 209 pThis->mouse_buttons = 0; 210 pThis->mouse_buttons_reported = 0; 211 pThis->disable_counter = 0; 212 pThis->irq_toggle_counter = 1000; 213 214 if (pThis->mouse_enabled) 215 { 216 pThis->mouse_enabled = false; 217 bms_update_downstream_status(pThis); 200 218 } 201 219 } 202 220 203 221 /* Process a mouse event coming from the host. */ 204 static void bms_mouse_event( void *opaque, int dx, int dy, int dz, int dw,222 static void bms_mouse_event(MouState *pThis, int dx, int dy, int dz, int dw, 205 223 int buttons_state) 206 224 { 207 MouState *s = (MouState*)opaque;208 209 225 LogRel3(("%s: dx=%d, dy=%d, dz=%d, dw=%d, buttons_state=0x%x\n", 210 226 __PRETTY_FUNCTION__, dx, dy, dz, dw, buttons_state)); 211 227 212 228 /* Only record X/Y movement and buttons. */ 213 s->mouse_dx += dx;214 s->mouse_dy += dy;215 s->mouse_buttons = buttons_state;216 } 217 218 static void bms_timer(void *opaque)219 { 220 MouState *s = (MouState*)opaque;229 pThis->mouse_dx += dx; 230 pThis->mouse_dy += dy; 231 pThis->mouse_buttons = buttons_state; 232 } 233 234 static DECLCALLBACK(void) bmsTimerCallback(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser) 235 { 236 MouState *pThis = PDMINS_2_DATA(pDevIns, MouState *); 221 237 uint8_t irq_bit; 222 238 223 239 /* Toggle the IRQ line if interrupts are enabled. */ 224 irq_bit = BMS_IRQ_BIT( s->irq);225 226 if ( s->port_c & irq_bit)227 { 228 if (!( s->port_c & BMS_CTL_INT_DIS))229 PDMDevHlpISASetIrq( s->CTX_SUFF(pDevIns),s->irq, PDM_IRQ_LEVEL_LOW);230 s->port_c &= ~irq_bit;240 irq_bit = BMS_IRQ_BIT(pThis->irq); 241 242 if (pThis->port_c & irq_bit) 243 { 244 if (!(pThis->port_c & BMS_CTL_INT_DIS)) 245 PDMDevHlpISASetIrq(pThis->CTX_SUFF(pDevIns), pThis->irq, PDM_IRQ_LEVEL_LOW); 246 pThis->port_c &= ~irq_bit; 231 247 } 232 248 else 233 249 { 234 s->port_c |= irq_bit;235 if (!( s->port_c & BMS_CTL_INT_DIS))236 PDMDevHlpISASetIrq( s->CTX_SUFF(pDevIns),s->irq, PDM_IRQ_LEVEL_HIGH);250 pThis->port_c |= irq_bit; 251 if (!(pThis->port_c & BMS_CTL_INT_DIS)) 252 PDMDevHlpISASetIrq(pThis->CTX_SUFF(pDevIns), pThis->irq, PDM_IRQ_LEVEL_HIGH); 237 253 } 238 254 239 255 /* Handle enabling/disabling of the mouse interface. */ 240 if ( s->port_c & BMS_CTL_INT_DIS)241 { 242 if ( s->disable_counter)243 -- s->disable_counter;244 245 if ( s->disable_counter == 0 &&s->mouse_enabled)256 if (pThis->port_c & BMS_CTL_INT_DIS) 257 { 258 if (pThis->disable_counter) 259 --pThis->disable_counter; 260 261 if (pThis->disable_counter == 0 && pThis->mouse_enabled) 246 262 { 247 s->mouse_enabled = false;248 bms_update_downstream_status( s);263 pThis->mouse_enabled = false; 264 bms_update_downstream_status(pThis); 249 265 } 250 266 } 251 267 else 252 268 { 253 s->disable_counter = 8; /* Re-arm the disable countdown. */254 if (! s->mouse_enabled)269 pThis->disable_counter = 8; /* Re-arm the disable countdown. */ 270 if (!pThis->mouse_enabled) 255 271 { 256 s->mouse_enabled = true;257 bms_update_downstream_status( s);272 pThis->mouse_enabled = true; 273 bms_update_downstream_status(pThis); 258 274 } 259 275 } 260 } 261 262 #endif /* IN_RING3 */ 263 264 static void bms_set_reported_buttons(MouState *s, unsigned fButtons, unsigned fButtonMask) 265 { 266 s->mouse_buttons_reported |= (fButtons & fButtonMask); 267 s->mouse_buttons_reported &= (fButtons | ~fButtonMask); 276 277 /* Re-arm the timer. */ 278 TMTimerSetMillies(pTimer, pThis->cTimerPeriodMs); 279 } 280 281 # endif /* IN_RING3 */ 282 283 static void bms_set_reported_buttons(MouState *pThis, unsigned fButtons, unsigned fButtonMask) 284 { 285 pThis->mouse_buttons_reported |= (fButtons & fButtonMask); 286 pThis->mouse_buttons_reported &= (fButtons | ~fButtonMask); 268 287 } 269 288 270 289 /* Update the internal state after a write to port C. */ 271 static void bms_update_ctrl(MouState * s)290 static void bms_update_ctrl(MouState *pThis) 272 291 { 273 292 int32_t dx, dy; 274 293 275 294 /* If the controller is in hold state, transfer data from counters. */ 276 if ( s->port_c & BMS_CTL_HOLD)277 { 278 if (! s->cnt_held)295 if (pThis->port_c & BMS_CTL_HOLD) 296 { 297 if (!pThis->cnt_held) 279 298 { 280 s->cnt_held = true;281 dx = s->mouse_dx < 0 ? RT_MAX(s->mouse_dx, -128)282 : RT_MIN(s->mouse_dx, 127);283 dy = s->mouse_dy < 0 ? RT_MAX(s->mouse_dy, -128)284 : RT_MIN(s->mouse_dy, 127);285 s->mouse_dx -= dx;286 s->mouse_dy -= dy;287 bms_set_reported_buttons( s,s->mouse_buttons & 0x07, 0x07);299 pThis->cnt_held = true; 300 dx = pThis->mouse_dx < 0 ? RT_MAX(pThis->mouse_dx, -128) 301 : RT_MIN(pThis->mouse_dx, 127); 302 dy = pThis->mouse_dy < 0 ? RT_MAX(pThis->mouse_dy, -128) 303 : RT_MIN(pThis->mouse_dy, 127); 304 pThis->mouse_dx -= dx; 305 pThis->mouse_dy -= dy; 306 bms_set_reported_buttons(pThis, pThis->mouse_buttons & 0x07, 0x07); 288 307 289 308 /* Force type conversion. */ 290 s->held_dx = dx;291 s->held_dy = dy;309 pThis->held_dx = dx; 310 pThis->held_dy = dy; 292 311 } 293 312 } 294 313 else 295 s->cnt_held = false;314 pThis->cnt_held = false; 296 315 297 316 /* Move the appropriate nibble into port A. */ 298 if ( s->cnt_held)299 { 300 if ( s->port_c & BMS_CTL_SEL_Y)317 if (pThis->cnt_held) 318 { 319 if (pThis->port_c & BMS_CTL_SEL_Y) 301 320 { 302 if ( s->port_c & BMS_CTL_SEL_HIGH)303 s->port_a =s->held_dy >> 4;321 if (pThis->port_c & BMS_CTL_SEL_HIGH) 322 pThis->port_a = pThis->held_dy >> 4; 304 323 else 305 s->port_a =s->held_dy & 0xF;324 pThis->port_a = pThis->held_dy & 0xF; 306 325 } 307 326 else 308 327 { 309 if ( s->port_c & BMS_CTL_SEL_HIGH)310 s->port_a =s->held_dx >> 4;328 if (pThis->port_c & BMS_CTL_SEL_HIGH) 329 pThis->port_a = pThis->held_dx >> 4; 311 330 else 312 s->port_a =s->held_dx & 0xF;331 pThis->port_a = pThis->held_dx & 0xF; 313 332 } 314 333 /* And update the button bits. */ 315 s->port_a |=s->mouse_buttons & 1 ? 0 : BMS_DATA_B1_UP;316 s->port_a |=s->mouse_buttons & 2 ? 0 : BMS_DATA_B3_UP;317 s->port_a |=s->mouse_buttons & 4 ? 0 : BMS_DATA_B2_UP;334 pThis->port_a |= pThis->mouse_buttons & 1 ? 0 : BMS_DATA_B1_UP; 335 pThis->port_a |= pThis->mouse_buttons & 2 ? 0 : BMS_DATA_B3_UP; 336 pThis->port_a |= pThis->mouse_buttons & 4 ? 0 : BMS_DATA_B2_UP; 318 337 } 319 338 /* Immediately clear the IRQ if necessary. */ 320 if ( s->port_c & BMS_CTL_INT_DIS)321 { 322 PDMDevHlpISASetIrq( s->CTX_SUFF(pDevIns),s->irq, PDM_IRQ_LEVEL_LOW);323 s->port_c &= ~(BMS_IRQ_BIT(s->irq));324 } 325 } 326 327 static int bms_write_port( void *opaque, uint32_t addr, uint32_t val)339 if (pThis->port_c & BMS_CTL_INT_DIS) 340 { 341 PDMDevHlpISASetIrq(pThis->CTX_SUFF(pDevIns), pThis->irq, PDM_IRQ_LEVEL_LOW); 342 pThis->port_c &= ~(BMS_IRQ_BIT(pThis->irq)); 343 } 344 } 345 346 static int bms_write_port(MouState *pThis, uint32_t addr, uint32_t val) 328 347 { 329 348 int rc = VINF_SUCCESS; 330 MouState *s = (MouState*)opaque;331 349 332 350 LogRel3(("%s: write port %d: 0x%02x\n", __PRETTY_FUNCTION__, addr, val)); … … 335 353 case BMS_PORT_SIG: 336 354 /* Update port B. */ 337 s->port_b = val;355 pThis->port_b = val; 338 356 break; 339 357 case BMS_PORT_DATA: … … 341 359 break; 342 360 case BMS_PORT_INIT: 343 s->ctrl_port = val;361 pThis->ctrl_port = val; 344 362 break; 345 363 case BMS_PORT_CTRL: 346 364 /* Update the high nibble of port C. */ 347 s->port_c = (val & 0xF0) | (s->port_c & 0x0F);348 bms_update_ctrl( s);365 pThis->port_c = (val & 0xF0) | (pThis->port_c & 0x0F); 366 bms_update_ctrl(pThis); 349 367 break; 350 368 default: … … 355 373 } 356 374 357 static uint32_t bms_read_port(void *opaque, uint32_t addr) 358 { 359 MouState *s = (MouState*)opaque; 375 static uint32_t bms_read_port(MouState *pThis, uint32_t addr) 376 { 360 377 uint32_t val; 361 378 … … 363 380 case BMS_PORT_DATA: 364 381 /* Read port A. */ 365 val = s->port_a;382 val = pThis->port_a; 366 383 break; 367 384 case BMS_PORT_SIG: 368 385 /* Read port B. */ 369 val = s->port_b;386 val = pThis->port_b; 370 387 break; 371 388 case BMS_PORT_CTRL: 372 389 /* Read port C. */ 373 val = s->port_c;390 val = pThis->port_c; 374 391 /* Some Microsoft driver code reads the control port 10,000 times when 375 392 * determining the IRQ level. This can occur faster than the IRQ line … … 377 394 * the IRQ bit to toggle every once in a while. 378 395 */ 379 if ( s->irq_toggle_counter)380 s->irq_toggle_counter--;396 if (pThis->irq_toggle_counter) 397 pThis->irq_toggle_counter--; 381 398 else 382 399 { 383 s->irq_toggle_counter = 1000;384 val ^= BMS_IRQ_BIT( s->irq);400 pThis->irq_toggle_counter = 1000; 401 val ^= BMS_IRQ_BIT(pThis->irq); 385 402 } 386 403 break; 387 404 case BMS_PORT_INIT: 388 405 /* Read the 8255A control port. */ 389 val = s->ctrl_port;406 val = pThis->ctrl_port; 390 407 break; 391 408 default: … … 414 431 { 415 432 MouState *pThis = PDMINS_2_DATA(pDevIns, MouState *); 416 int rc = PDMCritSectEnter(&pThis->CritSect, VINF_IOM_R3_IOPORT_READ); 417 if (RT_LIKELY(rc == VINF_SUCCESS)) 418 { 419 *pu32 = bms_read_port(pThis, Port & 3); 420 PDMCritSectLeave(&pThis->CritSect); 421 Log2(("mouIOPortRead: Port=%#x cb=%d *pu32=%#x\n", Port, cb, *pu32)); 422 } 423 return rc; 433 *pu32 = bms_read_port(pThis, Port & 3); 434 Log2(("mouIOPortRead: Port=%#x cb=%d *pu32=%#x\n", Port, cb, *pu32)); 435 return VINF_SUCCESS; 424 436 } 425 437 AssertMsgFailed(("Port=%#x cb=%d\n", Port, cb)); … … 445 457 { 446 458 MouState *pThis = PDMINS_2_DATA(pDevIns, MouState *); 447 rc = PDMCritSectEnter(&pThis->CritSect, VINF_IOM_R3_IOPORT_WRITE); 448 if (RT_LIKELY(rc == VINF_SUCCESS)) 449 { 450 rc = bms_write_port(pThis, Port & 3, u32); 451 PDMCritSectLeave(&pThis->CritSect); 452 Log2(("mouIOPortWrite: Port=%#x cb=%d u32=%#x\n", Port, cb, u32)); 453 } 459 rc = bms_write_port(pThis, Port & 3, u32); 460 Log2(("mouIOPortWrite: Port=%#x cb=%d u32=%#x\n", Port, cb, u32)); 454 461 } 455 462 else … … 458 465 } 459 466 460 # ifdef IN_RING3467 # ifdef IN_RING3 461 468 462 469 /** … … 469 476 static DECLCALLBACK(int) mouSaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSMHandle) 470 477 { 471 MouState *s = PDMINS_2_DATA(pDevIns, MouState *); 472 int rc; 478 MouState *pThis = PDMINS_2_DATA(pDevIns, MouState *); 473 479 474 480 /* 8255A state. */ 475 SSMR3PutU8(pSSMHandle, s->port_a);476 SSMR3PutU8(pSSMHandle, s->port_b);477 SSMR3PutU8(pSSMHandle, s->port_c);478 SSMR3PutU8(pSSMHandle, s->ctrl_port);481 SSMR3PutU8(pSSMHandle, pThis->port_a); 482 SSMR3PutU8(pSSMHandle, pThis->port_b); 483 SSMR3PutU8(pSSMHandle, pThis->port_c); 484 SSMR3PutU8(pSSMHandle, pThis->ctrl_port); 479 485 /* Other device state. */ 480 SSMR3PutU8(pSSMHandle, s->cnt_held);481 SSMR3PutU8(pSSMHandle, s->held_dx);482 SSMR3PutU8(pSSMHandle, s->held_dy);483 SSMR3PutU8(pSSMHandle, s->irq);484 SSMR3PutU32(pSSMHandle, s->cTimerPeriodMs);486 SSMR3PutU8(pSSMHandle, pThis->cnt_held); 487 SSMR3PutU8(pSSMHandle, pThis->held_dx); 488 SSMR3PutU8(pSSMHandle, pThis->held_dy); 489 SSMR3PutU8(pSSMHandle, pThis->irq); 490 SSMR3PutU32(pSSMHandle, pThis->cTimerPeriodMs); 485 491 /* Current mouse state deltas. */ 486 SSMR3PutS32(pSSMHandle, s->mouse_dx);487 SSMR3PutS32(pSSMHandle, s->mouse_dy);488 SSMR3PutU8(pSSMHandle, s->mouse_buttons_reported);492 SSMR3PutS32(pSSMHandle, pThis->mouse_dx); 493 SSMR3PutS32(pSSMHandle, pThis->mouse_dy); 494 SSMR3PutU8(pSSMHandle, pThis->mouse_buttons_reported); 489 495 /* Timer. */ 490 rc = TMR3TimerSave(s->MouseTimer, pSSMHandle); 491 492 return rc; 493 } 494 496 return TMR3TimerSave(pThis->MouseTimer, pSSMHandle); 497 } 495 498 496 499 /** … … 506 509 { 507 510 int rc; 508 MouState * s = PDMINS_2_DATA(pDevIns, MouState *);511 MouState *pThis = PDMINS_2_DATA(pDevIns, MouState *); 509 512 510 513 Assert(uPass == SSM_PASS_FINAL); NOREF(uPass); … … 514 517 515 518 /* 8255A state. */ 516 SSMR3GetU8(pSSMHandle, & s->port_a);517 SSMR3GetU8(pSSMHandle, & s->port_b);518 SSMR3GetU8(pSSMHandle, & s->port_c);519 SSMR3GetU8(pSSMHandle, & s->ctrl_port);519 SSMR3GetU8(pSSMHandle, &pThis->port_a); 520 SSMR3GetU8(pSSMHandle, &pThis->port_b); 521 SSMR3GetU8(pSSMHandle, &pThis->port_c); 522 SSMR3GetU8(pSSMHandle, &pThis->ctrl_port); 520 523 /* Other device state. */ 521 SSMR3GetU8(pSSMHandle, & s->cnt_held);522 SSMR3GetU8(pSSMHandle, & s->held_dx);523 SSMR3GetU8(pSSMHandle, & s->held_dy);524 SSMR3GetU8(pSSMHandle, & s->irq);525 SSMR3GetU32(pSSMHandle, & s->cTimerPeriodMs);524 SSMR3GetU8(pSSMHandle, &pThis->cnt_held); 525 SSMR3GetU8(pSSMHandle, &pThis->held_dx); 526 SSMR3GetU8(pSSMHandle, &pThis->held_dy); 527 SSMR3GetU8(pSSMHandle, &pThis->irq); 528 SSMR3GetU32(pSSMHandle, &pThis->cTimerPeriodMs); 526 529 /* Current mouse state deltas. */ 527 SSMR3GetS32(pSSMHandle, & s->mouse_dx);528 SSMR3GetS32(pSSMHandle, & s->mouse_dy);529 SSMR3GetU8(pSSMHandle, & s->mouse_buttons_reported);530 SSMR3GetS32(pSSMHandle, &pThis->mouse_dx); 531 SSMR3GetS32(pSSMHandle, &pThis->mouse_dy); 532 SSMR3GetU8(pSSMHandle, &pThis->mouse_buttons_reported); 530 533 /* Timer. */ 531 rc = TMR3TimerLoad( s->MouseTimer, pSSMHandle);534 rc = TMR3TimerLoad(pThis->MouseTimer, pSSMHandle); 532 535 return rc; 533 536 } … … 571 574 */ 572 575 static DECLCALLBACK(int) mouPutEvent(PPDMIMOUSEPORT pInterface, int32_t iDeltaX, int32_t iDeltaY, 573 576 int32_t iDeltaZ, int32_t iDeltaW, uint32_t fButtonStates) 574 577 { 575 578 MouState *pThis = RT_FROM_MEMBER(pInterface, MouState, Mouse.IPort); 576 int rc = PDMCritSectEnter( &pThis->CritSect, VERR_SEM_BUSY);579 int rc = PDMCritSectEnter(pThis->CTX_SUFF(pDevIns)->CTX_SUFF(pCritSectRo), VERR_SEM_BUSY); 577 580 AssertReleaseRC(rc); 578 581 579 582 bms_mouse_event(pThis, iDeltaX, iDeltaY, iDeltaZ, iDeltaW, fButtonStates); 580 583 581 PDMCritSectLeave( &pThis->CritSect);584 PDMCritSectLeave(pThis->CTX_SUFF(pDevIns)->CTX_SUFF(pCritSectRo)); 582 585 return VINF_SUCCESS; 583 586 } … … 589 592 { 590 593 AssertFailedReturn(VERR_NOT_SUPPORTED); 591 }592 593 static DECLCALLBACK(void) mouTimerCallback(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser)594 {595 MouState *s = PDMINS_2_DATA(pDevIns, MouState *);596 597 bms_timer(s);598 599 /* Re-arm the timer. */600 TMTimerSetMillies(pTimer, s->cTimerPeriodMs);601 594 } 602 595 … … 720 713 PDMDEV_CHECK_VERSIONS_RETURN_QUIET(pDevIns); 721 714 722 PDMR3CritSectDelete(&pThis->CritSect);723 724 715 return VINF_SUCCESS; 725 716 } … … 758 749 759 750 pThis->irq = irq_lvl; 760 // @todo: remove after properly enabling RC/GC support751 ///@todo: remove after properly enabling RC/GC support 761 752 fGCEnabled = fR0Enabled = false; 762 753 Log(("busmouse: IRQ=%d fGCEnabled=%RTbool fR0Enabled=%RTbool\n", irq_lvl, fGCEnabled, fR0Enabled)); … … 773 764 774 765 /* 775 * Initialize the critical section.776 */777 rc = PDMDevHlpCritSectInit(pDevIns, &pThis->CritSect, RT_SRC_POS, "BUSMS#%d", iInstance);778 if (RT_FAILURE(rc))779 return rc;780 781 /*782 766 * Create the interrupt timer. 783 767 */ 784 rc = PDMDevHlpTMTimerCreate(pDevIns, TMCLOCK_VIRTUAL, mouTimerCallback,768 rc = PDMDevHlpTMTimerCreate(pDevIns, TMCLOCK_VIRTUAL, bmsTimerCallback, 785 769 pThis, TMTIMER_FLAGS_DEFAULT_CRIT_SECT, 786 770 "Bus Mouse Timer", &pThis->MouseTimer); … … 882 866 }; 883 867 884 # endif /* IN_RING3 */868 # endif /* IN_RING3 */ 885 869 #endif /* !VBOX_DEVICE_STRUCT_TESTCASE */ 886 870 -
trunk/src/VBox/ExtPacks/BusMouseSample/ExtPack.xml
r44441 r44446 1 1 <?xml version="1.0"?> 2 2 <VirtualBoxExtensionPack xmlns="http://www.virtualbox.org/VirtualBoxExtensionPack" version="1.0"> 3 <Name> Skeleton</Name>4 <Description>The extension pack skeleton sample.</Description>3 <Name>BusMouse</Name> 4 <Description>The bus mouse sample extension pack.</Description> 5 5 <Version revision="@VBOX_SVN_REV@">@VBOX_VERSION_STRING@</Version> 6 <MainModule>VBoxSkeletonMain</MainModule> 7 <!-- VRDEModule>VBoxVNC</VRDEModule --> 6 <MainModule>VBoxBusMouseMain</MainModule> 8 7 <ShowLicense/> 9 8 </VirtualBoxExtensionPack> -
trunk/src/VBox/ExtPacks/BusMouseSample/Makefile.kmk
r44441 r44446 1 1 # $Id$ 2 2 ## @file 3 # Sub-Makefile for the SkeletonExtension Pack Sample.3 # Sub-Makefile for the Bus Mouse Extension Pack Sample. 4 4 # 5 5 6 6 # 7 # Copyright (C) 2010-201 2Oracle Corporation7 # Copyright (C) 2010-2013 Oracle Corporation 8 8 # 9 9 # Permission is hereby granted, free of charge, to any person … … 35 35 # Extend the extension pack templates. 36 36 # 37 TEMPLATE_VBoxR3ExtPack Skeleton = For the ring-3 context modules in the Skeletonextension pack.38 TEMPLATE_VBoxR3ExtPack Skeleton_EXTENDS = VBoxR3ExtPack39 TEMPLATE_VBoxR3ExtPack Skeleton_INST = $(INST_EXTPACK)Skeleton/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/37 TEMPLATE_VBoxR3ExtPackBusMouse = For the ring-3 context modules in the Bus Mouse extension pack. 38 TEMPLATE_VBoxR3ExtPackBusMouse_EXTENDS = VBoxR3ExtPack 39 TEMPLATE_VBoxR3ExtPackBusMouse_INST = $(INST_EXTPACK)BusMouse/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/ 40 40 41 TEMPLATE_VBoxR0ExtPack Skeleton = For the ring-0 context modules in the Skeletonextension pack.42 TEMPLATE_VBoxR0ExtPack Skeleton_EXTENDS = VBoxR0ExtPack43 TEMPLATE_VBoxR0ExtPack Skeleton_INST = $(INST_EXTPACK)Skeleton/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/41 TEMPLATE_VBoxR0ExtPackBusMouse = For the ring-0 context modules in the Bus Mouse extension pack. 42 TEMPLATE_VBoxR0ExtPackBusMouse_EXTENDS = VBoxR0ExtPack 43 TEMPLATE_VBoxR0ExtPackBusMouse_INST = $(INST_EXTPACK)BusMouse/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/ 44 44 45 TEMPLATE_VBoxRcExtPack Skeleton = For the raw-mode context modules in the Skeletonextension pack.46 TEMPLATE_VBoxRcExtPack Skeleton_EXTENDS = VBoxRcExtPack47 TEMPLATE_VBoxRcExtPack Skeleton_INST = $(INST_EXTPACK)Skeleton/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/45 TEMPLATE_VBoxRcExtPackBusMouse = For the raw-mode context modules in the Bus Mouse extension pack. 46 TEMPLATE_VBoxRcExtPackBusMouse_EXTENDS = VBoxRcExtPack 47 TEMPLATE_VBoxRcExtPackBusMouse_INST = $(INST_EXTPACK)BusMouse/$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/ 48 48 49 TEMPLATE_VBoxInsExtPack Skeleton= For the install targets of an extension pack.50 TEMPLATE_VBoxInsExtPack Skeleton_EXTENDS = VBoxR0ExtPack51 TEMPLATE_VBoxInsExtPack Skeleton_INST = $(INST_EXTPACK)Skeleton/49 TEMPLATE_VBoxInsExtPackBusMouse = For the install targets of an extension pack. 50 TEMPLATE_VBoxInsExtPackBusMouse_EXTENDS = VBoxR0ExtPack 51 TEMPLATE_VBoxInsExtPackBusMouse_INST = $(INST_EXTPACK)BusMouse/ 52 52 53 53 # 54 54 # Globals. 55 55 # 56 VBOX_ SKELETON_NAME = Skeleton57 VBOX_ SKELETON_MANGLED_NAME = Skeleton58 VBOX_PATH_EXTPACK_ SKELETON = $(PATH_STAGE)/$(INST_EXTPACK)Skeleton56 VBOX_BUSMOUSE_NAME = BusMouse 57 VBOX_BUSMOUSE_MANGLED_NAME = BusMouse 58 VBOX_PATH_EXTPACK_BUSMOUSE = $(PATH_STAGE)/$(INST_EXTPACK)BusMouse 59 59 60 60 61 61 # 62 # VBox SkeletonMain - The module which the VirtualBox Main API talks to.62 # VBoxBusMouseMain - The module which the VirtualBox Main API talks to. 63 63 # 64 DLLS += VBoxSkeletonMain 65 VBoxSkeletonMain_TEMPLATE = VBoxR3ExtPackSkeleton 66 VBoxSkeletonMain_SOURCES = VBoxSkeletonMain.cpp 67 VBoxSkeletonMain_DEFS = 64 DLLS += VBoxBusMouseMain 65 VBoxBusMouseMain_TEMPLATE = VBoxR3ExtPackBusMouse 66 VBoxBusMouseMain_SOURCES = VBoxBusMouseMain.cpp 67 VBoxBusMouseMain_DEFS = 68 69 70 # 71 # The device code. 72 # 73 DLLS += VBoxBusMouseR3 74 VBoxBusMouseR3_TEMPLATE = VBoxR3ExtPackBusMouse 75 VBoxBusMouseR3_SOURCES = BusMouse.cpp 76 77 SYSMODS += VBoxBusMouseR0 78 VBoxBusMouseR0_TEMPLATE = VBoxR0ExtPackBusMouse 79 VBoxBusMouseR0_SOURCES = BusMouse.cpp 80 81 ifdef VBOX_WITH_RAW_MODE 82 SYSMODS += VBoxBusMouseRC 83 VBoxBusMouseRC_TEMPLATE = VBoxRcExtPackBusMouse 84 VBoxBusMouseRC_SOURCES = BusMouse.cpp 85 endif 86 68 87 69 88 # 70 89 # Install the description. 71 90 # 72 INSTALLS += VBox SkeletonIns73 VBox SkeletonIns_TEMPLATE = VBoxInsExtPackSkeleton74 VBox SkeletonIns_SOURCES = \75 $(VBox SkeletonIns_0_OUTDIR)/ExtPack.xml76 $(call VBOX_EDIT_VERSION_RULE_FN,VBox SkeletonIns,ExtPack.xml)91 INSTALLS += VBoxBusMouseIns 92 VBoxBusMouseIns_TEMPLATE = VBoxInsExtPackBusMouse 93 VBoxBusMouseIns_SOURCES = \ 94 $(VBoxBusMouseIns_0_OUTDIR)/ExtPack.xml 95 $(call VBOX_EDIT_VERSION_RULE_FN,VBoxBusMouseIns,ExtPack.xml) 77 96 78 97 … … 80 99 # Packing. 81 100 # 82 ifndef VBOX_WITHOUT_EXTPACK_ SKELETON_PACKING83 PACKING += $(VBOX_PATH_PACKAGES)/$(VBOX_ SKELETON_MANGLED_NAME)-$(VBOX_VERSION_STRING)r$(VBOX_SVN_REV).vbox-extpack101 ifndef VBOX_WITHOUT_EXTPACK_BUSMOUSE_PACKING 102 PACKING += $(VBOX_PATH_PACKAGES)/$(VBOX_BUSMOUSE_MANGLED_NAME)-$(VBOX_VERSION_STRING)r$(VBOX_SVN_REV).vbox-extpack 84 103 endif 85 104 … … 91 110 92 111 # Build the file list. The macro takes 1=darwin.x86, 2=dist/VirtualBox.app/Contents/MacOS, 3=dylib 93 VBOX_SKELETON_FILES_MACRO = \ 94 $(PATH_OUT_BASE)/$(1)/$(KBUILD_TYPE)/$(2)/ExtensionPacks/$(VBOX_SKELETON_MANGLED_NAME)/$(1)/VBoxSkeletonMain.$(3)=>$(1)/VBoxSkeletonMain.$(3) 112 VBOX_BUSMOUSE_FILES_MACRO = \ 113 $(PATH_OUT_BASE)/$(1)/$(KBUILD_TYPE)/$(2)/ExtensionPacks/$(VBOX_BUSMOUSE_MANGLED_NAME)/$(1)/VBoxBusMouseMain.$(3)=>$(1)/VBoxBusMouseMain.$(3) \ 114 $(PATH_OUT_BASE)/$(1)/$(KBUILD_TYPE)/$(2)/ExtensionPacks/$(VBOX_BUSMOUSE_MANGLED_NAME)/$(1)/VBoxBusMouseR3.$(3)=>$(1)/VBoxBusMouseR3.$(3) \ 115 $(PATH_OUT_BASE)/$(1)/$(KBUILD_TYPE)/$(2)/ExtensionPacks/$(VBOX_BUSMOUSE_MANGLED_NAME)/$(1)/VBoxBusMouseR0.r0=>$(1)/VBoxBusMouseR0.r0 116 ifdef VBOX_WITH_RAW_MODE 117 VBOX_BUSMOUSE_FILES_MACRO += \ 118 $(PATH_OUT_BASE)/$(1)/$(KBUILD_TYPE)/$(2)/ExtensionPacks/$(VBOX_BUSMOUSE_MANGLED_NAME)/$(1)/VBoxBusMouseRC.rc=>$(1)/VBoxBusMouseRC.rc 119 endif 95 120 96 VBOX_ SKELETON_FILES := \97 $(VBOX_PATH_EXTPACK_ SKELETON)/ExtPack.xml=>ExtPack.xml121 VBOX_BUSMOUSE_FILES := \ 122 $(VBOX_PATH_EXTPACK_BUSMOUSE)/ExtPack.xml=>ExtPack.xml 98 123 99 124 if1of (darwin.amd64, $(VBOX_WITH_EXTPACK_OS_ARCHS)) 100 VBOX_ SKELETON_FILES += $(call VBOX_SKELETON_FILES_MACRO,darwin.amd64,dist/VirtualBox.app/Contents/MacOS,dylib)125 VBOX_BUSMOUSE_FILES += $(call VBOX_BUSMOUSE_FILES_MACRO,darwin.amd64,dist/VirtualBox.app/Contents/MacOS,dylib) 101 126 endif 102 127 if1of (darwin.x86, $(VBOX_WITH_EXTPACK_OS_ARCHS)) 103 VBOX_ SKELETON_FILES += $(call VBOX_SKELETON_FILES_MACRO,darwin.x86,dist/VirtualBox.app/Contents/MacOS,dylib)128 VBOX_BUSMOUSE_FILES += $(call VBOX_BUSMOUSE_FILES_MACRO,darwin.x86,dist/VirtualBox.app/Contents/MacOS,dylib) 104 129 endif 105 130 if1of (freebsd.amd64, $(VBOX_WITH_EXTPACK_OS_ARCHS)) 106 VBOX_ SKELETON_FILES += $(call VBOX_SKELETON_FILES_MACRO,freebsd.amd64,bin,so)131 VBOX_BUSMOUSE_FILES += $(call VBOX_BUSMOUSE_FILES_MACRO,freebsd.amd64,bin,so) 107 132 endif 108 133 if1of (freebsd.x86, $(VBOX_WITH_EXTPACK_OS_ARCHS)) 109 VBOX_ SKELETON_FILES += $(call VBOX_SKELETON_FILES_MACRO,freebsd.x86,bin,so)134 VBOX_BUSMOUSE_FILES += $(call VBOX_BUSMOUSE_FILES_MACRO,freebsd.x86,bin,so) 110 135 endif 111 136 if1of (linux.amd64, $(VBOX_WITH_EXTPACK_OS_ARCHS)) 112 VBOX_ SKELETON_FILES += $(call VBOX_SKELETON_FILES_MACRO,linux.amd64,bin,so)137 VBOX_BUSMOUSE_FILES += $(call VBOX_BUSMOUSE_FILES_MACRO,linux.amd64,bin,so) 113 138 endif 114 139 if1of (linux.x86, $(VBOX_WITH_EXTPACK_OS_ARCHS)) 115 VBOX_ SKELETON_FILES += $(call VBOX_SKELETON_FILES_MACRO,linux.x86,bin,so)140 VBOX_BUSMOUSE_FILES += $(call VBOX_BUSMOUSE_FILES_MACRO,linux.x86,bin,so) 116 141 endif 117 142 if1of (os2.x86, $(VBOX_WITH_EXTPACK_OS_ARCHS)) 118 VBOX_ SKELETON_FILES += $(call VBOX_SKELETON_FILES_MACRO,os2.x86,bin,so)143 VBOX_BUSMOUSE_FILES += $(call VBOX_BUSMOUSE_FILES_MACRO,os2.x86,bin,so) 119 144 endif 120 145 if1of (solaris.amd64, $(VBOX_WITH_EXTPACK_OS_ARCHS)) 121 VBOX_ SKELETON_FILES += $(call VBOX_SKELETON_FILES_MACRO,solaris.amd64,bin,so)146 VBOX_BUSMOUSE_FILES += $(call VBOX_BUSMOUSE_FILES_MACRO,solaris.amd64,bin,so) 122 147 endif 123 148 if1of (solaris.x86, $(VBOX_WITH_EXTPACK_OS_ARCHS)) 124 VBOX_ SKELETON_FILES += $(call VBOX_SKELETON_FILES_MACRO,solaris.x86,bin,so)149 VBOX_BUSMOUSE_FILES += $(call VBOX_BUSMOUSE_FILES_MACRO,solaris.x86,bin,so) 125 150 endif 126 151 if1of (win.amd64, $(VBOX_WITH_EXTPACK_OS_ARCHS)) 127 VBOX_ SKELETON_FILES += $(call VBOX_SKELETON_FILES_MACRO,win.amd64,bin,dll)152 VBOX_BUSMOUSE_FILES += $(call VBOX_BUSMOUSE_FILES_MACRO,win.amd64,bin,dll) 128 153 endif 129 154 if1of (win.x86, $(VBOX_WITH_EXTPACK_OS_ARCHS)) 130 VBOX_ SKELETON_FILES += $(call VBOX_SKELETON_FILES_MACRO,win.x86,bin,dll)155 VBOX_BUSMOUSE_FILES += $(call VBOX_BUSMOUSE_FILES_MACRO,win.x86,bin,dll) 131 156 endif 132 157 133 158 # Pack it all up using a temporary staging directory. 134 $(VBOX_PATH_PACKAGES)/$(VBOX_ SKELETON_MANGLED_NAME)-$(VBOX_VERSION_STRING)r$(VBOX_SVN_REV).vbox-extpack: \135 $$(foreach file, $$(VBOX_ SKELETON_FILES), $$(firstword $$(subst =>,$$(SP),$$(file)))) \159 $(VBOX_PATH_PACKAGES)/$(VBOX_BUSMOUSE_MANGLED_NAME)-$(VBOX_VERSION_STRING)r$(VBOX_SVN_REV).vbox-extpack: \ 160 $$(foreach file, $$(VBOX_BUSMOUSE_FILES), $$(firstword $$(subst =>,$$(SP),$$(file)))) \ 136 161 | $(VBOX_PATH_PACKAGES)/ 137 $(RM) -f $(wildcard $(VBOX_PATH_PACKAGES)/$(VBOX_ SKELETON_MANGLED_NAME)-*.vbox-extpack) \138 $(VBox SkeletonIns_0_OUTDIR)/ExtPack.manifest \139 $(VBox SkeletonIns_0_OUTDIR)/ExtPack.signature162 $(RM) -f $(wildcard $(VBOX_PATH_PACKAGES)/$(VBOX_BUSMOUSE_MANGLED_NAME)-*.vbox-extpack) \ 163 $(VBoxBusMouseIns_0_OUTDIR)/ExtPack.manifest \ 164 $(VBoxBusMouseIns_0_OUTDIR)/ExtPack.signature 140 165 # Stage all the files 141 $(RM) -Rf $(VBox SkeletonIns_0_OUTDIR)/Stage/142 $(foreach file, $(VBOX_ SKELETON_FILES),\143 $(NLTAB)$(MKDIR) -p $(dir $(lastword $(subst =>,$(SP)$(VBox SkeletonIns_0_OUTDIR)/Stage/,$(file)))) \144 $(NLTAB)$(CP) $(subst =>,$(SP)$(VBox SkeletonIns_0_OUTDIR)/Stage/,$(file)) )166 $(RM) -Rf $(VBoxBusMouseIns_0_OUTDIR)/Stage/ 167 $(foreach file, $(VBOX_BUSMOUSE_FILES),\ 168 $(NLTAB)$(MKDIR) -p $(dir $(lastword $(subst =>,$(SP)$(VBoxBusMouseIns_0_OUTDIR)/Stage/,$(file)))) \ 169 $(NLTAB)$(CP) $(subst =>,$(SP)$(VBoxBusMouseIns_0_OUTDIR)/Stage/,$(file)) ) 145 170 # Create the manifest 146 171 $(VBOX_RTMANIFEST) \ 147 --manifest $(VBox SkeletonIns_0_OUTDIR)/Stage/ExtPack.manifest \148 --chdir $(VBox SkeletonIns_0_OUTDIR)/Stage/ \149 $(foreach file, $(VBOX_ SKELETON_FILES), $(lastword $(subst =>,$(SP),$(file))))150 $(APPEND) $(VBox SkeletonIns_0_OUTDIR)/Stage/ExtPack.signature "todo"172 --manifest $(VBoxBusMouseIns_0_OUTDIR)/Stage/ExtPack.manifest \ 173 --chdir $(VBoxBusMouseIns_0_OUTDIR)/Stage/ \ 174 $(foreach file, $(VBOX_BUSMOUSE_FILES), $(lastword $(subst =>,$(SP),$(file)))) 175 $(APPEND) $(VBoxBusMouseIns_0_OUTDIR)/Stage/ExtPack.signature "todo" 151 176 $(CHMOD) a+r \ 152 $(VBox SkeletonIns_0_OUTDIR)/Stage/ExtPack.manifest \153 $(VBox SkeletonIns_0_OUTDIR)/Stage/ExtPack.signature177 $(VBoxBusMouseIns_0_OUTDIR)/Stage/ExtPack.manifest \ 178 $(VBoxBusMouseIns_0_OUTDIR)/Stage/ExtPack.signature 154 179 # Tar it up. 155 tar -cvf - -C $(VBox SkeletonIns_0_OUTDIR)/Stage/ . | gzip -9c > $@180 tar -cvf - -C $(VBoxBusMouseIns_0_OUTDIR)/Stage/ . | gzip -9c > $@ 156 181 # Clean up 157 $(RM) -Rf $(VBox SkeletonIns_0_OUTDIR)/Stage/182 $(RM) -Rf $(VBoxBusMouseIns_0_OUTDIR)/Stage/ 158 183 159 184 BLDDIRS += $(VBOX_PATH_PACKAGES)/ -
trunk/src/VBox/ExtPacks/BusMouseSample/VBoxBusMouseMain.cpp
r44441 r44446 1 1 /* $Id$ */ 2 2 /** @file 3 * Skeletonmain module.3 * Bus Mouse main module. 4 4 */ 5 5 6 6 /* 7 * Copyright (C) 2010-201 2Oracle Corporation7 * Copyright (C) 2010-2013 Oracle Corporation 8 8 * 9 9 * Permission is hereby granted, free of charge, to any person
Note:
See TracChangeset
for help on using the changeset viewer.