New hardware testing commands #2978

This commit is contained in:
rusefillc 2021-07-17 13:42:10 -04:00
parent f90abd50bb
commit aee2ed4ba4
4 changed files with 45 additions and 28 deletions

View File

@ -34,6 +34,7 @@ All notable user-facing or behavior-altering changes will be documented in this
- Injector nonlinearity (small pulse) correction - so far just polynomial, but table modes coming soon. - Injector nonlinearity (small pulse) correction - so far just polynomial, but table modes coming soon.
- 1-4-3-6-2-5 firing order for VAG v6 - 1-4-3-6-2-5 firing order for VAG v6
- vq30de trigger wheel decoder #2974 - vq30de trigger wheel decoder #2974
- new hardware testing console commands #2978
### Fixed ### Fixed
- rusEFI console start-up speed #2964 - rusEFI console start-up speed #2964

View File

@ -452,6 +452,14 @@ static void setPotSpi(int spi) {
engineConfiguration->digitalPotentiometerSpiDevice = (spi_device_e) spi; engineConfiguration->digitalPotentiometerSpiDevice = (spi_device_e) spi;
} }
static brain_pin_e parseBrainPinWithErrorMessage(const char *pinName) {
brain_pin_e pin = parseBrainPin(pinName);
if (pin == GPIO_INVALID) {
efiPrintf("invalid pin name [%s]", pinName);
}
return pin;
}
/** /**
* For example: * For example:
* set_ignition_pin 1 PD7 * set_ignition_pin 1 PD7
@ -462,10 +470,8 @@ static void setIgnitionPin(const char *indexStr, const char *pinName) {
int index = atoi(indexStr) - 1; // convert from human index into software index int index = atoi(indexStr) - 1; // convert from human index into software index
if (index < 0 || index >= MAX_CYLINDER_COUNT) if (index < 0 || index >= MAX_CYLINDER_COUNT)
return; return;
brain_pin_e pin = parseBrainPin(pinName); brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
// todo: extract method - code duplication with other 'set_xxx_pin' methods?
if (pin == GPIO_INVALID) { if (pin == GPIO_INVALID) {
efiPrintf("invalid pin name [%s]", pinName);
return; return;
} }
efiPrintf("setting ignition pin[%d] to %s please save&restart", index, hwPortname(pin)); efiPrintf("setting ignition pin[%d] to %s please save&restart", index, hwPortname(pin));
@ -475,19 +481,37 @@ static void setIgnitionPin(const char *indexStr, const char *pinName) {
// this method is useful for desperate time debugging // this method is useful for desperate time debugging
static void readPin(const char *pinName) { static void readPin(const char *pinName) {
brain_pin_e pin = parseBrainPin(pinName); brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
if (pin == GPIO_INVALID) { if (pin == GPIO_INVALID) {
efiPrintf("invalid pin name [%s]", pinName);
return; return;
} }
int physicalValue = palReadPad(getHwPort("read", pin), getHwPin("read", pin)); int physicalValue = palReadPad(getHwPort("read", pin), getHwPin("read", pin));
efiPrintf("pin %s value %d", hwPortname(pin), physicalValue); efiPrintf("pin %s value %d", hwPortname(pin), physicalValue);
} }
static void setIndividualPin(const char *pinName, brain_pin_e *targetPin, const char *name) {
brain_pin_e pin = parseBrainPin(pinName); // this method is useful for desperate time debugging or hardware validation
static void benchSetPinValue(const char *pinName, int bit) {
brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
if (pin == GPIO_INVALID) {
return;
}
palWritePad(getHwPort("write", pin), getHwPin("write", pin), bit);
efiPrintf("pin %s set value", hwPortname(pin));
readPin(pinName);
}
static void benchClearPin(const char *pinName) {
benchSetPinValue(pinName, 0);
}
static void benchSetPin(const char *pinName) {
benchSetPinValue(pinName, 1);
}
static void setIndividualPin(const char *pinName, brain_pin_e *targetPin, const char *name) {
brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
if (pin == GPIO_INVALID) { if (pin == GPIO_INVALID) {
efiPrintf("invalid pin name [%s]", pinName);
return; return;
} }
efiPrintf("setting %s pin to %s please save&restart", name, hwPortname(pin)); efiPrintf("setting %s pin to %s please save&restart", name, hwPortname(pin));
@ -557,10 +581,8 @@ static void setInjectionPin(const char *indexStr, const char *pinName) {
int index = atoi(indexStr) - 1; // convert from human index into software index int index = atoi(indexStr) - 1; // convert from human index into software index
if (index < 0 || index >= MAX_CYLINDER_COUNT) if (index < 0 || index >= MAX_CYLINDER_COUNT)
return; return;
brain_pin_e pin = parseBrainPin(pinName); brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
// todo: extract method - code duplication with other 'set_xxx_pin' methods?
if (pin == GPIO_INVALID) { if (pin == GPIO_INVALID) {
efiPrintf("invalid pin name [%s]", pinName);
return; return;
} }
efiPrintf("setting injection pin[%d] to %s please save&restart", index, hwPortname(pin)); efiPrintf("setting injection pin[%d] to %s please save&restart", index, hwPortname(pin));
@ -578,10 +600,8 @@ static void setTriggerInputPin(const char *indexStr, const char *pinName) {
int index = atoi(indexStr); int index = atoi(indexStr);
if (index < 0 || index > 2) if (index < 0 || index > 2)
return; return;
brain_pin_e pin = parseBrainPin(pinName); brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
// todo: extract method - code duplication with other 'set_xxx_pin' methods?
if (pin == GPIO_INVALID) { if (pin == GPIO_INVALID) {
efiPrintf("invalid pin name [%s]", pinName);
return; return;
} }
efiPrintf("setting trigger pin[%d] to %s please save&restart", index, hwPortname(pin)); efiPrintf("setting trigger pin[%d] to %s please save&restart", index, hwPortname(pin));
@ -605,9 +625,8 @@ static void setEgtCSPin(const char *indexStr, const char *pinName) {
int index = atoi(indexStr); int index = atoi(indexStr);
if (index < 0 || index >= EGT_CHANNEL_COUNT) if (index < 0 || index >= EGT_CHANNEL_COUNT)
return; return;
brain_pin_e pin = parseBrainPin(pinName); brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
if (pin == GPIO_INVALID) { if (pin == GPIO_INVALID) {
efiPrintf("invalid pin name [%s]", pinName);
return; return;
} }
efiPrintf("setting EGT CS pin[%d] to %s please save&restart", index, hwPortname(pin)); efiPrintf("setting EGT CS pin[%d] to %s please save&restart", index, hwPortname(pin));
@ -619,9 +638,8 @@ static void setTriggerSimulatorPin(const char *indexStr, const char *pinName) {
int index = atoi(indexStr); int index = atoi(indexStr);
if (index < 0 || index >= TRIGGER_SIMULATOR_PIN_COUNT) if (index < 0 || index >= TRIGGER_SIMULATOR_PIN_COUNT)
return; return;
brain_pin_e pin = parseBrainPin(pinName); brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
if (pin == GPIO_INVALID) { if (pin == GPIO_INVALID) {
efiPrintf("invalid pin name [%s]", pinName);
return; return;
} }
efiPrintf("setting trigger simulator pin[%d] to %s please save&restart", index, hwPortname(pin)); efiPrintf("setting trigger simulator pin[%d] to %s please save&restart", index, hwPortname(pin));
@ -633,9 +651,8 @@ static void setTriggerSimulatorPin(const char *indexStr, const char *pinName) {
// set_analog_input_pin pps pa4 // set_analog_input_pin pps pa4
// set_analog_input_pin afr none // set_analog_input_pin afr none
static void setAnalogInputPin(const char *sensorStr, const char *pinName) { static void setAnalogInputPin(const char *sensorStr, const char *pinName) {
brain_pin_e pin = parseBrainPin(pinName); brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
if (pin == GPIO_INVALID) { if (pin == GPIO_INVALID) {
efiPrintf("invalid pin name [%s]", pinName);
return; return;
} }
adc_channel_e channel = getAdcChannel(pin); adc_channel_e channel = getAdcChannel(pin);
@ -674,9 +691,8 @@ static void setLogicInputPin(const char *indexStr, const char *pinName) {
if (index < 0 || index > 2) { if (index < 0 || index > 2) {
return; return;
} }
brain_pin_e pin = parseBrainPin(pinName); brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
if (pin == GPIO_INVALID) { if (pin == GPIO_INVALID) {
efiPrintf("invalid pin name [%s]", pinName);
return; return;
} }
efiPrintf("setting logic input pin[%d] to %s please save&restart", index, hwPortname(pin)); efiPrintf("setting logic input pin[%d] to %s please save&restart", index, hwPortname(pin));
@ -685,9 +701,8 @@ static void setLogicInputPin(const char *indexStr, const char *pinName) {
} }
static void showPinFunction(const char *pinName) { static void showPinFunction(const char *pinName) {
brain_pin_e pin = parseBrainPin(pinName); brain_pin_e pin = parseBrainPinWithErrorMessage(pinName);
if (pin == GPIO_INVALID) { if (pin == GPIO_INVALID) {
efiPrintf("invalid pin name [%s]", pinName);
return; return;
} }
efiPrintf("Pin %s: [%s]", pinName, getPinFunction(pin)); efiPrintf("Pin %s: [%s]", pinName, getPinFunction(pin));
@ -1294,10 +1309,10 @@ void initSettings(void) {
addConsoleActionS("set_cj125_heater_pin", setCj125HeaterPin); addConsoleActionS("set_cj125_heater_pin", setCj125HeaterPin);
addConsoleActionS("set_trigger_sync_pin", setTriggerSyncPin); addConsoleActionS("set_trigger_sync_pin", setTriggerSyncPin);
/** addConsoleActionS("bench_clearpin", benchClearPin);
* as of today we still do not have desperate time debugging "writepin" command addConsoleActionS("bench_setpin", benchSetPin);
*/
addConsoleActionS("readpin", readPin); addConsoleActionS("readpin", readPin);
addConsoleAction("adc_report", printFullAdcReport);
addConsoleActionS("set_can_rx_pin", setCanRxPin); addConsoleActionS("set_can_rx_pin", setCanRxPin);
addConsoleActionS("set_can_tx_pin", setCanTxPin); addConsoleActionS("set_can_tx_pin", setCanTxPin);

View File

@ -321,7 +321,7 @@ static void printAdcValue(int channel) {
static uint32_t slowAdcConversionCount = 0; static uint32_t slowAdcConversionCount = 0;
static uint32_t slowAdcErrorsCount = 0; static uint32_t slowAdcErrorsCount = 0;
static void printFullAdcReport(void) { void printFullAdcReport(void) {
#if EFI_USE_FAST_ADC #if EFI_USE_FAST_ADC
efiPrintf("fast %d samples", fastAdc.conversionCount); efiPrintf("fast %d samples", fastAdc.conversionCount);

View File

@ -64,3 +64,4 @@ void removeChannel(const char *name, adc_channel_e setting);
#define getAdcValue(msg, channel) 0 #define getAdcValue(msg, channel) 0
#endif /* HAL_USE_ADC */ #endif /* HAL_USE_ADC */
void printFullAdcReport(void);