-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtcx.h
133 lines (116 loc) · 3.65 KB
/
tcx.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#ifndef TCX_H_
#define TCX_H_
#include <libxml/tree.h>
#include <libxml/xpath.h>
#include <libxml/xpathInternals.h>
typedef struct coordinates
{
double latitude;
double longitude;
} coordinates_t;
typedef struct trackpoint
{
char * time;
double latitude;
double longitude;
double elevation;
double distance;
int heart_rate;
int cadence;
double speed;
int power;
double grade;
struct trackpoint * next;
} trackpoint_t;
typedef struct track
{
int num_trackpoints;
trackpoint_t * trackpoints;
struct track * next;
} track_t;
typedef struct lap
{
int num_tracks;
int num_trackpoints;
char * start_time;
double total_time;
double distance;
int calories;
double speed_average;
double speed_maximum;
double speed_minimum;
int heart_rate_average;
int heart_rate_maximum;
int heart_rate_minimum;
char * intensity;
int cadence_average;
int cadence_maximum;
int cadence_minimum;
double elevation_maximum;
double elevation_minimum;
double total_elevation_gain;
double total_elevation_loss;
double grade_adjusted_time;
track_t * tracks;
struct lap * next;
} lap_t;
typedef struct activity
{
int num_trackpoints;
int num_laps;
char * started_at;
char * ended_at;
double total_time;
struct coordinates * start_point;
struct coordinates * end_point;
double latitude;
double longitude;
int total_calories;
double total_distance;
double total_elevation_gain;
double total_elevation_loss;
double speed_average;
double speed_maximum;
double speed_minimum;
double elevation_maximum;
double elevation_minimum;
int cadence_average;
int cadence_maximum;
int cadence_minimum;
int heart_rate_average;
int heart_rate_minimum;
int heart_rate_maximum;
lap_t * laps;
struct activity * next;
} activity_t;
typedef struct
{
activity_t * activities;
} tcx_t;
void add_activity(tcx_t * tcx, activity_t * activity);
void add_lap(lap_t * lap);
void add_track(track_t * track);
void add_trackpoint(trackpoint_t * trackpoint);
int xml_content_to_i(xmlDocPtr document, xmlNodePtr node);
double xml_content_to_d(xmlDocPtr document, xmlNodePtr node);
lap_t * parse_lap(xmlDocPtr document, xmlNsPtr ns, xmlNodePtr node);
void parse_trackpoint_coordinates(trackpoint_t * trackpoint, xmlDocPtr document, xmlNsPtr ns, xmlNodePtr node);
void parse_trackpoint_heart_beat(trackpoint_t * trackpoint, xmlDocPtr document, xmlNsPtr ns, xmlNodePtr node);
void parse_trackpoint_extensions(trackpoint_t * trackpoint, xmlDocPtr document, xmlNodePtr node);
void parse_trackpoint_extensions_power_and_speed(trackpoint_t * trackpoint, xmlDocPtr document, xmlNodePtr node);
trackpoint_t * parse_trackpoint(xmlDocPtr document, xmlNsPtr ns, xmlNodePtr node);
int parse_tcx_file(tcx_t * tcx, char * filename);
double interval_distance(trackpoint_t * previous_trackpoint, trackpoint_t * trackpoint);
double haversine_distance(coordinates_t * start, coordinates_t * end);
void calculate_grade(trackpoint_t * previous_trackpoint, trackpoint_t * trackpoint_t);
void calculate_grade_adjusted_time(lap_t * lap);
void calculate_elevation_delta(lap_t * lap, trackpoint_t * previous_trackpoint, trackpoint_t * trackpoint);
void calculate_summary_activity(activity_t * activity, lap_t * lap);
void calculate_summary_lap(activity_t * activity, lap_t * lap, trackpoint_t * trackpoint);
void calculate_summary(tcx_t * tcx);
void print_activity(activity_t * activity);
void print_lap(lap_t * lap);
void print_track(track_t * track_t);
void print_trackpoint(trackpoint_t * trackpoint_t);
void print_tcx(tcx_t * tcx);
#endif /* !TCX_H_ */