62 msg_t result = canReceiveTimeout(m_device, CAN_ANY_MAILBOX, &m_buffer, CAN_RX_TIMEOUT);
64 if (result != MSG_OK) {
84#if (EFI_CAN_BUS_COUNT >= 3)
97#if (EFI_CAN_BUS_COUNT >= 3)
111 efiPrintf(
"CAN is not enabled, please enable & restart");
123#if (EFI_CAN_BUS_COUNT >= 3)
133 efiPrintf(
"CAN rx_cnt=%d/tx_ok=%d/tx_not_ok=%d",
145 efiSetPadUnusedIfConfigurationChanged(canTxPin);
146 efiSetPadUnusedIfConfigurationChanged(canRxPin);
147 efiSetPadUnusedIfConfigurationChanged(can2TxPin);
148 efiSetPadUnusedIfConfigurationChanged(can2RxPin);
149#if (EFI_CAN_BUS_COUNT >= 3)
150 efiSetPadUnusedIfConfigurationChanged(can3TxPin);
151 efiSetPadUnusedIfConfigurationChanged(can3RxPin);
182 efiSetPadModeIfConfigurationChanged(
"CAN TX", canTxPin, PAL_MODE_ALTERNATE(EFI_CAN_TX_AF));
183 efiSetPadModeIfConfigurationChanged(
"CAN RX", canRxPin, PAL_MODE_ALTERNATE(EFI_CAN_RX_AF));
185 efiSetPadModeIfConfigurationChanged(
"CAN2 TX", can2TxPin, PAL_MODE_ALTERNATE(EFI_CAN_TX_AF));
186 efiSetPadModeIfConfigurationChanged(
"CAN2 RX", can2RxPin, PAL_MODE_ALTERNATE(EFI_CAN_RX_AF));
188#if (EFI_CAN_BUS_COUNT >= 3)
189 efiSetPadModeIfConfigurationChanged(
"CAN3 TX", can3TxPin, PAL_MODE_ALTERNATE(EFI_CAN3_TX_AF));
190 efiSetPadModeIfConfigurationChanged(
"CAN3 RX", can3RxPin, PAL_MODE_ALTERNATE(EFI_CAN3_RX_AF));
197#if defined(STM32F4XX) || defined(STM32F7XX)
199 canConfig->btr |= CAN_BTR_SILM;
201#elif defined(STM32H7XX)
203 #define FDCAN_CONFIG_CCCR_MON (1u << 5)
205 canConfig->CCCR |= FDCAN_CONFIG_CCCR_MON;
223#if (EFI_CAN_BUS_COUNT >= 3)
228 if (!device1 && !device2) {
229#if (EFI_CAN_BUS_COUNT >= 3)
236 if (((device1 == device2) && device1) ||
237#
if (EFI_CAN_BUS_COUNT >= 3)
238 ((device2 == device3) && device2) ||
239 ((device3 == device1) && device3) ||
242 criticalError(
"CAN pins must be set to different devices");
254 canStart(device1, &canConfig);
264 canStart(device2, &canConfig);
270#if (EFI_CAN_BUS_COUNT >= 3)
275 canStart(device3, &canConfig);
290#if (EFI_CAN_BUS_COUNT >= 3)
CANDriver * detectCanDevice(brain_pin_e pinRx, brain_pin_e pinTx)
bool isValidCanRxPin(brain_pin_e pin)
void canHwRecover(const size_t, CANDriver *)
bool isValidCanTxPin(brain_pin_e pin)
void canHwInfo(CANDriver *cand)
const char * getCan_baudrate_e(can_baudrate_e value)
void processCanRxMessage(const size_t busIndex, const CANRxFrame &msg, efitick_t nowNt)
bool getIsCanEnabled(void)
static void applyListenOnly(CANConfig *canConfig, bool isListenOnly)
static CCM_OPTIONAL CanRead canRead1(0)
static CANDriver * getCanDevice(size_t index)
int txErrorCount[EFI_CAN_BUS_COUNT]
static CCM_OPTIONAL CanRead canRead3(2)
void setCanType(int type)
static CanWrite canWrite CCM_OPTIONAL
static CCM_OPTIONAL CanRead canRead2(1)
static const CANConfig canConfig_dummy
const CANConfig * findCanConfig(can_baudrate_e rate)
static void setDevice(size_t idx, CANDriver *device)
TunerStudioOutputChannels outputChannels
A base class for a controller that requires its own thread.
virtual void ThreadTask()=0
void start()
Start the thread.
void addConsoleAction(const char *token, Void callback)
Register console action without parameters.
const char * boolToString(bool value)
static EngineAccessor engine
static constexpr engine_configuration_s * engineConfiguration
void firmwareError(ObdCode code, const char *fmt,...)
const char * hwPortname(brain_pin_e brainPin)
bool isBrainPinValid(brain_pin_e brainPin)
can_baudrate_e canBaudRate
can_baudrate_e can2BaudRate
can_baudrate_e can3BaudRate