105 lines
2.6 KiB
Markdown
105 lines
2.6 KiB
Markdown
# FIT Parser Example
|
|
|
|
This directory contains a complete example application that demonstrates how to use the FIT parser.
|
|
|
|
## Running the Example
|
|
|
|
```bash
|
|
# From the example directory
|
|
go run main.go testdata/Activity.fit
|
|
|
|
# Or from the repository root
|
|
go run example/main.go example/testdata/Activity.fit
|
|
```
|
|
|
|
## Available Test Files
|
|
|
|
The `testdata/` directory contains several example FIT files:
|
|
|
|
- **Activity.fit** - Full activity file with GPS, heart rate, power, and cadence data
|
|
- **Settings.fit** - Simple device settings file
|
|
- **MonitoringFile.fit** - Daily monitoring data
|
|
- **WorkoutIndividualSteps.fit** - Workout definition
|
|
- **RealWorld_Cycling.fit** - Real-world cycling activity from Wahoo ELEMNT
|
|
|
|
## What the Example Does
|
|
|
|
The example program:
|
|
|
|
1. Reads and validates the FIT file
|
|
2. Decodes all messages with CRC validation
|
|
3. Displays file information (type, manufacturer, timestamps)
|
|
4. Shows activity summaries (distance, time, heart rate, power, etc.)
|
|
5. Prints sample data records with GPS coordinates, speed, and sensor data
|
|
|
|
## Example Output
|
|
|
|
```
|
|
File: testdata/Activity.fit (94096 bytes)
|
|
============================================================
|
|
|
|
Header Information:
|
|
FIT Header: Protocol v2.0, Profile v21158, DataSize=94080 bytes
|
|
|
|
Decoded 3611 messages
|
|
|
|
Message Type Summary:
|
|
FileId : 1 messages
|
|
Record : 3601 messages
|
|
Session : 1 messages
|
|
Lap : 1 messages
|
|
Event : 2 messages
|
|
DeviceInfo : 1 messages
|
|
Activity : 1 messages
|
|
|
|
📊 Session Summary:
|
|
Sport: Unknown
|
|
Total Time: 60.02 minutes
|
|
Average Heart Rate: 145 bpm
|
|
Max Heart Rate: 178 bpm
|
|
```
|
|
|
|
## Using in Your Own Code
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"git.blackfinn.de/go/fit-parser/fitparser"
|
|
)
|
|
|
|
func main() {
|
|
// Read FIT file
|
|
data, err := os.ReadFile("activity.fit")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Create decoder
|
|
decoder, err := fitparser.NewDecoder(data)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Decode with CRC validation (enabled by default)
|
|
messages, err := decoder.Decode()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Process messages
|
|
for _, msg := range messages {
|
|
switch msg.Num {
|
|
case fitparser.MesgNumRecord:
|
|
// Process data records
|
|
if hr, ok := msg.GetFieldValueUint8(fitparser.FieldRecordHeartRate); ok {
|
|
fmt.Printf("Heart Rate: %d bpm\n", hr)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|