예제 #1
0
        private bool ConnectTo(EndPoint endpoint)
        {
            m_ConnectionStage = CONNECTION_STAGE.CS_CONNECTING;

            try
            {
                m_Socket.Connect(endpoint);

                if (m_Socket.Connected)
                {
                    m_ConnectionStage = CONNECTION_STAGE.CS_CONNECTED;

                    if (ConnectionStateChanged != null)
                    {
                        ConnectionStateChanged.Invoke(this, (int)GARANT_EEG_DEVICE_CONNECTION_STATE.DCS_NO_ERROR);
                    }

                    StartRecv();
                }
                else
                {
                    m_ConnectionStage = CONNECTION_STAGE.CS_CONNECTION_ERROR;

                    if (ConnectionStateChanged != null)
                    {
                        ConnectionStateChanged.Invoke(this, (int)GARANT_EEG_DEVICE_CONNECTION_STATE.DCS_HOST_NOT_REACHED);
                    }
                }
            }
            catch (SocketException e)
            {
                m_ConnectionStage = CONNECTION_STAGE.CS_CONNECTION_ERROR;

                if (ConnectionStateChanged != null)
                {
                    ConnectionStateChanged.Invoke(this, (int)GARANT_EEG_DEVICE_CONNECTION_STATE.DCS_HOST_NOT_REACHED);
                }

                return(false);
            }

            return(m_ConnectionStage == CONNECTION_STAGE.CS_CONNECTED);
        }
예제 #2
0
        /**
         * @brief Stop Остановить работу с устройством
         */
        public void Stop()
        {
            if (!m_Started)
            {
                return;
            }

            StopRecord();

            m_Started           = false;
            m_TranslationPaused = false;

            m_Socket.Shutdown(SocketShutdown.Both);

            m_ConnectionStage = CONNECTION_STAGE.CS_NONE;

            m_HeaderData      = null;
            m_PrevData        = null;
            m_RecvBuffer      = null;
            m_PacketBuffer    = null;
            m_FileWriteBuffer = null;
            m_Socket          = null;
        }
예제 #3
0
        /**
         * @brief Start Функция старта работы с устройством
         * @param waitForConnection Ожидать ли подключения или подключиться к оборудованию в асинхронном режиме
         * @param rate Частота работы устройства (250/500/1000)
         * @param host IP-адрес для подключения
         * @param port Порт для подключения
         * @return true если подключено (или подключение началось, для асинхронного режима)
         */
        public bool Start(bool waitForConnection = true, int rate = 500, string host = "192.168.127.125", int port = 12345)
        {
            if (m_Started || m_ConnectionStage == CONNECTION_STAGE.CS_CONNECTED)
            {
                return(true);
            }
            else if (m_ConnectionStage == CONNECTION_STAGE.CS_CONNECTING)
            {
                return(false);
            }

            IPAddress address = ResolveIP(host);

            if (address == null)
            {
                return(false);
            }

            m_ConnectionStage   = CONNECTION_STAGE.CS_NONE;
            m_Started           = false;
            m_Recording         = false;
            m_RecordPaused      = false;
            m_TranslationPaused = false;
            m_Rate = rate;

            switch (m_Rate)
            {
            case 250:
            {
                DATA_SIZE = 765;
                break;
            }

            case 500:
            {
                DATA_SIZE = 1365;
                break;
            }

            case 1000:
            {
                DATA_SIZE = 2565;
                break;
            }

            default:
                break;
            }

            WRITE_FILE_BUFFER_SIZE = DATA_SIZE * 10 * 30; //10 - count of records per second, 30 seconds record
            m_Host       = host;
            m_Port       = port;
            m_NTPMessage = "";
            m_SendBuffer = "";


            m_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            {
                ReceiveBufferSize = BUFF_SIZE, SendBufferSize = BUFF_SIZE
            };

            m_Socket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, 1);
            m_HeaderData      = new List <byte>();
            m_PrevData        = new List <byte>();
            m_RecvBuffer      = new byte[BUFF_SIZE];
            m_PacketBuffer    = new List <byte>();
            m_FileWriteBuffer = new List <byte>();

            m_Socket.ReceiveTimeout = -1;
            m_Socket.SendTimeout    = -1;

            IPEndPoint endpoint = new IPEndPoint(address, port);

            if (waitForConnection)
            {
                m_Started = ConnectTo(endpoint);

                if (m_Started)
                {
                    SendPacket(string.Format("start -protect eeg.rate {0}\r\n", m_Rate));
                }
            }
            else
            {
                Task.Run(() =>
                {
                    m_Started = ConnectTo(endpoint);

                    if (m_Started)
                    {
                        SendPacket(string.Format("start -protect eeg.rate {0}\r\n", m_Rate));
                    }
                });
            }

            while (waitForConnection && m_ConnectionStage < CONNECTION_STAGE.CS_CONNECTED)
            {
                Thread.Sleep(1);
            }

            if (waitForConnection)
            {
                return(m_ConnectionStage == CONNECTION_STAGE.CS_CONNECTED);
            }

            return(true);
        }