forked from espruino/Espruino
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ChangeLog
2777 lines (2664 loc) · 203 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Bangle.js: When reading file info from a filename table, do it in blocks of 8 (20% faster file search)
Bangle.js2: Increase flash buffer size from 16->32 bytes (5% performance increase)
ESP32: update esp-idf to v3.3.6
Bangle.js2: Fix issue where Bangle.getPressure could leave the barometer on
Bangle.js2: Bootloader update - triple-check CRC after writing firmware and retry if it fails
Bangle.js2: setUI(updown/leftright) now responds to button on falling (not rising) edge
If we get an unhandled exception, ensure we keep the stack trace intact
Array.sort() with undefined elements now puts them at the end of the array (as per spec - #2300)
Bangle.js1/2: Fix showMenu/showScroller spacing with back if no widgets loaded (ref #2286)
Bangle.js1: Bangle.setUI({back}) now responds to BTN3 if there were no other watches on buttons
ESP32: Allow up to 16k vars (if enough memory), allow non-active scan, and remove 30s BLE scan limit
Graphics: Ensure a scroll inside a cliprect can't go out of bounds (previously it was bounded to screen)
Puck.js: Fix regression in 2v15/2v16 that stopped Puck.js v1 using magnetometer
Bangle.js2: Fix scroller overlap with widget bar when scrolled more than the screen's height in one step
Bangle.js2: Improve touchscreen handling to handle out of range data from the controller on some devices
Bangle.js: Improve ANCS stability - cancel ongoing tasks if an error is reported
ESP32: setScan/findDevices/requestDevice now fill in `id` with the mac address followed by private/random/etc as NRF52 does
ESP32: disconnect event now gives 'reason' (as NRF52)
ESP32: Bluetooth scanning now uses event queue (fixes MEMORY_BUSY)
ESP32: Implement E.enableWatchdog
Speed up tab complete on large ArrayBuffers
Support for ArrayBuffers over 64k in size
Fix issue that could cause some variables not to be freed as soon as they weren't needed (requiring GC more often)
Fix lock leak if out of memory error occurs during 'var' initial assignment
Graphics: Add color mappings when rendering 3->4bpp and 3->8bpp
Bangle.js2: make the 4bpp mac palette more saturated to account for the LCD
ESP32: partition table updated in EspruinoBuildTools to ensure bootloader doesn't mistake js_code/storage for an otadata partition
ESP32: Add ESP32.setOTAValid(false) to allow the current partition to be marked as invalid (causing 'factory' to be booted into)
JIT: Arrays can now be defined in JIT code (`[1,2,3]`/etc)
JIT: Objects can now be defined in JIT code (`{a:2,b:3}`/etc)
JIT: 'this' can be used in JIT code
JIT: Support for short-circuit operators && and || (#2313)
JIT: Increased compile speed ~5x using iterators for string append
ESP32: Fix build with asserts enabled
ESP32: Add BTN1 (D0/BOOT) and LED1 (D2) as these appear to be reasonably common in boards
Add ability to add custom boot code inside the build with JSMODULESOURCES+=_:bootfile.js
2v16 : JIT functions now execute in their own function scope (allows arguments)
Move older 'HY' boards to use `g` for the built-in graphics, not `LCD` (and change docs)
Fix print(()=>{}) printing 'function (undefined) {}' - saves 1 var for arrow fn without args (fix #2265)
Bangle.js: Add support for `Bangle.setUI({remove:...})` to allow apps to be unloaded without a full reboot.
Bangle.js2: Fixed `Bangle.setLCDOverlay(img,x,y)` with negative offsets
Allow `atob` to accept base64 with whitespace inside it
Puck.js Lite: remove NFC from build (no NFC on board the Lite version)
Storage: When using Filename Table, be absolutely sure it's correct before using it (stops hang at startup if storage corrupt)
Bangle.js: Add Bangle.setOptions({btnLoadTimeout:...}) to allow home button timeout to be configurable
Bangle.js: A forced interrupt after button held now occurs 0.5s (not 0.1s) after the reboot request
Bangle.js: Holding the button during storage compact now won't try and break out of it
Bangle.js: Use 4k/64k/all flash clear commands to make erasing (and hence compact) external flash faster
Bangle.js2: Add built-in touchscreen calibration
Bangle.js2: Add fast-path for all-white or all-black full-width graphics fill/clear (24ms -> 2ms)
Bangle.js2: LCD background flip (send to LCD while returning to execute other code)
Bangle.js2: Swipe direction is now modified based on g.setRotation
ESP32: Bluetooth LE tweaks - central mode connects, scans, reads, writes and notifies
Bluetooth: fix for incorrect Bluetooth task strings shown in some errors
Bangle.js: showLauncher's 'fast load' now updates __FILE__
Improve jsvIs* functions (because v->flags is volatile). >5% speed improvement
Lexer speed improvements
Bangle.js: Compass 'heading' now provides correct value (without 360-heading) required
Bangle.js: Remove F_BEEPSET feature flag (now 3 years old)
Espruino: Ensure flash/native strings really can't be appended to (fix #2282)
Bangle.js2: Improved 3 bit LCD fill (20% faster)
process.memory() reports `stackFree` which allows us to easily check if we're ok for recursion
E.HSBtoRGB can now be called with `E.HSBtoRGB(h,s,b,16)` to return a 16 bit value suitable for Bangle.js/etc
Bangle.js2: Flip LCD SPI bit order so operations in Espruino can be faster (45% faster fillRect)
Bangle.js2: Use 8x3bpp block fill with masking (now at least 6x faster than 2v15)
Fix JIT when overwriting a pre-existing function, JIT now allows `var/let/const`, fix lock leak in function call, fix FOR postinc issue
JIT compiler now included in MDBT42Q/Pixl.js/Puck.js/Bangle.js 1
Bangle.js2: Bangle.setUI remove unused 'touch' mode, ensure 'back' button doesn't overlap if button is already used (fix #2287)
Bangle.js: Do not clear widget area if only zero width wigets are using it
Bangle.js: Allow setting remove methods for E.show*
Bangle.js: Add Bangle.load() and Bangle.showClock() methods
Graphics: Ensure g.reset() after a custom font was set de-allocates the custom font (fix #2290)
Bangle.js: setUI now calls g.reset(), and also protects against recursion in uiRemove
Bangle.js2: Touched item coordinates in E.showScroller's select callback
2v15 : Fix issue where `E.toJS("\0"+"0") == '"\00"'` which is just `"\0"`
Fix issue accessing `arguments` after/inside 'let/const' keyword (fix #2224)
let/const now don't add a scope if executed in a function outside a block (fix #2225)
When executing a function, ensure the scope doesn't include a `return` var
Rename internal return var to fit it inside one JsVar on embedded systems
nRF52: Added support for 2 concurrent Bluetooth Central connections to Puck.js, Pixl.js, MDBT42Q (fix #1360)
Bangle.js2: JIT now built in (only enabled for functions prefixed '"jit"')
E.dumpVariables now outputs more info for variable values
Puck.js Lite support
Puck.js: Immediately after flashing new firmware, Puck.js now does a self-test and sets its BLE to PASS or FAIL
nRF52: Fix recent regression which stopped reconnection after a bluetooth disconnect (fix #2226)
Bangle.js: Include the 'sched' library in installed apps (needed for alarm) (fix #2229)
Bangle.js2: Fix text size on buttons when they are tapped in E.showPrompt
nRF5x: Add 'onWriteDesc' in NRF.setServices - allowing you to know when something subscribed for notifications
nRF5x: Move advertising_start and restart_softdevice outside of IRQs (MEMORY_BUSY warnings less likely now)
Bangle.js: Ensure E.showMessage background color comes from theme
Bangle.js: Add "filename table" support to Bangle.js - avoids slow file read/list when there are many deleted/updated files in Storage (fix #2152)
Storage: Don't align files <512 bytes to page boundaries - all files now stored in order (ref #2232)
nRF5x: Call sd_ble_gattc_hv_confirm in response to BLE indications
Bangle.js2: Make Bangle.setBarometerPower retry twice if it has an I2C error
Bangle.js2: Fix `NRF.setAdvertising({},{scannable:false})`
Bangle.js2: Initial long range functionality (via `phy:"coded"` in `NRF.setAdvertising/setScan/requestDevice/findDevices`)
nRF52: Change from hard -> softfp calling convention (saves a few bytes, more compatible with compiled code)
Fix 'console.log([1,2,3].splice(0, 1.0))' (fix #2245)
Bangle.js2: Added `Bangle.setLCDOverlay(img,x,y)` to allow an image to be overlaid on top of screen contents (eg for notifications)
Fix issue parsing constant decls when not executing (fix #2255)
Puck.js: Fix Puck.mag() in newest batch of Puck.js 2.1a sometimes returning -32768
Correctly handle parsing of template literals inside template literals
Don't store command history if echo=off (eg for Web IDE/App Loader uploads)
E.defrag now kicks the watchdog (on Bangle.js 2 it can take long enough that the watchdog fires)
2v14 : Bangle.js2: Fix issue with E.showMenu creating a global `s` variable
Bangle.js2: Recheck string wrapping after font change inside E.showMenu
Bangle.js2: Double input buffer size from 1kb to 2kb
Bangle.js2: Fix E.showMenu title changing color after scroll down+up *if* a non-standard theme was used
Bangle.js2: Fix wear detection on latest Bangle.js 2 (VC31B variant) (fix #2141)
Bangle.js2: Allow variable HRM poll rates on Bangle.js 2 VC31B variant
Bangle.js2: VC31 HRM variant now polls at 25hz (not 50)
Bangle.js1: E.showMenu now displays boolean values with no `format` as a checkbox
Bangle.js1: E.showMenu now displays a submenu for multiple choice menu items (#2184)
Bangle.js: built-in locale now doesn't depend on argument being an instance of Date (#2187)
Bangle.js: Add ".noList" property to prevent E.showScroller inside E.showMenu
Bangle.js2: Add "Back"-Button on submenus inside E_showMenu
Graphics: g.setClipRect now uses rotated coordinates
Graphics: g.draw/fillCircle now works with rotated coordinates
Bangle.js2: Touch/drag coordinates now obey g.setRotation
Graphics: Fix drawString with combination of g.setClipRect and g.setRotation
nRF5x: Allow 'high speed' watches via 'hispeed' argument to setWatch. Higher power consumption but detects fast (<25us) pulses.
Bangle.js2: E.showMenu now returns 'scroller', `format` is called with a second argument, font in popup is scaled to fit (fix #2190)
Fix recent class method regression (24247e4ec9) (fix #2197)
Bangle.js2: 6x15 font tweaks for better ISO8859-1 support
Bangle.js: Add clock property to "custom" mode in setUI
Allow method declarations in objects - ES6 'Enhanced Object Literals' (#2202 / #1302)
Added Object.values/Object.entries (#1302)
Added block scoping for let and const (#971)
Honour non-writable const vars (fix #971)
Remove Line Numbers from 'save on flash' builds
Added Object shorthand, eg. x={a}
Added numeric separator support eg. 12_34
Add Nullish coalescing operator
Enable releases and cutting edge builds for Puck.js minimal releases (with 98kB of free Storage)
nRF5x: Fix memory leak (of address) when using NRF.setScan/requestDevice/findDevice (regression in 2v13)
Fix issue with const in a module when called from a scope with const already in (fix #2215, fix #2207)
Add `seaLevelPressure` to Bangle.setOptions (fix #2213)
Bangle.js: speed up HRM average adjustment (specifically when sample rate is 25Hz, eg. for Bangle.js 2)
Bangle.js: Change default distance units to m,km (from m,miles) (fix #2209, fix #2210)
Bangle.js: Rename default locale to 'system' (from 'en_GB')
Ctrl-C will now *not* break out of short-running intervals/watches, only long-running ones
Bangle.js: Allow E.showMenu to be given an array and title option (fix #2175)
nRF5x: We now clear the console's input line when connecting or disconnecting Bluetooth (fix #2219)
Graphics: Add g.blendColor to expose the ability to figure out what color is between two others (fix #2150)
Fix stack overflow if deallocating a massive linked list (fix #2136)
String substr/substring/slice now work on native/flash strings by changing pointers rather than doing an actual copy (fix #2066)
Fix over-iteration if breaking out of the very first iteration of FOR loop (fix #2012)
JSON.stringify(pin) now returns valid JSON (Pin name as a string). E.toJS still leaves it as an ID (fix #271)
Bangle.js2: Fix exception when using 'back' and physical button with Bangle.setUI
2v13 : Memory usage improvement: Function scopes no longer stored as an array if they only contain one scope
Memory usage improvement: The root scope is never stored in the scope list (it's searched by default)
E.dumpVariables now dumps variable flags
Tidying up Native Function handling (now JSV_NATIVE_FUNCTION not JSV_NATIVE|JSV_FUNCTION)
NRF.getSecurityStatus now returns 'connected_addr' for the address of the currently-connected device
NRF.setAdvertising converts arrays of arrays to arrays of ArrayBuffers. Also don't update advertising when connected.
Memory usage improvement: Arrow functions only store value of 'this' if 'this' is used by code inside them (fix #2139)
Add String.prototype.concat (fix #2140)
Much-improved whitespace lexing code using single jumptable - 3% speed increase
Allow `process.memory(false)` to get memory info but skip GC
Graphics: fix height calculation bug in fillRect/clearRect when given an object with w/h as an argument
Fix potential corruption issue caused by `delete [].__proto__` (fix #2142)
Bangle.setUI is now minified, also calls Bangle.uiRemove if it was set (to clean up custom UI additions)
E.showScroller tweaks to allow redraw requests, get/set initial scroll amount, negative scroll (for titles)
NRF.setScanResponse now works on SDK15
Fix g.wrapString if string ends with a bitmap
g.wrapString now splits long words if they are too long for a line
Add Storage.getStats to get more fine-grained info about Storage
Add Bangle.midnight event that can be used for housekeeping tasks
Graphics: You can now do `g.fillRect({x,y,x2,y2,r})` for rounded rectangles
Bangle.js2: include new touchscreen E.showMenu system
String.toUpperCase() and .toLowerCase() now work for accented ISO8859-1 characters (fix #1866)
Report errors created during execution of `E.on('kill',...)`
Bangle.js: ANCS/AMS now advertises 16 bit time service (doesn't crop the name, and good enough for iOS pairing)
Number.toFixed(...) now doesn't exponentiate when the number is very small (fix #2157)
Add E.showMenu({"":{back:function}, ...}) for easy specification of 'back' menu item
Bangle.js2: Add 'back' option to E.showScroller and Bangle.setUI
Bangle.js2: Ensure that if Bangle.getPressure errors, the next call doesn't say 'Conversion in progress'
Bangle.js2: Update E.showPrompt with a bigger touchable area around buttons
Bangle.js2: 'touch' event coordinates are now clipped to screen coordinates (drag stay unclipped to allow touchscreen use for scrolling)
Bangle.js1: Fix regression that caused setLCDMode not to work in 2v12 (fix #2155)
Bangle.js1: Improved 'E.showScroller' menus
Bangle.js1: Add 'back' option to E.showScroller and Bangle.setUI
Bangle.js1: setUI button handlers now work on falling edge
Bangle.js: Add setUI custom 'swipe' handler
Util Timer now runs independently of system time. More accurate on nRF52 (fix #2125)
Bangle.js2: Battery discharge curve is now scaled better, and setting.json:batFullVoltage can be used to account for differences in sense voltage between devices
Bangle.js2: Ensure NRF.setTxPower works for all connections and advertising
If a process.on("uncaughtException" handler creates an exception, make sure we report it as Uncaught
Bangle.js: If home button held and JS is still executing, force a break (like Ctrl-C)
Graphics: Fix text bounding box calculation when just the top line of a character would be visible
Bangle.js2: setUI now doesn't forward touch events if tapping over the back button
Bangle.js2: New E.showMenu now allows menu items of type 'string' - fixes 'Passkey' settings menu
Bangle.js2: Add visual feedback when showPrompt button is pressed
Storage: Fix erase-after-compact bug if Storage completely full (fix #2174)
Fix out of bounds jsvGetAddressOf in jsvNewFlatStringOfLength (wasn't a cause of instability)
Storage: Now put all .js files into internal storage (if 2 storage areas). Fix corruption issue when reading using file with explicit drive letter
Bangle.js: default 'locale' now supports second 'dp' argument for decimal places in distance/speed/temp
Graphics: Restrict setClipRect coordinates (Except on ST7789_8BIT (Bangle.js 1) where we need it for notifications. This stops potential out of bounds writes is setClipRect is wrong.
Fix issues accessing object/array fields when the field itself has a null character in it (fix #2176)
nRF5x: Fix merging of packers for `NRF.findDevice` - previously name fields in subsequent packets may have been left as 'undefined'
nRF5x: NRF.findDevice now aggregates multiple packets even if only one packet matches the filter (fix #2178)
nRF5x: Allow NRF.setAdvertising to set advertised service UUIDs (vs service data) easily with `NRF.setAdvertising({'180D':undefined})`
Ensure JSON.stringify([undefined])=="[null]" as per the spec
Bangle.js2: Unistroke recognition accuracy improvements
2v12 : nRF52840: Flow control XOFF is now sent at only 3/8th full - delays in BLE mean we can sometimes fill our 1k input buffer otherwise
__FILE__ is now set correctly for apps (fixes 2v11 regression)
Bangle.js: Ensure Bangle.getHealthStatus("day") resets at midnight (fix https://github.com/espruino/BangleApps/issues/1216)
Bangle.js: Attempt to fix Bangle.buzz that occasionally doesn't stop
Bangle.js2: Lower bootloader LCD SPI bitrate (was out of spec, not all LCDs worked with it)
Bangle.js: Attempt to fix occasional issue where vibration gets stuck on (fix https://github.com/espruino/BangleApps/issues/1249)
Bangle.js: Ensure Bangle.setLCDPower only fires lcdPower event if state has changed (fix https://github.com/espruino/BangleApps/issues/1138)
Bangle.js2: Holding BTN at boot skips bootloader storage check, bootloader now times out if too many files
Bangle.js: Move position of filesystem checks to before first code is run
Storage.write is now explicit about not allowing zero length files, also creates exception if it fails because it can't get a data pointer
Bangle.js2: Only handle UBX protocol from GPS on Bangle.js 1 as it interferes with CASIC on Bangle.js 2 (fix #2124)
Bangle.js: GPS-raw no longer sets the FIFO_FULL message if data is lost - just passes a bool as the second argument
Fix for buffer overflow + segv found via fuzzing (#2121, #2122)
new Date(str) no longer interprets ISO 8601 UTC timestamps as local time (fix #2116)
Graphics: Fix clipRect checks for >1x bitmap fonts
Allow __proto__ to be set to a function as well as object
Bangle.js: Support for v2.1 barometer hardware (SPL06 vs BMP280)
Bangle.js: Increase step counting noise threshold 14->17 to work around pedometer fake steps (http://forum.espruino.com/conversations/371740)
Bangle.js: Support for v2.1 HRM hardware (VC31 vs VC31B)
Bangle.js: Better HRM detection (higher res filtering, better peak detection, lower median filter size, better confidence)
Fix E.decodeUTF8 when decoding UTF8 codes that contain all decimal digits
Fix for potential buffer overrun if JSON.stringify used with strangely crafted whitespace arg (fix #2114)
Add `NRF.setSecurity({encryptUart:true})` to force encrypted comms on BLE UART
Bangle.js2: Increase wait after power-on for BMP280 to fix getPressure on some devices (fix #2120)
Storage: Fix compaction error if a page starts with 0xff and the first write fits within that (fix #2009)
Add NRF.startBonding to force bonding on peripheral connection
nRF5x: Disable name change over BLE via 0x2A00
Bangle.js1/2 : Fix inconsitent scroll indicator in menus (fix #2104)
Bangle.js2: E.showScroller to respect widgets on bottom row (using appRect)
Bangle.js: Step counter - Remove hard-coded gravity value and subtract DC offset with a filter
Ensure jsfIsStorageValid kicks watchdog so we can't get stuck in a reboot loop if all of Storage is empty
Bangle.js: Add 'graphicsInternal' to make Graphics independent of JS vars. Terminal is now useful earlier, and can display softdevice errors
Bangle.js2: If errors do happen during Bangle.getPressure, reject the promise (fix #2137)
2v11 : Bangle.js: Enable the Bangle.on('tap') event from the accelerometer by default
Bangle.js: revert to (better) Kionix default thresholds for tap detect
Bangle.js2: When wake on touch is enabled, use a single tap on the front of the device for wakeup
Bangle.js: Display 'checking storage' message on first boot to alert users to slight delay
Bangle.js: Tweaked step count algorithm (low pass filter, 4 steps in 90s)
Graphics: asBMP/asURL/dump now support more bit depths
Graphics: Allow .setFont/.getFont to use font size in a colon after the font name
Graphics: .getFonts now lists 'setFont' functions however they were added (to `g`, built in, or to the prototype)
Graphics: When rendering fonts with a solid background, ensure the gap between is filled too
Flat Strings are now always aligned on a 4 byte boundary (fix #2040)
Graphics: add setTheme on supported devices
RAK5010: switch to 1.8v internal voltage (was 3.3v) to make GSM comms reliable, upgrade BG96 module
RAK5010: Compile in TLS/HTTPS support
Bangle.js: Fix issue where if non-fullscreen notification was visible and Bangle.js reset, screen was off-center
Fix for issue with pretokenised code not creating correct text string for reserved words, eg {undefined:1}
Bangle.js: Turn vibrate off every time a new app loads
Fix issue where ({a:0}).a in the console would create a ReferenceError (works in code)
Graphics: Allow setFont("FontName:1x2") for scaling in 2 directions (fix #2044)
Graphics: Fix .asBMP for 4 bit images
Graphics: switch RGB order for palette in asBMP for 4/8 bit images
Bangle.js2: Idle power consumption down from 1.3mA to 0.9mA (pullups on HRM disabled when off)
Bangle.js2: Increase reported bit depth from 3->16 and perform bayer dithering when rendering
Makes icons/old apps way more usable (plus provides an easy way to get >3bpp)
Bangle.js: Fix color palette when rendering 3bpp -> 16bpp
nRF52840: Fix 900uA UART power draw when shut down
nRF52: Send XON/XOFF when buffer is less full - reduce likelihood of FIFO_FULL with big MTUs
Bangle.js: Fix powerSave regression (should default to 'on', but didn't since 2v10)
Storage test on boot only tests storage fully if the first record is empty
Graphics: drawString now accepts images in-line (fix #2063)
Graphics: added stringMetrics to get height as well as width
Graphics: drawString now correctly middle-aligns multi-line strings
Graphics: add imageMetrics to allow image width/height to be read
Graphics: drawImage(...,{frame:x}) can be used to draw animations
Graphics: fix rotated/scaled rendering of 3 bit bitmaps (fix #2049)
Bangle.js: fix Bangle.getLogo memory leak
Bangle.js2: Graphics.getBPP now returns 3
Bangle.js: attempt to unlock SPI flash multiple times (some devices don't unlock on the first attempt)
Bangle.js: Fix Bangle.tap event regression (now works again)
Graphics: add wrapString to wrap messages to the correct length
Bangle.js: update showMessage and showPrompt with correct wrapping
Bangle.js2: Add Bangle.compassRd, fix setCompassPower
Bangle.js: Add Bangle.on('health',..) event and Bangle.getHealthStatus
Graphics: drawImage now honours arraybuffer offsets
Graphics: drawImage now supports up to 4bpp palettes rendered direct from flash
Bangle.js2: Larger font for E.showMenu
Graphics: drawString(..., true) for vector fonts now clears the background
nRF52: swap getSerial bytes around so device ID string matches nrfjprog
Bangle.js2: bootloader can now flash firmware from a file in Storage
Bangle.js2: Add second Storage area in internal flash for fast access, memory-mapped files
Fix unhandled reject of a previously resolved promise (fix #1433)
Bangle.js: E.showMessage/showPrompt can now display images via optional img argument
E.showMessage/showPrompt handle padding correctly if no widgets are displayed
Bangle.js2: Fix setUI clockupdown handling of 'up'
Bangle.js: Ensure builtin E.show* (and fake LEDs) wake the LCD up
Storage check now *only* happens on first boot
Ensure __FILE__ is set by the time bootcode runs
If executing from storage, work out line numbers and print filename for Errors
Bangle.js: Don't store line numbers in functions - no need when execing from flash
Bangle.js: Add E.showScroller for scrollable lists
Fix issue where invalid JSON stopped execution after Storage.readJSON
Bangle.js: Add Storage.hash for boot0 cache change checking
Bangle.js: A single widget load failure will now not remove all widgets
Bangle.js: widgets are now sorted by .sortorder
While and for loop conditions now use Expression, not AssignmentExpression (eg. while(0,0) is fine) (fix #2068)
Bangle.js2: Fix 'stuck' bottom row of pixels if scrolling downwards with g.scroll(0,1)
Bangle.js: Fix issue where minified E.showMenu was creating a global var called 'c'
Fix string formatting for "Field or method X does not already exist" error
Graphics: drawRect,fillRect,clearRect are now able to take an object as the first argument
Bangle.js: Add Bangle.appRect to allow apps to see how much space is available for them
Bangle.js: Add `Bangle.setOptions({hrmPollInterval:...});`
Bangle.js2: Bangle.dragHandler is now cleared by setUI (fix #2078)
Bangle.js2: Adjust full battery voltage
Avoid Watchdog reboot during compact if compacting a lot of data (fix #2075)
Storage: Fix issue where compacting empty storage could cause out of bounds erase (fix #2081)
Fix issue where pretokenised '1 - - 1' would turn to '1--1' (fix #2086)
Fix break scoping error in nested for loops (fix #2084)
Fix memory leak when rejecting pre-resolved promise (test_promise11.js)
Fix parser errors in arrow functions (fix #2067)
Bangle.js2: Add Unistroke object, and 'Bangle.stroke' event
Fix pretokenised '1 / /.../' and ensure jslSeek resets the previous token (ref #2086)
nRF52: Move neopixel LRCK pin which can't be disabled due to hardware errata, and restore state after (fix #2071)
Bangle.js2: Disable unboard flash bank for now (issues with erase on reboot)
Bangle.js1: Fix E.showScroller implementation
Bangle.js2: Ensure tap and twist turn LCD backlight on as well as unlocking
Bangle.js1: Bangle.setUI now deletes touchHandler (fix #2095)
Bangle.js2: Tweak battery high mark again
Bangle.js2: Fix E.showScroller when there are less than 3 menu items
Bangle.js2: Bangle.off and .softOff now turn off touchscreen if it was on
Bangle.js2: Ensure antialiased line routines are built in
Bangle.js2: Add HRM wear detection (LED no longer turns on if HRM not on skin)
Bangle.js2: Add a 32 entry cache to speed up finding common files - improves app load times
Bangle.js: Ensure locale honours 12 hour setting (https://github.com/espruino/BangleApps/issues/892)
Bangle.js2: Ensure EXTCOMIN time for LCD is nearer 2us (from datasheet) (ref #2097)
Bangle.js2: New default JS firmware
Bangle.js2: Minify Bangle.drawWidgets
Bangle.js: Bangle.appRect now copes with widgets at the bottom
Bangle.js2: Fix >128 ASCII codes for 12x20 font (fix #2105)
Bangle.js: Add SPI flash read-after-write to verify write succeeded (fix #2109)
Bangle.js: Fix E.showMenu clear if background color is set (https://github.com/espruino/BangleApps/issues/1024)
Bangle.js: Re-add E.showMenu predraw callback (fix #2108)
Bangle.js2: Add hrmRd/hrmWr that allow you to poke the HRM directly
Bangle.js: Fix for previous SPI flash write verify when <4 bytes written
Bangle.js2: Add write protection for bootloader and softdevice to avoid accidental bricking
Bangle.js2: Bootloader now attempts multiple times to initialise ext flash, and waits longer (fix fw update app issues)
Bangle.js: Add Bangle.getHealthStatus("day") to allow automatic step counts for the current day
Remove for(of/in) for extremely constrained devices (Micro:bit 1 only)
Bangle.js: bootloader now doesn't start immediately after power off (can help with 100% flat battery)
2v10 : Bangle.js: Improved HRM calculations - swapped autocorrelation for bandpass filter
Bangle.js: Significantly improved step counting algorithm using bandpass filter (fix #1846)
Bangle.js: Ignore touch and swipe events when the LCD is off
Graphics: Fix 1bpp custom fonts on 2/4/8 bpp graphics Canvas not being the right colour
Bangle.js: Don't reset all peripherals when loading a new app, and only
turn peripherals off if unused 500ms after starting new app
Increase max arguments for Function.apply from 64 to 256
NRF52840: Create new NRF_GPIO_PIN_X_FAST as Nordic's gpio functions will no longer inline!
Graphics: Add .blit() to allow fast blits within a single Graphics instance
nRF52840: workaround for SDK15 bug that stops softdevice restart when WDT enabled
Disallow template strings in object decls like {`hello`:1} (fix #2006)
Bangle.js: Add support for global colour themes which affect g.clear/g.reset (fix #499)
Bangle.js: Switch beep/buzz to IRQs (keeps time correct even when JS is busy)
Add E.decodeUTF8 to allow UTF8 to be decoded into standard 8 bit characters
Util timer: account for 'drift' in timer when adding new tasks if running it continuously
Graphics: Allow 'scroll' method to only scroll inside clipRect
Bangle.js: if we restart with home button held down, ignore the 'button up' event
Remove Graphics.drawImages from non-Bangle.js builds to free up space
Pico: Remove SHA512 from build to free up space
Storage: fix issue where functions referencing flash weren't correctly relocated during compact (#2009)
Add support for rendering 3 bit images to 12/16 bit destinations
Ensure Serial1.unsetup can be called even if it doesn't appear to have been enabled
Puck.js: ensure self test only happens after hardware reset (fix #2001)
Bangle.js: Fix issue where long-press BTN3 while holding BTN1 would reload the app but wouldn't load configuration (eg not setting timezone)
Graphics: add .getBPP, and allow color blending (rather than copy) when drawing 2 bit images on any BPP Graphics instance
nRF52: If getPrimaryServices fails with NRF_BUSY, keep retrying after a delay (fix #2008)
Bangle.js 2: Fix getPressure memory leak
Graphics: Theme now only applies for LCD, not for JS/ArrayBuffer graphics
Graphics: Add dark boolean to themes to allow apps to update depending on bg color
Bangle.js: setUI now has 'clock' modes
Rename SMAQ3 board to BANGLEJS2
nRF52840: Remove ifdef around PHY_UPDATE_REQUEST - fixes BLE5 connections
Graphics: Allow g.drawImage to use ArrayBuffer Graphics as an argument
Bangle.js: Display small 'Loading...' screen to show something is happening when loading apps
Promise: Fix issue with .then().then(...) on an already-resolved promise (fix #2019)
Bangle.js: g.flip no longer keeps the screen awake, flipTimer renamed to inactivityTimer
Bangle.js 2: 'factory default' set of JS now included inside firmware
Bangle.js: Build in ANCS support (disabled by default)
Bangle.js 2: Working VC31 heart rate monitoring
Bangle.js: Push GPS events immediately after GPGSV (more portable/resilient to config changes)
At first boot, fully check Storage for validity (if not full, ensure remaining pages are 0xFF)
Storage: Ensure jsfIsStorageValid returns true when storage is valid, but full
Bangle.js: Add Bangle.getGPSFix to get last GPS fix without waiting for a listener
Merge experimental_compact_vars branch to reduce var sixe from 16 to 13 bytes in most cases.
Add JSVAR_FORCE_16_BYTE to allow experimental_compact_vars changes to be removed
Add JSVAR_FORCE_INLINE, and don't force lock/unlock/getters to be inlined.
Compiler has improved enough we save 10% code space and get marginally faster
Add ArrayBufferView.subarray for easily making subarrays (eg a.set(a.subarray(-1)))
Solve case where an ArrayBuffer set using the same array could duplicate entries (`a.set(a.subarray(),1)`)
nRF52: Fix 2v09 regression where clearWatch reset pin state, removing pullups
nRF52: BLE stack errors now reports a line number
nRF52: 'BLE task in progress' messages now give a readable name, not task number
MICROBIT1: Remove hardware SPI to save space. Software SPI still works
2v09 : Bangle.js: increase default advertising interval from 375 to 200ms to ease connections
Fix Math.acos for negative values (fix #1950)
nRF5x: Add callback param to 'NRF.restart', allowing code to be called with softdevice disabled
Bangle.js: fix require("locale").time(new Date()) for default locale
Now use exponents when printing doubles >= 1E21 or < 1E-6 (fix #1489)
Fix Regexp handling of unescaped '.' in character group: /[.]/ (fix #1948)
Now error if using (unsupported) RegExp backreferences
nRF52: Ensure SPI 1 byte DMA errata workaround isn't applied to non-52832 parts
nRF52: When outputting assertions, if we have an terminal device (eg LCD) use that
When load(filename) is used, set global variable __FILE__ to the filename
Util Timer no longer uses RTC - works based on estimated time from the hardware timer itself (fix #1749, ref #1444)
Pull in fixed SHT3C.min.js for RAK5010
Add support for relaying full touchscreen events in devices that support it
Fix flip-on-idle behaviour for non-Bangle.js smartwatch ports
Add support for buttonless bootloader (first boot only, times out after 5 seconds)
Fix emulator crash if Graphics.drawPoly used with odd number of points
Graphics.fillPoly now errors if >64 points (prev was 63)
Graphics: Support for palettes supplied in image strings
nRF52840: Ensure internal voltage regulator is set to 3.3v (not 1.8v default) at boot
Fix Array.forEach when deleting the item you're currently iterating over (fix #1962)
Bangle.js: StorageFile now uses 10x bigger chunks which reduces stress on Storage.list()
Storage.list now allows you to specifically request StorageFile, only ever reports first StorageFile chunk
Graphics: Allow colors to be specified as '#rgb' strings
Graphics: Antialiased lines now read the background color so overlap nicely
Graphics: Add fillPolyAA and use antialiased vector fonts (on platforms where AA is enabled)
Puck.js: Fix regression where IR LED was left on after transmission (fix #1969)
Graphics: Fix overdraw when drawing ellipses/circles
NRF52840: Use SPI3 by default as it's more capable/faster than SPI0
SMAQ3: Add support for unknown compass IC
Bangle.js: Make the 'home' button more configurable in code
Bangle.js: Add Bangle.softOff to allow the RTC to keep running
nRF52: Allow devices to remember the time between reboots (even if RTC is reset)
Microbit 2: Increase RAM from 64k to 128k
Bangle.js: Don't enter accelerometer power save mode if compass/barometer is in use
Watches: Allow streaming pressure data from Barometer
Graphics: Add antialias/colour blending for 24 bit buffers
NRF52840: Create new NRF_GPIO_PIN_X_FAST as Nordic's gpio functions will no longer inline!
nRF5x: reset BLE advertising after `load()/reset()` (fix #1975)
Bangle.js: Add accelerometer recovery for rare cases when accelerometer boots with corrupted address (fix #1972)
Bangle.js: Add app ID option to setXYZPower to allow apps to share devices (power is on as long as one app wants the device) (fix #1971)
Bangle.js: Add isXYZOn() functions
BLE: Allow 128-bit service data to be decoded (fix #1976)
Graphics: Fix 8 bit ArrayBuffer scroll not working correctly in some directions
Storage: Fix corruption issue with StorageFile write after a Storage compact (fix #1970)
Fixed dimmable backlight on non-Bangle.js watches
SMAQ3: Touchscreen is now powered off with Bangle.setLCDPower(0), auto-powers off after 30s
nRF52: Upon rebooting, reset time to 1970 if time looks corrupt
nRF52840: Don't use SPI3 unless ESPR_USE_SPI3 is defined (errata 195 means it draws an extra 1mA unless disabled!)
Bangle.js: apply g.drawImage fast path even if image goes to the edge of the screen
Graphics: Improve fillPolyAA for horizontalish lines, remove antialiased vector fonts (as won't work well on platforms without readback)
Fix invalid free caused by error inside a while loop condition (fix #1983)
Fix SIGFPE if using modulo with -1 (fix #1983)
Fix memory leak on Array.forEach/map/filter/etc caused by #1962 fix
Fix Espruino not sleeping when very low on free memory (fix #1986)
nRF52: Use 'low accuracy' GPIOTE for watches as we can shut down the high speed oscillator
E.getSizeOf() and trace() now don't recurse into references back to the global scope (makes sizes and traces far more useful)
nRF5x: Move from separate sdk_config.h to a single targets/nrf5x/app_config.h file
Original board: Remove Graphics.*Ellipse and StorageFile when networking enabled to allow builds
Update S132 Softdevice from 3.0.0 to 3.1.0 (fix #1999)
nRF5x: Allow Espruino builds with a configurable MTU - move Espruino boards to 53 byte (from 23) (#1998)
Fix issue parsing `r=>print((e=>{})(r))` (fix #1992)
Add DHE RSA key exchange for TLS/HTTPS (fix #1994)
2v08 : nRF52: Added option to build in I2C slave support
Fix Tensorflow aiGesture regression from 2v07 (re-add opcodes) (fix #1936)
Add support for > 1bpp custom bitmap fonts
Bangle.js: add drawLineAA and drawPolyAA for antialiased lines
Removed custom fonts for SAVE_ON_FLASH devices
Fixed BBC micro:bit show() regression from 2v07
Ensure Storage library is exposed on SAVE_ON_FLASH devices (fix micro:bit flash write)
nRF52: Fix issue where analogRead would stop E.getBattery from working
Fix setWatch debounce lastTime regression from 2v07 (fix #1902)
nRF52: CPU now sleeps when while UART/BLE data is waiting to be sent (fix #1938)
JSON.stringify now checks for potential stack overflow when stringifying (fix #1940)
Check for Stack overflow when Garbage Collecting giant linked list (fix #1765)
Added String.padStart/padEnd
Fix issue where JSON.stringify({ something: bool }) would output 'something' as a bool too
Bangle.js/Pixl.js: Ensure terminal is always the same color regardless of g.setColor()
Original Espruino Board: remove E.FFT in network-enabled builds (freeing up flash memory)
Storage compact now updates pointers stored in RAM so they still point to the correct address in Flash (fix #1881)
Bangle.js: Add debounce to the button used to wake Bangle.js up from sleep
Fix regex match with '-' that isn't a range: "1-2_A3".split(/[0-]/) (fix #1736)
Crypto: modified mbedtls SHA1 to reduce size from 3.5k to under 1k
Graphics: Fix for out of bounds ArrayBuffer scroll issue (fix #1946, #1947)
2v07 : Graphics.asImage() now contains buffer when bpp != 8 (fix #1863)
nRF52 SDK15: Fix NRF.setScan/findDevices/etc
nRF52: reduce input buffer space taken by advertising packets
Pretokenisation: reserved words can now be used as function names (fix #1868)
jslGetNextToken now avoids iterator clone for each token (fix #1857)
nRF52: fix instability when accessing ADC from IRQs and event loop at the same time (fix #1861)
Fix 0.0==null comparison (fix #1865)
WIZNet: add setHostname(), geHostname(), getStatus()
Fix XON not sent after reset() (fix #1872)
Remove USBSERIAL enum for non-USB devices
Shrink new vector font sizes to allow multi-line use (fix #1873)
Stop Object.setPrototypeOf overwriting Object.prototype sometimes (fix #1875)
Arrow functions now always overwrite `this` (fix #1878)
Implement Streaming Storage compaction to allow compact with less RAM (fix #1598,#1707,#1828)
jslTokenAsString now works for 'of'
Speed up Array.prototype.join (fix #1660)
Allow 'in' to be used with typed arrays (fix #1534)
Fix global regex issues when match may be 0 chars (fix #1888) (fix #1889)
Improve String.replace performance using iterator rather than repeated copy
Pixl.js: SDA/SCL constants should point to A4/A5, not D4/D5
Fix Graphics.fill/drawCircle lock leak
Fix issue when do..while loop condition has side effects
Bangle.js: Ensure SPI flash CS is disabled when sleeping/off
nRF5x: clear FPU interrupt before sleeping
micro:bit: Add support for LSM303 accelerometer/magnetometer
micro:bit: Add delays at first boot to wait for USB UART to init and connect vis USB
micro:bit: Re-added tab complete (enough space now)
micro:bit: Added a fake pin for LED/LED1 that uses the LED matrix
nRF52: Allow a cccd_handle of 0 for startNotifications
Bangle.js: Power down SPI flash when sleeping/off
nRF52: Use the best available hardware timer for PWM taking frequency into account
Fix delay in scheduling after initial setTimeout call (from 2v06 and later)
Align Tensorflow arena to 16 bytes - new Tensorflow requires this (fix #1914)
Fix ReferenceError when arguments[0] is used when an argument is undefined (fix #1691)
JSON conversion for console now removes quotes on key lengths bigger than 15 (63)
micro:bit: add Storage.write/etc even on space-constrained (SAVE_ON_FLASH) devices
Remove flash compaction code on SAVE_ON_FLASH devices to save some space
Fix occasional duplicate state changes when using setWatch with debounce (fix #1902)
JSON.stringify now outputs 'null' for non-finite numbers as the spec requires (fix #1919)
Update Tensorflow to latest version, fix return 0 issue on ARM release builds (fix #1918)
Bangle.js: Accelerometer poll handler now uses RTC app_timer, not TIMER1. 1mA->0.5mA standby current (ref #1920)
Bangle.js: SPI MISO is now input_pullup (shaves ~20uA)
Espruino WiFi: Fix startAP function when open and no password supplied
Bangle.js: Accelerometer now runs in low power mode (saving ~150uA)
Bangle.js: Peripheral polling now only fully wakes Bangle when an event requires JS processing (ref #1921)
Bangle.js: When not moved for 1 minute, slow down accelerometer poll interval from 80 to 800ms (fix #1921)
Ensure software SPI/I2C/Serial don't leak a variable when initialised
Fix delay in scheduling after initial setTimeout call (from 2v06 and later)
Espruino WiFi: Fix StorageFile on Espruino WiFi (use max storagefile size of 4k)
Espruino WiFi: Fix Storage compaction regression (introduced after 2v06 release)
Bangle.js: Fix backlight flicker regression if at part brightness (fix #1925)
Fix ArrayBuffer.sort with negative numbers (it's not just Array.sort!)
nRF52: Use the best available hardware timer for PWM taking frequency into account
Bangle.js: Report GPS HDOP (Horizontal Ditution of Precision => accuracy) values in 'GPS' event
Pixl.js: Remove SHA256 from build to free up a little extra code space
nRF52: Restarting softdevice no longer changes the system time by 5 mins sometimes (fix #1933)
2v06 : Allow `"ram"` keyword at the top of a function to allow it to be pretokenised and loaded to RAM
Don't store line numbers for pretokenised functions
Fix 1-byte overflow when using UDP (#1799)
Remove 1-byte padding in Graphics lib
Bangle.js: Make SPI flash memory map address configurable, and check end bounds (#1807)
Bangle.js: More SPI flash memory map address to 0x60000000 to avoid ARM/nRF52 registers
nRF52: Fix issue with fast Notifications causing Notification data to be duplicated
http://forum.espruino.com/conversations/345949
Bangle.js: allow custom splash screen with .splash file
Pixl.js: Fix E.showMessage
Puck.js v1: Fix regression that stopped Puck.IR(data) working - Puck.IR(data,D26,D25) required
Puck.js v2: Ensure FET is used for IR output, fix selfTest errors for IR and Blue LED
Bangle.js: Big speed improvements for 120x120 and 80x80 gfx modes
Enable Graphics arraybuffer optimisations on all but low-end devices
Add specific Graphics optimisations for 1 and 8 bit rendering
Bangle.js: drawImage - add fast path for non-transparent 1 or 8bpp image blit (fix #1794)
Graphics.drawImage docs improvements (fix #1812)
Fix issue where it was possible to get an address of a non-memory-mapped FlashString
Graphics.drawImage: Allow 8 bit palettes to be specified
Bangle.js: Remove dumping of hardware state - saves some flash memory
microbit: Remove dumping of hardware state - saves some flash memory
Bangle.js: fix 'short' time for built-in locale
Bangle.js: fix 'speed' units for built-in locale
Graphics.createArrayBuffer now honors `msb:true` if `bpp>8`
Graphics.asImage: handle >8bpp correctly (fix #1797)
Graphics.asImage: Allow 'string' output type, reference Graphics buffer if possible
STM32: Fix 2v05 regression in hardware SPI.write (RX timeout)
Graphics: fix lock leak in g.reset()/g.clear(1)
Graphics: added drawImages to allow layers of rotated/scaled images to be composited
Remove E.interpolate/2D (not used much, just using flash)
Bangle.js: use double math FFT to save a few bytes of flash
Storage.writeJSON (fix memory leak)
dump() is now aware of pretokenised code (fix #1821)
Merge jsvStringIteratorGetChar + jsvStringIteratorNext into jsvStringIteratorGetCharAndNext (fix #1816)
Fix 2v05 regression that stopped process.uncaughtException from working (had been moved to E.uncaughtException)
nRF52: If passkey or oob is set in setSecurity, ensure that the UART connection requires encryption (fix #1705)
Now report [ERASED] rather than ?[255] if we hit char code 255 while evaluating
Bangle.js: read `setting.json` at init and modify Bangle.beep/buzz behaviour accordingly
Tensorflow: remove some as-yet unused operators to free space
nRF52: Speed up bootloader, remove pauses on Pixl.js
Pixl.js: fix self-test/terminal print - write to screen immediately after newline unless in IRQ
Fix issue with iteration over arrays with negative entries (these should be converted to Strings)
Linux: improve command-line, allow recursive test directory and more than one test (eg wildcard + shell expansion)
Added new vector fonts supporting most of ISO8859-1
Graphics.fillPoly now uses 4 bit fixed point internally
nRF52: Fix 2v05 hardware SPI regression (chip errata when sending 1 byte)
Graphics.fillPoly now uses a more normal fill algorithm that doesn't attempt to fill to the top right (fix #1796)
Fix setTimeout/Interval accuracy when new timeouts scheduled within timeout (fix #1829)
nRF52: Fix 'BLE task 2 is already in progress' if disconnect called during connection process
Puck.js: Put accelerometer into lower power mode by default
Puck.js: Switch to IRQs for magnetometer (lower power consumption)
Improve Graphics.drawImage speed and simplify code by allowing fast path for non-rotated graphics
Tensorflow: updated to v2.2, removed un-needed ops (reduces size by 24k)
Puck.js: Fix Puck.magTemp();
Puck.js v1: Fix magnetometer reading after puck.magOn (2v05 regression) - use old software I2C implementation
I2C: Improve software I2C (now quickly forces I2C high before pullup, to help improve clock speed)
Bangle.js: Fix GPS-raw events to provde also u-blox UBX Protocol messages (fix #1838)
Bangle.js: Save RAM in GPS handling, allow arbitrary length data returned (fix #1843)
Tensorflow updated to current 'master' version
Bangle.js: Improve SPI flash speed by with specific function for reading and keeping CS asserted (fix #1849)
Bangle.js: Ensure BTN3 exits debug mode (fix #1842)
Bangle.js: Now warn if GPS data overflows (fix #1847)
Fix double unlock in load(filename)
Bangle.js: Fix occasional execution errors when executing from Flash (fix #1854)
Add Graphics.transformVertices()
Re-add Graphics.quadraticBezier for Bangle.js, move to integer math to halve fn size
Emscripten: (fake) Flash memory support
2v05 : Add Array.includes
Fix (Number.toFixed) rounding, eg (1234.505).toFixed(2)
nRF52: If a central is connected to Espruino but isn't reading from UART, don't block waiting to send data
ESP8266: reverse fix #1679
Added Graphics.getFont/setFont/getFonts
Added Graphics.getFontHeight
Added option to compile in 6x8 fixed-width fonts
Fix issue where Util Timer timers could break after a call to setTime
nRF52: Enable DMA for SPI send
Added option to build in TensorFlow Lite for AI
Documentation for modules now includes require('...') in the call type to be less confusing
ESP8266: warning: Empty loadable segment detected (fix #1690)
nRF52: Add NRF.nfcPair(...) and OOB pairing to allow tap to pair over BLE
nRF52: Add NRF.nfcAndroidApp(...) to launch an Android app on touch
Pixl.js remove SHA512 to make room for new NFC functionality
Graphics.setFont("4x6",2) will now double the size of a bitmap font
Graphics.drawImage can now take a String of data for an image (eg. direct from Storage)
nRF5x: Support connection to devices with RANDOM_PRIVATE_RESOLVABLE and RANDOM_PRIVATE_NON_RESOLVABLE addresses
Pixl.js: Move SCK pin used during Neopixel writes to ensure it doesn't interfere with BTN3
nRF52: Fix alignment issue with Nordic's SDK12 code that stopped passkey pairing from working sometimes
Storage lib now doesn't bother reading to end of flash to ensure pages are clear
Allow heatshrink compress/decompress to work even if flat buffers can't be allocated
require("Flash").write operations no longer need to be aligned
require("Storage").open added - for appendable files
Pixl.js: Removed AES functionality - unfortunately we're running low on space for it
Original Espruino Board: Removed Vector font and don't add rotated drawImage to save flash
nRF5x: Add NRF.filterDevices to allow scanned devices to be easily filtered after scanning
nRF52: Fix 'BLE task completed that wasn't scheduled' warning regression (peripheral disconnect)
Can now get a data pointer even from a single JsVar string (it doesn't have to be flat)
Add option to specify a palette when drawing images with drawImage
Add XON/XOFF flow control to Bluetooth LE UART (on by default)
Lower thresholds for XON/XOFF to give more headroom with devices that are slow to respond
Add a fast path for non-rotated non-scaled Graphics.drawImage
Add argument check for heatshrink compress/decompress
nRF5x: Ensure gatt.connect silently succeeds if we're already connected to the device
Add E.showMenu, deprecate Pixl.menu - use a common function to ease porting between devices
Added E.showPrompt, E.showAlert for Bangle.js
Pixl.js - check '.splash' file at startup and use it for splash screen if it's there
Improve free list ordering when Flat Strings are freed
Added E.defrag to perform defragmentation - still beta!
nRF52: fix issue where restarting the softdevice would reset the RTC
- fixes Bangle.js watchdog reset
nRF52: fix issue where advertising flags could get out of sync after SD restart
Bangle.js: fix units for GPS speed (was knots, now km/h)
Bangle.js: Add Bangle.setLCDBrightness
nRF52: Fix passkey pairing if setSecurity is after setServices
Bangle.js: EVents for 'swipe' and 'touch' on the touchscreen
Added ability to compile Espruino to JavaScript with Emscripten
Allow g.setColor/setBgColor to take hex Strings of the form `'#00ff00'`
Bangle.js: Added heart rate autocorrelation, setHRMPower and 'HRM' event
Bangle.js: New 120x120 and 80x80 high speed buffered modes
Fixed REPL to allow chars with char code >=128
Fixed lex tokenToString for 'break'
Bangle.js: add fake LED/LED1/LED2 as @allObjects suggested
Add Graphics.toColor, and allow 4 bit Mac palette to be mapped to 8 bit web palette
Add Graphics.setClipRect to allow draw ops to be restricted to a certain area
Bangle.js: add 'null' LCD mode to stop apps from drawing
Bangle.js: add Bangle.getLCDMode
Bangle.js: skip firmware version checks to save some bytes in bootloader
Graphics: new g.fillPoly to handle irregular polygons
Bangle.js: Bangle.setLCDMode now errors if it can't allocate a flat string (also garbage collects and defrags to try and ensure it can)
Graphics: drawEllipse/fillEllipse now work correctly for very small ellipses
Fix type compare of string and flatstring
Allow Storage.read to make partial file reads (fix #1744)
Fix SyntaxError when using pretokenise + getters (fix #1745)
Add Graphics.reset, and ensure it (and g.clear(1)) unreference custom fonts
Iterator cloners now take a reference to the iterator rather than returning it
Flash Strings: On Bangle.js allow JS code (and other Strings) to be accessed without loading them completely from Flash
Added E.CRC32 for easy testing of data validity
Add `E.on('kill'` event for executing code before load/reset/save/etc
JSON.stringify now escapes using the less efficient JSON subset of escape characters (fix #1737)
Allow optional `load("filename")` to load a JS file from Storage (was just `load()`)
Bangle.js: add Bangle.loadWidgets/drawWidgets
Bangle.js: Remove deprecated Bangle.menu
Ensure it's possible to get a solid background when using 4x6 font
Bangle.js: Add Bangle.showLauncher
Add append optimisation for string '+', and don't append to flat/native/etc strings (fix #1746)
ESP8266_4MB: add optional build flag FLASH_1MB for ESP8255 & ESP01s with 1MB flash
ESP8266: add optional build flag NO_FOTA to remove flash over the air functionality
Add Bangle.getCompass and Bangle.getAccel to get the latest compass/accelerometer readings without a callback
Fix `parseInt("0b",16)` as well as some other non-compliant behaviour (fix #1722)
Bangle.js: Disable touch buttons if screen off
Bangle.js: Don't send 'up' event for a button that was used to wake the screen
Bangle.js: GPS event.time set to undefined if GPS time is not initialised
Fix regression that removed exception reporting in console
Bangle.js: speed up bootloader progress bar
Bangle.js: fix problems turning off via bootloader sometimes
Bangle.js: improve power consumption when off, now ~0.08mA (fix #1727)
Bangle.js: add Bangle.setOptions({wakeOn*}) for when LCD should light
Bangle.js: Add 'twist' event and 'wakeOnTwist' (wakeOnTwist now default true, waveOnFaceUp default false)
Bangle.js/Pixl.js: Updated E.showMenu
Bangle.js: E.showMenu now has some colour, bigger, with next/prev indicators, and works with widgets
Pixl.js: Add E.showPrompt/Alert/Message (fix #1747)
Add .toJSON handling for JSON.stringify, and add Date.toJSON (fix #1754)
Remove broken Graphics.drawImage centerx/y (fix #1742)
Add Storage.writeJSON to avoid any confusion of writing arrays/numbers/etc
Bangle.js: Keep widget area free when using showPrompt/Alert/etc (fix #1756)
Add more info about flash memory to process.env/process.memory
Add Graphics.quadraticBezier()
Allow Graphics.setFont to be used with custom fonts (fix #1762)
Espruino WiFi: WiFi module now makes BOOT pin open circuit when sleeping - saves ~2mA
Add E.setConsole/getConsole to allow console to be moved (including to 'null')
Bangle.js: Ensure HRM is turned off in Bangle.off() (fix #1759)
Increase 'Storage' library's max filename size to 24 bytes (from 8)
Remove header.replacement in 'Storage' lib and just zero header.name
- increase filename to 28 bytes, but file search now more efficient
Bangle.js: Increase Storage area to full 4MB of flash
Bangle.js: NEEDS NEW APPS - Move away from using first char as file descriptor and use file extensions instead
Add StorageFile.getLength() to get the current length of a StorageFile
StorageFile also writes files with a 'JSFF_STORAGEFILE' flag (not currently used)
Storage.list() can now take a RegEx/string to filter returned results
MDBT42Q: Remove AES encryption libs by default to free up more flash memory
Microbit: Add SAVE_ON_FLASH_EXTREME flag to ensure builds keep working
Bangle.js: Added built-in 'locale' module to handle common conversions - this can be overwritten by a Storage File to change language
Storage.readJSON now has optional 2nd arg that stops it from creating exceptions on bad JSON
Bangle.js: Tweak LCD gamma curves to provide better gradients on new watches (fix #1758)
Bangle.js: fix BLE UART transmit bug when compiling for SDK14 (thanks @fanoush!)
Add euro symbol to 6x8 and 4x6 fonts as char code 128 (ISO10646-1)
Bangle.js: Use 'locale' library to translate E.showMenu/Prompt/Alert/etc
Bangle.js: remove graphical_menu lib and inline specialised version into E.showMenu
Bangle.js: Modify handling of widgets to allow variable width widgets (requires new widget JS)
Changed 6x8 builtin font to a modified Dina_r400-6 supporting non-ASCII characters
Bangle.js: Modify E.showMessage/Prompt/Alert to clear the entire screen and redraw widgets (fix #1771)
Bangle.js: Modify Bangle.drawWidgets to only clear the areas where widgets actually are, not the whole top&bottom bar
Kick Watchdog when erasing flash (it can take so long on 4MB external flash that it reboots)
KICKSTARTER BUILD
Bangle.js: Add 'meridian' to locale library
ESP32: add environment variable COMPORT to be used with make flash
Puck.js: v2 Support: Accelerometer/Gyro/temp
Puck.js: Self test now sets Puck.js BLE name if there's an error
Fix bitwise rshift by 0 to be unsigned (fix #1784)
Bangle.js: Don't load .boot0/1/2/3 if BTN1 is pressed
Puck.js: Allow D21(RST) to be used as normal IO pin
Fix recent E.getTemperature regression (fix #1788)
Fix pretokenise of RegExp literals (fix #1786)
Add ability to turn off software I2C clock stretching (not accessible from JS)
Puck.js: disable clock stretching for built-in sensors
Bangle.js: Now clear entire top/bottom row if there are widgets in it (fix #1790)
Add Storage check at startup and erase everything if storage looks corrupt (fix #1766)
Fix restriction on StorageFile filename length (8 to 28)
Fix array sort when compare fn returns floats <1 (fix #1798)
Fix Storage.write duplicate file issue in some rare cases (fix #1801)
Bangle.js: fix post-kickstarter issue adding widgets in bottom of screen (#1790)
Bangle.js: fix magnetometer self-calibration
Espruino Original: Removed Debugger, Tab complete, AT command networking from WIZnet networking build to free enough Flash
Espruino Pico: Added a normal build that doesn't contain CC3000 or WIZnet support
Espruino Pico: Removed Debugger and Vector font from WIZnet/CC3000 networking versions to free enough Flash
HYSTM32_28: Removed from build due to lack of interest and difficulty with increased firmware size
2v04 : Allow \1..\9 escape codes in RegExp
ESP8266: reading storage is not working for boot from user2 (fix #1507)
Fix Array.fill crash if used to fill up all available memory (fix #1668)
Fix NRF.requestDevice regression (clearInterval error) (fix #1669)
Smartibot devices now advertise on BLE as 'Smartibot abcd'
nRF5x: Leave digital input disconnected for analog read (saves power)
nRF5x: Return 'analog' as pin mode for any pin where input is disconnected
If watchdog is on and automatic, ensure that `reset()` keeps the automatic kicking going
Ensure that a console stays locked even after
Ensure interpreter flags (eg echo) are cleared after a `reset()`
nRF5x: When watchdog is on and automatic, automatically wake up often enough to service it
Fix Graphics.setFontBitmap on builds with no vector font (fix #1671)
Graphics.asBMP now takes account of bitmap rotation (fix #1672)
Raspberry pi pin numbering the same if using wiringPi or filesystem GPIO (fix #1673)
nRF52: Peer manager init errors from Nordic libs now not fatal
SDK15: Writing to flash now works
nRF52840: USB Serial works even for big sends, and device swaps to USB automatically
nRF52840: Allow Serial2 to be used
ESP8266: optimize rename-section for ESP8266_4MB board, freeHeap +2064 byte (fix #1679)
Fix corruption if Function.replaceWith called manually on something not a function (fix #1684)
Fix bug where '.clone' on a native function didn't copy arguments (fix #1685)
nRF52840: Fix input/pullup/pulldown pin modes on IO bank 2
Added `E.memoryMap` to allow on-chip registers to be mapped direct to variables (fix #1500)
2v03 : nRF5x: Fix issue when calling NRF.setAdvertising while connected via BLE (fix #1659)
nRF5x: 'dump()' not outputs `NRF.setSecurity` line if it has been called.
Ensure that converting a valid pin to a boolean always returns true
clearInterval/clearTimeout/clearWatch(undefined) now throw an error asking for just clearX()
- this stops code accidentally clearing all timers/etc if it uses a variable that is undefined
Allow NRF.setAddress to work even with services defined and a connection in progress
2v02 : Fix string index calculation when using some regexes (fix #1602)
Ensure Function.replaceWith puts scope after parameters (fix #1601)
Ensure Graphics.* return the Graphics instance, to allow call chaining (fix #1580)
Ensure DataView.byteOffset/byteLength is always set even if not specified (fix #1567)
Added HttpServerResponse.setHeader
HttpServerResponse now automatically sends `Connection:close` unless overridden (fix #1596)
Fix sign of RSSI reporting with setRSSIHandler
nRF52: Add docs for properties that weren't documented before
nRF52: Add ability to connect to device with passkey authentication
nRF52: Allow startNotifications to use Indicate if Notify doesn't exist (as per spec)
nRF52: Add option for static passkey pairing with NRF.setSecurity
ESP32: update EspruinoBuildTools to esp-idf V3.1.2 - fix Wifi connect issues (multiple ssid)
Revert PR #1459 as it broke neopixel functionality that worked previously
nRF52: Disconnect RX pin after UART test at boot (saves power when in deep sleep)
Serial.unsetup now sets pin state to STATE_UNDEFINED, which disconnects the pins internally
Removed modulo on `new Date` h/m/s/ms arguments as it seems desktop JS is fine with out of range values
Added `active` option to NRF.setScan/findDevices/requestDevices to allow scan response packets to be requested
Add I2C/SPI baud rate checks (#1619)
STM32: Add `E.setRTCPrescaler` to allow the RTC to be calibrated on Espruino Pico (fix #1607)
nRF52: Fix slow Bluetooth connection if previously disconnected while using low power connection interval (fix #1605)
Allow `Graphics.clear(true)` to reset state (font, color, etc) to default as well as clearing the screen (fix #1615)
nRF52: Fix setScanResponse regression from 2v00
nRF5x: Execute SWI1_IRQHandler when radio turns off instead of on+off. More efficient, fixed multiple advertising.
Smartibot build added
ESP8266: add CFLAGs to shrink build size (fix #1622)
ESP32: update EspruinoBuildTools to esp-idf V3.1.3
nRF52: Add FAT Filesystem support to MDBT42Q module
Now save file modification time with FAT
Fix segfault if `.clone` is called with `this==undefined` (fix #1628)
Fix issue outputting char codes <8 after outputting hex char codes
nRF52: Don't allow NRF.updateServices while a BLE restart for setServices is queued
nRF5x: Don't sleep if we received any events since last sleep (fix #1572)
Remove limit on the number of scopes that can be searched (fix #948)
String.split - improve docs, split with RegExp now inserts the text after the final match
RegExp: Add '|' operator (fix #1503)
Switch ARM toolchain to gcc-arm-none-eabi-8-2018-q4-major
Improve handling of timeouts for RAK8212 GPS
nRF52: Now create exception if advertising calls fail (but ignore when in IRQ)
nRF52: Add setAdvertising({},{scannable:false}) for disabling scan response
nRF52: Add note about connectable:false requiring >=100ms intervals
STM32: Fix issue where occasionally STM32 would be ~0.2s late waking from light sleep
ESP8266: add Wifi.connect options channel and bssid for faster AP connects (fix #1595, #1640)
Fix index in E.mapInPlace and improve docs
nRF52: Add NRF.getSecurityStatus to allow devices to detect the current state of the connection
STM32F4: Add Filesystem module
STM32F3: Fix broken build
nRF52: Fix nRF52840 advertising and remove duplicated advertising code
Fix Software Serial receive when the frame has to be decoded inside the IRQ (fix #1654)
Raise software serial receive buffer to 64 bytes (from 7)
nRF5x: Add security options to NRF.setSecurity (courtesy of @vkolotov)
nRF5x: Allow Serial1.setup(...) with only TX or RX pins
Vector font removed from Espruino Original WIZnet build due to lack of spare flash
2v01 : ESP32: update to esp-idf V3.1
Fix issues with Class Extends
Improve Tab Completions for extended classes
Fix Storage.readJSON/readArrayBuffer memory leak (fix #1532)
Fix potential out of bounds Graphics.scroll
Serial.setConsole now warns if not used on hardware Serial
ESP8266: implement hw_timer (fix #1511) to make soft serial and pwm work
Fix Storage write error when skipping pages (fix #1539)
nRF5x: When scanning, only use as much of IO queue as is needed
nRF5x: If BLE/NFC/etc data won't fit in IO queue, drop whole packet
Allow `a in b` to search 'fake' objects (#1534)
Improve fast path when iterating over Uint8Array/ArrayBuffer
Allow deletion of function properties (fix #1549)
Add `{callback:...}` option for `.write` style functions - improve docs.
ESP8266: deepSleep invalid microseconds (fix #1547)
ESP8266: ESP_FLASH_MAX for ESP8266_4MB is wrong (fix #1551, #1553)
Fix buffer overflow if bytesize/stopbits used in `Serial.setup` (fix #1510)
Ensure jsvNewFlatStringOfLength tries twice (even if GC doesn't release memory, it reorders the free list) (#1559)
ESP8266: Missing variable Flash Mode (--flash_mode, -fm) in ESP8266.make files (fix #1563)
ESP8266: Remove hack added to get around SDK 1.4 bug (fix #1568)
Reduce available hardware SPI/I2C instances to 1 on nRF52 (since this is all we implement atm)
Add E.dumpFragmentation to show memory fragmentation (only for debug builds)
Fix parsing of dates from before 1970
nRF52: Fix some regressions in requestDevice (flagged up by asserts in debug build)
Allow built-in objects to be created with `new X()`
nRF52: Ensure Bluetooth stack doesn't do a reboot for non-fatal errors (just report them to console)
BluetoothRemoteGATTServer.disconnect now returns a Promise
nRF52: Jump out of low power mode after less BLE activity (2 reads/writes in 10 radio packets) (#1546)
nRF5x: Fix NRF.setConnectionInterval when there's no connection (fix #1546)
Explicitly mention Espruino not supporting CASE after DEFAULT in error (fix #1570)
Ensure scope is saved for Class constructors (fix #1576)
Add setNBCellOn for RAK8211-NB (fix #1581)
Now escape chars <8 as octal, and add escape of vertical tab
Add Graphics.createArrayBuffer(... {interleavex:true}) to allow faster support for P3 LED panels
Add Graphics.fill/drawEllipse and move fill/drawCircle to use the same code
CC3000-specific build removed on Original Espruino board (lack of space)
2v00 : Allow changeInterval with large (>32 bit) intervals (fix #1438)
changeInterval now changes the interval immediately when it's called inside the interval it is changing (fix #1440)
Fix parsing of try..catch when not executing (fix #1439)
Add extra ReferenceError checks, even if variable is not used
Allow Ctrl-C out of while...continue loop (fix #1441)
Fix bug if using an undefined member of an object for for..in (fix #1437)
Allow for..in to iterate over prototype chains down from Array and Object
Add for(var i of array) to iterate over elements
Added getter and setter support
Stop parsing blocks if not executing (fix #572)
Fix stack overflow if interpreting a file full of '{' (fix #1448)
Fix exception when performing record access on object from getter (fix #1454)
Switch to non-recursive StringExt copy (fix #1451)
Fix rounding errors in fillPoly -> improve vector font rendering
Fix issue that caused 'dump()' not to report variables/functions on Pixl.js
Add E.lookupNoCase to allow searching case-insensitively for Object keys
Fix HTTP Chunked transfers when the server uses lowercase headers (fix #1458)
Fix TypedArray.indexOf (fix #1468)
Allow require('Storage').write('a','',0,15) (zero length data) (fix #1465)
edit() now chooses the shortest way to describe the function
Fixed bug when RegExp.match/test called on non-strings
Added Global isFinite
Add missing ArrayBufferView.filter
Added Array.find and findIndex (also for ArrayBufferViews)
Fix unreliable ArrayBufferView.indexOf (#1468)
Added String.startsWith/endsWith/includes (#1302)
parseFloat(".s") now returns NaN
Fixed /\S+/.test(" ")
Added Storage.getFree() to return available space
Enable E.setTimeZone on boards with very little flash memory
Lower saved code area to 2k on micro:bit (from 3)
Remove RGB colour handling in setColor on devices with low flash
Reduce available variable count on STM32VL - we were too low on RAM
Added Graphics.asBMP/asURL/dump - allowing easy debugging of Graphics via IDE
Allow '.then' on already-resolved promise (fix #1476)
Stop atob adding trailing 0s when strings are not a multiple of 3 long
Reconstruct start and end newlines when dumping multi-line functions
Fix regression parsing methods in classes on embedded (fix #1479)
nRF5x: Add options argument to NRF.connect and BluetoothDevice.gatt.connect, allowing a connection interval to be specified
nRF5x: Start renegotiating speed after 0.1ms, not 5s. Massively improves connect speed.
nRF5x: Now queue up to 5 UART TX packets per transmit interval (was 1 previously)
nRF52: Add Dynamic Interval Adjustment - default to 2x connection speed, but idle at 10x slower if not used for 2 minutes
nRF5x: Add NRF.setConnectionInterval() to allow connection speed to be set manually
RuuviTag: invert LED1, LED2 & BTN in software so LED.set() does what you'd expect
Console now doesn't print quotes around object keys if it's not needed
Added `E.toJS` to allow very compact JS data stringification (similar to `JSON.stringify`)
Output the current timer number as a comment in `dump()`
Don't print `=undefined` to console if line is empty
Added RAK8212 (and include SMS/GPRS code in RAK8211/2 builds)
Graphics.stringWidth now takes account of newlines
nRF52: NRF.requestDevice now resolves as soon as a device is found. Faster and better in congested areas
Replace use of obsolete 'usleep' function in Linux builds (fix #1455)
Add Ethernet.getIP/setIP callbacks for Wiznet to bring them in line with WiFi (fix #1482)
Fix Math.round for numbers > 32 bit (fix #1485)
Pixl.js menu now resets font alignment, and down arrow icon is fixed
Now check for ReferenceErrors in global scope
Fix Array.shift (returned a NAME, rather than the value)
Add sanity check for names returned from Functions and fix Array.pop
Stop characters getting dropped when pasting large amounts of data into Linux build
nRF5x increase JsSysTime accuracy to 2^-20 from 2^-16 - drastically improves Util Timer accuracy
Added support for Software Serial ports (for low baud rates, eg. 9600)
Fix JS state restoration issue (eg. Pixl.menu inside switch would cause errors)
Added Graphics.drawPoly
Add Graphics.asImage to turn a Graphics instance into an Image that can be used with drawImage
Add Graphics.createImage to allow creation of a 1 bit image direct from a string
Use 32 bit floats for E.FFT, not 64 (fix #1443)
Automatically shut down UART if both pin states are changed
Fix `setDeviceClockCmd: Unknown Device` when using `LoopbackB.setConsole()` on WiFi board
Fix non-UART serial regressions (after software serial additions)
Pixl.js: Add Pixl.setLCDPower to allow the LCD to be powered off, more than halving power consumption
nRF5x: Allow NRF.setScan and NRF.findDevices to take the same search filters NRF.requestDevice does (fix #1496)
Fix buffer overrun if we have to reallocate a pointer to argument lists when calling a function (fix #1491)
Fix stack overflow if executing regex full of hundreds of open brackets (fix #1487)
Fix issue where STM32F4 USB could lock up if TX during heavy RX
Improve `E.mapInPlace` docs, and allow it to work with no map (eg pass straight through)
Added non-standard Uint24Array, because it's very useful for RGB
ESP8266: add CFLAGs to shrink binaray files (fix #1499)
ESP8266: fully integration of analog pin A0 (fix #1495)
ESP32: update sdk to esp-idf 3.0.1, set Espruino build tools back to master branch
Allow btoa to work for arrays as well as Strings (fix #1509)
Allow E.mapInPlace to merge bits from multiple source elements, also add option for msb/lsb first
Remove Graphics.scroll/drawCircle/fillCircle on devices with low flash to allow builds to fit again
Remove BluetoothRemoteGATTCharacteristic.writeValue on NRF51 (accidental inclusion - it's not required)
Double IO buffer size to 256 (1k bytes) on boards with 96k of RAM or more (or NRF52)
nRF5x: allow arbirtary baud rates to be specified for UART
On devices with low flash, ensure atan2 uses the slower/smaller atan implementation
Move FFT back to 64 bit if low flash (it uses less memory!) and optimise for flash space
Remove new Graphics.createImage/asBML/asURL/dump on Original Espruino Board (not enough space)
Remove Olimexino from build (too difficult to slim down build and very low usage)
Remove Software Serial from boards where we're low on flash
Increase size of saved code area from 3*4k to 10*4k on RAK821x boards
Fix 'Can't extend undefined' when using Object.setPrototypeOf on a function
nRF52: Added NRF.HID event for two-way BLE HID communications
nRF5x: Remove multiple writes per connection interval (more trouble than the speed improvement is worth)
Fixed hang if trying to allocate Storage greater than total storage size in a fully erased Storage area.
Pixl.js: Fix 30s pause when closing sockets on WIZnet W5100 (fix #1306)
Remove HASH/hashlib from all builds as it was confusingly in some and not others. Now use 'crypto'
require('crypto').SHA1 is now JS in Espruino Original to cut down on the flash required
Added 'heatshrink' library to expose built-in heatshrink compression to users
Fix assert fail when calling Function.apply with an Object with non-numeric keys
Fix issue when AT lib has to process multiple custom line handers in one packet
Espruino WiFi: Fix unreliable send when receiving lots of data on another socket
Espruino WiFi: Only rename `EspruinoWiFi` to `WiFi` if not found (allows easier debug)
Check Flash Storage for modules when using `require`
Add 'bits' option for Software SPI
STM32 reset pin IRQs before storing the state - makes lost setWatches far less likely
Ensure that setBusyIndicator updates output state after the very first initialisation.
MDBT42Q: Add LED2 var in the Espruino interpreter, but don't use it for the bootloader
ESP8266: release heap used by logDebug(true) (fix #1508)
ESP8266: remove SHA256 SHA512 (fix #1517)
Ensure `Date.getTimezoneOffset()` returns the correct timezone offset (fix #1515)
Search for and execute files '.boot0'/1/2/3 in Storage at boot time if they exist
Pixl.js: reduce saved code area to 9 x 4kb to allow for extra features
ESP8266: switch to SDK 2.2.1 (fix #1207)
Fix Serial port path regression on Linux, and add docs