Beispiel #1
0
        public void setControllerMode(ushort serialNumber, ZG_CTR_MODE mode)
        {
            IntPtr      ControllerHandler = new IntPtr(0);
            ZG_CTR_INFO ControllerInfo    = new ZG_CTR_INFO();

            try
            {
                //Открываем контроллер
                int hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, serialNumber, ref ControllerInfo);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                }
                //Читаем режим
                hr = ZGIntf.ZG_Ctr_SetCtrMode(ControllerHandler, mode);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_SetCtrMode (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_SetCtrMode").setErrorCode(hr);
                }
            }
            finally
            {
                //Автоматически закрываем контроллер
                if (ControllerHandler != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(ControllerHandler);
                }
            }
        }
Beispiel #2
0
        public void clearKey(ushort serialNumber, int keyIndex)
        {
            IntPtr      ControllerHandler = new IntPtr(0);
            ZG_CTR_INFO ControllerInfo    = new ZG_CTR_INFO();

            try
            {
                //Открываем контроллер
                int hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, serialNumber, ref ControllerInfo);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                }
                //Удаляем ключ
                hr = ZGIntf.ZG_Ctr_ClearKeys(ControllerHandler, keyIndex, 1, null, default(IntPtr), 0, true);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_ClearKeys (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_ClearKeys").setErrorCode(hr);
                }
            }
            finally
            {
                //Автоматически закрываем контроллер
                if (ControllerHandler != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(ControllerHandler);
                }
            }
        }
Beispiel #3
0
        private void button2_Click(object sender, EventArgs e)
        {
            int hr;
            int i, j, nCount;
            int nTop = 0;

            ZG_CTR_KEY[] aKeys = new ZG_CTR_KEY[6];
            ZG_CTR_KEY   pKey;

            for (i = 0; i < m_nCtrMaxBanks; i++)
            {
                //Console.WriteLine("------------");
                //Console.WriteLine("Банк № {0}:", i);

                // Не работает
                hr = ZGIntf.ZG_Ctr_GetKeyTopIndex(m_hCtr, ref nTop, i);
                if (hr < 0)
                {
                    //Console.WriteLine("Ошибка ZG_Ctr_GetKeyTopIndex (банк № {0}) ({1}).", i, hr);
                    //Console.ReadLine();
                    return;
                }
                if (nTop == 0)
                {
                    //Console.WriteLine("список пуст.");
                    continue;
                }
                for (j = 0; j < nTop; j++)
                {
                    if ((j % aKeys.Length) == 0)
                    {
                        nCount = (nTop - j);
                        if (nCount > aKeys.Length)
                        {
                            nCount = aKeys.Length;
                        }
                        hr = ZGIntf.ZG_Ctr_ReadKeys(m_hCtr, j, aKeys, nCount, null, IntPtr.Zero, i);
                        if (hr < 0)
                        {
                            //Console.WriteLine("Ошибка ZG_Ctr_ReadKeys (банк № {0}) ({1}).", i, hr);
                            //Console.ReadLine();
                            return;
                        }
                    }
                    pKey = aKeys[j % aKeys.Length];

                    /*if (pKey.fErased)
                     *  Console.WriteLine("{0} стерт.", j);
                     * else
                     * {
                     *  Console.WriteLine("{0} {1}, {2}, доступ: {3:X2}h.",
                     *      j,
                     *      ZGIntf.CardNumToStr(pKey.rNum, m_fProximity),
                     *      KeyTypeStrs[(int)pKey.nType],
                     *      pKey.nAccess);
                     * }*/
                }
            }
            //Console.WriteLine("Успешно.");
        }
Beispiel #4
0
        public List <ControllerEvent> getEvents(ushort serialNumber, int eventIndex, int eventCount)
        {
            IntPtr      ControllerHandler = new IntPtr(0);
            ZG_CTR_INFO ControllerInfo    = new ZG_CTR_INFO();

            try
            {
                //Открываем контроллер
                int hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, serialNumber, ref ControllerInfo);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                }
                return(fetchEventsBlock(ControllerHandler, eventIndex, eventCount).items);
            }
            finally
            {
                //Автоматически закрываем контроллер
                if (ControllerHandler != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(ControllerHandler);
                }
            }
        }
Beispiel #5
0
        static int CheckNotifyMsgs()
        {
            int    hr;
            UInt32 nMsg      = 0;
            IntPtr nMsgParam = IntPtr.Zero;

            while ((hr = ZGIntf.ZG_Ctr_GetNextMessage(m_hCtr, ref nMsg, ref nMsgParam)) == ZGIntf.S_OK)
            {
                switch (nMsg)
                {
                case ZGIntf.ZG_N_CTR_NEW_EVENT:
                {
                    ZG_N_NEW_EVENT_INFO pInfo = (ZG_N_NEW_EVENT_INFO)Marshal.PtrToStructure(nMsgParam, typeof(ZG_N_NEW_EVENT_INFO));
                    //Console.WriteLine("==> Новые события: {0}.", pInfo.nNewCount);
                    var msg = string.Format("==> Новые события: {0}.", pInfo.nNewCount);
                    Console.WriteLine(msg);
                    OnReportHandler(msg);         // и т.д. по желанию
                    ShowEvents(pInfo.nReadIdx, pInfo.nNewCount);
                    m_nAppReadEventIdx = pInfo.nWriteIdx;
                }
                break;
                }
            }
            if (hr == ZPIntf.ZP_S_NOTFOUND)
            {
                hr = ZGIntf.S_OK;
            }
            return(hr);
        }
Beispiel #6
0
        public void init(String proxyAddress)
        {
            if (!ConverterHandler.Equals(IntPtr.Zero))
            {
                return;
            }
            int hr = ZGIntf.ZG_Initialize(ZPIntf.ZP_IF_NO_MSG_LOOP);

            if (hr < 0)
            {
                log.Fatal("Ошибка ZG_Initialize: " + hr);
                throw new ZCommonException("Ошибка ZG_Initialize").setErrorCode(hr);
            }
            ZG_CVT_INFO        ConverterInfo = new ZG_CVT_INFO();
            ZG_CVT_OPEN_PARAMS OpenParams    = new ZG_CVT_OPEN_PARAMS();

            if (proxyAddress.Contains(":"))
            {
                OpenParams.nPortType = ZP_PORT_TYPE.ZP_PORT_IP;
            }
            else
            {
                OpenParams.nPortType = ZP_PORT_TYPE.ZP_PORT_COM;
            }
            OpenParams.pszName = @proxyAddress;
            OpenParams.nSpeed  = ZG_CVT_SPEED.ZG_SPEED_57600;

            hr = ZGIntf.ZG_Cvt_Open(ref ConverterHandler, ref OpenParams, ConverterInfo);
            if (hr < 0)
            {
                log.Fatal("Ошибка ZG_Cvt_Open: " + hr);
                throw new ZCommonException("Ошибка ZG_Cvt_Open").setErrorCode(hr);
            }
        }
Beispiel #7
0
        static int CheckNotifyMsgs()
        {
            int    hr;
            UInt32 nMsg      = 0;
            IntPtr nMsgParam = IntPtr.Zero;

            while ((hr = ZGIntf.ZG_Ctr_GetNextMessage(m_hCtr, ref nMsg, ref nMsgParam)) == ZGIntf.S_OK)
            {
                switch (nMsg)
                {
                case ZGIntf.ZG_N_CTR_KEY_TOP:
                {
                    ZG_N_KEY_TOP_INFO pInfo = (ZG_N_KEY_TOP_INFO)Marshal.PtrToStructure(nMsgParam, typeof(ZG_N_KEY_TOP_INFO));
                    Console.WriteLine("==> Банк {0}: верхняя граница ключей изменена ({1} -> {2}).",
                                      pInfo.nBankN, pInfo.nOldTopIdx, pInfo.nNewTopIdx);
                }
                break;
                }
            }
            if (hr == ZPIntf.ZP_S_NOTFOUND)
            {
                hr = ZGIntf.S_OK;
            }
            return(hr);
        }
Beispiel #8
0
        static void DoOpenLock(int nLockN)
        {
            int hr;

            hr = ZGIntf.ZG_Ctr_OpenLock(m_hCtr, nLockN);
            if (hr < 0)
            {
                Console.WriteLine("Ошибка ZG_Ctr_OpenLock ({0}).", hr);
                Console.ReadLine();
                return;
            }
            Console.WriteLine("Успешно.");
        }
Beispiel #9
0
        static void DoFindKeyByNumber()
        {
            string s;

            Console.WriteLine("Введите № банка, номер ключа (-1 последний поднесенный):");
            s = Console.ReadLine();
            string[] aValues = s.Split(',');
            if (aValues.Length < 2)
            {
                Console.WriteLine("Некорректный ввод.");
                return;
            }
            int hr;
            int nBankN;

            m_rFindNum = new Byte[16];
            nBankN     = Convert.ToInt32(aValues[0]);
            if (aValues[1] == "-1")
            {
                hr = ZGIntf.ZG_Ctr_ReadLastKeyNum(m_hCtr, m_rFindNum);
                if (hr < 0)
                {
                    Console.WriteLine("Ошибка ZG_Ctr_ReadLastKeyNum ({0}).", hr);
                    Console.ReadLine();
                    return;
                }
            }
            else if (!ParseKeyNum(ref m_rFindNum, aValues[1]))
            {
                Console.WriteLine("Некорректный ввод.");
                return;
            }
            m_nFoundKeyIdx = -1;
            hr             = ZGIntf.ZG_Ctr_EnumKeys(m_hCtr, 0, FindKeyEnum, IntPtr.Zero, nBankN);
            if (hr < 0)
            {
                Console.WriteLine("Ошибка ZG_Ctr_EnumKeys ({0}).", hr);
                Console.ReadLine();
                return;
            }
            if (m_nFoundKeyIdx != -1)
            {
                Console.WriteLine("Key {0} found (index={0}).",
                                  ZGIntf.CardNumToStr(m_rFindNum, m_fProximity), m_nFoundKeyIdx);
            }
            else
            {
                Console.WriteLine("Key {0} not found.",
                                  ZGIntf.CardNumToStr(m_rFindNum, m_fProximity));
            }
        }
Beispiel #10
0
        public List <ControllerKey> getKeys(ushort serialNumber, int keyIndex, int keyCount)
        {
            IntPtr      ControllerHandler = new IntPtr(0);
            ZG_CTR_INFO ControllerInfo    = new ZG_CTR_INFO();

            ZG_CTR_KEY[]         aKeys   = new ZG_CTR_KEY[keyCount];
            List <ControllerKey> keyList = new List <ControllerKey>();
            ControllerKey        newKey;

            try
            {
                //Открываем контроллер
                int hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, serialNumber, ref ControllerInfo);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                }
                //Читаем список карт
                hr = ZGIntf.ZG_Ctr_ReadKeys(ControllerHandler, keyIndex, aKeys, keyCount, null, IntPtr.Zero, 0);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_ReadKeys (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_ReadKeys").setErrorCode(hr);
                }
                for (int i = 0; i < keyCount; i++)
                {
                    if (aKeys[i].nType.Equals(ZG_CTR_KEY_TYPE.ZG_KEY_NORMAL))
                    {
                        newKey          = new ControllerKey();
                        newKey.code     = CardArrayToString(aKeys[i].rNum);
                        newKey.isErased = aKeys[i].fErased;
                        keyList.Add(newKey);
                        //log.Info("KEY: " + newKey.name + ", " + aKeys[i].nAccess + ", " + aKeys[i].nFlags);
                    }
                    else
                    {
                        keyList.Add(null);
                    }
                }
                return(keyList);
            }
            finally
            {
                //Автоматически закрываем контроллер
                if (ControllerHandler != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(ControllerHandler);
                }
            }
        }
Beispiel #11
0
        public void addKey(ushort serialNumber, int keyIndex, String code)
        {
            IntPtr      ControllerHandler = new IntPtr(0);
            ZG_CTR_INFO ControllerInfo    = new ZG_CTR_INFO();

            try
            {
                //Открываем контроллер
                int hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, serialNumber, ref ControllerInfo);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                }
                //Пишем ключ
                ZG_CTR_KEY[] aKeys = new ZG_CTR_KEY[1];
                aKeys[0].nType   = ZG_CTR_KEY_TYPE.ZG_KEY_NORMAL;
                aKeys[0].rNum    = CardStringToArray(code);
                aKeys[0].nAccess = 255; //Доступ без рассписания
                aKeys[0].nFlags  = ZGIntf.ZG_KF_SHORTNUM;
                int _keyIndex = -1;
                if (keyIndex == -1)
                {
                    hr = ZGIntf.ZG_Ctr_GetKeyTopIndex(ControllerHandler, ref _keyIndex, 0);
                    if (hr < 0)
                    {
                        log.Fatal("Ошибка ZG_Ctr_GetKeyTopIndex (" + hr + ")");
                        throw new ZCommonException("Ошибка ZG_Ctr_GetKeyTopIndex").setErrorCode(hr);
                    }
                }
                else
                {
                    _keyIndex = keyIndex;
                }
                hr = ZGIntf.ZG_Ctr_WriteKeys(ControllerHandler, _keyIndex, aKeys, 1, null, default(IntPtr), 0, true);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_WriteKeys (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_WriteKeys").setErrorCode(hr);
                }
            }
            finally
            {
                //Автоматически закрываем контроллер
                if (ControllerHandler != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(ControllerHandler);
                }
            }
        }
Beispiel #12
0
        static void DoShowAllEvents()
        {
            var msg = "";

            int hr;
            int nWrIdx = 0;
            int nRdIdx = 0;

            hr = ZGIntf.ZG_Ctr_ReadEventIdxs(m_hCtr, ref nWrIdx, ref nRdIdx);
            if (hr < 0)
            {
                //Console.WriteLine("Ошибка ZG_Ctr_ReadEventIdxs ({0}).", hr);
                msg = string.Format("Ошибка ZG_Ctr_ReadEventIdxs ({0}).", hr);
                Console.WriteLine(msg);
                OnReportHandler(msg);
                Console.ReadLine();
                return;
            }
            //Console.WriteLine("Указатели событий: ук.чтения={0}, ук.записи={1}.", nRdIdx, nWrIdx);
            msg = string.Format("Указатели событий: ук.чтения={0}, ук.записи={1}.", nRdIdx, nWrIdx);
            Console.WriteLine(msg);
            OnReportHandler(msg);
            int nIdx, nTotalCount, nShowCount;

            nIdx        = nWrIdx;
            nTotalCount = m_nCtrMaxEvents;
            while (nTotalCount > 0)
            {
                nShowCount = 25;
                if (nShowCount > nTotalCount)
                {
                    nShowCount = nTotalCount;
                }
                ShowEvents(nIdx, nShowCount);
                nTotalCount -= nShowCount;
                nIdx         = (nIdx + nShowCount) % m_nCtrMaxEvents;
                Console.WriteLine("Нажмите Enter для продолжения или 'x' для прерывания.");
                String s = Console.ReadLine();
                if (s == "x")
                {
                    Console.WriteLine("Прервано.");
                    return;
                }
            }
            Console.WriteLine("Успешно.");
            msg = "Успешно.";
            Console.WriteLine(msg);
            OnReportHandler(msg);
        }
Beispiel #13
0
        public List <ControllerInfoShort> GetControllers()
        {
            IntPtr      ControllerHandler   = new IntPtr(0);
            ZG_CTR_INFO ControllerInfo      = new ZG_CTR_INFO();
            ZG_CTR_MODE ControllerMode      = ZG_CTR_MODE.ZG_MODE_UNDEF;
            uint        ControllerModeFlags = 0;

            tmpControllerInfoShortList = new List <ControllerInfoShort>();
            int hr = ZGIntf.ZG_Cvt_EnumControllers(ConverterHandler, tmpEnumConverters, IntPtr.Zero);

            if (hr < 0)
            {
                log.Fatal("Ошибка ZG_Cvt_EnumControllers (" + hr + ").");
                throw new ZCommonException("Ошибка ZG_Cvt_EnumControllers").setErrorCode(hr);
            }
            if (tmpControllerInfoShortList.Count > 0)
            {
                for (int i = 0; i < tmpControllerInfoShortList.Count; i++)
                {
                    try
                    {
                        //Открываем контроллер
                        hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, tmpControllerInfoShortList[i].serialNumber, ref ControllerInfo);
                        if (hr < 0)
                        {
                            log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                            throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                        }
                        //Читаем режим
                        hr = ZGIntf.ZG_Ctr_GetCtrModeInfo(ControllerHandler, ref ControllerMode, ref ControllerModeFlags);
                        if (hr < 0)
                        {
                            log.Fatal("Ошибка ZG_Ctr_GetCtrModeInfo (" + hr + ")");
                            throw new ZCommonException("Ошибка ZG_Ctr_GetCtrModeInfo").setErrorCode(hr);
                        }
                        tmpControllerInfoShortList[i].mode = ControllerMode;
                    }
                    finally
                    {
                        //Автоматически закрываем контроллер
                        if (ControllerHandler != IntPtr.Zero)
                        {
                            ZGIntf.ZG_CloseHandle(ControllerHandler);
                        }
                    }
                }
            }
            return(tmpControllerInfoShortList);
        }
Beispiel #14
0
        public void close()
        {
            if (ConverterHandler == IntPtr.Zero)
            {
                return;
            }
            int hr = ZGIntf.ZG_CloseHandle(ConverterHandler);

            if (hr < 0)
            {
                log.Fatal("Ошибка ZG_CloseHandle: " + hr);
                throw new ZCommonException("Ошибка ZG_CloseHandle").setErrorCode(hr);
            }
            ConverterHandler = IntPtr.Zero;
        }
Beispiel #15
0
        private FetchEventsResult fetchEventsBlock(IntPtr ControllerHandler, int eventIndex, int eventCount)
        {
            //log.Info("Requested from " + eventIndex + ", count of " + eventCount);
            ZG_EV_TIME    rTime   = new ZG_EV_TIME();
            ZG_CTR_DIRECT nDirect = new ZG_CTR_DIRECT();

            ZG_CTR_EVENT[] aEvents = new ZG_CTR_EVENT[eventCount];
            int            hr      = ZGIntf.ZG_Ctr_ReadEvents(ControllerHandler, eventIndex, aEvents, eventCount, null, IntPtr.Zero);

            if (hr < 0)
            {
                log.Fatal("Ошибка ZG_Ctr_ReadEvents (" + hr + ")");
                throw new ZCommonException("Ошибка ZG_Ctr_ReadEvents").setErrorCode(hr);
            }
            ZG_CTR_EVENT      rEv;
            FetchEventsResult result = new FetchEventsResult();

            result.items = new List <ControllerEvent>();
            for (int j = 0; j < eventCount; j++)
            {
                rEv = aEvents[j];
                switch (rEv.nType)
                {
                case ZG_CTR_EV_TYPE.ZG_EV_KEY_NOT_FOUND:
                case ZG_CTR_EV_TYPE.ZG_EV_KEY_OPEN:
                case ZG_CTR_EV_TYPE.ZG_EV_KEY_ACCESS:
                    int nKeyIdx  = 0;
                    int nKeyBank = 0;
                    ZGIntf.ZG_Ctr_DecodePassEvent(ControllerHandler, rEv.aData, ref rTime, ref nDirect, ref nKeyIdx, ref nKeyBank);
                    ControllerEvent newEvent = new ControllerEvent();
                    newEvent.month    = rTime.nMonth;
                    newEvent.day      = rTime.nDay;
                    newEvent.hour     = rTime.nHour;
                    newEvent.minute   = rTime.nMinute;
                    newEvent.second   = rTime.nSecond;
                    newEvent.keyIndex = nKeyIdx;
                    result.items.Add(newEvent);
                    result.lastReadIndex  = eventIndex + j;
                    result.lastReadMonth  = rTime.nMonth;
                    result.lastReadDay    = rTime.nDay;
                    result.lastReadHour   = rTime.nHour;
                    result.lastReadMinute = rTime.nMinute;
                    result.lastReadSecond = rTime.nSecond;
                    break;
                }
            }
            return(result);
        }
Beispiel #16
0
        static void ToggleEventNotifyer()
        {
            var msg = "";

            bool fEnable = !m_fCtrNotifyEnabled;
            int  hr;

            if (fEnable)
            {
                if (m_oEvent == null)
                {
                    m_oEvent = new ManualResetEvent(false);
                }
                ZG_CTR_NOTIFY_SETTINGS rNS = new ZG_CTR_NOTIFY_SETTINGS(
                    ZGIntf.ZG_NF_CTR_NEW_EVENT, m_oEvent.SafeWaitHandle, IntPtr.Zero, 0,
                    m_nAppReadEventIdx, 300, 0);
                hr = ZGIntf.ZG_Ctr_SetNotification(m_hCtr, rNS);
                if (hr < 0)
                {
                    //Console.WriteLine("Ошибка ZG_Ctr_SetNotification ({0}).", hr);
                    msg = string.Format("Ошибка ZG_Ctr_SetNotification ({0}).", hr);
                    Console.WriteLine(msg);
                    OnReportHandler(msg); // и т.д. по желанию
                    Console.ReadLine();
                    return;
                }
                StartNotifyThread();
            }
            else
            {
                StopNotifyThread();
                hr = ZGIntf.ZG_Ctr_SetNotification(m_hCtr, null);
                if (hr < 0)
                {
                    //Console.WriteLine("Ошибка ZG_Ctr_SetNotification ({0}).", hr);
                    msg = string.Format("Ошибка ZG_Ctr_SetNotification ({0}).", hr);
                    Console.WriteLine(msg);
                    OnReportHandler(msg); // и т.д. по желанию
                    Console.ReadLine();
                    return;
                }
            }
            m_fCtrNotifyEnabled = fEnable;
            //Console.WriteLine("Успешно.");
            msg = "Успешно.";
            Console.WriteLine(msg);
            OnReportHandler(msg); // и т.д. по желанию
        }
Beispiel #17
0
        static void DoClearKey()
        {
            int    nBankN, nKeyIdx;
            string s;

            Console.WriteLine("Введите № банка, индекс ключа (-1 ключ в хвосте):");
            s = Console.ReadLine();
            string[] aValues = s.Split(',');
            if (aValues.Length < 2)
            {
                Console.WriteLine("Некорректный ввод.");
                return;
            }
            nBankN  = Convert.ToInt32(aValues[0]);
            nKeyIdx = Convert.ToInt32(aValues[1]);
            int hr;

            if (nKeyIdx == -1)
            {
                int nTop = 0;
                hr = ZGIntf.ZG_Ctr_GetKeyTopIndex(m_hCtr, ref nTop, nBankN);
                if (hr < 0)
                {
                    Console.WriteLine("Ошибка ZG_Ctr_GetKeyTopIndex ({0}).", hr);
                    Console.ReadLine();
                    return;
                }
                if (nTop == 0)
                {
                    Console.WriteLine("Список ключей пуст.");
                    return;
                }
                nKeyIdx = (nTop - 1);
            }
            hr = ZGIntf.ZG_Ctr_ClearKeys(m_hCtr, nKeyIdx, 1, null, IntPtr.Zero, nBankN);
            if (hr < 0)
            {
                Console.WriteLine("Ошибка ZG_Ctr_ClearKeys ({0}).", hr);
                Console.ReadLine();
                return;
            }
            Console.WriteLine("Успешно.");
        }
Beispiel #18
0
        static void ShowKeyTopIndex()
        {
            int nKeyIdx;
            int hr;

            Console.WriteLine("Получение верхней границы ключей...");
            nKeyIdx = 0;
            for (int i = 0; i < m_nCtrMaxBanks; i++)
            {
                hr = ZGIntf.ZG_Ctr_GetKeyTopIndex(m_hCtr, ref nKeyIdx, i);
                if (hr < 0)
                {
                    Console.WriteLine("Ошибка ZG_Ctr_GetKeyTopIndex ({0}).", hr);
                    Console.ReadLine();
                    break;;
                }
                Console.WriteLine("Банк {0}: {1}", i, nKeyIdx);
            }
            Console.WriteLine("Завершено.");
        }
Beispiel #19
0
        public ControllerDateTime getControllerDateTime(ushort serialNumber)
        {
            IntPtr      ControllerHandler = new IntPtr(0);
            ZG_CTR_INFO ControllerInfo    = new ZG_CTR_INFO();

            try
            {
                //Открываем контроллер
                int hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, serialNumber, ref ControllerInfo);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                }
                //Ставим контроллеру дату/время
                ZG_CTR_CLOCK clock = new ZG_CTR_CLOCK();
                hr = ZGIntf.ZG_Ctr_GetClock(ControllerHandler, ref clock);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_GetClock (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_GetClock").setErrorCode(hr);
                }
                ControllerDateTime response = new ControllerDateTime();
                response.year   = clock.nYear;
                response.month  = clock.nMonth;
                response.day    = clock.nDay;
                response.hour   = clock.nHour;
                response.minute = clock.nMinute;
                response.second = clock.nSecond;
                return(response);
            }
            finally
            {
                //Автоматически закрываем контроллер
                if (ControllerHandler != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(ControllerHandler);
                }
            }
        }
Beispiel #20
0
        public void setControllerDateTime(ushort serialNumber, ushort year, ushort month, ushort day, ushort hour, ushort minute, ushort second)
        {
            IntPtr      ControllerHandler = new IntPtr(0);
            ZG_CTR_INFO ControllerInfo    = new ZG_CTR_INFO();

            try
            {
                //Открываем контроллер
                int hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, serialNumber, ref ControllerInfo);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                }
                //Ставим контроллеру дату/время
                ZG_CTR_CLOCK clock = new ZG_CTR_CLOCK();
                clock.fStopped = false;
                clock.nYear    = year;
                clock.nMonth   = month;
                clock.nDay     = day;
                clock.nHour    = hour;
                clock.nMinute  = minute;
                clock.nSecond  = second;
                hr             = ZGIntf.ZG_Ctr_SetClock(ControllerHandler, ref clock);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_SetClock (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_SetClock").setErrorCode(hr);
                }
            }
            finally
            {
                //Автоматически закрываем контроллер
                if (ControllerHandler != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(ControllerHandler);
                }
            }
        }
Beispiel #21
0
        static void DoClearAllKeys()
        {
            int    nBankN;
            string s;

            Console.WriteLine("Введите № банка:");
            s = Console.ReadLine();
            if (s == "")
            {
                Console.WriteLine("Некорректный ввод.");
                return;
            }
            nBankN = Convert.ToInt32(s);
            int nTop = 0;
            int hr;

            hr = ZGIntf.ZG_Ctr_GetKeyTopIndex(m_hCtr, ref nTop, nBankN);
            if (hr < 0)
            {
                Console.WriteLine("Ошибка ZG_Ctr_GetKeyTopIndex ({0}).", hr);
                Console.ReadLine();
                return;
            }
            if (nTop == 0)
            {
                Console.WriteLine("Список ключей пуст.");
                return;
            }
            Console.WriteLine("Очистка...");
            hr = ZGIntf.ZG_Ctr_ClearKeys(m_hCtr, 0, nTop, null, IntPtr.Zero, nBankN);
            if (hr < 0)
            {
                Console.WriteLine("Ошибка ZG_Ctr_ClearKeys ({0}).", hr);
                Console.ReadLine();
                return;
            }
            Console.WriteLine("Успешно.");
        }
Beispiel #22
0
        static void DoRestoreFactorySettings()
        {
            var msg = "";

            int hr;

            Console.WriteLine("Запись (0, 0)...");
            hr = ZGIntf.ZG_Ctr_WriteEventIdxs(m_hCtr, 0x3, 0, 0);
            if (hr < 0)
            {
                //Console.WriteLine("Ошибка ZG_Ctr_WriteEventIdxs ({0}).", hr);
                msg = string.Format("Ошибка ZG_Ctr_WriteEventIdxs ({0}).", hr);
                Console.WriteLine(msg);
                OnReportHandler(msg); // и т.д. по желанию
                Console.ReadLine();
                return;
            }
            m_nAppReadEventIdx = 0;
            //Console.WriteLine("Успешно.");
            msg = "Успешно.";
            Console.WriteLine(msg);
            OnReportHandler(msg); // и т.д. по желанию
        }
Beispiel #23
0
        internal static void Main(string[] args)
        {
            ZG_CTR_INFO rCtrInfo = new ZG_CTR_INFO();
            int         hr;
            IntPtr      hCvt;
            string      msg;

            //if (TestDeviceAccess(out hCvt, ref rCtrInfo)) return;

            if (TestDevices.TestDeviceAccess(out hCvt, ref rCtrInfo))
            {
                return;                                                       // Тестирование Доступа К Устройству
            }
            try
            {
                m_nCtrMaxEvents = rCtrInfo.nMaxEvents;
                m_fProximity    = ((rCtrInfo.nFlags & ZGIntf.ZG_CTR_F_PROXIMITY) != 0);
                m_nCtrFlags     = rCtrInfo.nFlags;

                msg = string.Format("{0} адрес: {1}, с/н: {2}, v{3}.{4}, Количество событий: {5}, Тип ключей: {6}.",
                                    CtrTypeStrs[(int)rCtrInfo.nType],
                                    rCtrInfo.nAddr,
                                    rCtrInfo.nSn,
                                    rCtrInfo.nVersion & 0xff, (rCtrInfo.nVersion >> 8) & 0xff,
                                    rCtrInfo.nMaxEvents,
                                    KeyModeStrs[m_fProximity ? 1 : 0]);
                Console.WriteLine(msg);
                OnReportHandler(msg);
                m_fCtrNotifyEnabled = false;
                int nWrIdx = 0;
                int nRdIdx = 0;
                hr = ZGIntf.ZG_Ctr_ReadEventIdxs(m_hCtr, ref nWrIdx, ref nRdIdx);
                if (hr < 0)
                {
                    Console.WriteLine("Ошибка ZG_Ctr_ReadEventIdxs ({0}).", hr);
                    Console.ReadLine();
                    return;
                }
                m_nAppReadEventIdx = nWrIdx;
                //Console.WriteLine("-----");
                msg = "-----";
                Console.WriteLine(msg);
                OnReportHandler(msg);
            }
            catch (Exception ex)
            {
                OnReportHandler(ex.Message);
                throw;     // бросаемся дальше
            }



            try
            {
                string s;
                while (true)
                {
                    Console.WriteLine("Введите номер команды:");
                    Console.WriteLine("1 - показать новые события");
                    Console.WriteLine("2 - показать все события ({0})", m_nCtrMaxEvents);
                    Console.WriteLine("3 - {0} уведомления о новых событиях.",
                                      m_fCtrNotifyEnabled ? "Выключить" : "Включить");
                    Console.WriteLine("9 - Восстановить заводские настройки (сброс индексов)");
                    Console.WriteLine("0 - выход");


                    s = Console.ReadLine();
                    bool returnAfterExecute = false;
                    if (args != null && args.Length > 0)
                    {
                        s = args[0];
                        // для примера чисто тебе напишу вариант с одним параметром, ты уже сам сможешь придумать обработку нескольких или вызов методов отдельно от этого шлака
                        returnAfterExecute = true;
                    }
                    //Console.WriteLine();
                    if (s != "")
                    {
                        Console.WriteLine();
                        switch (Convert.ToInt32(s))
                        {
                        case 1:
                            DoShowNewEvents();
                            if (returnAfterExecute)
                            {
                                return;
                            }
                            break;

                        case 2:
                            DoShowAllEvents();
                            if (returnAfterExecute)
                            {
                                return;
                            }
                            break;

                        case 3:
                            // Активация контроля за новыми событиями через отдельный поток
                            ToggleEventNotifyer();
                            if (returnAfterExecute)
                            {
                                return;
                            }
                            break;

                        case 9:
                            DoRestoreFactorySettings();
                            break;

                        case 0:
                            return;

                        default:
                            Console.WriteLine("Неверная команда.");
                            break;
                        }
                    }
                    Console.WriteLine("-----");
                }
            }
            finally
            {
                StopNotifyThread();
                if (m_hCtr != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(m_hCtr);
                }
                if (hCvt != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(hCvt);
                }
                ZGIntf.ZG_Finalyze();
            }
        }
Beispiel #24
0
        static void DoShowNewEvents()
        {
            var msg = "";

            int hr;
            int nWrIdx = 0;
            int nRdIdx = 0;

            hr = ZGIntf.ZG_Ctr_ReadEventIdxs(m_hCtr, ref nWrIdx, ref nRdIdx);
            if (hr < 0)
            {
                //Console.WriteLine("Ошибка ZG_Ctr_ReadEventIdxs ({0}).", hr);
                msg = string.Format("Ошибка ZG_Ctr_ReadEventIdxs ({0}).", hr);
                Console.WriteLine(msg);
                OnReportHandler(msg);
                Console.ReadLine();
                return;
            }
            int nNewCount;

            if (nWrIdx >= m_nAppReadEventIdx)
            {
                nNewCount = (nWrIdx - m_nAppReadEventIdx);
            }
            else
            {
                nNewCount = (m_nCtrMaxEvents - m_nAppReadEventIdx + nWrIdx);
            }
            if (nNewCount == 0)
            //Console.WriteLine("Нет новых событий ({0}-{1}).", nRdIdx, nWrIdx);
            {
                msg = string.Format("Нет новых событий ({0}-{1}).", nRdIdx, nWrIdx);
                Console.WriteLine(msg);
                OnReportHandler(msg);
            }
            else
            {
                //Console.WriteLine("Доступно {0} новых событий ({1}-{2}).", nNewCount, nRdIdx, nWrIdx);
                msg = string.Format("Доступно {0} новых событий ({1}-{2}).", nNewCount, nRdIdx, nWrIdx);
            }
            Console.WriteLine(msg);
            OnReportHandler(msg);
            int nShowCount;

            while (nNewCount > 0)
            {
                nShowCount = 25;
                if (nShowCount > nNewCount)
                {
                    nShowCount = nNewCount;
                }
                ShowEvents(m_nAppReadEventIdx, nShowCount);
                nNewCount         -= nShowCount;
                m_nAppReadEventIdx = (m_nAppReadEventIdx + nShowCount) % m_nCtrMaxEvents;
                Console.WriteLine("Нажмите Enter для продолжения или 'x' для прерывания.");
                String s = Console.ReadLine();
                if (s == "x")
                {
                    Console.WriteLine("Прервано.");
                    return;
                }
            }
            //Console.WriteLine("Успешно.");
            msg = "Успешно.";
            Console.WriteLine(msg);
            OnReportHandler(msg);
        }
Beispiel #25
0
        public GetUnreadEventsResult getUnreadEvents(ushort serialNumber, int lastReadIndex, int lastReadMonth, int lastReadDay, int lastReadHour, int lastReadMinute, int lastReadSecond, int maxEvents)
        {
            IntPtr                ControllerHandler = new IntPtr(0);
            ZG_CTR_INFO           ControllerInfo    = new ZG_CTR_INFO();
            GetUnreadEventsResult result            = new GetUnreadEventsResult();

            result.items = new List <ControllerEvent>();
            try
            {
                //Открываем контроллер
                int hr = ZGIntf.ZG_Ctr_Open(ref ControllerHandler, ConverterHandler, 255, serialNumber, ref ControllerInfo);
                if (hr < 0)
                {
                    log.Fatal("Ошибка ZG_Ctr_Open (" + hr + ")");
                    throw new ZCommonException("Ошибка ZG_Ctr_Open").setErrorCode(hr);
                }
                //Читаем указатель на следующее записываемое событие
                int writeIndex = 0;
                int _readIndex = 0;
                hr = ZGIntf.ZG_Ctr_ReadEventIdxs(ControllerHandler, ref writeIndex, ref _readIndex);
                //log.Info("WriteIndex: " + writeIndex);
                if (lastReadIndex == -1)
                {
                    //Никогда не читали событий из контроллера
                    //log.Info("Не читали события из контроллера");
                    if (writeIndex > 0)
                    {
                        FetchEventsResult fetchEventsResult = fetchEventsBlock(ControllerHandler, 0, writeIndex);
                        if (fetchEventsResult.items.Count > 0)
                        {
                            result.items          = fetchEventsResult.items;
                            result.lastReadIndex  = fetchEventsResult.lastReadIndex;
                            result.lastReadMonth  = fetchEventsResult.lastReadMonth;
                            result.lastReadDay    = fetchEventsResult.lastReadDay;
                            result.lastReadHour   = fetchEventsResult.lastReadHour;
                            result.lastReadMinute = fetchEventsResult.lastReadMinute;
                            result.lastReadSecond = fetchEventsResult.lastReadSecond;
                        }
                        else
                        {
                            result.lastReadIndex = -1;
                        }
                    }
                    else
                    {
                        //Если следующий индекс, в который будет производиться запись, равен нулю, то ничего пока не читаем
                        result.lastReadIndex = -1;
                    }
                }
                else
                {
                    //Читаем последнее полученное в прошлый раз событие
                    FetchEventsResult fetchEventsResult = fetchEventsBlock(ControllerHandler, lastReadIndex, 1);
                    //Если на прежнем месте события нет, или оно по свойствам отличается от последнего прочитанного, значит был сбой в работе контроллера
                    //и нужно перечитать все события с него
                    if ((fetchEventsResult.items.Count == 0) ||
                        !(fetchEventsResult.items[0].month == lastReadMonth) ||
                        !(fetchEventsResult.items[0].day == lastReadDay) ||
                        !(fetchEventsResult.items[0].hour == lastReadHour) ||
                        !(fetchEventsResult.items[0].minute == lastReadMinute) ||
                        !(fetchEventsResult.items[0].second == lastReadSecond)
                        )
                    {
                        //log.Info("Последнее событие отличается");
                        //Читаем хвост от следующего индекса записи до конца списка
                        fetchEventsResult = fetchEventsBlock(ControllerHandler, writeIndex, maxEvents - writeIndex);
                        if (fetchEventsResult.items.Count > 0)
                        {
                            result.items.AddRange(fetchEventsResult.items);
                            result.lastReadIndex  = fetchEventsResult.lastReadIndex;
                            result.lastReadMonth  = fetchEventsResult.lastReadMonth;
                            result.lastReadDay    = fetchEventsResult.lastReadDay;
                            result.lastReadHour   = fetchEventsResult.lastReadHour;
                            result.lastReadMinute = fetchEventsResult.lastReadMinute;
                            result.lastReadSecond = fetchEventsResult.lastReadSecond;
                        }
                        //Читаем от начала списка до следующего индекса записи
                        if (writeIndex > 0)
                        {
                            fetchEventsResult = fetchEventsBlock(ControllerHandler, 0, writeIndex);
                            if (fetchEventsResult.items.Count > 0)
                            {
                                result.items.AddRange(fetchEventsResult.items);
                                result.lastReadIndex  = fetchEventsResult.lastReadIndex;
                                result.lastReadMonth  = fetchEventsResult.lastReadMonth;
                                result.lastReadDay    = fetchEventsResult.lastReadDay;
                                result.lastReadHour   = fetchEventsResult.lastReadHour;
                                result.lastReadMinute = fetchEventsResult.lastReadMinute;
                                result.lastReadSecond = fetchEventsResult.lastReadSecond;
                            }
                        }
                        if (result.items.Count == 0)
                        {
                            result.lastReadIndex = -1;
                        }
                    }
                    else
                    {
                        //log.Info("Последнее событие в порядке");
                        if (writeIndex > lastReadIndex)
                        {
                            //Читаем небольшой хвост от текущего индекса до следующего индекса записи
                            fetchEventsResult = fetchEventsBlock(ControllerHandler, lastReadIndex + 1, writeIndex - lastReadIndex - 1);
                            if (fetchEventsResult.items.Count > 0)
                            {
                                result.items          = fetchEventsResult.items;
                                result.lastReadIndex  = fetchEventsResult.lastReadIndex;
                                result.lastReadMonth  = fetchEventsResult.lastReadMonth;
                                result.lastReadDay    = fetchEventsResult.lastReadDay;
                                result.lastReadHour   = fetchEventsResult.lastReadHour;
                                result.lastReadMinute = fetchEventsResult.lastReadMinute;
                                result.lastReadSecond = fetchEventsResult.lastReadSecond;
                            }
                            else
                            {
                                result.lastReadIndex  = lastReadIndex;
                                result.lastReadMonth  = lastReadMonth;
                                result.lastReadDay    = lastReadDay;
                                result.lastReadHour   = lastReadHour;
                                result.lastReadMinute = lastReadMinute;
                                result.lastReadSecond = lastReadSecond;
                            }
                        }
                        else
                        {
                            //Индекс записи до шёл до конца списка и теперь отстаёт от нас
                            //Читаем вначале хвост от нас до конца списка
                            if (lastReadIndex < maxEvents - 1)
                            {
                                fetchEventsResult = fetchEventsBlock(ControllerHandler, lastReadIndex + 1, maxEvents - lastReadIndex - 1);
                                if (fetchEventsResult.items.Count > 0)
                                {
                                    result.items.AddRange(fetchEventsResult.items);
                                    result.lastReadIndex  = fetchEventsResult.lastReadIndex;
                                    result.lastReadMonth  = fetchEventsResult.lastReadMonth;
                                    result.lastReadDay    = fetchEventsResult.lastReadDay;
                                    result.lastReadHour   = fetchEventsResult.lastReadHour;
                                    result.lastReadMinute = fetchEventsResult.lastReadMinute;
                                    result.lastReadSecond = fetchEventsResult.lastReadSecond;
                                }
                            }
                            //Читаем от начала списка до индекса записи
                            if (writeIndex > 0)
                            {
                                fetchEventsResult = fetchEventsBlock(ControllerHandler, 0, writeIndex);
                                if (fetchEventsResult.items.Count > 0)
                                {
                                    result.items.AddRange(fetchEventsResult.items);
                                    result.lastReadIndex  = fetchEventsResult.lastReadIndex;
                                    result.lastReadMonth  = fetchEventsResult.lastReadMonth;
                                    result.lastReadDay    = fetchEventsResult.lastReadDay;
                                    result.lastReadHour   = fetchEventsResult.lastReadHour;
                                    result.lastReadMinute = fetchEventsResult.lastReadMinute;
                                    result.lastReadSecond = fetchEventsResult.lastReadSecond;
                                }
                            }
                            if (result.items.Count == 0)
                            {
                                result.lastReadIndex  = lastReadIndex;
                                result.lastReadMonth  = lastReadMonth;
                                result.lastReadDay    = lastReadDay;
                                result.lastReadHour   = lastReadHour;
                                result.lastReadMinute = lastReadMinute;
                                result.lastReadSecond = lastReadSecond;
                            }
                        }
                    }
                }
                //log.Info("Событий вернулось: " + result.items.Count);
                return(result);
            }
            finally
            {
                //Автоматически закрываем контроллер
                if (ControllerHandler != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(ControllerHandler);
                }
            }
        }
Beispiel #26
0
        static void ShowEvents(int nStart, int nCount)
        {
            var msg = "";

            ZG_CTR_EVENT[] aEvents = new ZG_CTR_EVENT[6];
            ZG_CTR_EVENT   rEv;
            int            i = 0;
            int            nIdx, nCnt;
            int            hr;

            while (i < nCount)
            {
                nIdx = (nStart + i) % m_nCtrMaxEvents;
                nCnt = (nCount - i);
                if (nCnt > aEvents.Length)
                {
                    nCnt = aEvents.Length;
                }
                if ((nIdx + nCnt) > m_nCtrMaxEvents)
                {
                    nCnt = (m_nCtrMaxEvents - nIdx);
                }
                hr = ZGIntf.ZG_Ctr_ReadEvents(m_hCtr, nIdx, aEvents, nCnt, null, IntPtr.Zero);
                if (hr < 0)
                {
                    Console.WriteLine("Ошибка ZG_Ctr_ReadEvents ({0}).", hr);
                    Console.ReadLine();
                    return;
                }
                for (int j = 0; j < nCnt; j++)
                {
                    rEv = aEvents[j];
                    switch (rEv.nType)
                    {
                    case ZG_CTR_EV_TYPE.ZG_EV_ELECTRO_ON:
                    case ZG_CTR_EV_TYPE.ZG_EV_ELECTRO_OFF:
                    {
                        ZG_EV_TIME   rTime       = new ZG_EV_TIME();
                        ZG_EC_SUB_EV nSubEvent   = new ZG_EC_SUB_EV();
                        UInt32       nPowerFlags = 0;
                        ZGIntf.ZG_Ctr_DecodeEcEvent(m_hCtr, rEv.aData, ref rTime, ref nSubEvent, ref nPowerFlags);
                        msg = string.Format("{0}. {1:D2}.{2:D2} {3:D2}:{4:D2}:{5:D2} {6} Sub_event: {7} Power flags: {8:X2}h",
                                            nIdx + j,
                                            rTime.nDay, rTime.nMonth,
                                            rTime.nHour, rTime.nMinute, rTime.nSecond,
                                            EvTypeStrs[(int)rEv.nType],
                                            EcSubEvStrs[(int)nSubEvent], nPowerFlags);
                        Console.WriteLine(msg);
                        OnReportHandler(msg);         // и т.д. по желанию
                    }
                    break;

                    case ZG_CTR_EV_TYPE.ZG_EV_FIRE_STATE:
                    {
                        ZG_EV_TIME     rTime      = new ZG_EV_TIME();
                        ZG_FIRE_SUB_EV nSubEvent  = new ZG_FIRE_SUB_EV();
                        UInt32         nFireFlags = 0;
                        ZGIntf.ZG_Ctr_DecodeFireEvent(m_hCtr, rEv.aData, ref rTime, ref nSubEvent, ref nFireFlags);
                        Console.WriteLine("{0}. {1:D2}.{2:D2} {3:D2}:{4:D2}:{5:D2} {6} Sub_event: {7} Fire flags: {8:X2}h",
                                          nIdx + j,
                                          rTime.nDay, rTime.nMonth,
                                          rTime.nHour, rTime.nMinute, rTime.nSecond,
                                          EvTypeStrs[(int)rEv.nType],
                                          FireSubEvStrs[(int)nSubEvent], nFireFlags);
                    }
                    break;

                    case ZG_CTR_EV_TYPE.ZG_EV_SECUR_STATE:
                    {
                        ZG_EV_TIME      rTime       = new ZG_EV_TIME();
                        ZG_SECUR_SUB_EV nSubEvent   = new ZG_SECUR_SUB_EV();
                        UInt32          nSecurFlags = 0;
                        ZGIntf.ZG_Ctr_DecodeSecurEvent(m_hCtr, rEv.aData, ref rTime, ref nSubEvent, ref nSecurFlags);
                        Console.WriteLine("{0}. {1:D2}.{2:D2} {3:D2}:{4:D2}:{5:D2} {6} Sub_event: {7} Security flags: {8:X2}h",
                                          nIdx + j,
                                          rTime.nDay, rTime.nMonth,
                                          rTime.nHour, rTime.nMinute, rTime.nSecond,
                                          EvTypeStrs[(int)rEv.nType],
                                          SecurSubEvStrs[(int)nSubEvent], nSecurFlags);
                    }
                    break;

                    case ZG_CTR_EV_TYPE.ZG_EV_MODE_STATE:
                    {
                        ZG_EV_TIME     rTime     = new ZG_EV_TIME();
                        ZG_CTR_MODE    nMode     = new ZG_CTR_MODE();
                        ZG_MODE_SUB_EV nSubEvent = new ZG_MODE_SUB_EV();
                        ZGIntf.ZG_Ctr_DecodeModeEvent(m_hCtr, rEv.aData, ref rTime, ref nMode, ref nSubEvent);
                        msg = string.Format("{0}. {1:D2}.{2:D2} {3:D2}:{4:D2}:{5:D2} {6} Mode: {7} Sub_event: {8}",
                                            nIdx + j,
                                            rTime.nDay, rTime.nMonth,
                                            rTime.nHour, rTime.nMinute, rTime.nSecond,
                                            EvTypeStrs[(int)rEv.nType],
                                            ModeStrs[(int)nMode],
                                            ModeSubEvStrs[(int)nSubEvent]);
                        Console.WriteLine(msg);
                        OnReportHandler(msg);         // и т.д. по желанию
                    }
                    break;

                    case ZG_CTR_EV_TYPE.ZG_EV_UNKNOWN_KEY:
                    {
                        Byte[] rKeyNum = new Byte[16];
                        ZGIntf.ZG_Ctr_DecodeUnkKeyEvent(m_hCtr, rEv.aData, rKeyNum);
                        msg = string.Format("{0}.  Key \"{1}\"",
                                            nIdx + j,
                                            ZGIntf.CardNumToStr(rKeyNum, m_fProximity));
                        Console.WriteLine(msg);
                        OnReportHandler(msg);         // и т.д. по желанию
                    }
                    break;

                    case ZG_CTR_EV_TYPE.ZG_EV_HOTEL40:
                    case ZG_CTR_EV_TYPE.ZG_EV_HOTEL41:
                    {
                        ZG_EV_TIME      rTime     = new ZG_EV_TIME();
                        ZG_HOTEL_MODE   nMode     = new ZG_HOTEL_MODE();
                        ZG_HOTEL_SUB_EV nSubEvent = new ZG_HOTEL_SUB_EV();
                        UInt32          nFlags    = new UInt32();
                        ZGIntf.ZG_DecodeHotelEvent(rEv.aData, ref rTime, ref nMode, ref nSubEvent, ref nFlags);
                        Console.WriteLine("{0}. {1:D2}.{2:D2} {3:D2}:{4:D2}:{5:D2} {6} Mode: {7} Sub_event: {8} flags: {9:X2}h",
                                          nIdx + j,
                                          rTime.nDay, rTime.nMonth,
                                          rTime.nHour, rTime.nMinute, rTime.nSecond,
                                          EvTypeStrs[(int)rEv.nType],
                                          HModeStrs[(int)nMode],
                                          HotelSubEvStrs[(int)nSubEvent],
                                          nFlags);
                    }
                    break;

                    default:
                    {
                        ZG_EV_TIME    rTime    = new ZG_EV_TIME();
                        ZG_CTR_DIRECT nDirect  = new ZG_CTR_DIRECT();
                        int           nKeyIdx  = 0;
                        int           nKeyBank = 0;
                        ZGIntf.ZG_Ctr_DecodePassEvent(m_hCtr, rEv.aData, ref rTime, ref nDirect, ref nKeyIdx, ref nKeyBank);
                        Console.WriteLine("{0}. {1:D2}.{2:D2} {3:D2}:{4:D2}:{5:D2} {6} {7} (key_idx: {8}, bank#: {9})",
                                          nIdx + j,
                                          rTime.nDay, rTime.nMonth,
                                          rTime.nHour, rTime.nMinute, rTime.nSecond,
                                          DirectStrs[(int)nDirect],
                                          EvTypeStrs[(int)rEv.nType],
                                          nKeyIdx, nKeyBank);
                    }
                    break;
                    }
                }
                i += nCnt;
            }
        }
Beispiel #27
0
        private void Form1_Load(object sender, EventArgs e)
        {
            // Проверяем версию SDK
            UInt32 nVersion = ZGIntf.ZG_GetVersion();

            if ((((nVersion & 0xFF)) != ZGIntf.ZG_SDK_VER_MAJOR) || (((nVersion >> 8) & 0xFF) != ZGIntf.ZG_SDK_VER_MINOR))
            {
                Console.WriteLine("Неправильная версия SDK Guard.");
                Console.ReadLine();
                return;
            }

            IntPtr hCvt = new IntPtr(0);

            m_hCtr = new IntPtr(0);
            int hr;

            hr = ZGIntf.ZG_Initialize(ZPIntf.ZP_IF_NO_MSG_LOOP);
            if (hr < 0)
            {
                Console.WriteLine("Ошибка ZG_Initialize ({0}).", hr);
                Console.ReadLine();
                return;
            }
            try
            {
                ZG_CVT_INFO        rInfo = new ZG_CVT_INFO();
                ZG_CVT_OPEN_PARAMS rOp   = new ZG_CVT_OPEN_PARAMS();
                rOp.nPortType = CvtPortType;
                rOp.pszName   = CvtPortName;
                rOp.nSpeed    = ZG_CVT_SPEED.ZG_SPEED_57600;
                hr            = ZGIntf.ZG_Cvt_Open(ref hCvt, ref rOp, rInfo);
                if (hr < 0)
                {
                    Console.WriteLine("Ошибка ZG_Cvt_Open ({0}).", hr);
                    Console.ReadLine();
                    return;
                }
                ZG_CTR_INFO rCtrInfo = new ZG_CTR_INFO();
                hr = ZGIntf.ZG_Ctr_Open(ref m_hCtr, hCvt, CtrAddr, 0, ref rCtrInfo);
                if (hr < 0)
                {
                    Console.WriteLine("Ошибка ZG_Ctr_Open ({0}).", hr);
                    Console.ReadLine();
                    return;
                }
                m_nCtrMaxBanks = ((rCtrInfo.nFlags & ZGIntf.ZG_CTR_F_2BANKS) != 0) ? 2 : 1;
                m_fProximity   = ((rCtrInfo.nFlags & ZGIntf.ZG_CTR_F_PROXIMITY) != 0);
                Console.WriteLine("{0} адрес: {1}, с/н: {2}, v{3}.{4}, Количество банков: {5}, Тип ключей: {6}.",
                                  CtrTypeStrs[(int)rCtrInfo.nType],
                                  rCtrInfo.nAddr,
                                  rCtrInfo.nSn,
                                  rCtrInfo.nVersion & 0xff, (rCtrInfo.nVersion >> 8) & 0xff,
                                  m_nCtrMaxBanks,
                                  KeyModeStrs[m_fProximity ? 1 : 0]);
                m_oEvent = new ManualResetEvent(false);
                ZG_CTR_NOTIFY_SETTINGS rNS = new ZG_CTR_NOTIFY_SETTINGS(
                    ZGIntf.ZG_NF_CTR_KEY_TOP, m_oEvent.SafeWaitHandle, IntPtr.Zero, 0,
                    0,
                    3000, // Период проверки верхней границы ключей
                    0);
                hr = ZGIntf.ZG_Ctr_SetNotification(m_hCtr, rNS);
                if (hr < 0)
                {
                    Console.WriteLine("Ошибка ZG_Ctr_SetNotification ({0}).", hr);
                    Console.ReadLine();
                    return;
                }
                StartNotifyThread();
                Console.WriteLine("-----");
                //while (true)
                //{
                //DoOpenLock(0);

                /*
                 * Console.WriteLine("Введите номер команды:");
                 * Console.WriteLine("1 - показать времена замков");
                 * Console.WriteLine("2 - установить времена замков...");
                 * Console.WriteLine("3 - открыть замок (Вход)");
                 * Console.WriteLine("4 - открыть замок (Выход)");
                 * Console.WriteLine("9 - восстановить заводские настройки (для всех банков)");
                 * Console.WriteLine("0 - выход");
                 * s = Console.ReadLine();
                 * if (s != "")
                 * {
                 *  Console.WriteLine();
                 *  switch (Convert.ToInt32(s))
                 *  {
                 *      case 1:
                 *          //ShowLockTimes();
                 *          break;
                 *      case 2:
                 *          //DoSetLockTimes();
                 *          break;
                 *      case 3:
                 *          DoOpenLock(0);
                 *          break;
                 *      case 4:
                 *          DoOpenLock(1);
                 *          break;
                 *      case 9:
                 *          //DoRestoreFactorySettings();
                 *          break;
                 *      case 0:
                 *          return;
                 *      default:
                 *          Console.WriteLine("Неверная команда.");
                 *          break;
                 *  }
                 * }
                 * Console.WriteLine("-----");
                 */
                //}
            }
            finally
            {
                if (m_hCtr != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(m_hCtr);
                }
                if (hCvt != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(hCvt);
                }
                ZGIntf.ZG_Finalyze();
            }
        }
Beispiel #28
0
        static void DoSetKey()
        {
            int    nBankN, nKeyIdx, nKeyType, nKeyAccess;
            string s;

            //Console.WriteLine("Введите № банка, индекс ключа (-1 верхняя граница), " +
            //    "номер ключа (-1 последний поднесенный), тип (1-обычный,2-блокирующий,3-мастер), " +
            //    "доступ (hex):");
            var msg = "";

            msg = string.Format("Введите № банка, индекс ключа (-1 верхняя граница), " +
                                "номер ключа (-1 последний поднесенный), тип (1-обычный,2-блокирующий,3-мастер), " +
                                "доступ (hex):");
            Console.WriteLine(msg);
            OnReportHandler(msg); // и т.д. по желанию
            s = Console.ReadLine();
            string[] aValues = s.Split(',');
            if (aValues.Length < 5)
            {
                Console.WriteLine("Некорректный ввод.");
                return;
            }
            nBankN     = Convert.ToInt32(aValues[0]);
            nKeyIdx    = Convert.ToInt32(aValues[1]);
            nKeyType   = Convert.ToInt32(aValues[3]);
            nKeyAccess = Convert.ToInt32(aValues[4], 16);

            int hr;

            if (nKeyIdx == -1)
            {
                hr = ZGIntf.ZG_Ctr_GetKeyTopIndex(m_hCtr, ref nKeyIdx, nBankN);
                if (hr < 0)
                {
                    Console.WriteLine("Ошибка ZG_Ctr_GetKeyTopIndex ({0}).", hr);
                    Console.ReadLine();
                    return;
                }
            }
            ZG_CTR_KEY[] aKeys = new ZG_CTR_KEY[1];
            aKeys[0].nType   = (ZG_CTR_KEY_TYPE)nKeyType;
            aKeys[0].nAccess = (Byte)nKeyAccess;
            aKeys[0].rNum    = new Byte[16];
            //aKeys[0].aData1 = new Byte[4];
            if (aValues[2] == "-1")
            {
                hr = ZGIntf.ZG_Ctr_ReadLastKeyNum(m_hCtr, aKeys[0].rNum);
                if (hr < 0)
                {
                    Console.WriteLine("Ошибка ZG_Ctr_ReadLastKeyNum ({0}).", hr);
                    Console.ReadLine();
                    return;
                }
            }
            else if (!ParseKeyNum(ref aKeys[0].rNum, aValues[2]))
            {
                Console.WriteLine("Некорректный ввод.");
                return;
            }
            hr = ZGIntf.ZG_Ctr_WriteKeys(m_hCtr, nKeyIdx, aKeys, 1, null, IntPtr.Zero, nBankN);
            if (hr < 0)
            {
                Console.WriteLine("Ошибка ZG_Ctr_WriteKeys ({0}).", hr);
                Console.ReadLine();
                return;
            }
            Console.WriteLine("Успешно.");
        }
Beispiel #29
0
        internal static void ShowKeys()
        {
            int hr;
            int i, j, nCount;
            int nTop = 0;

            ZG_CTR_KEY[] aKeys = new ZG_CTR_KEY[6];
            ZG_CTR_KEY   pKey;

            var msg = "";

            for (i = 0; i < m_nCtrMaxBanks; i++)
            {
                //var msg = "";
                msg = string.Format("------------");
                Console.WriteLine(msg);
                OnReportHandler(msg); // и т.д. по желанию
                msg = string.Format("Банк № {0}:", i);
                Console.WriteLine(msg);
                OnReportHandler(msg); // и т.д. по желанию

                hr = ZGIntf.ZG_Ctr_GetKeyTopIndex(m_hCtr, ref nTop, i);
                if (hr < 0)
                {
                    //Console.WriteLine("Ошибка ZG_Ctr_GetKeyTopIndex (банк № {0}) ({1}).", i, hr);
                    msg = string.Format("Ошибка ZG_Ctr_GetKeyTopIndex (банк № {0}) ({1}).", i, hr);
                    Console.WriteLine(msg);
                    OnReportHandler(msg); // и т.д. по желанию
                    continue;
                    Console.ReadLine();
                    return;
                }
                if (nTop == 0)
                {
                    //Console.WriteLine("список пуст.");
                    msg = string.Format("список пуст.");
                    Console.WriteLine(msg);
                    OnReportHandler(msg); // и т.д. по желанию
                    continue;
                }
                for (j = 0; j < nTop; j++)
                {
                    if ((j % aKeys.Length) == 0)
                    {
                        nCount = (nTop - j);
                        if (nCount > aKeys.Length)
                        {
                            nCount = aKeys.Length;
                        }
                        hr = ZGIntf.ZG_Ctr_ReadKeys(m_hCtr, j, aKeys, nCount, null, IntPtr.Zero, i);
                        if (hr < 0)
                        {
                            //Console.WriteLine("Ошибка ZG_Ctr_ReadKeys (банк № {0}) ({1}).", i, hr);
                            msg = string.Format("Ошибка ZG_Ctr_ReadKeys (банк № {0}) ({1}).", i, hr);
                            Console.WriteLine(msg);
                            OnReportHandler(msg); // и т.д. по желанию
                            Console.ReadLine();
                            return;
                        }
                    }
                    pKey = aKeys[j % aKeys.Length];
                    if (pKey.fErased)
                    {
                        Console.WriteLine("{0} стерт.", j);
                    }
                    else
                    {
                        /*
                         * Console.WriteLine("{0} {1}, {2}, доступ: {3:X2}h.",
                         *  j,
                         *  ZGIntf.CardNumToStr(pKey.rNum, m_fProximity),
                         *  KeyTypeStrs[(int)pKey.nType],
                         *  pKey.nAccess);
                         */
                        msg = string.Format("{0} {1}, {2}, доступ: {3:X2}h.",
                                            j,
                                            ZGIntf.CardNumToStr(pKey.rNum, m_fProximity),
                                            KeyTypeStrs[(int)pKey.nType],
                                            pKey.nAccess);
                        Console.WriteLine(msg);
                        OnReportHandler(msg);
                    }
                }
            }
            //Console.WriteLine("Успешно.");
            msg = string.Format("Успешно.");
            Console.WriteLine(msg);
            OnReportHandler(msg); // и т.д. по желанию
        }
Beispiel #30
0
        internal static void Main(string[] args)
        {
            ZG_CTR_INFO rCtrInfo = new ZG_CTR_INFO();
            int         hr;
            IntPtr      hCvt;
            string      msg;

            //if (TestDeviceAccess(out hCvt, ref rCtrInfo)) return;
            //if (TestDevice.TestDeviceAccess(out hCvt, ref rCtrInfo)) return; // Тестирование Доступа К Устройству


            try
            {
                m_nCtrMaxBanks = ((rCtrInfo.nFlags & ZGIntf.ZG_CTR_F_2BANKS) != 0) ? 2 : 1;
                m_fProximity   = ((rCtrInfo.nFlags & ZGIntf.ZG_CTR_F_PROXIMITY) != 0);
                // в любом месте, где мы хотим видеть текст не только в консоли, но и в результате вывода, вызываем OnReportHandler
                msg = string.Format("{0} адрес: {1}, с/н: {2}, v{3}.{4}, Количество банков: {5}, Тип ключей: {6}.",
                                    CtrTypeStrs[(int)rCtrInfo.nType],
                                    rCtrInfo.nAddr,
                                    rCtrInfo.nSn,
                                    rCtrInfo.nVersion & 0xff, (rCtrInfo.nVersion >> 8) & 0xff,
                                    m_nCtrMaxBanks,
                                    KeyModeStrs[m_fProximity ? 1 : 0]);
                Console.WriteLine(msg);
                OnReportHandler(msg);
            }
            catch (Exception ex)
            {
                OnReportHandler(ex.Message);
                throw; // бросаемся дальше
            }


            try
            {
                m_oEvent = new ManualResetEvent(false);
                ZG_CTR_NOTIFY_SETTINGS rNS = new ZG_CTR_NOTIFY_SETTINGS(
                    ZGIntf.ZG_NF_CTR_KEY_TOP, m_oEvent.SafeWaitHandle, IntPtr.Zero, 0,
                    0,
                    3000, // Период проверки верхней границы ключей
                    0);
                hr = ZGIntf.ZG_Ctr_SetNotification(m_hCtr, rNS);
                if (hr < 0)
                {
                    Console.WriteLine("Ошибка ZG_Ctr_SetNotification ({0}).", hr);
                    Console.ReadLine();
                    return;
                }
                StartNotifyThread();
                Console.WriteLine("-----");
                string s;

                while (true)
                {
                    Console.WriteLine("Введите номер команды:");
                    Console.WriteLine("1 - показать ключи");
                    Console.WriteLine("2 - поиск ключа по номеру...");
                    Console.WriteLine("3 - показать верхнюю границу ключей");
                    Console.WriteLine("6 - установка ключа...");
                    Console.WriteLine("7 - стирание ключа...");
                    Console.WriteLine("8 - стирание всех ключей...");
                    Console.WriteLine("0 - выход");
                    s = Console.ReadLine();
                    bool returnAfterExecute = false;
                    if (args != null && args.Length > 0)
                    {
                        s = args[0];
                        // для примера чисто тебе напишу вариант с одним параметром, ты уже сам сможешь придумать обработку нескольких или вызов методов отдельно от этого шлака
                        returnAfterExecute = true;
                    }
                    if (s != "")
                    {
                        Console.WriteLine();
                        switch (Convert.ToInt32(s))
                        {
                        case 1:
                            ShowKeys();
                            if (returnAfterExecute)
                            {
                                return;
                            }
                            break;

                        case 2:
                            DoFindKeyByNumber();
                            break;

                        case 3:
                            ShowKeyTopIndex();
                            break;

                        case 6:
                            DoSetKey();
                            if (returnAfterExecute)
                            {
                                return;
                            }
                            break;

                        case 7:
                            DoClearKey();
                            break;

                        case 8:
                            DoClearAllKeys();
                            break;

                        case 0:
                            return;

                        default:
                            Console.WriteLine("Неверная команда.");
                            break;
                        }
                    }
                    Console.WriteLine("-----");
                }
            }
            catch (Exception ex)
            {
                OnReportHandler(ex.Message);
                throw; // бросаемся дальше
            }
            finally
            {
                StopNotifyThread();
                if (m_hCtr != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(m_hCtr);
                }
                if (hCvt != IntPtr.Zero)
                {
                    ZGIntf.ZG_CloseHandle(hCvt);
                }
                ZGIntf.ZG_Finalyze();
            }
        }