Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@ public float getAltitudeAccuracy() {
private int _cadence = 0;
private float _sensorSpeed = 0;
private long _sensorSpeedTime = 0;
private int _power = 0;
private int _maxPower = 0;

// debug levels
public int debugLevel = 0;
Expand Down Expand Up @@ -393,7 +395,7 @@ public void setSaveLocation(boolean saveLocation) {
this._saveLocation = saveLocation;
}

public int onLocationChanged(Location location, int heartRate, int cadence) {
public int onLocationChanged(Location location, int heartRate, int cadence, int power) {
int returnValue = NORMAL;
long deltaTime = 0;
float deltaDistance = 0;
Expand Down Expand Up @@ -440,6 +442,8 @@ public int onLocationChanged(Location location, int heartRate, int cadence) {
}
_hearRate = heartRate;
_cadence = cadence;
_power = power;
_maxPower = Math.max(_power, _maxPower);

if ((lastGoodLocation != null) && ((location.getTime() - lastGoodLocation.getTime()) < 500)) {
// less than X ms, skip this location
Expand Down Expand Up @@ -757,6 +761,11 @@ private void _saveLocation() {
if (_cadence > 0) {
values.put("loca_cad", _cadence);
}
if (_power > 0) {
values.put("loca_power",_power);
}
values.put("loca_speed", this.getSpeed());
values.put("loca_distance", this.getDistance());
//values.put("loca_comment", "");

long newRowId = db.insert(
Expand All @@ -765,6 +774,64 @@ private void _saveLocation() {
values);
};

public String getTCX(final String sportType) {
StringBuilder tcx = new StringBuilder();
tcx.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<TrainingCenterDatabase xsi:schemaLocation=\"http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd\" "
+ "xmlns:ns5=\"http://www.garmin.com/xmlschemas/ActivityGoals/v1\" "
+ "xmlns:ns3=\"http://www.garmin.com/xmlschemas/ActivityExtension/v2\" "
+ "xmlns:ns2=\"http://www.garmin.com/xmlschemas/UserProfile/v2\" "
+ "xmlns=\"http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2\" "
+ "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:ns4=\"http://www.garmin.com/xmlschemas/ProfileExtension/v1\">\n");

String selectQuery = "SELECT _ID, loca_time, loca_lat, loca_lon, loca_altitude, loca_accuracy, loca_comment, loca_ascent, loca_gps_altitude, loca_pressure_altitude, loca_hr, loca_cad, loca_power, loca_speed, loca_distance FROM " + AdvancedLocationDbHelper.Location.TABLE_NAME + " ORDER BY _ID ASC";
Cursor cursor = db.rawQuery(selectQuery, null);

long itemId = -1;
int trackNumber = 1;
if (cursor.moveToFirst()) {
String time = "";
Date netDate = (new Date(Long.parseLong(cursor.getString(1))));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
time = sdf.format(netDate);
time = time.substring(0, time.length() - 2) + ':' + time.substring(time.length() - 2);
tcx.append("<Activities>\n<Activity Sport=\""+sportType+"\">\n<Id>"+time+"</Id>\n<Lap>\n<Track>\n");
long prevTime = -1;

do {
time = "";
netDate = (new Date(Long.parseLong(cursor.getString(1))));
time = sdf.format(netDate);
time = time.substring(0, time.length() - 2) + ':' + time.substring(time.length() - 2);
tcx.append(" <Trackpoint>\n <Time>"+time+"</Time>\n ");
tcx.append("<Position>\n <LatitudeDegrees>"+cursor.getString(2)+"</LatitudeDegrees>\n ");
tcx.append("<LongitudeDegrees>"+cursor.getString(3)+"</LongitudeDegrees>\n </Position>\n");
tcx.append(" <AltitudeMeters>"+cursor.getString(4)+"</AltitudeMeters>\n");
tcx.append(" <DistanceMeters>"+cursor.getString(14)+"</DistanceMeters>\n");

if (!cursor.isNull(10)) {
//HR
tcx.append(" <HeartRateBpm><Value>"+cursor.getString(10)+"</Value></HeartRateBpm>\n");
}
if (!cursor.isNull(11)) {
//CAD
tcx.append(" <Cadence>"+cursor.getString(11)+"</Cadence>\n");
}
tcx.append(" <Extensions>\n <ns3:TPX>\n <ns3:Speed>"+cursor.getString(13)+"</ns3:Speed>\n");
if (!cursor.isNull(12)) {
//POWER
tcx.append(" <ns3:Watts>"+cursor.getString(12)+"</ns3:Watts>\n");
}
tcx.append(" </ns3:TPX>\n </Extensions>\n");
tcx.append(" </Trackpoint>\n");
} while (cursor.moveToNext());
tcx.append("</Track>\n</Lap>\n</Activity>\n</Activities>\n");
}

tcx.append("</TrainingCenterDatabase>");
return tcx.toString();
}

public String getGPX(boolean extended) {
StringBuilder gpx = new StringBuilder();
String creator = "JayPS";
Expand Down Expand Up @@ -847,6 +914,7 @@ public String getGPX(boolean extended) {
//Logger(gpx.toString());
return gpx.toString();
}

public String getRunkeeperJson(String type) {
StringBuilder json = new StringBuilder();
StringBuilder hr = new StringBuilder();
Expand Down Expand Up @@ -939,4 +1007,53 @@ public void Logger(String s, int level, LoggerType type) {
}
}
}

public int getPower() {
return _power;
}

public int getMaxPower() {
return _maxPower;
}

public int getAvgPower(int seconds) {
Date date = new Date();
long timeMilli = date.getTime() - (seconds * 1000);
String time = String.format("%d",timeMilli);
String selectQuery = "SELECT loca_power from "+AdvancedLocationDbHelper.Location.TABLE_NAME+" WHERE loca_time >= "+time;
Cursor cursor = db.rawQuery(selectQuery, null);
int count = 0;
int sum = 0;
double avg = 0.0;
if (cursor.moveToFirst()) {
do {
count++;
sum += Integer.parseInt(cursor.getString(1));
} while (cursor.moveToNext());
avg = sum / count;
}
Logger(String.format("avgdPower time $%d count %d",seconds, count));
return (int) Math.round(avg);
}

public int getNormalizedPower(int seconds) {
Date date = new Date();
long timeMilli = date.getTime() - (seconds * 1000);
String time = String.format("%d",timeMilli);
String selectQuery = "SELECT loca_power from "+AdvancedLocationDbHelper.Location.TABLE_NAME+" WHERE loca_time >= "+time;
Cursor cursor = db.rawQuery(selectQuery, null);
int count = 0;
double sum = 0;
double avg = 0.0;
if (cursor.moveToFirst()) {
do {
count++;
sum += Math.pow(Integer.parseInt(cursor.getString(1)),4);
} while (cursor.moveToNext());
avg = sum / count;
}
double np = Math.pow(avg, 1.0/4);
Logger(String.format("NormalizedPower time $%d count %d",seconds, count));
return (int) Math.round(avg);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public class AdvancedLocationDbHelper extends SQLiteOpenHelper {

private static final String TAG = "PB-AdvLocDbHelper";

public static final int DATABASE_VERSION = 3;
public static final int DATABASE_VERSION = 4;
public static final String DATABASE_NAME = "AdvancedLocation.db";

private static AdvancedLocationDbHelper sInstance;
Expand All @@ -34,6 +34,9 @@ public static abstract class Location implements BaseColumns {
+ ", loca_hr" + TEXT_TYPE
+ ", loca_cad" + TEXT_TYPE
+ ", loca_comment" + TEXT_TYPE
+ ", loca_power" + TEXT_TYPE
+ ", loca_speed" + TEXT_TYPE
+ ", loca_distance" + TEXT_TYPE
+ " )";

private static final String SQL_DELETE_ENTRIES =
Expand Down Expand Up @@ -73,6 +76,11 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
SQLExec(db, "ALTER TABLE location ADD COLUMN loca_hr TEXT");
SQLExec(db, "ALTER TABLE location ADD COLUMN loca_cad TEXT");
}
if (oldVersion < 4) {
SQLExec(db, "ALTER TABLE location ADD COLUMN loca_power TEXT");
SQLExec(db, "ALTER TABLE location ADD COLUMN loca_speed TEXT");
SQLExec(db, "ALTER TABLE location ADD COLUMN loca_distance TEXT");
}
}
}
private void SQLExec(SQLiteDatabase db, String sql) {
Expand Down