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")); }
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"); } }