mirror of
https://github.com/meshtastic/firmware.git
synced 2026-01-16 14:57:41 +00:00
* Initial commit of combined BLE and WiFi OTA * Incorporate ota_hash in AdminMessage protobuf * OTA protobuf changes * Trunk fmt --------- Co-authored-by: Jake-B <jake-b@users.noreply.github.com>
42 lines
1.4 KiB
C
42 lines
1.4 KiB
C
#ifdef CAN_RECLOCK_I2C
|
|
#include "ScanI2CTwoWire.h"
|
|
|
|
uint32_t reClockI2C(uint32_t desiredClock, TwoWire *i2cBus)
|
|
{
|
|
|
|
uint32_t currentClock;
|
|
|
|
/* See https://github.com/arduino/Arduino/issues/11457
|
|
Currently, only ESP32 can getClock()
|
|
While all cores can setClock()
|
|
https://github.com/sandeepmistry/arduino-nRF5/blob/master/libraries/Wire/Wire.h#L50
|
|
https://github.com/earlephilhower/arduino-pico/blob/master/libraries/Wire/src/Wire.h#L60
|
|
https://github.com/stm32duino/Arduino_Core_STM32/blob/main/libraries/Wire/src/Wire.h#L103
|
|
For cases when I2C speed is different to the ones defined by sensors (see defines in sensor classes)
|
|
we need to reclock I2C and set it back to the previous desired speed.
|
|
Only for cases where we can know OR predefine the speed, we can do this.
|
|
*/
|
|
|
|
#ifdef ARCH_ESP32
|
|
currentClock = i2cBus->getClock();
|
|
#elif defined(ARCH_NRF52)
|
|
// TODO add getClock function or return a predefined clock speed per variant?
|
|
return 0;
|
|
#elif defined(ARCH_RP2040)
|
|
// TODO add getClock function or return a predefined clock speed per variant
|
|
return 0;
|
|
#elif defined(ARCH_STM32WL)
|
|
// TODO add getClock function or return a predefined clock speed per variant
|
|
return 0;
|
|
#else
|
|
return 0;
|
|
#endif
|
|
|
|
if (currentClock != desiredClock) {
|
|
LOG_DEBUG("Changing I2C clock to %u", desiredClock);
|
|
i2cBus->setClock(desiredClock);
|
|
}
|
|
return currentClock;
|
|
}
|
|
#endif
|