• SDK Release 3.1.4

    Hello,

    We've released SDK 3.1.4 which includes a few bug fixes and some minor updates. Here is a list of some of the things we've done:

    General Changes

    • No Changes

    Simulator Changes

    • Add support for showing the current screen position of the cursor in the status bar.
    • Fix a font selection bug in simple data fields where a text font would be chosen if a number contained a minus sign.
    • Fix a bug on mac where the simulator would crash if you completed a 24-hour screen burn-in simulation.
    • Fix a bug where memory limits were not set correctly for widget glances.
    • Fix an issue that onLayout isn’t invoked for data fields, also disabled the Force onHide menu when running a data field, as onHide will never be invoked for it.

    Compiler Changes

    • Fix null pointer exception seen when using automatic build with a project using antialiased custom fonts.
    • Sep 18, 2019
  • Connect IQ 3.1 Now Available!

    At long last Connect IQ 3.1 is here! Here are some of the new features it brings to the table:

    • Exception Reporting: Access crash logs from the field and fix issues faster
    • Animations: Use the new Monkey Motion tool to add animated clips to your apps
    • Bluetooth Low Energy: Write apps that communicate with Bluetooth Low Energy (BLE) peripherals 
    • Relative Positions in Layouts: Use percentages in layouts for coordinates to make layouts that scale across a range of products
    • Expanded Storage: Store more information on device. 
    • Wi-Fi in Device Apps: Use the new Communications.SyncDelegate to download content over Wi-Fi
    • ANT+ Manufacturer Pages: Access manufacturer pages of connected ANT+ peripherals

    You may have noticed we also launched some products the past few weeks. I’d like to take a moment to talk you through some of the products and new features.

    vívoactive® 4/4S – The vívoactive 4 and 4S are the natural continuation of the vívoactive line. There are two sizes (small and regular) both of which have the latest Elevate sensors and support music. The one button version has been updated to have two buttons on the right side; one for start/stop and another for back.

    fēnix® 6S/6 – The fēnix 6s/6 are successors to the fēnix 5 series. There are two sizes (small and regular) with the latest Elevate sensors.

    fēnix 6S/6/6X Pro – The fēnix 6s/6/6X Pro are successors to the fēnix 5 Plus series. There are three sizes (small, regular, and Shaq) with the latest Elevate sensors and all support music. The 6X Pro Solar adds a solar cell to allow charging while operating outside.

    Venu – The Venu is a new variant of the vívoactive 4. In addition to the latest Elevate sensors and music, the Venu is the first Garmin wearable to feature an AMOLED screen. This is the most beautiful screen ever on a Garmin watch but introduces new considerations for your apps.

    Legacy Series – These are vívoactive 4 and 4s units branded with Marvel content. For all intents and purposes consider them vívoactive 4 and 4s units.

    Here is a technical breakdown of the devices:

    Feature

    vívoactive 4S

    vívoactive 4

    fēnix 6S

    fēnix 6S Pro

    fēnix 6

    fēnix 6 Pro

    fēnix 6X Pro

    Venu

    Screen

    MIP

    MIP

    MIP

    MIP

    MIP

    MIP

    MIP

    AMOLED

    Resolution

    218x218

    260x260

    240x240

    240x240

    260x260

    260x260

    280x280

    390x390

    Icon

    36x36

    43x43

    40x40

    40x40

    40x40

    40x40

    40x40

    40x40

    Colors

    64

    64

    64

    64

    64

    64

    64

    16 BPP

    Music

    Yes

    Yes

    No

     Yes

    No

    Yes

    Yes

    Yes

    Maps

    No

    No

    No

    Yes

    No

    Yes

    Yes

    No

    Inputs

    Touchscreen

    Touchscreen

    Buttons

    Buttons

    Buttons

    Buttons

    Buttons

    Touchscreen

    Widget Glances

    No

    No

    Yes

    Yes

    Yes

    Yes

    Yes

    No

    Watch Face RAM

    96K

    96K

    96 KB

    96K

    96 KB

    96K

    96K

    512 KB

    Data Field RAM

    32 KB

    32 KB

    32 KB

    128 KB

    32 KB

    128 KB

    128 KB

    32 KB

    Widget RAM

    512 KB

    512 KB

    64 KB

    1 MB

    64 KB

    1 MB

    1 MB

    512 KB

    App RAM

    1 MB

    1 MB

    128 KB

    1.25 MB

    128 KB

    1.25 MB

    1.25 MB

    1 MB

    Music RAM

    512 KB

    512 KB

    N/A

    512 KB

    N/A

    512 KB

    512 KB

    512 KB

    Glance RAM

    N/A

    N/A

    32 KB

    64 KB

    32 KB

    64 KB

    64 KB

    N/A

    Background RAM

    64 KB

    32 KB

    32 KB

    32 KB

    32 KB

    32 KB

    32 KB

    64 KB

    The fēnix 6 and Venu introduce some features we did not cover at Connect IQ summit that are only available in the 3.1 SDK. Lets talk about them briefly.

    Widget Glances

    The fēnix 6 series introduces some changes for widgets that will permeate across the Connect IQ ecosystem. The widget loop is converting from a carousel to a list presentation, which will make it much faster for users to navigate their information. When the user clicks on your glance, it will launch into the foreground.

    To support this new behavior, CIQ is introducing in 3.1 a new glance background type that allows your widget to update its glance presentation behind the scenes.

    1. Implement getGlanceView in your Application.AppBase instance
    2. Implement an instance of GlanceView that renders the base view
    3. Adapt your first page on Fenix 6 products to be the click in page instead of the base page.

    AMOLED

    The Venu is the first Garmin watch with an AMOLED screen. Your apps now can have breathtaking presentations of information and gorgeous imagery, while still retaining days of battery life. However, now that we have given you all these gorgeous colors, could you, like, not use them?

    Please?

    Here is the challenge with AMOLED – every pixel draws power. If you want your apps to fall within the regular amount of battery life, you want to have as much black on screen as possible, especially in screens that are showing activity information. You’ll notice that with most of the native applications, black is the new black. It’s okay to work a periodic splash screen or gradient into your apps – make the app look great! – but for screens that are supposed to show constantly updating data, the blacker the better. Also, if you have header and footer gradients, try to have the darker parts at the outer edges.

    Just remember this handy guide when doing app layouts for Venu:

    AMOLED Always On Watch Faces

    Always On watch faces behave differently from MIP to AMOLED. With MIP screens, you can use View.onPartialUpdate to update a portion of the screen every second. With AMOLED screen, this is no longer allowed. Instead, when WatchUi.onEnterSleep is called, you are allowed to render a watch face that must obey the rules of the AMOLED burn-in
    protector:

    • No more than 10% screen pixels can be on
    • No pixel can be on longer than 3 mins

    Ways you can prevent burn in are by drawing the time with a thin font, shifting the time every minute as not to repeatedly leave the same pixels on, and not having static tick marks that leave the same pixels on.

    Note that watch faces can detect whether a product has screen protection enforced by checking the value of DeviceSettings.requiresBurnInProtection.

    Note about AMOLED Resources

    The default color depth for the Venu is 16 bits per pixel, similar to Edge products. If you do not use the <palette> option when importing resources, be aware that your images will grow in file size, and by proxy take a lot longer to download to the device. You can also add the attribute compress="true" to your image resources, with the trade offs that images may take longer to load and compression is not available on Connect IQ 1.x products.

    Start Today

    New Features. Better Tools. New Devices. Get the SDK today and make your apps dance and sing. 

    • Sep 9, 2019
  • Garmin Connect iOS App Settings FIXED in 4.22.2 Hotfix Release

    Hello Developers and Users,

    I'm happy to announce that we were able to get the iOS settings bug fixed in a hotfix release of the Garmin Connect App! This is great news for a few reasons. One, because settings are fixed. Two, because our users are happy and will stop emailing all of us! And finally, because we did it! We worked together and we were able to get things fixed quicker than our normal schedule. Just more proof that Connect IQ is indeed an important and growing piece in the larger Garmin ecosystem. So give yourselves a pat on the back and celebrate!

    -The Connect IQ Team

    • Sep 5, 2019
  • Garmin Connect iOS App Settings Broken in 4.22 Release

    Hello Developers and Users,

     

    As many of you know by now, there were some changes that made their way into the Garmin Connect App on iOS that have caused a break in app settings. We were made aware of this issue and reported it immediately. Despite our best efforts to get the necessary changes made before the launch of 4.22, the bug continues to persist. For that, we are sorry. We understand that, not only does that break functionality for a specific set of our common users, it also generates quite a bit of email traffic for you as well.

     

    We've done two things here to help mitigate this:

     

    First, this forum post acknowledging and addressing the issue through an official Garmin source.

     

    Second, we've communicated with our product support teams that this app settings issue on iOS is not an issue that can be addressed by you, our external developer community. In such, they have been instructed to advise customer complaints to utilize the Connect IQ Store App for iOS for settings changes and that there is no need to contact you, the developer, as this is an issue on the Garmin side of things. Users may need to uninstall and reinstall their affected CIQ content before using the Connect IQ Store App in order to remove a corrupted settings file. Our Product Support agents know to communicate this as well.

     

    Our goal is to have this issue resolved within 1 release cycle or sooner. We can't guarantee a fix before the next normal release, but we will continue to push for greater priority.

    Thank you for you patience and understanding,

    -The Connect IQ Team

    • Aug 27, 2019
  • Would you like some Raspberry Pi with your Connect IQ?

    Connect IQ extraordinaire Jim Miller has written a Connect IQ/Raspberry Pi solution for making solutions that communicate over BLE.

    Here is a look at everything in action:

    Special thanks to Hermo Terblanche for help on this tutorial.

    • Aug 7, 2019
  • Forum Threading Change

    Hello Everyone!

    In an attempt to stay up with the needs of our community we are addressing one of your continued requests. We are going to changing the reply structure in discussions. There are some things we have control of here, and other things that are limitations of the software that we are working on externally, but this one we can do.

    This means that moving forward, all replies will simply be in line one after another. There will not be any "branched" replies. The newest post will always be the last. This will make things much more straightforward and in line with the way that most of you have requested. 

    A few things to note:

    • Forums with branched replies will be "flattened"
    • All new forums posts going forward will be posted in order

    Thanks for all of your feedback and your patience as we figure out the best ways to use the community to suit the needs of our developers!

    -Coleman

    • Aug 5, 2019
  • Adding Bluetooth Connectivity to your Connect IQ Projects

    For those of you looking to take advantage of the new Bluetooth LE APIs in Connect IQ 3.1, here is a breakout from Connect IQ Summit on the topic lead by Daniel Veilleux of Nordic Semiconductor.

    • Jul 25, 2019
  • Connect IQ 3.1 Connects You to The World

    Wireless connectivity and Connect IQ have always been paired together. Connect IQ 1.0 included the Toybox.Ant APIs which allowed device apps to establish connections with sensors and peripherals. Connect IQ 1.1 brought ANT to data fields opening new ecosystems of sensors to interface with Garmin devices. Connect IQ 3.1 pushes these boundaries further with additions in ANT, Wi-Fi, and Bluetooth Low Energy (BLE).

    ANT

    On the Garmin platform, numerous ANT+ profiles are supported by the native system. Users pair these devices from the device’s sensors menu and their integrated into the workout experience. If your device isn’t supported by the native system, you can use Connect IQ to implement the profile for the device using the Toybox.Ant APIs. In this case your app must implement the logic and UI for pairing as well as the profile implementation.

    If your app works with natively paired sensors, you can receive information from them using the Toybox.AntPlus APIs. These APIs give you access to the standard information defined in the ANT+ profile, but no more. This is great if you want to just capture standard information, but sometimes manufacturers provide extra information outside of the pages defined in the profile. These manufacturer pages vary by sensor maker and sometimes have additional metrics but not accessible by the AntPlus API.

    In Connect IQ 3.1, device apps and data fields can now access the manufacturer pages. The Toybox.AntPlus.Device class now has a sendManufacturerMessage API for sending manufacturer messages, and the Toybox.AntPlus.DeviceListener adds a new onManufacturerInfoUpdate method for receiving them. This allows new levels of integration of Connect IQ apps and native sensors.

    This API is available for:

    • Edge 130
    • Edge 520 Plus
    • Edge Explore
    • Edge 1030
    • D2 Delta Series
    • fēnix® 5 Plus Series
    • Forerunner® 245 Series
    • Forerunner 645 Series
    • Forerunner 945 Series
    • MARQ Series

    Wi-Fi

    In Connect IQ 3.0 the audio content provider app type was added for allowing developers to download music apps to music capable devices. To enable music download, audio content providers have access to kick off network transactions over Wi-Fi.

    Wi-Fi is hundreds of times faster than the BLE connection available to other app types. The challenge with Wi-Fi on wearable devices is battery life. Wi-Fi is a power-hungry technology, and wearables have limited space for batteries, so enabling Wi-Fi can take your battery life from days to minutes. For this reason, Wi-Fi was limited to only audio content providers

    In Connect IQ 3.1 device apps now can initiate network requests over Wi-Fi using the new Toybox.Communications.SyncDelegate. Here’s how:

    1. In your app, call Toybox.Communications.startSync
    2. The system will call getSyncDelegate() to get your Toybox.Communications.SyncDelegate subclass
    3. The device UI will go to a sync screen
    4. In onStartSync make your first call to Toybox.Communications.makeWebRequest
    5. Request one item at a time, triggering each makeWebRequest in the callback of the previous one
    6. Call notifySyncProgress to advance the progress bar
    7. If onStopSync is called, handle shutdown of your sync
    8. When you have downloaded all items, call notifySyncComplete. Pass in null if you completed successfully or pass in a string if you need to display an error message
    9. The Sync UI will be popped off the stack returning you to your app

    The primary use case for using Wi-Fi over BLE is if you are downloading a large amount of content, or perhaps a large payload (like a long route) that would take a long time over BLE. Wi-Fi will only be available in hotspots where the device has been configured, so don’t depend on it as your only connectivity option.

    This API is available for:

    • Edge 530
    • Edge 830
    • Edge 1030
    • D2 Delta Series
    • fēnix 5 Plus Series
    • Forerunner 245 Music
    • Forerunner 645 Music
    • Forerunner 945
    • vívoactive® 3 Music
    • MARQ Series

     

    Bluetooth Low Energy

    Not to be confused with Low Energy Blue-Tooth, the guy in gym class who drank blueberry smoothies yet always seemed to be dragging, Bluetooth Low Energy (BLE) is a growing standard for low power wireless device communication. Connect IQ 3.1 adds the Toybox.BluetoothLowEnergy module to enable generic support for communicating with BLE peripherals like sensors, IoT devices, and smart homes.

    To develop your app in the simulator you will need a Nordic nRF development kit that the simulator will use as a bridge for communication. The Toybox.BluetoothLowEnergy module is available to data fields, widgets, device apps, and background services.

    If you want to try developing your own BLE peripheral , you should order a Nordic Thingy52. This all in one programmable device has an accelerometer, gyroscope, barometer, thermometer, LEDs, and a programmable nRF52 microcontroller that handles ANT and BLE communication. The Thingy Connect IQ sample will let you control the Thingy from your watch.

    The Connect IQ BLE APIs are available for:

    • Edge 1030
    • D2 Delta Series
    • fēnix 5 Plus Series
    • Forerunner 245 Series
    • Forerunner 645 Music
    • Forerunner 945
    • MARQ
    • vívoactive 3 Music

    Conclusion

    Connect IQ and wireless have been securely bonded since the beginning. Now in Connect IQ 3.1 developers have access to ANT, Wi-Fi, and BLE connectivity in their apps. This opens entirely new use cases for connecting your apps to the outside world

    • Jul 23, 2019
  • Legacy Bug Reports Forum Changes

    Hello All!

    Thank you all for all that you do in helping keep our developer community healthy and vibrant. In an effort to keep things moving forward we've made a few changes to the way that our Legacy Bug Reports forum works. We now have a preferred area for reporting bugs in the Bug Reports tool. We are still actively looking at and working issues that have already been reported by the community in the old forum, but things are honestly just easier to manage and it's easier to communicate with the new tools available. So here is the change that is happening:

    Effective immediately, the Legacy Bug Reports forum will not longer allow new threads to be created.

    Your content will not be lost and you can still reply, comment, etc. to existing threads held in that forum. We are just shutting off the ability for new thread to be started. If you have a new bug or new instance of an old bug that hasn't seen any traction for a while, then please make a report in the new Bug Reports tool. Thank you all so much and happy coding!

    -Coleman

    • Jul 16, 2019
  • SDK Release - 3.0.12 and 3.1.0.beta3

    Hey Developers!

    We have two SDKs for you this week. First is our Production 3.0.12 SDK. Second, is our 3.1.0.beta3 SDK and accompanied plugin.

    Here are the change logs for the two SDKs:

    3.0.12:

    General Changes

    • Update device images to avoid showing draw area behind device.
    • Fix issues escaping strings sent to the debugger output window.
    • Fix alpha transparency issues seen when rendering transparent bitmaps on Forerunner® 45.

    Simulator Changes

    • Fix a bug with ActivityRecording auto-start that would cause a new session to be created unexpectedly after a session that used auto-start was saved or discarded.
    • Fix fonts on Forerunner® 45 to match the device.

    Compiler Changes

    • Fix bug in the opcode generation logic of a try / catch statement when a Toybox exception is being caught.

    3.1.0.beta3:

    General Changes

    • Fix issue that caused System.println() and System.println() to stop working after a background process had exited.
    • Fix bug in the RunNoEvil framework, which was causing only a single test to be executed when the developer chose to execute more than one unit test.
    • Apply special handling for requests to clear buffered bitmaps to transparent.
    • Fix a thread safety issue.
    • Fix a bug with ActivityRecording auto-start that would cause a new session to be created unexpectedly after a session that used auto-start was saved or discarded.
    • Overhaul Animation APIs and introduce new WatchUi.Layer class
    • Add DeviceSettings.systemLanguage to get the language being used by the device or simulator.
    • Update the Media.CacheStatistics.size / capacity API documentation with the correct return type.
    • Fix an issue that prevented some background events from running.
    • Fix an issue that caused an unexpected type error when passing a MapMarker to MapView::setMapMarker().
    • Add SDK version to “Help > About” in the ERA Viewer.
    • Allow marking a crash report as new again in the ERA Viewer.
    • Allow drag-and-drop sorting when managing apps in the ERA Viewer.
    • Add a drop-down box to choose a sorting method for crash reports in the ERA Viewer.
    • Sort newly downloaded apps by name in the ERA Viewer.
    • Add menu option to reset the data stored by the ERA Viewer.
    • Do not require loading a project’s manifest file to select devices in the animation converter.
    • Give the Eclipse plug-in’s debugger the ability to open Monkey Barrel source code when directly linking to a barrel project.
    • Introduce a script that converts GIFs to a YUV video format and attempts to apply some optimizations, which results in a smaller encoding of the video file.
    • Fix alpha transparency issues seen when rendering transparent bitmaps on 8-color devices like the Forerunner® 45.
    • Fix non-square animation playback error.
    • Add support for the Edge® 530, Edge® 830, Forerunner® 245, Forerunner® 245 Music, Forerunner® 945, and Forerunner® 45.
    • Fix an issue that prevented some background events from running.
    • Reduce memory required to load app settings.
    • Fix an issue that caused an unexpected type error when passing a MapMarker to MapView.setMapMarker().
    • App Storage now supports saving Dictionary and Array objects that contain resources such as images and animations.

    Simulator Changes

    • Fix apparent simulator hang seen when using a many calls to System.print() or System.println().
    • Remove random GPS quality changes when simulating FIT data.
    • Fix issues handling of swipe events when using picker views.
    • Update Battery Status dialog to set the focus to the Okay button when the user is editing the the battery percentage value and presses enter.
    • Fix an issue that caused auto-lap functionality to be enabled when simulating or playing back FIT data.
    • Update device images to avoid showing draw area behind device.
    • Fix issues escaping strings sent to the debugger output window.
    • Disable unsupported options under “Settings > Connection Type” when loading a new device.
    • Avoid clearing app storage on device change. Instead, clear the requested background events so they do not run on devices that do not have backgrounding support.
    • Fix a crash that occurred when downloading jpeg image files via makeImageRequest.
    • Edit Persistent Storage dialog refactored to support resource preview and switching to use tree list for object exploration.
    • Persist simulator settings across runs.
    • Fix issue with Edge® 130 fonts.

    Compiler Changes

    • Fix bug in the MonkeyMotion video encoder, which caused pixels to be cut off if the resolution was not a multiple of 4.
    • Fix bug in the opcode generation logic of a try / catch statement when a Toybox exception is being caught.
    • Reduce memory consumption of fonts that have the antialias attribute set to true for devices that do not have the ability to render anti-aliased fonts by overriding the attribute. These devices include the the Forerunner® 45, the Forerunner® 920XT, and the Edge® 130.
    • Fix bug in variable initialization checking for switch statements containing for loops.

    Beta Layer API and Animations Change Notes:

    Yes the change log for the Beta is Massive!

    Please note, for those of you who are interested or have already started using the new Animation system in 3.1.0 Beta build in the past, we have made made breaking changes to this API structure. We found some ways to save precious memory and provide more flexibility to developers so we figured this should be done while we were still in Beta! This includes a new Layer API. It's hot off the presses and the documentation is a little scarce on it right now, but the included animated watch face in the samples with 3.1.0.Beta3 will give you some reference. Here is a super simple overview of how it works:

    1. Create one or more Layer objects, each containing a resource (bitmap, animation, etc.) positioned within a clipped region (we're essentially making BufferedBitmaps).
    2. Add all the layers you'd like to display to a View in the order they should be drawn (FIFO).
    3. When the view is displayed, all of the layers get blitted to the system Dc.

    Even more simple: Multiple new Layer objects can be created with a custom size clipping region, then merged together on an update.

    This will have ZERO effect on all of your regular Dc drawing calls if you are a developer who doesn't want to use this.

    We plan to have more complete documentation in the future, however, even if you don't use these new APIs, you should totally run the new animation sample and put the sim and toggle off Low Power Mode. You will be happy. 

    Happy Coding, Connect IQ Community!!!

    • Jun 19, 2019