Пример #1
0
 private void JoypadDevice_AnalogStickDidMove(JoypadDevice device, JoyInputIdentifier stick, JoypadStickPosition newPosition)
 {
     float normalizedDistance = newPosition.Distance / 55.0f;	// Move this into the SDK.
     moveX = normalizedDistance * Mathf.Cos(newPosition.Angle);
     moveY = normalizedDistance * Mathf.Sin(newPosition.Angle);
     print(string.Format("Analog Stick moved - Distance: {0}  Angle:{1}", normalizedDistance, newPosition.Angle));
 }
Пример #2
0
        private void setJOY_CTRL(uint value)
        {
            TXenable  = (value & 0x1) != 0;
            JoyOutput = ((value >> 1) & 0x1) != 0;
            RXenable  = ((value >> 2) & 0x1) != 0;
            joyControl_unknow_bit3 = ((value >> 3) & 0x1) != 0;
            controlAck             = ((value >> 4) & 0x1) != 0;
            joyControl_unknow_bit5 = ((value >> 5) & 0x1) != 0;
            controlReset           = ((value >> 6) & 0x1) != 0;
            RXinterruptMode        = (value >> 8) & 0x3;
            TXinterruptEnable      = ((value >> 10) & 0x1) != 0;
            RXinterruptEnable      = ((value >> 11) & 0x1) != 0;
            ACKinterruptEnable     = ((value >> 12) & 0x1) != 0;
            desiredSlotNumber      = (value >> 13) & 0x1;

            if (controlAck)
            {
                //Console.WriteLine("[JOYPAD] CONTROL ACK");
                RXparityError    = false;
                interruptRequest = false;
                controlAck       = false;
            }

            if (controlReset)
            {
                //Console.WriteLine("[JOYPAD] CONTROL RESET");
                joypadDevice = JoypadDevice.None;
                controller.resetToIdle();
                memoryCard.resetToIdle();
                fifoFull = false;

                setJOY_MODE(0);
                setJOY_CTRL(0);
                JOY_BAUD = 0;

                JOY_RX_DATA = 0xFF;
                JOY_TX_DATA = 0xFF;

                TXreadyFlag1 = true;
                TXreadyFlag2 = true;

                controlReset = false;
            }

            if (!JoyOutput)
            {
                joypadDevice = JoypadDevice.None;
                memoryCard.resetToIdle();
                controller.resetToIdle();
            }
        }
Пример #3
0
        public void write(uint addr, uint value)
        {
            switch (addr & 0xFF)
            {
            case 0x40:
                //Console.WriteLine("[JOYPAD] TX DATA ENQUEUE " + value.ToString("x2"));
                JOY_TX_DATA = (byte)value;
                JOY_RX_DATA = 0xFF;
                fifoFull    = true;

                TXreadyFlag1 = true;
                TXreadyFlag2 = false;

                if (JoyOutput)
                {
                    TXreadyFlag2 = true;

                    //Console.WriteLine("[JOYPAD] DesiredSlot == " + desiredSlotNumber);
                    if (desiredSlotNumber == 1)
                    {
                        JOY_RX_DATA   = 0xFF;
                        ackInputLevel = false;
                        return;
                    }

                    if (joypadDevice == JoypadDevice.None)
                    {
                        //Console.ForegroundColor = ConsoleColor.Red;
                        if (value == 0x01)
                        {
                            //Console.ForegroundColor = ConsoleColor.Green;
                            joypadDevice = JoypadDevice.Controller;
                        }
                        else if (value == 0x81)
                        {
                            //Console.ForegroundColor = ConsoleColor.Blue;
                            joypadDevice = JoypadDevice.MemoryCard;
                        }
                    }

                    if (joypadDevice == JoypadDevice.Controller)
                    {
                        JOY_RX_DATA   = controller.process(JOY_TX_DATA);
                        ackInputLevel = controller.ack;
                        if (ackInputLevel)
                        {
                            counter = 500;
                        }
                        //Console.WriteLine($"[JOYPAD] Conroller TICK Enqueued RX response {JOY_RX_DATA:x2} ack: {ackInputLevel}");
                        //Console.ReadLine();
                    }
                    else if (joypadDevice == JoypadDevice.MemoryCard)
                    {
                        JOY_RX_DATA   = memoryCard.process(JOY_TX_DATA);
                        ackInputLevel = memoryCard.ack;
                        if (ackInputLevel)
                        {
                            counter = 500;
                        }
                        //Console.WriteLine($"[JOYPAD] MemCard TICK Enqueued RX response {JOY_RX_DATA:x2} ack: {ackInputLevel}");
                        //Console.ReadLine();
                    }
                    else
                    {
                        ackInputLevel = false;
                    }
                    if (ackInputLevel == false)
                    {
                        joypadDevice = JoypadDevice.None;
                    }
                }
                else
                {
                    joypadDevice = JoypadDevice.None;
                    memoryCard.resetToIdle();
                    controller.resetToIdle();

                    ackInputLevel = false;
                }


                break;

            case 0x48:
                //Console.WriteLine($"[JOYPAD] SET MODE {value:x4}");
                setJOY_MODE(value);
                break;

            case 0x4A:
                //Console.WriteLine($"[JOYPAD] SET CONTROL {value:x4}");
                setJOY_CTRL(value);
                break;

            case 0x4E:
                //Console.WriteLine($"[JOYPAD] SET BAUD {value:x4}");
                JOY_BAUD = (ushort)value;
                reloadTimer();
                break;

            default:
                Console.WriteLine($"Unhandled JOYPAD Write {addr:x8} {value:x8}");
                //Console.ReadLine();
                break;
            }
        }
Пример #4
0
 private void JoypadDevice_DpadButtonDown(JoypadDevice device, JoyInputIdentifier dpad, JoyDpadButton dpadButton)
 {
     print(string.Format("Dpad {0} pressed {1}", dpad, dpadButton));
 }
Пример #5
0
 /////////////////////////////////////////////////////////////////////////////////////////////////////
 private void JoypadDevice_DidAccelerate(JoypadDevice device, JoypadAcceleration accel)
 {
     moveY = accel.X;
     moveX = -1 * accel.Y;
 }
Пример #6
0
 private void JoypadDevice_ButtonUp(JoypadDevice device, JoyInputIdentifier button)
 {
     print(string.Format("Button {0} Released", button));
 }
Пример #7
0
 private void JoypadDevice_ButtonDown(JoypadDevice device, JoyInputIdentifier button)
 {
     print(string.Format("Button {0} Pressed", button));
 }
Пример #8
0
 private void JoypadManager_DidLoseDevice(JoypadManager sender, JoypadDevice device)
 {
 }
Пример #9
0
 /////////////////////////////////////////////////////////////////////////////////////////////////////
 private void JoypadManager_DidFindDevice(JoypadManager sender, JoypadDevice device, bool previouslyConnected)
 {
     joypadManager.ConnectToDevice(device, 1);
 }
Пример #10
0
 private void JoypadManager_DeviceDidDisconnect(JoypadManager sender, JoypadDevice device, uint player)
 {
     device.DidAccelerate 		-= new JoypadDevice.DidAccelerateHandler(JoypadDevice_DidAccelerate);
        	device.ButtonDown 			-= new JoypadDevice.ButtonDownHandler(JoypadDevice_ButtonDown);
        	device.ButtonUp 			-= new JoypadDevice.ButtonUpHandler(JoypadDevice_ButtonUp);
        	device.DpadButtonDown 		-= new JoypadDevice.DpadButtonDownHandler(JoypadDevice_DpadButtonDown);
        	device.DpadButtonUp 		-= new JoypadDevice.DpadButtonUpHandler(JoypadDevice_DpadButtonUp);
        	device.AnalogStickDidMove 	-= new JoypadDevice.AnalogStickDidMoveHandler(JoypadDevice_AnalogStickDidMove);
 }
Пример #11
0
    private void JoypadManager_DeviceDidConnect(JoypadManager sender, JoypadDevice device, uint player)
    {
        joypadManager.StopFindingDevices();

        device.DidAccelerate 		+= new JoypadDevice.DidAccelerateHandler(JoypadDevice_DidAccelerate);
        device.ButtonDown 			+= new JoypadDevice.ButtonDownHandler(JoypadDevice_ButtonDown);
        device.ButtonUp 			+= new JoypadDevice.ButtonUpHandler(JoypadDevice_ButtonUp);
        device.DpadButtonDown 		+= new JoypadDevice.DpadButtonDownHandler(JoypadDevice_DpadButtonDown);
        device.DpadButtonUp 		+= new JoypadDevice.DpadButtonUpHandler(JoypadDevice_DpadButtonUp);
         		device.AnalogStickDidMove 	+= new JoypadDevice.AnalogStickDidMoveHandler(JoypadDevice_AnalogStickDidMove);
    }