Skip to content

Commit 1a02da1

Browse files
authored
Merge pull request #2 from denko-rb/chip_model
Add chip_model method
2 parents f2d6c15 + ecc50df commit 1a02da1

File tree

1 file changed

+36
-2
lines changed

1 file changed

+36
-2
lines changed

src/mrb_esp32_system.c

Lines changed: 36 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,21 +52,54 @@ 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+
return mrb_fixnum_value(info.model);
60+
}
61+
5462
void
5563
mrb_mruby_esp32_system_gem_init(mrb_state* mrb) {
64+
// ESP32 Ruby module
5665
struct RClass *esp32_module = mrb_define_module(mrb, "ESP32");
5766

67+
// ESP32::System
5868
struct RClass *esp32_system_module = mrb_define_module_under(mrb, esp32_module, "System");
59-
6069
mrb_define_module_function(mrb, esp32_system_module, "delay", mrb_esp32_system_delay, MRB_ARGS_REQ(1));
6170
mrb_define_module_function(mrb, esp32_system_module, "available_memory", mrb_esp32_system_available_memory, MRB_ARGS_NONE());
6271
mrb_define_module_function(mrb, esp32_system_module, "sdk_version", mrb_esp32_system_sdk_version, MRB_ARGS_NONE());
6372
mrb_define_module_function(mrb, esp32_system_module, "restart", mrb_esp32_system_restart, MRB_ARGS_NONE());
6473
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());
6575

76+
// ESP32::Timer
6677
struct RClass *esp32_timer_module = mrb_define_module_under(mrb, esp32_module, "Timer");
67-
6878
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);
69103
}
70104

71105
void

0 commit comments

Comments
 (0)