public DateTimeZoneSetting(ref CameraController controller)
        {
            map.Add(0x00000000, "None");
            map.Add(0x00000001, "Chatham Islands");
            map.Add(0x00000002, "Wellington");
            map.Add(0x00000003, "Solomon Islands");
            map.Add(0x00000004, "Sydney");
            map.Add(0x00000005, "Adelaide");
            map.Add(0x00000006, "Tokyo");
            map.Add(0x00000007, "Hong Kong");
            map.Add(0x00000008, "Bangkok");
            map.Add(0x00000009, "Yangon");
            map.Add(0x0000000A, "Dhaka");
            map.Add(0x0000000B, "Kathmandu");
            map.Add(0x0000000C, "Delhi");
            map.Add(0x0000000D, "Karachi");
            map.Add(0x0000000E, "Kabul");
            map.Add(0x0000000F, "Dubai");
            map.Add(0x00000010, "Tehran");
            map.Add(0x00000011, "Moscow");
            map.Add(0x00000012, "Cairo");
            map.Add(0x00000013, "Paris");
            map.Add(0x00000014, "London");
            map.Add(0x00000015, "Azores");
            map.Add(0x00000016, "Fernando");
            map.Add(0x00000017, "Sao Paulo");
            map.Add(0x00000018, "Newfoundland");
            map.Add(0x00000019, "Santiago");
            map.Add(0x0000001A, "Caracas");
            map.Add(0x0000001B, "New York");
            map.Add(0x0000001C, "Chicago");
            map.Add(0x0000001D, "Denver");
            map.Add(0x0000001E, "Los Angeles");
            map.Add(0x0000001F, "Anchorage");
            map.Add(0x00000020, "Honolulu");
            map.Add(0x00000021, "Samoa");
            map.Add(0x00000022, "Riyadh");
            map.Add(0x00000023, "Manaus");
            map.Add(0x00000100, "UTC");
            map.Add(0xffffffff, "unknown");

            _controller = controller;
            _camera     = _controller.GetModel().Camera;

            InitializeComponent();

            // Date / Time
            EDSDKLib.EDSDK.EdsTime utcTime = default(EDSDKLib.EDSDK.EdsTime);
            if (_camera != IntPtr.Zero)
            {
                uint err = EDSDKLib.EDSDK.EdsGetPropertyData(_camera, EDSDKLib.EDSDK.PropID_UTCTime, 0, out utcTime);

                // Zone Setting
                err = EDSDKLib.EDSDK.EdsGetPropertyData(_camera, EDSDKLib.EDSDK.PropID_TimeZone, 0, out _timeZone);

                _desc = new EDSDKLib.EDSDK.EdsPropertyDesc();
                err   = EDSDKLib.EDSDK.EdsGetPropertyDesc(_camera, EDSDKLib.EDSDK.PropID_TimeZone, out _desc);

                this.comboBox1.Items.Clear();

                for (int i = 0; i < _desc.NumElements; i++)
                {
                    string outString;
                    bool   isGet = map.TryGetValue((uint)_desc.PropDesc[i] >> 16, out outString);
                    if (isGet && !outString.Equals("unknown"))
                    {
                        // Create list of combo box
                        comboBox1.Items.Add(outString);
                        if (_timeZone == _desc.PropDesc[i])
                        {
                            // Select item of combo box
                            comboBox1.SelectedIndex = i;
                            _timeZone     = (uint)_desc.PropDesc[i];
                            _timeZonePrev = _timeZone;
                        }
                    }
                }

                // Daylight Saving Time
                uint summerTimeSetting;
                err = EDSDKLib.EDSDK.EdsGetPropertyData(_camera, EDSDKLib.EDSDK.PropID_SummerTimeSetting, 0, out summerTimeSetting);
                if (summerTimeSetting == 0x01)
                {
                    this.checkBox1.Checked = true;
                }
                _summerTimeSetting     = this.checkBox1.Checked;
                _summerTimeSettingPrev = _summerTimeSetting;

                // Time difference consideration
                DateTime dateTime = EdsTime2DateTime(utcTime);
                short    timeDiff = (short)(_timeZone & 0x0000ffff);
                TimeSpan timeSpan = new TimeSpan(0, Convert.ToInt32(this.checkBox1.Checked), timeDiff, 0);
                dateTime = dateTime.Add(timeSpan);
                utcTime  = DateTime2EdsTime(dateTime);

                _localTime         = EdsTime2StrTime(utcTime);
                _localTimePrev     = _localTime;
                this.textBox1.Text = _localTime;
            }
        }
示例#2
0
        static void Main()
        {
            // Initialization of SDK
            uint err = EDSDKLib.EDSDK.EdsInitializeSDK();

            bool isSDKLoaded = false;

            if (err == EDSDKLib.EDSDK.EDS_ERR_OK)
            {
                isSDKLoaded = true;
            }

            //Acquisition of camera list
            IntPtr cameraList = IntPtr.Zero;

            if (err == EDSDKLib.EDSDK.EDS_ERR_OK)
            {
                err = EDSDKLib.EDSDK.EdsGetCameraList(out cameraList);
            }

            //Acquisition of number of Cameras
            if (err == EDSDKLib.EDSDK.EDS_ERR_OK)
            {
                int count = 0;
                err = EDSDKLib.EDSDK.EdsGetChildCount(cameraList, out count);
                if (count == 0)
                {
                    err = EDSDKLib.EDSDK.EDS_ERR_DEVICE_NOT_FOUND;
                }
            }


            //Acquisition of camera at the head of the list
            IntPtr camera = IntPtr.Zero;

            if (err == EDSDKLib.EDSDK.EDS_ERR_OK)
            {
                err = EDSDKLib.EDSDK.EdsGetChildAtIndex(cameraList, 0, out camera);
            }

            //Acquisition of camera information
            EDSDKLib.EDSDK.EdsDeviceInfo deviceInfo;
            if (err == EDSDKLib.EDSDK.EDS_ERR_OK)
            {
                err = EDSDKLib.EDSDK.EdsGetDeviceInfo(camera, out deviceInfo);
                if (err == EDSDKLib.EDSDK.EDS_ERR_OK && camera == IntPtr.Zero)
                {
                    err = EDSDKLib.EDSDK.EDS_ERR_DEVICE_NOT_FOUND;
                }
            }


            //Release camera list
            if (cameraList != IntPtr.Zero)
            {
                EDSDKLib.EDSDK.EdsRelease(cameraList);
            }

            //Create Camera model
            CameraModel model = null;

            if (err == EDSDKLib.EDSDK.EDS_ERR_OK || err == EDSDKLib.EDSDK.EDS_ERR_DEVICE_NOT_FOUND)
            {
                model = new CameraModel(camera);
            }

            if (err != EDSDKLib.EDSDK.EDS_ERR_OK && err != EDSDKLib.EDSDK.EDS_ERR_DEVICE_NOT_FOUND)
            {
                MessageBox.Show($"Cannot detect camera: 0x{err:x}");
            }

            EDSDKLib.EDSDK.EdsPropertyEventHandler handlePropertyEvent = new EDSDKLib.EDSDK.EdsPropertyEventHandler(CameraEventListener.HandlePropertyEvent);
            EDSDKLib.EDSDK.EdsObjectEventHandler   handleObjectEvent   = new EDSDKLib.EDSDK.EdsObjectEventHandler(CameraEventListener.HandleObjectEvent);
            EDSDKLib.EDSDK.EdsStateEventHandler    handleStateEvent    = new EDSDKLib.EDSDK.EdsStateEventHandler(CameraEventListener.HandleStateEvent);

            CameraController controller;

            if (err == EDSDKLib.EDSDK.EDS_ERR_OK || err == EDSDKLib.EDSDK.EDS_ERR_DEVICE_NOT_FOUND)
            {
                //Create CameraController
                controller = new CameraController(ref model);
                GCHandle handle = GCHandle.Alloc(controller);
                IntPtr   ptr    = GCHandle.ToIntPtr(handle);

                //Set Property Event Handler
                if (err == EDSDKLib.EDSDK.EDS_ERR_OK)
                {
                    err = EDSDKLib.EDSDK.EdsSetPropertyEventHandler(camera, EDSDKLib.EDSDK.PropertyEvent_All, handlePropertyEvent, ptr);
                }

                //Set Object Event Handler
                if (err == EDSDKLib.EDSDK.EDS_ERR_OK)
                {
                    err = EDSDKLib.EDSDK.EdsSetObjectEventHandler(camera, EDSDKLib.EDSDK.ObjectEvent_All, handleObjectEvent, ptr);
                }

                //Set State Event Handler
                if (err == EDSDKLib.EDSDK.EDS_ERR_OK)
                {
                    err = EDSDKLib.EDSDK.EdsSetCameraStateEventHandler(camera, EDSDKLib.EDSDK.StateEvent_All, handleStateEvent, ptr);
                }

                controller.Run();

                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);

                IObserver form = new MainWindow(ref controller);
                model.Add(ref form);
                Application.Run((MainWindow)form);

                handle.Free();
            }

            GC.KeepAlive(handlePropertyEvent);
            GC.KeepAlive(handleObjectEvent);
            GC.KeepAlive(handleStateEvent);

            //Release Camera
            if (camera != IntPtr.Zero)
            {
                EDSDKLib.EDSDK.EdsRelease(camera);
            }

            //Termination of SDK
            if (isSDKLoaded)
            {
                EDSDKLib.EDSDK.EdsTerminateSDK();
            }
        }