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); } } }
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); } } }
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("Успешно."); }
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); } } }
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); }
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); } }
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); }
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("Успешно."); }
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)); } }
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); } } }
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); } } }
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); }
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); }
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; }
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); }
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); // и т.д. по желанию }
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("Успешно."); }
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("Завершено."); }
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); } } }
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); } } }
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("Успешно."); }
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); // и т.д. по желанию }
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(); } }
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); }
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); } } }
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; } }
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(); } }
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("Успешно."); }
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); // и т.д. по желанию }
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(); } }