Espruino/ChangeLog
2014-07-10 10:59:32 +01:00

935 lines
57 KiB
Plaintext

1v67 : Lower size of timer task array of devices with little RAM (fix #401)
Move hidden lists out of the root scope (fix #357)
Fixed exception catching
Fix Serial1 initialisation after 'reset()'
Fix parsing of try..catch when a serious error (not an exception) occurred
Stop the utility timer queue filling with WAKEUP tasks if Espruino gets woken up early
Add ability to specify default Serial TX and RX pins in BOARD.py
Reduce how many digits of floating point values are normally displayed
Fixed PWM output on B4 + B5
Fix regression when using pins as array indices
Remove negation for CHxN outputs - it seems they don't negate after all. Fixes PWM polarity on A7,B1,B13,B14,B15
Add pullup to USART RX. Reduces wakeups and random characters on Serial1.
Add error flags and E.getErrorFlags to report possible issues like buffer overflows and low memory (fix #136)
I2C timeouts now throw exceptions (fix #403)
Fix String.prototype.split with non-string args
Add fake digital pins D0..D7 under linux (helps with testing)
Rewrite ff_wtoupper and save 650 bytes \o/ (fix #185)
1v66 : Ensure that analogWrite(pin,1) works on negated outputs
Allow multiple Waveform playback on one pin (+ wave fixes)
Improve dump() for objects and Serial.on('data') (part of #397)
Fix Date.getSeconds,Milliseconds, and documentation on getMonth (#399)
Fix memory leak on Serial receive
Fix all Serial receive characters being 0 if no bytesize is specified
1v65 : SPI.send/I2C.write/Serial.write can now take variable number of arguments (fix #370)
Don't check for token matches where we already know what it should be (fix #280)
Improve file read speed for large reads
Waveform stability improvements
Fix Float32Array.set (and improve speed for non-float arrays)
OneWire library now uses hex strings for addresses rather than 64 bit ints
Fix issue with uninitialised function arguments (fix #391)
Fix parseURL for numeric keys in query string (fix #388)
When running JS files under Linux, do two parses to ensure that Functions are 'hoisted'
Add Object.create()
Add Function constructor
Add Object.getOwnPropertyDescriptor (although it won't return spec-compliant values)
Add some Stubs for inbuilt Date and Error classes
Added throw and try..catch..finally (see #40)
Fixed overriding of builtins with other Builtins
Added Date.valueOf
Stop warning about break at the end of 'default' in switch statement
Switch to 32 bit ints (fix #324)
Added Array.prototype.reverse, and also for ArrayBuffers (fix #389)
Swap JsVar fields around so everything is aligned on the correct boundaries
Merge jsvNewWithFlags and jsvNew - making variable allocation a bit faster
Fix changeInterval regression after int32 changes
Remove JSV_NAME flag - paving the way for more efficient variable storage
Store only 32 bit time for events (work out full 64 bits in event loop)
Increase event buffer size to 128 (from 64)
Enabled Graphics + CC3k support in the F3Discovery
Make `Serial.onData` call back with >1 char (#383)
Move `Serial.onData(...)` to `Serial.on('data',...)`
Add Serial.read/available/pipe (fix #383)
Add HTTP client/server read/available/pipe
Add documentation for events (and tidy it up for constructors)
Stop HTTP server closing before all data has been read
Fixed parsing of multiple shifts
setWatch now reports the pin back (fix #275)
Fixed memory leak in g.getPixel with arraybuffers
Fixed memory leak in "".indexOf(".")
Fixed ArrayBuffer Graphics where width*height*bpp&7!=0
Converted parse errors to throw exceptions
Added Date.parse and Date.toString
Fix parsing of integers that are too big to fit in an int32 (they're stored as doubles)
Fix Linux Espruino when no tty is present
Shave a few bytes off size of jsiDumpState using printf
url.parse now unescapes the query string (fix #227)
1v64 : Fix 'a=[2,3,4];delete a[1];'
Make sure parseInt("0x01",16)==1 and parseInt("0x01")==1 but parseInt("0b01",16)==0
Fix equality check used in switch, so false !== 0
Improve Math.pow accuracy for small integer powers (fix #374)
Make Ctrl-C only interrupt code if it has been running for too long (fix Ctrl-C -> CC3000 restart issues)
Removed duplication in symbol lookup (fix #372, fix #323, fix #343)
Fix JSON.stringify with circular references (fix #378)
Fix String.indexOf when search string is bigger than the string being searched (fix #377)
Add String.prototype.slice() (fix #376)
Changed to more compact binary search symbol table (fix #278)
hasOwnProperty now doesn't check prototypes #24
Added Object.getOwnPropertyNames (fix #79, fix #158)
Move 'constructor' into the correct place, be more aware of builtins in prototypes (helps #380)
Handle __proto__ on builtin object types (eg. [].__proto__) (fix #381)
Remove indirection of __proto__ (fix #102)
Properly fix Object.getOwnPropertyNames (fix #380)
Remove jsvFindChild*Ref (fix #375)
Added LoopbackA/LoopbackB serial ports (fix #61)
Fix slowdown when lexing long strings
Remove Lock/UnLock in jslGetNextCh - should speed it up
fs.appendFile() now works even if the file doesn't exist (fix #385)
Support unicode escape sequence (\uXXXX) but crop to 8 bits (fix #386)
Stop setInterval/etc increasing index numbers (fix #382)
Clear existing digitalWrites on reset() (fix #231)
Stop setWatch getting invalid data on load/save/reset (fix #254)
1v63 : Memory leak when defining functions (fix #359)
Fix Instance properties overwrite prototype (fix #360)
Fix `edit(functionName)` without quotes (fix #356)
Fix 'Uint32Array is not unsigned' (fix #330)
Ensure Object.keys([9,,undefined,9])==[0,2,3] (partial #349)
Store array length in the array root node rather than the last element (fix #351 #361)
Object.keys on array now returns strings (fix #348)
Remove jsvArrayGetLast (fix #363)
Fix issue parsing `function() { return }`
Stop jspNewObject creating a new object name if one already exists
startup_stm32f10x_hd.s now explicitly sets the stack pointer. Allows Espruino images to use more RAM
Add BusFault hander, to allow peek and poke to unmapped addresses without HardFaulting the ARM
Fix edit(...) so that functions themselves (not just the variable) are updated (fix #366)
Crop lines in errors when > 60 chars (fix #364)
Improve when stack traces happen for error reporting
Better error messages, and more efficient handler
Improving Util Timer rescheduling to try and avoid 64 bit divisions
Fix a lot of WIZnet W5500 issues (thanks @mgg1010!)
Add E.reverseByte
Add HIGH and LOW (fix #371)
Improve docs for SPI/I2C/Serial.setup
Force reconnect on CC3000 disconnect (fix #373)
Added cephdon's streaming file API (fix #12)
More WIZnet W5500 stability fixes - try and ensure that HTTP server never goes down
Fix HTTP client Host header when accessing ports!=80
1v62 : Added ArrayBufferView functions as per ES6 spec (fix #310)
Added Graphics.setRotation (fix #321)
Added Graphics.drawImage (fix #198)
Added E.toArrayBuffer for fast string->array conversion
Accessing an undefined array/object element now doesn't create it (fix #63)
Fix fs.unlink returns true if the file does not exist (fix #331)
Try and improve timer overlays by reordering the alternate function list
Ensure that PWM output doesn't enable negated/non-negated outputs when it doesn't have to
Improve console performance when sending long strings
Initialise Graphics flags Graphics.createCallback - could have caused all kinds of issues
Now make setInterval > 5s less accurate when setDeepSleep is on (saves ~0.5 sec of non-sleep time)
Fixed problem when accessing an array with a string in a variable
Fix issues with `"0" in {0:1}` (and hasOwnProperty)
Improved interpolate function, and moved it out of ArrayBufferView into E
Fix Problem with Object.keys on a string (fix #347)
Fix assert fail when deleting a property that doesn't exist (fix #344)
Ensure that dump remembers function names if they were in the root scope (fix #338)
Fix memory leak in fs.readdir
Ensure that abbreviations in console's '=...' output appear on newline if needed
Add String.replace (fix #334)
Make Graphics.drawImage draw bottom line of pixels (fix #329)
Add Array.shift/unshift (fix #342)
Fix Defining function after return causes error (fix #326)
Fix deleting the last element in array (fix #346)
More helpful I2C error messages (fix #10)
Fix overriding built-in functions (fix #202)
Add ES6 Array.prototype.fill (fix #317)
Modified jsiQueueObjectCallbacks (and Object.emit) to support >2 args
Added support for SPI LSB-first
WIZnet improvements (specifically on HTTP server)
Added WLAN.setIP for CC3000
Fix String.split issue with last element (fix #352)
Remove order warning for SPI if no order given (fix #353)
process.env will now contain the git commit
Move setInterval/Timeout implementations into jswrap_interactive (makes more sense)
Add setWatch warning if it's not possible (fix #337)
1v61 : Fix toString crash for large numbers
Support floating-point literals without a leading 0 - eg '.5' (fix #296)
Fix array access with booleans (fix #290)
Fix "==" issues where only one argument is an array (fix #283)
Make Array.join ignore null values (fix #289)
Callback graphics now works even without a fillRect implementation (fix #295)
ArrayBuffer Graphics now supports 2 and 4 bits as well as 1,8,16,24,32 (fix #301)
Allowed array.splice to as many arguments as needed
Make Array.sort() use string compare by default (fix #291, fix #292)
Allow [,] and [1,2,,4] - (fix #287)
Stop JSON.stringify using 'undefined' (fix #286)
function.call can now have more than 4 arguments
Rewrite native function caller (fix #277)
Fix conversion of floats to booleans (fix #307)
Fix parseInt of NaN/Infinity (fix #309)
Add extra escape codes in strings (fix #304)
Ensure String.charAt returns empty string for out of range (fix #305)
Make REPL faster when receiving large amounts of data (fix #303)
Improved jspeFunctionCall speed, added Named functions (fix #77)
Allow Array.map.forEach to be applied to Strings and ArrayBuffers (for #310)
Tweaks to make more Array functions work on non-arrays
Added Array.reduce
Allow commas in expressions at end of for loop - `for (;;i++,j++)`
Fix SPI send with a single number
1v60 : Fix unary plug on variable not working (fix #268)
Added DNS with eth.setIP() for W5500
Fix lock 'leak' when creating Graphics with callbacks
Small fixes for trigger/timer
Make dump() + console aware of built-in SPI/I2C/etc
Add Pin constructor for converting numbers into a pin object
Added getPinMode
Fixed I2C saving state (fix #270)
Add JTAG to ignore list for some boards
Fix LCD FSMC formatting and report if LCD is unknown
You can now reference built-in functions. eg. [1,2,3].map(Math.sqrt)
Add Object.valueOf - help with #187
Add Object.hasOwnProperty (although it does have some false positives) - #24
Add software SPI - fix #41
Fix issue when constructing an ArrayBuffer with a floating point length
Fix Math.round regression and add checks to ensure it can't happen again
Fix DEVICE_IS_XXX defines (fix SW SPI regression)
Fix hardware SPI regression (getting out of sync after ArrayBuffer write)
Removed non-standard Integer.valueOf - use "A".charCodeAt(0)
Fix non-standard ArrayBuffer behaviour when constructing an ArrayBuffer from an ArrayBufferView
Fix `1 in [2,3,4]` behaviour - it searches keys, not values
Make parseInt(..., >36) return NaN
Make Number.toString() use lowercase chars for hex
Fix issues with NaN, negative zero, and Math.round
Fix equality checks with null
Fix comparison of integers with empty string/whitespace+number
Added nativeCall, which allows C/Assembler to be called from JavaScript
Fix custom font memory leak
1v59 : (function(){})?1:0 should == 1 (fix #261)
Fix Math.pow (Fix #260)
Fix String.split() (Fix #259)
Added Array.concat (Fix #262)
Increase RTC/getTime reliability by ensuring overflow can't happen
Added Math.min/max
Allow jswrapper to wrap objects with a name >8 characters long (fix #264)
dump() now doesn't print 'var X = undefined;' - just 'var X;'
1v58 : Fix Serial.parity
Fix glitches in jshGetSystemTime
Added Graphics.setFontCustom for custom fonts
Added String.lastIndexOf, and made String.indexOf with fromIndex work
Used non-bold vector font, improve alignment, and make curves lower quality
I2C can now write any size (as long as it fits on the stack!)
Try and enlarge fillRects caused by polygons
Fix === issues, fix #257
Add Graphics.getColor/getBgColor for Juergen
Added E.convolve for doing fast calculations with Waveforms
Allow String.fromCharCode with multiple arguments
Add builtin_modules to board's JSON
Added E.FFT for Fast Fourier Transforms
Added 16 bit read/write to Waveform (and speed up utility timer)
Fix utility timer - now interrupts just in time
1v57 : Tweak IRQ priorities to try and make SPI RX more reliable
Make http default to port 80 if no port is specified in options
Try and stop issue with System Time suddenly jumping forwards
Fix assert fail when clearing and adding timeouts from within a timeout
Fix modulo (actually remainder) operator for floating point values :/
1v56 : Added atob and btoa (for base64 encode/decode) - fix #244
Added Array.sort() - fix #220
fs.writeFile/appendFile now return false if they fail for some reason
Move Graphics init and idle functions out of jsinterface.c
Add HttpServer.close
Ensure that Linux command-line tests keep running if there's something to do
Epic networking refactor - it should now be possible to support multiple network devices in a single binary
Now only remove the interval/timeout/watch that's causing the error - not every one
Change names of functions in callback-based Graphics so they don't conflict with the real ones
More CC300 reliability - now range check the return value from send+recv, because if there's a timeout it can be wrong
Fix memory leak in setWatch with debounce
Fix 'repeat:false' in debounced setWatch
Make sure 'repeat:false' disables the hardware watch
Initialise RTC roughly 1 sec after reset, and use external 32kHz oscillator if it exists
Added E.enableWatchdog (fix #252)
Fix negative start value for String.substr()
Fix problem where the RTC's full 32 bits weren't combined properly
1v55 : Add String.toUpperCase/LowerCase
Fix E.getAnalogVRef() regression
Add Math.tan()
Ensure Double/Integer have Number as a prototype (fixes: Number.prototype.n=function();(5.0).n() )
||/&& now doesn't use booleans (fix #251)
More resilient parseInt behaviour
Allow data listener for HTTP POST (fix #226)
Stop JSON.parse using eval (fix #249, fix #208)
`.toString` is now called when a String is needed from an Object (fix #57)
Fixed reference count error when looking for functions in an Object's prototype
Fix issues with Numbers as Strings in maths (eg. '-5'|0)
Make sure NaN|0 == 0 (and not some huge number)
Ensure that [1.23]*1.0 == 1.23 (fix #91)
Don't pull in cos (use sin(x+PI/2))
Try and save flash memory on Olimexino board
1v54 : Add 4x6 font (instead of 8x8)
Fix occasional instability with Waveform read/write
Refactor JSON to improve speed and code size (using cbprintf)
Now print special 'short' JSON for console.log (and the REPL) (fix #47)
JSON.stringify now doesn't print functions (fix #207)
Refectoring jsparse.c to name functions after their JS Grammar names
IF statement now accepts commas
Ensure that undefined+0 == NaN (only worked for floats previously)
Fix assert fail (issue unlocking when executing built-in functions)
Fix setInterval regression in dump (and tidy up code)
FS lib now resets when issuing the reset() command (fix #200)
1v53 : Attempt to deal with the case where CC3000 crashes on initialization
Fix regression with setInterval/timeout and saving
Fix issue with saving Serial baud rates
Added ArrayBuffer.set
Use jswrapper.c for executing idle/init/kill events for libraries (cleans up jsinteractive.c)
Added beta 'Waveform' API to allow simple audio output
Improved non-deep-sleep power draw by allowing Espruino to wake itself on the Utility timer (rather than SysTick)
Allowed Waveform API to output on both DAC and PWM
Improve auto-generated documentation
Speed up ArrayBuffer.set and allow Strings to be used properly
Fix jsvArrayJoin if memory runs out
Added E.sum and E.variance array operations
Added Waveform Analog Input
1v52 : Fix memory leak in Array.slice
Fix broken Serial initialisation (partial fix for #241)
Add fs.unlink (for deleting files)
Fix url parsing when there are two slashes
Fix recent changeInterval regression
Making CC3000 recover properly in the case of repeated HTTP GET
Add alternate function remapping for Serial and improve Serial.setup error reporting, fix #241
Added preliminary WIZnet W5500 support (see http://www.espruino.com/WIZnet)
Alt Enter (27 + 10) now always inserts a newline: (eg. for `if (X) \n Y`)
Fix digitalPulse with not a number
Make digitalPulse(... 0) wait until the last pulse is complete
Stop Espruino sending out so many carriage return characters (fix #243)
Added 'delete' keyword (fix #39)
1v51 : Added debounce to setWatch (fix #14)
Tidy up timeout/watch code and now store an integer for interval
Fix crash in url.parse (string free)
Fix Modules.addCached bug which means that Modules.removeAllModules created a memory leak
Fix regression introducted by fix for #199
Added 'Esc,[,2,K' escape sequence for clearing lines. Much safer than Ctrl+C which tends to break out of execution.
Fix bootloader (broken by LTO in 1v49)
Added Number.toFixed
Make number.toString(base) work for floating point (fix #232)
Fix Linux jshSleep so that timeouts are handled at <10ms if required (fixes test056)
Now use jshardware's SPI for SD filesystems - more multiplatform
Now ref thisVar, which stops it being repurposed into a Name for array accesses (fix #233)
Fix Linux halting when there is one long timeout but no other activity
fs.readFile returns 'undefined' if file is not found. Also make readdir return undefined on failure (fix #229)
Remove disk_timerproc in SD card implementation
Upgrade fatfs to R0.10a
Tweak jsinteractive.c to help reduce code size
Finally added Long filename support for FatFS (fix #78)
Epic refactor to remove JsParse (fix #17)
Implement faster Graphics ArrayBuffer fill (affects vector fonts + clear)
Stop repeated analogWrite with messing up PWM waveform (fix #56)
Swap open and close brackets in bitmap font (fix #191)
Graphics arraybuffer/callback now accepts 16bpp
Added ability to specify a JS function for Graphics fillRect
Graphics setPixel(x,y,undefined) to use foreground colour (fix #215)
Make sure that interruptions are handled better while drawing to graphics
Make sure that stack overflow errors are handled more tidily (and increase limit for warning)
Increase available stack on Espruino Board
Stop FatFS using insane amounts of RAM
High res timer (now to 1/2^23) using SysTick with RTC as a base (fix #168)
Added 'Infinity' constant
Fixed type equality check between int and float (should treat them as the same)
Fix parsing of '018' - it's not Octal after all (but 017 is)
More accurate values for PI and E
Fix charCodeAt being signed (should be unsigned)
When casting Strings to booleans, so s.length!=0
Guess initial values for average SysTick time - means that getTime is more accurate for the first 1-2 seconds after startup
setWatch now reports lastTime - time of last state change #238
analogWrite now respects pinMode (fix #234)
Add Open Drain support to pinMode (fix #225)
Fix calling Number([value]) always returns undefined (fix #186)
When disconnected from the net, make sure we free all HTTP clients/servers
Completely remove IRQs from CC3k code
Speed up CC3k code, try and make it automatically power cycle it on timeouts
Fix SPI MISO on F4 board
Move CC3000 to SPI3 (same pins) so SPI1 can be used for other things
Compile CC3000 support in for the F4 (untested)
Process.env now reports board serial # and current console device (se we can throttle for Bluetooth) (fix #219)
General bugfixing for low memory situations
Make string free non-recursive
Fix issue where fs.readFile of a big file would cause Espruino to crash
Fix memory test harness
1v50 : Fix broken Web IDE caused by change to printing JSON for console.log (part of #206)
Fix bug when trying to stringify {5:5}
Allow {1:2} to be parsed (fix #199)
Added SPI RX IRQ. Caved in and used a few bytes for buffers, made SPI significantly more reliable
1v49 : Change compiler flags to allow link-time optimisation
Increase buffer sizes on Linux
Increase buffer sizes on boards with >= 20kB RAM
Made Startup banner smaller
Less printing when loading from flash
Don't display startup banner if loading from flash (an easy way to fix #213)
Fix HTTP response code of 0 (fix #212)
Add timeouts to TI's CC3000 driver
Add timeouts for SPI, and other timeouts now interrupt execution
Lower USB interrupt priority, remove pesky PriorityGroupConfig that was breaking other IRQ priorities
Until we sort out SPI RX and IRQs, lower default SPI baud rate to stop timeouts
console.log and print output JSON now (part of #206)
Added handling of query in url.parse - still not fully compatible though (fix #205)
1v48 : Fix issue where the size of command history is being reported wrong and so process.memory().free is reported wrong too
We now loop without a seek to position inside the string (much faster if loop is not near the start of a fn) (fix #53)
Faster string iteration which doesn't involve incrementing it->index
Swapped to jumptable to lexer (should be a bit faster)
Added the 'E' class, with getAnalogVRef and getTemperature (fix #60)
Deprecated Math.clip (not in spec) and introduced E.clip
Fixed bug in common.py that meant that ifndefs in JSON were sometimes not obeyed (better mem usage on small chips)
Fix deep sleep breaking ADCs
1v47 : Fix issue with dump() and input_pullup not being quoted
Fix regression that broke OneWire in Espruino Board (#197)
Fix clock speed issue on SPI1 (https://github.com/espruino/EspruinoDocs/issues/18)
Don't interrupt on USB ESOF or ERR - allows 'normal' sleep without interrupting every 1ms (fix #195)
Remove pointless KickStarter line printed on startup
Added bootloader hack to Python bootloader
1v46 : Fix parseFloat("") not returning NaN, and parseFloat(" \t 5 £$%^&(*$") returning NaN
Added isNaN() function (fix #184)
Fix parse order for 'typeof' (fix #172)
Added Number object (fix #165)
Bounded ftoa (stops crash when printing Number.MAX_VALUE) - helps with #185
Added Array.isArray() (fix #160)
Add do...while (fix #151)
Stop Espruino board from crashing if you try to create a web server without a connected CC3k (fix #182)
Remove Array.contains as it's not in the spec (use indexOf instead if you need it) (fix #161)
Fix nasty bug where adding/removing intervals/timeouts while in one could cause issues
Fix bug when printing 1.999999999 and similar (fix #190)
Remove need for pow for exponentiation. Not great but it fixes some tests that failed on FP inaccuracies
Change polarity of setSleepIndicator (fix #194)
Allow array.push with multiple arguments (fix #189)
Speed up array access by searching from the end backwards if we think the number is in the last half (fix #46)
1v45 : Fix parseFloat("foo") not returning NaN (and assert) - fix #149
Remove Integer.parseInt
Fix parseInt("bar") - fix #150
Ensure that maths ops with null do treat it as 0 rather than a string - fix #156
Fix digitalPulse length (properly!) - fix #154
Making sure that undefined gets cast to NaN
Fix Array.indexOf() returns undefined instead of -1 - fix #155
Moved memory() to process.memory() - added more info too
Try and improve handling of PWM timer speeds
Fixed varying SPI baud rates depending on device
Makefile changes for OSX compile
1v44 : Modified build system to store binary names in the python definition
Fix nasty regression involving losing code at the end of Strings
Fix segfault when pinMode is called on an invalid pin
Now disable interrupts during 4 bit SPI send - it's just too much otherwise
Detect unfinished block comments in console (fix #138)
Fix flash write on most 10XxB boards
Fix PWM output on all STM32 boards
General hardware tidy in prep for more intelligent device management
Run initialisation code before setWatch, to make sure pullup/down is set beforehand
Change 'Pin' datatype to be an unsigned char - makes tests easier
Now use the hardware RTC for keeping system time. Allows proper deep sleep on Espruino board
FINALLY - fix the USB VCP lost characters issue (#94)
1v43 : Added 'Modules' object with support for adding/removing cached modules
Allow product ID to be changed via Makefile
Fix documentation (and old-fashined Parsing style) for JSON
build_jswrapper now outputs errors to stderr (more compatible with default (silent) build process)
Fix issue when parsing quotes in strings
Added void operator for closure minification compatibility
Ensure that return takes the comma operator
Fix issue where printing Infinity would crash Espruino (fix #129)
Finally some working (extremely beta) cc3000 code
Added jsvObjectGet/SetChild to simplify some wrappers
'http' now uses JsVars for storage (so is suitable for non-linux devices)
Turned 'http' into a library
Added process.version and process.env (fix #131)
Changed handling of 2nd arg of << so that precedence is correct
Fixed handling of 'for (;;)'
Fix lock leak in Module handling
Update ST's library for the STM32F1
Update ST's VCP implementation
Added prefix operator (fix #130)
Allow espruino for linux to be run with '#!' in scripts
Fix indexOf on final element of strings (fix #133)
Remove JSV_PARENTINFO, as it turns out JS doesn't keep track of function scopes anyway (fix #109)
Make 'this' a keyword (now faster, more memory efficient)
Make 'Hardware' (root) the default value of 'this'
Add jsvArrayPushAndUnLock and modified code to use it (fix #135)
Now remember I2C state (partial fix for #13)
Replace 'pow' function with a smaller version - save ~2kb
Shaved another 1200 bytes off jslTokenAsString
Now store Pin state (fix for #13 on F1 parts, F4 still looks broken)
Added Graphics.stringWidth
Added internal Printf function
Misc speed and code size improvements
This version has gone to Seeed for use on the KickStarter boards
1v42 : [ebirger] allowing 'new' with no brackets
Allow built-in functions with variable numbers of arguments (fix #83)
Implement 'String' constructor in the normal way (fix #110)
Fix regression with parsing constructors while not executing
Allow multiple arguments to print and console.log (fix #92)
Make 'arguments' array available in functions (fix #100)
Fix an assert fail, and handle some potential memory leaks
Don't show __proto__ and constructor with for..in, keys(), or JSON.stringify
Make 'trace()' output more readable debug data for complex structures
Fix memory leak whe parsing functions iwht variable numbers of arguments - fix #115
Defined NaN
Stop 'new undefined()' crashing Espruino - fix #120
Get A13/A14 working on Espruino board (these were JTAG)
Get bootloader size direct from Python (remove hard-coding)
Fix '~' operator when acting on variables
Made bootloader a bit more error tolerate (CRC on write)
Added %=, /=, and *= operators (fix #121)
Allowed Object.toString() to take a radix argument for integers (fix #125)
Fix error message issue - broken strncat (fix #124)
Add comma operator (fix #122)
Added some basic code for STM32F429IDISCOVERY - not currently working though
This version is the one sent off on the Test Harness (so will probably appear on boards)
1v41 : Fix Olimexino compile (https://github.com/espruino/Espruino/issues/6)
[ebirger] Member constructors (eg. new a.b() )
[ebirger] Ensuring integers with radix specifiers can still be parsed if a radix is specified
Fix for tests/test_json_arraybuffer_001.js - iteration of arraybuffers of length==1
Add Object.keys(...)
More arraybuffer iteration fixes
On linux, use built-in stringToFloat to aid debugging. Handle exponentials, fix #31
'make serialflash' is now works correctly for Espruino Boards with bootloader
setWatch(..A0);setWatch(..A0);clearWatch(1) does not now kill the other watch, fix #25
One-based setTimeout/setWatch, fix #3
Added Function.call and Function.apply, fix #54
'http' and 'fs' are now libraries that need to be 'require'd, fix #8
Updated pin info for STM32F103xC/D/E chips, fix #84
Fixed linker script for STM32F4 (discovery board now works)
Object prototypes are now Objects, fix #101
Board docs now specify '3.3v' only pins fix #104
Add Array.forEach
Fix searching down >1 prototype to find functions (one more issue posted in #99)
Fix "12345"/5 type issues (fix #90)
'Consting' some string functions
Fixing arrays with string indices that are actually numbers \o/ (fix #19)
Released onto website
1v40 : Ensure that LCD.prototype.setPixel = function actually works
Refactor LCD driver code to allow lcdInit (and start of making it non-platform-specific)
Built 'LCD' support into linux/raspi/carambola
Add initial SPI.send(ArrayBuffer) support - even if NO VALUES RETURNED
Start of built-in Nokia 5110 LCD support
Remove GPIO clock removal on sleep for now (it kills setWatch)
Fix (sub)ArrayBuffer problems (test100.js)
Added setDeepSleep - still beta put power consumption drops to 1mA
Fix broken name for httpCRq.write
Changed LCD to Graphics - added ability to render to ArrayBuffer
Fix 8 char built-in class names
Adding preliminary Sony SmartWatch support
Adding preliminary support for completely bare 36 pin chip
Fixing pin defs for Espruino board rev 1v1
Added proper SDL/ArrayBuffer and JS Callback graphics support
Added "ifdef" ability in build_jswrapper
Take JSVAR_CACHE_SIZE out of jsutils and put it in the board config file
Added JSV_PARENTINFO which will allow us to do things like setTimeout(foo.bar,10)
Fixed arrays in non-executes streams - 'if (0) print([1,2,3]);'
Added 'require' function loading modules from node_modules on SD card
Added module cache to stop modules being re-loaded
Renamed internal vars to start with '>' - much easier to distinguish for 'dump'/etc
Only use parentInfo on functions
Load all tests in test dir - don't do them by number
Added 'zigzag' ordering for ArrayBuffer Graphics
Added 'vertical_byte' ordering for ArrayBuffer Graphics
toJSON now ignores 'hidden' object elements
Special-case jsvArrayBufferIteratorSetIntegerValue
Make SPI output an ArrayBuffer
Use best out of 3 for DelayMicroseconds calibration - something seems flaky right after bootup
Lines now drawn from p1 to p2 inclusive
Events now use jshPushIOWatchEvent (should cut down on code) also fixed bug with watching pin #11
Now remember if pinMode was set or not
Transform ```code``` in JSON into a code tag in the documentation
Graphics now supports FSMC for HY boards again
Drawing vector fonts is now roughly the right size and position (still not 100%)
Remove registration code
Adding MPL licence
Remove Arduino bit manipulation functions - nobody seems to use them anyway
# of flash pages/etc now comes from board info
[ebirger] Supply the correct arguments to Array.map
[ebirger] Method calls and membership evaluation should be done on all factors (ee. [1,2,3].foo())
[ebirger] When running multiple tests, only set up terminal once or it breaks the terminal window on exit
Added STM32-style USB CDC bootloader for Espruino Boards
Added scripts/create_espruino_image.sh to package up bootloader and espruino into one binary
SHIPPED on Impatient developer boards
1v39 : Added Bitwise NOT operator
Added Raspberry Pi version to ZIP (with HTTP support)
Fixed load/save on Linux Devices
Added pinMode function (to allow pull-ups/pull-downs to be turned on)
SPI.send4bit/send8bit will now not mess up the final element
changeInterval now clears up stored up callbacks (eg, setInterval(.., 0.01)...wait...changeInterval(...,20)
Ctrl-C no longer prints anything, which avoids lockups
No longer print "Execution Interrupted" if nothing was interrupted!
Added >>>= >>= and <<=
When entering text interactively, ensure that there are no trailing spaces
1v38 : Tweaks for Arduino IDE compile
Removed '(char #)' from stack trace, as a bit pointless now
Added better reporting of execution location when Ctrl-C pressed
Urgent fix for non-working Olimexino since 1v33
Fix string comparison when strings contain "\0"
Added LED1/2/OSC/SD/etc to Olimexino Board docs
1v37 : Urgent fix - power saving code made it difficult to re-flash Espruino (now only apply this to Espruino Board)
1v36 : Fix documentation for Array.pop()
Added some much better board documentation
Fixed DAC output on F3
Fixed DAC output on devices where PWM is also available and the alternate function is less than the DAC's
1v35 : Attempt to reduce power consumption when sleeping by turning off GPIO, and setting GPIOs to AIN on reset
Fix F3 issue where ADC/DAC weren't picked up properly
Tidy up register text and add KickStarter mention
var a = {}; a[LED1]=0; - not converted to String
JSON (and hence dump()) now dumps ArrayBuffer correctly
1v34 : Faster jshFromDeviceString
Preliminary support for flow control on Serial receive
Speed improvements by removing jsvGetRef from jsvUnLock
fast 4 byte pre-check in jsvFindChildFromString
Skip lock/unlock in FindChildFromString to help increase speed
When we unplug USB, only go to the default console device IF that is the device we're currently on
Support for custom Espruino board
Added ArrayBufferView.interpolate
16 bit SPI send for send4bit/sevrnd8bit (better reliability on low-end chips)
Fix JSON dump of typed array
Added Math.clip(x, min, max)
When saving on flash, don't do jslTokenAsString properly
B3/B4 move from alternate fn
Fix incorrect reporting of analog pins
Fix I2C.readFrom on STM32F1/4
Make 1/2 == 0.5 (was being sensible before, but now follow JS spec)
Ctrl-C while in timer fn clears timers (but not outside it)
Fixed broken clearInterval from within setInterval
Hopefully fixed issue on SSD1289 LCD controller
Trigger wheel handler to use interrupts
2D arraybuffer interpolation
Added Math.wrap, fixed a lot of trigger issues
Fixed SysTick priority/preempt problems
Slowed the SysTick timer back down for everything
Fix Int8Array signedness on F4 boards
Refactored source code tree
1v33 : fix character encoding issue of "\16"+"1" != "\161"
Refactoring of ArrayBuffer into iterator, and addition of a general purpose iterator
Fancier assert for debugging
jsvArrayJoin to use new iterator
for (i in ...) to use new iterator
I2C and SPI use new iterator
Serial.write() - to allow single ints to easily be written
changeInterval assert fail when given a function by accident
added peek8/poke8/peek16/poke16
memory() now takes account of command history size
memory() on ARM reports the end address of the stack - so it can be used as a scratchpad with peek and poke
Try and reduce code size by not inlining several functions
No refs for StringExts - so we get one more byte per JsVar (~5%) more storage efficiency
Move from jsvIsBuiltInFunction to computer-generated jswIsBuiltInFunction
When creating Objects, check for built-in function BEFORE creating an Object class for it
Built process now checks that flash usage is under the allowed value
Added short compare to jswHandleFunctionCall to reduce code size
Added 3 byte compare (4 byte read and AND off top byte) - faster, less code
Auto-generate jsvGetBasicObjectName from docs
No longer using refs for storing whether free or not - use flags with JSV_UNUSED and get one extra var with 8 bit refs
Switch to using STRING_0...STRING_MAX in flags, rather than specific bits in JsVarFlags - allows more that 15 chars to be used per JsVar
Make ArrayBuffers actually be ArrayBufferViews - saves on extra string-handling code at expense of one var
Make sure Uint8Array,etc inherits from ArrayBufferView
Fix issue where a '\0' coming in from serial was not put in e.data properly
Don't inline some functions when we're trying to save on flash
Re-use sin for cos, pow for sqrt to reduce code size
1v32 : Fixed embarassing issue with 0.999=="0.A"
Added and checked Pin.writeAtTime on STM32
Now don't allocate events array - just allocate directly, which saves memory and is faster (although slighty out of order)
Docs: now Alphabetically sorted, and class instances not listed by accident
Fix issue where Ctrl-C on ANY Serial port caused execution to be interrupted
Updated busy indicator to cope with recent change to not allocate events in an array
Fixed I2C on HY 2.4 board - I2C needed hard reset
Added basic ArrayBuffers/TypedArray support
Fix memory leak when error created with [] on a non-array/object
Improved hyperlinking in documentation
Fix I2C receive bug on F4
Increased VL board's input buffer size
1v31 : Fix PWM output on TIMER1/8 pins of the STM32F4
Fix PWM output for negated timers
memory() now runs a GC pass
Fixed multiple occurrence of functions in reference
1v30 : STM32F1: fixed AF issue meant peripherals would never return from AF mode
STM32F1: When given an invalid pin, now reports if pins are 'af' or not
Updated SPI.setup docs to mention that you can't mix AF and non-AF
If one SPI pin is specified but others aren't, only that pin will be set up
Added Olimexino hack so SPI1.setup works as expected
Allow using [] on a function
Fix precedence issue, so var a = function() { return 1; }(); works
Update SPI documentation
for (i in f) can now iterate over functions
Optional argument to trace() for object to start tracing from
Small steps towards ArrayBuffers
Added smart edit that checks for internal functions, and uses Function.replaceWith
Added Function.replaceWith to replace the internals of a function while keeping the scope
1v29 : Some hacky sysfs-based IO for running on Linux
HTTP Callbacks are now stored as names so they can be changed on the fly (Linux only)
Successful compile for Carambola
Filesystem support on Linux
Switch to variable size ref counter (marginally more efficient on very small devices, safe on Linux)
Linux now has unlimited memory available
Added linux/sysfs 'setWatch' (non-irq driven, so very noddy)
Checked jswrapper check from using multi-char constants to a #define
Improve pin suggestions for SPI/I2C/USART
Auto-initialise USART with default values when setConsole is used
Support for new Graphics LCD types
3.2" VCT6 board support
1v28 : Faster LCD fillrect for HY 2.8
Fix for multi-byte SPI writes on HY board at 1Mhz (touchscreen control bug)
Fix issue with delayMicrosecond calibration on HY (and hence OneWire)
Fixed digitalPulse on STM32VLDISCOVERY
1v27 : Fixed problem with OneWire constructor execution
Added |=, &= and ^=
Added Array.splice()
Faster, more ROM-efficient built-in symbol table
Fix for potential issue when using field accessor on an undefined var
1v26 : I2C Support on STM32F1 and STM32F4 boards too
Emergency cut in variables for Olimexino with bootloader (as flash usage has got too high for save to flash!)
1v25 : http.writeHead to accept an empty header
Fixed issue finding methods on built in classes (0 termination)
make sure http server with no data still sends headers...
Start of MINI-HY-2.8" support (all ok, but no SD card yet)
Reduce RAM usage by consting some arrays that are not modified
Vector fonts now use polys - 8kb less ROM, and faster rendering
Start of LCD 'driver' code
Standard way of handling events, Object.on/emit/removeAllListeners - like Node.js's EventEmitter
Self-calibrating Microsecond delay (for intermal OneWire/etc)
OneWire class
Correct handling of built-in class constructors
Fix error when parsing a zero-argument function that has been given arguments
I2C support - currently ONLY tested on STM32F3 board
1v24 : SDIO-based fat driver on the HY STM32 board
Added DAC to the HY boards (103xE-based)
Re-named the fileSystem functions to make them more compatible with node.js (readFile/writeFile/etc)
Added fs.appendFile
Removed HTTP from the reference until it is included in some boards
1v23 : Fix 'ERROR: INTERNAL: stmADCChannel' on STM32VLDISCOVERY/F1 boards when accessing PA0
Reference now mentions which Espruino version it is for
1v22 : Important fix - Events got executed in the wrong order if they got queued up
1v21 : Ensure SPI clock does not stop between bytes
Added SPI.send4bit and SPI.send8bit
Made sure the VL board's code fits into available flash
Smart += that can append to a string rather than cloning it
dump() prints functions properly, rather than 'var f = function() {}'
Pageup/down move the cursor to the beginning/end of input
LCD draw/fill with negative x and y
1v20 : Add console.log
Fix automatic usleep for Linux
Added node.js-style HTTP server for Linux version
Fixed null-pointer issue when accessing something that doesn't exist on an object
Added node.js-style HTTP client for Linux version
Start of bit bashing functionality
for (i in "ABCD") console.log(i) -> 0,1,2,3
String array access (but not for writing - doesn't work in JS anyway)
String String.fromCharCode / charCodeAt
Added SPI baud rate setting
Vector font chars 'a' and '4' now work ok
Fix numeric exception when rendering a poly that has some identical points
Better digitalPulse (uses timer + interrupts)
analogWrite can now take an object with a 'frequency' argument for PWM
1v19 : Fixed issue where var M=Math;M.random() failed
Fixed issue with var U=USB;U.print("Hello");
Remove loop iteration limit
Fix memory leak when a syntax error is in for '(i in arr)'
Save state of pin on setWatch interrupt (e.state)
Change setWatch to allow only on rise or fall as an option
clearWatch() clears all watches
1v18 : DAC support on F3/F4
Serial.setup() can also take a second parameter of an object {tx,rx}
Better support for dump() with echo/setBusyIndicator/etc
Better dumping of prototypes on built-in vars
Don't add chars<32 (Except tab) to the input line
SPI1/2/3/4.setup() to take an object {baud,sck,miso,mosi}
Better hardware initialisation code (not UARTS auto-init if they are used)
Fix issues with prototypes
Peek/poke instructions
Start of I2C support (not usable yet)
Added Math. ceil/floor/exp/log
1v17 : Support for running alongside the Maple bootloader
Fix parsing of numbers beginning with 0 when forceRadix!=8
Fixed USART1 on Maple/Olimexino devices
1v16 : Inlining of jsvLock/UnLock in jsvar.h to improve speed
Move non-hardware-dependent stuff into jsdevices
Move jshardware.c into targets/stm32/jshardware.c, create 'targets/linux' and use a single makefile
For + While loops work without reallocating lex
Fix AddNativeFunction when function already exists (and tests + saved state)
Change jsvFindChildFromX to use JsVar* from JsVarRef - saves a lot of lock/unlock
Handle new Foo() as per spec (return value + init of this+prototype) - still does not cope with non-object prototype
Beginning of SD card support (works on Olimexino, but not very flexible)
Fix for parse/eval when given non-strings
Strings can now contain '\0'
Jumptable-friendly reserved word check
Jumptable-friendly builtin functions (massive refactor)
SPI support
HY board support, and graphics LCD
Added fillPoly, and Vector fonts
Added Registration code
Fixed some undefined function/array warnings
Much better HTML function documentation
Fixed edit() function
STM32F3 support, and now peripheral stuff is done with a script
explain what pins are available if a pin is not capable of requested fn
power on ADCs only when needed
LCD fillPoly speed improvements, + drawLine
Add datatype for Pin, so pins written to console by pin name rather than integer value.
Added Pin.set/Pin.reset
Change warning about 'undefined.' into an error (foo.reset() had unexpected consequences!)
Fix parsing of '1.0/-3'!
Add typeof and instanceof operators
Ensure that Serial1/SPI1/etc are objects of type 'Serial'/'SPI' - so prototypes can be added
1v15 : Escaping JSON strings
Fix parsing of octal numbers in strings (so don't have to be 3 chars long)
Drastically improved stack usage using small stub functions (at expense of a bit of speed)
dump() also dumps out prototypes for functions
1v14 : Fix complaint about pins during setBusyIndicator()
Increase available memory on OLIMEXINO
Added function memory() to return memory usage
setWatch now links to function names (rather than just functions)
dump() also handles Serial.onData(...)
Fix issue with JSON printing functions with arguments to console
prefix builtin variables with '_'
fix ArrayIndexOf when array contains undefineds
move all devices into one git repository
USB on F4
call onInit function/string if it exists when Espruino powers on
Compile F4 with -O2 - as we have the program memory for it
Serial3/4/5/6 on F4
Serial3 on Olimexino
Make Serial.onData() clear onData handler
1v13 : Operations like + on Object/Array convert them to strings rather than error
var now doesn't error if there is no semi-colon
Allow new line or line delete in multi-line editing
add edit(functionName) - which copies function definition into inputline so it can be updated
When printing lines, delete current inputline and then put it back in idle loop (only if echo=1)
Support *,/ etc on numpad
1v12 : Issue when printing lots of data and then disconnect USB
Hide USB/Serial in Dump()
add Array.map(fn(x), thisArg)
For newline, count [] and () (as well as {}) - also knows about comments/strings/etc
Fix assert fail is setTimeout with non-function
If space at end of input line, enter still executes
Removed some hard-coded arrays in favour of JsVar strings
Fix confusion with jsvIsName/jsvIsString
Handle numpad end key
Add code to check stack and stop stack overflow if too much recursion
Ensure that setTimeout/setWatch store the link to a function, not the function
Fix nasty ref loop in ref loop GC issue
Add dotty output
Fix memory leak when error in jspParseSingleFunction
Now run Garbage collection if we're idle, and we know we have a few ms spare
Added setSleepIndicator
Fix line/col indicator in errors/warnings
Fix JSON parsing and printing when 'undefined' encountered
Rewritten object handling code to be way more standard JavaScript compliant
Array initialisation with 'new Array()', also for Strings
Added a few more built in functions
Nice error reporting with line + pointer
fixed Math.random
Binary style ops on doubles now work - they are just converted to ints
Added boolean datatype
1v11 : Add Math functions
Add command history (and dynamic history free if low memory)
Fix broken jsvArrayPop
Add tests for and fix Array.indexOf
In-line editing for commands
Fix bug in basicVarEquals for big strings
More fixes for low memory conditions
Multi-line edit for commands (but no newline or line delete yet)
Handle Home, End + reverse delete keys
Fix nested for loops not handling interrupts correctly
Fix AppendString issue when given start value greater than string
Add 'changeInterval' to allow things created with setInterval to have the frequency changed (eg. stepper motor control)
Now puts itself to sleep to save power, when it knows nothing is required and it'll be woken up by SysTick before
Change Math library to avoid putting constants in RAM
1v10 : Increase FIFO size for VL
Marginally decrease amount of F4 vars to ensure they all fit in one flash sector
Allow strings to be longer than the max token size
'"key" in obj' syntax
Detect if in FOR or WHILE loop, and if not, disallow break and continue
Change min setInterval time to 0.1ms - F4 can get close to this
Better analog pin error message
USB support on Olimexino/Maple
Start of multiple COM port support (ioEvent queue)
Ctrl-C now clears the input line
Save state of 'echo' into flash with save()
Add 'setBusyIndicator(pin)' to set pin high when Espruino is busy
Inbuilt function handling speed improvements
Allow Serial comms via other UARTS. Serial1/2.onData and print/println
now inserts elements into arrays in the correct order (GetLength can be (is) now much faster)
Faster code to work out pins from strings
Automatically convert IDs in form A#,A##,B#,B## etc into numbers.
Built-in constants for LED1/BTN/etc.
1v09 : Enabled 'abs' by default
Added flash programming to STM32F4
analogWrite now working!
1v08 : Add preliminary STM32F4 support
Allowed test cases to test timers - eg. code in jsinteractive.c
Fix memory leak for timer
Fix memory leak for digitalWrite
1v07 : Fix string charAt
Fix watch on different pin
Pass arguments to event handlers - eg. time
digitalWrite/Read to take arrays of pins, and int for value
1v06 : Add break + continue
Add switch statement
Handle /r, /r/n or just /n for newlines - phone compatible
Handle different type of delete
1v05 : Allow setWatch/setTimeout/setInterval with a string
Handle adding Open bracket then deleting it
When calling a NAMED function, zero the scopes - this stops scope table overflow
1v04 : Renamed to Espruino
Fixed issue with event add when out of memory
If out of memory happens during a timer, kill all timers