/*JSON{ "type" : "constructor", "class" : "Number", "name" : "Number", "generate" : "jswrap_number_constructor", "params" : [ ["value","JsVarArray","A single value to be converted to a number"] ], "return" : ["JsVar","A Number object"] } Creates a number */ JsVar *jswrap_number_constructor(JsVar *args) { if (jsvGetArrayLength(args)==0) return jsvNewFromInteger(0); JsVar *val = jsvGetArrayItem(args, 0); JsVar *result = 0; if (jsvIsArray(val)) { JsVarInt l = jsvGetArrayLength(val); if (l==0) result = jsvNewFromInteger(0); else if (l==1) { JsVar *n = jsvGetArrayItem(val, 0); if (jsvIsString(n) && jsvIsEmptyString(n)) result = jsvNewFromInteger(0); else if (!jsvIsBoolean(n)) result=jsvAsNumber(n); jsvUnLock(n); } // else NaN } else if (jsvIsUndefined(val) || jsvIsObject(val)) result = 0; else { if (jsvIsString(val) && jsvIsEmptyString(val)) { result = jsvNewFromInteger(0); } else result = jsvAsNumber(val); } jsvUnLock(val); if (result) return result; return jsvNewFromFloat(NAN); }
/*JSON{ "type" : "staticmethod", "class" : "ESP8266WiFi", "name" : "setAutoConnect", "generate" : "jswrap_ESP8266WiFi_setAutoConnect", "params" : [ ["autoconnect","JsVar","True if we wish to auto connect."] ] }*/ void jswrap_ESP8266WiFi_setAutoConnect( JsVar *autoconnect //!< True if we wish to auto connect. ) { os_printf("Auto connect is: %d\n", (int)autoconnect); // Check that we have been passed a boolean ... if not, nothing to do here. if (!jsvIsBoolean(autoconnect)) { return; } uint8 newValue = jsvGetBool(autoconnect); os_printf("New value: %d\n", newValue); wifi_station_set_auto_connect(newValue); os_printf("Autoconnect changed\n"); }
static bool handlePipe(JsVar *arr, JsvObjectIterator *it, JsVar* pipe) { bool paused = jsvGetBoolAndUnLock(jsvObjectGetChild(pipe,"drainWait",0)); if (paused) return false; JsVar *position = jsvObjectGetChild(pipe,"position",0); JsVar *chunkSize = jsvObjectGetChild(pipe,"chunkSize",0); JsVar *source = jsvObjectGetChild(pipe,"source",0); JsVar *destination = jsvObjectGetChild(pipe,"destination",0); bool dataTransferred = false; if(source && destination && chunkSize && position) { JsVar *readFunc = jspGetNamedField(source, "read", false); JsVar *writeFunc = jspGetNamedField(destination, "write", false); if (jsvIsFunction(readFunc) && jsvIsFunction(writeFunc)) { // do the objects have the necessary methods on them? JsVar *buffer = jspExecuteFunction(readFunc, source, 1, &chunkSize); if(buffer) { JsVarInt bufferSize = jsvGetLength(buffer); if (bufferSize>0) { JsVar *response = jspExecuteFunction(writeFunc, destination, 1, &buffer); if (jsvIsBoolean(response) && jsvGetBool(response)==false) { // If boolean false was returned, wait for drain event (http://nodejs.org/api/stream.html#stream_writable_write_chunk_encoding_callback) jsvUnLock(jsvObjectSetChild(pipe,"drainWait",jsvNewFromBool(true))); } jsvUnLock(response); jsvSetInteger(position, jsvGetInteger(position) + bufferSize); } jsvUnLock(buffer); dataTransferred = true; // so we don't close the pipe if we get an empty string } } else { if(!jsvIsFunction(readFunc)) jsExceptionHere(JSET_ERROR, "Source Stream does not implement the required read(length) method."); if(!jsvIsFunction(writeFunc)) jsExceptionHere(JSET_ERROR, "Destination Stream does not implement the required write(buffer) method."); } jsvUnLock(readFunc); jsvUnLock(writeFunc); } if(!dataTransferred) { // when no more chunks are possible, execute the callback handlePipeClose(arr, it, pipe); } jsvUnLock(source); jsvUnLock(destination); jsvUnLock(chunkSize); jsvUnLock(position); return dataTransferred; }
int jswrap_E_flashFatFS(JsVar* options) { uint32_t addr = FS_FLASH_BASE; uint16_t sectors = FS_SECTOR_COUNT; uint8_t format = 0; if (jsvIsObject(options)) { JsVar *a = jsvObjectGetChild(options, "addr", false); if (a) { if (jsvIsNumeric(a) && jsvGetInteger(a)>0x100000) addr = (uint32_t)jsvGetInteger(a); } JsVar *s = jsvObjectGetChild(options, "sectors", false); if (s) { if (jsvIsNumeric(s) && jsvGetInteger(s)>0) sectors = (uint16_t)jsvGetInteger(s); } JsVar *f = jsvObjectGetChild(options, "format", false); if (f) { if (jsvIsBoolean(f)) format = jsvGetBool(f); } } else if (!jsvIsUndefined(options)) { jsExceptionHere(JSET_TYPEERROR, "'options' must be an object, or undefined"); } uint8_t init=flashFatFsInit(addr, sectors); if (init) { if ( format ) { uint8_t res = f_mount(&jsfsFAT, "", 0); jsDebug("Formatting Flash"); res = f_mkfs("", 1, 0); // Super Floppy format, using all space (not partition table) if (res != FR_OK) { jsExceptionHere(JSET_INTERNALERROR, "Flash Formatting error:",res); return false; } } } jsfsInit(); return true; }