From 78df1d5213c402780fa2ce7e062c64cf5a01c45f Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 6 Jun 2015 20:37:27 -0700 Subject: altosdroid: Note recent changes Signed-off-by: Keith Packard --- altosdroid/Notebook | 61 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 7 deletions(-) (limited to 'altosdroid/Notebook') diff --git a/altosdroid/Notebook b/altosdroid/Notebook index 6a246df7..38a4bc01 100644 --- a/altosdroid/Notebook +++ b/altosdroid/Notebook @@ -15,17 +15,39 @@ Desired AltosDroid feature list *) Monitor-idle mode - *) Frequency scanning + *) TeleBT battery voltage - *) Select satellite imaging mode + *) Select tracker by clicking map - *) TeleBT battery voltage + *) Auto select tracker after long delay - *) Deal with long bluetooth list. Currently, a list longer than - the screen makes it impossible to use entries off the bottom. + *) Evaluate performance issues - *) Pickle/unpickle state instead of reloading entire history from - file. Current restart time is lengthy. + *) Merge offline/online maps into single tab with mode + + *) Make voice responses depend on selected tab + + *) Monitor TeleMega igniters + + *) Convert to four tab design: + + 1) Pad + + Report out GPS status, report igniter/battery status changes + + 2) Flight + + Report height, speed, az/el/range + + 3) Recovery + + Report range bearing/heading (bearing if stationary, + heading if in motion + + 4) Map + + Pick out report based on current flight status + (presume flight if in motion, recovery otherwise) Completed features @@ -47,3 +69,28 @@ Completed features Done + *) Select satellite imaging mode + + Done + + *) Deal with long bluetooth list. Currently, a list longer than + the screen makes it impossible to use entries off the bottom. + + Done + + *) Pickle/unpickle state instead of reloading entire history from + file. Current restart time is lengthy. + + Done + + *) Offline maps + + Done + + *) Multi-tracker management + + Done + + *) Provide units for age field, turn red if old + + Done -- cgit v1.2.3 From 9af72a2e629779833ff1787bbfc2ddc8b9d88bba Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 21 Jun 2015 09:37:05 -0700 Subject: altosdroid: Show receiver battery voltage in the 'pad' view Helpful to determine when the receiver battery is getting low Signed-off-by: Keith Packard --- altosdroid/Notebook | 6 +- altosdroid/res/layout/tab_pad.xml | 39 +++++- altosdroid/res/values/strings.xml | 1 + .../src/org/altusmetrum/AltosDroid/TabPad.java | 154 ++++++++++++--------- .../altusmetrum/AltosDroid/TelemetryService.java | 34 ++++- .../org/altusmetrum/AltosDroid/TelemetryState.java | 2 + 6 files changed, 168 insertions(+), 68 deletions(-) (limited to 'altosdroid/Notebook') diff --git a/altosdroid/Notebook b/altosdroid/Notebook index 38a4bc01..c0ba2098 100644 --- a/altosdroid/Notebook +++ b/altosdroid/Notebook @@ -15,8 +15,6 @@ Desired AltosDroid feature list *) Monitor-idle mode - *) TeleBT battery voltage - *) Select tracker by clicking map *) Auto select tracker after long delay @@ -94,3 +92,7 @@ Completed features *) Provide units for age field, turn red if old Done + + *) TeleBT battery voltage + + Done diff --git a/altosdroid/res/layout/tab_pad.xml b/altosdroid/res/layout/tab_pad.xml index 38e61f83..380eab91 100644 --- a/altosdroid/res/layout/tab_pad.xml +++ b/altosdroid/res/layout/tab_pad.xml @@ -58,6 +58,43 @@ android:textAppearance="?android:attr/textAppearanceSmall" /> + + + + + + + + + + + - \ No newline at end of file + diff --git a/altosdroid/res/values/strings.xml b/altosdroid/res/values/strings.xml index 79a77ba9..0c012819 100644 --- a/altosdroid/res/values/strings.xml +++ b/altosdroid/res/values/strings.xml @@ -76,6 +76,7 @@ Max Speed Max Accel Battery Voltage + Receiver Battery Apogee Igniter Voltage Main Igniter Voltage On-board Data Logging diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java index 7a256963..92bb9013 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java @@ -30,64 +30,78 @@ import android.widget.TextView; import android.location.Location; public class TabPad extends AltosDroidTab { - private TextView mBatteryVoltageView; - private TextView mBatteryVoltageLabel; - private GoNoGoLights mBatteryLights; - private TextView mApogeeVoltageView; - private TextView mApogeeVoltageLabel; - private GoNoGoLights mApogeeLights; - private TextView mMainVoltageView; - private TextView mMainVoltageLabel; - private GoNoGoLights mMainLights; - private TextView mDataLoggingView; - private GoNoGoLights mDataLoggingLights; - private TextView mGPSLockedView; - private GoNoGoLights mGPSLockedLights; - private TextView mGPSReadyView; - private GoNoGoLights mGPSReadyLights; - private TextView mPadLatitudeView; - private TextView mPadLongitudeView; - private TextView mPadAltitudeView; + private TextView battery_voltage_view; + private GoNoGoLights battery_lights; + + private TextView receiver_voltage_view; + private TextView receiver_voltage_label; + private GoNoGoLights receiver_voltage_lights; + + private TextView apogee_voltage_view; + private TextView apogee_voltage_label; + private GoNoGoLights apogee_lights; + + private TextView main_voltage_view; + private TextView main_voltage_label; + private GoNoGoLights main_lights; + + private TextView data_logging_view; + private GoNoGoLights data_logging_lights; + + private TextView gps_locked_view; + private GoNoGoLights gps_locked_lights; + + private TextView gps_ready_view; + private GoNoGoLights gps_ready_lights; + + private TextView pad_latitude_view; + private TextView pad_longitude_view; + private TextView pad_altitude_view; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.tab_pad, container, false); - mBatteryVoltageView = (TextView) v.findViewById(R.id.battery_voltage_value); - mBatteryVoltageLabel = (TextView) v.findViewById(R.id.battery_voltage_label); - mBatteryLights = new GoNoGoLights((ImageView) v.findViewById(R.id.battery_redled), + battery_voltage_view = (TextView) v.findViewById(R.id.battery_voltage_value); + battery_lights = new GoNoGoLights((ImageView) v.findViewById(R.id.battery_redled), (ImageView) v.findViewById(R.id.battery_greenled), getResources()); - mApogeeVoltageView = (TextView) v.findViewById(R.id.apogee_voltage_value); - mApogeeVoltageLabel = (TextView) v.findViewById(R.id.apogee_voltage_label); - mApogeeLights = new GoNoGoLights((ImageView) v.findViewById(R.id.apogee_redled), + receiver_voltage_view = (TextView) v.findViewById(R.id.receiver_voltage_value); + receiver_voltage_label = (TextView) v.findViewById(R.id.receiver_voltage_label); + receiver_voltage_lights = new GoNoGoLights((ImageView) v.findViewById(R.id.receiver_redled), + (ImageView) v.findViewById(R.id.receiver_greenled), + getResources()); + + apogee_voltage_view = (TextView) v.findViewById(R.id.apogee_voltage_value); + apogee_voltage_label = (TextView) v.findViewById(R.id.apogee_voltage_label); + apogee_lights = new GoNoGoLights((ImageView) v.findViewById(R.id.apogee_redled), (ImageView) v.findViewById(R.id.apogee_greenled), getResources()); - mMainVoltageView = (TextView) v.findViewById(R.id.main_voltage_value); - mMainVoltageLabel = (TextView) v.findViewById(R.id.main_voltage_label); - mMainLights = new GoNoGoLights((ImageView) v.findViewById(R.id.main_redled), + main_voltage_view = (TextView) v.findViewById(R.id.main_voltage_value); + main_voltage_label = (TextView) v.findViewById(R.id.main_voltage_label); + main_lights = new GoNoGoLights((ImageView) v.findViewById(R.id.main_redled), (ImageView) v.findViewById(R.id.main_greenled), getResources()); - mDataLoggingView = (TextView) v.findViewById(R.id.logging_value); - mDataLoggingLights = new GoNoGoLights((ImageView) v.findViewById(R.id.logging_redled), + data_logging_view = (TextView) v.findViewById(R.id.logging_value); + data_logging_lights = new GoNoGoLights((ImageView) v.findViewById(R.id.logging_redled), (ImageView) v.findViewById(R.id.logging_greenled), getResources()); - mGPSLockedView = (TextView) v.findViewById(R.id.gps_locked_value); - mGPSLockedLights = new GoNoGoLights((ImageView) v.findViewById(R.id.gps_locked_redled), + gps_locked_view = (TextView) v.findViewById(R.id.gps_locked_value); + gps_locked_lights = new GoNoGoLights((ImageView) v.findViewById(R.id.gps_locked_redled), (ImageView) v.findViewById(R.id.gps_locked_greenled), getResources()); - mGPSReadyView = (TextView) v.findViewById(R.id.gps_ready_value); - mGPSReadyLights = new GoNoGoLights((ImageView) v.findViewById(R.id.gps_ready_redled), + gps_ready_view = (TextView) v.findViewById(R.id.gps_ready_value); + gps_ready_lights = new GoNoGoLights((ImageView) v.findViewById(R.id.gps_ready_redled), (ImageView) v.findViewById(R.id.gps_ready_greenled), getResources()); - mPadLatitudeView = (TextView) v.findViewById(R.id.pad_lat_value); - mPadLongitudeView = (TextView) v.findViewById(R.id.pad_lon_value); - mPadAltitudeView = (TextView) v.findViewById(R.id.pad_alt_value); + pad_latitude_view = (TextView) v.findViewById(R.id.pad_lat_value); + pad_longitude_view = (TextView) v.findViewById(R.id.pad_lon_value); + pad_altitude_view = (TextView) v.findViewById(R.id.pad_alt_value); return v; } @@ -95,60 +109,72 @@ public class TabPad extends AltosDroidTab { public void show(TelemetryState telem_state, AltosState state, AltosGreatCircle from_receiver, Location receiver) { if (state != null) { - mBatteryVoltageView.setText(AltosDroid.number("%4.2f V", state.battery_voltage)); - mBatteryLights.set(state.battery_voltage >= AltosLib.ao_battery_good, state.battery_voltage == AltosLib.MISSING); + battery_voltage_view.setText(AltosDroid.number("%4.2f V", state.battery_voltage)); + battery_lights.set(state.battery_voltage >= AltosLib.ao_battery_good, state.battery_voltage == AltosLib.MISSING); if (state.apogee_voltage == AltosLib.MISSING) { - mApogeeVoltageView.setVisibility(View.GONE); - mApogeeVoltageLabel.setVisibility(View.GONE); + apogee_voltage_view.setVisibility(View.GONE); + apogee_voltage_label.setVisibility(View.GONE); } else { - mApogeeVoltageView.setText(AltosDroid.number("%4.2f V", state.apogee_voltage)); - mApogeeVoltageView.setVisibility(View.VISIBLE); - mApogeeVoltageLabel.setVisibility(View.VISIBLE); + apogee_voltage_view.setText(AltosDroid.number("%4.2f V", state.apogee_voltage)); + apogee_voltage_view.setVisibility(View.VISIBLE); + apogee_voltage_label.setVisibility(View.VISIBLE); } - mApogeeLights.set(state.apogee_voltage >= AltosLib.ao_igniter_good, state.apogee_voltage == AltosLib.MISSING); + apogee_lights.set(state.apogee_voltage >= AltosLib.ao_igniter_good, state.apogee_voltage == AltosLib.MISSING); if (state.main_voltage == AltosLib.MISSING) { - mMainVoltageView.setVisibility(View.GONE); - mMainVoltageLabel.setVisibility(View.GONE); + main_voltage_view.setVisibility(View.GONE); + main_voltage_label.setVisibility(View.GONE); } else { - mMainVoltageView.setText(AltosDroid.number("%4.2f V", state.main_voltage)); - mMainVoltageView.setVisibility(View.VISIBLE); - mMainVoltageLabel.setVisibility(View.VISIBLE); + main_voltage_view.setText(AltosDroid.number("%4.2f V", state.main_voltage)); + main_voltage_view.setVisibility(View.VISIBLE); + main_voltage_label.setVisibility(View.VISIBLE); } - mMainLights.set(state.main_voltage >= AltosLib.ao_igniter_good, state.main_voltage == AltosLib.MISSING); + main_lights.set(state.main_voltage >= AltosLib.ao_igniter_good, state.main_voltage == AltosLib.MISSING); if (state.flight != 0) { if (state.state <= AltosLib.ao_flight_pad) - mDataLoggingView.setText("Ready to record"); + data_logging_view.setText("Ready to record"); else if (state.state < AltosLib.ao_flight_landed) - mDataLoggingView.setText("Recording data"); + data_logging_view.setText("Recording data"); else - mDataLoggingView.setText("Recorded data"); + data_logging_view.setText("Recorded data"); } else { - mDataLoggingView.setText("Storage full"); + data_logging_view.setText("Storage full"); } - mDataLoggingLights.set(state.flight != 0, state.flight == AltosLib.MISSING); + data_logging_lights.set(state.flight != 0, state.flight == AltosLib.MISSING); if (state.gps != null) { int soln = state.gps.nsat; int nsat = state.gps.cc_gps_sat != null ? state.gps.cc_gps_sat.length : 0; - mGPSLockedView.setText(String.format("%4d in soln, %4d in view", soln, nsat)); - mGPSLockedLights.set(state.gps.locked && state.gps.nsat >= 4, false); + gps_locked_view.setText(String.format("%4d in soln, %4d in view", soln, nsat)); + gps_locked_lights.set(state.gps.locked && state.gps.nsat >= 4, false); if (state.gps_ready) - mGPSReadyView.setText("Ready"); + gps_ready_view.setText("Ready"); else - mGPSReadyView.setText(AltosDroid.integer("Waiting %d", state.gps_waiting)); + gps_ready_view.setText(AltosDroid.integer("Waiting %d", state.gps_waiting)); } else - mGPSLockedLights.set(false, true); - mGPSReadyLights.set(state.gps_ready, state.gps == null); + gps_locked_lights.set(false, true); + gps_ready_lights.set(state.gps_ready, state.gps == null); + } + + if (telem_state != null) { + if (telem_state.receiver_battery == AltosLib.MISSING) { + receiver_voltage_view.setVisibility(View.GONE); + receiver_voltage_label.setVisibility(View.GONE); + } else { + receiver_voltage_view.setText(AltosDroid.number("%4.2f V", telem_state.receiver_battery)); + receiver_voltage_view.setVisibility(View.VISIBLE); + receiver_voltage_label.setVisibility(View.VISIBLE); + } + receiver_voltage_lights.set(telem_state.receiver_battery >= AltosLib.ao_battery_good, telem_state.receiver_battery == AltosLib.MISSING); } if (receiver != null) { double altitude = AltosLib.MISSING; if (receiver.hasAltitude()) altitude = receiver.getAltitude(); - mPadLatitudeView.setText(AltosDroid.pos(receiver.getLatitude(), "N", "S")); - mPadLongitudeView.setText(AltosDroid.pos(receiver.getLongitude(), "E", "W")); - set_value(mPadAltitudeView, AltosConvert.height, 6, altitude); + pad_latitude_view.setText(AltosDroid.pos(receiver.getLatitude(), "N", "S")); + pad_longitude_view.setText(AltosDroid.pos(receiver.getLongitude(), "E", "W")); + set_value(pad_altitude_view, AltosConvert.height, 6, altitude); } } diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java index 80694ea7..52363430 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java @@ -45,7 +45,6 @@ import android.location.Criteria; import org.altusmetrum.altoslib_7.*; - public class TelemetryService extends Service implements LocationListener { static final int MSG_REGISTER_CLIENT = 1; @@ -305,6 +304,8 @@ public class TelemetryService extends Service implements LocationListener { if (altos_link != null) altos_link.closing(); + stop_receiver_voltage_timer(); + if (telemetry_reader != null) { AltosDebug.debug("disconnect(): stopping TelemetryReader"); telemetry_reader.interrupt(); @@ -367,6 +368,35 @@ public class TelemetryService extends Service implements LocationListener { send_to_clients(); } + // Timer for receiver battery voltage monitoring + Timer receiver_voltage_timer; + + private void update_receiver_voltage() { + if (altos_link != null) { + try { + double voltage = altos_link.monitor_battery(); + AltosDebug.debug("update receiver voltage %g\n", voltage); + telemetry_state.receiver_battery = voltage; + } catch (InterruptedException ie) { + } + } + } + + private void stop_receiver_voltage_timer() { + if (receiver_voltage_timer != null) { + receiver_voltage_timer.cancel(); + receiver_voltage_timer.purge(); + receiver_voltage_timer = null; + } + } + + private void start_receiver_voltage_timer() { + if (receiver_voltage_timer == null && altos_link.has_monitor_battery()) { + receiver_voltage_timer = new Timer(); + receiver_voltage_timer.scheduleAtFixedRate(new TimerTask() { public void run() {update_receiver_voltage();}}, 1000L, 10000L); + } + } + private void connected() throws InterruptedException { AltosDebug.debug("connected top"); AltosDebug.check_ui("connected\n"); @@ -401,6 +431,8 @@ public class TelemetryService extends Service implements LocationListener { telemetry_logger = new TelemetryLogger(this, altos_link); + start_receiver_voltage_timer(); + AltosDebug.debug("Notify UI of connection"); send_to_clients(); diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryState.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryState.java index d023128f..c40df648 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryState.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryState.java @@ -32,6 +32,7 @@ public class TelemetryState { AltosConfigData config; Location location; int crc_errors; + double receiver_battery; double frequency; int telemetry_rate; @@ -45,6 +46,7 @@ public class TelemetryState { states = new HashMap(); location = null; crc_errors = 0; + receiver_battery = AltosLib.MISSING; frequency = AltosPreferences.frequency(0); telemetry_rate = AltosPreferences.telemetry_rate(0); } -- cgit v1.2.3 From 0f56903774d9e8bb033dfc0af6945e8ddc1d3065 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 22 Jun 2015 20:08:05 -0700 Subject: altosdroid: Select tracker by clicking on map This lets you pick a tracker from the map, rather than having to use the menu. Signed-off-by: Keith Packard --- altosdroid/Notebook | 24 ++++++--- .../src/org/altusmetrum/AltosDroid/AltosDroid.java | 48 ++++++++++++----- .../AltosDroid/AltosDroidMapInterface.java | 2 +- .../altusmetrum/AltosDroid/AltosMapOffline.java | 61 ++++++++++++++++++---- .../org/altusmetrum/AltosDroid/AltosMapOnline.java | 6 ++- .../src/org/altusmetrum/AltosDroid/TabMap.java | 12 +---- altoslib/AltosMap.java | 21 ++++++++ altoslib/AltosMapInterface.java | 2 + altoslib/AltosMapTransform.java | 7 +++ altosuilib/AltosUIMapNew.java | 5 ++ 10 files changed, 146 insertions(+), 42 deletions(-) (limited to 'altosdroid/Notebook') diff --git a/altosdroid/Notebook b/altosdroid/Notebook index c0ba2098..6804aa5d 100644 --- a/altosdroid/Notebook +++ b/altosdroid/Notebook @@ -15,14 +15,6 @@ Desired AltosDroid feature list *) Monitor-idle mode - *) Select tracker by clicking map - - *) Auto select tracker after long delay - - *) Evaluate performance issues - - *) Merge offline/online maps into single tab with mode - *) Make voice responses depend on selected tab *) Monitor TeleMega igniters @@ -96,3 +88,19 @@ Completed features *) TeleBT battery voltage Done + + *) Evaluate performance issues + + Done. Offline maps were duplicating tabs at every redisplay. + + *) Merge offline/online maps into single tab with mode + + Done. + + *) Auto select tracker after long delay + + Done. + + *) Select tracker by clicking map + + Done. diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java index f6645105..c5da6d0e 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java @@ -18,10 +18,9 @@ package org.altusmetrum.AltosDroid; import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.Timer; -import java.util.TimerTask; import java.text.*; +import java.util.*; +import java.io.*; import android.app.Activity; import android.app.PendingIntent; @@ -248,11 +247,13 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener { } } + int selected_serial = 0; int current_serial; long switch_time; void set_switch_time() { switch_time = System.currentTimeMillis(); + selected_serial = 0; } boolean registered_units_listener; @@ -262,6 +263,9 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener { if (new_telemetry_state != null) telemetry_state = new_telemetry_state; + if (selected_serial != 0) + current_serial = selected_serial; + if (current_serial == 0) current_serial = telemetry_state.latest_serial; @@ -271,6 +275,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener { } serials = telemetry_state.states.keySet().toArray(new Integer[0]); + Arrays.sort(serials); update_title(telemetry_state); @@ -282,7 +287,9 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener { int age = state_age(state); if (age < 20) aged = false; - if (switch_time != 0 && (switch_time - state.received_time) > 0) + if (current_serial == selected_serial) + aged = false; + else if (switch_time != 0 && (switch_time - state.received_time) > 0) aged = true; } @@ -828,13 +835,26 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener { void select_tracker(int serial) { int i; - for (i = 0; i < serials.length; i++) - if (serials[i] == serial) - break; - if (i == serials.length) + + AltosDebug.debug("select tracker %d\n", serial); + + if (serial == selected_serial) { + AltosDebug.debug("%d already selected\n", serial); return; + } + + if (serial != 0) { + for (i = 0; i < serials.length; i++) + if (serials[i] == serial) + break; - current_serial = serial; + if (i == serials.length) { + AltosDebug.debug("attempt to select unknown tracker %d\n", serial); + return; + } + } + + current_serial = selected_serial = serial; update_state(null); } @@ -933,15 +953,19 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener { return true; case R.id.select_tracker: if (serials != null) { - String[] trackers = new String[serials.length]; + String[] trackers = new String[serials.length+1]; + trackers[0] = "Auto"; for (int i = 0; i < serials.length; i++) - trackers[i] = String.format("%d", serials[i]); + trackers[i+1] = String.format("%d", serials[i]); AlertDialog.Builder builder_serial = new AlertDialog.Builder(this); builder_serial.setTitle("Select a tracker"); builder_serial.setItems(trackers, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { - select_tracker(serials[item]); + if (item == 0) + select_tracker(0); + else + select_tracker(serials[item-1]); } }); AlertDialog alert_serial = builder_serial.create(); diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidMapInterface.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidMapInterface.java index 681cd311..7aff1341 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidMapInterface.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidMapInterface.java @@ -23,7 +23,7 @@ import android.location.Location; import org.altusmetrum.altoslib_7.*; public interface AltosDroidMapInterface { - public void onCreateView(int map_type); + public void onCreateView(AltosDroid altos_droid); public void set_visible(boolean visible); diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java index 3ff6ff25..12dd2f25 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java @@ -36,7 +36,9 @@ import android.util.*; class Rocket implements Comparable { AltosLatLon position; String name; + int serial; long last_packet; + boolean active; AltosMapOffline map_offline; void paint() { @@ -49,14 +51,18 @@ class Rocket implements Comparable { this.last_packet = last_packet; } - Rocket(String name, AltosMapOffline map_offline) { - this.name = name; - this.map_offline = map_offline; + void set_active(boolean active) { + this.active = active; } public int compareTo(Object o) { Rocket other = (Rocket) o; + if (active && !other.active) + return 1; + if (other.active && !active) + return -1; + long diff = last_packet - other.last_packet; if (diff > 0) @@ -65,12 +71,19 @@ class Rocket implements Comparable { return -1; return 0; } + + Rocket(int serial, AltosMapOffline map_offline) { + this.serial = serial; + this.name = String.format("%d", serial); + this.map_offline = map_offline; + } } public class AltosMapOffline extends View implements ScaleGestureDetector.OnScaleGestureListener, AltosMapInterface, AltosDroidMapInterface { ScaleGestureDetector scale_detector; boolean scaling; AltosMap map; + AltosDroid altos_droid; AltosLatLon here; AltosLatLon pad; @@ -236,6 +249,24 @@ public class AltosMapOffline extends View implements ScaleGestureDetector.OnScal public void set_zoom_label(String label) { } + public void select_object(AltosLatLon latlon) { + if (map.transform == null) + return; + for (Rocket rocket : sorted_rockets()) { + if (rocket.position == null) { + debug("rocket %d has no position\n", rocket.serial); + continue; + } + double distance = map.transform.hypot(latlon, rocket.position); + debug("check select %d distance %g width %d\n", rocket.serial, distance, rocket_bitmap.getWidth()); + if (distance < rocket_bitmap.getWidth() * 2.0) { + debug("selecting %d\n", rocket.serial); + altos_droid.select_tracker(rocket.serial); + break; + } + } + } + class Line { AltosLatLon a, b; @@ -295,16 +326,20 @@ public class AltosMapOffline extends View implements ScaleGestureDetector.OnScal } } + private Rocket[] sorted_rockets() { + Rocket[] rocket_array = rockets.values().toArray(new Rocket[0]); + + Arrays.sort(rocket_array); + return rocket_array; + } + private void draw_positions() { line.set_a(map.last_position); line.set_b(here); line.paint(); draw_bitmap(pad, pad_bitmap, pad_off_x, pad_off_y); - Rocket[] rocket_array = rockets.values().toArray(new Rocket[0]); - - Arrays.sort(rocket_array); - for (Rocket rocket : rocket_array) + for (Rocket rocket : sorted_rockets()) rocket.paint(); draw_bitmap(here, here_bitmap, here_off_x, here_off_y); } @@ -379,6 +414,8 @@ public class AltosMapOffline extends View implements ScaleGestureDetector.OnScal map.touch_start((int) event.getX(), (int) event.getY(), true); } else if (event.getAction() == MotionEvent.ACTION_MOVE) { map.touch_continue((int) event.getX(), (int) event.getY(), true); + } else if (event.getAction() == MotionEvent.ACTION_UP) { + map.touch_stop((int) event.getX(), (int) event.getY(), true); } return true; } @@ -425,11 +462,13 @@ public class AltosMapOffline extends View implements ScaleGestureDetector.OnScal if (rockets.containsKey(serial)) rocket = rockets.get(serial); else { - rocket = new Rocket(String.format("%d", serial), this); + rocket = new Rocket(serial, this); rockets.put(serial, rocket); } if (t_state.gps != null) rocket.set_position(new AltosLatLon(t_state.gps.lat, t_state.gps.lon), t_state.received_time); + if (state != null) + rocket.set_active(state.serial == serial); } } if (receiver != null) { @@ -437,9 +476,10 @@ public class AltosMapOffline extends View implements ScaleGestureDetector.OnScal } } - public void onCreateView(int map_type) { + public void onCreateView(AltosDroid altos_droid) { + this.altos_droid = altos_droid; map = new AltosMap(this); - map.set_maptype(map_type); + map.set_maptype(altos_droid.map_type); pad_bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pad); /* arrow at the bottom of the launchpad image */ @@ -464,6 +504,7 @@ public class AltosMapOffline extends View implements ScaleGestureDetector.OnScal public AltosMapOffline(Context context, AttributeSet attrs) { super(context, attrs); + this.altos_droid = altos_droid; scale_detector = new ScaleGestureDetector(context, this); } } diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOnline.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOnline.java index 9503a0bd..3f5f32be 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOnline.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOnline.java @@ -121,7 +121,11 @@ public class AltosMapOnline implements AltosDroidMapInterface { private AltosLatLon my_position = null; private AltosLatLon target_position = null; - public void onCreateView(final int map_type) { + private AltosDroid altos_droid; + + public void onCreateView(AltosDroid altos_droid) { + this.altos_droid = altos_droid; + final int map_type = altos_droid.map_type; mMapFragment = new SupportMapFragment() { @Override public void onActivityCreated(Bundle savedInstanceState) { diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java index 9c39e105..cd59dfe7 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java @@ -57,14 +57,6 @@ public class TabMap extends AltosDroidTab { super.onCreate(savedInstanceState); } - private void make_offline_map() { - } - - private void make_online_map() { - map_online = new AltosMapOnline(view.getContext()); - map_online.onCreateView(altos_droid.map_type); - } - @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.tab_map, container, false); @@ -77,9 +69,9 @@ public class TabMap extends AltosDroidTab { mReceiverLatitudeView = (TextView)view.findViewById(R.id.receiver_lat_value); mReceiverLongitudeView = (TextView)view.findViewById(R.id.receiver_lon_value); map_offline = (AltosMapOffline)view.findViewById(R.id.map_offline); - map_offline.onCreateView(altos_droid.map_type); + map_offline.onCreateView(altos_droid); map_online = new AltosMapOnline(view.getContext()); - map_online.onCreateView(altos_droid.map_type); + map_online.onCreateView(altos_droid); set_map_source(AltosDroidPreferences.map_source()); return view; } diff --git a/altoslib/AltosMap.java b/altoslib/AltosMap.java index adf52ab9..8d12a180 100644 --- a/altoslib/AltosMap.java +++ b/altoslib/AltosMap.java @@ -391,6 +391,10 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { AltosPointInt drag_start; + boolean dragged; + + static final double drag_far = 20; + private void drag(int x, int y) { if (drag_start == null) return; @@ -398,6 +402,11 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { int dx = x - drag_start.x; int dy = y - drag_start.y; + double distance = Math.hypot(dx, dy); + + if (distance > drag_far) + dragged = true; + if (transform == null) { debug("Transform not set in drag\n"); return; @@ -410,6 +419,12 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { private void drag_start(int x, int y) { drag_start = new AltosPointInt(x, y); + dragged = false; + } + + private void drag_stop(int x, int y) { + if (!dragged) + map_interface.select_object (transform.screen_lat_lon(new AltosPointInt(x,y))); } private void line_start(int x, int y) { @@ -442,6 +457,12 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { line(x, y); } + public void touch_stop(int x, int y, boolean is_drag) { + notice_user_input(); + if (is_drag) + drag_stop(x, y); + } + public AltosMap(AltosMapInterface map_interface) { this.map_interface = map_interface; cache = new AltosMapCache(map_interface); diff --git a/altoslib/AltosMapInterface.java b/altoslib/AltosMapInterface.java index e6cb5971..7e8dd236 100644 --- a/altoslib/AltosMapInterface.java +++ b/altoslib/AltosMapInterface.java @@ -42,4 +42,6 @@ public interface AltosMapInterface { public abstract void set_zoom_label(String label); public abstract void debug(String format, Object ... arguments); + + public abstract void select_object(AltosLatLon latlon); } diff --git a/altoslib/AltosMapTransform.java b/altoslib/AltosMapTransform.java index 30994ecb..11ed4eb9 100644 --- a/altoslib/AltosMapTransform.java +++ b/altoslib/AltosMapTransform.java @@ -51,6 +51,13 @@ public class AltosMapTransform { return new AltosPointDouble(screen.x + offset_x, screen.y + offset_y); } + public double hypot(AltosLatLon a, AltosLatLon b) { + AltosPointDouble a_pt = point(a); + AltosPointDouble b_pt = point(b); + + return Math.hypot(a_pt.x - b_pt.x, a_pt.y - b_pt.y); + } + public AltosLatLon screen_lat_lon(AltosPointInt screen) { return lat_lon(screen_point(screen)); } diff --git a/altosuilib/AltosUIMapNew.java b/altosuilib/AltosUIMapNew.java index 246222bc..8ac18296 100644 --- a/altosuilib/AltosUIMapNew.java +++ b/altosuilib/AltosUIMapNew.java @@ -358,10 +358,15 @@ public class AltosUIMapNew extends JComponent implements AltosFlightDisplay, Alt zoom_label.setText(label); } + public void select_object(AltosLatLon latlon) { + debug("select at %f,%f\n", latlon.lat, latlon.lon); + } + public void debug(String format, Object ... arguments) { System.out.printf(format, arguments); } + /* AltosFlightDisplay interface */ public void set_font() { -- cgit v1.2.3 From 87d2ab135b493486162d33ff172eba1f44dc0ce5 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 22 Jun 2015 21:04:01 -0700 Subject: altosdroid: Mark four-tab change done Signed-off-by: Keith Packard --- altosdroid/Notebook | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'altosdroid/Notebook') diff --git a/altosdroid/Notebook b/altosdroid/Notebook index 6804aa5d..e1d439d0 100644 --- a/altosdroid/Notebook +++ b/altosdroid/Notebook @@ -17,10 +17,6 @@ Desired AltosDroid feature list *) Make voice responses depend on selected tab - *) Monitor TeleMega igniters - - *) Convert to four tab design: - 1) Pad Report out GPS status, report igniter/battery status changes @@ -39,6 +35,8 @@ Desired AltosDroid feature list Pick out report based on current flight status (presume flight if in motion, recovery otherwise) + *) Monitor TeleMega igniters + Completed features *) Highlight current frequency in the frequency list. @@ -104,3 +102,7 @@ Completed features *) Select tracker by clicking map Done. + + *) Convert to four tab design: + + Done. -- cgit v1.2.3 From d9f96c45d0a3099e9e5fd3c75cc27f9415fcaf55 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Tue, 23 Jun 2015 22:21:30 -0700 Subject: altosdroid: Mark tab-dependent voice output as done Signed-off-by: Keith Packard --- altosdroid/Notebook | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) (limited to 'altosdroid/Notebook') diff --git a/altosdroid/Notebook b/altosdroid/Notebook index e1d439d0..22271e7c 100644 --- a/altosdroid/Notebook +++ b/altosdroid/Notebook @@ -15,26 +15,6 @@ Desired AltosDroid feature list *) Monitor-idle mode - *) Make voice responses depend on selected tab - - 1) Pad - - Report out GPS status, report igniter/battery status changes - - 2) Flight - - Report height, speed, az/el/range - - 3) Recovery - - Report range bearing/heading (bearing if stationary, - heading if in motion - - 4) Map - - Pick out report based on current flight status - (presume flight if in motion, recovery otherwise) - *) Monitor TeleMega igniters Completed features @@ -106,3 +86,7 @@ Completed features *) Convert to four tab design: Done. + + *) Make voice responses depend on selected tab + + Done. -- cgit v1.2.3 From ed682ca39496849b6c0d6bdf81bee6263864895f Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 11 Jul 2015 19:55:43 -0700 Subject: altosdroid: Add other igniter status, various other layout changes Show the first four igniters (A-D) in the pad tab. Make pad and flight layouts look a bit better Signed-off-by: Keith Packard --- altosdroid/Notebook | 18 +- altosdroid/res/layout/tab_flight.xml | 751 +++++++++---------- altosdroid/res/layout/tab_pad.xml | 803 ++++++++++++--------- altosdroid/res/values/strings.xml | 16 +- .../src/org/altusmetrum/AltosDroid/TabPad.java | 86 ++- 5 files changed, 940 insertions(+), 734 deletions(-) (limited to 'altosdroid/Notebook') diff --git a/altosdroid/Notebook b/altosdroid/Notebook index 22271e7c..73b5ed27 100644 --- a/altosdroid/Notebook +++ b/altosdroid/Notebook @@ -15,7 +15,9 @@ Desired AltosDroid feature list *) Monitor-idle mode - *) Monitor TeleMega igniters + *) Online maps comes up tracking object at 0,0 + + *) Have names for each serial number, default to callsign Completed features @@ -90,3 +92,17 @@ Completed features *) Make voice responses depend on selected tab Done. + + *) Monitor TeleMega igniters + + Done. Visible only in Pad tab + + *) Make it harder to switch trackers in map view. Too easy to touch + the screen and switch on accident. + + Done. A menu pops up with trackers within a small radius of + the touch point, letting you cancel if that wasn't your intent. + + *) Make sure it keeps talking with the screen blanked + + Done. Don't shut down voice when stopping UI. diff --git a/altosdroid/res/layout/tab_flight.xml b/altosdroid/res/layout/tab_flight.xml index 4fa026ca..27c903d0 100644 --- a/altosdroid/res/layout/tab_flight.xml +++ b/altosdroid/res/layout/tab_flight.xml @@ -15,377 +15,386 @@ with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. --> - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_weight="1" > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/altosdroid/res/layout/tab_pad.xml b/altosdroid/res/layout/tab_pad.xml index 380eab91..f7a69f21 100644 --- a/altosdroid/res/layout/tab_pad.xml +++ b/altosdroid/res/layout/tab_pad.xml @@ -15,343 +15,466 @@ with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/altosdroid/res/values/strings.xml b/altosdroid/res/values/strings.xml index 36b07bc2..e7014fc9 100644 --- a/altosdroid/res/values/strings.xml +++ b/altosdroid/res/values/strings.xml @@ -77,11 +77,15 @@ Max Height Max Speed Max Accel - Battery Voltage + Battery Receiver Battery - Apogee Igniter Voltage - Main Igniter Voltage - On-board Data Logging + Apogee Igniter + Main Igniter + Igniter A + Igniter B + Igniter C + Igniter D + Data Logging GPS Locked GPS Ready Latitude @@ -90,9 +94,7 @@ Tar Lon My Lat My Lon - Pad Lat - Pad Lon - Pad Alt + My Alt Known Launch Sites diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java index cfc55261..f6204547 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java @@ -54,9 +54,14 @@ public class TabPad extends AltosDroidTab { private TextView gps_ready_view; private GoNoGoLights gps_ready_lights; - private TextView pad_latitude_view; - private TextView pad_longitude_view; - private TextView pad_altitude_view; + private TextView receiver_latitude_view; + private TextView receiver_longitude_view; + private TextView receiver_altitude_view; + + private TextView[] ignite_voltage_view = new TextView[4]; + private TextView[] ignite_voltage_label = new TextView[4]; + private GoNoGoLights[] ignite_lights = new GoNoGoLights[4]; + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -99,9 +104,46 @@ public class TabPad extends AltosDroidTab { (ImageView) v.findViewById(R.id.gps_ready_greenled), getResources()); - pad_latitude_view = (TextView) v.findViewById(R.id.pad_lat_value); - pad_longitude_view = (TextView) v.findViewById(R.id.pad_lon_value); - pad_altitude_view = (TextView) v.findViewById(R.id.pad_alt_value); + for (int i = 0; i < 4; i++) { + int view_id, label_id, lights_id; + int red_id, green_id; + switch (i) { + case 0: + default: + view_id = R.id.ignite_a_voltage_value; + label_id = R.id.ignite_a_voltage_label; + red_id = R.id.ignite_a_redled; + green_id = R.id.ignite_a_greenled; + break; + case 1: + view_id = R.id.ignite_b_voltage_value; + label_id = R.id.ignite_b_voltage_label; + red_id = R.id.ignite_b_redled; + green_id = R.id.ignite_b_greenled; + break; + case 2: + view_id = R.id.ignite_c_voltage_value; + label_id = R.id.ignite_c_voltage_label; + red_id = R.id.ignite_c_redled; + green_id = R.id.ignite_c_greenled; + break; + case 3: + view_id = R.id.ignite_d_voltage_value; + label_id = R.id.ignite_d_voltage_label; + red_id = R.id.ignite_d_redled; + green_id = R.id.ignite_d_greenled; + break; + } + ignite_voltage_view[i] = (TextView) v.findViewById(view_id); + ignite_voltage_label[i] = (TextView) v.findViewById(label_id); + ignite_lights[i] = new GoNoGoLights((ImageView) v.findViewById(red_id), + (ImageView) v.findViewById(green_id), + getResources()); + } + + receiver_latitude_view = (TextView) v.findViewById(R.id.receiver_lat_value); + receiver_longitude_view = (TextView) v.findViewById(R.id.receiver_lon_value); + receiver_altitude_view = (TextView) v.findViewById(R.id.receiver_alt_value); return v; } @@ -109,13 +151,13 @@ public class TabPad extends AltosDroidTab { public void show(TelemetryState telem_state, AltosState state, AltosGreatCircle from_receiver, Location receiver) { if (state != null) { - battery_voltage_view.setText(AltosDroid.number("%4.2f V", state.battery_voltage)); + battery_voltage_view.setText(AltosDroid.number(" %4.2f V", state.battery_voltage)); battery_lights.set(state.battery_voltage >= AltosLib.ao_battery_good, state.battery_voltage == AltosLib.MISSING); if (state.apogee_voltage == AltosLib.MISSING) { apogee_voltage_view.setVisibility(View.GONE); apogee_voltage_label.setVisibility(View.GONE); } else { - apogee_voltage_view.setText(AltosDroid.number("%4.2f V", state.apogee_voltage)); + apogee_voltage_view.setText(AltosDroid.number(" %4.2f V", state.apogee_voltage)); apogee_voltage_view.setVisibility(View.VISIBLE); apogee_voltage_label.setVisibility(View.VISIBLE); } @@ -124,12 +166,27 @@ public class TabPad extends AltosDroidTab { main_voltage_view.setVisibility(View.GONE); main_voltage_label.setVisibility(View.GONE); } else { - main_voltage_view.setText(AltosDroid.number("%4.2f V", state.main_voltage)); + main_voltage_view.setText(AltosDroid.number(" %4.2f V", state.main_voltage)); main_voltage_view.setVisibility(View.VISIBLE); main_voltage_label.setVisibility(View.VISIBLE); } main_lights.set(state.main_voltage >= AltosLib.ao_igniter_good, state.main_voltage == AltosLib.MISSING); + int num_igniter = state.ignitor_voltage == null ? 0 : state.ignitor_voltage.length; + + for (int i = 0; i < 4; i++) { + double voltage = i >= num_igniter ? AltosLib.MISSING : state.ignitor_voltage[i]; + if (voltage == AltosLib.MISSING) { + ignite_voltage_view[i].setVisibility(View.GONE); + ignite_voltage_label[i].setVisibility(View.GONE); + } else { + ignite_voltage_view[i].setText(AltosDroid.number(" %4.2f V", voltage)); + ignite_voltage_view[i].setVisibility(View.VISIBLE); + ignite_voltage_label[i].setVisibility(View.VISIBLE); + } + ignite_lights[i].set(voltage >= AltosLib.ao_igniter_good, voltage == AltosLib.MISSING); + } + if (state.flight != 0) { if (state.state <= AltosLib.ao_flight_pad) data_logging_view.setText("Ready to record"); @@ -145,7 +202,7 @@ public class TabPad extends AltosDroidTab { if (state.gps != null) { int soln = state.gps.nsat; int nsat = state.gps.cc_gps_sat != null ? state.gps.cc_gps_sat.length : 0; - gps_locked_view.setText(String.format("%4d in soln, %4d in view", soln, nsat)); + gps_locked_view.setText(String.format("%d in soln, %d in view", soln, nsat)); gps_locked_lights.set(state.gps.locked && state.gps.nsat >= 4, false); if (state.gps_ready) gps_ready_view.setText("Ready"); @@ -161,7 +218,7 @@ public class TabPad extends AltosDroidTab { receiver_voltage_view.setVisibility(View.GONE); receiver_voltage_label.setVisibility(View.GONE); } else { - receiver_voltage_view.setText(AltosDroid.number("%4.2f V", telem_state.receiver_battery)); + receiver_voltage_view.setText(AltosDroid.number(" %4.2f V", telem_state.receiver_battery)); receiver_voltage_view.setVisibility(View.VISIBLE); receiver_voltage_label.setVisibility(View.VISIBLE); } @@ -172,10 +229,9 @@ public class TabPad extends AltosDroidTab { double altitude = AltosLib.MISSING; if (receiver.hasAltitude()) altitude = receiver.getAltitude(); - pad_latitude_view.setText(AltosDroid.pos(receiver.getLatitude(), "N", "S")); - pad_longitude_view.setText(AltosDroid.pos(receiver.getLongitude(), "E", "W")); - set_value(pad_altitude_view, AltosConvert.height, 6, altitude); + receiver_latitude_view.setText(AltosDroid.pos(receiver.getLatitude(), "N", "S")); + receiver_longitude_view.setText(AltosDroid.pos(receiver.getLongitude(), "E", "W")); + set_value(receiver_altitude_view, AltosConvert.height, 1, altitude); } } - } -- cgit v1.2.3