Skip to content

Commit 485af79

Browse files
committed
Add ESP32::System::chip_model method
1 parent f2d6c15 commit 485af79

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

src/mrb_esp32_system.c

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "esp_system.h"
77
#include "esp_sleep.h"
88
#include "esp_timer.h"
9+
#include "esp_chip_info.h"
910

1011
#include "freertos/FreeRTOS.h"
1112
#include "freertos/task.h"
@@ -51,20 +52,44 @@ mrb_esp32_esp_timer_get_time(mrb_state *mrb, mrb_value self) {
5152
return mrb_float_value(mrb, esp_timer_get_time());
5253
}
5354

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+
5477
void
5578
mrb_mruby_esp32_system_gem_init(mrb_state* mrb) {
79+
// ESP32 Ruby module
5680
struct RClass *esp32_module = mrb_define_module(mrb, "ESP32");
5781

82+
// ESP32::System
5883
struct RClass *esp32_system_module = mrb_define_module_under(mrb, esp32_module, "System");
59-
6084
mrb_define_module_function(mrb, esp32_system_module, "delay", mrb_esp32_system_delay, MRB_ARGS_REQ(1));
6185
mrb_define_module_function(mrb, esp32_system_module, "available_memory", mrb_esp32_system_available_memory, MRB_ARGS_NONE());
6286
mrb_define_module_function(mrb, esp32_system_module, "sdk_version", mrb_esp32_system_sdk_version, MRB_ARGS_NONE());
6387
mrb_define_module_function(mrb, esp32_system_module, "restart", mrb_esp32_system_restart, MRB_ARGS_NONE());
6488
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());
6590

91+
// ESP32::Timer
6692
struct RClass *esp32_timer_module = mrb_define_module_under(mrb, esp32_module, "Timer");
67-
6893
mrb_define_module_function(mrb, esp32_timer_module, "get_time", mrb_esp32_esp_timer_get_time, MRB_ARGS_NONE());
6994
}
7095

0 commit comments

Comments
 (0)