emc2 uses nml to communicate between milltask and the user interface programs such as axis, tkemc, and halui. nml is based on buffers with layout set at compile time, and on local systems I believe that these are actually implemented through a shared memory method. However, there is also a network mode which can in principle allow the user interface to operate on a different machine than milltask.
emc2 uses rtapi for software that has to run in realtime, and for software that is not realtime but must communicate with it (e.g., the shared memory buffer between milltask and motion). hal, which relies on rtapi, is also convenient to use for communication between non-realtime parts of emc, for instance between pyvcp and halui, because pins can be connected via signals in an ad-hoc fashion, rather than having to recompile the software to create new items in the status buffer or new commands for the command buffer. sometimes you will see references to 'ulapi'. 'ulapi' is an API which is a subset of 'rtapi'. 'ulapi' runs in userspace and has no realtime guarantees. It allows HAL userspace components to be written without forcing the programmer to learn two different APIs. Finally, there is sim_rtapi. This is an impelementation of enough of the RTAPI API to run HAL and emc2 which resides entirely in userspace, does not require the insertion of modules or any other action that can't be undertaken by regular users, and which provides no realtime guarantees. Because this mode cannot directly access hardware, and because it has no realtime guarantees, it is only useful for debugging non-hardware-driver components and for running emc's "sim" family of configurations to test and preview gcode on systems without the realtime kernel installed. None of nml, rtapi or ulapi can be dropped from emc without extensive work and without losing features. For instance, dropping nml means rewriting all the user interfaces to use something else in hal or rtapi for ipc (a mininum of thousands of lines to change and test) and would lose the (infrequently-used) possibility of a remote UI. Dropping hal means losing the flexibility to reconfigure emc in the myriad ways that are currently possible. Dropping rtapi means rewriting hal directly on top of a specific realtime kernel API such as rtai, making future porting to new environments harder. Dropping ulapi means forfeiting the ability to write HAL components in userspace, with no obvious benefit. Jeff ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Emc-users mailing list Emc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/emc-users