예제 #1
0
        private void timerUpdate_Tick(object sender, EventArgs e)
        {
            TimeSpan elapsed = DateTime.UtcNow - lastRun;

            if (elapsed.TotalMilliseconds < 800)
            {
                return;
            }

            int  count   = listViewDevices.Items.Count;
            bool changed = false;

            for (int i = 0; i < count; i++)
            {
                int          testId = (int)listViewDevices.Items[(checkIndex + i) % count].Tag;
                DeviceStatus device = devices[testId];

                if (device.Changed)
                {
                    changed = true; device.Changed = false;
                }

                if (device.Update(device.Mode != DeviceStatus.DeviceMode.Configuring, device.Mode == DeviceStatus.DeviceMode.Charging))
                {
                    changed = true;
                }

                // See if a charging device should be configured
                if (device.Mode == DeviceStatus.DeviceMode.Charging && device.CanConfigure(MinBattery))
                {
                    device.StartConfigure(StartDays, StartHour, DurationDays, EndHour);
                    changed = true;
                }

                if (device.Mode == DeviceStatus.DeviceMode.Unexpected)
                {
                    if (autoAdd)
                    {
                        AddExpectedDevice(device.Id);
                    }
                }
            }

            if (changed)
            {
                UpdateDevices();
            }

            lastRun = DateTime.UtcNow;
        }
예제 #2
0
        private void timerUpdate_Tick(object sender, EventArgs e)
        {
            TimeSpan elapsed = DateTime.UtcNow - lastRun;

            if (elapsed.TotalMilliseconds < 800)
            {
                return;
            }

            int  count   = listViewDevices.Items.Count;
            bool changed = false;

            // Any configuring?
            bool configuring = false;

            for (int i = 0; i < count; i++)
            {
                uint         testId = (uint)listViewDevices.Items[i].Tag;
                DeviceStatus device = devices[testId];
                if (device.Mode == DeviceStatus.DeviceMode.Configuring)
                {
                    configuring = true; break;
                }
            }

            // Update next element
            for (int i = 0; i < count; i++)
            {
                uint         testId = (uint)listViewDevices.Items[(checkIndex + i) % count].Tag;
                DeviceStatus device = devices[testId];

                // See if a charging device should be configured
                if (!configuring && device.Mode == DeviceStatus.DeviceMode.Charging && device.CanConfigure(MinBattery))
                {
                    device.StartConfigure(StartDays, StartHour, DurationDays, EndHour, DebugMode);
                    changed = true;
                }
                else
                {
                    if (device.Changed)
                    {
                        changed = true; device.Changed = false;
                    }

                    if (device.Update(device.Mode != DeviceStatus.DeviceMode.Configuring, device.Mode == DeviceStatus.DeviceMode.Charging))
                    {
                        changed = true;
                    }

                    if (device.Mode == DeviceStatus.DeviceMode.Unexpected)
                    {
                        if (autoAdd)
                        {
                            AddExpectedDevice(device.Id);
                        }
                    }
                }

                // NOTE: For now, only deal with one change per iteration
                if (changed)
                {
                    break;
                }
            }

            checkIndex++;
            if (changed)
            {
                UpdateDevices();
            }

            lastRun = DateTime.UtcNow;
        }