You are reading a single comment by @tev and its replies. Click here to read the full conversation.
  • the IDE insists that it's a binary file when it should be text

    Quite likely it is binary (or maybe even UTF-8 now?) = there is some non-ASCII byte there. Often there is a button there to switch to text mode, maybe it should be there always (currently it is not).

    . Further complicating matters is the fact that the default filename lacks the correct extension (it's log.txt (Storage file) instead of something ending in .txt)

    Which OS or browser it is? On Windows in Chrome it definitely adds just .txt

    Instead, I only get a Send to RAM button and then a dump of strings representing the names of my storage files on the debug pane an instant after the dialog window pops up. Another possible clue is that when this happens there is usually a delay of a couple of seconds, which is longer than it normally takes.

    It may be out of memory (or low stack?) situation. Maybe some app that use lot of memory/stack is running? Do you see some error or exception message in the 'dump of strings' or series of dots inside of (json) output?

    I've seen this on low memory devices (nrf51822 with 16kb ram), the code sent by IDE that does the listing was the most complex thing to run there. While other simple code was running fine (there is not really much RAM available there) listing the storage failed a lot until I reduced total variables for the build => increased space for stack. I think it needs to build a relatively big JSON object (which depends on total number of files there) which needs a lot of stack space.

  • Quite likely it is binary (or maybe even UTF-8 now?) = there is some non-ASCII byte there. Often there is a button there to switch to text mode, maybe it should be there always (currently it is not).

    There are what look like random escape codes in the tracebacks and such, which look like formatting codes for terminal emulators. But they're not really that useful for a written .txt log in a file, given that they confuse programs.

    The only button I get is for “decode JS”, but that doesn't seem to do anything in this case. Having a way to force it to treat the file as text would be helpful, though, especially in cases like these where I know it really is text with just a couple of stray rouge bytes that can be safely ignored.

    Which OS or browser it is? On Windows in Chrome it definitely adds just .txt

    For some reason on Ubuntu and Chromium it wants to add the string “ (StorageFile)” to the end of the filename, which confuses the system file save dialog. I can rename it but it's annoying. That's what displays in the storage list in the UI, too, but I'd argue that the “(StorageFile)” prefix should be dropped in the suggested filename when saving (or else placed just before the extension, or at the very start of the name or something).

    It may be out of memory (or low stack?) situation. Maybe some app that use lot of memory/stack is running? Do you see some error or exception message in the 'dump of strings' or series of dots inside of (json) output?

    It doesn't appear that there is a memory issue. There are no errors or exceptions, either, just the list of strings. However, I am starting to notice the pattern: It seems to happen consistently if the watch has been idle for a minute or so before I request the list. If the Bluetooth link was just active, it works fine, but after a couple of minutes, the odd delay and strange behavior occur, only for it to work fine if I immediately try again. It sort of makes me wonder if it could have anything to do with power management on the Bluetooth link somehow causing problems.

    I happened to catch this in the IDE error log when it happened:

    >>> Receiving...
    WARNING: No result found for "require('Storage').list().forEach(x=>pr­int(JSON.stringify(x)));" - just got "< <<\r\n\".bootcde\"\r\n\"launch.app.js\"\­r\n\"launch.settings.js\"\r\n\"launch.in­fo\"\r\n\"antonclk.app.js\"\r\n\"antoncl­k.img\"\r\n\"antonclk.info\"\r\n\"about.­app.js\"\r\n\"about.img\"\r\n\"about.inf­o\"\r\n\"widlock.wid.js\"\r\n\"widlock.i­nfo\"\r\n\"widbat.wid.js\"\r\n\"widbat.i­nfo\"\r\n\"welcome.boot.js\"\r\n\"welcom­e.app.js\"\r\n\"welcome.settings.js\"\r\­n\"welcome.img\"\r\n\"welcome.info\"\r\n­\"health.img\"\r\n\"health.settings.js\"­\r\n\"setting.img\"\r\n\"sched.bo"
    >>> 
    getFileList TypeError: Cannot read properties of undefined (reading 'trim')
    

    Which clearly looks like the data it received is being interrupted somehow (although I then get what looks like an untruncated dump of it in the debug pane, whereas normally when it works correctly nothing at all appears there except a new prompt).

    As far as I know, I haven't seen other issues when doing other actions after such inactivity (such as sending/receiving apps with the App Loader, etc.) Just the storage list in the IDE.

  • I happened to catch this in the IDE error log when it happened:

    I just tried to run require('Storage').list().forEach(x=>pri­nt(JSON.stringify(x))); and it produces just list of strings, no JSON, so that is better than I remembered. Either it was changed recently or the nrf51822 had issues even with the .forEach(x=>print(JSON.stringify(x))); giving back simple strings. Anyway it indeed looks like the output is cut. The "sched.bo" string is incomplete and whole list should probably end with > >>. And yes, the connection interval is increased automatically when connection is idle so first packets may be slow until it goes back.

    You can verify this is the case by setting it yourself via https://www.espruino.com/Reference#l_NRF­_setConnectionInterval
    , the {minInterval:20, maxInterval:100} should still save some power when idle and should be faster. You can even force it to single value so you can try setting it to 500 or more to be pretty slow and see if the issue appears consistently

About

Avatar for tev @tev started