Skip to content
TODO 121 KiB
Newer Older
  Title:       RAW WINDOW AUTORAISE
  Description: Auto-raise only applies to NXTK windows. Shouldn't it also apply
               to raw windows as well?
  Status:      Open
  Priority:    Low

  Title:       AUTO-RAISE DISABLED
  Description: Auto-raise is currently disabled in NX multi-server mode.  The
               reason is complex:
               - Most touchscreen controls send touch data a high rates
               - In multi-server mode, touch events get queued in a message
                  queue.
               - The logic that receives the messages performs the auto-raise.
                 But it can do stupid things after the first auto-raise as
Gregory Nutt's avatar
Gregory Nutt committed
                 it operates on the stale data in the message queue.
               I am thinking that auto-raise ought to be removed from NuttX
               and moved out into a graphics layer (like NxWM) that knows
               more about the appropriate context to do the autoraise.
  Status:      Open
  Title:       NxTERM VT100 SUPPORT
  Description: If the NxTerm will be used with the Emacs-like command line
               editor (CLE), then it will need to support VT100 cursor control
               commands.
  Status:      Open
  Priority:    Low, the need has not yet arisen.

Gregory Nutt's avatar
Gregory Nutt committed
  Title:       PER-WINDOW FRAMEBUFFERS
Gregory Nutt's avatar
Gregory Nutt committed
  Description: One of the most awkward things to handle in the NX windowing
Gregory Nutt's avatar
Gregory Nutt committed
               system is the re-draw callback.  This is difficult because it
               requires ad hoc, custom logic to be able to do the redrawing
               in most cases.

               One solution would be to provide a per-window framebuffer.
               All rending would be performed into the per-window framebuffer
               and the rended bits would be copied the LCD or framebuffer
               device memory on demand when the redraw is required.

               This would (a) greatly simplify the graphics interface, (b)
               greatly improve redraw performance, and (c) enable a more
               generic use of the windowing.  The downside would be a large
               usage of memory to hold all of the framebuffers, one for each
               window.
  Status:      Open
  Priority:    Low, of mostly strategic value.

Gregory Nutt's avatar
Gregory Nutt committed
  Title:       VERTICAL ANTI-ALIASING
  Description: Anti-aliasing is implemented along the horizontal raster line
               with fractional pixels at the ends of each line.  There is no
               accounting for fractional pixels in the vertical direction.
               As a result lines closer to vertical receive better anti-
               aliasing than lines closer to horizontal.
  Status:      Open
  Priority:    Low, not a serious issue but worth noting.  There is no plan
               to change this behavior.
Gregory Nutt's avatar
Gregory Nutt committed
  Title:       WIDE-FONT SUPPORT
  Description: Wide fonts are not currently supported by the NuttX graphics sub-
               system.  There is some discussion here:

                 https://groups.yahoo.com/neo/groups/nuttx/conversations/topics/3507
                 http://www.nuttx.org/doku.php?id=wiki:graphics:wide-fonts

  Status:      Open
  Priority:    Low for many, but I imagine higher in countries that use wide fonts

Gregory Nutt's avatar
Gregory Nutt committed
  Title:       LOW-RES FRAMEBUFFER RENDERERING
  Description: There are obvious issues in the low-res, < 8 BPP, implemenation of
Gregory Nutt's avatar
Gregory Nutt committed
               the framebuffer rendering logic of graphics/nxglib/fb.  I see two
Gregory Nutt's avatar
Gregory Nutt committed
               obvious problems in reviewing nxglib_copyrectangle():

               1. The masking logic might work 1 BPP, but is insufficient for other
                  resolutions like 2-BPP and 4-BPP.
               2. The use of lnlen will not handle multiple bits per pixel.  It
                  would need to be converted to a byte count.

               The function PDC_copy_glyph() in the file apps/graphics/pdcurs34/nuttx/pdcdisp.c
               derives from nxglib_copyrectangle() and all of those issues have been
               resolved in that file.

Gregory Nutt's avatar
Gregory Nutt committed
               Other frambuffer rendering functions probably have similar issues.
Gregory Nutt's avatar
Gregory Nutt committed
  Status:      Open
  Priority:    Low.  It is not surprising that there would be bugs in this logic:
               I have never encountered a hardware framebuffer with sub-byte pixel
               depth.  If such a beast ever shows up, then this priority would be
               higher.

patacongo's avatar
patacongo committed
o Build system
patacongo's avatar
patacongo committed
  ^^^^^^^^^^^^

  Title:       MAKE EXPORT LIMITATIONS
  Description: The top-level Makefile 'export' target that will bundle up all of the
               NuttX libraries, header files, and the startup object into an export-able
               tarball. This target uses the tools/mkexport.sh script.  Issues:

               1. This script assumes the host archiver ar may not be appropriate for
                  non-GCC toolchains
patacongo's avatar
patacongo committed
               2. For the kernel build, the user libraries should be built into some
                  libuser.a.  The list of user libraries would have to accepted with
                  some new argument, perhaps -u.
  Status:      Open
  Priority:    Low.

Gregory Nutt's avatar
Gregory Nutt committed
o Other drivers (drivers/)
  ^^^^^^^^^^^^^^^^^^^^^^^^

patacongo's avatar
patacongo committed
o Linux/Cywgin simulation (arch/sim)
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Gregory Nutt's avatar
Gregory Nutt committed
  Title:       SIMULATOR HAS NO INTERRUPTS (NON-PREMPTIBLE)
  Description: The current simulator implementation is has no interrupts and, hence,
Gregory Nutt's avatar
Gregory Nutt committed
               is non-preemptible.  Also, without simulated interrupt, there can
Gregory Nutt's avatar
Gregory Nutt committed
               be no high-fidelity simulated device drivers.

               Currently, all timing and serial input is simulated in the IDLE loop:
               When nothing is going on in the simulation, the IDLE loop runs and
               fakes timer and UART events.
  Status:      Open
  Priority:    Low, unless there is a need for developing a higher fidelity simulation
               I have been thinking about how to implement simulated interrupts in
               the simulation.  I think a solution would work like this:
               http://www.nuttx.org/doku.php?id=wiki:nxinternal:simulator
Gregory Nutt's avatar
Gregory Nutt committed

  Title:       ROUND-ROBIN SCHEDULING IN THE SIMULATOR
patacongo's avatar
patacongo committed
  Description: Since the simulation is not pre-emptible, you can't use round-robin
               scheduling (no time slicing).  Currently, the timer interrupts are
               "faked" during IDLE loop processing and, as a result, there is no
Gregory Nutt's avatar
Gregory Nutt committed
               task pre-emption because there are no asynchronous events.  This could
               probably be fixed if the "timer interrupt" were driver by Linux
               signals. NOTE:  You would also have to implement up_irq_save() and
               up_irq_restore() to block and (conditionally) unblock the signal.
  Status:      Open
  Priority:    Low
Gregory Nutt's avatar
Gregory Nutt committed
  Title:       SMP SIMULATION ISSUES
  Description: The configuration has basic support SMP testing.  The simulation
               supports the emulation of multiple CPUs by creating multiple
               pthreads, each run a copy of the simulation in the same process
               address space.

Gregory Nutt's avatar
Gregory Nutt committed
               At present, the SMP simulation is not fully functional:  It does
               operate on the simulated CPU threads for a few context switches
               then fails during a setjmp() operation.  I suspect that this is
               not an issue with the NuttX SMP logic but more likely some chaos
               in the pthread controls. I have seen similar such strange behavior
               other times that I have tried to use setjmp/longmp from a signal
               handler! Like when I tried to implement simulated interrupts
               using signals.

               Apparently, if longjmp is invoked from the context of a signal
               handler, the result is undefined:
               http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1318.htm
Gregory Nutt's avatar
Gregory Nutt committed
               You can enable SMP for ostest configuration by enabling:

                 -# CONFIG_EXPERIMENTAL is not set
                 +CONFIG_EXPERIMENTAL=y

                 +CONFIG_SPINLOCK=y
                 +CONFIG_SMP=y
                 +CONFIG_SMP_NCPUS=2
                 +CONFIG_SMP_IDLETHREAD_STACKSIZE=2048

Gregory Nutt's avatar
Gregory Nutt committed
               You also must enable near-realtime-performance otherwise even long
               timeouts will expire before a CPU thread even has a chance to
               execute.

                 -# CONFIG_SIM_WALLTIME is not set
                 +CONFIG_SIM_WALLTIME=y

               And you can enable some additional debug output with:

                 -# CONFIG_DEBUG_SCHED is not set
                 +CONFIG_DEBUG_SCHED=y

                 -# CONFIG_SCHED_INSTRUMENTATION is not set
                 +CONFIG_SCHED_INSTRUMENTATION=y

Gregory Nutt's avatar
Gregory Nutt committed
               The NSH configuration can also be forced to run SMP, but
               suffers from the same quirky behavior.  I can be made
               reliable if you modify arch/sim/src/up_idle.c so that
               the IDLE loop only runs for CPU0.  Otherwise, often
               simuart_post() will be called from CPU1 and it will try
               to restart NSH on CPU0 and, again, the same quirkiness
               occurs.

               But for example, this command:

                 nsh> sleep 1 &

               will execute the sleep command on CPU1 which has worked
               every time that I have tried it (which is not too many
               times).

  Status:      Open
  Priority:    Low, SMP is important, but SMP on the simulator is not
patacongo's avatar
patacongo committed
o ARM (arch/arm/)
  ^^^^^^^^^^^^^^^

  Title:       IMPROVED ARM INTERRUPT HANDLING
patacongo's avatar
patacongo committed
  Description: ARM interrupt handling performance could be improved in some
               ways. One easy way is to use a pointer to the context save
               area in g_current_regs instead of using up_copystate so much.

               This approach is already implemented for the ARM Cortex-M0,
               Cortex-M3, Cortex-M4, and Cortex-A5 families.  But still needs
               to be back-ported to the ARM7 and ARM9 (which are nearly
               identical to the Cortex-A5 in this regard).  The change is
               *very* simple for this architecture, but not implemented.
  Status:      Open.  But complete on all ARM platforms except ARM7 and ARM9.
  Priority:    Low.
patacongo's avatar
patacongo committed

  Title:       IMPROVED ARM INTERRUPT HANDLING
Gregory Nutt's avatar
Gregory Nutt committed
  Description: The ARM and Cortex-M3 interrupt handlers restores all registers
patacongo's avatar
patacongo committed
               upon return. This could be improved as well:  If there is no
               context switch, then the static registers need not be restored
patacongo's avatar
patacongo committed
               because they will not be modified by the called C code.
               (see arch/renesas/src/sh1/sh1_vector.S for example)
patacongo's avatar
patacongo committed
  Status:      Open
  Priority:    Low

  Title:       CORTEX-M3 STACK OVERFLOW
  Description: There is bit bit logic in up_fullcontextrestore() that executes on
               return from interrupts (and other context switches) that looks like:

                 ldr r1, [r0, #(4*REG_CPSR)] /* Fetch the stored CPSR value */
                 msr cpsr, r1 /* Set the CPSR */

                 /* Now recover r0 and r1 */

                 ldr r0, [sp]
                 ldr r1, [sp, #4]
                 add sp, sp, #(2*4)

                 /* Then return to the address at the stop of the stack,
                  * destroying the stack frame
                  */

                 ldr pc, [sp], #4

               Under conditions of excessively high interrupt conditions, many
Gregory Nutt's avatar
Gregory Nutt committed
               nested interrupts can occur just after the 'msr cpsr' instruction.
               At that time, there are 4 bytes on the stack and, with each
               interrupt, the stack pointer may increment and possibly overflow.

               This can happen only under conditions of continuous interrupts.
               See this email thread: https://groups.yahoo.com/neo/groups/nuttx/conversations/messages/1261
               On suggested change is:

                 ldr  r1, [r0, #(4*REG_CPSR)] /* Fetch the stored CPSR value */
                 msr spsr_cxsf, r1 /* Set the CPSR */
                 ldmia     r0, {r0-r15}^

               But this has not been proven to be a solution.
Gregory Nutt's avatar
Gregory Nutt committed
               UPDATE:  Other ARM architectures have a similar issue.
Gregory Nutt's avatar
Gregory Nutt committed
  Priority:    Low.  The conditions of continuous interrupts is really the problem.
               If your design needs continuous interrupts like this, please try
               the above change and, please, submit a patch with the working fix.
Gregory Nutt's avatar
Gregory Nutt committed
  Title:       IMPROVED TASK START-UP AND SYSCALL RETURN
  Description: Couldn't up_start_task and up_start_pthread syscalls be
               eliminated.  Wouldn't this work to get us from kernel-
               to user-mode with a system trap:

                 lda r13, #address
                 str rn, [r13]
                 msr spsr_SVC, rm
                 ld r13,{r15}^

Gregory Nutt's avatar
Gregory Nutt committed
               Would also need to set r13_USER and r14_USER. For new
               SYS_context_switch... couldn't we do he same thing?
Gregory Nutt's avatar
Gregory Nutt committed

               Also... System calls use traps to get from user- to kernel-
               mode to perform OS services.  That is necessary to get from
               user- to kernel-mode.  But then another trap is used to get
               from kernel- back to user-mode.  It seems like this second
               trap should be unnecessary.  We should be able to do the
               same kind of logic to do this.
  Status:      Open
  Priority:    Low-ish, but a good opportunity for performance improvement.

o Network Utilities (apps/netutils/)
Gregory Nutt's avatar
Gregory Nutt committed
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  Title:       UNVERIFIED THTTPD FEATURES
  Description: Not all THTTPD features/options have been verified.  In
               particular, there is no test case of a CGI program receiving
               POST input.  Only the configuration of apps/examples/thttpd
               has been tested.
  Status:      Open
  Priority:    Medium

Gregory Nutt's avatar
Gregory Nutt committed
  Title:       NETWORK MONITOR NOT GENERALLY AVAILABLE
Gregory Nutt's avatar
Gregory Nutt committed
  Description: The NSH network management logic has general applicability
Gregory Nutt's avatar
Gregory Nutt committed
               but is currently useful only because it is embedded in the NSH
               module.  It should be moved to apps/system or, better,
               apps/netutils.
  Status:      Open
  Priority:    Low

o NuttShell (NSH) (apps/nshlib)
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  Title:       IFCONFIG AND MULTIPLE NETWORK INTERFACES
Gregory Nutt's avatar
Gregory Nutt committed
  Description: The ifconfig command will not behave correctly if an interface
               is provided and there are multiple interfaces.  It should only
               show status for the single interface on the command line; it will
               still show status for all interfaces.
  Status:      Open
o System libraries apps/system (apps/system)
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  Title:       READLINE IMPLEMENTATION
  Description: readline implementation does not use C-buffered I/O, but rather
               talks to serial driver directly via read().  It includes VT-100
Gregory Nutt's avatar
Gregory Nutt committed
               specific editing commands.  A more generic readline() should be
               implemented using termios' tcsetattr() to put the serial driver
               into a "raw" mode.
  Status:      Open
  Priority:    Low (unless you are using mixed C-buffered I/O with readline and
               fgetc, for example).

o Modbus (apps/modbus)
  ^^^^^^^^^^^^^^^^^^^^

  Title:       MODBUS NOT USABLE WITH USB SERIAL
  Description: Modbus can be used with USB serial, however, if the USB
Gregory Nutt's avatar
Gregory Nutt committed
               serial connection is lost, Modbus will hang in an infinite
               loop.

               This is a problem in the handling of select() and read()
Gregory Nutt's avatar
Gregory Nutt committed
               and could probably resolved by studying the Modbus error
               handling.

               A more USB-friendly solution would be to: (1) Re-connect and
               (2) re-open the serial drviers.  That is what is done is NSH.
               When the serial USB device is removed, this terminates the
               session and NSH will then try to re-open the USB device.  See
               the function nsh_waitusbready() in the file
               apps/nshlib/nsh_usbconsole.c. When the USB serial is
               reconnected the open() in the function will succeed and a new
               session will be started.
  Status:      Open
  Priority:    Low.  This is really an enhancement request:  Modbus was never
               designed to work with removable serial devices.

Gregory Nutt's avatar
Gregory Nutt committed
o Pascal Add-On (pcode/)
  ^^^^^^^^^^^^^^^^^^^^^^

  Title:       P-CODES IN MEMORY UNTESTED
  Description: Need APIs to verify execution of P-Code from memory buffer.
  Status:      Open
  Priority:    Low

  Title:       SMALLER LOADER AND OBJECT FORMAT
  Description: Loader and object format may be too large for some small
               memory systems.  Consider ways to reduce memory footprint.
  Status:      Open
  Priority:    Medium

  Title:       PDBG
  Description: Move the pascal p-code debugger into the NuttX apps/ tree
Gregory Nutt's avatar
Gregory Nutt committed
               where it can be used from the NSH command line.
  Status:      Open
  Priority:    Low

o Other Applications & Tests (apps/examples/)
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  Title:       EXAMPLES/PIPE ON CYGWIN
  Description: The redirection test (part of examples/pipe) terminates
               incorrectly on the Cywgin-based simulation platform (but works
               fine on the Linux-based simulation platform).
  Status:      Open
  Priority:    Low

  Title:       EXAMPLES/SENDMAIL UNTESTED
  Description: examples/sendmail is untested on the target (it has been tested
  Status:      Open
  Priority:    Med

  Title:       EXAMPLES/NX FONT CACHING
  Description: The font caching logic in examples/nx is incomplete.  Fonts are
               added to the cache, but never removed.  When the cache is full
               it stops rendering.  This is not a problem for the examples/nx
               code because it uses so few fonts, but if the logic were
               leveraged for more general purposes, it would be a problem.
Gregory Nutt's avatar
Gregory Nutt committed

patacongo's avatar
patacongo committed
               Update: see examples/nxtext for some improved font cache handling.
Gregory Nutt's avatar
Gregory Nutt committed
               Update: The NXTERM font cache has been generalized and is now
               offered as the standard, common font cache for all applications.
               both the nx and nxtext examples should be modified to use this
               common font cache.  See interfaces defined in nxfonts.h.
Gregory Nutt's avatar
Gregory Nutt committed
  Priority:    Low.  This is not really a problem because examples/nx works
  Title:       EXAMPLES/NXTEXT ARTIFACTS
patacongo's avatar
patacongo committed
  Description: examples/nxtext.  Artifacts when the pop-up window is opened.
               There are some artifacts that appear in the upper left hand
               corner.  These seems to be related to window creation.  At
               tiny artifact would not be surprising (the initial window
               should like at (0,0) and be of size (1,1)), but sometimes
               the artifact is larger.
  Status:      Open
  Priority:    Medium.