Nissan VVT trigger decoder #2887
This commit is contained in:
parent
f5e937fe2b
commit
23e7022e55
|
@ -2084,7 +2084,7 @@ typedef enum {
|
||||||
CUSTOM_ERR_TLE8888_RESPONSE = 6724,
|
CUSTOM_ERR_TLE8888_RESPONSE = 6724,
|
||||||
CUSTOM_ERR_CJ125_DIAG = 6725,
|
CUSTOM_ERR_CJ125_DIAG = 6725,
|
||||||
CUSTOM_ERR_VVT_OUT_OF_RANGE = 6726,
|
CUSTOM_ERR_VVT_OUT_OF_RANGE = 6726,
|
||||||
CUSTOM_ERR_6727 = 6727,
|
CUSTOM_VVT_MODE_NOT_SELECTED = 6727,
|
||||||
CUSTOM_ERR_6728 = 6728,
|
CUSTOM_ERR_6728 = 6728,
|
||||||
CUSTOM_ERR_6729 = 6729,
|
CUSTOM_ERR_6729 = 6729,
|
||||||
|
|
||||||
|
|
|
@ -106,6 +106,9 @@ void hwHandleVvtCamSignal(trigger_value_e front, efitick_t nowNt, int index DECL
|
||||||
}
|
}
|
||||||
extern const char *vvtNames[];
|
extern const char *vvtNames[];
|
||||||
const char *vvtName = vvtNames[index];
|
const char *vvtName = vvtNames[index];
|
||||||
|
if (CONFIG(vvtMode[camIndex]) == VVT_INACTIVE) {
|
||||||
|
warning(CUSTOM_VVT_MODE_NOT_SELECTED, "VVT: event on %d but no mode", camIndex);
|
||||||
|
}
|
||||||
|
|
||||||
#if VR_HW_CHECK_MODE
|
#if VR_HW_CHECK_MODE
|
||||||
// some boards do not have hardware VR input LEDs which makes such boards harder to validate
|
// some boards do not have hardware VR input LEDs which makes such boards harder to validate
|
||||||
|
|
|
@ -14,7 +14,7 @@ public:
|
||||||
int toothIndex;
|
int toothIndex;
|
||||||
TriggerWaveform *form;
|
TriggerWaveform *form;
|
||||||
bool isVvt;
|
bool isVvt;
|
||||||
int vvtIndex;
|
int vvtBankIndex;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void func(TriggerCallback *callback) {
|
static void func(TriggerCallback *callback) {
|
||||||
|
@ -26,7 +26,7 @@ static void func(TriggerCallback *callback) {
|
||||||
efitick_t nowNt = getTimeNowNt();
|
efitick_t nowNt = getTimeNowNt();
|
||||||
if (callback->isVvt) {
|
if (callback->isVvt) {
|
||||||
trigger_value_e v = value ? TV_RISE : TV_FALL;
|
trigger_value_e v = value ? TV_RISE : TV_FALL;
|
||||||
hwHandleVvtCamSignal(v, nowNt, callback->vvtIndex PASS_ENGINE_PARAMETER_SUFFIX);
|
hwHandleVvtCamSignal(v, nowNt, callback->vvtBankIndex * CAMS_PER_BANK PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
} else {
|
} else {
|
||||||
handleShaftSignal(0, value, nowNt PASS_ENGINE_PARAMETER_SUFFIX);
|
handleShaftSignal(0, value, nowNt PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ static void scheduleTriggerEvents(TriggerWaveform *shape,
|
||||||
float timeScale,
|
float timeScale,
|
||||||
int count,
|
int count,
|
||||||
bool isVvt,
|
bool isVvt,
|
||||||
int vvtIndex,
|
int vvtBankIndex,
|
||||||
int vvtOffset
|
int vvtOffset
|
||||||
DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
||||||
int totalIndex = 0;
|
int totalIndex = 0;
|
||||||
|
@ -47,14 +47,14 @@ static void scheduleTriggerEvents(TriggerWaveform *shape,
|
||||||
* and then execute those one
|
* and then execute those one
|
||||||
*/
|
*/
|
||||||
for (int r = 0; r < count; r++) {
|
for (int r = 0; r < count; r++) {
|
||||||
for (int i = 0; i < shape->getSize(); i++) {
|
for (size_t i = 0; i < shape->getSize(); i++) {
|
||||||
float angle = vvtOffset + shape->getAngle(totalIndex);
|
float angle = vvtOffset + shape->getAngle(totalIndex);
|
||||||
TriggerCallback *param = new TriggerCallback();
|
TriggerCallback *param = new TriggerCallback();
|
||||||
param->engine = engine;
|
param->engine = engine;
|
||||||
param->toothIndex = totalIndex;
|
param->toothIndex = totalIndex;
|
||||||
param->form = shape;
|
param->form = shape;
|
||||||
param->isVvt = isVvt;
|
param->isVvt = isVvt;
|
||||||
param->vvtIndex = vvtIndex;
|
param->vvtBankIndex = vvtBankIndex;
|
||||||
|
|
||||||
scheduling_s *sch = new scheduling_s();
|
scheduling_s *sch = new scheduling_s();
|
||||||
engine->executor.scheduleByTimestamp(sch, timeScale * 1000 * angle, { func, param });
|
engine->executor.scheduleByTimestamp(sch, timeScale * 1000 * angle, { func, param });
|
||||||
|
@ -91,7 +91,7 @@ TEST(nissan, vq_vvt) {
|
||||||
scheduleTriggerEvents(&vvt,
|
scheduleTriggerEvents(&vvt,
|
||||||
/* timeScale */ vvtTimeScale,
|
/* timeScale */ vvtTimeScale,
|
||||||
cyclesCount / 6, true,
|
cyclesCount / 6, true,
|
||||||
/* vvtIndex */ 0,
|
/* vvtBankIndex */ 0,
|
||||||
/* vvtOffset */ 0
|
/* vvtOffset */ 0
|
||||||
PASS_ENGINE_PARAMETER_SUFFIX);
|
PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
}
|
}
|
||||||
|
@ -103,7 +103,7 @@ TEST(nissan, vq_vvt) {
|
||||||
scheduleTriggerEvents(&vvt,
|
scheduleTriggerEvents(&vvt,
|
||||||
/* timeScale */ vvtTimeScale,
|
/* timeScale */ vvtTimeScale,
|
||||||
cyclesCount / 6, true,
|
cyclesCount / 6, true,
|
||||||
/* vvtIndex */1,
|
/* vvtBankIndex */1,
|
||||||
/* vvtOffset */ offsetBetweenCams
|
/* vvtOffset */ offsetBetweenCams
|
||||||
PASS_ENGINE_PARAMETER_SUFFIX);
|
PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
}
|
}
|
||||||
|
@ -119,10 +119,12 @@ TEST(nissan, vq_vvt) {
|
||||||
|
|
||||||
|
|
||||||
ASSERT_TRUE(tc->vvtState[0][0].getShaftSynchronized());
|
ASSERT_TRUE(tc->vvtState[0][0].getShaftSynchronized());
|
||||||
//huh? ASSERT_TRUE(tc->vvtState[0][1].getShaftSynchronized());
|
ASSERT_TRUE(tc->vvtState[1][0].getShaftSynchronized());
|
||||||
|
|
||||||
angle_t firstVVTangle = 27.5;
|
angle_t firstVVTangle = 27.5;
|
||||||
ASSERT_NEAR(firstVVTangle, tc->vvtPosition[0][0], EPS2D);
|
ASSERT_NEAR(firstVVTangle, tc->vvtPosition[0][0], EPS2D);
|
||||||
// hmm, why 340 not 360?
|
ASSERT_NEAR(firstVVTangle + offsetBetweenCams, tc->vvtPosition[1][0], EPS2D);
|
||||||
ASSERT_EQ(firstVVTangle + 360 - 20, tc->vvtPosition[0][1]);
|
|
||||||
|
// todo
|
||||||
|
EXPECT_EQ(1, eth.recentWarnings()->getCount());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue