Skip to content

Releases: m5stack/M5IOE1

v1.0.8

28 Feb 08:18

Choose a tag to compare

  1. Fix _pollTask declaration scope for Arduino builds — Move TaskHandle_t _pollTask; from the #else (ESP-IDF-only) branch of #ifdef ARDUINO to 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().

  2. Fix _pollTask initialization 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. _intrQueue remains in the #else block as it is only used by ESP-IDF code paths.

  3. Add per-pin clearInterrupt(uint8_t pin) API overload — Introduce a new clearInterrupt(uint8_t pin) method alongside the existing no-argument clearInterrupt(). The new overload writes ~(1U << pin) to GPIO_IS_L/GPIO_IS_H using 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 in interrupt_hardware.ino and interrupt_polling.ino examples that were calling clearInterrupt(IOE1_PIN_x).

  4. Fix begin() parameter misalignment in interrupt_polling.ino example — Insert the missing intPin = -1 argument before M5IOE1_INT_MODE_POLLING in the begin() call. Previously, the enum value M5IOE1_INT_MODE_POLLING (= 1) was being passed to the intPin parameter, causing GPIO1 to be incorrectly registered as the hardware interrupt pin and later detachInterrupt()-ed on destruction.

v1.0.7

28 Feb 03:20

Choose a tag to compare

  1. 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.

  2. Add compile-time feature detection for I2C backends — Introduce M5IOE1_HAS_I2C_MASTER, M5IOE1_HAS_I2C_BUS, and M5IOE1_HAS_M5UNIFIED_I2C macros to auto-detect available I2C drivers based on IDF version, header availability, and CONFIG_I2C_BUS_BACKWARD_CONFIG.

  3. Add M5GFX/M5Unified coexistence conflict detection — Emit compile-time errors or silently disable i2c_bus mode when M5GFX/M5Unified is present, preventing runtime abort() from i2c_driver_install() vs i2c_new_master_bus() conflicts.

  4. Improve the log system with per-module tags and additional log levels — Split monolithic M5IOE1 tag into M5IOE1_I2C, M5IOE1_GPIO, M5IOE1_ADC, M5IOE1_PWM, M5IOE1_LED, M5IOE1_AMP, M5IOE1_IRQ, M5IOE1_SYS; add LOG_D (debug) and LOG_V (verbose) levels; prefix Arduino log output with severity indicators [I]/[W]/[E]/[D]/[V]; force LOG_LOCAL_LEVEL = ESP_LOG_VERBOSE for ESP-IDF builds.

  5. Optimize I2C retry with configurable delay — Add M5IOE1_I2C_RETRY_DELAY_MS (default 50ms) alongside existing M5IOE1_I2C_RETRY_COUNT, replacing hard-coded minimal delays.

  6. Rename I2C helper functions with platform prefix — Rename M5IOE1_I2C_READ_BYTEM5IOE1_I2C_ARDUINO_READ_BYTE (and all similar helpers); add new M5IOE1_M5UNIFIED_* wrapper set for I2C_Class communication.

  7. Add snapshot domain bitmask enum — New m5ioe1_snapshot_domain_t enum with GPIO, PWM, ADC, AW8737A, and ALL domains for selective snapshot verification.

  8. Optimize i2c-related internal functions — Refactor I2C initialization, read/write paths, and conditional compilation guards for i2c_master and i2c_bus backends; move Arduino polling/interrupt task handles from static globals to instance members for multi-instance support.

  9. Add M5Unified as optional CMake dependency — Use idf_component_optional_requires(PRIVATE M5Unified) so M5IOE1 auto-links M5Unified when present without hard dependency.

  10. Add include-order guidance and i2c_bus restriction notes in README — Document that M5Unified.h must be included before M5IOE1.h on ESP-IDF ≥ 5.3.0 to avoid i2c_config_t conflicts; note that i2c_bus mode is unsupported when M5GFX/M5Unified is present; recommend begin(&M5.In_I2C, addr, freq) instead.

  11. Update clang-format configuration and CI action — Revise .clang-format rules and update clang-format-check.yml workflow.

  12. Bump library version from 1.0.6 to 1.0.7 — Update version in idf_component.yml, library.json, and library.properties.

v1.0.6

08 Feb 08:08

Choose a tag to compare

  1. Optimize the use of Wire in Arduino and add a delay

v1.0.5

06 Feb 10:05

Choose a tag to compare

  1. fix setLeds setLedColor
  2. update 1.0.5

v1.0.4

29 Jan 08:30

Choose a tag to compare

  1. 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

27 Jan 09:57

Choose a tag to compare

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

v1.0.2

16 Jan 02:07

Choose a tag to compare

  1. add setPwmConfig
  2. fix interrupt_hardware.ino

v1.0.1

13 Jan 06:58

Choose a tag to compare

Initial commit