IQ! Error with epix devices (but works in simulator)

Environment:
- MacOS 10.12.5
- Eclipse Neon.3, plug-in 2.3.1
- SDK 2.3.1

Detailed description of the issue:

Users with epix devices are unable to run my METAR/TAF widget; they immediately see the IQ! error screen. I had thought that the issue was related to the previous reported problem with the simulator (and potentially the resulting compiled code) calling the newer [FONT=Courier New]Communications.makeJsonRequest()[/FONT] method, however I finally received a CIQ log from a user and see this in the log:

ERROR: Unexpected Type Error
DETAILS: Failed invoking <symbol>
STORE_ID: 99cfcc6b55694e2d9c4ad0d946358a76
CALLSTACK:
TVM/api/Ant.mb (initialize:124)


The interesting thing here is that my widget does not use any ANT+ functionality. The widget uses the GPS (for location) and Communications (to retrieve web resources). With the new SDK 2.3.1, the widget now works properly in the simulator but still seems to fail to function on the actual device. The widget functions on all other devices without any issue so I believe this is a problem related to the epix VM (or the compiled code generated for the epix VM).


Steps to reproduce the issue:

I would generate a small project for this however without access to an actual epix device I could not confirm the sample experiences the same issue. However, you can see this error action if you install the widget in question: METAR/TAF widget -- https://apps.garmin.com/en-CA/apps/9...a-d0d946358a76

  • Install the widget
  • Try to run the widget
  • See the IQ! error (and view the CIQ log)



Additional information:

None.

Code sample to reproduce the issue:

Production widget mentioned above will produce this error (on epix devices).
  • Former Member
    Former Member
    Hey,

    There has been a ticket created for this and I was able to reproduce it. I can't figure out why it would be doing this since you don't use Ant at all. But we'll have the engineers dig in a little deeper.

    Thanks,
    -Coleman
  • Just wondering if there is an update on this ticket?

    If this isn't in the works for the near future I might pull support for the epix from my widget, since I can't offer full functionality.

    Cheers,
    Douglas
  • Former Member
    Former Member
    Hey dbrobert,

    I just double checked on this ticket for you. We are a little backlogged on bug tickets currently and unfortunately this one is a little lower priority right now than something like a fenix 5 bug. We will continue to keep it open and notify you when it is fixed.

    Thanks,
    -Coleman
  • I have been working with an epix user for the past two days and we seem to have isolated the issue to the assigning of a timer variable at the class level. I have *NO* idea why this results in an Ant-related error message. Is it worth me trying to put together a simplified example app or is it reasonably safe to assume that the epix VM, which was last updated in late 2015, is ultra-low on the priority list?

    Cheers,
    Douglas
  • Former Member
    Former Member
    Hey Douglas,

    I actually had this happen on another app and was looking for this report. I've got a reproducible case right already. I can't guarantee anything on movement, but you don't need to do any more week either way.

    Thanks,
    -Coleman
  • Hi Coleman or Douglas,

    Wondering if you ever managed to find out what was causing the problem? I've got an app with what seems like an identical problem. Its crashing (on startup) for an Epix user, even though the app runs fine in the Simulator. I got him to send me his error logs, and it just contains:

    ERROR: Illegal Frame Error DETAILS: Failed invoking <symbol> STORE_ID: dcc0fdaf88af4ee898f64ddb46b703fe CALLSTACK: TVM/api/Ant.mb (initialize:124) WARNING: Unable to close bike power sensor STORE_ID: dcc0fdaf88af4ee898f64ddb46b703fe ERROR: Illegal Frame Error DETAILS: Failed invoking <symbol> STORE_ID: dcc0fdaf88af4ee898f64ddb46b703fe CALLSTACK: TVM/api/Ant.mb (initialize:124) WARNING: Unable to close bike power sensor STORE_ID: dcc0fdaf88af4ee898f64ddb46b703fe
    I'm not using any sensor stuff, and not using any Ant stuff (its a pretty simple app - link here). I am using timers, though I can't see much different between my code, and the sample Timer code? I don't have an Epix so troubleshooting this is pretty difficult. Saw your post, and thought it looked pretty similar. Would appreciate any tips if you got yours working.
  • Hi Bumpyflea

    I had this problem with EPIX in some test "Toybox has" because EPIX firmware stay in 1.2 connect iq

    for example this is not compatible with EPIX Toybox.WatchUi.WatchFace has :onPartialUpdate

    You must test like this to suppress the bug with EPIX

    var monkeyVers = System.getDeviceSettings().monkeyVersion[0]*100+System.getDeviceSettings().monkeyVersion[1]*10+System.getDeviceSettings().monkeyVersion[2];
    var partialUpdatesAllowed=false;
    if (monkeyVers>=140) {partialUpdatesAllowed = ( Toybox.WatchUi.WatchFace has :onPartialUpdate );}


    It's an example but you can use it for some new test


    Didier
  • I'm not using any sensor stuff, and not using any Ant stuff (its a pretty simple app - link here). I am using timers, though I can't see much different between my code, and the sample Timer code? I don't have an Epix so troubleshooting this is pretty difficult. Saw your post, and thought it looked pretty similar. Would appreciate any tips if you got yours working.


    I don't think this is an issue with you using functionality that isn't available with the CIQ 1.2 on EPIX as riedid74 suggested. If you are seeing the crazy Ant.mb error (as you have shown) then I suspect that this is a problem with the VM implementation on the Epix, wherein valid, functional code that works on other CIQ 1.x devices doesn't seem to work on the Epix.

    As I mentioned, I discovered that my issue was with the fact that I was assigning a Timer object at the class level, which worked everywhere else but not on the Epix. The way I discovered this was by placing debug code -- System.println("Line # xx"); -- all over the code and then sending the user a debug build that they sideloaded. After several back-and-forth emails where they sent over the application log I was able to narrow it down to the point where the crash was happening, which made no sense to me since the line in question was valid and worked elsewhere. However, once I changed the code the user was able to run the app perfectly.

    So my suggestion, unless you are assigning a Timer at the class level (or maybe assigning any object causes this?) is to do the same as I did and give the user a debug version to try out.

    Cheers,
    Douglas