blob: ca53d39919618b076d78daa461e0e5948026b0cb [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>
James Feist22c257a2018-08-31 14:07:12 -070021
Patrick Venturea0764872020-08-08 07:48:43 -070022namespace pid_control
23{
James Feist22c257a2018-08-31 14:07:12 -070024namespace ec
25{
26constexpr size_t maxStepwisePoints = 20;
27
28struct StepwiseInfo
29{
Patrick Venture5f59c0f2018-11-11 12:55:14 -080030 double ts; // sample time in seconds
31 double reading[maxStepwisePoints];
32 double output[maxStepwisePoints];
33 double positiveHysteresis;
34 double negativeHysteresis;
James Feist608304d2019-02-25 10:01:42 -080035 bool isCeiling;
James Feist22c257a2018-08-31 14:07:12 -070036};
37
Patrick Venture5f59c0f2018-11-11 12:55:14 -080038double stepwise(const ec::StepwiseInfo& info, double value);
James Feist22c257a2018-08-31 14:07:12 -070039
Patrick Venturea0764872020-08-08 07:48:43 -070040} // namespace ec
41} // namespace pid_control