예제 #1
0
 void print(IntPtr sdkContext, BS2DoorStatus doorStatus)
 {
     Console.WriteLine(">>>> Door status ID[{0}]", doorStatus.id);
     Console.WriteLine("     |--opened[{0}]", Convert.ToBoolean(doorStatus.opened));
     Console.WriteLine("     |--unlocked[{0}]", Convert.ToBoolean(doorStatus.unlocked));
     Console.WriteLine("     |--heldOpened[{0}]", Convert.ToBoolean(doorStatus.heldOpened));
     Console.WriteLine("     |--unlockFlags[{0}]", (BS2DoorFlagEnum)doorStatus.unlockFlags);
     Console.WriteLine("     |--lockFlags[{0}]", (BS2DoorFlagEnum)doorStatus.lockFlags);
     Console.WriteLine("     |--alarmFlags[{0}]", (BS2DoorAlarmFlagEnum)doorStatus.alarmFlags);
     Console.WriteLine("     |--lastOpenTime[{0}]", Util.ConvertFromUnixTimestamp(doorStatus.lastOpenTime).ToString("yyyy-MM-dd HH:mm:ss"));
 }
예제 #2
0
        public void getDoorStatus(IntPtr sdkContext, UInt32 deviceID, bool isMasterDevice)
        {
            Console.WriteLine("Enter the ID of the door which you want to get its status: [ID_1,ID_2 ...]");
            Console.Write(">>>> ");
            char[]        delimiterChars = { ' ', ',', '.', ':', '\t' };
            string[]      doorIDs        = Console.ReadLine().Split(delimiterChars);
            List <UInt32> doorIDList     = new List <UInt32>();

            foreach (string doorID in doorIDs)
            {
                if (doorID.Length > 0)
                {
                    UInt32 item;
                    if (UInt32.TryParse(doorID, out item))
                    {
                        doorIDList.Add(item);
                    }
                }
            }

            if (doorIDList.Count > 0)
            {
                IntPtr doorStatusObj = IntPtr.Zero;
                UInt32 numDoorStatus = 0;
                IntPtr doorIDObj     = Marshal.AllocHGlobal(4 * doorIDList.Count);
                IntPtr curDoorIDObj  = doorIDObj;
                foreach (UInt32 item in doorIDList)
                {
                    Marshal.WriteInt32(curDoorIDObj, (Int32)item);
                    curDoorIDObj = (IntPtr)((long)curDoorIDObj + 4);
                }

                Console.WriteLine("Trying to get the status of the doors from device.");
                BS2ErrorCode result = (BS2ErrorCode)API.BS2_GetDoorStatus(sdkContext, deviceID, doorIDObj, (UInt32)doorIDList.Count, out doorStatusObj, out numDoorStatus);
                if (result != BS2ErrorCode.BS_SDK_SUCCESS)
                {
                    Console.WriteLine("Got error({0}).", result);
                }
                else if (numDoorStatus > 0)
                {
                    IntPtr curDoorStatusObj = doorStatusObj;
                    int    structSize       = Marshal.SizeOf(typeof(BS2DoorStatus));

                    for (int idx = 0; idx < numDoorStatus; ++idx)
                    {
                        BS2DoorStatus item = (BS2DoorStatus)Marshal.PtrToStructure(curDoorStatusObj, typeof(BS2DoorStatus));
                        print(sdkContext, item);
                        curDoorStatusObj = (IntPtr)((long)curDoorStatusObj + structSize);
                    }

                    API.BS2_ReleaseObject(doorStatusObj);
                }
                else
                {
                    Console.WriteLine(">>> There is no such door in the device.");
                }

                Marshal.FreeHGlobal(doorIDObj);
            }
            else
            {
                Console.WriteLine("Invalid parameter");
            }
        }