Releases: m5stack/M5IOE1
v1.0.8
-
Fix
_pollTaskdeclaration scope for Arduino builds — MoveTaskHandle_t _pollTask;from the#else(ESP-IDF-only) branch of#ifdef ARDUINOto the unconditional (shared) area after#endif, making it visible to both Arduino and ESP-IDF compilation paths. This resolves 8 compile errors ('_pollTask' was not declared in this scope) in functions_updatePollingForI2cSleep(),_arduinoIsrHandler(),_setupPollingArduino(),_cleanupPollingArduino(),_setupHardwareInterruptArduino(), and_cleanupHardwareInterruptArduino(). -
Fix
_pollTaskinitialization in constructor — Move_pollTask = nullptr;from the#else(ESP-IDF) branch of the constructor to the unconditional area after#endif, ensuring the task handle is properly zero-initialized regardless of platform._intrQueueremains in the#elseblock as it is only used by ESP-IDF code paths. -
Add per-pin
clearInterrupt(uint8_t pin)API overload — Introduce a newclearInterrupt(uint8_t pin)method alongside the existing no-argumentclearInterrupt(). The new overload writes~(1U << pin)toGPIO_IS_L/GPIO_IS_Husing the hardware's "write 0 to clear" semantics, clearing only the specified pin's interrupt status bit while leaving other pins' status intact. This fixes compile errors ininterrupt_hardware.inoandinterrupt_polling.inoexamples that were callingclearInterrupt(IOE1_PIN_x). -
Fix
begin()parameter misalignment ininterrupt_polling.inoexample — Insert the missingintPin = -1argument beforeM5IOE1_INT_MODE_POLLINGin thebegin()call. Previously, the enum valueM5IOE1_INT_MODE_POLLING(= 1) was being passed to theintPinparameter, causing GPIO1 to be incorrectly registered as the hardware interrupt pin and laterdetachInterrupt()-ed on destruction.
v1.0.7
-
Add M5Unified I2C_Class driver support for both Arduino and ESP-IDF platforms — New
begin(m5::I2C_Class*, ...)overloads (with and without hardware interrupt) allow initializing M5IOE1 using an M5Unified I2C_Class instance; the caller retains I2C bus ownership and lifecycle. -
Add compile-time feature detection for I2C backends — Introduce
M5IOE1_HAS_I2C_MASTER,M5IOE1_HAS_I2C_BUS, andM5IOE1_HAS_M5UNIFIED_I2Cmacros to auto-detect available I2C drivers based on IDF version, header availability, andCONFIG_I2C_BUS_BACKWARD_CONFIG. -
Add M5GFX/M5Unified coexistence conflict detection — Emit compile-time errors or silently disable
i2c_busmode when M5GFX/M5Unified is present, preventing runtimeabort()fromi2c_driver_install()vsi2c_new_master_bus()conflicts. -
Improve the log system with per-module tags and additional log levels — Split monolithic
M5IOE1tag intoM5IOE1_I2C,M5IOE1_GPIO,M5IOE1_ADC,M5IOE1_PWM,M5IOE1_LED,M5IOE1_AMP,M5IOE1_IRQ,M5IOE1_SYS; addLOG_D(debug) andLOG_V(verbose) levels; prefix Arduino log output with severity indicators[I]/[W]/[E]/[D]/[V]; forceLOG_LOCAL_LEVEL = ESP_LOG_VERBOSEfor ESP-IDF builds. -
Optimize I2C retry with configurable delay — Add
M5IOE1_I2C_RETRY_DELAY_MS(default 50ms) alongside existingM5IOE1_I2C_RETRY_COUNT, replacing hard-coded minimal delays. -
Rename I2C helper functions with platform prefix — Rename
M5IOE1_I2C_READ_BYTE→M5IOE1_I2C_ARDUINO_READ_BYTE(and all similar helpers); add newM5IOE1_M5UNIFIED_*wrapper set for I2C_Class communication. -
Add snapshot domain bitmask enum — New
m5ioe1_snapshot_domain_tenum withGPIO,PWM,ADC,AW8737A, andALLdomains for selective snapshot verification. -
Optimize i2c-related internal functions — Refactor I2C initialization, read/write paths, and conditional compilation guards for
i2c_masterandi2c_busbackends; move Arduino polling/interrupt task handles from static globals to instance members for multi-instance support. -
Add M5Unified as optional CMake dependency — Use
idf_component_optional_requires(PRIVATE M5Unified)so M5IOE1 auto-links M5Unified when present without hard dependency. -
Add include-order guidance and i2c_bus restriction notes in README — Document that
M5Unified.hmust be included beforeM5IOE1.hon ESP-IDF ≥ 5.3.0 to avoidi2c_config_tconflicts; note thati2c_busmode is unsupported when M5GFX/M5Unified is present; recommendbegin(&M5.In_I2C, addr, freq)instead. -
Update clang-format configuration and CI action — Revise
.clang-formatrules and updateclang-format-check.ymlworkflow. -
Bump library version from 1.0.6 to 1.0.7 — Update version in
idf_component.yml,library.json, andlibrary.properties.
v1.0.6
v1.0.5
v1.0.4
- API Changes:
- Rename m5ioe1_aw8737a_pulse_num_t to m5ioe1_aw8737a_pulse_t (simplify naming)
- Rename enum values: M5IOE1_AW8737A_PULSE_NUM_x to M5IOE1_AW8737A_PULSE_x
- Add m5ioe1_aw8737a_mode_t enum for semantic gain mode control (MODE_1 to MODE_4)
- Add setAw8737aMode() and refreshAw8737aMode() as aliases for pulse functions
- Extend m5ioe1_snapshot_verify_t with aw8737a_mismatch, expected_aw8737a, actual_aw8737a fields
v1.0.3
1.Add API documentation and refactor clearInterrupt()
- Add bilingual doc comments for all public functions
- Clarify attachInterrupt mode param behavior
- Remove unused 'pin' param from clearInterrupt() (clears all pins)
BREAKING CHANGE: clearInterrupt(pin) -> clearInterrupt()
2.update 1.0.3