This commit is contained in:
rusefillc 2021-12-21 00:48:13 -05:00
parent 2480a8aa2f
commit 7b0179aaa3
7 changed files with 33 additions and 26 deletions

View File

@ -777,7 +777,7 @@ void updateTunerStudioState() {
tsOutputChannels->revolutionCounterSinceStart = engine->rpmCalculator.getRevolutionCounterSinceStart();
#if EFI_CAN_SUPPORT
postCanState(tsOutputChannels);
postCanState();
#endif /* EFI_CAN_SUPPORT */
#if EFI_CLOCK_LOCKS

View File

@ -46,7 +46,7 @@ class CanListener;
class CanSensorBase;
#if EFI_CAN_SUPPORT
void processCanRxMessage(const CANRxFrame& msg, efitick_t nowNt);
void processCanRxMessage(const size_t busIndex, const CANRxFrame& msg, efitick_t nowNt);
#endif // EFI_CAN_SUPPORT
void registerCanListener(CanListener& listener);

View File

@ -158,7 +158,7 @@ static void processCanRxImu(const CANRxFrame& frame, efitick_t nowNt) {
}
}
void processCanRxMessage(const CANRxFrame &frame, efitick_t nowNt) {
void processCanRxMessage(const size_t busIndex, const CANRxFrame &frame, efitick_t nowNt) {
if (engineConfiguration->verboseCan) {
printPacket(frame);
}

View File

@ -22,9 +22,6 @@
#include "string.h"
#include "mpu_util.h"
static int canReadCounter = 0;
int canWriteOk = 0;
int canWriteNotOk = 0;
static bool isCanEnabled = false;
// Values below calculated with http://www.bittiming.can-wiki.info/
@ -150,9 +147,9 @@ public:
}
// Process the message
canReadCounter++;
engine->outputChannels.canReadCounter++;
processCanRxMessage(m_buffer, getTimeNowNt());
processCanRxMessage(m_index, m_buffer, getTimeNowNt());
}
}
@ -177,7 +174,10 @@ static void canInfo() {
boolToString(engineConfiguration->canReadEnabled), boolToString(engineConfiguration->canWriteEnabled),
engineConfiguration->canSleepPeriodMs);
efiPrintf("CAN rx_cnt=%d/tx_ok=%d/tx_not_ok=%d", canReadCounter, canWriteOk, canWriteNotOk);
efiPrintf("CAN rx_cnt=%d/tx_ok=%d/tx_not_ok=%d",
engine->outputChannels.canReadCounter,
engine->outputChannels.canWriteOk,
engine->outputChannels.canWriteNotOk);
}
void setCanType(int type) {
@ -186,10 +186,12 @@ void setCanType(int type) {
}
#if EFI_TUNER_STUDIO
void postCanState(TunerStudioOutputChannels *tsOutputChannels) {
tsOutputChannels->canReadCounter = isCanEnabled ? canReadCounter : -1;
tsOutputChannels->canWriteOk = isCanEnabled ? canWriteOk : -1;
tsOutputChannels->canWriteNotOk = isCanEnabled ? canWriteNotOk : -1;
void postCanState() {
if (!isCanEnabled) {
engine->outputChannels.canReadCounter = -1;
engine->outputChannels.canWriteOk = -1;
engine->outputChannels.canWriteNotOk = -1;
}
}
#endif /* EFI_TUNER_STUDIO */
@ -202,6 +204,8 @@ void enableFrankensoCan() {
void stopCanPins() {
efiSetPadUnusedIfConfigurationChanged(canTxPin);
efiSetPadUnusedIfConfigurationChanged(canRxPin);
efiSetPadUnusedIfConfigurationChanged(can2TxPin);
efiSetPadUnusedIfConfigurationChanged(can2RxPin);
}
// at the moment we support only very limited runtime configuration change, still not supporting online CAN toggle
@ -232,6 +236,9 @@ void startCanPins() {
efiSetPadModeIfConfigurationChanged("CAN TX", canTxPin, PAL_MODE_ALTERNATE(EFI_CAN_TX_AF));
efiSetPadModeIfConfigurationChanged("CAN RX", canRxPin, PAL_MODE_ALTERNATE(EFI_CAN_RX_AF));
efiSetPadModeIfConfigurationChanged("CAN2 TX", can2TxPin, PAL_MODE_ALTERNATE(EFI_CAN_TX_AF));
efiSetPadModeIfConfigurationChanged("CAN2 RX", can2RxPin, PAL_MODE_ALTERNATE(EFI_CAN_RX_AF));
}
void initCan(void) {
@ -281,7 +288,7 @@ void initCan(void) {
}
// Plumb CAN device to tx system
CanTxMessage::setDevice(detectCanDevice(0));
CanTxMessage::setDevice(detectCanDevice(0), detectCanDevice(1));
// fire up threads, as necessary
if (engineConfiguration->canWriteEnabled) {

View File

@ -21,6 +21,6 @@ void startCanPins();
void enableFrankensoCan();
bool getIsCanEnabled(void);
#if EFI_TUNER_STUDIO
void postCanState(TunerStudioOutputChannels *tsOutputChannels);
void postCanState();
#endif /* EFI_TUNER_STUDIO */
#endif /* EFI_CAN_SUPPORT */

View File

@ -13,14 +13,12 @@
#include "can.h"
extern int canWriteOk;
extern int canWriteNotOk;
#if EFI_CAN_SUPPORT
/*static*/ CANDriver* CanTxMessage::s_device = nullptr;
/*static*/ CANDriver* CanTxMessage::s_devices[2] = {nullptr, nullptr};
/*static*/ void CanTxMessage::setDevice(CANDriver* device) {
s_device = device;
/*static*/ void CanTxMessage::setDevice(CANDriver* device1, CANDriver* device2) {
s_devices[0] = device1;
s_devices[1] = device2;
}
#endif // EFI_CAN_SUPPORT
@ -50,7 +48,7 @@ CanTxMessage::CanTxMessage(uint32_t eid, uint8_t dlc, bool isExtended) {
CanTxMessage::~CanTxMessage() {
#if EFI_CAN_SUPPORT
auto device = s_device;
auto device = s_devices[0];
if (!device) {
warning(CUSTOM_ERR_CAN_CONFIGURATION, "CAN configuration issue");
@ -71,11 +69,13 @@ CanTxMessage::~CanTxMessage() {
// 100 ms timeout
msg_t msg = canTransmit(device, CAN_ANY_MAILBOX, &m_frame, TIME_MS2I(100));
#if EFI_TUNER_STUDIO
if (msg == MSG_OK) {
canWriteOk++;
engine->outputChannels.canWriteOk++;
} else {
canWriteNotOk++;
engine->outputChannels.canWriteNotOk++;
}
#endif // EFI_TUNER_STUDIO
#endif /* EFI_CAN_SUPPORT */
}

View File

@ -40,7 +40,7 @@ public:
/**
* Configures the device for all messages to transmit from.
*/
static void setDevice(CANDriver* device);
static void setDevice(CANDriver* device1, CANDriver* device2);
#endif // EFI_CAN_SUPPORT
/**
* @brief Read & write the raw underlying 8-byte buffer.
@ -72,7 +72,7 @@ protected:
private:
#if EFI_CAN_SUPPORT
static CANDriver* s_device;
static CANDriver* s_devices[2];
#endif // EFI_CAN_SUPPORT
};