adiesner / GarminPlugin

Garmin Communicator Plugin for Linux
https://adiesner.github.io/GarminPlugin/
GNU General Public License v3.0
96 stars 16 forks source link

can't find activities to upload on a virtual device #16

Open dlenski opened 9 years ago

dlenski commented 9 years ago

I'm trying to use the plugin to transfer files from a "virtual device" (http://www.andreas-diesner.de/garminplugin/doku.php?id=virtual_devices), which is just a directory that contains TCX files transferred from my TomTom GPS watch:

I added the following stanza to my garminplugin.xml file:

    <Device enabled="true">
        <Name>TomTom GPS Sport Watch</Name>
        <StoragePath>/home/me/Dropbox/tcx</StoragePath>
        <StorageCommand></StorageCommand>
        <FitnessDataPath>/home/me/Dropbox/tcx</FitnessDataPath>
    </Device>

There are plenty of TCX files in that directory, and I have verified that they I can manually upload them correctly to Garmin Connect.

When I visit http://connect.garmin.com/transfer/upload, the plugin finds my device, but doesn't list any of the TCX files in the directory:

screenshot from 2015-01-24 11 43 22

Same goes if I convert them to GPX format. Is there some special naming convention that the files must obey, or some setting that I've overlooked to get the plugin to recognize the TCX files that I want to transfer?

dlenski commented 9 years ago

I've tried giving the files the exact same naming convention as produced by my Garmin 405 (YYYY-MM-DD-HHmmSS.TCX), but that doesn't make a difference :-(

adiesner commented 9 years ago

I guess you are using an uppercase extension on a partition that supports upper/lowercase. With the method you are using, the device searches for lowercase .gpx and lowercase .tcx.

There is another (not well documented way) to create a virtual device (if you do not want to rename to lowercase tcx)

    <Device enabled="true">
        <Name>TomTom GPS Sport Watch</Name>
        <StoragePath>/home/me/Dropbox/</StoragePath>
        <StorageCommand></StorageCommand>
        <FitnessDataPath></FitnessDataPath>
    </Device>

Directory structure:

/home/me/Dropbox/Garmin/
/home/me/Dropbox/Garmin/GarminDevice.xml
/home/me/Dropbox/Garmin/TCX/*.TCX
/home/me/Dropbox/Garmin/GPX/*.GPX

GarminDevice.xml

<?xml version="1.0" encoding="UTF-8"?>
<Device xmlns="http://www.garmin.com/xmlschemas/GarminDevice/v2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.garmin.com/xmlschemas/GarminDevice/v2 http://www.garmin.com/xmlschemas/GarminDevicev2.xsd">
  <Model>
    <PartNumber>006-B0625-00</PartNumber>
    <SoftwareVersion>330</SoftwareVersion>
    <Description>TomTom GPS Sport Watch</Description>
  </Model>
  <Id>3456561955</Id>
  <MassStorageMode>
    <DataType>
      <Name>GPSData</Name>
      <File>
        <Specification>
          <Identifier>http://www.topografix.com/GPX/1/1</Identifier>
          <Documentation>http://www.topografix.com/GPX/1/1/gpx.xsd</Documentation>
        </Specification>
        <Location>
          <Path>Garmin/GPX</Path>
          <FileExtension>GPX</FileExtension>
        </Location>
        <TransferDirection>InputToUnit</TransferDirection>
      </File>
      <File>
        <Specification>
          <Identifier>http://www.topografix.com/GPX/1/1</Identifier>
          <Documentation>http://www.topografix.com/GPX/1/1/gpx.xsd</Documentation>
        </Specification>
        <Location>
          <Path>Garmin/GPX</Path>
          <FileExtension>GPX</FileExtension>
        </Location>
        <TransferDirection>OutputFromUnit</TransferDirection>
      </File>
    </DataType>
    <DataType>
      <Name>UnitSoftwareUpdate</Name>
      <File>
        <Specification>
          <Identifier>GCD</Identifier>
        </Specification>
        <Location>
          <Path>Garmin</Path>
          <BaseName>GUPDATE</BaseName>
          <FileExtension>GCD</FileExtension>
        </Location>
        <TransferDirection>InputToUnit</TransferDirection>
      </File>
    </DataType>
    <DataType>
      <Name>BaseMaps</Name>
      <File>
        <Specification>
          <Identifier>IMG</Identifier>
        </Specification>
        <Location>
          <Path>Garmin</Path>
          <BaseName>gmapbmap</BaseName>
          <FileExtension>IMG</FileExtension>
        </Location>
        <TransferDirection>InputOutput</TransferDirection>
      </File>
    </DataType>
    <DataType>
      <Name>PreProgrammedMaps</Name>
      <File>
        <Specification>
          <Identifier>IMG</Identifier>
        </Specification>
        <Location>
          <Path>Garmin</Path>
          <BaseName>gmapprom</BaseName>
          <FileExtension>IMG</FileExtension>
        </Location>
        <TransferDirection>InputOutput</TransferDirection>
      </File>
    </DataType>
    <DataType>
      <Name>SupplementalMaps</Name>
      <File>
        <Specification>
          <Identifier>IMG</Identifier>
        </Specification>
        <Location>
          <Path>Garmin</Path>
          <BaseName>gmapsupp</BaseName>
          <FileExtension>IMG</FileExtension>
        </Location>
        <TransferDirection>InputOutput</TransferDirection>
      </File>
    </DataType>
    <DataType>
      <Name>FTLImageVersion</Name>
      <File>
        <Specification>
          <Identifier>VER</Identifier>
        </Specification>
        <Location>
          <Path>Garmin</Path>
          <BaseName>fs_image</BaseName>
          <FileExtension>ver</FileExtension>
        </Location>
        <TransferDirection>InputOutput</TransferDirection>
      </File>
    </DataType>
    <DataType>
      <Name>FitnessHistory</Name>
      <File>
        <Specification>
          <Identifier>http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2</Identifier>
          <Documentation>http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd</Documentation>
        </Specification>
        <Location>
          <Path>Garmin/History</Path>
          <FileExtension>tcx</FileExtension>
        </Location>
        <TransferDirection>OutputFromUnit</TransferDirection>
      </File>
    </DataType>
    <DataType>
      <Name>FitnessUserProfile</Name>
      <File>
        <Specification>
          <Identifier>http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2</Identifier>
          <Documentation>http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd</Documentation>
        </Specification>
        <Location>
          <Path>Garmin/Profile</Path>
          <BaseName>UserProfile</BaseName>
          <FileExtension>tcx</FileExtension>
        </Location>
        <TransferDirection>InputOutput</TransferDirection>
      </File>
    </DataType>
    <DataType>
      <Name>FitnessCourses</Name>
      <File>
        <Specification>
          <Identifier>http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2</Identifier>
          <Documentation>http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd</Documentation>
        </Specification>
        <Location>
          <Path>Garmin/Courses</Path>
          <FileExtension>tcx</FileExtension>
        </Location>
        <TransferDirection>InputOutput</TransferDirection>
      </File>
    </DataType>
    <DataType>
      <Name>FitnessWorkouts</Name>
      <File>
        <Specification>
          <Identifier>http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2</Identifier>
          <Documentation>http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd</Documentation>
        </Specification>
        <Location>
          <Path>Garmin/TCX</Path>
          <FileExtension>TCX</FileExtension>
        </Location>
        <TransferDirection>InputOutput</TransferDirection>
      </File>
    </DataType>
    <UpdateFile>
       <PartNumber>006-B0625-00</PartNumber>
        <Version>
            <Major>3</Major>
             <Minor>30</Minor>
        </Version>
       <Path>Garmin/</Path>
       <FileName>gupdate.GCD</FileName>
    </UpdateFile>
    <UpdateFile>
       <PartNumber>006-B0617-00</PartNumber>
        <Version>
            <Major>2</Major>
             <Minor>10</Minor>
        </Version>
       <Path>Garmin/RemoteSW/</Path>
       <FileName>006B061700.bin</FileName>
    </UpdateFile>
  </MassStorageMode>
  <GarminMode>
    <Protocols>
        <Link Id="1"/>
        <Application Id="10"></Application>
        <Application Id="100"><DataType>110</DataType></Application>
        <Application Id="201"><DataType>202</DataType><DataType>110</DataType><DataType>210</DataType></Application>
        <Application Id="301"><DataType>312</DataType><DataType>304</DataType></Application>
        <Application Id="400"><DataType>110</DataType></Application>
        <Application Id="600"><DataType>600</DataType></Application>
        <Application Id="601"><DataType>601</DataType></Application>
        <Application Id="700"><DataType>700</DataType></Application>
        <Application Id="800"><DataType>800</DataType></Application>
        <Application Id="900"></Application>
        <Application Id="902"></Application>
        <Application Id="903"></Application>
        <Application Id="907"><DataType>907</DataType><DataType>908</DataType><DataType>909</DataType><DataType>910</DataType></Application>
        <Transport Id="1"/>
    </Protocols>
  <MemoryRegion>
    <Id>5</Id>
    <PartNumber>006-B0476-00</PartNumber>
    <IsErased>0</IsErased>
    <IsRemoved>0</IsRemoved>
    <IsUserUpdateable>1</IsUserUpdateable>
  </MemoryRegion>
  <MemoryRegion>
    <Id>14</Id>
    <PartNumber>006-B0476-00</PartNumber>
    <IsErased>0</IsErased>
    <IsRemoved>0</IsRemoved>
    <IsUserUpdateable>1</IsUserUpdateable>
  </MemoryRegion>
  </GarminMode>
  <Extensions>
     <DeviceExtension xmlns="http://www.garmin.com/xmlschemas/GarminDeviceExtensions/v1"
     xsi:schemaLocation="http://www.garmin.com/xmlschemas/GarminDeviceExtensions/v1 http://www.garmin.com/xmlschemas/GarminDeviceExtensionv1.xsd">
     <Ifix>581590809</Ifix>
   </DeviceExtension>
  </Extensions>
</Device>

In the xml, you can adjust the pathes and the extension:

    <DataType>
      <Name>FitnessWorkouts</Name>
       [...]
        <Location>
          <Path>Garmin/TCX</Path>
          <FileExtension>TCX</FileExtension>
        </Location>
        <TransferDirection>InputOutput</TransferDirection>
      </File>
dlenski commented 9 years ago

Hmmm... I'm a bit confused. The TCX files from my TomTom do have the lowercase extension (.tcx). I was just showing how the names appeared in Windows. I tried explicitly renaming them to lowercase on Linux and it still didn't work.

Do I actually need the GarminDevice.xml file to make the plugin work? I thought that garminplugin.xml would be sufficient.

I even tried adding a "real" Garmin device and the plugin doesn't detect this one either:

    <Device enabled="true">
        <Name>Garmin 405</Name>
        <StoragePath>/home/me/Dropbox/3826706810</StoragePath>
        <FitnessDataPath>/home/me/Dropbox/3826706810/History</FitnessDataPath>
        <StorageCommand></StorageCommand>
    </Device>

The 3826706810 directory contains all the files created by Garmin's own tools on my Windows computer:

...
DeviceSettings.xml
GarminDevice.xml
...
History/
    History/2015-01-14-051533.TCX
    History/2015-01-15-133508.TCX
    History/2015-01-16-145121.TCX
    ...

And GarminDevice.xml contains the FitnessWorkouts and FitnessHistory sections, with uppercase FileExtension:

<DataType>
  <Name>FitnessWorkouts</Name>
  <File>
    <Specification>
      <Identifier>http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2</Identifier>
      <Documentation>http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd</Documentation>
    </Specification>
    <Location>
      <Path>History</Path>
      <FileExtension>TCX</FileExtension>
    </Location>
    <TransferDirection>InputOutput</TransferDirection>
  </File>
  <Extensions>
    <WorkoutLimits xmlns="http://www.garmin.com/xmlschemas/FitnessDeviceLimits/v1">
      <MaxWorkouts>200</MaxWorkouts>
      <MaxUnscheduledWorkouts>25</MaxUnscheduledWorkouts>
      <MaxOccurrences>200</MaxOccurrences>
    </WorkoutLimits>
  </Extensions>
</DataType>
<DataType>
  <Name>FitnessHistory</Name>
  <File>
    <Specification>
      <Identifier>http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2</Identifier>
      <Documentation>http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd</Documentation>
    </Specification>
    <Location>
      <Path>History</Path>
      <FileExtension>TCX</FileExtension>
    </Location>
    <TransferDirection>InputOutput</TransferDirection>
  </File>
</DataType>

Again, the plugin "sees" the device, but does not find any activities on it:

screenshot from 2015-01-25 13 19 38

dlenski commented 9 years ago

Aha! Problem solved.

I realized from reading the log file output that the FitnessDataPath must be a relative path, not an absolute path. With that fixed, everything works fine :+1:

<Device enabled="true">
    <Name>TomTom GPS Sport Watch</Name>
    <StoragePath>/home/me/Dropbox/tcx</StoragePath>
    <StorageCommand></StorageCommand>
    <FitnessDataPath>.</FitnessDataPath>
</Device>

It may be worthwhile to mention this in the docs to avoid confusing others.