예제 #1
0
        public ObservableCollection <string> PairedDevices()
        {
            //throw new NotImplementedException();

            EAAccessoryManager manager = EAAccessoryManager.SharedAccessoryManager;
            var allaccessorries        = manager.ConnectedAccessories;

            foreach (var accessory in allaccessorries)
            {
                //yourlable.Text = "find accessory";
                Console.WriteLine(accessory.ToString());
                Console.WriteLine(accessory.Name);
                var protocol = "com.Yourprotocol.name";

                if (accessory.ProtocolStrings.Where(s => s == protocol).Any())
                {
                    //yourlable.Text = "Accessory  found";
                    //start session
                    var session = new EASession(accessory, protocol);
                    //var outputStream = session.OutputStream;
                    //outputStream.Delegate = new MyOutputStreamDelegate(yourlable);
                    //outputStream.Schedule(NSRunLoop.Current, "kCFRunLoopDefaultMode");
                    //outputStream.Open();
                }
            }

            return(new ObservableCollection <string>()
            {
                "AAA", "BBB"
            });
        }
예제 #2
0
 public void closeConnectionToBTDevice()
 {
     session.InputStream.Close();
     session.InputStream.RemoveObserver(NSRunLoop.Current, NSRunLoop.NSDefaultRunLoopMode);
     session.InputStream.Delegate = null;
     session = null;
 }
예제 #3
0
 void DoConnect(BluetoothAddress address, Guid service)
 {
     _accessory = address.Accessory;
     // TODO: provide mapping support for multiple protocol strings
     _session = new EASession(_accessory, _accessory.ProtocolStrings[0]);
     _stream  = new ExternalAccessoryNetworkStream(_session);
 }
예제 #4
0
 public ConnectedSphero(EAAccessory bluetoothDevice, EASession socket)
     : base(bluetoothDevice)
 {
     _spheroSocketWrapper = new StreamSocketWrapper(socket);
     _runner = new NonAwaitingConnectedSpheroRunner(_spheroSocketWrapper);
     _runner.Disconnected += (sender, args) => RaiseDisconnected();
     _runner.Start();
 }
예제 #5
0
 public ConnectedSphero(EAAccessory bluetoothDevice, EASession socket)
     : base(bluetoothDevice)
 {
     _spheroSocketWrapper = new StreamSocketWrapper(socket);
     _runner = new NonAwaitingConnectedSpheroRunner(_spheroSocketWrapper);
     _runner.Disconnected += (sender, args) => RaiseDisconnected();
     _runner.Start();
 }
        internal ExternalAccessoryNetworkStream(EASession session)
        {
            _delegate     = new EAStreamDelegate(this);
            _inputStream  = session.InputStream;
            _outputStream = session.OutputStream;

            _inputStream.Open();
            _outputStream.Delegate = _delegate;
            _outputStream.Schedule(NSRunLoop.Current, NSRunLoop.NSDefaultRunLoopMode);
            _outputStream.Open();
        }
예제 #7
0
        public void CloseSession()
        {
            _session.InputStream.Unschedule(NSRunLoop.Current, NSRunLoopMode.Default);
            _session.InputStream.Delegate = null;
            _session.InputStream.Close();

            _session.OutputStream.Unschedule(NSRunLoop.Current, NSRunLoopMode.Default);
            _session.OutputStream.Delegate = null;
            _session.OutputStream.Close();

            _session = null;
        }
예제 #8
0
        public StreamSocketWrapper(EASession spheroSocket)
        {
            _spheroSocket = spheroSocket;

			_spheroSocket.InputStream.OnEvent += DataReceived;
			_spheroSocket.InputStream.Schedule(NSRunLoop.Main, "kCFRunLoopDefaultMode");                                                      
			_spheroSocket.InputStream.Open();     
		
			_spheroSocket.OutputStream.OnEvent += Ignored;
			_spheroSocket.OutputStream.Schedule(NSRunLoop.Main, "kCFRunLoopDefaultMode"); 
			_spheroSocket.OutputStream.Open();
        }
예제 #9
0
        public StreamSocketWrapper(EASession spheroSocket)
        {
            _spheroSocket = spheroSocket;

            _spheroSocket.InputStream.OnEvent += DataReceived;
            _spheroSocket.InputStream.Schedule(NSRunLoop.Main, "kCFRunLoopDefaultMode");
            _spheroSocket.InputStream.Open();

            _spheroSocket.OutputStream.OnEvent += Ignored;
            _spheroSocket.OutputStream.Schedule(NSRunLoop.Main, "kCFRunLoopDefaultMode");
            _spheroSocket.OutputStream.Open();
        }
예제 #10
0
 private void DoConnect(Action <IConnectedSphero> onSuccess, Action <Exception> onError)
 {
     try
     {
         var session   = new EASession(Accessory, Constants.ProtocolName);
         var connected = new ConnectedSphero(Accessory, session);
         onSuccess(connected);
     }
     catch (Exception exception)
     {
         onError(exception);
     }
 }
예제 #11
0
        private void DoConnect(Action<IConnectedSphero> onSuccess, Action<Exception> onError)
        {
            try
            {
				var session = new EASession(Accessory, Constants.ProtocolName);
				var connected = new ConnectedSphero(Accessory, session);
                onSuccess(connected);
            }
            catch (Exception exception)
            {
                onError(exception);
            }
        }
예제 #12
0
        public void Cancel()
        {
            if (Session == null)
            {
                return;
            }

            Session.InputStream.Close();
            Session.InputStream.Unschedule(NSRunLoop.Main, NSRunLoop.NSDefaultRunLoopMode);
            Session.InputStream.Dispose();

            Session.Dispose();
            Session = null;
        }
        public Task ConnectAsync()
        {
            return(Task.Run(() =>
            {
                SelectedDevice.WeakDelegate = this;
                _session = new EASession(SelectedDevice, "COM.LEGO.MINDSTORMS.EV3");

                _session.InputStream.Delegate = this;
                _session.InputStream.Schedule(NSRunLoop.Current, NSRunLoopMode.Default);
                _session.InputStream.Open();

                _session.OutputStream.Delegate = this;
                _session.OutputStream.Schedule(NSRunLoop.Current, NSRunLoopMode.Default);
                _session.OutputStream.Open();
            }));
        }
예제 #14
0
        public void openConnectionForAccessory(string accessoryID, string protocolString)
        {
            //connect to a specific RiderX link, identified with an accessory ID and the proper protocol sting
            //The current protocolString is "com.diagsys.constb", but I left it as a variable incase it changes at some point
            //in the future

            //start by getting connected accessories
            var connectedAccessories = EAAccessoryManager.SharedAccessoryManager.ConnectedAccessories;

            foreach (EAAccessory accessory in connectedAccessories)
            {
                var accID     = accessory.ValueForKey((NSString)"connectionID");
                var accString = accID.ToString();
                if (accString == accessoryID)
                {
                    //connect to this device
                    //open session
                    //Console.WriteLine(accessory.ValueForKey((NSString)"name"));

                    if (session == null)
                    {
                        session = new EASession(accessory, protocolString);

                        session.OutputStream.Delegate = this;
                        session.OutputStream.Schedule(NSRunLoop.Current, NSRunLoop.NSDefaultRunLoopMode);
                        session.OutputStream.Open();

                        session.InputStream.Delegate = this;
                        session.InputStream.Schedule(NSRunLoop.Current, NSRunLoop.NSDefaultRunLoopMode);
                        session.InputStream.Open();
                    }
                    else
                    {
                        session.OutputStream.Delegate = this;
                        session.InputStream.Delegate  = this;
                        session.OutputStream.Schedule(NSRunLoop.Current, NSRunLoop.NSDefaultRunLoopMode);
                        session.InputStream.Schedule(NSRunLoop.Current, NSRunLoop.NSDefaultRunLoopMode);
                        session.OutputStream.Open();
                        session.InputStream.Open();
                    }
                }
            }
        }
예제 #15
0
        public bool OpenSession()
        {
            Console.WriteLine("opening new session");

            _accessory.WeakDelegate = this;

            if (_session == null)
            {
                _session = new EASession(_accessory, _protocolString);
            }

            // Open both input and output streams even if the device only makes use of one of them

            _session.InputStream.Delegate = this;
            _session.InputStream.Schedule(NSRunLoop.Current, NSRunLoopMode.Default);
            _session.InputStream.Open();

            _session.OutputStream.Delegate = this;
            _session.OutputStream.Schedule(NSRunLoop.Current, NSRunLoopMode.Default);
            _session.OutputStream.Open();

            return(_session != null);
        }
예제 #16
0
        public void Start(string name, int sleepTime, bool readAsCharArray)
        {
            if (Session != null)
            {
                throw new Exception("Session already started");
            }

            // get session with the given device name
            EAAccessoryManager manager = EAAccessoryManager.SharedAccessoryManager;
            var allaccessorries        = manager.ConnectedAccessories;

            foreach (var accessory in allaccessorries)
            {
                if (String.Equals(accessory.Name, name, StringComparison.CurrentCultureIgnoreCase))
                {
                    Session = new EASession(accessory, Protocol);
                    Session.Accessory.Disconnected += Accessory_Disconnected;

                    Session.InputStream.Schedule(NSRunLoop.Main, NSRunLoop.NSDefaultRunLoopMode);
                    Session.InputStream.OnEvent += InputStream_OnEvent;
                    Session.InputStream.Open();
                }
            }
        }
예제 #17
0
 void DoClose()
 {
     _session?.Dispose();
     _session = null;
 }
예제 #18
0
 public EAAccessoryStream(EAAccessory accessory, string protocol)
 {
     m_session = new EASession(accessory, protocol);
     m_session.InputStream?.Open();
     m_session.OutputStream?.Open();
 }