Example #1
0
 public void SubscribeOutput(OutputSubscriptionRequest subReq)
 {
     if (!_subscriptions.ContainsKey(subReq.SubscriptionDescriptor.SubscriberGuid))
     {
         _subscriptions.TryAdd(subReq.SubscriptionDescriptor.SubscriberGuid, subReq);
     }
 }
        public bool SetOutputState(OutputSubscriptionRequest subReq, BindingDescriptor bindingDescriptor, int state)
        {
            var devId = _subscriptionToDevice[subReq.SubscriptionDescriptor.SubscriberGuid];

            if (!_vJoyDevices[devId].IsAcquired)
            {
                return(false);
            }
            switch (bindingDescriptor.Type)
            {
            case BindingType.Axis:
                return(vJ.SetAxis((state + 32768) / 2, devId + 1, AxisIdToUsage[bindingDescriptor.Index]));

            case BindingType.Button:
                return(vJ.SetBtn(state == 1, devId + 1, (uint)(bindingDescriptor.Index + 1)));

            case BindingType.POV:
                int pov = (int)(Math.Floor((decimal)(bindingDescriptor.Index / 4)));
                int dir = bindingDescriptor.Index % 4;
                //Log("vJoy POV output requested - POV {0}, Dir {1}, State {2}", pov, dir, state);
                _vJoyDevices[devId].SetPovState(pov, dir, state);
                break;

            default:
                break;
            }
            return(false);
        }
Example #3
0
 private void LogOutputSubReq(string title, OutputSubscriptionRequest subReq)
 {
     Log("{0}: Provider {1}, Device {2}, Guid {3}",
         title,
         subReq.ProviderDescriptor.ProviderName,
         subReq.DeviceDescriptor.DeviceHandle,
         subReq.SubscriptionDescriptor.SubscriberGuid);
 }
Example #4
0
 public bool UnSubscribeOutputDevice(OutputSubscriptionRequest subReq)
 {
     if (!isLive)
     {
         return(false);
     }
     return(devicesHandler.UnsubscribeOutput(subReq));
 }
 public void Add(OutputSubscriptionRequest subReq)
 {
     if (_subReqs.Count == 0)
     {
         Acquire();
     }
     _subReqs.Add(subReq.SubscriptionDescriptor.SubscriberGuid, subReq);
 }
Example #6
0
 public bool AddSubscription(OutputSubscriptionRequest subReq)
 {
     subscriptions.Add(subReq.SubscriptionDescriptor.SubscriberGuid, subReq);
     logger.Log("Adding subscription to controller # {0}", subReq.DeviceDescriptor.DeviceInstance);
     IsRequested = true;
     SetAcquireState();
     return(true);
 }
Example #7
0
 public bool UnsubscribeOutput(OutputSubscriptionRequest subReq)
 {
     if (HasHandler(subReq.DeviceDescriptor))
     {
         return(deviceHandlers[subReq.DeviceDescriptor.DeviceHandle][subReq.DeviceDescriptor.DeviceInstance].RemoveSubscription(subReq));
     }
     return(false);
 }
 public void Remove(OutputSubscriptionRequest subReq)
 {
     _subReqs.Remove(subReq.SubscriptionDescriptor.SubscriberGuid);
     if (_subReqs.Count == 0)
     {
         Relinquish();
     }
 }
Example #9
0
 public bool SetOutputState(OutputSubscriptionRequest subReq, BindingDescriptor bindingDescriptor, int state)
 {
     if (!isLive)
     {
         return(false);
     }
     return(devicesHandler.SetOutputState(subReq, bindingDescriptor, state));
 }
Example #10
0
        public bool UnSubscribeOutputDevice(OutputSubscriptionRequest subReq)
        {
            uint devId = _subscriptionToDevice[subReq.SubscriptionDescriptor.SubscriberGuid];

            _vJoyDevices[devId].Remove(subReq);
            _subscriptionToDevice.Remove(subReq.SubscriptionDescriptor.SubscriberGuid);
            return(true);
        }
Example #11
0
        public bool SubscribeOutputDevice(OutputSubscriptionRequest subReq)
        {
            var devId = DevIdFromHandle(subReq.DeviceDescriptor.DeviceHandle);

            _vJoyDevices[devId].Add(subReq);
            _subscriptionToDevice.Add(subReq.SubscriptionDescriptor.SubscriberGuid, devId);
            return(true);
        }
Example #12
0
 public bool UnSubscribeOutputDevice(OutputSubscriptionRequest subReq)
 {
     if (_activeOutputDevices.TryGetValue(subReq.DeviceDescriptor, out var deviceHandler))
     {
         deviceHandler.UnsubscribeOutput(subReq);
         return(true);
     }
     return(false);
 }
Example #13
0
 public bool SetOutputState(OutputSubscriptionRequest subReq, BindingDescriptor bindingDescriptor, int state)
 {
     if (_activeOutputDevices.TryGetValue(subReq.DeviceDescriptor, out var deviceHandler))
     {
         deviceHandler.SetOutputState(subReq, bindingDescriptor, state);
         return(true);
     }
     return(false);
 }
Example #14
0
            public bool SetOutputState(OutputSubscriptionRequest subReq, BindingDescriptor bindingDescriptor, int state)
            {
                var handler = GetHandler(subReq.DeviceDescriptor);

                if (handler != null)
                {
                    return(handler.SetOutputState(subReq, bindingDescriptor, state));
                }
                return(false);
            }
Example #15
0
        public bool UnSubscribeOutputDevice(OutputSubscriptionRequest subReq)
        {
            var deviceInfo = DiscoveryManager.FindDeviceInfo(subReq.DeviceDescriptor.DeviceHandle);

            if (deviceInfo == null)
            {
                return(false);
            }
            return(DescriptorManager.StopOutputDevice(deviceInfo));
        }
Example #16
0
 public bool RemoveSubscription(OutputSubscriptionRequest subReq)
 {
     if (subscriptions.ContainsKey(subReq.SubscriptionDescriptor.SubscriberGuid))
     {
         subscriptions.Remove(subReq.SubscriptionDescriptor.SubscriberGuid);
     }
     logger.Log("Removing subscription to controller # {0}", subReq.DeviceDescriptor.DeviceInstance);
     IsRequested = HasSubscriptions();
     SetAcquireState();
     return(true);
 }
Example #17
0
        public bool SubscribeOutputDevice(OutputSubscriptionRequest subReq)
        {
            if (!_activeOutputDevices.TryGetValue(subReq.DeviceDescriptor, out var deviceHandler))
            {
                deviceHandler = new MidiOutputDeviceHandler(subReq.DeviceDescriptor, _deviceLibrary.GetOutputDeviceIdentifier(subReq.DeviceDescriptor), OutputDeviceEmptyHandler);
                _activeOutputDevices.TryAdd(subReq.DeviceDescriptor, deviceHandler);
            }

            _activeOutputDevices[subReq.DeviceDescriptor].SubscribeOutput(subReq);
            return(true);
        }
Example #18
0
        public void UnsubscribeOutput(OutputSubscriptionRequest subReq)
        {
            if (_subscriptions.ContainsKey(subReq.SubscriptionDescriptor.SubscriberGuid))
            {
                _subscriptions.TryRemove(subReq.SubscriptionDescriptor.SubscriberGuid, out _);
            }

            if (_subscriptions.IsEmpty)
            {
                _deviceEmptyHandler?.Invoke(this, _deviceDescriptor);
            }
        }
Example #19
0
 public bool SetOutputState(OutputSubscriptionRequest subReq, BindingDescriptor bindingDescriptor, int state)
 {
     if (outputHandlers.ContainsKey(subReq.DeviceDescriptor.DeviceHandle))
     {
         var slot = outputHandlers[subReq.DeviceDescriptor.DeviceHandle].GetSlot(bindingDescriptor);
         if (slot != null)
         {
             var value = OutputHandler.GetValue(bindingDescriptor, state);
             outputState[(int)slot] = value;
             Write(outputState);
             return(true);
         }
     }
     return(false);
 }
Example #20
0
            public bool SetOutputState(OutputSubscriptionRequest subReq, BindingDescriptor bindingDescriptor, int state)
            {
                switch (bindingDescriptor.Type)
                {
                case BindingType.Axis:
                    SetAxisState(bindingDescriptor, state);
                    break;

                case BindingType.Button:
                    SetButtonState(bindingDescriptor, state);
                    break;

                case BindingType.POV:
                    SetPovState(bindingDescriptor, state);
                    break;
                }
                return(false);
            }
Example #21
0
        public bool UnsubscribeOutput(OutputSubscriptionRequest _subReq)
        {
            var subReq = _subReq.Clone();

            LogOutputSubReq("UnsubscribeOutput", subReq);
            var ret = false;

            if (ActiveOutputSubscriptions.ContainsKey(subReq.SubscriptionDescriptor.SubscriberGuid))
            {
                var provider = GetProvider <IOutputProvider>(subReq.ProviderDescriptor.ProviderName);
                ret = provider.UnSubscribeOutputDevice(subReq);
                if (ret)
                {
                    ActiveOutputSubscriptions.Remove(subReq.SubscriptionDescriptor.SubscriberGuid);
                }
            }
            return(ret);
        }
Example #22
0
        public void SetOutputState(OutputSubscriptionRequest subReq, BindingDescriptor bindingDescriptor, int state)
        {
            var       channel     = (bindingDescriptor.Index & 0xf) + 1;
            var       commandCode = (MidiCommandCode)(bindingDescriptor.Index & 0xf0);
            MidiEvent evt;

            switch (commandCode)
            {
            case MidiCommandCode.ControlChange:
                var value = (int)((state + 32768) / 516.0236220472441);
                evt = new ControlChangeEvent(0, channel, (MidiController)bindingDescriptor.SubIndex, value);
                break;

            default:
                return;
            }
            _midiOut.Send(evt.GetAsShortMessage());
        }
Example #23
0
        public bool SubscribeOutput(OutputSubscriptionRequest _subReq)
        {
            var subReq = _subReq.Clone();

            LogOutputSubReq("SubscribeOutput", subReq);
            if (ActiveOutputSubscriptions.ContainsKey(subReq.SubscriptionDescriptor.SubscriberGuid))
            {
                // If this Subscriber has an existing subscription...
                // ... then remove the old subscription first.
                // unsub output here
                UnsubscribeOutput(ActiveOutputSubscriptions[subReq.SubscriptionDescriptor.SubscriberGuid]);
            }
            var  provider = GetProvider <IOutputProvider>(subReq.ProviderDescriptor.ProviderName);
            bool ret      = false;

            ret = provider.SubscribeOutputDevice(subReq);
            if (ret)
            {
                ActiveOutputSubscriptions.Add(subReq.SubscriptionDescriptor.SubscriberGuid, subReq);
            }
            return(ret);
        }
        public InterceptionMouseOutputTester()
        {
            var interceptionMouseSubReq = new OutputSubscriptionRequest
            {
                DeviceDescriptor       = Library.Devices.Interception.LogitechWeelMouseUSB,
                ProviderDescriptor     = Library.Providers.Interception,
                SubscriptionDescriptor = new SubscriptionDescriptor
                {
                    ProfileGuid    = Library.Profiles.Default,
                    SubscriberGuid = Guid.NewGuid()
                }
            };

            IOW.Instance.SubscribeOutput(interceptionMouseSubReq);

            IOW.Instance.SetOutputstate(interceptionMouseSubReq, Library.Bindings.Interception.MouseButton.LButton, 1);
            IOW.Instance.SetOutputstate(interceptionMouseSubReq, Library.Bindings.Interception.MouseButton.LButton, 0);

            IOW.Instance.SetOutputstate(interceptionMouseSubReq, Library.Bindings.Interception.MouseButton.RButton, 1);
            IOW.Instance.SetOutputstate(interceptionMouseSubReq, Library.Bindings.Interception.MouseButton.RButton, 0);

            IOW.Instance.SetOutputstate(interceptionMouseSubReq, Library.Bindings.Interception.MouseButton.MButton, 1);
            IOW.Instance.SetOutputstate(interceptionMouseSubReq, Library.Bindings.Interception.MouseButton.MButton, 0);

            IOW.Instance.SetOutputstate(interceptionMouseSubReq, Library.Bindings.Interception.MouseButton.XButton1, 1);
            IOW.Instance.SetOutputstate(interceptionMouseSubReq, Library.Bindings.Interception.MouseButton.XButton1, 0);

            IOW.Instance.SetOutputstate(interceptionMouseSubReq, Library.Bindings.Interception.MouseButton.XButton2, 1);
            IOW.Instance.SetOutputstate(interceptionMouseSubReq, Library.Bindings.Interception.MouseButton.XButton2, 0);

            IOW.Instance.SetOutputstate(interceptionMouseSubReq, Library.Bindings.Interception.MouseButton.WheelUp, 1);
            IOW.Instance.SetOutputstate(interceptionMouseSubReq, Library.Bindings.Interception.MouseButton.WheelDown, 1);

            IOW.Instance.SetOutputstate(interceptionMouseSubReq, Library.Bindings.Interception.MouseButton.WheelLeft, 1);
            IOW.Instance.SetOutputstate(interceptionMouseSubReq, Library.Bindings.Interception.MouseButton.WheelRight, 1);

            IOW.Instance.SetOutputstate(interceptionMouseSubReq, Library.Bindings.Interception.MouseAxis.X, 100);
        }
        public InterceptionKeyboardOutputTester()
        {
            var interceptionKeyboardSubReq = new OutputSubscriptionRequest
            {
                DeviceDescriptor       = Library.Devices.Interception.ChiconyKeyboard,
                ProviderDescriptor     = Library.Providers.Interception,
                SubscriptionDescriptor = new SubscriptionDescriptor
                {
                    ProfileGuid    = Library.Profiles.Default,
                    SubscriberGuid = Guid.NewGuid()
                }
            };

            IOW.Instance.SubscribeOutput(interceptionKeyboardSubReq);
            IOW.Instance.SetOutputstate(interceptionKeyboardSubReq, Library.Bindings.Interception.Keyboard.Alt, 1);
            IOW.Instance.SetOutputstate(interceptionKeyboardSubReq, Library.Bindings.Interception.Keyboard.Alt, 0);

            IOW.Instance.SetOutputstate(interceptionKeyboardSubReq, Library.Bindings.Interception.Keyboard.RightAlt, 1);
            IOW.Instance.SetOutputstate(interceptionKeyboardSubReq, Library.Bindings.Interception.Keyboard.RightAlt, 0);

            IOW.Instance.SetOutputstate(interceptionKeyboardSubReq, Library.Bindings.Interception.Keyboard.Up, 1);
            IOW.Instance.SetOutputstate(interceptionKeyboardSubReq, Library.Bindings.Interception.Keyboard.Up, 0);

            IOW.Instance.SetOutputstate(interceptionKeyboardSubReq, Library.Bindings.Interception.Keyboard.NumUp, 1);
            IOW.Instance.SetOutputstate(interceptionKeyboardSubReq, Library.Bindings.Interception.Keyboard.NumUp, 0);

            IOW.Instance.SetOutputstate(interceptionKeyboardSubReq, Library.Bindings.Interception.Keyboard.Delete, 1);
            IOW.Instance.SetOutputstate(interceptionKeyboardSubReq, Library.Bindings.Interception.Keyboard.Delete, 0);

            IOW.Instance.SetOutputstate(interceptionKeyboardSubReq, Library.Bindings.Interception.Keyboard.NumDelete, 1);
            IOW.Instance.SetOutputstate(interceptionKeyboardSubReq, Library.Bindings.Interception.Keyboard.NumDelete, 0);

            IOW.Instance.SetOutputstate(interceptionKeyboardSubReq, Library.Bindings.Interception.Keyboard.Shift, 1);
            IOW.Instance.SetOutputstate(interceptionKeyboardSubReq, Library.Bindings.Interception.Keyboard.Shift, 0);

            IOW.Instance.SetOutputstate(interceptionKeyboardSubReq, Library.Bindings.Interception.Keyboard.RightShift, 1);
            IOW.Instance.SetOutputstate(interceptionKeyboardSubReq, Library.Bindings.Interception.Keyboard.RightShift, 0);
        }
Example #26
0
        public VigemDs4OutputTester()
        {
            var vds4 = new OutputSubscriptionRequest
            {
                DeviceDescriptor       = Library.Devices.Console.DS4_1,
                ProviderDescriptor     = Library.Providers.ViGEm,
                SubscriptionDescriptor = new SubscriptionDescriptor
                {
                    ProfileGuid    = Library.Profiles.Default,
                    SubscriberGuid = Guid.NewGuid()
                }
            };

            IOW.Instance.SubscribeOutput(vds4);
            IOW.Instance.SetOutputstate(vds4, Library.Bindings.Generic.DpadRight, 1);
            IOW.Instance.SetOutputstate(vds4, Library.Bindings.Generic.POV1Up, 1);
            IOW.Instance.SetOutputstate(vds4, Library.Bindings.Generic.DpadRight, 0);
            IOW.Instance.SetOutputstate(vds4, Library.Bindings.Generic.DpadUp, 0);
            IOW.Instance.SetOutputstate(vds4, Library.Bindings.Generic.POV1Up, 0);
            IOW.Instance.SetOutputstate(vds4, Library.Bindings.Generic.Button2, 1);
            Thread.Sleep(500);
            IOW.Instance.SetOutputstate(vds4, Library.Bindings.Generic.Button1, 0);
        }
Example #27
0
        public void WriteOutput(OutputSubscriptionRequest subReq, BindingDescriptor bindingDescriptor, int state)
        {
            var subscribedDevice = _subscribedDevices[subReq.DeviceDescriptor.DeviceHandle];

            switch (EspUtility.GetBindingCategory(bindingDescriptor))
            {
            case BindingCategory.Momentary:
                subscribedDevice.DataMessage.SetButton(bindingDescriptor.Index, (short)state);
                break;

            case BindingCategory.Event:
                subscribedDevice.DataMessage.SetEvent(bindingDescriptor.Index, (short)state);
                break;

            case BindingCategory.Signed:
            case BindingCategory.Unsigned:
                subscribedDevice.DataMessage.SetAxis(bindingDescriptor.Index, (short)state);
                break;

            case BindingCategory.Delta:
                subscribedDevice.DataMessage.SetDelta(bindingDescriptor.Index, (short)state);
                break;
            }
        }
Example #28
0
 protected bool SubscribeOutput(OutputSubscriptionRequest subReq)
 {
     return(false);
 }
Example #29
0
        public bool SetOutputState(OutputSubscriptionRequest subReq, BindingDescriptor bindingDescriptor, int state)
        {
            int devId;

            try
            {
                devId = _deviceLibrary.GetInputDeviceIdentifier(subReq.DeviceDescriptor);
            }
            catch
            {
                return(false);
            }
            //Log("SetOutputState. Type: {0}, Index: {1}, State: {2}, Device: {3}", inputType, inputIndex, state, devId);
            var stroke = new ManagedWrapper.Stroke();

            if (HelperFunctions.IsKeyboard(devId))
            {
                var st   = (ushort)(1 - state);
                var code = (ushort)(bindingDescriptor.Index + 1);
                if (code > 255)
                {
                    st   += 2;
                    code -= 256;
                }
                stroke.key.code  = code;
                stroke.key.state = st;
            }
            else
            {
                switch (bindingDescriptor.Type)
                {
                case BindingType.Axis:
                    var mouse = new ManagedWrapper.MouseStroke
                    {
                        //ToDo: This only implements mouse relative mode - can we allow absolute mode too?
                        flags = (ushort)ManagedWrapper.MouseFlag.MouseMoveRelative
                    };
                    if (bindingDescriptor.Index != 0)
                    {
                        if (bindingDescriptor.Index == 1)
                        {
                            mouse.y = state;
                        }
                        else
                        {
                            throw new NotImplementedException();
                        }
                    }
                    else
                    {
                        mouse.x = state;
                    }

                    stroke.mouse = mouse;
                    break;

                case BindingType.Button:
                    var btn  = bindingDescriptor.Index;
                    var flag = (int)ManagedWrapper.MouseButtonFlags[btn];
                    if (btn < 5)
                    {
                        // Regular buttons
                        if (state == 0)
                        {
                            flag *= 2;
                        }
                    }
                    else
                    {
                        // Wheel
                        stroke.mouse.rolling = (short)((btn == 5 || btn == 8) ? 120 : -120);
                    }

                    stroke.mouse.state = (ushort)flag;
                    break;

                case BindingType.POV:
                default:
                    throw new NotImplementedException();
                }
            }
            ManagedWrapper.Send(_deviceContext, devId, ref stroke, 1);
            return(true);
        }
Example #30
0
        public bool SetOutputstate(OutputSubscriptionRequest subReq, BindingDescriptor bindingDescriptor, int state)
        {
            var provider = GetProvider <IOutputProvider>(subReq.ProviderDescriptor.ProviderName);

            return(provider.SetOutputState(subReq, bindingDescriptor, state));
        }