Connect IQ 2.2.0 Public Beta!

The Connect IQ 2.2.0 public beta is now available for download!

You can get it one of two ways:

  • Use the Connect IQ SDK Manager in Eclipse, by clicking the Connect IQ menu, selecting Open SDK Manager, and then clicking the Download button for Connect IQ SDK 2.2.0 released October 6, 2016.
  • Download directly from our developer site at http://developer.garmin.com/connect-iq/sdk/

There is also a new Eclipse plug-in version to support some of the new features in the 2.2.0 SDK, so be sure to install it, too, if you use Eclipse as your development environment. You can easily check for plug-in updates in Eclipse by clicking Help > Check for Updates.

This beta will allow you to develop, simulate, and build apps to side-load to your devices that use the new 2.2.0 features, but the ability to export apps for submission to the app store is disabled. Once this release is out of beta, we'll re-enable the app export features.

General Changes

  • Change assertEquals(), assertEqualsMessage(), assertNotEquals(), and assertNotEqualsMessage() to use .equals() instead of the == operator.
  • Add access to saved waypoints, courses, and workouts on a device with the PersistedContent module. See the Programmer’s Guide for more details.
  • Deprecate the PersistedLocations module. Use PersistedContent.saveWaypoint() instead.
  • Add support for Bike Light status and control using ANT+.
  • Add support for Bike Power using ANT+.
  • Add support for bursting in Ant.GenericChannel.
  • Add support for downloading FIT files and loading them onto the device. See the makeWebRequest() section in the Programmer’s Guide for more details.
  • Allow a watch-app or widget to open another CIQ app or native application using System.exitTo(). See the Programmer’s Guide for more details.
  • Optimize apps by having the compiler fold constants into a single value. var number = 4 + 5; will now compile to var number = 9; instead of performing an add operation.
  • Clean up samples to only support devices that can run them.
  • Several API / documentation fixes
  • Add Call to Parent’s initialize() in RunNoEvil
  • Limit the size of an app’s mailbox from a partner app to 8kb.

Simulator Changes

  • Simulate navigation data.
  • Simulate Accel and Mag data.
  • Save waypoints created with PersistedContent.saveWaypoint().
  • Simulate APIs available to the device being run. For example, Pressure History is no longer available to the Forerunner 735 in the simulator.
  • Support pairing Bike Lights.
  • Fix UTF8 strings in memory window

Known Issues

  • If an Exception is thrown from a catch block, the finally block of the current try/catch/finally will not be executed.
  • Former Member
    Former Member over 8 years ago
    Highly appreciate the function the access Power Meter directly for my Dashboard App!

    But, I am highly recommend provide "onMessage(message)" callback also to let us handle message ourselves.

    The purpose are:
    1. For Garmin Vector (Come on! this is your own product! ), Power Phase data is NOT ANT+ standard value, so need us handle the message directly. So if I want to show Power Phase data, I have no way to do so right now.

    2. For some other Power Meter, it should some other fields out of standard ANT+ value. So provide onMessage() directly can make feasibility better.

    3. Also, for some other ANT+ devices, it could get some benefit like Power Meters.



    Whatever, the implementation of my request is not hard based on recent architecture. But that is really useful for developers.
  • QQSTARS: You should be able to do what you want with the GenericChannel. When you initialize the channel, you set up a listener to handle any incoming messages, and provide a channel assignment.

    For example, we have a GenericChannelTester app that we use to test the generic ANT channel implementation. Here's how it initializes the channel:

    GenericChannel.initialize( method( :onMessage ), chanAssign );


    Later, we implement the onMessage listener/callback:

    function onMessage(msg) {
    var payload = msg.getPayload();
    if( Ant.MSG_ID_CHANNEL_RESPONSE_EVENT == msg.messageId ) {
    if( Ant.MSG_ID_RF_EVENT == (payload[0] & 0xFF) ) {
    var eventCode = payload[1] & 0xFF;
    if( Ant.MSG_CODE_EVENT_TX == eventCode ) {
    //Create and populate the data payload
    etc., etc.
  • Former Member
    Former Member over 8 years ago
    Salto dorado

    Brandon,

    The new navigation simulator add in is great, but I have a question. On the Edge 1000 I have course .fit files that have existing course points. When I try to use the nameOfNextPoint activity.info it is not picking up these points names thought the other data corresponding to them is coming through. If I let the edge generate a route it will seem to pick up names, but as I have specific data in the course point I want to relay I would like to be able to use the data stored int he original .fit file any ideas?

    Ryan
  • Ryan, we'll take a look at this. Are the existing courses ones that you created on the Edge, or were they obtained through some other source? I'd appreciate it if you could send along the FIT files containing the courses with which you're having trouble--email to [EMAIL="[email protected]"][email protected][/EMAIL] would work best.
    EDIT: One of my teammates interpreted your post a little differently than I, which has raised a couple of questions. I had understood the problem to be on-device, but since you mention the navigation simulator, I now think you're probably talking about loading a course file in the CIQ simulator to simulate an activity. I know that this will not work right now, but it's a good idea. The only way to simulate what you want is by opening the Simulation > Set Navigation Data dialog box and setting point names there.
  • Former Member
    Former Member over 8 years ago
    Brandon,

    I was referring to on the device themselves (tested on 520/820/1000). On the simulator the logic works as expected, but on the actual device I can not even display nameOfNextPoint though distanceToNextPoint etc all work correctly. I sent you an email with some course .fit files that contain course points.
  • I appreciate the clarification--we'll get in investigated. :)
  • Former Member
    Former Member over 8 years ago
    QQSTARS: You should be able to do what you want with the GenericChannel. When you initialize the channel, you set up a listener to handle any incoming messages, and provide a channel assignment.

    For example, we have a GenericChannelTester app that we use to test the generic ANT channel implementation. Here's how it initializes the channel:

    GenericChannel.initialize( method( :onMessage ), chanAssign );


    Later, we implement the onMessage listener/callback:

    function onMessage(msg) {
    var payload = msg.getPayload();
    if( Ant.MSG_ID_CHANNEL_RESPONSE_EVENT == msg.messageId ) {
    if( Ant.MSG_ID_RF_EVENT == (payload[0] & 0xFF) ) {
    var eventCode = payload[1] & 0xFF;
    if( Ant.MSG_CODE_EVENT_TX == eventCode ) {
    //Create and populate the data payload
    etc., etc.



    Sure i know GenericChannel can do that and Recently that is what i have implemented for.


    But, discussed before, using GenericChannel MUST require users using AppSetting to set power meter id. And, only one connection can be created between device and power meter. So, if i want to use genericChannel to communicate with power meter, i can show runtime power phase values which analysised by message body. BUT, in This way, system internal power meter connection MUST be disabled so NO power data will be recorded into FIT file.


    Within AntPlus new API, actually it provided balance/TE/PS data which got from message. But as you see, for Garmin Vector, powerPhase values still CANNOT be shown because that is not provided (phase data is NOT in ANT+ standard protocals But i know how to retrieve that if i got ANT+ power meter message body).


    So, what i want is power phase data. Recently no way to get unless using genericChannel directly with SO MUCH limitation i mentioned.


    Based on that, if AntPlus new API can provide me "onMsg(payload)" directly But not only "onBalanceChanged(balanceData)" and similars, i can use ANT+ "payload" to get what i want.
  • Former Member
    Former Member over 8 years ago
    makeWebRequest with HTTP_RESPONSE_CONTENT_TYPE_GPX response type doesn't work

    Looks like a bug. I've reproduced in the sim for HTTP_RESPONSE_CONTENT_TYPE_GPX. The other data types seem to work without a problem.


    I've also discovered that this great new feature doesn't work in either my 2.2 simulator or my Edge 1000 running the 90.10 beta firmware.

    Will support for GPX route download be fixed as documented in this release?

    Thanks,

    James
  • Hi James: Yes, this feature should be fully functional by the time the 2.2.x SDK comes out of beta. In fact, we already have a fix merged and I've verified that it works.
  • Former Member
    Former Member over 8 years ago
    Hi James: Yes, this feature should be fully functional by the time the 2.2.x SDK comes out of beta. In fact, we already have a fix merged and I've verified that it works.


    Thanks Brandon - will there be an additional beta and/or do you have a rough timeframe for the 2.2.x SDK release as this feature is fundamental to my app.

    James