NLS DTBM Firmware

The NLS Program Delivery Division modifies the DTBM (Digital Talking-Book Machine) software on the “talking-book player” that plays cartridges. These updates occur from time to time to correct faults, improve usability, or add additional features. The latest player firmware is version 2.1.16 (July 10, 2018). Libraries and patrons can upgrade players to the latest software in the following manner:

  1. Obtain the latest software from
  2. Extract (unzip) this file onto a cartridge or USB drive so that the directory "upgrade" appears in the "root" directory of the drive.
  3. Turn on the player.
  4. Insert the cartridge or USB drive containing the software.
  5. The player will announce "Upgrading your player's software."
  6. Wait until the upgrade is complete and the player restarts (about 10 seconds), then remove the cartridge.
  7. The upgrade will only occur if the player's version is older than the version of the software on the cartridge; reinserting the cartridge will not repeat the upgrade.
  8. The table below describes the major changes made in each revision.
DTBM Software Version History (latest version 2.1.16 launched July 10, 2018)
Version Changes/Enhancements
  • Modification to operation added in 2.1.15 so as to remove the need to press play/stop twice in order to advance to the next book in a multi-title book, if activated within 10 seconds of playing or rewinding to the end.
  • Advance to next book on multi book cartridges without using the bookshelf. Pressing play/stop at the end of a book, when there is more than one, will advance to the next book (wrapping at the end and ignoring a leaflet).
  • Fixed language setting bug.
  • Protect gas gauge read/write in kernel driver from being interrupted by the power button and prevent potential thread latch.
  • Do not use the audio queues before the required structures are malloced or after they are freed.
  • Move the initialization of profiles earlier in the startup sequence to prevent problems with some cartridges that are inserted at startup.
  • On the standard player with multiple books on a cartridge, place the User Guide as the last DTB on the bookshelf rather than the first one encountered when entering the bookshelf. (This is likely to be less confusing to magazine and duplication on demand patrons)
  • Allow standard player to use advanced functions from HID
  • Add Spanish ‘magazine’ & ‘magazines’ message
  • Allow xe: namespace for EncryptedData and CipherDATA tags (handle a correctly encrypted XML file!)
  • Permit higher volume for headphone operation (with configuration file)
  • Add ‘play’ and ‘plays’ to audio resources
  • Give error message if .brf files but no audio files are found
  • Prevent buffer overrun in ‘service notes’
  • Disable watchdog on JTAG debug
  • Do not count DTB when announcing number of magazines if  the .opf filename has a leading ‘+’ (magazine) or ‘#’ (book) (leaflets don’t count)
  • Increase default volume to 10 (from 8)
  • Add audio messages (play, magazine, magazines)
  • Use the term “magazine” instead of “book” if the first DTB has an .opf filename with leading ‘+’
  • Treat the DTB as a leaflet (do not remember place on removal, wrap around at end) if the UID is in the form us-nls-lf…
  • Fix XML parse error (look for whitespace separator instead of space)
  • Sort books and directories alphabetically (for multi-book media) instead of file inode order
  • Change default USB suspend policy, for AT port, to prevent patron-owned drives from suspending by default (at the expense of higher power consumption/reduced battery life)
  • Updated English and Spanish user guides and Play/Stop key-describer message (additional information on Bookshelf and BARD)
  • Correct gender rendering of numbers in Spanish
  • Correct "prev page" behavior in Z39.86 books so that reading position moves to the beginning of the current page (unless less than five seconds have elapsed since a previous page move)
  • Correct "cartridge test" function so that an error is not given when testing APH-formatted cartridges
  • Correct page search, where pages in the DTB are not contiguous
  • Correct problem causing multi-cartridge DAISY 2.02 books to forget new cartridge position if forced to use one not in sequence (by pressing Play after wrong cartridge warning)
  • Correct error in finding the start of file in audio file (i.e. mp3) book when rewinding
  • Play a double beep as an indicator when navigating off the current cartridge in a multi-cartridge DAISY 2.02 book. (as is done with Z39.86 books)
  • Differentiate Z39.86 books with the same opf file name on a USB flash drive with multiple books
  • Correct problem causing segfaults when navigating DAISY 2.02 books
  • Go to beginning of book if Play/Stop is pressed when playing the second end-of-book message
  • Correct problem with CEA-format book in the root directory
  • Correct error causing a silent boot if mains power is connected while the boot/loader was shutting down due to empty battery signal from gas gauge
  • New "directive" tags in "options.xml":
    • USBsuspend: (On, Off or Default) to explicitly direct USB suspend behavior
    • recharge: to initiate battery recharge.
  • New "configuration" tags in "options.xml":
    • loop: to endlessly loop the book(used when calibrating battery by charging then depleting battery)
    • currentBatteryCapacity: to explicitly set the gas gauge "last measured discharge" value
  • Add "service level 3" debug command "batt LMD" to explicitly set the gas gauge "last measured discharge" value
  • Additional internal DTB resource tags recognized
  • Correct bug in service level 2 "mwrite" function (end address counter overwritten)
  • Cancel forced recharge flag if waiting for recharge for more than 30 minutes (gave false impression that recharge was occurring)
  • Show gas gauge EMPTY signal in service level 3 "batt hw" command
  • Restore volume to correct level if "Stop" is pressed while the volume is being lowered during the fadeout at the termination of the sleep period.
  • Correct setting of tone Add function to calculate CRC32 of internal flash memory partitions in Service Level 3 (for manufacturer to verify the integrity of initial programming(or updates))
  • Further enhancements to gas gauge algorithm.
  • Do not disable charging if gas gauge reads incorrect voltage (this is already handled by charger in hardware).
  • Do not permanently inhibit charging if charge time limit exceeded (instead increment fault counter as per design plan (charge inhibited after 5 faults))
  • Reset battery recharge inhibit latch when issuing a "Force Recharge" command.(when recalling from profile)
  • Measure actual bit timing when reading/writing to single wire gas gauge. (close loop) to eliminate battery state read errors.
  • DAISY 2.02: Fix bug that Next/Prev gets stuck if navigation occurs off the current cartridge in a multi-cartridge book.
  • DAISY 2.02: Fix bug to allow announcements to be interrupted when Menu button is pressed whilst stopped.
  • Correct communication so application knows when charge is pending and will inform user that "charge is in progress".
  • Correct "Elapsed Time and Remaining Time" in Information for "loose audio" files
  • Replace "maintenance" by "notes" in service level 3 help
  • Loose audio files: Add file beep when rewinding mp3/audio files in time mode.
  • Loose audio files: Do not ignore first file boundary points for press and hold of Rewind.
  • Various bug fixes and enhancements to boot code and kernel drivers
  • Correct case where expiry of sleep timer would cause a segmentation fault if volume set at lowest level
  • Optimize initial parsing of NCX to reduce initial delay in playing of NISO book
  • Ignore book files with the ._ prefix.
    The Apple OSX operating system adds additional files (to the actual book files) that appear to the player to be a second book (although they are housekeeping files for OSX).
    e.g. the file "65432.opf" would have a companion file generated by OSX "._65432.opf"
    Ignoring these files allows Apple users to copy files from BARD without having to do any corrective action. These files are not visible to the Macintosh user, but are visible if the drive is examined on a Linux or Microsoft Windows computer.
  • Correct issue causing the User Guide on the Standard player not to be selected initially when entering the 'bookshelf' (when using a multibook cartridge) even though the player announces "Standard Player user guide"
  • Tone, Speed adjustment messages ("Tone Up", "Speed Up" etc.) are rendered with the tone adjustment applied (not at neutral tone)
  • Correct issue that caused the player not to enter the User Guide if a book was being initiated when the User Guide was loaded.
  • Correct issue that caused a reboot occasionally if a cartridge was removed while was being accessed.
  • Look for .opf extension only at the end of the file name (stops files like "book.opf.bak" from being recognized as a Z39.86 book.
  • Stop the loading of a Z39.86 book and wait for "key describer" before trying to start the user guide. (for books with long NCX and thus long start up times, UG could not be entered during this time)
  • Implement "bookshelf" mode when multiple books are found on a UFD. (Press and hold "Play/Stop" to enter bookshelf and RW/FF to select book.)
  • Reset "charge inhibit" flag when clearing power & status error in level 1 and 2 service modes. (so that the player will attempt to charge (without having to reset battery statistics))
  • Correct book mark behavior (adding book marks on bookmark level just after beginning of book (in play))
  • Do not announce current section heading when navigating by book mark (just time) (it was far too verbose and confusing)
  • Add additional error checking to prevent "segmentation fault" restart during cartridge initialization
  • Accept loose audio files if in "Audio+Podcasts" directory if other books present
  • Only announce "book error" if a cartridge is still inserted
  • Check for removal of cartridge during cartridge initialization to abort processing if user removes cartridge just after insertion.
  • Stop playing messages prior to announcing "User Key Not Processed" (when processing KXO)
  • Add <noUSBsuspend/> option to directives in "option.xml" file so that troublesome USB drives may be used (albeit with higher battery drain)
  • Move the CEA "book found" notice to after we've found the book!
  • Suppress key describer when processing cartridges (accumulating books onto the chain)
  • Add feature:
    Press and hold bookmark to move to bookmark navigation level and announce the number of bookmarks in the book
  • Change Sleep behavior so that first press will announce number of minutes remaining and subsequent steps will increase sleep time (quantized to 15 min intervals)
  • Announce "Sleep Cancel" when stopping player with sleep active.
  • Cancel sleep (and announce sleep cancel) when cartridge removed
  • Re-vamp the undo action at bookmark level to make it logical and consistent (and functional!)
  • Correct CEA play segment (incorrectly calculated end time of short segments.. meaning they never finished)
  • Correct Daisy 2.02 (D2_PlayAllTask) so that playing of segments (in stop and segment mode) did not update the current pointer. (This caused playing of snippet of book in stop mode to move the read pointer).
  • Recognize "NLS-Shared Master" as an NLS book (don't announce title when at beginning of book and don't engage AGC)
  • Add "beep" at end of Daisy 2 segment play.
  • Restore navigation level or phrase / bookmark (previously would set to lowest hierarchical level if on phrase or bookmark level).
  • Check for cartridge removal in processing of authorization object and in parsing html (to prevent a "segmentation fault" restart if the patron removes cartridge when the book is initially processed)
  • In Daisy 2.02 operation, do not reset the read position to the beginning of the SMIL segment after playing title.
  • Handle the play/stop after pressing the "Info" button to play the book if the information message had stopped.
  • Give a message for but do not "eject" the disc (enter key describer) when finding a text only Z39.86 book (e.g. Bookshare).
  • Create a dummy interface to handle parking the user interface when a text only book found.
  • Correct "level jump" announced to actual level for coarser navigation levels than that at the current reading position. (It was the most dominant at that level)
  • Changed the routine to determine the dominant resource at a level to count those not in the resource list. (previously if the class is not found in the internal resource is was ignored (although it may have been the dominant class))
  • Announce page number using "text" number if audio is not present
  • Ignore various Microsoft recycle bin directories and Apple "__macosx" directories when looking for books (in addition to upgrade, '.' And '..")
  • Correction to battery recharge algorithm.
  • Various corrections to battery recharge algorithm.
  • Correct formatting for Voltage display in Service level 3. (did not give correct value for less than 1.0V)
  • Report accumulated faults in Service Level 3 "b hw" command. (if one or more faults)
  • Change the delay before book play (after title started) to 300ms.
  • Recurse into directory structure to add to book chain for Z39.86, DAISY 2.02 and CEA books
  • Ignore all "dot" directories (not just . and ..) when recursing looking for books (Apple & Unix hidden directory practice)
  • Correct spelling of 'ingles' in 'options.xml'
  • Added some error checking to prevent "segmentation fault" restarts with some CNIB Daisy 2.02 books.
  • Initialize some auto variables (strings) so that strcmp() will have a sensible value if the function that sets the string fails.
  • Add checking to various routines during Z39.86 initialization to abort if cartridge removed. When processing a large NCX (Joy of Cooking), many seconds can be spent processing the NCX.
  • Separate time for "prev" to jump over datum for normal navigation (5 sec) and SMIL navigation (2.5 sec) so that we have less tendency to jump over items when jumping back by SMIL segment in play mode. (short ingredient lists for example)
  • Do not terminate other messages when playing "End of book" so that title will play to completion (if already at end when cartridge inserted).
  • Do not play forward time (Forward 20 seconds) on multiple FF presses when at End of Book.
  • Add a small pause (250ms) before "NISO_PlayAll" when playing Title to avoid playing 50ms segment of book before title in some circumstances (when large NCX is processed).
  • Give "beep/bop" response to returning to "current position" when in bookmark navigation. (Same response as other navigation levels)
  • Make MP3 and CEA Information (Info button response) consistent with Z39.86 & Daisy 2.02 (Position/Time/Book/Power)
  • If audio file is in stereo, preserve channel separation if headphones are used. (do not mix to mono)
  • First production release
  • Correct setting of tone (when recalling from profile)
  • Don't announce "player on" if recovering from watchdog (warm reset)
  • Don't beep if recovering from watchdog (warm reset)
  • If removal of cartridge detected, then wait for the end of the snap point initialization, so that position can be saved without a “segmentation fault” restart.
  • Flag Z39.86 initialization that does not complete (so we don't try and change position based on bogus data)
  • Cause persistent full keyboard buffer to initiate a watchdog event.
  • Allow power off in "Service 3" (when entered via options.xml)
Skip to main content