Ejemplo n.º 1
0
        internal PwmPin(
            Pwm pwm,
            string id,
            int number,
            Windows.Devices.Pwm.PwmPin pin
            )
            : base(pwm.Environment,
                id,
                string.Format($"Pin {number + 1}"),
                new ObjectType("PWM pin", "PWM pin", "Pulse width modulation pin"),
                parent: pwm)
        {
            pwm.ValidateNonNull(nameof(pwm));
            number.ValidateIn(0, pwm.PinCount.Value);
            pin.ValidateNonNull(nameof(pin));
            Pwm = pwm;
            Pin = pin;

            Number = new Property<int>(this,
                nameof(Number), "Number", number);
            Items.Add(Number);

            DelegateCommand command;
            command = new DelegateCommand(this,
                nameof(Close), "Close",
                () => Close()
                );
            Items.Add(command);

            IsStarted = new Property<bool>(this,
                nameof(IsStarted), "Is started", false);
            Items.Add(IsStarted);
            command = new DelegateCommand(this,
                nameof(Start), "Start",
                () => Start(),
                () => CanStart
                );
            Items.Add(command);
            command = new DelegateCommand(this,
                nameof(Stop), "Stop",
                () => Stop(),
                () => CanStop
                );
            Items.Add(command);

            DutyCyclePercentage = new PhysicalProperty<double>(this,
                nameof(DutyCyclePercentage), "Duty cycle", pin.GetActiveDutyCyclePercentage(), Units.Percentage
                );
            Items.Add(DutyCyclePercentage);
            command = new DelegateCommand<double>(this,
                nameof(SetDutyCyclePercentage), "Set duty cycle",
                p => SetDutyCyclePercentage(p),
                p => CanSetDutyCyclePercentage(p),
                parameters: new CommandPhysicalParameterInfo<double>(DutyCyclePercentage)
                );
            Items.Add(command);

            Polarity = new Property<PwmPulsePolarity>(this, nameof(Polarity), "Polarity", pin.Polarity);
            Items.Add(Polarity);
            command = new DelegateCommand<PwmPulsePolarity>(this,
                nameof(SetPolarity), "Set polarity",
                p => SetPolarity(p),
                parameters: new CommandParameterInfo<PwmPulsePolarity>(Polarity)
                );
            Items.Add(command);
        }