summaryrefslogtreecommitdiff
path: root/components/external/espruino/src/jswrap_process.c
diff options
context:
space:
mode:
Diffstat (limited to 'components/external/espruino/src/jswrap_process.c')
-rw-r--r--components/external/espruino/src/jswrap_process.c94
1 files changed, 94 insertions, 0 deletions
diff --git a/components/external/espruino/src/jswrap_process.c b/components/external/espruino/src/jswrap_process.c
new file mode 100644
index 0000000000..29ffe713fc
--- /dev/null
+++ b/components/external/espruino/src/jswrap_process.c
@@ -0,0 +1,94 @@
+/*
+ * This file is part of Espruino, a JavaScript interpreter for Microcontrollers
+ *
+ * Copyright (C) 2013 Gordon Williams <[email protected]>
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * ----------------------------------------------------------------------------
+ * This file is designed to be parsed during the build process
+ *
+ * JavaScript 'process' object - for information about the Espruino board
+ * ----------------------------------------------------------------------------
+ */
+#include "jsvar.h"
+#include "jswrap_process.h"
+#include "jsinteractive.h"
+
+/*JSON{ "type":"class",
+ "class" : "process",
+ "description" : "This class contains information about Espruino itself"
+}*/
+
+/*JSON{ "type":"staticproperty",
+ "class" : "process", "name" : "version",
+ "description" : "Returns the version of Espruino as a String",
+ "generate_full" : "jsvNewFromString(JS_VERSION)",
+ "return" : ["JsVar", "The version of Espruino"]
+}*/
+
+/*JSON{ "type":"staticproperty",
+ "class" : "process", "name" : "env",
+ "description" : "Returns an Object containing various pre-defined variables. standard ones are BOARD, VERSION",
+ "generate" : "jswrap_process_env",
+ "return" : ["JsVar", "An object"]
+}*/
+JsVar *jswrap_process_env() {
+ JsVar *obj = jsvNewWithFlags(JSV_OBJECT);
+ jsvUnLock(jsvObjectSetChild(obj, "VERSION", jsvNewFromString(JS_VERSION)));
+ jsvUnLock(jsvObjectSetChild(obj, "BUILD_DATE", jsvNewFromString(__DATE__)));
+ jsvUnLock(jsvObjectSetChild(obj, "BUILD_TIME", jsvNewFromString(__TIME__)));
+ jsvUnLock(jsvObjectSetChild(obj, "BOARD", jsvNewFromString(PC_BOARD_ID)));
+ jsvUnLock(jsvObjectSetChild(obj, "CHIP", jsvNewFromString(PC_BOARD_CHIP)));
+ jsvUnLock(jsvObjectSetChild(obj, "CHIP_FAMILY", jsvNewFromString(PC_BOARD_CHIP_FAMILY)));
+ jsvUnLock(jsvObjectSetChild(obj, "FLASH", jsvNewFromInteger(FLASH_TOTAL)));
+ jsvUnLock(jsvObjectSetChild(obj, "RAM", jsvNewFromInteger(RAM_TOTAL)));
+
+ return obj;
+}
+
+
+/*JSON{ "type":"staticmethod",
+ "class" : "process", "name" : "memory",
+ "description" : ["Run a Garbage Collection pass, and return an object containing information on memory usage.",
+ "free : Memory that is available to be used",
+ "usage : Memory that has been used",
+ "total : Total memory",
+ "history : Memory used for command history - that is freed if memory is low. Note that this is INCLUDED in the figure for 'free'.",
+ "On ARM, stackEndAddress is the address (that can be used with peek/poke/etc) of the END of the stack. The stack grows down, so unless you do a lot of recursion, the bytes above this can be used."],
+ "generate" : "jswrap_process_memory",
+ "return" : ["JsVar", "Information about memory usage"]
+}*/
+#ifdef ARM
+extern int _end; // end of ram used (variables)
+extern int _etext; // end of flash text (binary) section
+#endif
+JsVar *jswrap_process_memory() {
+ jsvGarbageCollect();
+ JsVar *obj = jsvNewWithFlags(JSV_OBJECT);
+ if (obj) {
+ unsigned int history = 0;
+ JsVar *historyVar = jsvObjectGetChild(jsiGetParser()->root, JSI_HISTORY_NAME, 0);
+ if (historyVar) {
+ history = (unsigned int)jsvCountJsVarsUsed(historyVar); // vars used to store history
+ jsvUnLock(historyVar);
+ }
+ unsigned int usage = jsvGetMemoryUsage() - history;
+ unsigned int total = jsvGetMemoryTotal();
+ jsvUnLock(jsvObjectSetChild(obj, "free", jsvNewFromInteger(total-usage)));
+ jsvUnLock(jsvObjectSetChild(obj, "usage", jsvNewFromInteger(usage)));
+ jsvUnLock(jsvObjectSetChild(obj, "total", jsvNewFromInteger(total)));
+ jsvUnLock(jsvObjectSetChild(obj, "history", jsvNewFromInteger(history)));
+
+#ifdef ARM
+ jsvUnLock(jsvObjectSetChild(obj, "stackEndAddress", jsvNewFromInteger((JsVarInt)(unsigned int)&_end)));
+ jsvUnLock(jsvObjectSetChild(obj, "flash_start", jsvNewFromInteger((JsVarInt)FLASH_START)));
+ jsvUnLock(jsvObjectSetChild(obj, "flash_binary_end", jsvNewFromInteger((JsVarInt)(unsigned int)&_etext)));
+ jsvUnLock(jsvObjectSetChild(obj, "flash_code_start", jsvNewFromInteger((JsVarInt)FLASH_SAVED_CODE_START)));
+ jsvUnLock(jsvObjectSetChild(obj, "flash_length", jsvNewFromInteger((JsVarInt)FLASH_TOTAL)));
+#endif
+ }
+ return obj;
+}