Esempio n. 1
0
        /// <summary></summary>
        public void Open()
        {
            if (this.IsConnected)
            {
                return;
            }

            this.llrpClient = new LLRPClient(port: this.port);

            ENUM_ConnectionAttemptStatusType status = ENUM_ConnectionAttemptStatusType.Success;
            bool isSuccessed = this.llrpClient.Open(
                llrp_reader_name: this.host,
                status: out status,
                timeout: this.timeout);

            if (!isSuccessed ||
                status != ENUM_ConnectionAttemptStatusType.Success)
            {
                throw new Exception($"接続失敗. {status.ToString()}");
            }

            this.ResetToFactoryDefault();
            this.EnableImpinjExtetions();

            this.GetReaderConfig();
            this.GetReaderCapabilities();
        }
Esempio n. 2
0
        private void ProcessFrame(short ver, short msg_type, int msg_id, byte[] data)
        {
            int cursor = 0;

            switch (msg_type)
            {
            case 61:
                try
                {
                    BitArray bitArray = Util.ConvertByteArrayToBitArray(data);
                    int      count    = bitArray.Count;
                    this.notificationQueue.Enqueue((object)MSG_RO_ACCESS_REPORT.FromBitArray(ref bitArray, ref cursor, count));
                    break;
                }
                catch
                {
                    break;
                }

            case 62:
                try
                {
                    BitArray bitArray = Util.ConvertByteArrayToBitArray(data);
                    int      count    = bitArray.Count;
                    this.notificationQueue.Enqueue((object)MSG_KEEPALIVE.FromBitArray(ref bitArray, ref cursor, count));
                    break;
                }
                catch
                {
                    break;
                }

            case 63:
                try
                {
                    BitArray bitArray = Util.ConvertByteArrayToBitArray(data);
                    int      count    = bitArray.Count;
                    MSG_READER_EVENT_NOTIFICATION eventNotification = MSG_READER_EVENT_NOTIFICATION.FromBitArray(ref bitArray, ref cursor, count);
                    if (this.conn_evt != null && eventNotification.ReaderEventNotificationData.ConnectionAttemptEvent != null)
                    {
                        this.conn_status_type = eventNotification.ReaderEventNotificationData.ConnectionAttemptEvent.Status;
                        this.conn_evt.Set();
                        break;
                    }
                    this.notificationQueue.Enqueue((object)eventNotification);
                    break;
                }
                catch
                {
                    break;
                }
            }
        }
Esempio n. 3
0
        /// <summary></summary>
        public void Open()
        {
            if (this.IsConnected)
            {
                return;
            }

            this.BaseClient              = new LLRPClient(port: this.Port);
            this.BaseClient.OnKeepAlive += this.OnLLRPClientKeepalive;
            this.BaseClient.OnRoAccessReportReceived  += this.OnLLRPClientRoAccessReportReceived;
            this.BaseClient.OnReaderEventNotification += this.OnLLRPClientReaderEventNotification;


            ENUM_ConnectionAttemptStatusType status = ENUM_ConnectionAttemptStatusType.Success;
            bool isSuccessed = this.BaseClient.Open(
                llrp_reader_name: this.Host,
                status: out status,
                timeout: 5000,
                useTLS: false);

            if (!isSuccessed || status != ENUM_ConnectionAttemptStatusType.Success)
            {
                throw new Exception($"接続失敗({status}) {isSuccessed}");
            }

            try {
                this.ResetToFactoryDefault();

                this.EnableImpinjExtensions();

                this.SetReaderConfig();
                this.SetAntennaConfig();

                this.AddROSpec(14150);
                this.EnableROSpec(14150);
            } catch (Exception except) {
                this.Dispose();

                throw except;
            }
        }
Esempio n. 4
0
 public bool Open(
     string llrp_reader_name,
     int timeout,
     out ENUM_ConnectionAttemptStatusType status)
 {
     this.reader_name         = llrp_reader_name;
     status                   = ~ENUM_ConnectionAttemptStatusType.Success;
     this.cI.OnFrameReceived += new delegateMessageReceived(this.ProcessFrame);
     try
     {
         this.cI.Open(llrp_reader_name, this.LLRP_TCP_PORT, timeout);
     }
     catch (Exception ex)
     {
         this.cI.OnFrameReceived -= new delegateMessageReceived(this.ProcessFrame);
         throw ex;
     }
     this.conn_evt = new ManualResetEvent(false);
     if (this.conn_evt.WaitOne(timeout, false))
     {
         status = this.conn_status_type;
         if (status == ENUM_ConnectionAttemptStatusType.Success)
         {
             this.connected = true;
             return(this.connected);
         }
     }
     this.reader_name = llrp_reader_name;
     try
     {
         this.cI.Close();
         this.cI.OnFrameReceived -= new delegateMessageReceived(this.ProcessFrame);
     }
     catch
     {
     }
     this.connected = false;
     return(this.connected);
 }
Esempio n. 5
0
        private void ProcesssMessage(Int16 ver, Int16 msg_type, Int32 msg_id, byte[] data)
        {
            BitArray bArr;
            int cursor = 0;
            int length;

            switch ((ENUM_LLRP_MSG_TYPE)msg_type)
            {

                case ENUM_LLRP_MSG_TYPE.CUSTOM_MESSAGE:
                    _event_CUSTOM_MESSAGE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_CUSTOM_MESSAGE.data, data.Length);
                    _event_CUSTOM_MESSAGE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.GET_READER_CAPABILITIES:
                    _event_GET_READER_CAPABILITIES.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_GET_READER_CAPABILITIES.data, data.Length);
                    _event_GET_READER_CAPABILITIES.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.GET_READER_CAPABILITIES_RESPONSE:
                    _event_GET_READER_CAPABILITIES_RESPONSE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_GET_READER_CAPABILITIES_RESPONSE.data, data.Length);
                    _event_GET_READER_CAPABILITIES_RESPONSE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.ADD_ROSPEC:
                    _event_ADD_ROSPEC.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_ADD_ROSPEC.data, data.Length);
                    _event_ADD_ROSPEC.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.ADD_ROSPEC_RESPONSE:
                    _event_ADD_ROSPEC_RESPONSE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_ADD_ROSPEC_RESPONSE.data, data.Length);
                    _event_ADD_ROSPEC_RESPONSE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.DELETE_ROSPEC:
                    _event_DELETE_ROSPEC.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_DELETE_ROSPEC.data, data.Length);
                    _event_DELETE_ROSPEC.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.DELETE_ROSPEC_RESPONSE:
                    _event_DELETE_ROSPEC_RESPONSE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_DELETE_ROSPEC_RESPONSE.data, data.Length);
                    _event_DELETE_ROSPEC_RESPONSE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.START_ROSPEC:
                    _event_START_ROSPEC.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_START_ROSPEC.data, data.Length);
                    _event_START_ROSPEC.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.START_ROSPEC_RESPONSE:
                    _event_START_ROSPEC_RESPONSE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_START_ROSPEC_RESPONSE.data, data.Length);
                    _event_START_ROSPEC_RESPONSE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.STOP_ROSPEC:
                    _event_STOP_ROSPEC.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_STOP_ROSPEC.data, data.Length);
                    _event_STOP_ROSPEC.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.STOP_ROSPEC_RESPONSE:
                    _event_STOP_ROSPEC_RESPONSE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_STOP_ROSPEC_RESPONSE.data, data.Length);
                    _event_STOP_ROSPEC_RESPONSE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.ENABLE_ROSPEC:
                    _event_ENABLE_ROSPEC.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_ENABLE_ROSPEC.data, data.Length);
                    _event_ENABLE_ROSPEC.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.ENABLE_ROSPEC_RESPONSE:
                    _event_ENABLE_ROSPEC_RESPONSE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_ENABLE_ROSPEC_RESPONSE.data, data.Length);
                    _event_ENABLE_ROSPEC_RESPONSE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.DISABLE_ROSPEC:
                    _event_DISABLE_ROSPEC.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_DISABLE_ROSPEC.data, data.Length);
                    _event_DISABLE_ROSPEC.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.DISABLE_ROSPEC_RESPONSE:
                    _event_DISABLE_ROSPEC_RESPONSE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_DISABLE_ROSPEC_RESPONSE.data, data.Length);
                    _event_DISABLE_ROSPEC_RESPONSE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.GET_ROSPECS:
                    _event_GET_ROSPECS.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_GET_ROSPECS.data, data.Length);
                    _event_GET_ROSPECS.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.GET_ROSPECS_RESPONSE:
                    _event_GET_ROSPECS_RESPONSE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_GET_ROSPECS_RESPONSE.data, data.Length);
                    _event_GET_ROSPECS_RESPONSE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.ADD_ACCESSSPEC:
                    _event_ADD_ACCESSSPEC.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_ADD_ACCESSSPEC.data, data.Length);
                    _event_ADD_ACCESSSPEC.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.ADD_ACCESSSPEC_RESPONSE:
                    _event_ADD_ACCESSSPEC_RESPONSE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_ADD_ACCESSSPEC_RESPONSE.data, data.Length);
                    _event_ADD_ACCESSSPEC_RESPONSE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.DELETE_ACCESSSPEC:
                    _event_DELETE_ACCESSSPEC.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_DELETE_ACCESSSPEC.data, data.Length);
                    _event_DELETE_ACCESSSPEC.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.DELETE_ACCESSSPEC_RESPONSE:
                    _event_DELETE_ACCESSSPEC_RESPONSE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_DELETE_ACCESSSPEC_RESPONSE.data, data.Length);
                    _event_DELETE_ACCESSSPEC_RESPONSE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.ENABLE_ACCESSSPEC:
                    _event_ENABLE_ACCESSSPEC.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_ENABLE_ACCESSSPEC.data, data.Length);
                    _event_ENABLE_ACCESSSPEC.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.ENABLE_ACCESSSPEC_RESPONSE:
                    _event_ENABLE_ACCESSSPEC_RESPONSE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_ENABLE_ACCESSSPEC_RESPONSE.data, data.Length);
                    _event_ENABLE_ACCESSSPEC_RESPONSE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.DISABLE_ACCESSSPEC:
                    _event_DISABLE_ACCESSSPEC.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_DISABLE_ACCESSSPEC.data, data.Length);
                    _event_DISABLE_ACCESSSPEC.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.DISABLE_ACCESSSPEC_RESPONSE:
                    _event_DISABLE_ACCESSSPEC_RESPONSE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_DISABLE_ACCESSSPEC_RESPONSE.data, data.Length);
                    _event_DISABLE_ACCESSSPEC_RESPONSE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.GET_ACCESSSPECS:
                    _event_GET_ACCESSSPECS.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_GET_ACCESSSPECS.data, data.Length);
                    _event_GET_ACCESSSPECS.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.GET_ACCESSSPECS_RESPONSE:
                    _event_GET_ACCESSSPECS_RESPONSE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_GET_ACCESSSPECS_RESPONSE.data, data.Length);
                    _event_GET_ACCESSSPECS_RESPONSE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.GET_READER_CONFIG:
                    _event_GET_READER_CONFIG.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_GET_READER_CONFIG.data, data.Length);
                    _event_GET_READER_CONFIG.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.GET_READER_CONFIG_RESPONSE:
                    _event_GET_READER_CONFIG_RESPONSE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_GET_READER_CONFIG_RESPONSE.data, data.Length);
                    _event_GET_READER_CONFIG_RESPONSE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.SET_READER_CONFIG:
                    _event_SET_READER_CONFIG.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_SET_READER_CONFIG.data, data.Length);
                    _event_SET_READER_CONFIG.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.SET_READER_CONFIG_RESPONSE:
                    _event_SET_READER_CONFIG_RESPONSE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_SET_READER_CONFIG_RESPONSE.data, data.Length);
                    _event_SET_READER_CONFIG_RESPONSE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.CLOSE_CONNECTION:
                    _event_CLOSE_CONNECTION.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_CLOSE_CONNECTION.data, data.Length);
                    _event_CLOSE_CONNECTION.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.CLOSE_CONNECTION_RESPONSE:
                    _event_CLOSE_CONNECTION_RESPONSE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_CLOSE_CONNECTION_RESPONSE.data, data.Length);
                    _event_CLOSE_CONNECTION_RESPONSE.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.GET_REPORT:
                    _event_GET_REPORT.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_GET_REPORT.data, data.Length);
                    _event_GET_REPORT.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.RO_ACCESS_REPORT:
                    try
                    {
                        bArr = Util.ConvertByteArrayToBitArray(data);
                        length = bArr.Count;
                        MSG_RO_ACCESS_REPORT rpt = MSG_RO_ACCESS_REPORT.FromBitArray(ref bArr, ref cursor, length);
                        delegateRoAccessReport roaccess = new delegateRoAccessReport(TriggerRoAccessReport);
                        roaccess.BeginInvoke(rpt, null, null);
                    }
                    catch
                    {
                    }
                    break;

                case ENUM_LLRP_MSG_TYPE.KEEPALIVE:
                    try
                    {
                        bArr = Util.ConvertByteArrayToBitArray(data);
                        length = bArr.Count;
                        MSG_KEEPALIVE msg = MSG_KEEPALIVE.FromBitArray(ref bArr, ref cursor, length);
                        delegateKeepAlive rMsg = new delegateKeepAlive(TriggerKeepAlive);
                        rMsg.BeginInvoke(msg, null, null);
                    }
                    catch
                    {
                    }
                    break;

                case ENUM_LLRP_MSG_TYPE.KEEPALIVE_ACK:
                    _event_KEEPALIVE_ACK.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_KEEPALIVE_ACK.data, data.Length);
                    _event_KEEPALIVE_ACK.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.READER_EVENT_NOTIFICATION:
                    try
                    {
                        bArr = Util.ConvertByteArrayToBitArray(data);
                        length = bArr.Count;
                        MSG_READER_EVENT_NOTIFICATION ntf = MSG_READER_EVENT_NOTIFICATION.FromBitArray(ref bArr, ref cursor, length);
                        if (conn_evt != null && ntf.ReaderEventNotificationData.ConnectionAttemptEvent != null)
                        {
                            conn_status_type = ntf.ReaderEventNotificationData.ConnectionAttemptEvent.Status;
                            conn_evt.Set();
                        }
                        else
                        {
                            delegateReaderEventNotification rEvent = new delegateReaderEventNotification(TriggerReaderEventNotification);
                            rEvent.BeginInvoke(ntf, null, null);
                        }
                    }
                    catch
                    {
                    }
                    break;

                case ENUM_LLRP_MSG_TYPE.ENABLE_EVENTS_AND_REPORTS:
                    _event_ENABLE_EVENTS_AND_REPORTS.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_ENABLE_EVENTS_AND_REPORTS.data, data.Length);
                    _event_ENABLE_EVENTS_AND_REPORTS.evt.Set();
                    break;

                case ENUM_LLRP_MSG_TYPE.ERROR_MESSAGE:
                    _event_ERROR_MESSAGE.data = new byte[data.Length];
                    if (data.Length > 0) Array.Copy(data, _event_ERROR_MESSAGE.data, data.Length);
                    _event_ERROR_MESSAGE.evt.Set();
                    break;

                default:
                    break;
            }
        }
Esempio n. 6
0
        public bool Open(string llrp_reader_name, int timeout, out ENUM_ConnectionAttemptStatusType status)
        {
            reader_name = llrp_reader_name;

            status = ENUM_ConnectionAttemptStatusType.Failed_Reason_Other_Than_A_Connection_Already_Exists;
            cI.OnMessageReceived += new delegateMessageReceived(ProcesssMessage);

            try { cI.Open(llrp_reader_name, LLRP_TCP_PORT); }
            catch { cI.OnMessageReceived -= new delegateMessageReceived(ProcesssMessage); return false; }


            conn_evt = new ManualResetEvent(false);
            if (conn_evt.WaitOne(timeout, false))
            {
                status = conn_status_type;
                if (status == ENUM_ConnectionAttemptStatusType.Success) return true;
            }

            reader_name = llrp_reader_name;

            try
            {
                cI.Close();
                cI.OnMessageReceived -= new delegateMessageReceived(ProcesssMessage);
            }
            catch
            {
            }
            return false;
        }