More FRToS I2C cleanup
This commit is contained in:
@@ -14,9 +14,7 @@ class FRToSI2C {
|
|||||||
public:
|
public:
|
||||||
FRToSI2C(I2C_HandleTypeDef* i2chandle);
|
FRToSI2C(I2C_HandleTypeDef* i2chandle);
|
||||||
void FRToSInit();
|
void FRToSInit();
|
||||||
void MasterTxCpltCallback(); //Normal Tx Callback
|
void CpltCallback(); //Normal Tx Callback
|
||||||
void MemRxCpltCallback(); //Callback from memory read cycles
|
|
||||||
void MemTxCpltCallback(); //Callback from memory write cycles
|
|
||||||
|
|
||||||
void Mem_Read(uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize,
|
void Mem_Read(uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize,
|
||||||
uint8_t *pData, uint16_t Size);
|
uint8_t *pData, uint16_t Size);
|
||||||
@@ -26,7 +24,6 @@ public:
|
|||||||
void Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size);
|
void Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool RToSUP=false;
|
|
||||||
I2C_HandleTypeDef* i2c;
|
I2C_HandleTypeDef* i2c;
|
||||||
SemaphoreHandle_t I2CSemaphore;
|
SemaphoreHandle_t I2CSemaphore;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -26,10 +26,17 @@ enum ButtonState {
|
|||||||
ButtonState getButtonState();
|
ButtonState getButtonState();
|
||||||
void waitForButtonPressOrTimeout(uint32_t timeout);
|
void waitForButtonPressOrTimeout(uint32_t timeout);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc);
|
void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc);
|
||||||
|
void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c);
|
||||||
|
void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||||
|
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||||
|
void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||||
|
void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||||
|
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif /* __MAIN_H */
|
#endif /* __MAIN_H */
|
||||||
|
|||||||
@@ -9,24 +9,23 @@
|
|||||||
|
|
||||||
FRToSI2C::FRToSI2C(I2C_HandleTypeDef* i2chandle) {
|
FRToSI2C::FRToSI2C(I2C_HandleTypeDef* i2chandle) {
|
||||||
i2c = i2chandle;
|
i2c = i2chandle;
|
||||||
|
I2CSemaphore = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FRToSI2C::MasterTxCpltCallback() {
|
void FRToSI2C::CpltCallback() {
|
||||||
xSemaphoreGive(I2CSemaphore);
|
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||||
}
|
|
||||||
|
if (I2CSemaphore) {
|
||||||
|
xSemaphoreGiveFromISR(I2CSemaphore, &xHigherPriorityTaskWoken);
|
||||||
|
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||||
|
}
|
||||||
|
|
||||||
void FRToSI2C::MemRxCpltCallback() {
|
|
||||||
xSemaphoreGive(I2CSemaphore);
|
|
||||||
}
|
|
||||||
void FRToSI2C::MemTxCpltCallback() {
|
|
||||||
xSemaphoreGive(I2CSemaphore);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t MemAddress,
|
void FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t MemAddress,
|
||||||
uint16_t MemAddSize, uint8_t* pData, uint16_t Size) {
|
uint16_t MemAddSize, uint8_t* pData, uint16_t Size) {
|
||||||
if (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED
|
if (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED
|
||||||
|| RToSUP == false) {
|
|| I2CSemaphore == NULL) {
|
||||||
//no RToS, run blocking code
|
//no RToS, run blocking code
|
||||||
HAL_I2C_Mem_Read(i2c, DevAddress, MemAddress, MemAddSize, pData, Size,
|
HAL_I2C_Mem_Read(i2c, DevAddress, MemAddress, MemAddSize, pData, Size,
|
||||||
5000);
|
5000);
|
||||||
@@ -48,7 +47,7 @@ void FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t MemAddress,
|
|||||||
void FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress,
|
void FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress,
|
||||||
uint16_t MemAddSize, uint8_t* pData, uint16_t Size) {
|
uint16_t MemAddSize, uint8_t* pData, uint16_t Size) {
|
||||||
if (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED
|
if (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED
|
||||||
|| RToSUP == false) {
|
|| I2CSemaphore == NULL) {
|
||||||
//no RToS, run blocking code
|
//no RToS, run blocking code
|
||||||
HAL_I2C_Mem_Write(i2c, DevAddress, MemAddress, MemAddSize, pData, Size,
|
HAL_I2C_Mem_Write(i2c, DevAddress, MemAddress, MemAddSize, pData, Size,
|
||||||
5000);
|
5000);
|
||||||
@@ -70,12 +69,11 @@ void FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress,
|
|||||||
void FRToSI2C::FRToSInit() {
|
void FRToSI2C::FRToSInit() {
|
||||||
I2CSemaphore = xSemaphoreCreateMutex();
|
I2CSemaphore = xSemaphoreCreateMutex();
|
||||||
xSemaphoreGive(I2CSemaphore);
|
xSemaphoreGive(I2CSemaphore);
|
||||||
RToSUP = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FRToSI2C::Transmit(uint16_t DevAddress, uint8_t* pData, uint16_t Size) {
|
void FRToSI2C::Transmit(uint16_t DevAddress, uint8_t* pData, uint16_t Size) {
|
||||||
if (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED
|
if (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED
|
||||||
|| RToSUP == false) {
|
|| I2CSemaphore == NULL) {
|
||||||
//no RToS, run blocking code
|
//no RToS, run blocking code
|
||||||
HAL_I2C_Master_Transmit(i2c, DevAddress, pData, Size, 5000);
|
HAL_I2C_Master_Transmit(i2c, DevAddress, pData, Size, 5000);
|
||||||
} else {
|
} else {
|
||||||
@@ -84,9 +82,7 @@ void FRToSI2C::Transmit(uint16_t DevAddress, uint8_t* pData, uint16_t Size) {
|
|||||||
//Wait up to 1 second for the mutex
|
//Wait up to 1 second for the mutex
|
||||||
if ( xSemaphoreTake( I2CSemaphore, ( TickType_t ) 1000 ) == pdTRUE) {
|
if ( xSemaphoreTake( I2CSemaphore, ( TickType_t ) 1000 ) == pdTRUE) {
|
||||||
HAL_I2C_Master_Transmit(i2c, DevAddress, pData, Size, 5000);
|
HAL_I2C_Master_Transmit(i2c, DevAddress, pData, Size, 5000);
|
||||||
|
|
||||||
xSemaphoreGive(I2CSemaphore);
|
xSemaphoreGive(I2CSemaphore);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1089,14 +1089,21 @@ void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c) {
|
void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c) {
|
||||||
|
i2cDev.CpltCallback();
|
||||||
}
|
}
|
||||||
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c) {
|
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c) {
|
||||||
i2cDev.MasterTxCpltCallback();
|
i2cDev.CpltCallback();
|
||||||
}
|
}
|
||||||
void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c) {
|
void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c) {
|
||||||
i2cDev.MemTxCpltCallback();
|
|
||||||
}
|
|
||||||
|
|
||||||
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c) {
|
i2cDev.CpltCallback();
|
||||||
i2cDev.MemRxCpltCallback();
|
}
|
||||||
|
void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c){
|
||||||
|
i2cDev.CpltCallback();
|
||||||
|
}
|
||||||
|
void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c){
|
||||||
|
i2cDev.CpltCallback();
|
||||||
|
}
|
||||||
|
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c) {
|
||||||
|
i2cDev.CpltCallback();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user