This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Road Bike Activites are stored as plain Bike activities

I was using a FR735 previously which had 3 different bike activities:
Bike, Road Bike and MTB.

Now I "upgraded" to the FR935 and there's only the Bike activity and MTB.
I tried to copy the "Bike" activity and renamed it to "Road Bike" - but the outcome is that activities in Garmin Connect will always have "Bike" and not "Road Bike".
Same if I create a "Other" activity + rename to "Road Bike".

Please note that I have the german version - and the activity is called "Radfahren" and should be "Rennradfahren" - so might be that my translation above is not 100% accurate.

Anyone who could help out here and give me a hint what I am doing wrong?

Thanks
  • I had the same problem. Then I tried a Road Bike Profile from my Edge 1030 and now it works fine. :-)

    You can download the working Profile from her:

    https://1drv.ms/u/s!ACKDXcZD8LXBguYX

    Put it in the folder new Files. The name is german. You can rename the File bevor copy.

  • did not work for my 935

  • Hey, I hacked up my 935's default cycling profile to change it road cycling (sport type = 2, subtype = 7). Tested it on my 935 and it works.

    Should work for 935, can't say anything about other watches.

    EDIT: Try this at your own risk. I can't guarantee that this will work or that it won't mess up your activity list in strange ways.

    935 Road Cycling Profile: 99ROADB.zip

    1) Unzip file to obtain 99ROADB.FIT

    2) Connect watch to PC/Mac with cable. (If you're trying this with a music-enabled watch like Fenix 6 Pro, and you're on Mac, you need Android File Transfer.)

    3) Copy FIT file to \GARMIN\NEWFILES

    4) Eject watch

    You'll now have an "Road Bike" profile that can be renamed to anything you want. On Garmin Connect, this shows up as "Road Cycling" for me (my language is English), for both the activity title and the activity type.

    If anyone else has this problem and the attached FIT file doesn't work for them, let me know and I can either give instructions on making a profile yourself, or modify your profile myself if you can post it here.

    EDIT: Modified link so it points to new FIT file whose profile name is "Road Bike" instead of "RBke', so you don't have to edit it yourself.

  • Hi WillNorthYork,
     cool stuff!  I am very much interested on how to create my own profile. So, would you mind posting the instructions on how to create/modify the profile?
    Thanks,
    Cugar
  • Sure, no worries!

    You will need a PC, Mac or Linux computer, and you'll need to download a few tools. You'll also need something that opens CSV files, like Excel or Numbers.


    EDIT: Note that I am editing this post incrementally, because the forum won't let me post the whole thing at once (usual forum errors with complex text and/or code).

    Note to Garmin: These forums are terribad.

    EDIT: Finally finished this post, after about 100 edits.

    EDIT: Try this at your own risk. I can't guarantee that this will work or that it won't mess up your activity list in strange ways.


    Tools

    Java:

    - Windows: https://adoptopenjdk.net/

    - Mac: Should already be installed

    FIT SDK: developer.garmin.com/.../

    Hex Editor:

    - Windows: https://www.hhdsoftware.com/free-hex-editor

    - Mac: https://hexfiend.com/

    - You can also use the Hex Editor extension for Visual Studio Code, but I find it to be a bit basic

    Beyond Compare (optional): www.scootersoftware.com/

    - You can also use the file compare functionality in Visual Studio Code, but I also find it to be basic. (The main downside of Beyond Compare is that it doesn't look great)

    Scripts

    I created a script you will need to help calculate the "CRC16 checksum" of a FIT file, which is an important step to finalize the file after editing it.

    Windows: fitcrc-win.zip

    Mac/Linux: fitcrc-mac.zip

    Setup

    1) If you're doing this with a Mac and a music-enabled watch, you need Android File Transfer.

    2) Unzip the FIT SDK to a folder on your hard drive. I recommend moving the FIT SDK directory to the top level of your user profile, and renaming it to something short, like fitsdk.

    e.g. If you unzip the FIT SDK archive in your Downloads folder, it will create a folder with a name like FitSDKRelease_21.47.00. I recommend changing this to fitsdk. For simplicity, I will also recommend placing any FIT files in the java sub-folder of the FIT SDK.

    3) Unzip fitcrc-win.zip or fitcrc-mac.zip to your fitsdk/java folder.

    Additional step for Mac only:

    • In terminal:

    cd ~/fitsdk/java
    chmod ogu+x fitcrc*
    
    

    Notes and Definitions

    Decimal

    "Decimal" refers to the standard (base-10) representation of numbers using the digits 0 to 9: e.g. 1 dozen = 12.

    Hexadecimal

    "Hexadecimal" (hex) is a base-16 representation of numbers using 0 to 9 and A to F (case insensitive), which is convenient for computer science. e.g. 1 dozen = B. Sometimes you will see hex written with a "0x" prefix - e.g. 0x0B.

    Byte

    An underlying form of representing data in computers. This is a number from 0 to 255 (decimal). In hexadecimal, this is a number from 0 to FF and can always be represented with exactly two hex digits and vice versa (hence the usefulness of hex). A hex editor displays a file as a series of bytes.

    Converting decimal to hexadecimal

    This can be done using the calculator in Windows or Mac. or in Google. e.g. if you search "16 in hex", google will respond "0x10"

    Editing Procedure

    1) Connect watch to computer with USB cable

    2) Navigate to \GARMIN\SPORTS\ on the watch and copy the profile of interest to fitsdk/java on your hard drive. (They will have names like 0RUN.FIT or 1BIKE.FIT.)

    3) Convert the FIT file to CSV to take a look at its contents:


    Windows

    • Open FIT SDK folder in explorer
    • Navigate to java folder
    • Drag FIT file onto FitToCSV. This will create a CSV with the same name as your FIT file

    Mac

    • Open terminal
    • Type:

    java -jar fitcsvtool.jar NAME_OF_FIT_FILE.FIT


    Now you can open the CSV file and see all of its information in mostly human readable form.

    e.g. For my cycling profile, I can see the sport type is 2 and the sub-type is 0:

    4) Next, determine what sport type and subtype you want to change the activity to. (I assume the sport type won't change, since you would've chosen a profile that's close to new profile you want to make)

    https://developer.garmin.com/connect-iq/api-docs/Toybox/ActivityRecording.html

    From this doc, we can see that the sport type for cycling is 2 and the sub type for road cycling is 7.

    5) Make a copy of the FIT file, and open the copy in your hex editor. (The remaining instructions will assume you are working on the copy, not the original)

    6) Look at the two bytes starting at position "0dd". They should be 02 00 for cycling. If you open another profile such as mountain biking, the correct sport and subtype should be here, too (02 08 for MTB).

    If you're on a different device than 935, and you don't see the type and subtype in the same spot, try correlating the FIT data with other data in the CSV file.

    For example, the sport name is "Bike" (on the same line as sport type and subtype), and we can see it's fairly close in the FIT file. Also, the field right before sport type ("unknown") has a value of "61" in my case. 61 (decimal) is equal to 3D in hex, and we can see that the bytes "3D 00" appear right before type and subtype.

    It may also help to load several FIT profile files (with known sport type and subtype) and use the above procedure (look in the vicinity of the sport name).

    7) Convert the new subtype number from decimal to hexadecimal. e.g. 7 = "07". 11 ="0B"

    8) Enter the subtype number in hex at position "0de". For example, if the subtype is 7, enter "07". If the subtype is 11 (cyclocross), enter "0B".

    8.5) Change one character of the activity name to make it different than the original. e.g. In this case, change the "e" in "Bike" to "2" (or something), so that the new name is "Bik2".

    9) Save the FIT file.

    10a) Now we have to fix the "CRC16 checksum" of the FIT file before it will be accepted as a valid FIT file. The checksum is 2 bytes at the end of the file which validate the rest of the contents. In the following example, the two checksum bytes are "97 C2" (in reverse order):

    10b) Determine the new checksum


    Windows:

    • Close hex editor and drag the FIT file onto the fitcrc file. If you don't see any output, drag the FIT file onto the fitcrc-debug file.

    Mac:

    • In terminal, type:

    cd ~/fitsdk/java
    ./fitcrc.sh NAME_OF_FIT_FILE.FIT

    • If you don't see any output, type:

    cd ~/fitsdk/java
    ./fitcrc-debug.sh NAME_OF_FIT_FILE.FIT


    You should see output which looks like:

    Fit.Decode: Expecting next 2 bytes to be end of file CRC = 0x AB12

    In this example, AB12 is your new checksum.

    11) Reverse the checksum bytes (groups of 2 digits) from the previous step. For example, if fitcrc's output reads "AB12", your new checksum will be "12 AB". Replace the 2 bytes at the end of FIT file with the new checksum and save the file.

    12) Now it's time to test your changes. As in step 3, convert the FIT file to CSV, and ensure that it converts without errors and that your new subtype is in the CSV file.

    13) (optional) As a sanity check, use Beyond Compare to compare the two CSV files. The only difference should be the sport subtype.

    If you prefer the command line, you can also use "fc" in Windows and "diff" in Mac, although the output is slightly harder to read.

    14) Now that you've validated your new FIT file, copy it to \GARMIN\NEWFILES on your watch and eject the watch.

  • Note: the downside of this technique is it seems to create an activity that cannot be deleted from the device (only removed from the list of "active" activities and apps). This seems to happen even if you make a copy of a built-in activity on the watch, then modify the copy. I'm not sure how to get around this. Same issue with just copying the profile I posted above, and probably with copying anyone's pasted profile.

    i.e. The new activity acts like a built-in activity and not a custom activity, in the sense that it can't be deleted..

  • HI WillNorthYork,

      thanks a ton for these detailed instructions and the effort to put this into the forum.

    This is really helpful!!!

    Cheers Cugar

  • No worries. Let me know how it goes. :)

  • I was able to go through all the instructions without a problem.

    However, once uploading back to the device, the sub_sport is somehow reset again to 0.

    I verified it twice... The profile is changed back to the original content on the watch.

    ???

    Any idea?

  • That's strange. I will caution that I've had problems doing this a second time. The first time, I was able to add "Road Cycling" with no problems.

    The 2nd time, nothing seems to work, and I have all kinds of strange problems with a profile that has no name (but when you select it, it asks you to edit the name, and becomes a different profile that was previously invisible). This is reminds me of earlier bugs that I saw when 935 came out and we just copied/edited profiles normally.

    EDIT: My problem with the "no-name" profile is probably left over from a long time before I tried this hack, but I only noticed that it's still around now because I rarely add and delete activities.

    Since this is totally unsupported, I can't say it's 100% unexpected. I'm still working on seeing if I can get my activities back to "normal" (in a state where I can add custom ones like this).

    In my case, I think it might have to do with a hitting a max limit of activities (native + custom) (around 40 on the 935, I think). Now I'm also unable to delete (not remove) custom apps that were created on the watch.

    In your case, I would also suggest changing the name of the profile in the FIT file. To keep it simple, just change one character. e.g. Change "Bike" to "Bik2". Changing the name is one part that I left out of the instructions (sorry about that.)