M5Unified
M5Unified.hpp
Go to the documentation of this file.
1 // Copyright (c) M5Stack. All rights reserved.
2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3 
4 #ifndef __M5UNIFIED_HPP__
5 #define __M5UNIFIED_HPP__
6 
8 
9 #if __has_include(<sdkconfig.h>)
10 #include <sdkconfig.h>
11 #endif
12 
13 // If you want to use a set of functions to handle SD/SPIFFS/HTTP,
14 // please include <SD.h>,<SPIFFS.h>,<HTTPClient.h> before <M5GFX.h>
15 // #include <SD.h>
16 // #include <SPIFFS.h>
17 // #include <HTTPClient.h>
18 
19 #include <M5GFX.h>
20 
21 namespace m5
22 {
25 
27  {
46  };
47 };
48 
49 #include "gitTagVersion.h"
51 #include "utility/AXP192_Class.hpp"
52 #include "utility/IP5306_Class.hpp"
53 #include "utility/Button_Class.hpp"
54 #include "utility/Power_Class.hpp"
56 #include "utility/Mic_Class.hpp"
57 #include "utility/Touch_Class.hpp"
58 #include "utility/Log_Class.hpp"
59 #include "utility/IMU_Class.hpp"
60 
61 #include <memory>
62 #include <vector>
63 
64 namespace m5
65 {
67 
68  class M5Unified
69  {
70  public:
71  struct config_t
72  {
73 #if defined ( ARDUINO )
74 
76  uint32_t serial_baudrate = 115200;
77 
78 #endif
79 
80  union
81  {
82  struct
83  {
84  uint8_t module_display : 1;
85  uint8_t module_rca : 1;
86  uint8_t hat_spk : 1;
87  uint8_t atomic_spk : 1;
88  uint8_t hat_spk2 : 1;
89  uint8_t reserve : 3;
91  uint8_t external_speaker_value = 0x00;
92  };
93 
94  union
95  {
96  struct
97  {
98  uint16_t module_display : 1;
99  uint16_t atom_display : 1;
100  uint16_t unit_oled : 1;
101  uint16_t unit_mini_oled : 1;
102  uint16_t unit_lcd : 1;
103  uint16_t unit_glass : 1;
104  uint16_t unit_glass2 : 1;
105  uint16_t unit_rca : 1;
106  uint16_t module_rca : 1;
107  uint16_t reserve : 7;
109  uint16_t external_display_value = 0xFFFF;
110  };
111 
113  bool clear_display = true;
114 
116  bool output_power = true;
117 
119  bool pmic_button = true;
120 
122  bool internal_imu = true;
123 
125  bool internal_rtc = true;
126 
128  bool internal_mic = true;
129 
131  bool internal_spk = true;
132 
134  bool external_imu = false;
135 
137  bool external_rtc = false;
138 
140  bool disable_rtc_irq = true;
141 
143  uint8_t led_brightness = 0;
144 
147 #if defined (CONFIG_IDF_TARGET_ESP32S3)
148  = board_t::board_M5AtomS3Lite;
149 #elif defined (CONFIG_IDF_TARGET_ESP32C3)
150  = board_t::board_M5StampC3;
151 #elif defined (CONFIG_IDF_TARGET_ESP32) || !defined (CONFIG_IDF_TARGET)
152  = board_t::board_M5Atom;
153 #else
154  = board_t::board_unknown;
155 #endif
156 
157  union
158  {
159  uint8_t external_spk = 0;
160  [[deprecated("Change to external_speaker")]]
161  struct
162  {
163  uint8_t enabled : 1;
164  uint8_t omit_atomic_spk : 1;
165  uint8_t omit_spk_hat : 1;
166  uint8_t reserve : 5;
168  };
169 
170 #if defined ( __M5GFX_M5ATOMDISPLAY__ )
171  M5AtomDisplay::config_t atom_display;
172 #endif
173 #if defined ( __M5GFX_M5MODULEDISPLAY__ )
174  M5ModuleDisplay::config_t module_display;
175 #endif
176 #if defined ( __M5GFX_M5MODULERCA__ )
177  M5ModuleRCA::config_t module_rca;
178 #endif
179 #if defined ( __M5GFX_M5UNITGLASS__ )
180  M5UnitGLASS::config_t unit_glass;
181 #endif
182 #if defined ( __M5GFX_M5UNITGLASS2__ )
183  M5UnitGLASS2::config_t unit_glass2;
184 #endif
185 #if defined ( __M5GFX_M5UNITOLED__ )
186  M5UnitOLED::config_t unit_oled;
187 #endif
188 #if defined ( __M5GFX_M5UNITMINIOLED__ )
189  M5UnitMiniOLED::config_t unit_mini_oled;
190 #endif
191 #if defined ( __M5GFX_M5UNITLCD__ )
192  M5UnitLCD::config_t unit_lcd;
193 #endif
194 #if defined ( __M5GFX_M5UNITRCA__ )
195  M5UnitRCA::config_t unit_rca;
196 #endif
197  };
198 
199  M5GFX Display; // setPrimaryされたディスプレイのインスタンス
200  M5GFX &Lcd = Display;
201 
207 
208 /*
210  M5Stack BASIC/GRAY/GO/FIRE: BtnA,BtnB,BtnC
211  M5Stack Core2: BtnA,BtnB,BtnC,BtnPWR
212  M5Stick C/CPlus: BtnA,BtnB, BtnPWR
213  M5Stick CoreInk: BtnA,BtnB,BtnC,BtnPWR,BtnEXT
214  M5Paper: BtnA,BtnB,BtnC
215  M5Station: BtnA,BtnB,BtnC,BtnPWR
216  M5Tough: BtnPWR
217  M5ATOM: BtnA
218 */
222  Button_Class BtnEXT; // CoreInk top button
223  Button_Class BtnPWR; // CoreInk power button / AXP192 power button
224 
227 
230 
232 
234 
235  static int8_t getPin(pin_name_t name) { return _get_pin_table[name]; }
236 
237  M5GFX& getDisplay(size_t index);
238 
239  M5GFX& Displays(size_t index) { return getDisplay(index); }
240 
241  std::size_t getDisplayCount(void) const { return this->_displays.size(); }
242 
243  std::size_t addDisplay(M5GFX& dsp);
244 
245  // Get the display index of the type matching the argument.
246  // Returns -1 if not found.
247  int32_t getDisplayIndex(m5gfx::board_t board);
248 
249  int32_t getDisplayIndex(std::initializer_list<m5gfx::board_t> board_list);
250 
251  // Designates the display of the specified index as PrimaryDisplay.
252  bool setPrimaryDisplay(std::size_t index);
253 
254  // Find a display that matches the specified display type and designate it as PrimaryDisplay.
255  // Multiple display types can be specified in the initializer list.
256  bool setPrimaryDisplayType(std::initializer_list<m5gfx::board_t> board_list);
257 
258  // Find a display that matches the specified display type and designate it as PrimaryDisplay.
259  bool setPrimaryDisplayType(m5gfx::board_t board) { return setPrimaryDisplayType( { board } ); };
260 
262  void setLogDisplayIndex(size_t index);
263 
264  void setLogDisplayType(std::initializer_list<m5gfx::board_t> board_list);
265 
266  void setLogDisplayType(m5gfx::board_t board) { setLogDisplayType( { board } ); };
267 
269  std::uint32_t getUpdateMsec(void) const { return _updateMsec; }
270 
271  static inline config_t config(void)
272  {
273  return config_t();
274  }
275 
276  static inline void delay(uint32_t msec)
277  {
278 #if defined (ESP_PLATFORM)
279  vTaskDelay( msec / portTICK_PERIOD_MS );
280 #else
281  SDL_Delay(msec);
282 #endif
283  }
284 
285  static inline uint32_t millis(void)
286  {
287  return m5gfx::millis();
288  }
289 
290  static inline uint32_t micros(void)
291  {
292  return m5gfx::micros();
293  }
294 
297  board_t getBoard(void) const { return _board; }
298 
300  void update(void);
301 
303  void begin(void)
304  {
305  if (_board != m5gfx::board_t::board_unknown) { return; }
306  config_t cfg;
307  begin(cfg);
308  }
309 
311  void begin(config_t cfg)
312  {
313  // Allow begin execution only once.
314  if (_board != m5gfx::board_t::board_unknown) { return; }
315 
316 #if defined ( CONFIG_IDF_TARGET_ESP32S3 )
317  // Power Hold pin for Capsule/Dial/DinMeter
318  m5gfx::gpio_hi(GPIO_NUM_46);
319  m5gfx::pinMode(GPIO_NUM_46, m5gfx::pin_mode_t::output);
320 #endif
321 
322  auto brightness = Display.getBrightness();
323  Display.setBrightness(0);
324  bool res = Display.init_without_reset();
325  auto board = _check_boardtype(Display.getBoard());
326  if (board == board_t::board_unknown) { board = cfg.fallback_board; }
327  _board = board;
328  _setup_pinmap(board);
329  _setup_i2c(board);
330  if (res && getDisplayCount() == 0) {
332  }
333 
334 #if defined ( __M5GFX_M5ATOMDISPLAY__ )
335 #if !defined (CONFIG_IDF_TARGET) || defined (CONFIG_IDF_TARGET_ESP32) || defined (CONFIG_IDF_TARGET_ESP32S3)
336  if (cfg.external_display.atom_display) {
337  if (_board == board_t::board_M5Atom || _board == board_t::board_M5AtomPsram || _board == board_t::board_M5AtomS3 || _board == board_t::board_M5AtomS3Lite)
338  {
339  M5AtomDisplay dsp(cfg.atom_display);
340  if (dsp.init_without_reset()) {
341  addDisplay(dsp);
342  }
343  }
344  }
345 #endif
346 #endif
347 
348  _begin(cfg);
349 
350 
351  // Module Display / Unit OLED / Unit LCD is determined after _begin (because it must be after external power supply)
352 #if defined ( __M5GFX_M5MODULEDISPLAY__ )
353 #if !defined (CONFIG_IDF_TARGET) || defined (CONFIG_IDF_TARGET_ESP32) || defined (CONFIG_IDF_TARGET_ESP32S3)
354  if (cfg.external_display.module_display) {
355  if (_board == board_t::board_M5Stack || _board == board_t::board_M5StackCore2 || _board == board_t::board_M5Tough || _board == board_t::board_M5StackCoreS3)
356  {
357  M5ModuleDisplay dsp(cfg.module_display);
358  if (dsp.init()) {
359  addDisplay(dsp);
360  }
361  }
362  }
363 #endif
364 #endif
365 
366  // Speaker selection is performed after the Module Display has been determined.
367  _begin_spk(cfg);
368 
369  bool port_a_used = _begin_rtc_imu(cfg);
370  (void)port_a_used;
371 
372  if (cfg.external_display_value)
373  {
374 #if defined ( __M5GFX_M5UNITOLED__ )
375  if (cfg.external_display.unit_oled)
376  {
377 #if defined (ESP_PLATFORM)
378  if (cfg.unit_oled.pin_sda >= GPIO_NUM_MAX) { cfg.unit_oled.pin_sda = (uint8_t)Ex_I2C.getSDA(); }
379  if (cfg.unit_oled.pin_scl >= GPIO_NUM_MAX) { cfg.unit_oled.pin_scl = (uint8_t)Ex_I2C.getSCL(); }
380  if (cfg.unit_oled.i2c_port < 0) { cfg.unit_oled.i2c_port = (int8_t)Ex_I2C.getPort(); }
381 #endif
382 
383  M5UnitOLED dsp(cfg.unit_oled);
384  if (dsp.init()) {
385  addDisplay(dsp);
386  port_a_used = true;
387  }
388  }
389 #endif
390 
391 #if defined ( __M5GFX_M5UNITMINIOLED__ )
392  if (cfg.external_display.unit_mini_oled)
393  {
394 #if defined (ESP_PLATFORM)
395  if (cfg.unit_mini_oled.pin_sda >= GPIO_NUM_MAX) { cfg.unit_mini_oled.pin_sda = (uint8_t)Ex_I2C.getSDA(); }
396  if (cfg.unit_mini_oled.pin_scl >= GPIO_NUM_MAX) { cfg.unit_mini_oled.pin_scl = (uint8_t)Ex_I2C.getSCL(); }
397  if (cfg.unit_mini_oled.i2c_port < 0) { cfg.unit_mini_oled.i2c_port = (int8_t)Ex_I2C.getPort(); }
398 #endif
399 
400  M5UnitMiniOLED dsp(cfg.unit_mini_oled);
401  if (dsp.init()) {
402  addDisplay(dsp);
403  port_a_used = true;
404  }
405  }
406 #endif
407 
408 #if defined ( __M5GFX_M5UNITGLASS__ )
409  if (cfg.external_display.unit_glass)
410  {
411 #if defined (ESP_PLATFORM)
412  if (cfg.unit_glass.pin_sda >= GPIO_NUM_MAX) { cfg.unit_glass.pin_sda = (uint8_t)Ex_I2C.getSDA(); }
413  if (cfg.unit_glass.pin_scl >= GPIO_NUM_MAX) { cfg.unit_glass.pin_scl = (uint8_t)Ex_I2C.getSCL(); }
414  if (cfg.unit_glass.i2c_port < 0) { cfg.unit_glass.i2c_port = (int8_t)Ex_I2C.getPort(); }
415 #endif
416 
417  M5UnitGLASS dsp(cfg.unit_glass);
418  if (dsp.init()) {
419  addDisplay(dsp);
420  port_a_used = true;
421  }
422  }
423 #endif
424 
425 #if defined ( __M5GFX_M5UNITGLASS2__ )
426  if (cfg.external_display.unit_glass2)
427  {
428 #if defined (ESP_PLATFORM)
429  if (cfg.unit_glass2.pin_sda >= GPIO_NUM_MAX) { cfg.unit_glass2.pin_sda = (uint8_t)Ex_I2C.getSDA(); }
430  if (cfg.unit_glass2.pin_scl >= GPIO_NUM_MAX) { cfg.unit_glass2.pin_scl = (uint8_t)Ex_I2C.getSCL(); }
431  if (cfg.unit_glass2.i2c_port < 0) { cfg.unit_glass2.i2c_port = (int8_t)Ex_I2C.getPort(); }
432 #endif
433 
434  M5UnitGLASS2 dsp(cfg.unit_glass2);
435  if (dsp.init()) {
436  addDisplay(dsp);
437  port_a_used = true;
438  }
439  }
440 #endif
441 
442 #if defined ( __M5GFX_M5UNITLCD__ )
443  if (cfg.external_display.unit_lcd)
444  {
445 #if defined (ESP_PLATFORM)
446  if (cfg.unit_lcd.pin_sda >= GPIO_NUM_MAX) { cfg.unit_lcd.pin_sda = (uint8_t)Ex_I2C.getSDA(); }
447  if (cfg.unit_lcd.pin_scl >= GPIO_NUM_MAX) { cfg.unit_lcd.pin_scl = (uint8_t)Ex_I2C.getSCL(); }
448  if (cfg.unit_lcd.i2c_port < 0) { cfg.unit_lcd.i2c_port = (int8_t)Ex_I2C.getPort(); }
449 #endif
450 
451  M5UnitLCD dsp(cfg.unit_lcd);
452  int retry = 8;
453  do {
454  m5gfx::delay(32);
455  if (dsp.init()) {
456  addDisplay(dsp);
457  port_a_used = true;
458  break;
459  }
460  } while (--retry);
461  }
462 #endif
463 
464 // RCA is not available on ESP32S3
465 #if !defined (CONFIG_IDF_TARGET) || defined (CONFIG_IDF_TARGET_ESP32)
466 #if defined ( __M5GFX_M5MODULERCA__ ) || defined ( __M5GFX_M5UNITRCA__ )
467  {
468  bool unit_rca = cfg.external_display.unit_rca;
469  (void)unit_rca;
470 #if defined ( __M5GFX_M5MODULERCA__ )
471  if (cfg.external_display.module_rca)
472  {
473  if (board == board_t::board_M5Stack
474  || board == board_t::board_M5StackCore2
475  || board == board_t::board_M5Tough
476  ) {
477  // When ModuleRCA is used, UnitRCA is not used.
478  unit_rca = false;
479  M5ModuleRCA dsp(cfg.module_rca);
480  if (dsp.init()) {
481  addDisplay(dsp);
482  }
483  }
484  }
485 #endif
486 #if defined ( __M5GFX_M5UNITRCA__ )
487  if (unit_rca)
488  {
489  if ( board == board_t::board_M5Stack
490  || board == board_t::board_M5StackCore2
491  || board == board_t::board_M5Paper
492  || board == board_t::board_M5Tough
493  || board == board_t::board_M5Station
494  || (!port_a_used && ( // ATOM does not allow video output via UnitRCA when PortA is used.
495  board == board_t::board_M5Atom
496  || board == board_t::board_M5AtomPsram
497  || board == board_t::board_M5AtomU
498  )))
499  {
500  M5UnitRCA dsp(cfg.unit_rca);
501  if (dsp.init()) {
502  addDisplay(dsp);
503  }
504  }
505  }
506 #endif
507  }
508 #endif
509 #endif
510  }
511 
512  if (Display.getBoard() != board_t::board_unknown)
513  {
514  Display.setBrightness(brightness);
515  }
516 
517  update();
518  }
519 
520  private:
521  static constexpr std::size_t BTNPWR_MIN_UPDATE_MSEC = 4;
522 
523  std::vector<M5GFX> _displays; // 登録された全ディスプレイのインスタンス
524  std::uint32_t _updateMsec = 0;
525  m5gfx::board_t _board = m5gfx::board_t::board_unknown;
526 
527  std::uint8_t _primary_display_index = -1;
528  bool use_pmic_button = false;
529  bool use_hat_spk = false;
530 
531  void _begin(const config_t& cfg);
532  void _begin_spk(config_t& cfg);
533  bool _begin_rtc_imu(const config_t& cfg);
534 
535  board_t _check_boardtype(board_t);
536  void _setup_i2c(board_t);
537 
538  static void _setup_pinmap(board_t);
539  static bool _speaker_enabled_cb(void* args, bool enabled);
540  static bool _microphone_enabled_cb(void* args, bool enabled);
541  static int8_t _get_pin_table[pin_name_max];
542  };
543 }
544 
545 extern m5::M5Unified M5;
546 
547 #endif
m5::M5Unified M5
global instance.
Definition: M5Unified.cpp:32
int8_t getSDA(void) const
Definition: I2C_Class.hpp:127
int8_t getSCL(void) const
Definition: I2C_Class.hpp:128
i2c_port_t getPort(void) const
Definition: I2C_Class.hpp:126
void begin(void)
Perform initialization process at startup.
Definition: M5Unified.hpp:303
Mic_Class Mic
Definition: M5Unified.hpp:233
Button_Class BtnEXT
Definition: M5Unified.hpp:222
bool setPrimaryDisplayType(std::initializer_list< m5gfx::board_t > board_list)
Definition: M5Unified.cpp:1273
void setLogDisplayIndex(size_t index)
Set the display to show logs.
Definition: M5Unified.cpp:1281
std::uint32_t getUpdateMsec(void) const
milli seconds at the time the update was called
Definition: M5Unified.hpp:269
Button_Class BtnA
Definition: M5Unified.hpp:219
Button_Class BtnC
Definition: M5Unified.hpp:221
Power_Class Power
Definition: M5Unified.hpp:204
I2C_Class & Ex_I2C
for external I2C device (Port.A)
Definition: M5Unified.hpp:229
Button_Class BtnB
Definition: M5Unified.hpp:220
void setLogDisplayType(std::initializer_list< m5gfx::board_t > board_list)
Definition: M5Unified.cpp:1286
board_t getBoard(void) const
Definition: M5Unified.hpp:297
static config_t config(void)
Definition: M5Unified.hpp:271
Button_Class BtnPWR
Definition: M5Unified.hpp:223
std::size_t addDisplay(M5GFX &dsp)
Definition: M5Unified.cpp:1227
M5GFX & Displays(size_t index)
Definition: M5Unified.hpp:239
M5GFX & getDisplay(size_t index)
Definition: M5Unified.cpp:1222
std::size_t getDisplayCount(void) const
Definition: M5Unified.hpp:241
Touch_Class Touch
Definition: M5Unified.hpp:206
void update(void)
To call this function in a loop function.
Definition: M5Unified.cpp:1056
static void delay(uint32_t msec)
Definition: M5Unified.hpp:276
IMU_Class Imu
Definition: M5Unified.hpp:202
RTC8563_Class Rtc
Definition: M5Unified.hpp:205
Speaker_Class Speaker
Definition: M5Unified.hpp:231
void setLogDisplayType(m5gfx::board_t board)
Definition: M5Unified.hpp:266
bool setPrimaryDisplay(std::size_t index)
Definition: M5Unified.cpp:1259
static int8_t getPin(pin_name_t name)
Definition: M5Unified.hpp:235
I2C_Class & In_I2C
for internal I2C device
Definition: M5Unified.hpp:226
Log_Class Log
Definition: M5Unified.hpp:203
static uint32_t micros(void)
Definition: M5Unified.hpp:290
int32_t getDisplayIndex(m5gfx::board_t board)
Definition: M5Unified.cpp:1239
void begin(config_t cfg)
Perform initialization process at startup.
Definition: M5Unified.hpp:311
bool setPrimaryDisplayType(m5gfx::board_t board)
Definition: M5Unified.hpp:259
static uint32_t millis(void)
Definition: M5Unified.hpp:285
Definition: M5Unified.cpp:48
I2C_Class Ex_I2C
for external I2C device
Definition: I2C_Class.cpp:11
m5gfx::board_t board_t
Definition: M5Unified.hpp:23
Touch_Class::touch_detail_t touch_detail_t
Definition: M5Unified.hpp:66
pin_name_t
Definition: M5Unified.hpp:27
@ port_b2_pin1
Definition: M5Unified.hpp:36
@ port_a_sda
Definition: M5Unified.hpp:31
@ port_b2_pin2
Definition: M5Unified.hpp:37
@ in_i2c_sda
Definition: M5Unified.hpp:29
@ port_b_in
Definition: M5Unified.hpp:32
@ sd_spi_miso
Definition: M5Unified.hpp:42
@ port_d_pin2
Definition: M5Unified.hpp:37
@ port_c2_pin1
Definition: M5Unified.hpp:38
@ port_e_txd
Definition: M5Unified.hpp:39
@ sd_spi_cs
Definition: M5Unified.hpp:43
@ sd_spi_ss
Definition: M5Unified.hpp:43
@ port_b_pin1
Definition: M5Unified.hpp:32
@ sd_spi_sclk
Definition: M5Unified.hpp:40
@ port_c_pin2
Definition: M5Unified.hpp:35
@ port_a_scl
Definition: M5Unified.hpp:30
@ port_b_out
Definition: M5Unified.hpp:33
@ port_d_rxd
Definition: M5Unified.hpp:36
@ port_d_txd
Definition: M5Unified.hpp:37
@ port_a_pin1
Definition: M5Unified.hpp:30
@ pin_name_max
Definition: M5Unified.hpp:45
@ port_d_pin1
Definition: M5Unified.hpp:36
@ port_e_pin1
Definition: M5Unified.hpp:38
@ port_e_rxd
Definition: M5Unified.hpp:38
@ port_e_pin2
Definition: M5Unified.hpp:39
@ sd_spi_cipo
Definition: M5Unified.hpp:42
@ rgb_led
Definition: M5Unified.hpp:44
@ ex_i2c_scl
Definition: M5Unified.hpp:30
@ port_c_pin1
Definition: M5Unified.hpp:34
@ sd_spi_copi
Definition: M5Unified.hpp:41
@ ex_i2c_sda
Definition: M5Unified.hpp:31
@ in_i2c_scl
Definition: M5Unified.hpp:28
@ port_c_rxd
Definition: M5Unified.hpp:34
@ port_c2_pin2
Definition: M5Unified.hpp:39
@ port_a_pin2
Definition: M5Unified.hpp:31
@ port_c_txd
Definition: M5Unified.hpp:35
@ sd_spi_mosi
Definition: M5Unified.hpp:41
@ port_b_pin2
Definition: M5Unified.hpp:33
m5gfx::touch_point_t touch_point_t
Definition: M5Unified.hpp:24
I2C_Class In_I2C
for internal I2C device
Definition: I2C_Class.cpp:10
struct m5::M5Unified::config_t::@4::@8 external_spk_detail
uint16_t external_display_value
Definition: M5Unified.hpp:109
bool external_imu
use Unit Accel & Gyro.
Definition: M5Unified.hpp:134
bool internal_mic
use the microphone.
Definition: M5Unified.hpp:128
uint8_t led_brightness
system LED brightness (0=off / 255=max) (※ not RGBcolorLED)
Definition: M5Unified.hpp:143
bool output_power
5V output to external port.
Definition: M5Unified.hpp:116
bool internal_spk
use the speaker.
Definition: M5Unified.hpp:131
bool disable_rtc_irq
Turn off the IRQ bit of the RTC at startup.
Definition: M5Unified.hpp:140
struct m5::M5Unified::config_t::@0::@6 external_speaker
bool internal_rtc
use internal RTC.
Definition: M5Unified.hpp:125
bool pmic_button
use PMIC(AXP192) pek for M5.BtnPWR.
Definition: M5Unified.hpp:119
uint8_t external_speaker_value
Definition: M5Unified.hpp:91
bool internal_imu
use internal IMU.
Definition: M5Unified.hpp:122
bool clear_display
Clear the screen when startup.
Definition: M5Unified.hpp:113
bool external_rtc
use Unit RTC.
Definition: M5Unified.hpp:137
board_t fallback_board
If auto-detection fails, the board will operate as the board configured here.
Definition: M5Unified.hpp:152
struct m5::M5Unified::config_t::@2::@7 external_display