--- Passport v2.02.0064.dev --- 1 Oct 2012 - Numbers are now displaying properly in the Passport's note bar when used with the split key feature disabled. - Changes made to audio recording shutdown procedure which may help with lockups when closing a job. --- Passport v2.02.0062 --- 29 Aug 2012 - Changed program so it no longer checks for a Bluetooth connection when Bluetooth communications is set to none. This version stands a very good chance of fixing the lockup problem that caused it to lock up at onIdle::00499 when in realtime with the bluetooth off. --- Passport v2.02.0061 --- 15 Aug 2012 - Changes made to address PApp::onIdle 00499 lockups. This version has a POSSIBLE fix for the lockups that are occurring at PApp::onIdle 00499. This is VERY SPECIFICALLY a communications problem, and many new watchdog lines to the communications receive functions have been added in case the attempted resolution does not work. --- Passport v2.02.0060 --- 7 Aug 2012 - Split Z/S and */~ keys now functional. Keep in mind that if you turn on the split keys, the translator will no longer work. The translation code for split keys has not been written for the Passport yet. However it is fully functional in developmental versions of Total Eclipse 5.0.1.0 or newer. Also, the split keys function in the Passport only affects the display. Whether you have split keys on or off, the realtime communications with Eclipse and the note file format are exactly the same. It always stores the keys as split, and whether Eclipse interprets them that was is determined by the setting in Eclipse, not by the setting in the Passport. --- Passport v2.02.0058 --- 29 March 2012 - Added check to insure that file names and paths were not greater than maximum allowed in makeSpace 00201 vicinity of code. There was only one potential bug that may be related to the makeSpace function in that piece of the code, so I put in a check for it, but I doubt that any part of the program was passing file paths into that procedure greater than the maximum path length (260 characters.) But it doesn't hurt to check. - Modified MakeSpace routine to properly handle error created when it attempts to delete a non-existing file. The program will no longer generate an error when attempting to delete a file that does not exist. For example if the Passport has never operated in the Audio Emulation mode then a folder named Audio will not exist. When the MakeSpace routine attempts to delete wav files from the non-existing Audio folder the error will now be suppressed. - Loopback, Mic Boost, and Input Volume now get set on creation of an AudioRecorder object and added midpoint volume cludge to setOutputVolume(). Audio levels were being improperly set if one started a job without the SD card and the inserted the SD card into the writer during the job. - The program will now attempt to stop recording as soon as it encounters the ERROR_DEVICE_REMOVED error. Removal of the SD card during the recording process set up a situation where the program is trying to save the audio file to a non-existant drive. Not the program will detect the removal of the device and no longer attempt to write data to the card. NOTE: It is still recommended that the SD card not be removed while power is applied to the writer, however if one does this change should prevent cascading errors affecting the job. - StenoCollection thread has been modified to power off writer should the steno buffer overflow. Errorlogs from writers that suffered from a buffer overflow were of little help because once the buffer was full each individual steno stroke that is written afterward cause an overflow message in the errorlog. Should one continue writing, the errorlog quickly files up with the overflow message pushing any useful information that might have been logged prior to the overflow out of the log. Now the writer should the buffer overflow the writer will automatically power itself off so that no further messages are logged and the user has a visual indication that something is wrong and needs their attention. - Modification made to watchdog routine. This version won't have the red herring lockups that were a direct result of the overzealous watchdog. Also the number of lines in the watchdog trace was increased to 100. - System error when deleting main dictionary if named with all capital letters. If the file is in mixed case -- Main Dictionary.pdx -- everything is fine. However if you copy a file called MAIN DICTIONARY.PDX you will get the system error when attempting to delete it. It only seems to be a problem deleting the file. It loads and uses the entries from the dix. Also happens in earlier versions as well. - Fatal Application error when exporting empty dictionary. The program will no longer crash when exporting an empty dictionary. - External media device read/write test has been added. Go to Menu/Setup/System and select Write Test. It will prompt you for an external media drive. Select one, hit OK, and the test will start. You can hold down button #5 to abort the test. This will create a series of files (TESTWRITE.0, TESTWRITE.1 ... TESTWRITE.999) and will cycle through back to 0 again. Each time, it will overwrite the previous file, if necessary. Each file will be 400K in size, so make sure that the drive has at least 400mb of space available or you'll get a lot of "disk full" errors. The screen display will simply show the total number of writes performed (100 per file at 4k each) and the total number of errors received. The errorlog.txt file will show the errors that have been received in this function. This will test the main file operations of the drive, including opening, writing and closing files. After installing the update you may perform the Write test by creating a job, navigating to Menu/Setup/System, and depressing the Write Test button. Highlight the SD drive and select OK. You should see the number of tests completed and the number errors detected if any displayed on the screen. Let the writer sit for a long period of time such as overnight or the weekend. At the end of the time period please write down the number of tests and errors then depress Button #5 to exit the test (please note that although Button #1 says cancel you will need to depress the unmarked Button #5 to exit the test). After the test please gather a new errorlog.txt file and send it along with the number of test/Errors. Please Note: If the Backlight Timer is set to a number greater than 0 the backlight will be turn off during the test. The Passport is not locked up but busy performing the test. One may depress Button #5 to exit the test and the backlight will turn on, however it is probably best to set the Backlight Timer to 0 before the test to avoid this issue. - Write test modified to perform more challenging test. The Write test in this version spawns 10 threads, each of which makes test files TEST1FILE, TEST2FILE, TEST3FILE, etc., each of which will go through extensions .001, .002, .003, etc. The block size has been decreased to account for increasing the number of files, so it should be writing even more frequently. - MakeSpace routine will now delete wav files in Audio folder. The MakeSpace routine was updated so that it will now delete audio files that are created when the Passport is operated in the Audio Emulation mode. When in the Audio Emulation mode wav files are stored in the Audio folder instead of the Jobs folder. --- Passport v2.02.0044 --- 3 August 2011 - Added additional watchdog information about OS messaging. - Baseline function no longer displays non-working cancel button. - Live monitor not working after playback corrected. - Power data that is displayed in the About dialog modified to include additional decimal values. For convenience the battery voltages will now be displayed in both the hex and decimal formats. - Power data on About Dialog no longer updated. Changes to the communication threading made in an earlier version disrupted the communications link (internal com2) to the power management microprocessor. This has been restored. - Different timeout values for threaded and non-threaded communications. This version has the time out at ten seconds (10000) for the threaded USB communications, but 0.1 seconds (100) for all other COM ports, just like previous versions. Now the USB should only time out once every ten seconds rather than once every two seconds since it won't attempt to send any more data until the first request completes. Also, when returning from a sidebar, it may now take up to ten seconds for the Passport to re-connect and send the sidebar data. - Timeout error has been removed. - USB write functions placed in a worker thread. This version has the USB write functions put in a worker thread, but all of the other serial communications are in the main thread like the previous version. What it does now is tell the USB port to write data in a thread and the timeout is set for two seconds. If that fails, it will just try again with the next write request. There's no retry timer because there's no need to wait a long time before trying the USB port again since it shouldn't lag the main thread anymore. - Keys falsely registering when another key is pressed. Fixed an issue where a shadow value could calculate to a negative value when a key is at rest and thus be converted to a large unsigned value that got converted to a max shadow value and a falsely registering key when another key is pressed - Ensure that min < max in sensor.txt file. In some cases the keyboard initialization routine resulted in minimum values that were greater than the maximum value. This has been corrected and is no longer possible. --- Passport v2.01.0037 --- 13 June 2011 - Shallow keyboard heights causing erroneous keyboard registrations. Auto adjustment is back with a caveat. If the you set the min (top) past the max (baseline) then the baseline will automatically adjust to min+500 (or 4095 if min+500>4095). Please note that if the keyboard is set to an *extremely* low depth, one or more keys may exhibit registration points that are set all the way to the top when viewing on the adjust screen and refuse to be adjusted using the scroll wheel. If depressing "ALL" and "SET TOP" does not resolve the situation please raise the keyboard in small increments and repeat the "ALL" and "SET TOP" routine until you may adjust the registration points for those keys. - Multiple keystrokes were registering when only one key was depressed. Taking away the auto-adjustment on the mins made shadow values calculate out to a negative number if the keyboard floated to a number below the min. A shadow value of zero is now assigned to any key where min>current sensor value. - Repaired threading problem with backup procedures. The threading problem was rather subtle: There was a place where I was declaring a JobFile as a local variable, doing an open/write/close. Even though the close function was protected by a mutex so that it would have to wait for the write thread to finish, what was happening was that it was executing the full write/close function (and exiting the function containing the local JobFile variable) before the thread even STARTED, so the mutex wasn't getting set quickly enough. I put in a safeguard so that if the thread was even created (if the handle wasn't zero) the close function will now sleep until it IS zero. Ugly, but I'm not sure how else to handle that situation. - Backup procedures placed in a background thread. Two time-consuming processes have been moved into background threads. One is the backup process for job files, and the other is the makespace process. Each job file manages its own backups, so when the note file fills a buffer, it backs up its own data to all of the available backup drives, and when the text file fills a buffer, it backs up its own data. Each of the job files is encapsulated into a separate object. Each of these objects, when they need to back up the data, will now spawn a temporary worker thread that backs up the data to each of the available backup drives. Once the backup is complete, the thread ends. While it's theoretically possible that multiple backup threads would be running at the same time, since they're operating entirely on separate files, that shouldn't cause a problem. Also, since each file backs up at different times because they fill up at different times, it's extremely unlikely that multiple backup threads would end up running at the same time. Even if they did, the worst possible outcome would be a performance hit, and hopefully that wouldn't be noticeable because the main thread should keep running without interruption. The main thread and backup threads are sharing no data whatsoever. I got around the issue I was having with sharing strings by putting the data into a simple wchar_t array. The actual files in flash memory are being opened in shared mode, and the backup thread is re-opening a whole new file handle to the job file since you can't pass handles into threads. There is a mutex in each job file object protecting the file against a simultaneous write/backup, but since the write completes before the backup thread is created, the only possible way that could even be an issue is if the user managed to write an entire new buffer while the backup thread was still working. If the backup thread fails in any way at all, it simply logs an error and quits. That means that no matter how badly an external media device fails, it won't bring down the main application. The only drawback there is that a background thread should never interrupt the UI, so it will not display a visible error message. Theoretically an error handler could be added that would send a message to the main thread reporting the error. However, since the backup procedure is capable of making a retroactive backup of as much data as it needs to, even if it gets an error on one try, the next time a buffer fills up and it attempts the backup again, if there is no error, the backup will still be complete without any missing data. The makespace function is even simpler. Every time the software goes to store data on any drive at all, it first checks the available space on that drive. If the space is getting low, THEN it spawns a thread that goes through the time-consuming process of getting a directory of all of the files, searching for the oldest one, deleting it, and repeating the process until the available space is once again above the appropriate threshold. There can be only one makespace thread running at any one time. If a drive requests a makespace thread and it's already working on a different drive, it just gives up. It will ask again when the next buffer fills up. It takes an enormous number of buffers to actually fill a drive, and keep in mind that if drive A and B both need to run makespace and drive A gets to it first so B has to wait, the next time a buffer is full drive A will have plenty of space and won't need to run it again, so B will get to run it. The makespace thread is another one that shares no data with the main thread (or the backup threads that also call it) because it's independently getting a directory of the drive, looking for old files and deleting them. The only thing that gets passed into that thread is the path name to the drive where it's making space and the name of the job that's currently open so that it doesn't accidentally try to delete the active job. Both of those are passed in, once again, using a wchar_t array to avoid problems with wstrings across threads. Hopefully this change will eliminate all of the excessive lags caused by extremely large directories in the Flash memory or on other drives, as well. There will still be some small lags for functions such as opening a file for the first time, which must be done in the main thread, but all of the functions that happen while the job is open should now be much, much faster. In fact, when getting to the end of a buffer, the lag for writing out the buffer should now be a second or less no matter how full the drives are, how many drives you have plugged in, or how many files there are in the directories. - The All key was inactive if more than one keystroke was below its registration point. The All key on the the Keyboard adjust screen is now active whenever there is more than one key below below their registration points. If only one key is below its registration point the All button will be inactive. - Resolved issue with keyboard initialization function. Tweaked the keyboard initialization to see valid keys as one that comes back past the registration point rather than coming back to rest at min+tolerance. - No more automatic adjustment on sensors. Automatic adjustments to the sensor.txt file have been disabled and replaced with the Set Top function, the Baseline function, and adjustable registration points. This makes every element of the key adjustments user-definable and should no longer require automatic adjustments. - Added function for setting the key sensor top position. The old "Set" function in the keyboard adjustment dialog now says "Set Top" and that's exactly what it does. It sets the top of the currently selected key at the current key position. If you've changed the depth bar and want to change the tops of all of the keys, just hit "all" first and then hit "set top." Because the software no longer automatically detects and sets the top position anymore the program relies on the user to tell the system that the tops have changed -- The user must hit "ALL" and then "SET TOP" after changing the keyboard height. If the user has a *shallow* stroke depth, adjusts the keyboard to a *deeper* stroke depth but *fails* to hit "ALL" and "SET TOP" then when they hit keys on the writer it will appear as one large stroke containing almost, if not all of the possible letters. To resolve this issue simply go to the Keyboard Adjust screen and hit "ALL" and "SET TOP." - Don't warn user about low internal memory. This will eliminate some support calls and will cause the writer to act more like the Stenograph writers, which only warn the user when the external media is getting full. The Passport will continue to warn users that storage space is becoming low on external media devices. - Use 20% buffer for showing battery full. Some batteries don't charge all the way to 100% even when they're working fine, so a bit of a buffer was put in so users won't complain. - "Allow multiple outputs" option, defaulting to off, which makes communications mutually exclusive. This will eliminate the lag caused when a user has a communications method turned on other than the one they're currently using. It won't help if they have USB or BT selected and have neither connected to the computer, however. - Fixed an issue with initial volumes on audio prompts. - Strings of successive audio prompts not playing all prompts successfully. When multiple audio prompts are played in succession, for example, when there are multiple storage drives low on space so multiple alerts will be played back to back, not all of the prompts were properly played. This has been resolved. - Delete stroke vs. display lockup resolved. A lockup involving the keyboard adjust screen, large numbers of delete strokes, and the scroll wheel has been reproduced and corrected. - Resolved Fatal Application Error caused by Audio Prompts. When the Audio prompts were enabled a Fatal Application Error was occurring when depressing either the Start button or the Turn Off button on the Passport start up screen. - Resolved issue with Audio Prompts and Live Monitor. Audio prompts were not audible whenever Live Monitor was enabled unless transcript audio was currently being played. - Additional watchdog ticks added. New watchdog lines added to monitor the creation of job routines. --- Passport v2.01.0025 --- 22 March 2011 - Additional watchdog ticks added. Here's a new version, 2.01.0025, that has about thirty new watchdog lines surrounding the file write/update backup procedures in detail. --- Passport v2.01.0024 --- 11 March 2011 - Searches should work with transcript bar off. It will now do a search and move the steno window to the appropriate location even if the transcript window isn't visible. - Search function should support searching for steno. You can type steno into the search dialog and it will now find that location in both the steno and text document. - Code looking for backup drives could report an irrelevant error. A "find backup" error could come up when starting or ending a job which was reporting an error that didn't exist. --- Passport v2.01.0023 --- 10 March 2011 - Audio emulation mode added to cause .wav files to be stored as \AUDIO\FILE###.WAV In the audio setup, there is now an "audio emulation" mode which, if turned on, will store the wav files as \AUDIO\FILE###.wav to match the emulation mode files. Note that turning on the emulation mode does NOT affect the currently open job. You must close the current file and start a new file in order to see the change. The audio emulation mode does get stored permanently in the settings. When using Case Catalyst to read note files from Passport SD cards created while the Audio Emulation mode is ON, the wav file will be copied along with the notes and automatically associated with the job in Case Catalyst. In Case Catalyst one should set their writer type to the Elan Mira. Please be advised that there may be an option in Case Catalyst to tell it whether you're reading the old-style compatibility mode notes or the newer style of notes. Please choose the old-style. To make SD cards with note files created by *earlier* versions of the Passport Case Catalyst compatible one may: Using the SD card that contains the notes and wav file from the Passport: 1) Create \AUDIO 2) Copy the passport wav file from \JOBS to \AUDIO 3) Rename the passport wav file to FILEXXX.wav This what the file structure on the SD card should look like afterward: \FILE.001 \TEXT\FILE001.HMS \AUDIO\FILE001.WAV \JOBS\Job '11-02-04 1239.pnt \JOBS\Job '11-02-04 1239.wav \JOBS\Job '11-02-04 1239.pnf \JOBS\Job '11-02-04 1239.ptx - Additional error checking added to isBackupAvailable function. If the system has any problems getting a directory on any of the backup drives, it will now report those errors in more detail. Previously, it was only reporting errors when creating files, reading, writing or deleting. - UpdateBackup function reporting filename instead of folder when getting an error creating job folder. The "create directory" function will now report the location where it's trying to create the directory instead of reporting the file it was going to store there. - More watchdog ticks added. This will differentiate a lockup in the storage system vs. a lockup in the communications system. - Added extra code to protect the watchdog thread from colliding with the main thread. The number of fatal application errors that have been coming up in 2.0 just seemed suspicious. The main difference with 2.0 is the addition of the lockup watchdog procedures. Having no idea if that's what's causing the exceptions, but just in case, extra code was added to protect the watchdog thread from colliding with the main thread in two key areas: The maintenance of the watchdog item list itself, and the error log, both of which could theoretically crash the system if the main thread and the watchdog thread just happened to be attempting to access the same data at the same time. Also a couple of mutex to prevent simultaneous access were added, just in case. - Fixed the translation bug that was causing squares to appear. Fixed the translation bug that was causing squares to appear with entries such as {^}{,}. - StenoCaT software was not reading past the end of the first block of steno. The comm log revealed that the StenoCAT software was asking for a totally senseless byte number in the file. The Smartwriter/Stentura/etc. writers were apparently rounding that value up. The Passport was rounding it down. Each stroke takes four bytes. Each block is 512 bytes. Normally, the system would look for block 0/byte 0, block 0/byte 4, block 0/byte 8, etc, all the way up to block 0/byte 508. Then, the next data is block 1, byte 0. StenoCAT is starting with block 0, byte 3, block 0, byte 7, block 0, byte 11, etc. It goes all the way up to block 0, 511, at which point it gets no further data. There is actually one byte available at that location in the block, but since the Passport is rounding it down to the nearest number divisible by four, it sends back nothing. The Passport software was changed to round UP if it sees a number that's not divisible by four. I've checked, and software like Eclipse that's asking for sensible values should still work. This update should allow the bad values StenoCAT is sending to work, too. - Passport will now gracefully handle invalid steno in dictionaries. A customer sent in a dictionary that locked up the writer when attempting to export it to RTF. Yay for reproducible bugs! Anyway, this one was a heart-stopper. It turns out there was a bug in the procedure that converts steno to readable text if the steno contained invalid bits. That could theoretically affect quite a few functions in the software. I don't know of any way to enter invalid steno on the machine itself, but certainly a bad conversion could end up with invalid steno, so it could affect the exporting, the dictionary view, or possibly even the translator, any one of which might cause a lockup if it hit the bad dictionary entry. This version will simply show a ? character anywhere it sees a steno key that's undecipherable rather than locking up the whole machine. - Added audio prompts for the visually impaired. There's a new item in the input options called "Audio prompts". Turn that on and you will hear audio prompts when something important happens. This feature is a work in progress -- more prompts will be added in future releases. - Modified the auto keyboard adjust feature. Changed the entry requirement for the algorithm to auto adjust mins from shadow value > 0 to sensor value + bleed value > min. - Changes made to audio recording portion of code. A significant change was made to the audio procedures that will hopefully prevent the random lockups that were occurring previously. I did some recording and playback tests on my machine and it seemed to work fine, recording correctly, showing the levels correctly, playing back synchronized, etc. No errors so far. - More lockup watchdog markers added. I haven't changed the line numbers for the old ones. I just added them in some lines that used to be blank, so it won't cause confusion when looking at error logs from different 2.0 versions. - Lockup guard added to serial flushinput loop. Since it locked up once in the power management I just figured I'd add that for safety's sake. The worst thing that can possibly happen with the code I just added is that the serial port flush routine doesn't completely flush the input and it leaves stray characters that have to get ignored. That's better than locking up the whole machine waiting forever for a flush that won't happen for some reason. - FlashFx Disk messages not always showing friendly name. Looks like a capitalization problem. "FlashFX Disk" and "FlashFx Disk". Odd that it would show up internally with different caps sometimes. I've told the "friendly path" generator to use either form in the next update. It should now show "memory" under all circumstances. Let me know if it doesn't. - - Total Eclipse is not properly converting Steno magic keys to rtf or pdx. I've fixed this for the next update. It was actually two bugs. The Passport RTF import couldn't handle the ^ and + symbols, and the Eclipse to PDX export wasn't including them, so I've made changes to both the Passport and the Eclipse software. - Serial port logging to SD card added. This is an important one. It logs all serial port traffic (except for COM2. I don't really need to see the power management communications.) This is enabled whenever you have the "data logging" turned on. I don't think we need several different logging options. Note that when it's doing this logging, it MUST have the SD card in. The serial port log is stored in the root of the SD card as commlog.txt. The file can get rather large if you go for a long time and I didn't want it filling up the FlashFX disk or degrading the performance too badly. It might actually be a good idea to move some of the other logs out to there, as well, to boost the data logging performance. It's a thought. One other note: It logs ALL serial port activity as COMX(W):writtedata, COMX(R):readdata, and the data is just a string of hex values. It only puts in a carriage return and labels the COM and R/W when either the port number or the read/write event CHANGES. So, for example, when using the Passport mode hooked up to Hyperterminal, it will just be a single COM1(W): event with a ton of data. Hook it up to Eclipse and you'll get occasional COM1(R): events when Eclipse sends data to the writer. Because of this, I would strongly recommend only using data logging with a SINGLE port type enabled. Otherwise, it's going to be giving you a ton of COM1(W):data, COM4(W):data, COM6(W):data lines for the same data being sent out all of the different ports, which is a lot of redundant junk that we don't need. --- Passport v2.00.0013 --- 16 November 2010 - Added additional watch line to diagnostic routine to help track down Passport lockups. Added one more watch line to narrow the location where the observed lockup was occurring. Ok, I think I'm down to one last possible loop point. If it's still locking up now, it's getting into a system call instead of an infinite loop. I've put a loop abort retry count into the offending loop so it can't loop forever. Let's see if that fixes it. Oddly, a date rollover shouldn't make any difference at all anywhere in the program, because I'm using 64-bit timecodes everywhere rather than just 24-hour timecodes like Eclipse uses. A 64-bit timecode is simply a really, really big number that indicates the number of microseconds elapsed since January 1st, 1970. It doesn't care what day it is. - Increased watchdog timer to minimize false lockup reports. Upped the timer to 10 seconds just to make absolutely sure the program really is locked up and not just pausing for a time-consuming process. Also to prevent possible lockup issues with the watchdog timer thread itself. - Replay file was clearing after restarting the writer. Meaning that as soon as you reset the writer and did a "get log" the replay file was guaranteed to be empty. Not particularly helpful so now the file is not cleared thus leaving the information available for inspection. - Replay file logging could cause a fatal error. If the file pointer is an invalid handle, it will now log the error and NOT attempt to write data to the file. That might have been causing the fatal error. - Replay file was closing after the get log function. That's what was causing the handle to be invalid. In order to get the replay.dat file with the rest of the log files, it had to close it. It will now open it again in case you start writing any more data after using the get log function. - Replay file should be cleared after using the get log function. Now that the replay.dat file continuously appends, there has to be a way to clear it. Using get log will now clear the replay.dat file and start a new one. - Change made to translate code to prevent observed lockup. - Added a diagnostic routine to help track down Passport lockups. The way it works is that among the first things the writer does is spawn a thread which does nothing but watch a status timer. As the program runs, it's constantly updating the timer AND logging where it is in the code in a location in memory. If the watchdog thread sees that more than five seconds has elapsed since the last time the timer was updated, it knows that the main program is frozen (because the main program should never take more than five seconds to do anything since it has to be perpetually updating the steno screen, no matter what.) After a freeze, the user should be able to restart the writer and get an error log. At the end of the error log should be a series of lines that looks something like this: PApp::onIdle 0376 PApp::onAbout 1018 8/16/2010 16:45:17.\Watchdog.cpp:Watchdog::checkWatch,58: Unresponsive: Main thread freeze The first two lines are function names and line numbers, and there will be a list of 20 of those representing the last 20 times that the program was able to successfully run a line of code before locking up. I can add or remove as many of these watch markers as necessary to find the exact line of code where the system is locking up, but it may, in some cases, be a gradual process of elimination. For example, I currently have only three markers in the translator code bracketing the steno-to-text conversion vs. the text merge and update process. After this development version of the program is tested to make sure that it doesn't contain any fatal flaws, I would strongly recommend that anyone having any sort of lockup problem should load this version. If they have a lockup at any time in the future, the errorlog.txt will now give me a good general idea of where the problem came from. The more of this version that goes out, the easier it will be for me to find and solve lockup problems without necessarily having to reproduce the problem in-house, though that's still ultimately ideal, and will, in some cases, be required. After each lockup log, I will add further fine-tuning and more markers to track down the issues in more detail and will make further development versions available. Note: It's possible that there are some functions in the program that may trigger this log erroneously. If so, let me know and I'll try to make sure those functions are periodically "breathing" so that the system doesn't appear locked up. Functions that do time-consuming tasks like copying files, if they don't allow the steno to update, could be among those that trigger erroneous freeze logs. That doesn't actually cause a problem since the program keeps running. I just wanted to mention that in case anyone sees a freeze message in the error log when the customer didn't actually report a freeze. - Passport realtime emulation modes now use the Stenograph protocol instead of the Flash protocol. This an error-handling handshaking protocol and should be able to recover gracefully from serial port glitches, including Bluetooth garbage and dropouts. I've tested it briefly with Eclipse, but ultimately, it will need to be tested with other CAT software. Note that this is NOT a complete Stenograph interface, as it doesn't handle the read notes function through the cable. It's only a realtime interface. It should handle disconnecting, writing and reconnecting, also. I've tested this briefly, as well. Note that this new method REPLACES the Flash protocol, so if you have "Emulation" set to ON on any of the available ports, then you'll be getting Stenograph protocol, not Flash. This protocol should work for CAT software set to any model of any of the following writer types, but only for the Serial interface available on those writers (not the USB protocol) Smartwriter, Stentura, Mira, Cybra, Fusion, Protoge, Diamante, Wave. It bears mentioning that someone using an older CAT system can use this protocol with the Passport's USB interface since it simulates a COM port. - Exporting dictionary to RTF slows to a crawl when running out of storage space. I realize you got an error, but according what I saw in the code, it should have been getting extremely slow rather than crashing since it would repeatedly attempt to write to a full drive and keep logging errors every time. In any case, I'm addressing the problem. What should happen now is that you'll get an error message, and when you hit OK the export will abort. RTF exporting is a non-critical function, so we don't have to jump through hoops clearing off space for it. - File dialog that appears after "Storage space low" did not have the Mark button. The auto-delete dialog now has the Mark button back again. - Timecode files added to emulation note file system. Here's the big one. This version now supports the Stentura-style timecode files. For the sake of compatibility, these files are stored in a subdirectory of the root directory of the external storage drives. This directory is named TEXT, and the filenames are FILEXXX.HMS. All CAT software (including Eclipse) is set up to automatically read timecodes from those files when a user reads in a FILE.XXX filename from the root. There's probably no good way around the fact that Passport users might be confused by a directory named TEXT that doesn't actually have text files in it. Perhaps I should make it a hidden folder? That might make tech support tough, though. One other note: Since it's not the jobs folder or the root folder, the system will never look there for old files to delete when making space. However, those files are so absurdly small (half the size of the FILE.XXX files) it would take forever to fill up an external drive with those files, so I don't mind just leaving them alone for now. Since they're not in the root, we won't run into limits on the number of files in a folder. I've checked the timecodes being read in from those files, and they look good. It's worth testing them out, though. Keep in mind that they CAN be used for audio synchronization, but only if the auto-pause is turned off, and they may still need a small amount of tweaking of the timecode offset after being read into the target CAT software. Give it a try and let me know how it looks. - Hidden mark button on Files/Open dialog still working with scroll wheel. Holding down the blank button and scrolling the wheel no longer marks files on dialogs that are not supposed to support multi-selection. - Sort files in file manager by name. The file list will now sort by name, which for the Jobxxx files is correct chronological order due to the naming system used. Certain dialogs, such as "Open" and "Copy" will show the newest files first. "Delete" will show the oldest files first. Note that sorting in filename order means that in the memory, the FILE.XXX and FILEXXX.HMS files will appear first when using the Delete function and last when using the copy function, which actually isn't such a bad idea. --- Passport v1.09.0239 --- 15 July 2010 - Damaged dictionary could lock up the whole system while writing. That's a big one. That damaged dictionary that I received identified a problem with the error checking. With a particular set of dictionary errors, it technically wasn't locking up, but it was logging hundreds of errors each time it went to translate a bad entry. The time it takes to log the errors makes it appear to be locked up. I've not only short-circuited the failure condition, but I've also commented out some of the less necessary error conditions. A bad dictionary will now produce untranslates rather than throwing so many errors that it throttles the whole system. - Move the emufilenum so that it doesn't interfere with audio sync in 4.3. That should fix the sync problem so that it will work properly in both the release and developmental versions of Total Eclipse 4.3. - Give users a way to abort from pressing all keys on writer. It's the SECOND button from the right side. Note that when you do this, all uninitialized keys will be set with a baseline at the very bottom of the sensor range, possibly far below the maximum physical depth of the key. So the worst-case scenario in that instance is a key that won't register, rather than a key that is stuck down, thereby making it impossible to write anything! - Use friendly path names in full storage error message. That particular alert dialog will now use the friendly names. There are still a number of error messages that don't, but I'm inclined to let the ERROR messages tell us what path it's actually trying to access, since the errors are unexpected and users shouldn't ever see them. The "storage full", on the other hand, is an ALERT, which is an expected circumstance and once that we're giving the user an opportunity to correct. A subtle but useful difference. - Copying files with zero file size causes Fatal application error. Small files that showed a zero file size were causing a division-by-zero error when calculating the percent complete value for the progress indicator. This has been repaired. - Clear the Function Button buffer after canceling out of the file dialog. Impatient users where hitting the Cancel button multiple times to exit the file dialog. These multiple button depressions will no longer be queued and therefore will not execute unintended menu commands when the queue is processed. - The copy function now checks for free space first and provides a "drive full" error if there's not enough space. - The copy function now shows a percentage progress indicator for each file since some files can be fairly large, including WAV files and main dictionaries. - File progress should count by 1s instead of 10s. When performing the file management functions Copy or Delete, the file progress indicator will count by 1s instead of 10s to provide a more responsive look. In other file management functions the file listing process is plenty fast and should still count by 10s. It's the copy and delete functions that have been changed. - Copy function should not attempt to copy any more files if one of them fails. If you copy a group of files, any single failure aborts the whole process to avoid cascading errors. - System error messages should clear the last error state after reporting the error. Speaking of cascading errors, this MIGHT fix a whole LOT of problems. Some OS functions will refuse to run or will abort or otherwise barf if the current error level is something other than zero. I am now, immediately after reporting a system error, setting the system error code to zero, thus clearing it. That way, it should only produce further error messages if there are more actual errors, rather than continuing to report the same one over and over. This MIGHT have been the problem with the copy error. I checked the code, and it should have been able to recover from a full drive, because the CopyFile function should abort, report an error, and it should be able to continue after that. Between aborting a multiple file copy and clearing the error state, that should take care of it. Test it out. If that doesn't fix it, I can always go back and try putting in the pre-check for available space first. - The Set button in the keyboard adjustment should be ignored if the key is out of range. That fixes the odd problem caused by setting the registration point without moving the key and then trying to scroll the wheel. It seemed fixed on my machine. Let me know how it looks for you. - Root directory now shows "Available storage devices" when in the root. Previously it was displaying free space values for the Passport root directory which was not useful so a user friendly informational message is displayed instead. - The "Mark" button in the file dialog should be disabled in many instances. It was originally requested for the "Open" function, but I reviewed all instances of the file dialog and made sure that each one was appropriately set up to allow marking or not. - Widen the free space margin on the FlashFX disk. I bumped it up from 1mb to 8mb for ALL devices. That isn't a noticeable fraction on any external devices, so there's no point in splitting it up into multiple thresholds for multiple devices. - Audio problems could cause the keyboard to lag dramatically. Further investigation revealed that with every single stroke hit on the writer, it was accessing all of the drives. After looking at the drive before and after the access, it revealed that only the jobname.pnf file was being modified. There are only three places in the program where it modified the .pnf file. One of them is when the job is closed. The other two are when an audio recording is paused or resumed (since it has to record the times.) The function that pauses the audio was failing to check that the "record" function succeeded. If it fails for any reason, the recording doesn't resume. However, it was still recording a pause time in the info file. Then, when the next keystroke was hit, it tried again to resume the recording, which still wasn't going, and once again was recording another pause time. --- Passport v1.09.0233 --- 7 June 2010 - File progress bar changed to larger font. - Added progress bar to copy files function. - Main battery not inserted message was coming up erroneously. - Going to any dialog and coming back caused timecodes to display from notes instead of current time. - The search feature has been fixed. - OK button in menus will cause settings to save. - Closing any options dialog will cause settings to save. - Added KR = c to phonetics (only valid for whole stroke). - Rounded corners added to UI elements. - File extension wrap-around from 999 to 000 wasn't occurring in the right place. - Translation screen would sometimes show extra line breaks where none existed. - Steno and audio recording could collide attempting to make space at the same time. Yikes! That error you found: 4/23/2010 9:44:5.\util.cpp:makeSpace,202: System error: \Storage Card\jobs\Job '09-04-20 1716.wav 2 looked up error: 2 The system cannot find the file specified. ERROR_FILE_NOT_FOUND That was a doozy. I looked at makeSpace and thought...wait a minute. The file names that it's deleting are the ones that it gets from reading the directory and erasing the file with the oldest date. How could it get a directory and then go to try to delete the file that it just got from the directory listing and have it not be there... Oh, noes! The job handling and WAV handling are in two different threads. If they both happen to try to make space for new data at the same time, they might both get the same listing of files, and whichever one deletes the oldest one first will succeed, and the one that's just a bit behind will lose. So I had to add a mutex that prevents them from simultaneously attempting to delete data off the SD card. You'll want to do some additional testing to make sure that the mutex can't cause a deadlock (I'm pretty sure that won't happen) and that it doesn't cause any odd performance issues while one thread waits for the other. The makeSpace process happens pretty quickly, so it shouldn't be a huge issue, but it's worth checking. In particular, try it with an SD card that has a lot of files on it so that it takes as long as possible to get a directory. Since the SD cards are so fast, it shouldn't be a problem. - Steno foreground color removed and background color renamed to desktop. The steno text and paper color can't easily be changed because of the shadow tracking, which currently fades gradually from black to red to white. In order to make that user-definable, it would be necessary to allow the user to define three colors (paper, steno, shadow) and then write an algorithm that would fade the color gradually from one through the next to the last, and in a way that is compatible with the limited color set that the display can show. So for now, it will remain locked. - Compatibility-mode files aren't compatible with the re-opening procedure. This required quite a few changes to fix. Since all of the data buffering and writing procedures were assuming synchronization between the .pnt and .000 files, when a job was re-opened, the contents of the .000 file would be undefined up to the point where the new data started. In order to associate the .pnt and .000 files, I had to add some new information to the job info file (.pnf) stating which .000 file went with the job. Now that it makes that association, it can keep the data synchronized. In addition, for older jobs that don't have that information, it still has to start a new file, because it has absolutely no way of knowing which file is associated. In the event that it has to start a new file, it will now convert the existing .pnt file and write the data to the new .000 file immediately when the job opens so that it can start with properly synchronized files. - Compatibility-mode files were sometimes getting scrambled. In the process of working on the above issue, I found an issue with the buffering that could have been causing the .000 files to get scrambled. What I don't understand is how it could be intermittent. Based on what I saw and fixed, it should have either been scrambling all of the files or none of them, so I'm still a bit confused. In any case, that just might the .000 file issues. - Added bad data check for the steno emulation files. It's possible that bad data in working memory was successfully written to the Flash memory and then successfully backed up to the backup drives. this check for bad data is to test that hypothesis. What it will do is immediately shut down the writer if it does detect bad steno data, thereby preventing the customer from continuing to write when the writer has become unstable and is no longer storing notes correctly. Unfortunately, that won't explain where the bad data was coming from. It could be some part of the software going out of bounds and stepping on areas of memory that it shouldn't be. That's always a risk with low-level programming, but I've tried to be extremely meticulous about preventing that in the Passport code. - Additional check for the missing SD card when audio recording was added. This will help alleviate issues that occurred when recording audio and the SD card was removed in middle of the job. This addition while helpful probably doesn't do enough to fully resolve the issue. In the mean time Don't Remove the SD Card While Recording! We'll let you know once the software is capable of a graceful recovery in that situation, but right now, it's problematic. - Users may now adjust the Backlight Timer setting. Users may now adjust the number of minutes (from 1 to 30) before the Backlight Timer turns off the LCD screen. Setting the timer to 0 (zero) will disable the timer and prevent the screen from turning off. The Backlight Timer function may be found in Start/ Menu/ Setup/ Input. - Changes made in the LCD screen's brightness are now saved to the registry. Because changes to the Brightness level were not being saved, whenever the screen awakened from its "sleep" it would return at full brightness regardless of the brightness setting prior to its slumber. Currently the changes are saved to registry when ever backing out of the Brightness dialog, however the updated registry is only loaded into memory on a restart of the Passport. Hopefully a future update will allow the change to be applied without a restart. Until then one must shut down and restart the writer for the new changes to be applied. - Brightness and contrast level message added. When you adjust either one, the display will briefly show you the actual value that it's being set to. - The battery indicator now shows a flashing gray battery with a green plus sign icon while charging. This is distinct from the plug which still shows if the AC Adapter is plugged in. If there is ANY charging going on, the battery indicator now shows a flashing gray battery with a green plus sign icon, even if it's actually charging the small battery (unless the main battery is removed.) If the AC Adapter is unplugged, it will show the large or small battery depending on which one is selected. Once Charging is complete the battery indicator will no longer flash and will display a black battery icon with no green plus sign. Please note that functionality of the red LED located above the PCMCIA port on the left side of the Passport is unchanged. When the LED is flashing the batteries are being charged. When the LED is on steady charging is complete. - Only show battery as red when on aux battery and it's at 40%. The battery indicator that represented the main battery was turning red too early (by almost 2 hours) and caused many users to believe that the battery was discharged much sooner than expected. The main battery indicator will now stay black for its entire discharge cycle. Because the Passport automatically switches to the internal auxiliary battery whenever the main battery becomes discharged, no immediate action by the user is necessary. When the Passport switches to the auxiliary battery, the battery indicator will reflect that change by displaying a smaller battery icon. When running at full screen brightness the auxiliary battery icon will turn red when there is approximately 45 minutes of run time left. Reducing the screen's brightness will extend the battery run time considerably. - File management dialogs modified. The file management dialog now gets the entire directory only once, so it should be twice as fast. It also defaults to the root directory for the copy and delete functions. - In dictionary menu, "Load" will load a dictionary from either .pdx or .rtf. "Convert" is no longer applicable, because it doesn't always have to convert. Also, the word "convert" has an ambiguous direction (in or out?) Now, there's a Dictionary/Load button. It can load either a .pdx or .rtf from an external drive into the memory (converting the .rtf if necessary) and once it's done, if the dictionary was named something other than "main Dictionary.pdx" the program will ask if you want to make the loaded dictionary your main dictionary. - Added a check for disk full errors in the process of creating the backup files on the USB/SD drives. If an error (typically caused by the number of files in the root directory) comes up the program will immediately delete the oldest file from the drive's root directory and try again to create the file. - Full card/drive needs to delete older files from the root, if applicable. When the Passport runs out of drive space it looks at the root and the jobs folder of the offending drive and deletes whatever is the oldest file among both until there's enough room. This automatic file deletion will not delete dictionaries even if they are the oldest file. - Prompt user to hit every key during keyboard initialization. The Delete function found in Menu/Setup/Keyboard will cause the Passport to delete its sensor.txt file and reboot so one may initialize the keyboard. Previous versions would restart to a seemingly unresponsive splash screen. The program will now display a prompt instructing the user to press every key. - Battery logging added. A battery logging system has been added to the Passport. If you have "data logging" turned on (the same feature that creates the replay.dat file) it will also create a battery.dat file in the jobs folder. One may use Menu/Files/Copy to transfer the file to external media. Please note that you'll want to periodically delete tthe battery.dat even though it only takes up about 200K per hour. The format of the battery.dat file is as follows. Most of the items will be 0 or 1 since they're bit flags. This is pure, raw data collected once per second from the power management module with NO re-interpretation on the software's part: time,MainTopOff,BackupTopOff,MainBulk,BackupBulk,NotCharging,ExternalPower,Charging,MainSelect,AuxSelect,MainPresent,MainVoltage,AuxVoltage Example: 17:37:11,0,0,0,0,0,1,0,1,0,1,836,832 At 5:37 and 11 seconds, the ExternalPower, MainSelected, and MainPresent flags were on. The main battery voltage was 836, and the aux battery voltage was 832. --- Passport v1.08.0202 --- 27 Nov 2009 - Added up/down controls to every menu that didn't require the scroll wheel for something else. That way, the scroll wheel will move the transcript and/or notes all the time, unless there are menu items visible that take over the scroll wheel, such as brightness, contrast, or font size increase/decrease commands. - Added a way to set the registration point redundant to the scroll wheel. A "Set" button was added to the keyboard adjustment dialog. This button sets the registration point for the currently selected key to the current key location, so you have to press the key with one hand and the "Set" button with the other. This allows users to set the registration point even when the scroll wheel isn't working. Note: This feature does nothing if you have "All" of the sensors selected. In order to make room for this button, the "Reset" button was moved to the menu before the dialog, so "Reset" will now appear on the keyboard menu next to Backup/Restore/Etc. - Removed dianostic code that was no longer necessary. Their removal might provide a few microseconds performance boost. Probably not, but the code was no longer necessary and it's good to clean house from time to time. - Playing the audio while recording was playing from the wrong spot in the file. This has been corrected. The audio will now play from the proper location regardless if the Passport is recording or not. - Viewing a non-SD drive in the file dialog with no SD card plugged in will no longer cause a crash. --- Passport v1.07.0198 --- 11 Nov 2009 - New version numbering system implemented. An extra 4 numbers have been added to the Passport's version number to be consistent with in house document tracking. For example this particular version is 1.07.0198. - Changes made to the Keyboard initialization routine. These changes allow the Baseline and Delete functions in the keyboard setup dialogs to work properly. - The Previous button in the keyboard adjust dialog should wrap around to the right. - File dialog was causing an error when OK was pressed on an empty folder - Anti-stacking algorithm adjusted to prevent improper split. Hitting a key and holding it down, then hitting and releasing a second key, and then finally releasing the first key should never result in a split. - The ability to delete the Sensor.txt was added. The Delete button in Menu/Setup/Keyboard will delete the sensor.txt file so that a new baseline for the entire keyboard may be set at one time as opposed to using the Baseline function on each individual key. When depressing the Delete button, the Passport will instantly reboot. Once the start up screen is displayed, one must depress each and every steno key at least once before normal operation will resume. --- Passport v1.06 --- 5 Nov 2009 - Search for steno MARK added. - Passport lockup during keyboard data backup and restore routines fixed. The steno collection code was changed to pause the steno collection process during the Backup and Restore routines. - Added method to rapidly mark multiple files in Passport file management screens. To rapidly mark large number of files in the Passport's file management dialogs, one may now hold down the Mark button while using the scroll wheel to select multiple files quickly. - Changed way requests from the CAT system are processed. Requests from Eclipse were getting delayed for a long time before they were finally processed by the Passport, which would result in the Eclipse translation gradually getting farther and farther behind. Code was added to the Passport so that if several requests came in stacked up, the Passport would process them all at once, which will prevent the Eclipse translation from falling farther behind. - Trigger stroke for Sensor data diagnostic snapshot feature changed to +Z. One may now hit +Z (The + is the lower StenoMagic key) to trigger the Sensor data diagnostic snapshot feature added in v1.01. This will store the last ten seconds of sensor data into a binary file called keydiag.dat. As long as they hit the stroke within ten seconds of the unexpected stroke, the appropriate data will be recorded. Each time +Z is written, more data will be appended to the diagnostic file. The keydiag.dat file (along with other diagnostic log files) is written to external media devices when the Menu/Setup/System/Get Log command is performed. - Passport was locking up upon exiting job after playing back recorded audio on Passport. The procedure for shutting down a job wasn't checking to make sure that there wasn't a playback in progress. 1.06 shuts down all audio processing before closing the job, which should take care of it. - Lockup occurring when audio playback reaches end of audio file repaired. - Microphone boost control modified. The microphone boost control in Menu/Audio/Setup should now accurately reflect the status of the microphone boost feature. - Internal Audio levels adjusted. Relative audio levels between various inputs and outputs were adjusted internal to the application. - Audio was not syncing up with transcript in both the Passport and Total Eclipse. Not enough memory was allocated for some of the audio calculations which caused an overflow on long files. With this update audio playback should work fine on the Passport, however because Total Eclipse makes very similar calculations an update 4.3.0.10 of Total Eclipse will also be necessary to take advantage of this fix. --- Passport v1.05 --- 14 September 2009 - changes made to the communications routines that should prevent the long communication pauses and/or apparent lockups. This version theoretically shouldn't be able to pause for more than five seconds before attempting some quite dramatic recovery procedures (closing and re-opening the port.) - The Translation background color is now operational. --- Passport v1.04 --- 1 September 2009 - Fixed bug related to new baseline feature. --- Passport v1.03 --- 27 August 2009 - File dialog locking up when no drives are present repaired. - Visual representation of stenomark now matches Eclipse. - Sensor baseline dialog item added. Starting with 1.03, the Passport no longer continuously sets the recorded sensor maximum value at the lowest value that the key can possibly move. Instead, it sets that value once when the machine is first initialized (when the installer presses each key once) and then never sets it again. This change is to prevent sensor maximums from drifting downward when the machine is pounded on rarely, even though the user normally only hits the key lightly until they meet the first bit of resistance from the felt/rubber stopper. The baseline should be the point of initial resistance, not the lowest the key can be smashed. The "Baseline" button on the keyboard adjustment dialog now allows users to reset a key if the movement range is too large or too small. Select the key exactly as you would to adjust the registration point, then press the "baseline" button. This runs exactly the same procedure that is used when the machine is first initialized, but only for that one key. On the screen, the system will ask you to press that one key. Press and release the key normally, and the new sensor maximum will be set to the lowest point that the key traveled during that keypress. --- Passport v1.02 --- 11 August 2009 - SD card and CF card indicators were not identifying the devices properly. The SD card should now show up properly instead of having "CF card" and "CF card2" on the list. - Resource leak in file dialog fixed. - Put in a progress dialog when deleting a lot of files. - Put in a progress dialog for reading large directories. Because I can't predict how many files are in the folder ahead of time, this can't be a percentage bar. Instead, it simply counts files so that the user knows it's not locked up.l - Missing USB and bluetooth causes delays. Eclipse will periodically transmit a "send strokes" command if it doesn't receive strokes from the writer for a second or two. This gives us a mechanism for avoiding problems caused by the USB or Bluetooth connections being unavailable. What the Passport will do now is if it sends a stroke out the USB or bluetooth port and the send command fails, it will refuse to send any more strokes until it hears a request from Eclipse to send more data (which will only happen when the port is once again available.) - Deleting the main dictionary causes an error if it's entirely empty. This will no longer generate an error. - Dictionary RTF convert is not asking to use it as main dictionary. The user will now be asked if they wish to use the converted dictionary as their main dictionary. - Brightness less/more were backwards. Fixed. Let's not confuse the users more than necessary. --- Passport v1.01 --- 04 August 2009 - Memory leak that affected the importing of dictionaries has been repaired. - Changed default settings on several features such as anti-stacking overlap percentage, brightness, contrast, etc. - Sensor data diagnostic snapshot feature added (ability to dump last 10 seconds of sensor reading via a stroke on the writer). If the user is writing and they see a mysterious stroke appear on the screen, they should immediately hit +EURBGS (The + is the lower StenoMagic key.) I can make the stroke user-definable in a future version if necessary. This will store the last ten seconds of sensor data into a binary file called keydiag.dat. As long as they hit the stroke within ten seconds of the unexpected stroke, the appropriate data will be recorded. Each time they hit that stroke, it will append to the diagnostic file. When it does so, it adds 150K of data to the file, so it should be used somewhat sparingly. Don't hit it a hundred times a job. We just need to capture a few examples of things like the errant -P or -T keys that some users are reporting. The "Get log" function, in addition to copying the errorlog.txt file to external drives, will also copy the keydiag.dat file to the external drives. After it does so, it will delete the keydiag.dat file from the memory so that it doesn't keep growing to a potentially harmful size. This version should be sent out to those users who are reporting frequent anomalous strokes along with instructions about how to capture the data and send it to us. Along with the keydiag.dat file, we will also need the sensor.txt file that can be retrieved using the keyboard/backup function and the jobname.* files that were written during the anomaly and a description of exactly where the anomalous stroke is in the file so that we can cross-check the sensor readings against the job. This should give use the information we need to find out where the anomalous strokes are coming from. --- Passport v0.51 --- 28 July 2009 - One may now use the "Copy" command to copy a Main Dictionary.pdx from any drive to [Memory] and the main dictionary will be replaced. One may also copy in any auxiliary dictionaries one likes, however these would have to be selected in the Dictionaries/In Use menu to use them during a job. Please note that native Passport dictionaries can now be exported from Total Eclipse version 4.3.0.8 - Battery indicator has been repaired so that it shows the current state of charge. --- Passport v0.50 --- 23 July 2009 - Due to superhuman feats of programing skill the version number has jumped from 0.37 to 0.50. There will be no versions 0.38 through 0.49. - Added user-definable colors under Menu/Setup/Display/Colors. Note that the menus have changed a bit so that there's a "font" item that contains the steno/text/general (rather than buttons/steno/text) font size items. --- Passport v0.37 --- 23 July 2009 - VU meter for audio input capability added. Next to the battery on the left a UV meter will appear showing the recording level. Right now, it's simply a black box with a green bar that moves back and forth. As a result of the VU meter some changes were made to the audio recording process behind the scenes - Fixed a bug where loopback was canceling out the audio playback volume. Audio playback volume should now work as intended. - Major changes to the anti-stack algorithm. There should now be a lot less splits. Recommend that all users change to 15 for anti-stack percentage - Using "OK" on the file dialog without selecting a file was crashing. It will now mark the highlighted file if no other files are marked. - Fixed issue where main battery warning message was being overwritten by the splash screen. - File dialog modified to show friendly names for devices. The users will now see "Memory", "SD Card", "CF Card" and "USB Drive" instead of the Eurotech names. - Fixed issue where empty folders would cause "invalid value" error when navigating through them. - Backup/restore keyboard settings menu items. Under Menu/Setup/Keyboard there are now three submenu items: Adjust, which goes to the adjustment dialog, and Backup and Restore. Backup and Restore both allow the user to select a location where the keyboard settings are stored. In each case, it copies the Sensor.txt file to or from that location. Using this feature, reporter/reps can store their keyboard settings on a USB drive, for example, and restore them after users have messed around with the keyboard adjustments. - Added method to load your own splash image. Take any .jpg and put it on a USB drive or SD card, etc. Name it "mysplash.jpg" (case insensitive.) Insert that into the Passport and use Menu/Files/Copy and navigate to the mysplash.jpg file. Once you hit "OK" on that file, you don't need to select the destination. It will automatically be copied to the appropriate location and will appear on the splash screen whenever the user turns on the writer or closes a job to return to the splash screen. It will scale the image to a square that fits into the splash screen. Note that if an image is enormously large, it may refuse to load. It scales the image after loading it, so if there isn't enough memory in the Passport to even load the image in the first place, it won't bother. - Fixed issue where stopping the audio recording could crash other procedures. - Support mic boost option. The audio settings now has a Microphone boost yes/no option. WARNING: It is also possible to set the playback volume and the live monitoring so high that YOU MAY DAMAGE YOUR HEARING. This a device is built to be extremely sensitive so that it can pick up sounds from across the room. If you turn things up too high without checking, you can get nasty feedback and blown eardrums, even with a tiny pair of headphones. It is possible to turn the boost so high that you distort your recordings. - Fixed issue where audio objects were being deleted but not set to zero. - Note the locations of the audio input/output ports. The audio settings dialog will now flash "Microphone" and "Headphones" indicators on the left side of the screen since the jacks aren't labeled. - Clock on the display. The upper-left corner of the screen will now show the current time if you are at the bottom of the job. - Display current timecode. If you scroll up, the time in the upper-left corner will show you the time for the notes that are on the screen currently. - Text typing should support deletions. When typing text into a dialog from the steno keyboard, you can now use the * key to delete the last character. - Text typing now supports many more characters. Eventually, this may become user-definable, but that opens a huge can of worms, so for now we are using a few standard key combination and re-using some others in order to make typing on the Passport as efficient as possible for the items that users are most likely to want to type, which includes not only letters and numbers, but also spaces and punctuation marks, and since they're going to want to type dictionary entries from scratch, we have added a few shortcuts for items such as braces and backslashes for making commands and conflicts. There are a couple of special keys: The number bar by itself # will insert a space. The + key (the low key closest to the user) will enter CAP mode if you press it once. Pressing any typing key will then capitalize the key and turn CAP mode off. Pressing + twice will enter CAPS lock mode, which will capitalize everything until you press the + key again. Any individual letter or number key will appear as itself. The special combinations are as follows (uncapped --> capped) STKPWHR = { --> " FRPBLGTS = } --> ' STPHFPLT = \ --> / SKWRRBGS = - --> ~ STPH = ? FPLT = . --> : RBGS = , --> ; The following mimic the computer keyboard: 1 --> ! 2 --> @ 3 --> # 4 --> $ 5 --> % 6 --> ^ 7 --> & 8 --> * 9 --> ( 0 --> ) And here are the multi-key letters: SKWR = j SR = v TKPW = g TK = d TPH = n TP = f KP = x KWR = y KW = q KH = ch PW = b PH = m HR = l EU = i PBLG = j PB = n PL = m BGS = x BG = k --- Passport v0.36 --- 3 July 2009 - Fixed lockup bug in translator. - Removed additional lockup diagnostics added in earlier versions. --- Passport v0.35 --- 1 July 2009 - Added a timeout check on serial writes for unconnected USB functionality. - The settings value for USB ON/OFF will once again revert to the saved value rather than OFF for safety. - Added USB client port functionality for realtime connections. Please note that a Passport USB driver must be installed on the host computer before using the USB connection. The driver, PassportUSB.exe, and installation instructions are available in the Passport section of the website. - Added code to write out USB registry entries and reboot OS. - Fixed Audio Loopback not muting when turned off. - Added instant settings save when Bluetooth PIN is changed. - Fixed an extremely unlikely division-by-zero error in the anti-stacking algorithm. - Added a safeguard against pure zero percent overlaps in the anti-stacking algorithm. - Additional lockup diagnostics added. - Replay function restored to menu. - "Select" button in file dialogs changed to "Mark." - "Select" button in option dialogs changed to "Change." - Added a Mic Boost option to AudioControl function, however the option has not been added to the user interface. --- Passport v0.34b --- 19 June 2009 - Diagnostic indicator added to assist with tracking the cause of application lockup. In the upper-left corner of the screen, there will be a series of quite tiny green and red dots blinking on and off. If the software locks up, these dots will stop blinking. The pattern of dots will tell where in the code it's locking up. (drawing dots in a binary pattern takes up far less space and is far faster than drawing a number using the text drawing routines that have to deal with fonts, etc.) Right now, there are only have a couple of dozen ticks in the code where the dot pattern changes, but this could easily be expanded to dozens more in an effort to narrow down the problem. Should the application lockup, have the customer record the dot pattern as RGRGGRRR or whatever it is when it locks up before rebooting the writer. Recording the pattern for multiple lockups would be helpful in determining if we have one or more issues. --- Passport v0.34 --- 20 May 2009 - Resolved dropped strokes issues related to audio recording. Some users experienced issues with dropped strokes in conjunction with audio recording. This version places a higher priority on sensor readings to eliminate the possibility of missed readings due to audio processing. - Fixed an issue regarding Bluetooth pin entry and persistence. --- Passport v0.33 --- 6 May 2009 - Updated Bluetooth manager. Third party bluetooth manger was replaced with a manager developed in house. --- Passport v0.32 --- 30 April 2008 - Hidden Up and Down scroll wheel functions added to search and audio menus. This will allow the user to use the scroll wheel to move the steno on the left side of the display while those menus are displayed. - WAV recording indicator now only appears when recording. Rather than the red/green indication, it's now green or nothing. If you see no waveform, no recording is happening. - Job info file type created. There will be a jobname.pnf file associated with some jobs. This is a general-purpose file architecture that will ultimately be able to have other information in it, such as the dictionaries used for the translation, the witness name, etc. For now, it contains only the record of when the audio recording was started and stopped. - Record/pause timecode adjustments implemented. Because the job info file type is now available, the record/pause buttons are enabled. You can now pause the recording at any point during the job by using the "pause" command and resume the recording by using the "record" command. The times when the record and pause were issued are recorded in the job info file so that the playback procedure can recalculate the appropriate start time for the current timecode. - Auto-pause setting. Under the audio settings there is now an auto-pause setting that can be turned on or off. Below that is a pause delay which is indicated as a number of minutes. If enabled, that will automatically pause the recording if there are no steno strokes hit within a period of minutes indicated by the pause delay. - Auto-resume setting. With auto-resume turned on, any stroke on the writer will restart the audio recording. This will happen whether the recording was paused by the user or by the auto-pause feature. - Record button can be used as a toggle. The top menu now has both a "record" and a "play" button. The "Record" button can be used to both pause and resume the recording. It can also be used to start the recording if the user has the audio recording turned off when they start the job. - Make sure audio goes to SD card. The software can now detect which card (storage card 1 or 2) was the SD card. The passport will now start the audio recording on the SD card no matter which one it is. - Warn user about write-protected SD card. If a user attempts to start a job with a write-protected SD card they will get a warning. They will be able to continue writing without audio, but they'll get errors whenever it tries to write the steno and text to the SD card. This error really should be addressed by the user by changing the write-protect switch or removing the card entirely. - Check for full SD drive when writing WAV file data. If the SD card fills up while recording audio the Passport will immediately begin deleting old files just as it does with all other file types. --- Passport v0.31 --- 29 April 2008 - Adjust for 0.0078 audio drift. The Passport records .9922 seconds of audio for every second of actual time. This adjustment will now be made both on the Passport's play function and in Eclipse's playback of Passport note files. - Audio input level added. The audio settings are found under Menu/Audio/Setup. The input level can be set from 0 to 100% and works well with both powered and unpowered microphones. Note that there is yet one additional boost that's possible on the input which may be activated at a later time. It was avoided in this version due to deafening feedback through the headphones. - Audio output level added. Also in the audio setup, this setting determines the level for the headphones. - Audio monitoring added. Right now, the monitor YES/NO is more like LOUD/QUIET, but that will be figured out at some point. In any case, the audio monitoring that can be done through the Passport is extremely sensitive and can pick up quiet voices from across the room. - Play button should toggle playback on and off. This eliminates the need for Play/Stop buttons. Eventually the stop button will be replaced by the record button toggle. - Users will start with a random bluetooth PIN This will hopefully be different for each user. - There is now a setting under the options for the bluetooth PIN. Go to Menu/Settings/Output to find and/or change the bluetooth PIN. - Serial, USB and bluetooth each now have separate on/off settings and emulation on/off settings. Under Menu/Setup/Output there are settings for Serial, USB and Bluetooth, each of which has its own ON/OFF setting and its own emulation mode setting to determine whether it uses Passport communications protocol or Flash communications protocol. The USB connectivity will not be active until the USB driver has been purchased, distributed and installed, but this connectivity has been successfully operated with the test drivers from the driver vendors and it works fine. Note that these communications methods can all be used simultaneously to different computers if desired. I have tested writing bluetooth data to one computer and serial to another. - Bluetooth will now start only when starting a job. This eliminates the unnecessarily long startup time for users who do not have the bluetooth activated. - Refine system for only occasionally checking serial ports which are in an error state. An active bluetooth device which the computer is not connected to still has an active COM port, but all communication attempts pause for a moment. If this version detects any COM port errors, it will wait a few seconds before retrying so that the writer can behave normally between attempts. This solves the problem that made the system look like it was locked up - Keyboard adjustment dialog needs some way to select the current key without hitting the key. The keyboard adjustment dialog now has "Next" and "Previous" buttons so that you can highlight any key, even ones that can't be pressed past the registration point. - Sensor readings will be done more frequently in order to avoid dropped strokes. Some users were complaining of issues with dropped strokes. This version places a higher priority on sensor readings to eliminate the possibility of some of them being missed. - A missing main battery will now generate a warning message. It will only generate this message once per session, but once should be enough. - RTF dictionary export. Under the Dictionary dialog there are now both import and export buttons. The export button asks you to provide a destination folder and will then copy the contents of the current dictionary to an RTF file in that destination folder. - The "Convert" option for dictionaries will now ask if you want to use the converted data as the main dictionary. A common mistake was to convert username.rtf using the menu/dictionary/convert function, which made a username.pdx and didn't have any effect on the Main Dictionary.pdx. After performing a conversion, this version will now ask if you wish to use the converted dictionary as your main dictionary. Note that if you answer yes it will overwrite the old main dictionary entirely. - Allow users to define their own delete stroke. Look under Menu/Setup/Input for this setting. When selected, it opens a separate dialog that allows the user to write any number of different delete strokes. Note that if the user writes three strokes: * / *R / R* then each of these strokes will be considered an allowable alternate form of the delete stroke and each one will work for deleting. The fact that this feature allows multiple strokes does not mean that you can use a multi-stroke delete entry, so you can't use TKHRET TKHRET for deleting one stroke, for example. - Options dialog split up into multiple settings. While a single options dialog is possible, I thought having to scroll down through so many options was starting to get awkward, so I separated them out. There are now input options for determine how the steno and translation is handled, output options for determining how the data is transmitted to other systems, and audio options dealing exclusively with the audio settings. - File selection dialog now allows multiple selections. There is a "Select" and an "OK" button. The "select" button marks the files and the OK button then performs the desired operation. If you hit OK without selecting any files, the system will simply select the one that is currently highlighted. - Multiple file selection now works on delete, copy, convert, import, add dictionary. These are all of the functions which make sense to allow multiple file selection. - The current job name and emulation file name will be suppressed from all file operations. For example, if you select Menu/File/Delete you should not even be given the option of deleting the currently open job. - exe, dll and lnk files will be suppressed from all file operations. There were a couple of places where it was possible to see system files, which should normally not be allowed. - File selection dialog now shows current path and drive space." These will appear at the top of the list of files with a different background color in order to make it clear that it is not a selectable item. - File dialog updated to show "Please wait" message. When reading a directory, the file dialog will show "please wait" on the screen until it's done reading the folder, since a large number of files can make that function take longer than expected. - Added system view function to look at entire file tree with sizes. A couple of users have unexpectedly run out of space on the FlashFX disk. Without the development environment, it's hard to have a look at their machine. This version has a Menu/Setup/System/View function that allows users to browse the entire folder tree of the Passport's file system and view all files, though they cannot be copied or deleted. This dialog shows the size of each file as well as the name. - The function for making space on the FlashFX drive should not attempt to delete the current job files. When automatically deleting older files, the system will skip over the currently open job files. - Suppress specific folder names in any combination of upper and lower case. The "passport" folder should not be accessible for deleting or copying. This will now be the case whether it's named "passport" or "Passport" or "PASSPORT", etc. - Search menu added to main button list. It was added in place of one of the redundant "Mark" buttons. - Search functions added for various paragraph types, etc. There are currently the following search functions active in the software: Prev Q -- jumps to the previous question. Prev A -- jumps to the previous answer. Entry -- Allows the user to enter text to search for. This will eventually allow steno, but it does not do so yet. Repeat -- Repeats the last "Entry" search that was done. Go to top -- Jumps to the top of the job. Prev Pgh -- Jump to the beginning of the previous paragraph. Prev Paren -- Jump to the previous open parenthesis - Digits from 7 and up were not showing up when typing into a text field from the writer. You should be able to type any alphanumeric characters in the text field of the entry dialog. Note that the entry dialog has been modified to allow either text or steno or both, depending on what type of entry the user is working on. The Dictionary entry function allows both. The delete stroke setting only allows steno. The bluetooth PIN allows any text, etc. - Lockspaces visible as boxes on document screen. Lockspaces will remain in the dictionary but are suppressed from the translation screen - Menu path changed to use background color. The menu path wasn't sufficiently differentiated from the substantive text of the steno and translation. It will now use the button background color to help join it conceptually with the menu buttons. - Mechanism added for flashing a message until next screen update. Some functions can't have a progress display because there's no way to know how long it will take. - Screen brightness control. Under Menu/Settings/Display/Brightness. You can use the mouse wheel or the more/less buttons to change the backlight, which can help save battery life. - Hidden Up and Down scroll wheel functions added to some search and audio menus. Any menu can be augmented with hidden up/down functions to allow the scroll wheel to work to scroll the notes while another function is visible. This was done with the audio menu and with the search menu. Other menus, such as the contrast and brightness menus, use the wheel for adjusting other values. --- Passport v0.30 --- - Double punctuation eliminated from translation paragraphs. Previously, a translation of "{Q}that's true{.}{A}no it isn't" would come out as "Q. That's true.? A. No it isn't." with the double punctuation before the answer. This version avoids doubling written and automatic punctuation. --- Passport v0.29 --- 15 April 2009 - A totally empty jobs folder would cause an unrecoverable error. - Fixed a critical internal error relating to Bluetooth. --- Passport V0.28 --- 13 April 2009 - Bluetooth functionality added. Here's how it works. When you first turn on the Passport and the software starts running, it immediately starts up the BT and observes what COM port it's using. For now, the way that the user selects this is go to into the settings dialog and change COM ports. The appropriate port will show up like this: "COM6 (Bluetooth)". There are two unresolved issues. I can fix them, but I don't want to make a lot of dramatic changes to the communications routines on the eve of a seminar. One problem is that it doesn't seem to uninitialize properly when I close the program, so when I'm debugging I have to turn off the machine and turn it on again or the BT won't initialize. This is irrelevant to users, who are turning off the machine every time they exit. It's really annoying for development, though. The second problem is something users can notice: If you select the BT port and you do NOT have the computer connected to it, there is tremendous lag on the writer. It takes a very long time for ANY serial processes, even asking the system if there is any data waiting, when requesting information from a BT port that isn't connected. In other words, once you select the BT port as your port of choice, you will have to connect it to the computer or the writer will slow to an unusable crawl. Once it's connected, everything should work normally. Also, if you have the serial port (COM1) selected instead of the BT port, everything works normally. This lag issue can be addressed in the software by adding some functionality to detect a disconnected BT port and to only check for a reconnection every few seconds, and until a reconnection is detected don't try to do anything with the BT port at all. This sort of code is a bit delicate, and I started to work on it when I realized that it could cause the serial port to stop working if I made even a tiny mistake, so I temporarily disabled the new code and checked in what I had so far. Let me know how it looks. Eventually the interface will be changed so that the menus will say Serial/Bluetooth/USB rather than having COM port numbers. The plan is to have a separate YES/NO selection for each Serial/Bluetooth/USB and have them all default to ON. Users can be plugged in any number of ways and the software will simply detect what's plugged in and use it (it's worth noting that once this is done, it will be possible to hook these three different output types to three different computers.) The options would only be there so that users could intentionally disable one or more connection methods. --- Passport v0.27 --- 10 April 2009 - Audio record/play functions implemented. Currently, the jobname.wav file will be stored ONLY in the "Storage Card\jobs" location, which is the SD card. There's a setting under the Menu/Setup/options for Record audio YES/NO. It will remember this setting permanently for all future jobs. Note that you MUST have this set to YES before you hit the very first stroke in the job or it will NOT record audio in that job at all. That will change once the record pause function is implemented. On the status bar, you will see a waveform icon. This icon will be red when the system is not recording and green when it is recording. If it doesn't appear at all, then the audio is disabled entirely. Under Menu/Audio there are functions for Record/Pause/Play/Stop. Pause is for stopping recording. Stop is for stopping the playback. Currently, the Record and Pause functions are not enabled because I haven't written the functions to keep track of the timecode changes required by pausing the audio. It is possible to play back the audio for a job in progress, as long as you play back a portion of the job more then a few seconds old. It is possible to re-open an older job from the writer and play synchronized audio from that job. The WAV files can be copied to the PC and are fully compatible with every program that I've used to open WAV files. There is not currently a timecode offset in the settings, though there needs to be. I thought about including a -3 second delay hardcoded into the program, which may be the way to go for now. --- Passport v0.26 --- 24 March 2009 - Test button crashes if note file is empty A couple of people ran into this, so the test button now does nothing if the job is completely empty. - Steno notes will return a blank stroke instead of a null pointer for an invalid request. This was related to Cheri Mays' issue. I wasn't able to track down which function was requesting stroke number -1 (besides the test button) so if any function does request it it will now log the error and return a pointer to a dummy blank stroke to avoid a crash, rather than returning a null pointer. Further testing will hopefully expose the function that's asking for the invalid stroke number and I'll be able to fix the root cause, but this change should avoid the crash/lockup that this error could otherwise cause. - Conflicts starting with \s would import as $PGH from the RTF \s#, where # is a number, is the syntax for a new paragraph in RTF. This version now parses the conflicts last so that it doesn't end up misrecognizing a conflict starting with 's' as a paragraph type. - Error dialogs don't work right when starting a new job by hitting a stroke This version resets the splash dialog and initializes the two-column display properly before attempting to display the error message. - Status bar not showing new job name immediately The status bar will now show the new job name with zero strokes, and will also reset to no job name when returning to the splash screen. - FileFind functions were not closing the find handles, causing a resource/memory leak Oops. I have no idea if this caused any user problems. Every time the system went to write data to the drives, it would search the directory to see what drives were available, and each time it did this it would leave a FileFind handle open. I have no idea what the maxiumum number of these is in Windows CE or how much memory they take up. Anyway, the problem is gone now, whether anyone ever tripped over it or not. - Warning about low space and optional deletions should appear for all backup drives When starting a job, the system will now warn users of low storage space on any of the backup drives as well as the FlashFX disk, and will give users an opportunity to delete files to make room. - Running out of space on a backup drive causes a crash If it's desperately needed, as a last resort, the system will now automatically delete the oldest files first just as it does with the FlashFX disk storage space on the writer. - Close job function should not work if there are no backup drives present If there are no backup drives present, the close function will not close the job and will return to the main screen again. The user must plug in a backup drive before closing the job, otherwise they will not be able to get to the splash screen to turn the writer off. --- Passport v0.25 --- 13 March 2009 - Added the ability to delete or backup the main dictionary. There was no way to delete or copy the main dictionary since it was open all the time (D'oh!) It now closes the dictionary, performs the file operation, then opens it. That means you can delete your main dictionary and it has the effect of starting a new empty one. You can also back it up to the backup media. - Corrected inaccurate OS version information in the About dialog. The operation system version information was being misreported in the About dialog. The correct information is now read from the registry and displayed in the About dialog. --- Passport v0.24 --- 3 March 2009 - About dialog box added. The About dialog box [MENU/ABOUT] lists the Passport version number, Operating System version details, and raw data from the power management system. Windows Operating System information format is Major.Minor.Build.Platform. So, for example, Windows CE 5.0 will show up as 5.0.X.3, where the platform value of 3 represents the fact that it's Windows CE and not Windows for an x86 desktop. The build number that shows up on my machine is zero, so I'm guessing that same 5.0.0.3 number will show up on pretty much everything. The GetVersionEx function also returns a string of data that can contain extra information, but that's blank. So I think that's all we're going to get. The Power Management raw data shows the power manager microprocessor's firmware version, the status register value, the main battery voltage and the aux battery voltage. Note that none of those numbers are dynamic, so in order to see changes you'll have to hit Close and then About again. For now, the numbers are all given as the raw hexadecimal values read directly from the firmware output. I can provide an easier-to-read display later, but I'll wait until the final version of the firmware is ready in case anything changes. I just wanted to give you something you could use right away in order to check things out. An easy way to read the hex values if you don't know the different combinations is to use the Windows calculator set to scientific. Set the base to hex and type in the number, and then either press the decimal radio button to convert the voltages into decimal or press the binary radio button to see the individual status register bits (bit 7 is the one on the far left, then 6, etc..) FYI: the version number is now stored as the last string in the string table since it's used in both the about box and on the splash dialog. --- Passport v0.23 --- 20 February 2009 - Additional diagnostics around the write procedures added. - Changed the way data is saved to memory devices to eliminate pauses in out to both Display and output to CAT system In the function that updates the backup files, the Windows API CreateFile function was used to open the files on the backup drives using the CREATE_ALWAYS flag instead of the OPEN_ALWAYS flag. Both of them will create the file if it isn't there so that the file will always be open at the end of the function call. However, the former always creates a new file with zero length and the latter always opens the file, creating a new file only if necessary. So the backup procedure was always backing up the entire contents of the note file, the compatibility file and the transcript file every time a new block was being written out to the Flash memory. --- Passport v0.22 --- 17 February 2009 - Display update routines were running more frequently than necessary This is a sort-of bug fix. The app was telling the display to check for an update to the graphic elements every the sensor readings changed even a tiny bit, which was only necessary when the adjustment dialog is visible. - Replay logging is now buffered to eliminate performance hit The replay file no longer writes out every stroke. It now writes out every 512 strokes. Note that this will mean that this feature will no longer be useful for duplicating crashes or total lockups, but could still be useful to track down pauses or missing strokes (just to verify that the strokes are coming in at all.) - Timelog.txt file system created to find pauses You'll notice in the source code a number of lines that read LOGTIME; These lines will log the current source code file, function and line and the tick count, which is in milliseconds. It also logs the difference between the previous log event and the current one. That means that in the time log file we can tell exactly how much time elapsed between particular parts of the source code. This process resets every time the screen updates. If it takes more than five seconds between screen updates, the log of every time event that occurred since the previous screen update will get written to a TIMELOG.TXT file adjacent to the errorlog.txt file. That will mean that the only time it will log time events is when it sees an unusually long pause, rather than logging everything which would create extremely large and unwieldy files (and would slow everything down, as well.) For now, I have placed time logging commands in a dozen different places in order to get a coarse sense for where the problem is. I'll add more lines to narrow it down after reports from users come in. In order to collect data from users, the "get log" function will copy the errorlog.txt AND the timelog.txt (and the replay.dat) files to all available external drives. Since I have no idea how large the timelog.txt file needs to get, or how often the users will be able to attend to it, I'm not erasing old data like with the errorlog.txt. Instead, when the user hits the "get log" function, it will copy the file and then delete the timelog.txt file so that a new one will be started. So a user can do several jobs and send us a timelog.txt file and it will show us where the pauses occurred in all of those jobs (hopefully they'll all show the pause happening in the same place in the code!) You can see what this function does and how it works by firing it up in the development version and setting a breakpoint somewhere in the code while the writer is running. If you break the execution and then don't start it up for ten seconds, the display routines will see that the display wasn't updated for over five seconds and will append data to the timelog.txt file. Viewing that file will then show the pause occurring in the code between the two LOGTIME commands that were before and after the point in the code where you set the breakpoint. --- Passport v0.21 --- - Removed timing and logging diagnostic routines from steno collection function The steno collection diagnostic routines were adding a delay in both the display and output of data and causing the possibility of dropped steno strokes. --- Passport v0.20 --- - Open function should list newer files first - Copy function should list newer files first The Delete function should still show oldest files first since mostly people will be deleting older files to make room on the drive. - Power indicator on status bar shows power/main/backup levels The program is only using a small amount of information in the power management system for now. The rest will be implemented once the Power management firmware is completed in just in case there are any changes. Right now, if the power is plugged in you will see a cable/plug graphic attached to the battery. In this case the battery graphic will always show the main battery and its charge level. The only time you'll ever see the backup battery graphic is if the machine is unplugged and the main battery is removed or (presumably) drained. If the power is unplugged, the battery graphic will show the main battery until it's dead. Once it switches to using the backup battery, it will show a half-size battery graphic with the backup battery level in it. Either battery will display in red instead of black if the power level is below 20%. I used the range of 6.9 - 8.3 volts to determine the charge level. I am not doing any interpolation of non-linear drain patterns. The 0 - 100% on the graphic corresponds to a linear proportion of 690 - 830 from the firmware response for the battery currently selected by the writer. --- Passport v0.19 --- - Opening an existing file was not buffering the text properly - Opening an existing job was unable to jump to the end quickly when writing started Both of these issues caused problems when opening an existing file and attempting to write into it. - Text display could cause delays on large paragraphs This was a problem opening an existing file, but it could also be an issue for files started from scratch after writing long enough. I don't know if this is what was causing the delays or not, but it's worth checking out. - Shadow display toggle added This is found on the options dialog. - Number bar will now show digits on steno display It will show digits instead of letters in the appropriate locations when the number bar is hit, though it will still show the number bar on the left as well. - Changes to how individual key start/end times are recorded (anti-stacking) --- Passport v0.18 --- - Upgrade from Passport v0.17