4 Most of the leJOS functionality is now present, so this has been declared a beta release.
6 Lawrie Griffiths and Michael Wiedau have added:
8 - NXT to NXT Bluetooth comms.
10 Lawrie Griffiths has added:
12 - Multi-level StartUp Text menu
13 - Connection by address on the nxj and nxjupload utilities
15 Roger Glassey has added:
18 - Some improvement to Motor speed control
20 Andre Nijholt and Brian Bagnall have added:
22 - Support for the J2ME MIDP LCD user interface and graphics
24 Ranulf Green has added:
26 - Comms proxy included NXTSocket class
28 Patai Gergely and Lawrie Griffiths have added:
30 - Playing sound files (8-bit WAV)
32 Brian Bagnall has added
34 - Fixes to Windows batch files to allows spaces in NXJ_HOME
35 - Backward compatibility lejosdl and lejosfirmdl scripts
36 - Some improvement to Lego Communications Protocol support.
41 This is the first firmware release of leJOS NXJ. It includes a flash file system
42 and a menu system, written in Java.
44 Brian Bagnall and Roger Glassey have added:
46 - A flash file system including implementations of java.io.File,
47 FileInputStream, and FileOutputStream.
48 - CompassPilot and CompassNavigator
50 Lawrie Griffiths and Roger Glassey have added:
52 - The StartUpText menu system that supports executing and
53 deleting programs, and LCP commands with NXJ extensions
54 over USB and Bluetooth
55 - Java streams over Bluetooth and USB
57 Lawrie Griffiths has added:
60 - Flash native methods
61 - Working flash build of leJOS NXJ
62 - Support in the VM for running a Java start-up menu
63 - Improved LCP support including file commands
64 - Improved Bluetooth support including setting the NXT name
65 - The pccomm library including Windows and Linux Bluetooth and
66 USB comms drivers. This incorporates some of the functionality
68 - The pctools library of nxj tools including nxjbrowse
69 - Ant build files for all the samples
71 - Bluez JNI library based on the iCommand version
72 - nxjflash utility based on David Anderson's fwflash
77 - This release is similar to 0.1alpha in that it still runs in RAM under SAMBA.
78 - It adds partial support for I2C, Bluetooth, and sound, and greatly improved Motor
79 control and navigation.
80 - The API is substantially revised
82 Charles Manning has added:
84 - I2C support (reads only)
86 Lawrie Griffiths has added:
88 - Bluetooth support (PC to NXT)
89 - Sound support (playTone, single volume)
90 - Native methods for I2C
91 - Ultrasonic sensor support
92 - Refactored API and native methods
93 - new samples (BTRespond, updated View sample etc.)
95 Roger Glassey has added:
97 - Improved Motor class
98 - New Pilot class for steering control
102 Roger Glassey and Brian Bagnall have added:
104 - New TachoNavigator class and Navigator interface replacing previous navigators
106 Brian Bagnall has added:
108 - javax.microedition.lcdui.Graphics class
109 - Support for third party I2C sensors (ColorSensor, CompassSensor etc.)
112 Lawrie Griffiths and Brian Bagnall have added:
114 - Support for Lego Communications Protocol
115 - Partial support for iCommand (no files)
116 - Partial support for Bluetooth utilities that work with the standard Lego firmware
117 (This includes the Lego Mobile Application)
122 - First alpha release for the NXT
123 - The lejos VM is essentially the same as lejos 3.0 for the RCX
124 - The code is now held in a subversion repository, not CVS
125 - This release runs under the SAMBA boot monitor and executes code from RAM
126 - You must do a long reset on your NXT to go into SAMBA mode
127 - It makes no use of Flash memory
128 - The VM and Java binary are downloaded together by the runjava command
129 - The NXT powers down 5 seconds after finishing a program and the program is lost from memory
130 - It has been tested on Linux and Windows
131 - It has no support for Sound or Comms
132 - The API has changed substantially to support the NXT
133 - The Motor classes has new methods to support the inbuilt tachometer
134 - Motor also supports regulated speed control methods: setSpeed, setRegulation, rotate, rotateTo.
135 - Motor.setSpeed() replaces Motor.setPower()
136 - There is a class for each sensor, and variant for legacy RCX sensors
137 - The Sensor class is replaced by a Port class
138 - SensorListener is replaced by PortListener
139 - The RCX touch and light sensors are supported, but not the rotation sensor
140 - RCX motors are supported
141 - I2C sensors such as the Ultrasonic sensior are not supported
146 - leJOS supports Lunix kernel 2.6 now
147 - There has been a major restructuring and refactoring of leJOS' classes
148 - The single "lejos" command for linking and downloading programs in one step is available again
149 - The tutorial is part of the leJOS release now (see doc/tutorial)
150 - The third party libraries have been factored out to a "3rdparty" folder
151 - There is a folder "check" now that contains a script for checking the distribution after having installed it
153 Known compatibility to 2.1.0 issues:
154 - the Tower() constructor without port argument is no longer supported (for it lead to errors)
155 - the Tower methods return no longer error codes but throw exceptions in case of an error/exception
156 - Tower.send(byte[],int) is deprecated now and no longer public
162 Paul Andrews has added:
163 - Activity class in josx.robotics
165 Lawrie Griffiths has added:
166 - linker changes to remove some unused methods and hence reduce program
168 - bug fixes to josx.rcxcomm particularly to RCXPort with serial towers.
169 - a new LNP class that supports a Lego Network Protocol style of API
170 including listening on multiple ports.
171 - a vision API based on the Java Media Framework similar to the one that
172 comes with the Lego Vision Command product.
173 - remote execution of Java methods sufficient to support the Vision API.
174 - example programs using the Vision API for motion, color and light
175 detection and remote method execution.
176 - Java versions of the lejos tools, which use the josx.rcxcomm package.
178 Matthias Paul Scholz has added:
179 - a new remotecontrol package in josx.platform which handles incoming messages from
180 the LEGO remote control or by Maroc (the associated emulator). For details and a
181 description, see http://mp.scholz.bei.t-online.de/lejos.
182 - a new example file (RemoteControlTest.java) for this in the examples\remotectl section
184 Markus Strickler has added:
185 - enhanced support for USB on Mac OS X including josx.rcxcomm
186 - fixed Makefile for picking up JNI headers on Linux
188 Markus Strickler & Andy Belk have added:
189 - fixed Makefiles for Mac OS X 10.2
191 David Glance has added:
192 - Support for USB on Linux
198 Paul Andrews has added:
199 - Priority inversion avoidance to the thread scheduler.
200 - Variable thread stack sizes.
201 - Code layout modifications to remove the motor twitching introduced in 1.0.5
202 - Various minor code/build tweaks to reduce the size of the VM.
203 - Minor fix to the 'lejos' command to enable multiple levels of
204 verbosity (syntax -verbos[=<n>]).
206 Markus Strickler has added:
207 - Experimental support for USB on MAC OS X
209 Brian Bagnall has added:
210 - Modified trig functions in Math class - they are now 10x faster.
211 Code donated by Paulo Costa
212 - Support for floats in DataInputStream and DataOutputStream
214 Lawrie Griffiths has added:
215 - Decoupling of ListenerThread from Sensor, Button and Serial, so that these
216 classes are not included when they are not used.
217 - Low level comms (LLC) that allows single bytes to be sent and received
218 over IR, without being limited to the Lego firmware protocol and opcodes
219 - A re-implementation of josx.rcxcomm.RCXPort using LLC which is faster
221 - A similar re-implementation of RCXInputStream and RCXOutputStream.
222 - An abstract interface - PacketHandler - for creating your own multi-layer
224 - Partial implementations of the LegOS Networking Protocol (LNP) Integrity
225 and Addressing layers using the PacketHandler interface.
226 - A re-implementation of the 1.0.5 RCXPort protocol, called RCXF7Port -
227 this uses Serial not LLC on the RCX.
228 - An Abstract RCX port interface - RCXAbstractPort - for creating ports using
229 any protocol, and implementations: RCXPort, RCXF7Port, RCXLNPPort, and
231 - Partial support for point-to-point connections to multiple RCXs using the
232 LNP addressing protocol via RCXLNPAddrPort of direct use of the packet
234 - Versions of the SensorReader examples using all the above protocols.
235 - A version of javax.servlet.html for writing lejos Web servers.
236 - Example servlets including one that sets and reads Sensors via URLs.
237 - An Integer class that implements toString(int).
238 - Additional String methods and a new StringUtils class.
239 - Removal of memory leaks in Button.waitForPressAndRelease and TextLCD.print.
240 - New floatToIntBits and intBitsToFloat native methods to support data streams.
241 - Fixes and minor enhancements to josx.rcxcomm.
242 - Improvements to apidocs including the inclusion of josx.utils.
247 Brian Bagnall and Lawrie Griffihs have added:
248 - the josx.rcxcomm package for stream-based communication between PC and RCX
250 Lawrie Griffiths has added:
251 - a version of java.net building on josx.rcxcomm
253 Brian Bagnall has added:
256 Juergen Stuber has added:
257 - P1 one remote control now starts program (the one selected by Prgm)
258 - added memory regions + 3K extra memory
261 - writeShort method in Native
262 - moved methods from Native to Memory and ROM,
263 and from ROM to Battery and MinuteTimer
264 - removed Runtime as special class
265 - corrected bug in scheduler that could interrupt wrong thread
266 - renamed class josx.util.Test to Assertion, method assert to test etc.
267 to avoid name clash with JDK 1.4 reserved word assert
272 Juergen Stuber has added:
275 Paul Andrews has added (with a lot of help from Martin Nielsen):
276 - Number formatting to StringBuffer
277 - delete() method to StringBuffer
278 - Fixed Math.log() and Math.exp() to handle a much larger range of numbers.
283 Paul Andrews has added:
284 - Fixed application download code. Fewer hangs now.
285 - Added experimental USB support to firmdl and lejosrun. Set RCXTTY
287 - Added progress indicator to lejosrun.
288 - Fixed uninitialised variable and boundary condition in
289 interpreter that could have prevented task switching.
290 - All input listeners now use one thread.
291 - Added Proximity Sensor Class
293 - Added more accessor methods to sensor and motor classes.
295 Juergen Stuber has added:
297 - idle_hook() in interpreter
302 Paul Andrews has added:
303 - Added Runtime class so that heap size and free memory can be
305 - Added Object.wait()/notify()
306 - Added thread priorities. Scheduler will always run threads
307 of a greater priority in preference to those of a lower priority.
308 - Added daemon threads.
309 - Added ability to interrupt sleeping/waiting threads.
310 - Added System.exit().
311 - Added a 'Poll' class to monitor changes of sensors and buttons in
312 the VM (i.e. a call that blocks until a state change occurs).
313 - Changed Sensor and Button listeners to use Poll.
314 - Changed Sensor and Button listener threads to be daemon threads.
315 - Modified 'View' example to update display whenever a sensor state
316 changes rather than only when a button is pressed.
317 - Modified native method name mangler so that native methods can
319 - Added default constructor to StringBuffer so that expressions of the
320 form "string1" + "string2" will compile.
321 - Added several new exceptions to support all of the above.
322 - Added the 'final' keyword to API classes where Java 2 normally has it.
323 - Added Test class for performing assertions.
324 - Fixed bug in memory allocator that failed to detect a full heap.
325 - Added subsumption architcture examples using old and new threading.
326 - Added '-n' option to lejosfirmdl so that the JVM size can be checked.
327 - Fixed up code to remove warnings when compiling with GCC 3.0.
328 - Added instructions on building with CygWin1.3.2 and GCC 3.0.
329 - Modified code in several places to reduce footprint.
330 - Modified compile options to reduce footprint.
331 - Reduced footprint to 16k
333 Juergen Stuber has added:
334 - Fixed rotation sensor mode.
335 - Modified main loop to check only one flag for increased speed.
337 - Added performance test to examples.
338 - Internal changes to button and sensor listener code to make it smaller.
340 Brian Bagnall has added:
344 leJOS 1.0.1 (not released separately):
345 --------------------------------------
347 - Fixed bug in java.util.Vector: NoSuchMethodError after 7
349 --------------------------------------------------------------
350 - Phil Berry has contributed some documentation (see
351 docs/phil_berry) and more meaningful trace output
353 - Hajime Murao reporded a bug in jtoolexec.c. The first
354 argument was not initialized properly, which
355 means that in some systems (e.g. W2K) you'd see a message
356 saying that lejosc was unable to execute javac or something
357 to that effect, with no apparent reason.
362 - Removed gcc's -O2 option from unix_impl/Makefile, as
363 it was crashing gcc 2.95.2.
364 - Added Christophe Ponsard's remote control example,
365 Ryan Vander Bijl's hworld example, and Reinhard Schiedermeier's
366 example on RCX-to-RCX communication (serial2rcx).
367 - Added a few methods to the Motor class, based on
368 suggestions sent by Rune Berge.
369 - Copied the entire util/firmdl directory from legOS 0.2.4
370 into tools/firmdl, and made minor modifications to it.
371 This should fix the infamous "Permission Denied" bug.
372 - The emulation tool was crashing when string constants
373 were used, due to a byte ordering problem which is now
375 - Considerable performance improvements for certain
381 - Fixed a multi-dimensional array allocation bug.
382 - Brian Bagnall's performance improvements for java.lang.Math.
383 - Fixed a bug in sqrt.
388 - Multi-program downloading. All programs are linked and
389 downloaded in one shot and override previously downloaded
390 programs. Use: lejos Class0,Class1,...
391 - Auto power off, but only while in program-download mode.
392 - Increased default stack size.
393 - Brian Bagnall's latest changes to Math (log, exp, sqrt, and more!)
394 - Changed memory allocation and deallocation routines, in preparation
395 for upcoming implementation of garbage collection.
396 - Max array length is now 511 (was 255).
397 - Linker warns about truncated long and double constants.
398 - Battery power shown as percentage in program-download mode.
399 - This should now work: To kill a running program, hold Run while
401 - Miscellaneous bug fixes (e.g. a js.tinyvm.Sequence bug reported
407 - Significant changes to Sensor API. Sensor.setTypeAndMode()
408 should be called before using a Sensor. Sensor.getPercentageValue()
409 is no longer there. SensorListener only has one method.
410 - Performance of low-level method readSensorValue has
411 improved by at least a factor of 6.
412 - There is only one global thread that dispatches events to
413 SensorListener's, which will also improve performance
414 considerably, and may even prevent certain race conditions.
415 (Having only one thread for sensor events was once mentioned
416 by Reinhard Schiedermeier).
417 - java.lang.Math.atan(double), contributed by Brian Bagnall.
418 - Linker checks whether entry class has a main method.
419 - Forced persistence across runs was taken out, i.e. all memory
420 is reinitialized every time you rerun a program.
421 - Prgm-On/Off does nothing. Run-On/Off kills a running program.
422 - Emulation tools have been renamed.
427 - Added Brian Bagnall's java.lang.Math class.
428 - Fixed bug in the way the linker was writing doubles.
429 - Optimized native method calling. About 30% performance
431 - Found bugs in handling of stack by some native methods.
432 This might have been causing programs to misbehave.
437 - ButtonListener support.
438 - Fixed a linker bug: it was dumping a stack trace if
439 one of the zip/jar entries in the classpath wasn't found.
440 This bug was reported by E. Harshbarger.
441 - lejosc and lejosp will work with Java 2 compilers only.
442 For JDK 1.1, use lejosc1 and lejosp1. The problem was
443 that java.util.Random couldn't be used with Java 2.
444 Reported by J. Knudsen.
445 - Changed Random(int) to Random(long).
446 - Fixed memory leak. Thread stacks were not getting deallocated
447 properly on program death.
448 - Fixed Makefiles and other things to make leJOS installable
454 - Distributing CYGWIN1.DLL in the bin directory.
459 - leJOS is born out of TinyVM. Versions starting
460 with 0 are TinyVM versions, whereas versions starting
461 with 1 are leJOS versions.
462 - Marking references in stack.
464 - Caught up with TinyVM. This is ongoing. Refer to
465 TinyVM release notes for 0.1.4 and up.
466 - Scripts converted into executables.
467 - Native Thread.sleep() and System.currentTimeMillis().
468 - Various other enhancements.
473 - Found that the hello example did not compile in
474 the last version. Fixed it.
476 - Decided to make the firmware show battery power
477 whenever it enters program-download mode.
479 - Fixed virtual method linker bug. (The linker was
480 unable to find certain virtual methods in classfiles
481 compiled with JDK1.2.x).
483 - Apparently fixed On/Off bug. (The LCD is not cleared
484 by shutdown_buttons in some RCXs).
486 - Got rid of TINYVM_HOME.
488 - TINYVMPATH is no longer necessary. CLASSPATH is
491 - More appropriate message for linker failure when
492 instanceof or checkcast of array classes is
495 - Multi-dimensional array allocation was broken.
498 - Fixed checkcast bug. (It was not allowing casts of
502 Test13 creates 4238 objects.
503 Firmware download count: ~1020
508 - Fixed serial comm bug. (If you tried to download
509 a program to the RCX while another program was
510 running, the transferred data could clobber
511 program memory. TinyVM is now shutting down
512 serial communications right after a program is
515 - Added a couple dummy classes to satisfy the
516 jikes compiler. Users simply have to set JAVAC
517 to "jikes". (Jikes is a really fast Java compiler
520 - Changed implementation of Sensor.readSensorValue.
521 Reading values from sensors should be more
522 efficient now. (I might have to adjust the rotator
525 - Publicized the SensorListener interface and
526 Sensor.addListener. It probably still needs to
527 be optimized for performance.
529 - Added examples to some classes in the API
532 - Removed "queued" parameter from most methods in
533 Sound. It really didn't make sense to have it
534 in some APIs. Hopefully that won't be much of a
537 - Removed previously deprecated APIs from ROM.
538 Again, sorry if this affects you.
540 - Fixed MONITORENTER bug. (It was not throwing
541 NPE on null monitors - it was crashing instead).
543 - TinyVM's linker is now also a loader: The -d
544 option will download the program to the RCX.
546 - TinyVM's firmware is now listening for the
547 standard "Delete Firmware" opcode (0x65/0x6d).
548 Consequently, Prgm-Run On/Off is no longer
549 useful, so it has been removed.
551 - tvmfirmdl doesn't need an argument now.
553 - Added the Serial API and a corresponding example.
556 Test13 creates 4262 objects.
557 The firmware download count is about 1000.
562 - Fixed PUTSTATIC bug. (Setting a static field
563 in uninitialized class could produce subsequent
566 - Fixed exceptions bug. (Very critical bug:
567 exceptions were not pushed on the stack before
570 - Changed RCX API so that its style conforms
571 a bit more with other Java APIs. Namely,
572 depracted routines in ROM, and split them up
573 into LCD and Sound, which have more convenient
574 APIs. Removed some ROM routines, which hopefully
575 haven't been used too much yet. Class Native
576 now contains native APIs. ROM contains certain
581 - Improved the usability of the firmware a bit.
582 Basically, you can now press the On/Off button
583 to turn off the RCX and kill running programs.
585 - To continue on exception "traces" you have to
586 press On/Off instead of View.
588 - TinyVM has been ported to JDK1.2. This required
589 a couple of fixes under jtools.
591 - Footprint: Test13 can create 4338 empty objects
592 (17352 bytes of allocation space).