123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- /*
- * This file is part of Espruino, a JavaScript interpreter for Microcontrollers
- *
- * Copyright (C) 2013 Gordon Williams <gw@pur3.co.uk>
- *
- * 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/.
- *
- * ----------------------------------------------------------------------------
- * Interactive Shell implementation
- * ----------------------------------------------------------------------------
- */
- #ifndef JSINTERACTIVE_H_
- #define JSINTERACTIVE_H_
- #include "jsparse.h"
- #include "jshardware.h"
- #define JSI_WATCHES_NAME ">watches"
- #define JSI_TIMERS_NAME ">timers"
- #define JSI_HISTORY_NAME ">history"
- #define JSI_INIT_CODE_NAME ">init"
- #define JSI_ONINIT_NAME "onInit"
- /// autoLoad = do we load the current state if it exists?
- void jsiInit(bool autoLoad);
- void jsiKill();
- void jsiLoop();
- /// Tries to get rid of some memory (by clearing command history). Returns true if it got rid of something, false if it didn't.
- bool jsiFreeMoreMemory();
- bool jsiHasTimers(); // are there timers still left to run?
- JsParse *jsiGetParser();
- /// Queue up callbacks for other things (touchscreen? network?)
- void jsiQueueObjectCallbacks(JsVar *object, const char *callbackName, JsVar *arg0, JsVar *arg1);
- IOEventFlags jsiGetDeviceFromClass(JsVar *deviceClass);
- JsVar *jsiGetClassNameFromDevice(IOEventFlags device);
- /// Change the console to a new location
- void jsiSetConsoleDevice(IOEventFlags device);
- /// Get the device that the console is currently on
- IOEventFlags jsiGetConsoleDevice();
- /// Transmit a byte
- void jsiConsolePrintChar(char data);
- /// Transmit a string
- void jsiConsolePrint(const char *str);
- /// Write the formatted string to the console (see vcbprintf)
- void jsiConsolePrintf(const char *fmt, ...);
- /// Print the contents of a string var - directly
- void jsiConsolePrintStringVar(JsVar *v);
- /// Transmit an integer
- void jsiConsolePrintInt(JsVarInt d);
- /// Transmit a position in the lexer (for reporting errors)
- void jsiConsolePrintPosition(struct JsLex *lex, int tokenPos);
- /// Transmit the current line, along with a marker of where the error was (for reporting errors)
- void jsiConsolePrintTokenLineMarker(struct JsLex *lex, int tokenPos);
- /// Print the contents of a string var to a device - directly
- void jsiTransmitStringVar(IOEventFlags device, JsVar *v);
- /// If the input line was shown in the console, remove it
- void jsiConsoleRemoveInputLine();
- /// Change what is in the inputline into something else (and update the console)
- void jsiReplaceInputLine(JsVar *newLine);
- /// Flags for jsiSetBusy - THESE SHOULD BE 2^N
- typedef enum {
- BUSY_INTERACTIVE = 1,
- BUSY_TRANSMIT = 2,
- // ??? = 4
- } JsiBusyDevice;
- /// Shows a busy indicator, if one is set up
- void jsiSetBusy(JsiBusyDevice device, bool isBusy);
- /// Shows a sleep indicator, if one is set up
- void jsiSetSleep(bool isSleep);
- // for jswrap_interactive/io.c ----------------------------------------------------
- typedef enum {
- TODO_NOTHING = 0,
- TODO_FLASH_SAVE = 1,
- TODO_FLASH_LOAD = 2,
- TODO_RESET = 4,
- } TODOFlags;
- #define USART_CALLBACK_NAME "_callback"
- #define USART_BAUDRATE_NAME "_baudrate"
- #define DEVICE_OPTIONS_NAME "_options"
- extern Pin pinBusyIndicator;
- extern Pin pinSleepIndicator;
- extern bool echo;
- extern bool allowDeepSleep;
- void jsiDumpState();
- void jsiSetTodo(TODOFlags newTodo);
- #define TIMER_MIN_INTERVAL 0.1 // in milliseconds
- extern JsVarRef timerArray; // Linked List of timers to check and run
- extern JsVarRef watchArray; // Linked List of input watches to check and run
- // end for jswrap_interactive/io.c ------------------------------------------------
- #endif /* JSINTERACTIVE_H_ */
|