10#if HAL_USE_PAL && EFI_PROD_CODE
21#ifdef STM32_I2C_I2C1_IRQ_PRIORITY
23 nvicEnableVector(I2C1_EV_IRQn, STM32_I2C_I2C1_IRQ_PRIORITY);
32 const char* Name =
nullptr;
45 criticalAssert(msg,
"efiExtiEnablePin msg must not be null", -1);
72 ioline_t line = PAL_LINE(port, index);
73 palEnableLineEvent(line, mode);
90 int index =
getHwPin(
"exti", brainPin);
99 ioline_t line = PAL_LINE(port, index);
100 palDisableLineEvent(line);
105 channel.CallbackData =
nullptr;
110 NVIC->STIR = I2C1_EV_IRQn;
113struct ExtiQueueEntry {
118template <
typename T,
size_t TSize>
121 void push(
const T& val) {
122 if ((m_write == m_read - 1) || (m_write == TSize - 1 && m_read == 0)) {
131 if (m_write == TSize) {
137 if (m_read == m_write) {
142 T value = arr[m_read];
146 if (m_read == TSize) {
160static ExtiQueue<ExtiQueueEntry, 32>
queue;
171 auto result =
queue.pop();
179 auto& entry = result.Value;
180 auto& timestamp = entry.Timestamp;
182 if (timestamp != 0) {
204 extiGetAndClearGroup1(1U << index, pr);
206 if (pr & (1 << index)) {
254 criticalError(
"exti not supported");
void efiSetPadMode(const char *msg, brain_pin_e brainPin, iomode_t mode)
ioportid_t getHwPort(const char *msg, brain_pin_e brainPin)
ioportmask_t getHwPin(const char *msg, brain_pin_e brainPin)
void firmwareError(ObdCode code, const char *fmt,...)
GPIO_TypeDef * ioportid_t
Port Identifier.
uint32_t ioline_t
Type of an I/O line.
@ CUSTOM_ERR_PIN_ALREADY_USED_2
const char * hwPortname(brain_pin_e brainPin)
void brain_pin_markUnused(brain_pin_e brainPin)
bool isBrainPinValid(brain_pin_e brainPin)