User Interfaces and Usability for Embedded Systems

Errata for Front Panel

This is a list of mistakes discovered by me and others since the book was published. Many thanks to those of you who went to the trouble of sending me your comments. These comments all apply to the first edition of the book.

Mistakes in the Text

Section 1.8 Feedback

My web site is listed as http://www.iol.ie/~rmurphy. It should, of course been http://www.iol.ie/~nmurphy. The real rmurphy was kind enough to add a link from his page to mine to redirect anyone who was misled by this. Since then my site has moved to http://www.panelsoft.com.

Section 2.3 An Array of LEDs

The following 2 lines of code appear in this section:

booleanState[OK_LED] = TRUE;



In both cases OK_LED should read OK_FLAG.

Section 4.7 Example of an FSM for a Toggle Button on a GUI

Figure 4.3 has a transition from UP to PENDING_DOWN and from PENDING_DOWN to UP. In each case the arrow is pointing in the wrong direction. In other words the Press/doNothing() transition should point from UP to PENDING_DOWN, and the SlideOff/doNothing() transition should point from PENDING_DOWN to UP.

Section 5.3 The Next Level Up - Do you Need Objects?

Figure 5.2 should say boxCreate instead of createBox

Section 5.4 Refreshing the Display:

In the second paragraph the following lines appear:

'To refresh the display, two actions must occur. First the man image must be removed from its current position.'

In the line above 'current' should read 'old'.

Section 5.4.1 Refreshing by Object

At the bottom of page 98 the last sentence should have the word 'member' added to the end.

Section B.2.13 borland4

At the bottom of page 302 the reference to "Borland 3.1" should say "Borland 4.5". The phrase "but it is used by useb3.bat" should read "but it is used by useb4.bat".


The web link for Vanderheiden, Gregg C., 'Use of audio-haptic interface techniques to allow nonvisual access to touchscreen appliances', is out of date. It should be http://trace.wisc.edu/docs/touchscreen/chi_conf.htm

Mistakes in the Code

Chapter 5

In module shapes.c the function containerRemoveFrom(). There is for loop in this function, which is searching for the child to be removed. When the child is found we want to exit the loop. In order to do this iterator is assigned to NULL. However, the final assignment of the for (iterator = iterator->nextContainedPtr;) is executed before the loop is exited causing a null pointer to be dereferenced. There is no quick fix, so the loop was recoded as a while loop. The entire function is available via this link: containerRemoveFrom.

The function containerUpdateAbsolutePosition() assumes that the container has a parent. If it does not then the function should just return doing nothing. The new version of this function is available via this link: containerUpdateAbsolutePosition.

The first if clause in drawableErase can be removed since the same check for a null parent has already been performed in displayRefresh().

If the root Container is made dirty, say by changing its color, the following refresh will not update any of the drawables. The problem is that the root container is a special case. It is the only visible container that does not have a parent, and therefore need to be checked for in displayRefresh. To do the check I had to add an extra file static member called FS_rootContainerPtr, so that the displayRefresh function would always be able to check if a particular dirty container was in fact the root Container. The value of FS_rootContainerPtr is set in containerCreateRoot. The updates are available via this link: displayRefresh and containerCreateRoot.

[PanelSoft Home | Training Courses ]