async void OnFrameAvailable(object sender, FrameReadyEventArgs e)
        {
            lastFrameTime = Environment.TickCount;

            var img = e.BitmapSource;

            CameraImage.Source = e.BitmapSource;

            if (img != null)
            {
                device.CameraInfo.LastFrame = img;
            }

            if (lastCheckTime + 1000 < lastFrameTime)
            {
                lastCheckTime = Environment.TickCount;
                var properties = await device.GetStatus();

                if (properties.ContainsKey("alarm_status"))
                {
                    // device current alarm status,0=no alarm;1=motion detection alarm;2=input alarm;3=voice detection alarm
                    double alarm = (double)properties["alarm_status"];
                    if (alarm == 1)
                    {
                        SaveFrame(e.BitmapSource);
                    }
                }
            }
        }
        private async void SetupNewCamera(FoscamDevice device)
        {
            var newCam = store.MergeNewCamera(device.CameraInfo);

            if (newCam.IsNew || newCam.LastPingTime + 10000 < Environment.TickCount)
            {
                // get the device properties
                device = new FoscamDevice()
                {
                    CameraInfo = newCam
                };
                var properties = await device.GetStatus();

                if (properties.HasValue("Error"))
                {
                    device.CameraInfo.StaticError = properties.GetValue <string>("Error");
                }
                else
                {
                    var realName = properties.GetValue <string>("alias");
                    if (!string.IsNullOrEmpty(realName))
                    {
                        newCam.Name = realName;
                    }

                    var sysver = properties.GetValue <string>("sys_ver");
                    if (!string.IsNullOrEmpty(sysver))
                    {
                        newCam.SystemVersion = sysver;
                    }

                    var webver = properties.GetValue <string>("app_ver");
                    if (!string.IsNullOrEmpty(webver))
                    {
                        newCam.WebUiVersion = webver;
                    }

                    CheckFirmwareVersion(device);
                    newCam.IsNew = false;
                }
            }

            Prompt.Text             = "";
            newCam.LastPingTime     = Environment.TickCount;
            newCam.Rebooting        = false;
            newCam.UpdatingFirmware = false;
            newCam.PropertyChanged -= OnCameraPropertyChanged;
            newCam.PropertyChanged += OnCameraPropertyChanged;

            if (store.Cameras.Count > 1 && noCamera != null && store.Cameras.Contains(noCamera))
            {
                this.RemoveNoCameraMessage();
            }
        }