예제 #1
0
        private int EnableControl(int nDeviceType, int nChannel, bool bEnable, int nTimeout)
        {
            int nRtn = BSSDK.BS_SUCCESS;

            switch (nDeviceType)
            {
            case BSSDK.BS_DEVICE_BIOSTATION:
            case BSSDK.BS_DEVICE_BIOLITE:
            case BSSDK.BS_DEVICE_DSTATION:
            case BSSDK.BS_DEVICE_XSTATION:
            case BSSDK.BS_DEVICE_BIOSTATION2:
            {
                for (int nIndex = 0; nIndex < 2; nIndex++)
                {
                    nRtn = bEnable ? BSSDK.BS_Enable(nChannel) : BSSDK.BS_Disable(nChannel, nTimeout);
                    if (nRtn == BSSDK.BS_SUCCESS)
                    {
                        break;
                    }
                    //Sleep(50);
                }
            }
            break;

            default:
                break;
            }

            return(nRtn);
        }
예제 #2
0
        private void LogManagement_Load(object sender, EventArgs e)
        {
            if (m_DeviceType == BSSDK.BS_DEVICE_BEPLUS)
            {
                deviceInfo.Text = "BioEntry Plus " + m_DeviceID.ToString();
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_BIOLITE)
            {
                deviceInfo.Text = "BioLite Net " + m_DeviceID.ToString();
            }
            else
            {
                deviceInfo.Text = "BioStation " + m_DeviceID.ToString();
            }

            Cursor.Current = Cursors.WaitCursor;

            int result = BSSDK.BS_GetLogCount(m_Handle, ref m_NumOfLog);

            Cursor.Current = Cursors.Default;

            if (result != BSSDK.BS_SUCCESS)
            {
                MessageBox.Show("Cannot read log count", "Error");
                return;
            }

            numOfLog.Text = m_NumOfLog.ToString();
        }
        private void deleteButton_Click(object sender, EventArgs e)
        {
            if (userList.SelectedItems.Count == 0)
            {
                MessageBox.Show("Please select a user first", "Error");
                return;
            }

            uint ID = 0;

            try
            {
                ID = UInt32.Parse(userList.SelectedItems[0].Text);
            }
            catch (Exception)
            {
                MessageBox.Show("Invalid ID", "Error");
                return;
            }

            Cursor.Current = Cursors.WaitCursor;

            int result = BSSDK.BS_DeleteUser(m_Handle, ID);

            Cursor.Current = Cursors.Default;

            if (result != BSSDK.BS_SUCCESS)
            {
                MessageBox.Show("Cannot delete the user", "Error");
                return;
            }

            ReadUserInfo();
        }
예제 #4
0
        private void ReadLog2()
        {
            IntPtr logRecord = Marshal.AllocHGlobal(m_NumOfLog * Marshal.SizeOf(typeof(BSSDK.BSLogRecordEx)));

            int logTotalCount = 0;
            int logCount      = 0;

            do
            {
                Cursor.Current = Cursors.WaitCursor;

                int result = 0;

                IntPtr buf = new IntPtr(logRecord.ToInt32() + logTotalCount * Marshal.SizeOf(typeof(BSSDK.BSLogRecordEx)));

                if (logTotalCount == 0)
                {
                    result = BSSDK.BS_ReadLogEx(m_Handle, 0, 0, ref logCount, buf);
                }
                else
                {
                    result = BSSDK.BS_ReadNextLogEx(m_Handle, 0, 0, ref logCount, buf);
                }

                if (result != BSSDK.BS_SUCCESS)
                {
                    Marshal.FreeHGlobal(logRecord);

                    MessageBox.Show("Cannot read log records", "Error");

                    Cursor.Current = Cursors.WaitCursor;
                    return;
                }

                logTotalCount += logCount;
            } while (logCount == 8192);

            Cursor.Current = Cursors.WaitCursor;

            logList.Items.Clear();

            for (int i = 0; i < logTotalCount; i++)
            {
                BSSDK.BSLogRecordEx record = (BSSDK.BSLogRecordEx)Marshal.PtrToStructure(new IntPtr(logRecord.ToInt32() + i * Marshal.SizeOf(typeof(BSSDK.BSLogRecordEx))), typeof(BSSDK.BSLogRecordEx));

                DateTime eventTime = new DateTime(1970, 1, 1).AddSeconds(record.eventTime);

                ListViewItem item = logList.Items.Add(eventTime.ToString());
                item.SubItems.Add(record.userID.ToString());
                item.SubItems.Add(GetEventStr(record.eventType));
                item.SubItems.Add(GetTNAStr(record.tnaEvent));
                item.SubItems.Add(GetReaderID(record.deviceID));
                item.SubItems.Add(record.eventType.ToString());
                item.SubItems.Add(record.eventTime.ToString());
            }

            numOfLog.Text = logTotalCount.ToString();

            Marshal.FreeHGlobal(logRecord);
        }
예제 #5
0
        private void userTest_Click(object sender, EventArgs e)
        {
            if (connectedDeviceList.SelectedIndex < 0)
            {
                MessageBox.Show("Select a connected device first", "Error");
                return;
            }

            BSSDK.BS_SetDeviceID(m_ConnectedDeviceHandle[connectedDeviceList.SelectedIndex],
                                 m_ConnectedDeviceID[connectedDeviceList.SelectedIndex], m_ConnectedDeviceType[connectedDeviceList.SelectedIndex]);


            //          BSSDK.BSOPModeConfig OPModeCongif = new BSSDK.BSOPModeConfig();

            //          IntPtr sysInfo = Marshal.AllocHGlobal(Marshal.SizeOf(OPModeCongif));

            //CALLING FUNCTION
            //          int result = BSSDK.BS_ReadOPModeConfig(m_ConnectedDeviceHandle[connectedDeviceList.SelectedIndex], sysInfo);



            UserManagement userTest = new UserManagement();

            userTest.SetDevice(m_ConnectedDeviceHandle[connectedDeviceList.SelectedIndex],
                               m_ConnectedDeviceID[connectedDeviceList.SelectedIndex], m_ConnectedDeviceType[connectedDeviceList.SelectedIndex]);

            userTest.Show();
        }
예제 #6
0
        private void readImageLogButton_Click(object sender, EventArgs e)
        {
            if (m_DeviceType != BSSDK.BS_DEVICE_DSTATION && m_DeviceType != BSSDK.BS_DEVICE_XSTATION && m_DeviceType != BSSDK.BS_DEVICE_BIOSTATION2)
            {
                return; // Not Supported.
            }

            Cursor.Current = Cursors.WaitCursor;

            byte[] imageLog = new byte[Marshal.SizeOf(typeof(BSSDK.BSImageLogHdr)) + BSSDK.DF_LEN_MAX_IMAGE];

            int dataLen = 0, eventTime = 0, eventType = 0;

            for (int i = 0; i < logList.Items.Count; i++)
            {
                if (logList.Items[i].Selected == true)
                {
                    eventType = (int)System.Convert.ToDecimal(logList.Items[i].SubItems[5].Text);
                    eventTime = (int)System.Convert.ToDecimal(logList.Items[i].SubItems[6].Text);
                    break;
                }
            }

            int result = BSSDK.BS_ReadSpecificImageLog(m_Handle, eventTime, eventType, ref dataLen, imageLog);

            if (dataLen > Marshal.SizeOf(typeof(BSSDK.BSImageLogHdr)))
            {
                GCHandle            packet   = GCHandle.Alloc(imageLog, GCHandleType.Pinned);
                BSSDK.BSImageLogHdr imageHdr = (BSSDK.BSImageLogHdr)Marshal.PtrToStructure(packet.AddrOfPinnedObject(), typeof(BSSDK.BSImageLogHdr));
                int imageSize = (int)imageHdr.imageSize;
                packet.Free();

                if (imageSize > 0 && imageSize < BSSDK.DF_LEN_MAX_IMAGE)
                {
                    byte[] imageBytes = new byte[imageSize];
                    System.Buffer.BlockCopy(imageLog, Marshal.SizeOf(typeof(BSSDK.BSImageLogHdr)), imageBytes, 0, imageBytes.Length);

                    try
                    {
                        String       filename = "c:\\temp\\test.jpg";
                        FileStream   fs       = new FileStream(filename, FileMode.CreateNew, FileAccess.ReadWrite);
                        BinaryWriter write_fs = new BinaryWriter(fs);
                        write_fs.Write(imageBytes);
                        write_fs.Close();
                        fs.Close();

                        pictureBox1.Image = System.Drawing.Bitmap.FromFile(filename);
                    }
                    catch (Exception saveE)
                    {
                        MessageBox.Show(this, saveE.Message);
                    }
                }
            }
            Cursor.Current = Cursors.Default;
        }
예제 #7
0
        private void clearButton_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < m_NumOfConnectedDevice; i++)
            {
                BSSDK.BS_CloseSocket(m_ConnectedDeviceHandle[i]);
            }

            m_NumOfConnectedDevice = 0;

            connectedDeviceList.Items.Clear();
        }
예제 #8
0
        private void searchButton_Click(object sender, EventArgs e)
        {
            deviceList.Items.Clear();

            Cursor.Current = Cursors.WaitCursor;

            int result;

            try
            {
                result = BSSDK.BS_SearchDeviceInLAN(m_Handle, ref m_NumOfDevice, m_DeviceID, m_DeviceType, m_DeviceAddr);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }

            if (result != BSSDK.BS_SUCCESS)
            {
                MessageBox.Show("Cannot find any device", "Error");
                return;
            }

            for (int i = 0; i < m_NumOfDevice; i++)
            {
                string device = "";

                if (m_DeviceType[i] == BSSDK.BS_DEVICE_BIOSTATION)
                {
                    device += "BioStation ";
                }
                else if (m_DeviceType[i] == BSSDK.BS_DEVICE_BEPLUS)
                {
                    device += "BioEntry Plus ";
                }
                else
                {
                    device += "BioLite Net ";
                }

                device += (m_DeviceAddr[i] & 0xff) + ".";
                device += ((m_DeviceAddr[i] >> 8) & 0xff) + ".";
                device += ((m_DeviceAddr[i] >> 16) & 0xff) + ".";
                device += ((m_DeviceAddr[i] >> 24) & 0xff);

                device += "(" + m_DeviceID[i] + ")";

                deviceList.Items.Add(device);
            }
        }
        private void deleteAllButton_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;

            int result = BSSDK.BS_DeleteAllUser(m_Handle);

            Cursor.Current = Cursors.Default;

            if (result != BSSDK.BS_SUCCESS)
            {
                MessageBox.Show("Cannot delete all users", "Error");
                return;
            }

            ReadUserInfo();
        }
예제 #10
0
        private void setTime_Click(object sender, EventArgs e)
        {
            int localTime = (int)((timePicker.Value.Ticks - new DateTime(1970, 1, 1).Ticks) / 10000000);

            Cursor.Current = Cursors.WaitCursor;

            int result = BSSDK.BS_SetTime(m_Handle, localTime);

            Cursor.Current = Cursors.Default;

            if (result != BSSDK.BS_SUCCESS)
            {
                MessageBox.Show("Cannot set the time", "Error");
                return;
            }
        }
예제 #11
0
        private void timeTest_Click(object sender, EventArgs e)
        {
            if (connectedDeviceList.SelectedIndex < 0)
            {
                MessageBox.Show("Select a connected device first", "Error");
                return;
            }

            BSSDK.BS_SetDeviceID(m_ConnectedDeviceHandle[connectedDeviceList.SelectedIndex],
                                 m_ConnectedDeviceID[connectedDeviceList.SelectedIndex], m_ConnectedDeviceType[connectedDeviceList.SelectedIndex]);

            SetupTime setupTime = new SetupTime();

            setupTime.setHandle(m_ConnectedDeviceHandle[connectedDeviceList.SelectedIndex]);

            setupTime.Show();
        }
예제 #12
0
        private void BioStar_Load(object sender, EventArgs e)
        {
            int result = BSSDK.BS_InitSDK();

            if (result != BSSDK.BS_SUCCESS)
            {
                MessageBox.Show("Cannot initialize the SDK", "Error");
                return;
            }

            result = BSSDK.BS_OpenInternalUDP(ref m_Handle);

            if (result != BSSDK.BS_SUCCESS)
            {
                MessageBox.Show("Cannot open internal UDP socket", "Error");
                return;
            }
        }
예제 #13
0
        private void userTest_Click(object sender, EventArgs e)
        {
            if (connectedDeviceList.SelectedIndex < 0)
            {
                MessageBox.Show("Select a connected device first", "Error");
                return;
            }

            BSSDK.BS_SetDeviceID(m_ConnectedDeviceHandle[connectedDeviceList.SelectedIndex],
                                 m_ConnectedDeviceID[connectedDeviceList.SelectedIndex], m_ConnectedDeviceType[connectedDeviceList.SelectedIndex]);

            UserManagement userTest = new UserManagement();

            userTest.SetDevice(m_ConnectedDeviceHandle[connectedDeviceList.SelectedIndex],
                               m_ConnectedDeviceID[connectedDeviceList.SelectedIndex], m_ConnectedDeviceType[connectedDeviceList.SelectedIndex]);

            userTest.Show();
        }
예제 #14
0
        private void deleteAllButton_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;

            int deletedCount = 0;
            int result       = BSSDK.BS_DeleteLog(m_Handle, 0, ref deletedCount);

            Cursor.Current = Cursors.Default;

            if (result != BSSDK.BS_SUCCESS)
            {
                MessageBox.Show("Cannot delete log records", "Error");
                return;
            }

            numOfLog.Text = "0";
            logList.Items.Clear();
        }
예제 #15
0
        private void getTime_Click(object sender, EventArgs e)
        {
            int localTime = 0;

            Cursor.Current = Cursors.WaitCursor;

            int result = BSSDK.BS_GetTime(m_Handle, ref localTime);

            Cursor.Current = Cursors.Default;

            if (result != BSSDK.BS_SUCCESS)
            {
                MessageBox.Show("Cannot get the time", "Error");
                return;
            }

            datePicker.Value = new DateTime(1970, 1, 1).AddSeconds(localTime);
            timePicker.Value = datePicker.Value;
        }
예제 #16
0
        private void connect_Click(object sender, EventArgs e)
        {
            IPAddress addr = new IPAddress(m_DeviceAddr);

            int handle = 0;

            Cursor.Current = Cursors.WaitCursor;

            int result = BSSDK.BS_OpenSocket(addr.ToString(), Int32.Parse(port.Text), ref handle);

            Cursor.Current = Cursors.Default;

            if (result != BSSDK.BS_SUCCESS)
            {
                MessageBox.Show("Cannot connect to the device", "Error");
                return;
            }

            m_MainForm.AddConnectedDevice(m_DeviceID, m_DeviceType, m_DeviceAddr, handle);
        }
        private void readCard_Click(object sender, EventArgs e)
        {
            uint card_id   = 0;
            int  custom_id = 0;

            Cursor.Current = Cursors.WaitCursor;

            int result = BSSDK.BS_ReadCardIDEx(m_Handle, ref card_id, ref custom_id);

            Cursor.Current = Cursors.Default;

            if (result != BSSDK.BS_SUCCESS)
            {
                MessageBox.Show("Cannot read the card", "Error");
                return;
            }

            userCardID.Text   = card_id.ToString("X");
            cardCustomID.Text = custom_id.ToString();
        }
예제 #18
0
        private bool ReadConfig()
        {
            int configSize = 0;

            Cursor.Current = Cursors.WaitCursor;

            if (m_DeviceType == BSSDK.BS_DEVICE_BEPLUS || m_DeviceType == BSSDK.BS_DEVICE_XPASS)
            {
                IntPtr config = Marshal.AllocHGlobal(Marshal.SizeOf(m_ConfigBEPlus));

                int result = BSSDK.BS_ReadConfigUDP(m_Handle, m_DeviceAddr, m_DeviceID, BSSDK.BEPLUS_CONFIG, ref configSize, config);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot read the configuration", "Error");

                    Marshal.FreeHGlobal(config);
                    return(false);
                }

                m_ConfigBEPlus = (BSSDK.BEConfigData)Marshal.PtrToStructure(config, typeof(BSSDK.BEConfigData));

                Marshal.FreeHGlobal(config);

                DHCP.Checked      = m_ConfigBEPlus.useDHCP;
                useServer.Checked = m_ConfigBEPlus.useServer;
                synchTime.Checked = m_ConfigBEPlus.synchTime;

                IPAddress addr = new IPAddress(m_ConfigBEPlus.ipAddr);
                ipAddr.Text = addr.ToString();

                addr.Address = m_ConfigBEPlus.gateway;
                gateway.Text = addr.ToString();

                addr.Address    = m_ConfigBEPlus.subnetMask;
                subnetMask.Text = addr.ToString();

                addr.Address  = m_ConfigBEPlus.serverIpAddr;
                serverIP.Text = addr.ToString();

                port.Text = m_ConfigBEPlus.port.ToString();

                if (DHCP.Checked)
                {
                    ipAddr.Enabled     = false;
                    gateway.Enabled    = false;
                    subnetMask.Enabled = false;
                }
                else
                {
                    ipAddr.Enabled     = true;
                    gateway.Enabled    = true;
                    subnetMask.Enabled = true;
                }
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_BIOLITE)
            {
                IntPtr config = Marshal.AllocHGlobal(Marshal.SizeOf(m_ConfigBLN));

                int result = BSSDK.BS_ReadConfigUDP(m_Handle, m_DeviceAddr, m_DeviceID, BSSDK.BLN_CONFIG, ref configSize, config);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot read the configuration", "Error");

                    Marshal.FreeHGlobal(config);
                    return(false);
                }

                m_ConfigBLN = (BSSDK.BEConfigDataBLN)Marshal.PtrToStructure(config, typeof(BSSDK.BEConfigDataBLN));

                Marshal.FreeHGlobal(config);

                DHCP.Checked      = m_ConfigBLN.useDHCP;
                useServer.Checked = m_ConfigBLN.useServer;
                synchTime.Checked = m_ConfigBLN.synchTime;

                IPAddress addr = new IPAddress(m_ConfigBLN.ipAddr);
                ipAddr.Text = addr.ToString();

                addr.Address = m_ConfigBLN.gateway;
                gateway.Text = addr.ToString();

                addr.Address    = m_ConfigBLN.subnetMask;
                subnetMask.Text = addr.ToString();

                addr.Address  = m_ConfigBLN.serverIpAddr;
                serverIP.Text = addr.ToString();

                port.Text = m_ConfigBLN.port.ToString();

                if (DHCP.Checked)
                {
                    ipAddr.Enabled     = false;
                    gateway.Enabled    = false;
                    subnetMask.Enabled = false;
                }
                else
                {
                    ipAddr.Enabled     = true;
                    gateway.Enabled    = true;
                    subnetMask.Enabled = true;
                }
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_BIOSTATION)
            {
                IntPtr config = Marshal.AllocHGlobal(Marshal.SizeOf(m_ConfigBST));

                int result = BSSDK.BS_ReadConfigUDP(m_Handle, m_DeviceAddr, m_DeviceID, BSSDK.BS_CONFIG_TCPIP, ref configSize, config);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot read the configuration", "Error");

                    Marshal.FreeHGlobal(config);
                    return(false);
                }

                m_ConfigBST = (BSSDK.BSIPConfig)Marshal.PtrToStructure(config, typeof(BSSDK.BSIPConfig));

                Marshal.FreeHGlobal(config);

                DHCP.Checked      = m_ConfigBST.useDHCP;
                useServer.Checked = m_ConfigBST.useServer;
                synchTime.Checked = m_ConfigBST.syncTimeWithServer;

                ipAddr.Text     = Encoding.ASCII.GetString(m_ConfigBST.ipAddr);
                gateway.Text    = Encoding.ASCII.GetString(m_ConfigBST.gateway);
                subnetMask.Text = Encoding.ASCII.GetString(m_ConfigBST.subnetMask);
                serverIP.Text   = Encoding.ASCII.GetString(m_ConfigBST.serverIP);

                if (m_ConfigBST.useServer)
                {
                    port.Text = m_ConfigBST.serverPort.ToString();
                }
                else
                {
                    port.Text = m_ConfigBST.port.ToString();
                }

                if (DHCP.Checked)
                {
                    ipAddr.Enabled     = false;
                    gateway.Enabled    = false;
                    subnetMask.Enabled = false;
                }
                else
                {
                    ipAddr.Enabled     = true;
                    gateway.Enabled    = true;
                    subnetMask.Enabled = true;
                }
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_DSTATION)
            {
                IntPtr config = Marshal.AllocHGlobal(Marshal.SizeOf(m_ConfigBST));

                int result = BSSDK.BS_ReadConfigUDP(m_Handle, m_DeviceAddr, m_DeviceID, BSSDK.BS_CONFIG_TCPIP, ref configSize, config);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot read the configuration", "Error");

                    Marshal.FreeHGlobal(config);
                    return(false);
                }

                m_ConfigBST = (BSSDK.BSIPConfig)Marshal.PtrToStructure(config, typeof(BSSDK.BSIPConfig));

                Marshal.FreeHGlobal(config);

                DHCP.Checked      = m_ConfigBST.useDHCP;
                useServer.Checked = m_ConfigBST.useServer;
                synchTime.Checked = m_ConfigBST.syncTimeWithServer;

                ipAddr.Text     = Encoding.ASCII.GetString(m_ConfigBST.ipAddr);
                gateway.Text    = Encoding.ASCII.GetString(m_ConfigBST.gateway);
                subnetMask.Text = Encoding.ASCII.GetString(m_ConfigBST.subnetMask);
                serverIP.Text   = Encoding.ASCII.GetString(m_ConfigBST.serverIP);

                if (m_ConfigBST.useServer)
                {
                    port.Text = m_ConfigBST.serverPort.ToString();
                }
                else
                {
                    port.Text = m_ConfigBST.port.ToString();
                }

                if (DHCP.Checked)
                {
                    ipAddr.Enabled     = false;
                    gateway.Enabled    = false;
                    subnetMask.Enabled = false;
                }
                else
                {
                    ipAddr.Enabled     = true;
                    gateway.Enabled    = true;
                    subnetMask.Enabled = true;
                }
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_XSTATION || m_DeviceType == BSSDK.BS_DEVICE_BIOSTATION2)
            {
                IntPtr config = Marshal.AllocHGlobal(Marshal.SizeOf(m_ConfigBST));

                int result = BSSDK.BS_ReadConfigUDP(m_Handle, m_DeviceAddr, m_DeviceID, BSSDK.BS_CONFIG_TCPIP, ref configSize, config);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot read the configuration", "Error");

                    Marshal.FreeHGlobal(config);
                    return(false);
                }

                m_ConfigBST = (BSSDK.BSIPConfig)Marshal.PtrToStructure(config, typeof(BSSDK.BSIPConfig));

                Marshal.FreeHGlobal(config);

                DHCP.Checked      = m_ConfigBST.useDHCP;
                useServer.Checked = m_ConfigBST.useServer;
                synchTime.Checked = m_ConfigBST.syncTimeWithServer;

                ipAddr.Text     = Encoding.ASCII.GetString(m_ConfigBST.ipAddr);
                gateway.Text    = Encoding.ASCII.GetString(m_ConfigBST.gateway);
                subnetMask.Text = Encoding.ASCII.GetString(m_ConfigBST.subnetMask);
                serverIP.Text   = Encoding.ASCII.GetString(m_ConfigBST.serverIP);

                if (m_ConfigBST.useServer)
                {
                    port.Text = m_ConfigBST.serverPort.ToString();
                }
                else
                {
                    port.Text = m_ConfigBST.port.ToString();
                }

                if (DHCP.Checked)
                {
                    ipAddr.Enabled     = false;
                    gateway.Enabled    = false;
                    subnetMask.Enabled = false;
                }
                else
                {
                    ipAddr.Enabled     = true;
                    gateway.Enabled    = true;
                    subnetMask.Enabled = true;
                }
            }

            return(true);
        }
예제 #19
0
        private bool ReadSysInfo()
        {
            int configSize = 0;

            Cursor.Current = Cursors.WaitCursor;

            if (m_DeviceType == BSSDK.BS_DEVICE_BEPLUS || m_DeviceType == BSSDK.BS_DEVICE_XPASS)
            {
                IntPtr sysInfo = Marshal.AllocHGlobal(Marshal.SizeOf(m_SysInfoBEPlus));

                int result = BSSDK.BS_ReadConfigUDP(m_Handle, m_DeviceAddr, m_DeviceID, BSSDK.BEPLUS_CONFIG_SYS_INFO, ref configSize, sysInfo);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot read the sys info", "Error");

                    Marshal.FreeHGlobal(sysInfo);
                    return(false);
                }

                m_SysInfoBEPlus = (BSSDK.BESysInfoData)Marshal.PtrToStructure(sysInfo, typeof(BSSDK.BESysInfoData));

                Marshal.FreeHGlobal(sysInfo);

                deviceID.Text = String.Format("{0}", m_SysInfoBEPlus.ID);

                MAC.Text = "";

                int i = 0;
                for (i = 0; i < 5; i++)
                {
                    MAC.Text += m_SysInfoBEPlus.macAddr[i].ToString("X2") + ":";
                }
                MAC.Text += m_SysInfoBEPlus.macAddr[i].ToString("X2");

                FWVersion.Text = Encoding.ASCII.GetString(m_SysInfoBEPlus.firmwareVer);
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_BIOLITE)
            {
                IntPtr sysInfo = Marshal.AllocHGlobal(Marshal.SizeOf(m_SysInfoBLN));

                int result = BSSDK.BS_ReadConfigUDP(m_Handle, m_DeviceAddr, m_DeviceID, BSSDK.BLN_CONFIG_SYS_INFO, ref configSize, sysInfo);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot read the sys info", "Error");

                    Marshal.FreeHGlobal(sysInfo);
                    return(false);
                }

                m_SysInfoBLN = (BSSDK.BESysInfoDataBLN)Marshal.PtrToStructure(sysInfo, typeof(BSSDK.BESysInfoDataBLN));

                Marshal.FreeHGlobal(sysInfo);

                deviceID.Text = String.Format("{0}", m_SysInfoBLN.ID);

                MAC.Text = "";

                int i = 0;
                for (i = 0; i < 5; i++)
                {
                    MAC.Text += m_SysInfoBLN.macAddr[i].ToString("X2") + ":";
                }
                MAC.Text += m_SysInfoBLN.macAddr[i].ToString("X2");

                FWVersion.Text = Encoding.ASCII.GetString(m_SysInfoBLN.firmwareVer);
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_BIOSTATION)
            {
                IntPtr sysInfo = Marshal.AllocHGlobal(Marshal.SizeOf(m_SysInfoBST));

                int result = BSSDK.BS_ReadConfigUDP(m_Handle, m_DeviceAddr, m_DeviceID, BSSDK.BS_CONFIG_SYS_INFO, ref configSize, sysInfo);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot read the sys info", "Error");

                    Marshal.FreeHGlobal(sysInfo);
                    return(false);
                }

                m_SysInfoBST = (BSSDK.BSSysInfoConfig)Marshal.PtrToStructure(sysInfo, typeof(BSSDK.BSSysInfoConfig));

                Marshal.FreeHGlobal(sysInfo);

                deviceID.Text = String.Format("{0}", m_SysInfoBST.ID);

                MAC.Text       = Encoding.ASCII.GetString(m_SysInfoBST.macAddr);
                FWVersion.Text = Encoding.ASCII.GetString(m_SysInfoBST.firmwareVer);
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_DSTATION)
            {
                IntPtr sysInfo = Marshal.AllocHGlobal(Marshal.SizeOf(m_SysInfoBST));

                int result = BSSDK.BS_ReadConfigUDP(m_Handle, m_DeviceAddr, m_DeviceID, BSSDK.BS_CONFIG_SYS_INFO, ref configSize, sysInfo);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot read the sys info", "Error");

                    Marshal.FreeHGlobal(sysInfo);
                    return(false);
                }

                m_SysInfoBST = (BSSDK.BSSysInfoConfig)Marshal.PtrToStructure(sysInfo, typeof(BSSDK.BSSysInfoConfig));

                Marshal.FreeHGlobal(sysInfo);

                deviceID.Text = String.Format("{0}", m_SysInfoBST.ID);

                MAC.Text       = Encoding.ASCII.GetString(m_SysInfoBST.macAddr);
                FWVersion.Text = Encoding.ASCII.GetString(m_SysInfoBST.firmwareVer);
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_XSTATION)
            {
                IntPtr sysInfo = Marshal.AllocHGlobal(Marshal.SizeOf(m_SysInfoBST));

                int result = BSSDK.BS_ReadConfigUDP(m_Handle, m_DeviceAddr, m_DeviceID, BSSDK.BS_CONFIG_SYS_INFO, ref configSize, sysInfo);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot read the sys info", "Error");

                    Marshal.FreeHGlobal(sysInfo);
                    return(false);
                }

                m_SysInfoBST = (BSSDK.BSSysInfoConfig)Marshal.PtrToStructure(sysInfo, typeof(BSSDK.BSSysInfoConfig));

                Marshal.FreeHGlobal(sysInfo);

                deviceID.Text = String.Format("{0}", m_SysInfoBST.ID);

                MAC.Text       = Encoding.ASCII.GetString(m_SysInfoBST.macAddr);
                FWVersion.Text = Encoding.ASCII.GetString(m_SysInfoBST.firmwareVer);
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_BIOSTATION2)
            {
                IntPtr sysInfo = Marshal.AllocHGlobal(Marshal.SizeOf(m_SysInfoBST));

                int result = BSSDK.BS_ReadConfigUDP(m_Handle, m_DeviceAddr, m_DeviceID, BSSDK.BS_CONFIG_SYS_INFO, ref configSize, sysInfo);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot read the sys info", "Error");

                    Marshal.FreeHGlobal(sysInfo);
                    return(false);
                }

                m_SysInfoBST = (BSSDK.BSSysInfoConfig)Marshal.PtrToStructure(sysInfo, typeof(BSSDK.BSSysInfoConfig));

                Marshal.FreeHGlobal(sysInfo);

                deviceID.Text = String.Format("{0}", m_SysInfoBST.ID);

                MAC.Text       = Encoding.ASCII.GetString(m_SysInfoBST.macAddr);
                FWVersion.Text = Encoding.ASCII.GetString(m_SysInfoBST.firmwareVer);
            }

            return(true);
        }
        private void addUser_Click(object sender, EventArgs e)
        {
            if (userID.Text.Length == 0)
            {
                MessageBox.Show("Enter user ID first", "Error");
                return;
            }

            uint ID = 0;

            try
            {
                ID = UInt32.Parse(userID.Text);
            }
            catch (Exception)
            {
                MessageBox.Show("Invalid ID", "Error");
                return;
            }

            int result          = 0;
            int fingerChecksum1 = 0;
            int fingerChecksum2 = 0;

            byte[] templateData = new byte[TEMPLATE_SIZE];

            int numOfFinger = 0;

            if (finger1.Checked)
            {
                numOfFinger++;

                Cursor.Current = Cursors.WaitCursor;
                result         = BSSDK.BS_ScanTemplate(m_Handle, templateData);
                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot scan the finger", "Error");
                    return;
                }

                Buffer.BlockCopy(templateData, 0, m_TemplateData, 0, TEMPLATE_SIZE);

                Cursor.Current = Cursors.WaitCursor;
                result         = BSSDK.BS_ScanTemplate(m_Handle, templateData);
                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot scan the finger", "Error");
                    return;
                }

                Buffer.BlockCopy(templateData, 0, m_TemplateData, TEMPLATE_SIZE, TEMPLATE_SIZE);

                for (int i = 0; i < TEMPLATE_SIZE * 2; i++)
                {
                    fingerChecksum1 += m_TemplateData[i];
                }

                checksum1.Text = fingerChecksum1.ToString();

                if (finger2.Checked)
                {
                    numOfFinger++;

                    Cursor.Current = Cursors.WaitCursor;
                    result         = BSSDK.BS_ScanTemplate(m_Handle, templateData);
                    Cursor.Current = Cursors.Default;

                    if (result != BSSDK.BS_SUCCESS)
                    {
                        MessageBox.Show("Cannot scan the finger", "Error");
                        return;
                    }

                    Buffer.BlockCopy(templateData, 0, m_TemplateData, TEMPLATE_SIZE * 2, TEMPLATE_SIZE);

                    Cursor.Current = Cursors.WaitCursor;
                    result         = BSSDK.BS_ScanTemplate(m_Handle, templateData);
                    Cursor.Current = Cursors.Default;

                    if (result != BSSDK.BS_SUCCESS)
                    {
                        MessageBox.Show("Cannot scan the finger", "Error");
                        return;
                    }

                    Buffer.BlockCopy(templateData, 0, m_TemplateData, TEMPLATE_SIZE * 3, TEMPLATE_SIZE);

                    for (int i = 0; i < TEMPLATE_SIZE * 2; i++)
                    {
                        fingerChecksum2 += m_TemplateData[TEMPLATE_SIZE * 2 + i];
                    }

                    checksum2.Text = fingerChecksum2.ToString();
                }
            }

            if (m_DeviceType == BSSDK.BS_DEVICE_BEPLUS || m_DeviceType == BSSDK.BS_DEVICE_BIOLITE)
            {
                BSSDK.BEUserHdr userHdr = new BSSDK.BEUserHdr();
                userHdr.fingerChecksum = new ushort[2];
                userHdr.isDuress       = new byte[2];
                userHdr.numOfFinger    = (ushort)numOfFinger;

                userHdr.fingerChecksum[0] = (ushort)fingerChecksum1;
                userHdr.fingerChecksum[1] = (ushort)fingerChecksum2;

                userHdr.userID        = ID;
                userHdr.adminLevel    = (ushort)userLevel.SelectedIndex;
                userHdr.securityLevel = (ushort)securityLevel.SelectedIndex;
                userHdr.cardFlag      = (byte)cardType.SelectedIndex;
                userHdr.startTime     = (int)((startDate.Value.Ticks - new DateTime(1970, 1, 1).Ticks) / 10000000);
                userHdr.expiryTime    = (int)((expiryDate.Value.Ticks - new DateTime(1970, 1, 1).Ticks) / 10000000);
                userHdr.isDuress[0]   = (duress1.Checked) ? (byte)1 : (byte)0;
                userHdr.isDuress[1]   = (duress2.Checked) ? (byte)1 : (byte)0;
                userHdr.opMode        = (ushort)authMode.SelectedIndex;

                try
                {
                    userHdr.cardID = UInt32.Parse(userCardID.Text, System.Globalization.NumberStyles.HexNumber);
                }
                catch (Exception)
                {
                    userHdr.cardID = 0;
                }

                try
                {
                    userHdr.cardCustomID = (byte)Int32.Parse(cardCustomID.Text);
                }
                catch (Exception)
                {
                    userHdr.cardCustomID = 0;
                }

                userHdr.cardVersion = BSSDK.BE_CARD_VERSION_1;
                userHdr.disabled    = 0;
                userHdr.dualMode    = 0;

                try
                {
                    userHdr.accessGroupMask = UInt32.Parse(accessGroup.Text, System.Globalization.NumberStyles.HexNumber);
                }
                catch (Exception)
                {
                    userHdr.accessGroupMask = 0xffffffff;
                }

                IntPtr userInfo = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(BSSDK.BEUserHdr)));
                Marshal.StructureToPtr(userHdr, userInfo, true);

                Cursor.Current = Cursors.WaitCursor;

                result = BSSDK.BS_EnrollUserBEPlus(m_Handle, userInfo, m_TemplateData);

                Cursor.Current = Cursors.Default;

                Marshal.FreeHGlobal(userInfo);

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot enroll the user", "Error");
                    return;
                }

                ReadUserInfo();
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_BIOSTATION)
            {
                BSSDK.BSUserHdrEx userHdr = new BSSDK.BSUserHdrEx();

                userHdr.checksum   = new ushort[5];
                userHdr.name       = new byte[33];
                userHdr.department = new byte[33];
                userHdr.password   = new byte[17];

                userHdr.authLimitCount    = 0;
                userHdr.timedAntiPassback = 0;
                userHdr.disabled          = 0;

                userHdr.numOfFinger = (ushort)numOfFinger;

                userHdr.checksum[0] = (ushort)fingerChecksum1;
                userHdr.checksum[1] = (ushort)fingerChecksum2;

                userHdr.ID            = ID;
                userHdr.adminLevel    = (ushort)((userLevel.SelectedIndex == 1) ? BSSDK.BS_USER_ADMIN : BSSDK.BS_USER_NORMAL);
                userHdr.securityLevel = (ushort)(securityLevel.SelectedIndex + BSSDK.BS_USER_SECURITY_DEFAULT);

                userHdr.bypassCard     = (byte)cardType.SelectedIndex;
                userHdr.startDateTime  = (uint)((startDate.Value.Ticks - new DateTime(1970, 1, 1).Ticks) / 10000000);
                userHdr.expireDateTime = (uint)((expiryDate.Value.Ticks - new DateTime(1970, 1, 1).Ticks) / 10000000);

                userHdr.duressMask = 0;
                if (duress1.Checked)
                {
                    userHdr.duressMask |= 0x01;
                }
                if (duress2.Checked)
                {
                    userHdr.duressMask |= 0x02;
                }

                if (authMode.SelectedIndex == 0)
                {
                    userHdr.authMode = 0;
                }
                else
                {
                    userHdr.authMode = (ushort)(authMode.SelectedIndex + BSSDK.BS_AUTH_FINGER_ONLY - 1);
                }

                try
                {
                    userHdr.cardID = UInt32.Parse(userCardID.Text, System.Globalization.NumberStyles.HexNumber);
                }
                catch (Exception)
                {
                    userHdr.cardID = 0;
                }

                try
                {
                    userHdr.customID = (byte)Int32.Parse(cardCustomID.Text);
                }
                catch (Exception)
                {
                    userHdr.customID = 0;
                }

                userHdr.version = BSSDK.BE_CARD_VERSION_1;

                try
                {
                    userHdr.accessGroupMask = UInt32.Parse(accessGroup.Text, System.Globalization.NumberStyles.HexNumber);
                }
                catch (Exception)
                {
                    userHdr.accessGroupMask = 0xffffffff;
                }

                IntPtr userInfo = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(BSSDK.BSUserHdrEx)));
                Marshal.StructureToPtr(userHdr, userInfo, true);

                Cursor.Current = Cursors.WaitCursor;

                result = BSSDK.BS_EnrollUserEx(m_Handle, userInfo, m_TemplateData);

                Cursor.Current = Cursors.Default;

                Marshal.FreeHGlobal(userInfo);

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot enroll the user", "Error");
                    return;
                }

                ReadUserInfo();
            }
        }
        private void updateUser_Click(object sender, EventArgs e)
        {
            if (userList.SelectedItems.Count == 0)
            {
                MessageBox.Show("Please select a user first", "Error");
                return;
            }

            uint ID = 0;

            try
            {
                ID = UInt32.Parse(userList.SelectedItems[0].Text);
            }
            catch (Exception)
            {
                MessageBox.Show("Invalid ID", "Error");
                return;
            }

            if (m_DeviceType == BSSDK.BS_DEVICE_BEPLUS || m_DeviceType == BSSDK.BS_DEVICE_BIOLITE)
            {
                IntPtr userInfo = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(BSSDK.BEUserHdr)));

                Cursor.Current = Cursors.WaitCursor;

                int result = BSSDK.BS_GetUserBEPlus(m_Handle, ID, userInfo, m_TemplateData);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    Marshal.FreeHGlobal(userInfo);

                    MessageBox.Show("Cannot get the user", "Error");
                    return;
                }

                BSSDK.BEUserHdr userHdr = (BSSDK.BEUserHdr)Marshal.PtrToStructure(userInfo, typeof(BSSDK.BEUserHdr));

                userHdr.adminLevel    = (ushort)userLevel.SelectedIndex;
                userHdr.securityLevel = (ushort)securityLevel.SelectedIndex;
                userHdr.cardFlag      = (byte)cardType.SelectedIndex;
                userHdr.startTime     = (int)((startDate.Value.Ticks - new DateTime(1970, 1, 1).Ticks) / 10000000);
                userHdr.expiryTime    = (int)((expiryDate.Value.Ticks - new DateTime(1970, 1, 1).Ticks) / 10000000);
                userHdr.isDuress[0]   = (duress1.Checked) ? (byte)1 : (byte)0;
                userHdr.isDuress[1]   = (duress2.Checked) ? (byte)1 : (byte)0;
                userHdr.opMode        = (ushort)authMode.SelectedIndex;

                try
                {
                    userHdr.cardID = UInt32.Parse(userCardID.Text, System.Globalization.NumberStyles.HexNumber);
                }
                catch (Exception)
                {
                    userHdr.cardID = 0;
                }

                try
                {
                    userHdr.cardCustomID = (byte)Int32.Parse(cardCustomID.Text);
                }
                catch (Exception)
                {
                    userHdr.cardCustomID = 0;
                }

                try
                {
                    userHdr.accessGroupMask = UInt32.Parse(accessGroup.Text, System.Globalization.NumberStyles.HexNumber);
                }
                catch (Exception)
                {
                    userHdr.accessGroupMask = 0xffffffff;
                }

                Marshal.StructureToPtr(userHdr, userInfo, true);

                Cursor.Current = Cursors.WaitCursor;

                result = BSSDK.BS_EnrollUserBEPlus(m_Handle, userInfo, m_TemplateData);

                Cursor.Current = Cursors.Default;

                Marshal.FreeHGlobal(userInfo);

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot enroll the user", "Error");
                }
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_BIOSTATION)
            {
                IntPtr userInfo = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(BSSDK.BSUserHdrEx)));

                Cursor.Current = Cursors.WaitCursor;

                int result = BSSDK.BS_GetUserEx(m_Handle, ID, userInfo, m_TemplateData);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    Marshal.FreeHGlobal(userInfo);

                    MessageBox.Show("Cannot get the user", "Error");
                    return;
                }

                BSSDK.BSUserHdrEx userHdr = (BSSDK.BSUserHdrEx)Marshal.PtrToStructure(userInfo, typeof(BSSDK.BSUserHdrEx));


                userHdr.adminLevel    = (ushort)((userLevel.SelectedIndex == 1) ? BSSDK.BS_USER_ADMIN : BSSDK.BS_USER_NORMAL);
                userHdr.securityLevel = (ushort)(securityLevel.SelectedIndex + BSSDK.BS_USER_SECURITY_DEFAULT);

                userHdr.bypassCard     = (byte)cardType.SelectedIndex;
                userHdr.startDateTime  = (uint)((startDate.Value.Ticks - new DateTime(1970, 1, 1).Ticks) / 10000000);
                userHdr.expireDateTime = (uint)((expiryDate.Value.Ticks - new DateTime(1970, 1, 1).Ticks) / 10000000);

                if (authMode.SelectedIndex == 0)
                {
                    userHdr.authMode = 0;
                }
                else
                {
                    userHdr.authMode = (ushort)(authMode.SelectedIndex + BSSDK.BS_AUTH_FINGER_ONLY - 1);
                }

                try
                {
                    userHdr.cardID = UInt32.Parse(userCardID.Text, System.Globalization.NumberStyles.HexNumber);
                }
                catch (Exception)
                {
                    userHdr.cardID = 0;
                }

                try
                {
                    userHdr.customID = (byte)Int32.Parse(cardCustomID.Text);
                }
                catch (Exception)
                {
                    userHdr.customID = 0;
                }

                try
                {
                    userHdr.accessGroupMask = UInt32.Parse(accessGroup.Text, System.Globalization.NumberStyles.HexNumber);
                }
                catch (Exception)
                {
                    userHdr.accessGroupMask = 0xffffffff;
                }

                Marshal.StructureToPtr(userHdr, userInfo, true);

                Cursor.Current = Cursors.WaitCursor;

                result = BSSDK.BS_EnrollUserEx(m_Handle, userInfo, m_TemplateData);

                Cursor.Current = Cursors.Default;

                Marshal.FreeHGlobal(userInfo);

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot enroll the user", "Error");
                }
            }
        }
예제 #22
0
        private void writeConfig_Click(object sender, EventArgs e)
        {
            if (m_DeviceType == BSSDK.BS_DEVICE_BEPLUS || m_DeviceType == BSSDK.BS_DEVICE_XPASS)
            {
                m_ConfigBEPlus.useDHCP   = DHCP.Checked;
                m_ConfigBEPlus.useServer = useServer.Checked;
                m_ConfigBEPlus.synchTime = synchTime.Checked;

                IPAddress addr = IPAddress.Parse(ipAddr.Text);
                m_ConfigBEPlus.ipAddr = (uint)addr.Address;

                addr = IPAddress.Parse(gateway.Text);
                m_ConfigBEPlus.gateway = (uint)addr.Address;

                addr = IPAddress.Parse(subnetMask.Text);
                m_ConfigBEPlus.subnetMask = (uint)addr.Address;

                addr = IPAddress.Parse(serverIP.Text);
                m_ConfigBEPlus.serverIpAddr = (uint)addr.Address;

                m_ConfigBEPlus.port = Int32.Parse(port.Text);

                int    configSize = Marshal.SizeOf(m_ConfigBEPlus);
                IntPtr config     = Marshal.AllocHGlobal(configSize);

                Marshal.StructureToPtr(m_ConfigBEPlus, config, true);

                Cursor.Current = Cursors.WaitCursor;

                int result = BSSDK.BS_WriteConfigUDP(m_Handle, m_DeviceAddr, m_DeviceID, BSSDK.BEPLUS_CONFIG, configSize, config);

                Marshal.FreeHGlobal(config);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot write the configuration", "Error");
                }
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_BIOLITE)
            {
                m_ConfigBLN.useDHCP   = DHCP.Checked;
                m_ConfigBLN.useServer = useServer.Checked;
                m_ConfigBLN.synchTime = synchTime.Checked;

                IPAddress addr = IPAddress.Parse(ipAddr.Text);
                m_ConfigBLN.ipAddr = (uint)addr.Address;

                addr = IPAddress.Parse(gateway.Text);
                m_ConfigBLN.gateway = (uint)addr.Address;

                addr = IPAddress.Parse(subnetMask.Text);
                m_ConfigBLN.subnetMask = (uint)addr.Address;

                addr = IPAddress.Parse(serverIP.Text);
                m_ConfigBLN.serverIpAddr = (uint)addr.Address;

                m_ConfigBLN.port = Int32.Parse(port.Text);

                int    configSize = Marshal.SizeOf(m_ConfigBLN);
                IntPtr config     = Marshal.AllocHGlobal(configSize);

                Marshal.StructureToPtr(m_ConfigBLN, config, true);

                Cursor.Current = Cursors.WaitCursor;

                int result = BSSDK.BS_WriteConfigUDP(m_Handle, m_DeviceAddr, m_DeviceID, BSSDK.BLN_CONFIG, configSize, config);

                Marshal.FreeHGlobal(config);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot write the configuration", "Error");
                }
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_BIOSTATION)
            {
                m_ConfigBST.useDHCP            = DHCP.Checked;
                m_ConfigBST.useServer          = useServer.Checked;
                m_ConfigBST.syncTimeWithServer = synchTime.Checked;

                byte[] addr = Encoding.ASCII.GetBytes(ipAddr.Text);
                Buffer.BlockCopy(addr, 0, m_ConfigBST.ipAddr, 0, addr.Length);

                addr = Encoding.ASCII.GetBytes(gateway.Text);
                Buffer.BlockCopy(addr, 0, m_ConfigBST.gateway, 0, addr.Length);

                addr = Encoding.ASCII.GetBytes(subnetMask.Text);
                Buffer.BlockCopy(addr, 0, m_ConfigBST.subnetMask, 0, addr.Length);

                addr = Encoding.ASCII.GetBytes(serverIP.Text);
                Buffer.BlockCopy(addr, 0, m_ConfigBST.serverIP, 0, addr.Length);

                if (useServer.Checked)
                {
                    m_ConfigBST.serverPort = UInt32.Parse(port.Text);
                }
                else
                {
                    m_ConfigBST.port = UInt32.Parse(port.Text);
                }

                int    configSize = Marshal.SizeOf(m_ConfigBST);
                IntPtr config     = Marshal.AllocHGlobal(configSize);

                Marshal.StructureToPtr(m_ConfigBST, config, true);

                Cursor.Current = Cursors.WaitCursor;

                int result = BSSDK.BS_WriteConfigUDP(m_Handle, m_DeviceAddr, m_DeviceID, BSSDK.BS_CONFIG_TCPIP, configSize, config);

                Marshal.FreeHGlobal(config);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot write the configuration", "Error");
                }
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_DSTATION)
            {
                m_ConfigBST.useDHCP            = DHCP.Checked;
                m_ConfigBST.useServer          = useServer.Checked;
                m_ConfigBST.syncTimeWithServer = synchTime.Checked;

                byte[] addr = Encoding.ASCII.GetBytes(ipAddr.Text);
                Buffer.BlockCopy(addr, 0, m_ConfigBST.ipAddr, 0, addr.Length);

                addr = Encoding.ASCII.GetBytes(gateway.Text);
                Buffer.BlockCopy(addr, 0, m_ConfigBST.gateway, 0, addr.Length);

                addr = Encoding.ASCII.GetBytes(subnetMask.Text);
                Buffer.BlockCopy(addr, 0, m_ConfigBST.subnetMask, 0, addr.Length);

                addr = Encoding.ASCII.GetBytes(serverIP.Text);
                Buffer.BlockCopy(addr, 0, m_ConfigBST.serverIP, 0, addr.Length);

                if (useServer.Checked)
                {
                    m_ConfigBST.serverPort = UInt32.Parse(port.Text);
                }
                else
                {
                    m_ConfigBST.port = UInt32.Parse(port.Text);
                }

                int    configSize = Marshal.SizeOf(m_ConfigBST);
                IntPtr config     = Marshal.AllocHGlobal(configSize);

                Marshal.StructureToPtr(m_ConfigBST, config, true);

                Cursor.Current = Cursors.WaitCursor;

                int result = BSSDK.BS_WriteConfigUDP(m_Handle, m_DeviceAddr, m_DeviceID, BSSDK.BS_CONFIG_TCPIP, configSize, config);

                Marshal.FreeHGlobal(config);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot write the configuration", "Error");
                }
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_XSTATION || m_DeviceType == BSSDK.BS_DEVICE_BIOSTATION2)
            {
                m_ConfigBST.useDHCP            = DHCP.Checked;
                m_ConfigBST.useServer          = useServer.Checked;
                m_ConfigBST.syncTimeWithServer = synchTime.Checked;

                byte[] addr = Encoding.ASCII.GetBytes(ipAddr.Text);
                Buffer.BlockCopy(addr, 0, m_ConfigBST.ipAddr, 0, addr.Length);

                addr = Encoding.ASCII.GetBytes(gateway.Text);
                Buffer.BlockCopy(addr, 0, m_ConfigBST.gateway, 0, addr.Length);

                addr = Encoding.ASCII.GetBytes(subnetMask.Text);
                Buffer.BlockCopy(addr, 0, m_ConfigBST.subnetMask, 0, addr.Length);

                addr = Encoding.ASCII.GetBytes(serverIP.Text);
                Buffer.BlockCopy(addr, 0, m_ConfigBST.serverIP, 0, addr.Length);

                if (useServer.Checked)
                {
                    m_ConfigBST.serverPort = UInt32.Parse(port.Text);
                }
                else
                {
                    m_ConfigBST.port = UInt32.Parse(port.Text);
                }

                int    configSize = Marshal.SizeOf(m_ConfigBST);
                IntPtr config     = Marshal.AllocHGlobal(configSize);

                Marshal.StructureToPtr(m_ConfigBST, config, true);

                Cursor.Current = Cursors.WaitCursor;

                int result = BSSDK.BS_WriteConfigUDP(m_Handle, m_DeviceAddr, m_DeviceID, BSSDK.BS_CONFIG_TCPIP, configSize, config);

                Marshal.FreeHGlobal(config);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    MessageBox.Show("Cannot write the configuration", "Error");
                }
            }
        }
        private bool ReadUserInfo()
        {
            int numUser     = 0;
            int numTemplate = 0;

            Cursor.Current = Cursors.WaitCursor;

            int result = BSSDK.BS_GetUserDBInfo(m_Handle, ref numUser, ref numTemplate);

            Cursor.Current = Cursors.Default;

            if (result != BSSDK.BS_SUCCESS)
            {
                MessageBox.Show("Cannot get user DB info", "Error");
                return(false);
            }

            numOfUser.Text     = numUser.ToString();
            numOfTemplate.Text = numTemplate.ToString();

            m_NumOfUser = numUser;

            if (m_DeviceType == BSSDK.BS_DEVICE_BEPLUS || m_DeviceType == BSSDK.BS_DEVICE_BIOLITE)
            {
                BSSDK.BEUserHdr[] userHdr = new BSSDK.BEUserHdr[m_NumOfUser];

                IntPtr userInfo = Marshal.AllocHGlobal(m_NumOfUser * Marshal.SizeOf(typeof(BSSDK.BEUserHdr)));

                Cursor.Current = Cursors.WaitCursor;

                result = BSSDK.BS_GetAllUserInfoBEPlus(m_Handle, userInfo, ref m_NumOfUser);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS && result != BSSDK.BS_ERR_NOT_FOUND)
                {
                    Marshal.FreeHGlobal(userInfo);

                    MessageBox.Show("Cannot get user header info", "Error");
                    return(false);
                }

                userList.Items.Clear();

                for (int i = 0; i < m_NumOfUser; i++)
                {
                    userHdr[i] = (BSSDK.BEUserHdr)Marshal.PtrToStructure(new IntPtr(userInfo.ToInt32() + i * Marshal.SizeOf(typeof(BSSDK.BEUserHdr))), typeof(BSSDK.BEUserHdr));

                    ListViewItem userItem = userList.Items.Add(userHdr[i].userID.ToString());
                    userItem.SubItems.Add(userHdr[i].numOfFinger.ToString());
                    userItem.SubItems.Add(userHdr[i].cardID.ToString("X"));
                }

                Marshal.FreeHGlobal(userInfo);
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_BIOSTATION)
            {
                BSSDK.BSUserHdrEx[] userHdr = new BSSDK.BSUserHdrEx[m_NumOfUser];

                IntPtr userInfo = Marshal.AllocHGlobal(m_NumOfUser * Marshal.SizeOf(typeof(BSSDK.BSUserHdrEx)));

                Cursor.Current = Cursors.WaitCursor;

                result = BSSDK.BS_GetAllUserInfoEx(m_Handle, userInfo, ref m_NumOfUser);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS && result != BSSDK.BS_ERR_NOT_FOUND)
                {
                    Marshal.FreeHGlobal(userInfo);

                    MessageBox.Show("Cannot get user header info", "Error");
                    return(false);
                }

                userList.Items.Clear();

                for (int i = 0; i < m_NumOfUser; i++)
                {
                    userHdr[i] = (BSSDK.BSUserHdrEx)Marshal.PtrToStructure(new IntPtr(userInfo.ToInt32() + i * Marshal.SizeOf(typeof(BSSDK.BSUserHdrEx))), typeof(BSSDK.BSUserHdrEx));

                    ListViewItem userItem = userList.Items.Add(userHdr[i].ID.ToString());
                    userItem.SubItems.Add(userHdr[i].numOfFinger.ToString());
                    userItem.SubItems.Add(userHdr[i].cardID.ToString("X"));
                }

                Marshal.FreeHGlobal(userInfo);
            }

            if (m_NumOfUser > 0)
            {
                try
                {
                    uint ID = UInt32.Parse(userList.Items[0].Text);

                    ReadUser(ID);
                }
                catch (Exception)
                {
                }
            }

            return(true);
        }
        private void ReadUser(uint ID)
        {
            if (m_DeviceType == BSSDK.BS_DEVICE_BEPLUS || m_DeviceType == BSSDK.BS_DEVICE_BIOLITE)
            {
                IntPtr userInfo = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(BSSDK.BEUserHdr)));

                Cursor.Current = Cursors.WaitCursor;

                int result = BSSDK.BS_GetUserBEPlus(m_Handle, ID, userInfo, m_TemplateData);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    Marshal.FreeHGlobal(userInfo);

                    MessageBox.Show("Cannot get user info", "Error");
                    return;
                }

                BSSDK.BEUserHdr userHdr = (BSSDK.BEUserHdr)Marshal.PtrToStructure(userInfo, typeof(BSSDK.BEUserHdr));

                Marshal.FreeHGlobal(userInfo);

                userID.Text                 = userHdr.userID.ToString();
                userCardID.Text             = userHdr.cardID.ToString("X");
                cardCustomID.Text           = userHdr.cardCustomID.ToString();
                userLevel.SelectedIndex     = userHdr.adminLevel;
                securityLevel.SelectedIndex = userHdr.securityLevel;
                cardType.SelectedIndex      = userHdr.cardFlag;
                name.Text = "";

                accessGroup.Text = userHdr.accessGroupMask.ToString("X");

                if (userHdr.opMode >= BSSDK.BS_AUTH_FINGER_ONLY && userHdr.opMode <= BSSDK.BS_AUTH_CARD_ONLY)
                {
                    authMode.SelectedIndex = userHdr.opMode - BSSDK.BS_AUTH_FINGER_ONLY + 1;
                }
                else
                {
                    authMode.SelectedIndex = 0;
                }

                startDate.Value  = new DateTime(1970, 1, 1).AddSeconds(userHdr.startTime);
                expiryDate.Value = new DateTime(1970, 1, 1).AddSeconds(userHdr.expiryTime);

                if (userHdr.numOfFinger > 0)
                {
                    finger1.Checked = true;
                    duress1.Checked = (userHdr.isDuress[0] == 1);
                    checksum1.Text  = userHdr.fingerChecksum[0].ToString();
                }
                else
                {
                    finger1.Checked = false;
                    duress1.Checked = false;
                    checksum1.Text  = "";
                }

                if (userHdr.numOfFinger > 1)
                {
                    finger2.Checked = true;
                    duress2.Checked = (userHdr.isDuress[1] == 1);
                    checksum2.Text  = userHdr.fingerChecksum[1].ToString();
                }
                else
                {
                    finger2.Checked = false;
                    duress2.Checked = false;
                    checksum2.Text  = "";
                }
            }
            else if (m_DeviceType == BSSDK.BS_DEVICE_BIOSTATION)
            {
                IntPtr userInfo = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(BSSDK.BSUserHdrEx)));

                Cursor.Current = Cursors.WaitCursor;

                int result = BSSDK.BS_GetUserEx(m_Handle, ID, userInfo, m_TemplateData);

                Cursor.Current = Cursors.Default;

                if (result != BSSDK.BS_SUCCESS)
                {
                    Marshal.FreeHGlobal(userInfo);

                    MessageBox.Show("Cannot get user info", "Error");
                    return;
                }

                BSSDK.BSUserHdrEx userHdr = (BSSDK.BSUserHdrEx)Marshal.PtrToStructure(userInfo, typeof(BSSDK.BSUserHdrEx));

                Marshal.FreeHGlobal(userInfo);

                userID.Text                 = userHdr.ID.ToString();
                userCardID.Text             = userHdr.cardID.ToString("X");
                cardCustomID.Text           = userHdr.customID.ToString();
                userLevel.SelectedIndex     = (userHdr.adminLevel == BSSDK.BS_USER_ADMIN) ? 1 : 0;
                securityLevel.SelectedIndex = (userHdr.securityLevel >= BSSDK.BS_USER_SECURITY_DEFAULT) ? userHdr.securityLevel - BSSDK.BS_USER_SECURITY_DEFAULT : 0;
                cardType.SelectedIndex      = userHdr.bypassCard;
                name.Text = Encoding.ASCII.GetString(userHdr.name);

                accessGroup.Text = userHdr.accessGroupMask.ToString("X");

                if (userHdr.authMode >= BSSDK.BS_AUTH_FINGER_ONLY && userHdr.authMode <= BSSDK.BS_AUTH_CARD_ONLY)
                {
                    authMode.SelectedIndex = userHdr.authMode - BSSDK.BS_AUTH_FINGER_ONLY + 1;
                }
                else
                {
                    authMode.SelectedIndex = 0;
                }

                startDate.Value  = new DateTime(1970, 1, 1).AddSeconds(userHdr.startDateTime);
                expiryDate.Value = new DateTime(1970, 1, 1).AddSeconds(userHdr.expireDateTime);

                if (userHdr.numOfFinger > 0)
                {
                    finger1.Checked = true;
                    duress1.Checked = (userHdr.duressMask & 0x01) == 0x01;
                    checksum1.Text  = userHdr.checksum[0].ToString();
                }
                else
                {
                    finger1.Checked = false;
                    duress1.Checked = false;
                    checksum1.Text  = "";
                }

                if (userHdr.numOfFinger > 1)
                {
                    finger2.Checked = true;
                    duress2.Checked = (userHdr.duressMask & 0x02) == 0x02;
                    checksum2.Text  = userHdr.checksum[1].ToString();
                }
                else
                {
                    finger2.Checked = false;
                    duress2.Checked = false;
                    checksum2.Text  = "";
                }
            }
        }