mirror of
https://github.com/dyuri/garmin-repafield.git
synced 2025-12-16 11:14:16 +00:00
parent
47e74c8dfe
commit
846e401313
@ -119,15 +119,18 @@ class RepaFieldView extends WatchUi.DataField {
|
|||||||
hidden var egain as Number;
|
hidden var egain as Number;
|
||||||
hidden var edrop as Number;
|
hidden var edrop as Number;
|
||||||
hidden var cadence as Number;
|
hidden var cadence as Number;
|
||||||
hidden var grade as RollingAverage;
|
|
||||||
hidden var cgrade;
|
hidden var cgrade;
|
||||||
hidden var vspeed as RollingAverage;
|
|
||||||
hidden var cvspeed;
|
hidden var cvspeed;
|
||||||
hidden var cgap;
|
hidden var cgap;
|
||||||
|
hidden var deltaAlt as RollingAverage;
|
||||||
|
hidden var deltaDist as RollingAverage;
|
||||||
|
hidden var deltaTime as RollingAverage;
|
||||||
|
|
||||||
function initialize() {
|
function initialize() {
|
||||||
DataField.initialize();
|
DataField.initialize();
|
||||||
|
|
||||||
|
var RASize = 5; // TODO: rolling average window size => settings
|
||||||
|
|
||||||
themeColor = Application.Properties.getValue("themeColor").toNumberWithBase(16);
|
themeColor = Application.Properties.getValue("themeColor").toNumberWithBase(16);
|
||||||
themeColor2 = Application.Properties.getValue("themeColor2").toNumberWithBase(16);
|
themeColor2 = Application.Properties.getValue("themeColor2").toNumberWithBase(16);
|
||||||
themeColor3 = Application.Properties.getValue("themeColor3").toNumberWithBase(16);
|
themeColor3 = Application.Properties.getValue("themeColor3").toNumberWithBase(16);
|
||||||
@ -164,11 +167,12 @@ class RepaFieldView extends WatchUi.DataField {
|
|||||||
egain = 0;
|
egain = 0;
|
||||||
edrop = 0;
|
edrop = 0;
|
||||||
cadence = 0;
|
cadence = 0;
|
||||||
grade = new RollingAverage(10);
|
|
||||||
cgrade = null;
|
cgrade = null;
|
||||||
vspeed = new RollingAverage(10);
|
|
||||||
cvspeed = null;
|
cvspeed = null;
|
||||||
cgap = null;
|
cgap = null;
|
||||||
|
deltaAlt = new RollingAverage(RASize);
|
||||||
|
deltaDist = new RollingAverage(RASize);
|
||||||
|
deltaTime = new RollingAverage(RASize);
|
||||||
|
|
||||||
var settings = System.getDeviceSettings();
|
var settings = System.getDeviceSettings();
|
||||||
isDistanceMetric = settings.distanceUnits == System.UNIT_METRIC;
|
isDistanceMetric = settings.distanceUnits == System.UNIT_METRIC;
|
||||||
@ -252,18 +256,21 @@ class RepaFieldView extends WatchUi.DataField {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function onNextMultisportLeg() as Void {
|
public function onNextMultisportLeg() as Void {
|
||||||
grade.reset();
|
deltaAlt.reset();
|
||||||
vspeed.reset();
|
deltaDist.reset();
|
||||||
|
deltaTime.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onTimerLap() as Void {
|
public function onTimerLap() as Void {
|
||||||
grade.lapReset();
|
deltaAlt.lapReset();
|
||||||
vspeed.lapReset();
|
deltaDist.lapReset();
|
||||||
|
deltaTime.lapReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onTimerReset() as Void {
|
public function onTimerReset() as Void {
|
||||||
grade.reset();
|
deltaAlt.reset();
|
||||||
vspeed.reset();
|
deltaDist.reset();
|
||||||
|
deltaTime.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onTimerStart() as Void {
|
public function onTimerStart() as Void {
|
||||||
@ -381,30 +388,29 @@ class RepaFieldView extends WatchUi.DataField {
|
|||||||
if (info.timerTime != null && info.timerTime > 0 && timerRunning) {
|
if (info.timerTime != null && info.timerTime > 0 && timerRunning) {
|
||||||
if (info.altitude != null) {
|
if (info.altitude != null) {
|
||||||
var altChange = info.altitude - altitude;
|
var altChange = info.altitude - altitude;
|
||||||
|
deltaAlt.insert(altChange);
|
||||||
|
var da = deltaAlt.getRolling();
|
||||||
|
|
||||||
// grade
|
// grade
|
||||||
if (info.elapsedDistance != null) {
|
if (info.elapsedDistance != null) {
|
||||||
var distChange = info.elapsedDistance - distance;
|
var distChange = info.elapsedDistance - distance;
|
||||||
if (distChange > 0) {
|
deltaDist.insert(distChange);
|
||||||
grade.insert(altChange / distChange);
|
|
||||||
}
|
var dd = deltaDist.getRolling();
|
||||||
var currentGrade = grade.getRolling();
|
if (da != null && dd != null && dd != 0) {
|
||||||
if (currentGrade) {
|
cgrade = da / dd * 100;
|
||||||
cgrade = currentGrade * 100;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// vspeed - m/min or ft/min
|
// vspeed - m/min or ft/min
|
||||||
var timerChange = info.timerTime - timer;
|
var timerChange = info.timerTime - timer;
|
||||||
if (timerChange > 0) {
|
deltaTime.insert(timerChange);
|
||||||
|
var dt = deltaTime.getRolling();
|
||||||
|
|
||||||
|
if (dt != null && dt > 0 && da != null) {
|
||||||
|
cvspeed = da / dt * 60000.0f;
|
||||||
if (!isElevationMetric) {
|
if (!isElevationMetric) {
|
||||||
vspeed.insert(meterToFeet * altChange / (timerChange / 60000.0));
|
cvspeed *= meterToFeet;
|
||||||
} else {
|
|
||||||
vspeed.insert(altChange / (timerChange / 60000.0));
|
|
||||||
}
|
|
||||||
var currentVSpeed = vspeed.getRolling();
|
|
||||||
if (currentVSpeed != null ) {
|
|
||||||
cvspeed = currentVSpeed;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -528,22 +534,50 @@ class RepaFieldView extends WatchUi.DataField {
|
|||||||
// fit update
|
// fit update
|
||||||
// TODO: refactor into separate function/class
|
// TODO: refactor into separate function/class
|
||||||
if (timerRunning) {
|
if (timerRunning) {
|
||||||
|
var avgDA = deltaAlt.totalAvg();
|
||||||
|
var avgLDA = deltaAlt.lapAvg();
|
||||||
if (fitGrade != null) {
|
if (fitGrade != null) {
|
||||||
fitGrade.setData(cgrade ? cgrade : 0);
|
fitGrade.setData(cgrade ? cgrade : 0);
|
||||||
var gradeSumAvg = grade.totalAvg();
|
|
||||||
fitGradeSumAvg.setData(gradeSumAvg ? gradeSumAvg * 100 : 0);
|
var avgDD = deltaDist.totalAvg();
|
||||||
var gradeLapAvg = grade.lapAvg();
|
var avgGrade = 0.0f;
|
||||||
fitGradeLapAvg.setData(gradeLapAvg ? gradeLapAvg * 100 : 0);
|
if (avgDA != null && avgDD != null && avgDD != 0) {
|
||||||
|
avgGrade = avgDA / avgDD;
|
||||||
|
}
|
||||||
|
fitGradeSumAvg.setData(avgGrade * 100);
|
||||||
|
|
||||||
|
var avgLDD = deltaDist.lapAvg();
|
||||||
|
var avgLGrade = 0.0f;
|
||||||
|
if (avgLDA != null && avgLDD != null && avgLDD != 0) {
|
||||||
|
avgLGrade = avgLDA / avgLDD;
|
||||||
|
}
|
||||||
|
fitGradeLapAvg.setData(avgLGrade * 100);
|
||||||
}
|
}
|
||||||
if (fitGAP != null) {
|
if (fitGAP != null) {
|
||||||
fitGAP.setData(cgap ? cgap : 0);
|
fitGAP.setData(cgap ? cgap : 60);
|
||||||
}
|
}
|
||||||
if (fitVSpeed != null) {
|
if (fitVSpeed != null) {
|
||||||
fitVSpeed.setData(cvspeed ? cvspeed : 0);
|
fitVSpeed.setData(cvspeed ? cvspeed : 0);
|
||||||
var vsSumAvg = vspeed.totalAvg();
|
|
||||||
fitVSpeedSumAvg.setData(vsSumAvg ? vsSumAvg : 0);
|
var avgDT = deltaTime.totalAvg();
|
||||||
var vsLapAvg = vspeed.lapAvg();
|
var vsSumAvg = 0.0f;
|
||||||
fitVSpeedLapAvg.setData(vsLapAvg ? vsLapAvg : 0);
|
if (avgDA != null && avgDT != null && avgDT != 0) {
|
||||||
|
vsSumAvg = avgDA / avgDT * 60000.0f;
|
||||||
|
if (!isElevationMetric) {
|
||||||
|
vsSumAvg *= meterToFeet;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fitVSpeedSumAvg.setData(vsSumAvg);
|
||||||
|
|
||||||
|
var avgLDT = deltaTime.lapAvg();
|
||||||
|
var vsLapAvg = 0.0f;
|
||||||
|
if (avgDA != null && avgLDT != null && avgLDT != 0) {
|
||||||
|
vsLapAvg = avgLDA / avgLDT * 60000.0f;
|
||||||
|
if (!isElevationMetric) {
|
||||||
|
vsLapAvg *= meterToFeet;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fitVSpeedLapAvg.setData(vsLapAvg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user