diff --git a/README.md b/README.md
index 881d6cc..6d5c714 100644
--- a/README.md
+++ b/README.md
@@ -16,8 +16,11 @@ Trail running focused Garmin watch DataField (for myself)
- current
- gain
- loss
+- configurable top left field
+ - cadence
- grade
-- cadence (instead of grade) TODO
+ - gap
+ - vertical speed
- distance to destination gauge
# Settings
diff --git a/resources-epix2pro51mm/layouts.xml b/resources-epix2pro51mm/layouts.xml
new file mode 100755
index 0000000..df1d655
--- /dev/null
+++ b/resources-epix2pro51mm/layouts.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+ 178
+ 78
+ 280
+ -36
+
+
+ 80
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 80
+
+
+
+
+
+
+
+
+
+
+ 80
+
+
+
+
+
+
+
+
diff --git a/resources-round-240x240/layouts.xml b/resources-round-240x240/layouts.xml
index 04de36d..dcb4bc0 100755
--- a/resources-round-240x240/layouts.xml
+++ b/resources-round-240x240/layouts.xml
@@ -25,11 +25,11 @@
-
+
-
+
diff --git a/resources-round-280x280/layouts.xml b/resources-round-280x280/layouts.xml
index 0d90bb2..7968dee 100755
--- a/resources-round-280x280/layouts.xml
+++ b/resources-round-280x280/layouts.xml
@@ -3,7 +3,7 @@
- 100
+ 110
42
170
-18
@@ -25,12 +25,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/resources-round-390x390/layouts.xml b/resources-round-390x390/layouts.xml
index 363279e..2edec0a 100755
--- a/resources-round-390x390/layouts.xml
+++ b/resources-round-390x390/layouts.xml
@@ -3,7 +3,7 @@
- 140
+ 150
62
260
-32
diff --git a/resources-round-454x454/layouts.xml b/resources-round-454x454/layouts.xml
index b8a2785..8ab115f 100755
--- a/resources-round-454x454/layouts.xml
+++ b/resources-round-454x454/layouts.xml
@@ -3,7 +3,7 @@
- 158
+ 178
78
280
-36
diff --git a/resources/settings/properties.xml b/resources/settings/properties.xml
index eb55821..68ae7b7 100644
--- a/resources/settings/properties.xml
+++ b/resources/settings/properties.xml
@@ -5,5 +5,5 @@
FFFF00
0
false
- 2
+ 1
diff --git a/resources/settings/settings.xml b/resources/settings/settings.xml
index c0b2595..565f0fa 100644
--- a/resources/settings/settings.xml
+++ b/resources/settings/settings.xml
@@ -24,7 +24,7 @@
@Strings.TLFCadence
@Strings.TLFGrade
@Strings.TLFGAP
-
+ @Strings.TLFVSpeed
diff --git a/source/RepaFieldView.mc b/source/RepaFieldView.mc
index 39a6c16..0c5cd18 100644
--- a/source/RepaFieldView.mc
+++ b/source/RepaFieldView.mc
@@ -12,6 +12,7 @@ const HR_TYPE_ZONE = 2;
const TLF_CADENCE = 0;
const TLF_GRADE = 1;
const TLF_GAP = 2;
+const TLF_VSPEED = 3;
function displayHr(hr as Number, type as Number, zones as Array) as String {
if (hr == 0) {
@@ -51,6 +52,8 @@ class RepaFieldView extends WatchUi.DataField {
hidden var cadenceZoneColors as Array;
hidden var gradeZones as Array;
hidden var gradeZoneColors as Array;
+ hidden var vsZones as Array;
+ hidden var vsZoneColors as Array;
hidden var isDistanceMetric as Boolean;
hidden var isElevationMetric as Boolean;
hidden var isPaceMetric as Boolean;
@@ -94,6 +97,7 @@ class RepaFieldView extends WatchUi.DataField {
hidden var edrop as Number;
hidden var cadence as Number;
hidden var grade as RollingAverage;
+ hidden var vspeed as RollingAverage;
function initialize() {
DataField.initialize();
@@ -116,6 +120,8 @@ class RepaFieldView extends WatchUi.DataField {
cadenceZoneColors = [Graphics.COLOR_RED, Graphics.COLOR_YELLOW, Graphics.COLOR_GREEN, Graphics.COLOR_BLUE, Graphics.COLOR_PURPLE];
gradeZones = [-10, -1, 1, 3, 6, 10, 15];
gradeZoneColors = [Graphics.COLOR_PINK, Graphics.COLOR_PURPLE, Graphics.COLOR_LT_GRAY, Graphics.COLOR_BLUE, Graphics.COLOR_GREEN, Graphics.COLOR_YELLOW, Graphics.COLOR_RED, Graphics.COLOR_DK_RED];
+ vsZones = [-16.6, -1.6, 1.6, 5.0, 10.0, 16.6, 25.0];
+ vsZoneColors = gradeZoneColors;
toDestination = 0.0f;
distance = 0.0f;
timer = 0;
@@ -130,6 +136,7 @@ class RepaFieldView extends WatchUi.DataField {
edrop = 0;
cadence = 0;
grade = new RollingAverage(10);
+ vspeed = new RollingAverage(10);
var settings = System.getDeviceSettings();
isDistanceMetric = settings.distanceUnits == System.UNIT_METRIC;
@@ -233,12 +240,25 @@ class RepaFieldView extends WatchUi.DataField {
// update rolling values before updating normal fields
// only calculate them when some time has passed
if (info.timerTime != null && info.timerTime > 0) {
- // grade
- if (info.altitude != null && info.elapsedDistance != null) {
+ if (info.altitude != null) {
var altChange = info.altitude - altitude;
- var distChange = info.elapsedDistance - distance;
- if (distChange > 0) {
- grade.insert(altChange / distChange);
+
+ // grade
+ if (info.elapsedDistance != null) {
+ var distChange = info.elapsedDistance - distance;
+ if (distChange > 0) {
+ grade.insert(altChange / distChange);
+ }
+ }
+
+ // vspeed - m/min or ft/min
+ var timerChange = info.timerTime - timer;
+ if (timerChange > 0) {
+ if (!isElevationMetric) {
+ vspeed.insert(meterToFeet * altChange / (timerChange / 60000.0));
+ } else {
+ vspeed.insert(altChange / (timerChange / 60000.0));
+ }
}
}
}
@@ -265,7 +285,7 @@ class RepaFieldView extends WatchUi.DataField {
distance = 0.0f;
}
if (info.timerTime != null) {
- timer = info.timerTime / 1000;
+ timer = info.timerTime;
} else {
timer = 0;
}
@@ -384,9 +404,10 @@ class RepaFieldView extends WatchUi.DataField {
// timer
if (fTimer != null) {
- var trh = timer / 3600;
- var trm = (timer % 3600) / 60;
- var trs = timer % 60;
+ var timersec = timer / 1000;
+ var trh = timersec / 3600;
+ var trm = (timersec % 3600) / 60;
+ var trs = timersec % 60;
var timerColor = Graphics.COLOR_RED;
if (timerState == Activity.TIMER_STATE_ON) {
timerColor = Graphics.COLOR_WHITE;
@@ -407,7 +428,9 @@ class RepaFieldView extends WatchUi.DataField {
// distance
if (fDistance != null) {
- if (distance >= 10000) {
+ if (distance >= 100000) {
+ fDistance.setText((distance / 1000).format("%.0f"));
+ } else if (distance >= 10000) {
fDistance.setText((distance / 1000).format("%.1f"));
} else {
fDistance.setText((distance / 1000).format("%.2f"));
@@ -476,6 +499,15 @@ class RepaFieldView extends WatchUi.DataField {
} else {
fCadence.setText("-");
}
+ } else if (tlFieldData == TLF_VSPEED) {
+ var cvspeed = vspeed.get();
+ var vsColor = calculateZoneColor(cvspeed, vsZones, vsZoneColors);
+ fCadence.setColor(vsColor);
+ if (cvspeed >= 10 || cvspeed <= -10) {
+ fCadence.setText(cvspeed.format("%.0f"));
+ } else {
+ fCadence.setText(cvspeed.format("%.1f"));
+ }
} else {
var cadenceColor = calculateZoneColor(cadence, cadenceZones, cadenceZoneColors);
fCadence.setColor(cadenceColor);
diff --git a/source/RollingAverage.mc b/source/RollingAverage.mc
index ac67f01..6b3114d 100644
--- a/source/RollingAverage.mc
+++ b/source/RollingAverage.mc
@@ -1,6 +1,7 @@
import Toybox.Lang;
import Toybox.Time;
import Toybox.Math;
+import Toybox.System;
class RollingAverage {
hidden var _size as Number;