/* MultiWii EZ-GUI Copyright (C) <2012> Bartosz Szczygiel (eziosoft) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package nav; import com.google.android.gms.maps.model.LatLng; public class WaypointNav implements Comparable<WaypointNav> { public static final int WP_ACTION_WAYPOINT = 1; // Set waypoint public static final int WP_ACTION_POSHOLD_UNLIM = 2; // Poshold unlimited public static final int WP_ACTION_POSHOLD_TIME = 3; // Hold for a // predetermined // time public static final int WP_ACTION_RTH = 4; // Return to HOME public static final int WP_ACTION_SET_POI = 5; // Set POINT of interest (not // implemented jet) public static final int WP_ACTION_JUMP = 6; // jump to the given WP and // (number of times) public static final int WP_ACTION_SET_HEAD = 7; // fixes copter heading (-1 // clears the // setting) public static final int WP_ACTION_LAND = 8; public static final String[] WP_ACTION_NAMES = { "---", "WAYPOINT", "POSHOLD_UNLIM", "POSHOLD_TIME", "RTH", "SET_POI", "JUMP", "SET_HEAD", "LAND" }; public static final int MISSION_FLAG_END = 0xa5; public static final int ERROR_ERROR = 1; public static final int ERROR_CRC = 2; public int Number = 0; public int Lat = 0; public int Lon = 0; public int Action = 1; public int Parameter1 = 0; public int Parameter2 = 0; public int Parameter3 = 0; public int Altitude = 25; public int Flag = 0; public String MarkerId = ""; public int Error = 0; public boolean ShowMarkerForThisWP() { boolean show = true; switch (Action) { case WP_ACTION_RTH: show = false; break; case WP_ACTION_JUMP: show = false; break; case WP_ACTION_SET_HEAD: show = false; break; default: show = true; break; } return show; } public String toString() { return "[" + getMarkerTitle() + "]\n" + getMarkerSnippet() + String.valueOf(getLatLng().latitude) + "x" + String.valueOf(getLatLng().longitude) + " F" + Integer.toHexString(Flag); } /** * * @param number * @param lat * @param lon * @param alt * altitude (cm) * @param heading * heading (deg) * @param timeToStay * time to stay (ms) * @param navFlag */ public WaypointNav(int number, int lat, int lon, int action, int parameter1, int parameter2, int parameter3, int altitude, int flag) { Number = number; Lat = lat; Lon = lon; Action = action; Parameter1 = parameter1; Parameter2 = parameter2; Parameter3 = parameter3; Altitude = altitude; // to set altitude (cm) Flag = flag; } /** * * @param number * @param lat * @param lon * @param alt * altitude (cm) * @param heading * heading (deg) * @param timeToStay * time to stay (ms) * @param navFlag */ public WaypointNav(int number, LatLng latLng, int action, int parameter1, int parameter2, int parameter3, int altitude, int flag) { Number = number; Lat = (int) (latLng.latitude * 1e7); Lon = (int) (latLng.longitude * 1e7); Action = action; Parameter1 = parameter1; Parameter2 = parameter2; Parameter3 = parameter3; Altitude = altitude; // to set altitude (cm) Flag = flag; } public WaypointNav(int number, LatLng latLng, int action, int parameter1, int parameter2, int parameter3, int altitude, int flag, String MarkerID) { Number = number; Lat = (int) (latLng.latitude * 1e7); Lon = (int) (latLng.longitude * 1e7); Action = action; Parameter1 = parameter1; Parameter2 = parameter2; Parameter3 = parameter3; Altitude = altitude; // to set altitude (cm) Flag = flag; MarkerId = MarkerID; } public WaypointNav() { } public LatLng getLatLng() { return new LatLng(Lat / 1e7, Lon / 1e7); } public void setLatLng(LatLng position) { Lat = (int) (position.latitude * 1e7); Lon = (int) (position.longitude * 1e7); } public String getMarkerTitle() { String t = ""; t += "WP" + String.valueOf(Number); return t; } public String getMarkerSnippet() { String t = ""; t += "Action:" + WP_ACTION_NAMES[Action] + "\n"; t += "Parameters:" + String.valueOf(Parameter1) + " " + String.valueOf(Parameter2) + " " + String.valueOf(Parameter3) + "\n"; t += "Altitude:" + String.valueOf(Altitude) + "\n"; return t; } public static int getActionNumberFromString(String action) { int i = 0; for (i = 0; i < WP_ACTION_NAMES.length; i++) { if (action.equals(WP_ACTION_NAMES[i])) return i; } return 0; } @Override public int compareTo(WaypointNav another) { if (Number < another.Number) return -1; if (Number > another.Number) return 1; if (Number == another.Number) return 0; return 0; } }