|
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,20 +52,44 @@ 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 | + |
| 60 | + // The integer in info.model is one of an enum. Values taken from here: |
| 61 | + // https://github.com/espressif/esp-idf/blob/67552c31dac8cd94fb0d63192a538f4f984c5b6e/components/esp_hw_support/include/esp_chip_info.h#L22C7-L22C7 |
| 62 | + switch (info.model) { |
| 63 | + // String format matches style used when installing ESP-IDF. |
| 64 | + case 1: return mrb_str_new_cstr(mrb, "esp32"); |
| 65 | + case 2: return mrb_str_new_cstr(mrb, "esp32s2"); |
| 66 | + case 9: return mrb_str_new_cstr(mrb, "esp32s3"); |
| 67 | + case 5: return mrb_str_new_cstr(mrb, "esp32c3"); |
| 68 | + case 12: return mrb_str_new_cstr(mrb, "esp32c2"); |
| 69 | + case 13: return mrb_str_new_cstr(mrb, "esp32c6"); |
| 70 | + case 16: return mrb_str_new_cstr(mrb, "esp32h2"); |
| 71 | + case 18: return mrb_str_new_cstr(mrb, "esp32p4"); |
| 72 | + case 999: return mrb_str_new_cstr(mrb, "simulator"); |
| 73 | + default: return mrb_str_new_cstr(mrb, "unknown"); |
| 74 | + } |
| 75 | +} |
| 76 | + |
54 | 77 | void
|
55 | 78 | mrb_mruby_esp32_system_gem_init(mrb_state* mrb) {
|
| 79 | + // ESP32 Ruby module |
56 | 80 | struct RClass *esp32_module = mrb_define_module(mrb, "ESP32");
|
57 | 81 |
|
| 82 | + // ESP32::System |
58 | 83 | struct RClass *esp32_system_module = mrb_define_module_under(mrb, esp32_module, "System");
|
59 |
| - |
60 | 84 | mrb_define_module_function(mrb, esp32_system_module, "delay", mrb_esp32_system_delay, MRB_ARGS_REQ(1));
|
61 | 85 | mrb_define_module_function(mrb, esp32_system_module, "available_memory", mrb_esp32_system_available_memory, MRB_ARGS_NONE());
|
62 | 86 | mrb_define_module_function(mrb, esp32_system_module, "sdk_version", mrb_esp32_system_sdk_version, MRB_ARGS_NONE());
|
63 | 87 | mrb_define_module_function(mrb, esp32_system_module, "restart", mrb_esp32_system_restart, MRB_ARGS_NONE());
|
64 | 88 | mrb_define_module_function(mrb, esp32_system_module, "deep_sleep_for", mrb_esp32_system_deep_sleep_for, MRB_ARGS_REQ(1));
|
| 89 | + mrb_define_module_function(mrb, esp32_system_module, "chip_model", mrb_esp32_get_chip_model, MRB_ARGS_NONE()); |
65 | 90 |
|
| 91 | + // ESP32::Timer |
66 | 92 | struct RClass *esp32_timer_module = mrb_define_module_under(mrb, esp32_module, "Timer");
|
67 |
| - |
68 | 93 | mrb_define_module_function(mrb, esp32_timer_module, "get_time", mrb_esp32_esp_timer_get_time, MRB_ARGS_NONE());
|
69 | 94 | }
|
70 | 95 |
|
|
0 commit comments