public override void Update()
        {
            if (count == 0)
            {
                DriveAttributeValue[] values = smart.ReadSmartData(handle, index);

                foreach (KeyValuePair <SmartAttribute, Sensor> keyValuePair in sensors)
                {
                    SmartAttribute attribute = keyValuePair.Key;
                    foreach (DriveAttributeValue value in values)
                    {
                        if (value.Identifier == attribute.Identifier)
                        {
                            Sensor sensor = keyValuePair.Value;
                            sensor.Value = attribute.ConvertValue(value);
                        }
                    }
                }

                UpdateAdditionalSensors(values);
            }

            count++;
            count %= UPDATE_DIVIDER;
        }
        public override void Update()
        {
            if (count == 0)
            {
                if (handle != smart.InvalidHandle)
                {
                    DriveAttributeValue[] values = smart.ReadSmartData(handle, index);

                    foreach (KeyValuePair <SmartAttribute, Sensor> keyValuePair in sensors)
                    {
                        SmartAttribute attribute = keyValuePair.Key;
                        foreach (DriveAttributeValue value in values)
                        {
                            if (value.Identifier == attribute.Identifier)
                            {
                                Sensor sensor = keyValuePair.Value;
                                sensor.Value = attribute.ConvertValue(value, sensor.Parameters);
                            }
                        }
                    }

                    UpdateAdditionalSensors(values);
                }

                if (usageSensor != null)
                {
                    long totalSize      = 0;
                    long totalFreeSpace = 0;

                    for (int i = 0; i < driveInfos.Length; i++)
                    {
                        if (!driveInfos[i].IsReady)
                        {
                            continue;
                        }
                        try
                        {
                            totalSize      += driveInfos[i].TotalSize;
                            totalFreeSpace += driveInfos[i].TotalFreeSpace;
                        }
                        catch (IOException) { }
                        catch (UnauthorizedAccessException) { }
                    }
                    if (totalSize > 0)
                    {
                        usageSensor.Value = 100.0f - (100.0f * totalFreeSpace) / totalSize;
                    }
                    else
                    {
                        usageSensor.Value = null;
                    }
                }
            }

            count++;
            count %= UPDATE_DIVIDER;
        }
        protected override void UpdateSensors()
        {
            if (smart.IsValid)
            {
                DriveAttributeValue[] values = smart.ReadSmartData();

                foreach (KeyValuePair <SmartAttribute, Sensor> keyValuePair in sensors)
                {
                    SmartAttribute attribute = keyValuePair.Key;
                    foreach (DriveAttributeValue value in values)
                    {
                        if (value.Identifier == attribute.Identifier)
                        {
                            Sensor sensor = keyValuePair.Value;
                            sensor.Value = attribute.ConvertValue(value, sensor.Parameters);
                        }
                    }
                }

                UpdateAdditionalSensors(values);
            }
        }
        public override void Update()
        {
            if (count == 0)
            {
                DriveAttributeValue[] values = smart.ReadSmartData(handle, index);

                foreach (KeyValuePair <SmartAttribute, Sensor> keyValuePair in sensors)
                {
                    SmartAttribute attribute = keyValuePair.Key;
                    foreach (DriveAttributeValue value in values)
                    {
                        if (value.Identifier == attribute.Identifier)
                        {
                            Sensor sensor = keyValuePair.Value;
                            sensor.Value = attribute.ConvertValue(value, sensor.Parameters);
                        }
                    }
                }

                UpdateAdditionalSensors(values);

                if (usageSensor != null)
                {
                    long totalSize      = 0;
                    long totalFreeSpace = 0;
                    for (int i = 0; i < driveInfos.Length; i++)
                    {
                        totalSize      += driveInfos[i].TotalSize;
                        totalFreeSpace += driveInfos[i].TotalFreeSpace;
                    }
                    usageSensor.Value = 100.0f - (100.0f * totalFreeSpace) / totalSize;
                }
            }

            count++;
            count %= UPDATE_DIVIDER;
        }