blob: 88db332af1e2c82e44d00131a09e428969f22772 [file] [log] [blame]
James Feist22c257a2018-08-31 14:07:12 -07001
2/*
3// Copyright (c) 2018 Intel Corporation
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16*/
17
18#pragma once
19
20#include <cstddef>
21#include <vector>
22
Patrick Venturea0764872020-08-08 07:48:43 -070023namespace pid_control
24{
James Feist22c257a2018-08-31 14:07:12 -070025namespace ec
26{
27constexpr size_t maxStepwisePoints = 20;
28
29struct StepwiseInfo
30{
Patrick Venture5f59c0f2018-11-11 12:55:14 -080031 double ts; // sample time in seconds
32 double reading[maxStepwisePoints];
33 double output[maxStepwisePoints];
34 double positiveHysteresis;
35 double negativeHysteresis;
James Feist608304d2019-02-25 10:01:42 -080036 bool isCeiling;
James Feist22c257a2018-08-31 14:07:12 -070037};
38
Patrick Venture5f59c0f2018-11-11 12:55:14 -080039double stepwise(const ec::StepwiseInfo& info, double value);
James Feist22c257a2018-08-31 14:07:12 -070040
Patrick Venturea0764872020-08-08 07:48:43 -070041} // namespace ec
42} // namespace pid_control