Keep the slave scheduler going even if a slave driver failed to trigger an I2C callback.

This commit is contained in:
László Monda
2017-06-01 03:03:20 +02:00
parent 420097dddc
commit 0f51700ea9
3 changed files with 21 additions and 13 deletions

View File

@@ -18,22 +18,26 @@ uhk_slave_t slaves[] = {
static void bridgeProtocolCallback(I2C_Type *base, i2c_master_handle_t *handle, status_t status, void *userData)
{
if (TestStates.disableI2c) {
return;
}
uhk_slave_t *slave = slaves + currentSlaveId;
IsI2cTransferScheduled = false;
slave->isConnected = status == kStatus_Success;
if (!slave->isConnected) {
slave->initializer(slave->perDriverId);
}
do {
if (TestStates.disableI2c) {
return;
}
uhk_slave_t *slave = slaves + currentSlaveId;
slave->updater(slave->perDriverId);
currentSlaveId++;
slave->isConnected = status == kStatus_Success;
if (!slave->isConnected) {
slave->initializer(slave->perDriverId);
}
if (currentSlaveId >= (sizeof(slaves) / sizeof(uhk_slave_t))) {
currentSlaveId = 0;
}
slave->updater(slave->perDriverId);
currentSlaveId++;
if (currentSlaveId >= (sizeof(slaves) / sizeof(uhk_slave_t))) {
currentSlaveId = 0;
}
} while (!IsI2cTransferScheduled);
}
static void initSlaveDrivers()