Example #1
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="port"></param>
        /// <param name="mouse"></param>
        static void MouseLoop(UsbController port, UsbStream mouse)
        {
            // Mouse report storage.
            byte[] report = new byte[5];

            // Offsets into mouse report storage.
            const byte BUTTONS = 0;
            const byte X_MOVEMENT = 1;
            const byte Y_MOVEMENT = 2;

            // Size of mouse movement for each report (every 10 mS).
            const byte mouseStep = 3;
            bool fAddMouse = true;

            // While the Done button is not pressed...
            while (buttons.Done.Read())
            {
                // Perform this operation once every 10 milliseconds (actually a 
                // bit more than 10 milliseconds).  We've asked the host to 
                // query for mouse info at least every 10 milliseconds, but it 
                // actually queries every 8 milliseconds - it's OK not to 
                // respond to every query.
                Thread.Sleep(10);

                report[X_MOVEMENT] = 0;      // Zero X movement
                report[Y_MOVEMENT] = 0;      // Zero Y movement

                // Add X,Y movement to the mouse report.
                if (!buttons.Left.Read())
                    report[X_MOVEMENT] -= mouseStep;
                if (!buttons.Right.Read())
                    report[X_MOVEMENT] += mouseStep;
                if (!buttons.Up.Read())
                    report[Y_MOVEMENT] -= mouseStep;
                if (!buttons.Down.Read())
                    report[Y_MOVEMENT] += mouseStep;

                if (!buttons.Toggle.Read())
                {
                    if (mouse != null)
                    {
                        mouse.Dispose();
                        mouse = null;
                    }

                    fAddMouse = !fAddMouse;

                    ConfigureUsbPort(port, fAddMouse);

                    if (fAddMouse)
                    {
                        mouse = port.CreateUsbStream(3, UsbStream.NullEndpoint);
                    }
                }

                // Add the button state to the mouse report.
                report[BUTTONS] = (byte)((!buttons.LeftMouseButton.Read() ?
                    1 : 0) | (!buttons.RightMouseButton.Read() ? 2 : 0));

                if (mouse != null)
                {
                    // Send the mouse report to the host.
                    mouse.Write(report, 0, 3);
                }
            }

            // Wait for the Done button to be released.
            while (!buttons.Done.Read()) ;
        }