fome-fw/firmware/controllers/core/fsio_impl.cpp

93 lines
2.5 KiB
C++
Raw Normal View History

2015-07-10 06:01:56 -07:00
/**
* @file fsio_impl.cpp
* @brief FSIO as it's used for GPIO
*
* TODO: rename this file, FSIO is gone!
2019-09-11 17:46:50 -07:00
*
2015-07-10 06:01:56 -07:00
* @date Oct 5, 2014
2020-01-07 21:02:40 -08:00
* @author Andrey Belomutskiy, (c) 2012-2020
2015-07-10 06:01:56 -07:00
*/
#include "pch.h"
#include "fsio_impl.h"
2015-07-10 06:01:56 -07:00
2021-11-14 07:39:47 -08:00
static fsio8_Map3D_f32t scriptTable1;
static fsio8_Map3D_u8t scriptTable2;
static fsio8_Map3D_u8t scriptTable3;
static fsio8_Map3D_u8t scriptTable4;
2016-04-04 07:01:43 -07:00
2021-11-14 07:39:47 -08:00
ValueProvider3D *getscriptTable(int index) {
2019-07-12 05:31:38 -07:00
switch (index) {
default:
2021-11-14 07:39:47 -08:00
return &scriptTable1;
2019-07-12 05:31:38 -07:00
case 1:
2021-11-14 07:39:47 -08:00
return &scriptTable2;
2019-07-12 05:31:38 -07:00
case 2:
2021-11-14 07:39:47 -08:00
return &scriptTable3;
2019-07-12 05:31:38 -07:00
case 3:
2021-11-14 07:39:47 -08:00
return &scriptTable4;
2019-07-12 05:31:38 -07:00
}
}
2021-11-14 09:51:41 -08:00
// todo: template this copy-pasta
2021-11-05 12:25:29 -07:00
/**
* @return zero-based index of curve with given name
*/
int getCurveIndexByName(const char *name) {
2021-11-05 12:25:29 -07:00
for (int i = 0;i<SCRIPT_CURVE_COUNT;i++) {
if (strEqualCaseInsensitive(name, engineConfiguration->scriptCurveName[i])) {
return i;
}
}
return EFI_ERROR_CODE;
}
int getTableIndexByName(const char *name) {
2021-11-13 07:02:01 -08:00
for (int i = 0;i<SCRIPT_TABLE_COUNT;i++) {
if (strEqualCaseInsensitive(name, engineConfiguration->scriptTableName[i])) {
return i;
}
}
return EFI_ERROR_CODE;
}
int getSettingIndexByName(const char *name) {
2021-11-14 09:51:41 -08:00
for (int i = 0;i<SCRIPT_SETTING_COUNT;i++) {
if (strEqualCaseInsensitive(name, engineConfiguration->scriptSettingName[i])) {
return i;
}
}
return EFI_ERROR_CODE;
}
float getCurveValue(int index, float key) {
2021-11-04 20:22:37 -07:00
// not great code at all :(
switch (index) {
default:
return interpolate2d(key, engineConfiguration->scriptCurve1Bins, engineConfiguration->scriptCurve1);
2021-11-04 20:59:04 -07:00
case 1:
return interpolate2d(key, engineConfiguration->scriptCurve2Bins, engineConfiguration->scriptCurve2);
case 2:
return interpolate2d(key, engineConfiguration->scriptCurve3Bins, engineConfiguration->scriptCurve3);
case 3:
return interpolate2d(key, engineConfiguration->scriptCurve4Bins, engineConfiguration->scriptCurve4);
case 4:
2021-11-04 20:22:37 -07:00
return interpolate2d(key, engineConfiguration->scriptCurve5Bins, engineConfiguration->scriptCurve5);
2021-11-04 20:59:04 -07:00
case 5:
return interpolate2d(key, engineConfiguration->scriptCurve6Bins, engineConfiguration->scriptCurve6);
2021-11-04 20:22:37 -07:00
}
}
// TODO: rename
void initFsioImpl() {
2021-11-14 07:39:47 -08:00
scriptTable1.init(config->scriptTable1, config->scriptTable1LoadBins,
config->scriptTable1RpmBins);
scriptTable2.init(config->scriptTable2, config->scriptTable2LoadBins,
config->scriptTable2RpmBins);
scriptTable3.init(config->scriptTable3, config->scriptTable3LoadBins,
config->scriptTable3RpmBins);
scriptTable4.init(config->scriptTable4, config->scriptTable4LoadBins,
config->scriptTable4RpmBins);
2015-07-10 06:01:56 -07:00
}