92bb9013375b47ce18cf86a087ead4c2e2e192af
[fw/altos] / altosdroid / src / org / altusmetrum / AltosDroid / TabPad.java
1 /*
2  * Copyright © 2013 Mike Beattie <mike@ethernal.org>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; version 2 of the License.
7  *
8  * This program is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11  * General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License along
14  * with this program; if not, write to the Free Software Foundation, Inc.,
15  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
16  */
17
18 package org.altusmetrum.AltosDroid;
19
20 import org.altusmetrum.altoslib_7.*;
21
22 import android.app.Activity;
23 import android.os.Bundle;
24 import android.support.v4.app.Fragment;
25 import android.view.LayoutInflater;
26 import android.view.View;
27 import android.view.ViewGroup;
28 import android.widget.ImageView;
29 import android.widget.TextView;
30 import android.location.Location;
31
32 public class TabPad extends AltosDroidTab {
33         private TextView battery_voltage_view;
34         private GoNoGoLights battery_lights;
35
36         private TextView receiver_voltage_view;
37         private TextView receiver_voltage_label;
38         private GoNoGoLights receiver_voltage_lights;
39
40         private TextView apogee_voltage_view;
41         private TextView apogee_voltage_label;
42         private GoNoGoLights apogee_lights;
43
44         private TextView main_voltage_view;
45         private TextView main_voltage_label;
46         private GoNoGoLights main_lights;
47
48         private TextView data_logging_view;
49         private GoNoGoLights data_logging_lights;
50
51         private TextView gps_locked_view;
52         private GoNoGoLights gps_locked_lights;
53
54         private TextView gps_ready_view;
55         private GoNoGoLights gps_ready_lights;
56
57         private TextView pad_latitude_view;
58         private TextView pad_longitude_view;
59         private TextView pad_altitude_view;
60
61         @Override
62         public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
63                 View v = inflater.inflate(R.layout.tab_pad, container, false);
64                 battery_voltage_view = (TextView) v.findViewById(R.id.battery_voltage_value);
65                 battery_lights = new GoNoGoLights((ImageView) v.findViewById(R.id.battery_redled),
66                                                   (ImageView) v.findViewById(R.id.battery_greenled),
67                                                   getResources());
68
69                 receiver_voltage_view = (TextView) v.findViewById(R.id.receiver_voltage_value);
70                 receiver_voltage_label = (TextView) v.findViewById(R.id.receiver_voltage_label);
71                 receiver_voltage_lights = new GoNoGoLights((ImageView) v.findViewById(R.id.receiver_redled),
72                                                            (ImageView) v.findViewById(R.id.receiver_greenled),
73                                                            getResources());
74
75                 apogee_voltage_view = (TextView) v.findViewById(R.id.apogee_voltage_value);
76                 apogee_voltage_label = (TextView) v.findViewById(R.id.apogee_voltage_label);
77                 apogee_lights = new GoNoGoLights((ImageView) v.findViewById(R.id.apogee_redled),
78                                                  (ImageView) v.findViewById(R.id.apogee_greenled),
79                                                  getResources());
80
81                 main_voltage_view = (TextView) v.findViewById(R.id.main_voltage_value);
82                 main_voltage_label = (TextView) v.findViewById(R.id.main_voltage_label);
83                 main_lights = new GoNoGoLights((ImageView) v.findViewById(R.id.main_redled),
84                                                (ImageView) v.findViewById(R.id.main_greenled),
85                                                getResources());
86
87                 data_logging_view = (TextView) v.findViewById(R.id.logging_value);
88                 data_logging_lights = new GoNoGoLights((ImageView) v.findViewById(R.id.logging_redled),
89                                                       (ImageView) v.findViewById(R.id.logging_greenled),
90                                                       getResources());
91
92                 gps_locked_view = (TextView) v.findViewById(R.id.gps_locked_value);
93                 gps_locked_lights = new GoNoGoLights((ImageView) v.findViewById(R.id.gps_locked_redled),
94                                                     (ImageView) v.findViewById(R.id.gps_locked_greenled),
95                                                     getResources());
96
97                 gps_ready_view = (TextView) v.findViewById(R.id.gps_ready_value);
98                 gps_ready_lights = new GoNoGoLights((ImageView) v.findViewById(R.id.gps_ready_redled),
99                                                    (ImageView) v.findViewById(R.id.gps_ready_greenled),
100                                                    getResources());
101
102                 pad_latitude_view = (TextView) v.findViewById(R.id.pad_lat_value);
103                 pad_longitude_view = (TextView) v.findViewById(R.id.pad_lon_value);
104                 pad_altitude_view = (TextView) v.findViewById(R.id.pad_alt_value);
105         return v;
106         }
107
108         public String tab_name() { return "pad"; }
109
110         public void show(TelemetryState telem_state, AltosState state, AltosGreatCircle from_receiver, Location receiver) {
111                 if (state != null) {
112                         battery_voltage_view.setText(AltosDroid.number("%4.2f V", state.battery_voltage));
113                         battery_lights.set(state.battery_voltage >= AltosLib.ao_battery_good, state.battery_voltage == AltosLib.MISSING);
114                         if (state.apogee_voltage == AltosLib.MISSING) {
115                                 apogee_voltage_view.setVisibility(View.GONE);
116                                 apogee_voltage_label.setVisibility(View.GONE);
117                         } else {
118                                 apogee_voltage_view.setText(AltosDroid.number("%4.2f V", state.apogee_voltage));
119                                 apogee_voltage_view.setVisibility(View.VISIBLE);
120                                 apogee_voltage_label.setVisibility(View.VISIBLE);
121                         }
122                         apogee_lights.set(state.apogee_voltage >= AltosLib.ao_igniter_good, state.apogee_voltage == AltosLib.MISSING);
123                         if (state.main_voltage == AltosLib.MISSING) {
124                                 main_voltage_view.setVisibility(View.GONE);
125                                 main_voltage_label.setVisibility(View.GONE);
126                         } else {
127                                 main_voltage_view.setText(AltosDroid.number("%4.2f V", state.main_voltage));
128                                 main_voltage_view.setVisibility(View.VISIBLE);
129                                 main_voltage_label.setVisibility(View.VISIBLE);
130                         }
131                         main_lights.set(state.main_voltage >= AltosLib.ao_igniter_good, state.main_voltage == AltosLib.MISSING);
132
133                         if (state.flight != 0) {
134                                 if (state.state <= AltosLib.ao_flight_pad)
135                                         data_logging_view.setText("Ready to record");
136                                 else if (state.state < AltosLib.ao_flight_landed)
137                                         data_logging_view.setText("Recording data");
138                                 else
139                                         data_logging_view.setText("Recorded data");
140                         } else {
141                                 data_logging_view.setText("Storage full");
142                         }
143                         data_logging_lights.set(state.flight != 0, state.flight == AltosLib.MISSING);
144
145                         if (state.gps != null) {
146                                 int soln = state.gps.nsat;
147                                 int nsat = state.gps.cc_gps_sat != null ? state.gps.cc_gps_sat.length : 0;
148                                 gps_locked_view.setText(String.format("%4d in soln, %4d in view", soln, nsat));
149                                 gps_locked_lights.set(state.gps.locked && state.gps.nsat >= 4, false);
150                                 if (state.gps_ready)
151                                         gps_ready_view.setText("Ready");
152                                 else
153                                         gps_ready_view.setText(AltosDroid.integer("Waiting %d", state.gps_waiting));
154                         } else
155                                 gps_locked_lights.set(false, true);
156                         gps_ready_lights.set(state.gps_ready, state.gps == null);
157                 }
158
159                 if (telem_state != null) {
160                         if (telem_state.receiver_battery == AltosLib.MISSING) {
161                                 receiver_voltage_view.setVisibility(View.GONE);
162                                 receiver_voltage_label.setVisibility(View.GONE);
163                         } else {
164                                 receiver_voltage_view.setText(AltosDroid.number("%4.2f V", telem_state.receiver_battery));
165                                 receiver_voltage_view.setVisibility(View.VISIBLE);
166                                 receiver_voltage_label.setVisibility(View.VISIBLE);
167                         }
168                         receiver_voltage_lights.set(telem_state.receiver_battery >= AltosLib.ao_battery_good, telem_state.receiver_battery == AltosLib.MISSING);
169                 }
170
171                 if (receiver != null) {
172                         double altitude = AltosLib.MISSING;
173                         if (receiver.hasAltitude())
174                                 altitude = receiver.getAltitude();
175                         pad_latitude_view.setText(AltosDroid.pos(receiver.getLatitude(), "N", "S"));
176                         pad_longitude_view.setText(AltosDroid.pos(receiver.getLongitude(), "E", "W"));
177                         set_value(pad_altitude_view, AltosConvert.height, 6, altitude);
178                 }
179         }
180
181 }