From 6b641abc9b688cc560e28a1b4e19f14beee80ede Mon Sep 17 00:00:00 2001
From: Sergi Hernandez Juan <shernand@iri.upc.edu>
Date: Wed, 15 May 2019 13:03:04 +0200
Subject: [PATCH] Added and additional master mode check to handle cable
 plug/unplug events.

---
 f4/src/stm32f4xx_hal_i2c.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/f4/src/stm32f4xx_hal_i2c.c b/f4/src/stm32f4xx_hal_i2c.c
index de1fce1..9db82b7 100644
--- a/f4/src/stm32f4xx_hal_i2c.c
+++ b/f4/src/stm32f4xx_hal_i2c.c
@@ -2158,9 +2158,10 @@ HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevA
 {
   /* Prevent unused argument(s) compilation warning */
   UNUSED(DevAddress);
+  uint32_t sr2itflags = READ_REG(hi2c->Instance->SR2);
 
   /* Abort Master transfer during Receive or Transmit process    */
-  if(hi2c->Mode == HAL_I2C_MODE_MASTER)
+  if(hi2c->Mode == HAL_I2C_MODE_MASTER || sr2itflags&0x0001)
   {
     /* Process Locked */
     __HAL_LOCK(hi2c);
@@ -3357,7 +3358,7 @@ void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c)
   uint32_t CurrentMode  = hi2c->Mode;
 
   /* Master or Memory mode selected */
-  if((CurrentMode == HAL_I2C_MODE_MASTER) || (CurrentMode == HAL_I2C_MODE_MEM))
+  if((CurrentMode == HAL_I2C_MODE_MASTER) || (CurrentMode == HAL_I2C_MODE_MEM) || sr2itflags&0x0001)
   {
     /* SB Set ----------------------------------------------------------------*/
     if(((sr1itflags & I2C_FLAG_SB) != RESET) && ((itsources & I2C_IT_EVT) != RESET))
-- 
GitLab