From 1cc81ed449fe51c787d002e786cd5afe5c632f97 Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
Date: Mon, 11 Apr 2016 01:16:38 +0300
Subject: [PATCH] esp8266/modesp: Add freemem() and meminfo() functions.

They call into vendor SDK functions system_get_free_heap_size() and
system_print_meminfo() respectively.
---
 esp8266/modesp.c       | 13 +++++++++++++
 esp8266/qstrdefsport.h |  2 ++
 2 files changed, 15 insertions(+)

diff --git a/esp8266/modesp.c b/esp8266/modesp.c
index 3a82cc1f2..83d0c4a11 100644
--- a/esp8266/modesp.c
+++ b/esp8266/modesp.c
@@ -617,6 +617,17 @@ STATIC mp_obj_t esp_neopixel_write_(mp_obj_t pin, mp_obj_t buf, mp_obj_t is800k)
 }
 STATIC MP_DEFINE_CONST_FUN_OBJ_3(esp_neopixel_write_obj, esp_neopixel_write_);
 
+STATIC mp_obj_t esp_freemem() {
+    return MP_OBJ_NEW_SMALL_INT(system_get_free_heap_size());
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_0(esp_freemem_obj, esp_freemem);
+
+STATIC mp_obj_t esp_meminfo() {
+    system_print_meminfo();
+    return mp_const_none;
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_0(esp_meminfo_obj, esp_meminfo);
+
 STATIC const mp_map_elem_t esp_module_globals_table[] = {
     { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_esp) },
 
@@ -632,6 +643,8 @@ STATIC const mp_map_elem_t esp_module_globals_table[] = {
     { MP_OBJ_NEW_QSTR(MP_QSTR_getaddrinfo), (mp_obj_t)&esp_getaddrinfo_obj },
     #endif
     { MP_OBJ_NEW_QSTR(MP_QSTR_neopixel_write), (mp_obj_t)&esp_neopixel_write_obj },
+    { MP_OBJ_NEW_QSTR(MP_QSTR_freemem), (mp_obj_t)&esp_freemem_obj },
+    { MP_OBJ_NEW_QSTR(MP_QSTR_meminfo), (mp_obj_t)&esp_meminfo_obj },
 
 #if MODESP_INCLUDE_CONSTANTS
     { MP_OBJ_NEW_QSTR(MP_QSTR_SLEEP_NONE),
diff --git a/esp8266/qstrdefsport.h b/esp8266/qstrdefsport.h
index df9c2fb4f..1819395fa 100644
--- a/esp8266/qstrdefsport.h
+++ b/esp8266/qstrdefsport.h
@@ -69,6 +69,8 @@ Q(flash_read)
 Q(flash_write)
 Q(flash_erase)
 Q(sdk_version)
+Q(freemem)
+Q(meminfo)
 Q(getaddrinfo)
 Q(send)
 Q(sendto)
-- 
GitLab