summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2009-07-17 16:22:51 -0700
committerKeith Packard <keithp@keithp.com>2009-07-17 16:22:51 -0700
commitbfe1e76c82738baaf65abbc58c3244a07ea8fefe (patch)
tree830df5cda8538bafd251de2336f3988b2b3b26ff
parent5f0179652e8bb85add9067e5253e981c60f2c51e (diff)
Split GPS data into a separate column
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--aoview/aoview.glade28
-rw-r--r--aoview/aoview.h2
-rw-r--r--aoview/aoview_state.c68
-rw-r--r--aoview/aoview_table.c43
-rw-r--r--src/ao_gps.c5
5 files changed, 92 insertions, 54 deletions
diff --git a/aoview/aoview.glade b/aoview/aoview.glade
index a2dc830f..df08b83c 100644
--- a/aoview/aoview.glade
+++ b/aoview/aoview.glade
@@ -388,12 +388,30 @@
</packing>
</child>
<child>
- <widget class="GtkTreeView" id="dataview">
+ <widget class="GtkHBox" id="hbox1">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_clickable">False</property>
- <property name="show_expanders">False</property>
- <property name="enable_grid_lines">both</property>
+ <child>
+ <widget class="GtkTreeView" id="dataview_0">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="show_expanders">False</property>
+ <property name="enable_grid_lines">both</property>
+ </widget>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkTreeView" id="dataview_1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="show_expanders">False</property>
+ <property name="enable_grid_lines">both</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
</widget>
<packing>
<property name="position">2</property>
diff --git a/aoview/aoview.h b/aoview/aoview.h
index ac64833f..803bd4a5 100644
--- a/aoview/aoview.h
+++ b/aoview/aoview.h
@@ -226,7 +226,7 @@ void
aoview_table_start(void);
void
-aoview_table_add_row(char *label, char *format, ...);
+aoview_table_add_row(int column, char *label, char *format, ...);
void
aoview_table_finish(void);
diff --git a/aoview/aoview_state.c b/aoview/aoview_state.c
index d5e978b6..8b43ec29 100644
--- a/aoview/aoview_state.c
+++ b/aoview/aoview_state.c
@@ -62,7 +62,7 @@ aoview_great_circle (double start_lat, double start_lon,
}
static void
-aoview_state_add_deg(char *label, double deg, char pos, char neg)
+aoview_state_add_deg(int column, char *label, double deg, char pos, char neg)
{
double int_part;
double min;
@@ -74,7 +74,7 @@ aoview_state_add_deg(char *label, double deg, char pos, char neg)
}
int_part = floor (deg);
min = (deg - int_part) * 60.0;
- aoview_table_add_row(label, "%d°%lf'%c",
+ aoview_table_add_row(column, label, "%d°%lf'%c",
(int) int_part, min, sign);
}
@@ -266,51 +266,51 @@ aoview_state_notify(struct aodata *data)
aoview_table_start();
if (state->npad >= MIN_PAD_SAMPLES)
- aoview_table_add_row("Ground state", "ready");
+ aoview_table_add_row(0, "Ground state", "ready");
else
- aoview_table_add_row("Ground state", "waiting for gps (%d)",
+ aoview_table_add_row(0, "Ground state", "waiting for gps (%d)",
MIN_PAD_SAMPLES - state->npad);
- aoview_table_add_row("Rocket state", "%s", state->data.state);
- aoview_table_add_row("Callsign", "%s", state->data.callsign);
- aoview_table_add_row("Rocket serial", "%d", state->data.serial);
-
- aoview_table_add_row("RSSI", "%6ddBm", state->data.rssi);
- aoview_table_add_row("Height", "%6dm", state->height);
- aoview_table_add_row("Max height", "%6dm", state->max_height);
- aoview_table_add_row("Acceleration", "%7.1fm/s²", state->acceleration);
- aoview_table_add_row("Max acceleration", "%7.1fm/s²", state->max_acceleration);
- aoview_table_add_row("Speed", "%7.1fm/s", state->ascent ? state->speed : state->baro_speed);
- aoview_table_add_row("Max Speed", "%7.1fm/s", state->max_speed);
- aoview_table_add_row("Temperature", "%6.2f°C", state->temperature);
- aoview_table_add_row("Battery", "%5.2fV", state->battery);
- aoview_table_add_row("Drogue", "%5.2fV", state->drogue_sense);
- aoview_table_add_row("Main", "%5.2fV", state->main_sense);
- aoview_table_add_row("Pad altitude", "%dm", state->ground_altitude);
- aoview_table_add_row("Satellites", "%d", state->data.nsat);
+ aoview_table_add_row(0, "Rocket state", "%s", state->data.state);
+ aoview_table_add_row(0, "Callsign", "%s", state->data.callsign);
+ aoview_table_add_row(0, "Rocket serial", "%d", state->data.serial);
+
+ aoview_table_add_row(0, "RSSI", "%6ddBm", state->data.rssi);
+ aoview_table_add_row(0, "Height", "%6dm", state->height);
+ aoview_table_add_row(0, "Max height", "%6dm", state->max_height);
+ aoview_table_add_row(0, "Acceleration", "%7.1fm/s²", state->acceleration);
+ aoview_table_add_row(0, "Max acceleration", "%7.1fm/s²", state->max_acceleration);
+ aoview_table_add_row(0, "Speed", "%7.1fm/s", state->ascent ? state->speed : state->baro_speed);
+ aoview_table_add_row(0, "Max Speed", "%7.1fm/s", state->max_speed);
+ aoview_table_add_row(0, "Temperature", "%6.2f°C", state->temperature);
+ aoview_table_add_row(0, "Battery", "%5.2fV", state->battery);
+ aoview_table_add_row(0, "Drogue", "%5.2fV", state->drogue_sense);
+ aoview_table_add_row(0, "Main", "%5.2fV", state->main_sense);
+ aoview_table_add_row(0, "Pad altitude", "%dm", state->ground_altitude);
+ aoview_table_add_row(1, "Satellites", "%d", state->data.nsat);
if (state->data.locked) {
- aoview_state_add_deg("Latitude", state->data.lat, 'N', 'S');
- aoview_state_add_deg("Longitude", state->data.lon, 'E', 'W');
- aoview_table_add_row("GPS height", "%d", state->gps_height);
- aoview_table_add_row("GPS time", "%02d:%02d:%02d",
+ aoview_state_add_deg(1, "Latitude", state->data.lat, 'N', 'S');
+ aoview_state_add_deg(1, "Longitude", state->data.lon, 'E', 'W');
+ aoview_table_add_row(1, "GPS height", "%d", state->gps_height);
+ aoview_table_add_row(1, "GPS time", "%02d:%02d:%02d",
state->data.gps_time.hour,
state->data.gps_time.minute,
state->data.gps_time.second);
- aoview_table_add_row("GPS ground speed", "%7.1fm/s %d°",
+ aoview_table_add_row(1, "GPS ground speed", "%7.1fm/s %d°",
state->data.ground_speed,
state->data.course);
- aoview_table_add_row("GPS climb rate", "%7.1fm/s",
+ aoview_table_add_row(1, "GPS climb rate", "%7.1fm/s",
state->data.climb_rate);
- aoview_table_add_row("GPS precision", "%f(hdop) %dm(h) %dm(v)\n",
+ aoview_table_add_row(1, "GPS precision", "%f(hdop) %dm(h) %dm(v)\n",
state->data.hdop, state->data.h_error, state->data.v_error);
- aoview_table_add_row("Distance from pad", "%5.0fm", state->distance);
- aoview_table_add_row("Direction from pad", "%4.0f°", state->bearing);
+ aoview_table_add_row(1, "Distance from pad", "%5.0fm", state->distance);
+ aoview_table_add_row(1, "Direction from pad", "%4.0f°", state->bearing);
} else {
- aoview_table_add_row("GPS", "unlocked");
+ aoview_table_add_row(1, "GPS", "unlocked");
}
if (state->npad) {
- aoview_state_add_deg("Pad latitude", state->pad_lat, 'N', 'S');
- aoview_state_add_deg("Pad longitude", state->pad_lon, 'E', 'W');
- aoview_table_add_row("Pad GPS alt", "%gm", state->pad_alt);
+ aoview_state_add_deg(1, "Pad latitude", state->pad_lat, 'N', 'S');
+ aoview_state_add_deg(1, "Pad longitude", state->pad_lon, 'E', 'W');
+ aoview_table_add_row(1, "Pad GPS alt", "%gm", state->pad_alt);
}
aoview_table_finish();
aoview_label_show(state);
diff --git a/aoview/aoview_table.c b/aoview/aoview_table.c
index b3fc6a47..93143009 100644
--- a/aoview/aoview_table.c
+++ b/aoview/aoview_table.c
@@ -17,17 +17,21 @@
#include "aoview.h"
-static GtkTreeView *dataview;
-static GtkListStore *datalist;
+#define NCOL 2
+
+static GtkTreeView *dataview[NCOL];
+static GtkListStore *datalist[NCOL];
void
aoview_table_start(void)
{
- datalist = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
+ int col;
+ for (col = 0; col < NCOL; col++)
+ datalist[col] = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING);
}
void
-aoview_table_add_row(char *label, char *format, ...)
+aoview_table_add_row(int col, char *label, char *format, ...)
{
char buf[1024];
va_list ap;
@@ -36,8 +40,8 @@ aoview_table_add_row(char *label, char *format, ...)
va_start(ap, format);
vsnprintf(buf, sizeof (buf), format, ap);
va_end(ap);
- gtk_list_store_append(datalist, &iter);
- gtk_list_store_set(datalist, &iter,
+ gtk_list_store_append(datalist[col], &iter);
+ gtk_list_store_set(datalist[col], &iter,
0, label,
1, buf,
-1);
@@ -46,23 +50,34 @@ aoview_table_add_row(char *label, char *format, ...)
void
aoview_table_finish(void)
{
- gtk_tree_view_set_model(dataview, GTK_TREE_MODEL(datalist));
- g_object_unref(G_OBJECT(datalist));
- gtk_tree_view_columns_autosize(dataview);
+ int col;
+ for (col = 0; col < NCOL; col++) {
+ gtk_tree_view_set_model(dataview[col], GTK_TREE_MODEL(datalist[col]));
+ g_object_unref(G_OBJECT(datalist[col]));
+ gtk_tree_view_columns_autosize(dataview[col]);
+ }
}
void
aoview_table_clear(void)
{
- gtk_tree_view_set_model(dataview, NULL);
+ int col;
+ for (col = 0; col < NCOL; col++)
+ gtk_tree_view_set_model(dataview[col], NULL);
}
void
aoview_table_init(GladeXML *xml)
{
- dataview = GTK_TREE_VIEW(glade_xml_get_widget(xml, "dataview"));
- assert(dataview);
+ int col;
+
+ for (col = 0; col < NCOL; col++) {
+ char name[32];
+ sprintf(name, "dataview_%d", col);
+ dataview[col] = GTK_TREE_VIEW(glade_xml_get_widget(xml, name));
+ assert(dataview[col]);
- aoview_add_plain_text_column(dataview, "Field", 0, 20);
- aoview_add_plain_text_column(dataview, "Value", 1, 32);
+ aoview_add_plain_text_column(dataview[col], "Field", 0, 20);
+ aoview_add_plain_text_column(dataview[col], "Value", 1, 32);
+ }
}
diff --git a/src/ao_gps.c b/src/ao_gps.c
index b6d7182d..562899cd 100644
--- a/src/ao_gps.c
+++ b/src/ao_gps.c
@@ -27,6 +27,11 @@ const char ao_gps_set_binary[] = {
'9', '6', '0', '0', ',', '8', ',', '1', ',', '0', '*',
'0', 'C', '\r','\n',
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
0xa0, 0xa2, 0x00, 0x09, /* length 9 bytes */
134, /* Set binary serial port */
0, 0, 0x25, 0x80, /* 9600 baud */