Example #1
0
        private void OnButtonEvent(object sender, TranslatedButtonInputEventArgs e)
        {
            var dev = (from d in devices where d.device.DeviceId == e.DeviceId select d).SingleOrDefault();

            dev.OnButtonEvent(sender, e);
        }
Example #2
0
        public void OnButtonEvent(object sender, TranslatedButtonInputEventArgs e)
        {
            try {
                var now    = DateTime.Now;
                var button = e.ButtonId;
                var value  = e.Value ?? false;
                Debug.WriteLine($"Jabra::OnButtonEvent {now}.{now.Millisecond} {button} {value} is muted: {muted}");                //this gets called twice, at least for bluetooth devices for each event, second event does have right mute state microphone muted, with the
                var diff = DateTime.UtcNow - last_event;
                last_event = DateTime.UtcNow;
                if (diff.TotalMilliseconds < 300)
                {
                    var hash = "" + device.UsbDevicePath + button + value;
                    if (hash == last_event_hash)
                    {
                        Debug.WriteLine("Ignoring dupe event within 300 ms of last");
                        return;
                    }
                    last_event_hash = hash;
                }

                switch (button)
                {
                case ButtonId.OffHook:
                    if (value)
                    {
                        if (!hook_enabled)
                        {
                            StatusChanged(this, new StatusEventArgs(HEADSET_EVENT_TYPE.Talk));
                        }
                        hook_enabled = true;
                    }
                    else
                    {
                        if (hook_enabled)
                        {
                            StatusChanged(this, new StatusEventArgs(HEADSET_EVENT_TYPE.Hangup));
                            device.SetHookState(false);
                        }
                        hook_enabled = false;
                    }
                    break;

                case ButtonId.Mute:
                    if (!ignore_next_mute)                            //only done on startup event
                    {
                        StatusChanged(this, new StatusEventArgs(HEADSET_EVENT_TYPE.ToggleMute));
                    }
                    ignore_next_mute = false;
                    break;

                case ButtonId.Flash:
                    StatusChanged(this, new StatusEventArgs(HEADSET_EVENT_TYPE.Flash));
                    break;

                case ButtonId.RejectCall:
                    StatusChanged(this, new StatusEventArgs(HEADSET_EVENT_TYPE.Hangup));
                    break;

                case  ButtonId.FireAlarm:
                    throw new Exception("WTF");

                case  ButtonId.Redial:
                    StatusChanged(this, new StatusEventArgs(HEADSET_EVENT_TYPE.Redial));
                    break;

                case ButtonId.Online:
                    if (value)
                    {
                        ignore_next_mute = true;
                        DelayedFunction.DelayedCall("jabra_mute", () => {
                            now = DateTime.Now;
                            Debug.WriteLine($"Jabra Calling SetMicrophoneMuted {now}.{now.Millisecond}: {this.muted} after we come online");
                            device.SetMicrophoneMuted(!muted);
                            device.SetMicrophoneMuted(muted);
                        }, 2500);
                    }
                    else
                    {
                        StatusChanged(this, new StatusEventArgs(HEADSET_EVENT_TYPE.RadioClosed));
                    }

                    break;
                }
            } catch (Exception) { }
        }