|
6 | 6 | #include "esp_system.h"
|
7 | 7 | #include "esp_sleep.h"
|
8 | 8 | #include "esp_timer.h"
|
| 9 | +#include "esp_chip_info.h" |
9 | 10 |
|
10 | 11 | #include "freertos/FreeRTOS.h"
|
11 | 12 | #include "freertos/task.h"
|
@@ -51,21 +52,54 @@ mrb_esp32_esp_timer_get_time(mrb_state *mrb, mrb_value self) {
|
51 | 52 | return mrb_float_value(mrb, esp_timer_get_time());
|
52 | 53 | }
|
53 | 54 |
|
| 55 | +static mrb_value |
| 56 | +mrb_esp32_get_chip_model(mrb_state *mrb, mrb_value self) { |
| 57 | + esp_chip_info_t info; |
| 58 | + esp_chip_info(&info); |
| 59 | + return mrb_fixnum_value(info.model); |
| 60 | +} |
| 61 | + |
54 | 62 | void
|
55 | 63 | mrb_mruby_esp32_system_gem_init(mrb_state* mrb) {
|
| 64 | + // ESP32 Ruby module |
56 | 65 | struct RClass *esp32_module = mrb_define_module(mrb, "ESP32");
|
57 | 66 |
|
| 67 | + // ESP32::System |
58 | 68 | struct RClass *esp32_system_module = mrb_define_module_under(mrb, esp32_module, "System");
|
59 |
| - |
60 | 69 | mrb_define_module_function(mrb, esp32_system_module, "delay", mrb_esp32_system_delay, MRB_ARGS_REQ(1));
|
61 | 70 | mrb_define_module_function(mrb, esp32_system_module, "available_memory", mrb_esp32_system_available_memory, MRB_ARGS_NONE());
|
62 | 71 | mrb_define_module_function(mrb, esp32_system_module, "sdk_version", mrb_esp32_system_sdk_version, MRB_ARGS_NONE());
|
63 | 72 | mrb_define_module_function(mrb, esp32_system_module, "restart", mrb_esp32_system_restart, MRB_ARGS_NONE());
|
64 | 73 | mrb_define_module_function(mrb, esp32_system_module, "deep_sleep_for", mrb_esp32_system_deep_sleep_for, MRB_ARGS_REQ(1));
|
| 74 | + mrb_define_module_function(mrb, esp32_system_module, "chip_model", mrb_esp32_get_chip_model, MRB_ARGS_NONE()); |
65 | 75 |
|
| 76 | + // ESP32::Timer |
66 | 77 | struct RClass *esp32_timer_module = mrb_define_module_under(mrb, esp32_module, "Timer");
|
67 |
| - |
68 | 78 | mrb_define_module_function(mrb, esp32_timer_module, "get_time", mrb_esp32_esp_timer_get_time, MRB_ARGS_NONE());
|
| 79 | + |
| 80 | + // ESP32::Constants |
| 81 | + struct RClass *constants = mrb_define_module_under(mrb, esp32_module, "Constants"); |
| 82 | + |
| 83 | + // Pass a C constant through to mruby, defined inside ESP32::Constants. |
| 84 | + #define define_const(SYM) \ |
| 85 | + do { \ |
| 86 | + mrb_define_const(mrb, constants, #SYM, mrb_fixnum_value(SYM)); \ |
| 87 | + } while (0) |
| 88 | + |
| 89 | + // |
| 90 | + // ESP32::System.chip_model returns a constant from the esp_chip_model_t enum: |
| 91 | + // https://github.com/espressif/esp-idf/blob/master/components/esp_hw_support/include/esp_chip_info.h |
| 92 | + // |
| 93 | + // Define constants from the enum in mruby: |
| 94 | + define_const(CHIP_ESP32); |
| 95 | + define_const(CHIP_ESP32S2); |
| 96 | + define_const(CHIP_ESP32S3); |
| 97 | + define_const(CHIP_ESP32C3); |
| 98 | + define_const(CHIP_ESP32C2); |
| 99 | + define_const(CHIP_ESP32C6); |
| 100 | + define_const(CHIP_ESP32H2); |
| 101 | + // define_const(CHIP_ESP32P4); |
| 102 | + define_const(CHIP_POSIX_LINUX); |
69 | 103 | }
|
70 | 104 |
|
71 | 105 | void
|
|
0 commit comments