Ejemplo n.º 1
0
        void AutoPollTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            RG_ENDPOINT portEndpoin = AutoPullDevice.Endpoint;
            byte        address     = AutoPullDevice.DeviceInfoShort.DeviceAddress;

            RG_PIN_SATETS_16      pinStates  = new RG_PIN_SATETS_16();
            RG_DEVICE_STATUS_TYPE statusType = RG_DEVICE_STATUS_TYPE.DS_UNKNONWN;
            RG_CARD_INFO          cardInfo   = new RG_CARD_INFO()
            {
                CardType = RG_CARD_TYPE_CODE.CT_UNKNOWN
            };
            RG_CARD_MEMORY cardMemory = new RG_CARD_MEMORY()
            {
                ProfileBlock = 0,
                MemBlock     = new byte[16]
            };

            uint errorCode = RG_GetStatus(ref portEndpoin, address,
                                          ref statusType, ref pinStates, ref cardInfo, ref cardMemory);

            if (errorCode != 0 && statusType == RG_DEVICE_STATUS_TYPE.DS_UNKNONWN)
            {
                throw new ApplicationException($"Ошибка {errorCode} при запросе статуса устройства");
            }

            var result = new CardStateEventArgs(pinStates, statusType, cardInfo, cardMemory);

            if (statusType != RG_DEVICE_STATUS_TYPE.DS_NOCARD)
            {
                logger.Debug($"Прочитана карта: {result.CardUid}");
            }
            СardStatusRead?.Invoke(this, result);
        }
        void AutoPollTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            RG_ENDPOINT portEndpoin = AutoPullDevice.Endpoint;
            byte        address     = AutoPullDevice.DeviceInfoShort.DeviceAddress;

            RG_PIN_SATETS_16      pinStates  = new RG_PIN_SATETS_16();
            RG_DEVICE_STATUS_TYPE statusType = RG_DEVICE_STATUS_TYPE.DS_UNKNONWN;
            RG_CARD_INFO          cardInfo   = new RG_CARD_INFO()
            {
                CardType = RG_CARD_TYPE_CODE.CT_UNKNOWN
            };
            RG_CARD_MEMORY cardMemory = new RG_CARD_MEMORY()
            {
                ProfileBlock = 0,
                MemBlock     = new byte[16]
            };

            if (ticksLeft <= 0)
            {
                if (stateNoCard)
                {
                    stateNoCard = false;
                    if (AutoPullDevice.DeviceInfoShort.DeviceAddress == 0)
                    {
                        random.NextBytes(lastUid);
                    }
                    else if (AutoPullDevice.DeviceInfoShort.DeviceAddress == 1)
                    {
                        NextStepReader1();
                    }
                    ticksLeft = 10;
                }
                else
                {
                    stateNoCard = true;
                    ticksLeft   = 25;
                }
            }
            else
            {
                ticksLeft--;
            }

            if (stateNoCard)
            {
                statusType = RG_DEVICE_STATUS_TYPE.DS_NOCARD;
            }
            else
            {
                statusType       = RG_DEVICE_STATUS_TYPE.DS_CARD;
                cardInfo.CardUid = lastUid;
            }

            var result = new CardStateEventArgs(pinStates, statusType, cardInfo, cardMemory);

            СardStatusRead?.Invoke(this, result);
        }