#include "dbus-ifc.h"
#include "display.h"
#include "gps.h"
+#include "aprs.h"
#include "gpx.h"
#include "input.h"
#include "main.h"
vprintf("%s(): return\n", __PRETTY_FUNCTION__);
}
+// Called once per second
+gboolean timer_callback (gpointer data) {
+
+#ifdef INCLUDE_APRS
+ static int inet_beacon_count = 0;
+ static int inet_aprs_filter = 0;
+ static int tty_beacon_count = 0;
+
+ if(_aprs_enable)
+ {
+ // Check if we need to resent the filter every 5 minutes
+ // Note - this should really be dependent on speed and/or range
+ if(_aprs_inet_enable && inet_aprs_filter > (60*5))
+ {
+ // Currently this only needs to be sent on connection
+ //update_aprs_inet_options(FALSE);
+ inet_aprs_filter = 0;
+ }
+
+ if(_aprs_inet_enable && _aprs_enable_inet_tx && _aprs_inet_beacon_interval > 0 && _aprs_inet_state == RCVR_UP)
+ {
+
+
+ if(inet_beacon_count >= _aprs_inet_beacon_interval)
+ {
+ // Send inet APRS beacon
+ aprs_send_beacon(APRS_PORT_INET);
+ //g_idle_add((GSourceFunc)aprs_send_beacon, APRS_PORT_INET);
+ //fprintf(stderr, "timer %u, %u\n", inet_beacon_count, _aprs_inet_beacon_interval);
+ inet_beacon_count = 0;
+ }
+
+ }
+
+ if(_aprs_tty_enable && _aprs_enable_tty_tx )
+ {
+ // Send tty APRS beacon
+
+ if(tty_beacon_count >= _aprs_tty_beacon_interval && _aprs_tty_beacon_interval > 0)
+ {
+ // Send inet APRS beacon
+ aprs_send_beacon(APRS_PORT_TTY);
+
+ //g_idle_add((GSourceFunc)aprs_send_beacon_inet, NULL);
+
+ tty_beacon_count = 0;
+ }
+
+ }
+
+
+ inet_aprs_filter++;
+ inet_beacon_count++;
+ tty_beacon_count++;
+ }
+#endif //INCLUDE_APRS
+
+ return TRUE; // Continue timer
+}
+
+// Start a one second timer - this can be used to execute any periodic tasks
+void timer_init()
+{
+ g_timeout_add(1000 , timer_callback, NULL);
+}
+
/**
* Initialize everything required in preparation for calling gtk_main().
*/
= _("Reset Bluetooth");
CUSTOM_ACTION_ENUM_TEXT[CUSTOM_ACTION_TOGGLE_LAYERS] = _("Toggle Layers");
- DEG_FORMAT_ENUM_TEXT[DDPDDDDD] = "-dd.ddddd°";
- DEG_FORMAT_ENUM_TEXT[DD_MMPMMM] = "-dd°mm.mmm'";
- DEG_FORMAT_ENUM_TEXT[DD_MM_SSPS] = "-dd°mm'ss.s\"";
- DEG_FORMAT_ENUM_TEXT[DDPDDDDD_NSEW] = "dd.ddddd° S";
- DEG_FORMAT_ENUM_TEXT[DD_MMPMMM_NSEW] = "dd°mm.mmm' S";
- DEG_FORMAT_ENUM_TEXT[DD_MM_SSPS_NSEW] = "dd°mm'ss.s\" S";
- DEG_FORMAT_ENUM_TEXT[NSEW_DDPDDDDD] = "S dd.ddddd°";
- DEG_FORMAT_ENUM_TEXT[NSEW_DD_MMPMMM] = "S dd° mm.mmm'";
- DEG_FORMAT_ENUM_TEXT[NSEW_DD_MM_SSPS] = "S dd° mm' ss.s\"";
-
+ DEG_FORMAT_ENUM_TEXT[DDPDDDDD].name = "-dd.ddddd°";
+ DEG_FORMAT_ENUM_TEXT[DDPDDDDD].short_field_1 = "Lat";
+ DEG_FORMAT_ENUM_TEXT[DDPDDDDD].long_field_1 = "Latitude";
+ DEG_FORMAT_ENUM_TEXT[DDPDDDDD].short_field_2 = "Lon";
+ DEG_FORMAT_ENUM_TEXT[DDPDDDDD].long_field_2 = "Longitude";
+ DEG_FORMAT_ENUM_TEXT[DDPDDDDD].field_2_in_use = TRUE;
+
+ DEG_FORMAT_ENUM_TEXT[DD_MMPMMM].name = "-dd°mm.mmm'";
+ DEG_FORMAT_ENUM_TEXT[DD_MMPMMM].short_field_1 = "Lat";
+ DEG_FORMAT_ENUM_TEXT[DD_MMPMMM].long_field_1 = "Latitude";
+ DEG_FORMAT_ENUM_TEXT[DD_MMPMMM].short_field_2 = "Lon";
+ DEG_FORMAT_ENUM_TEXT[DD_MMPMMM].long_field_2 = "Longitude";
+ DEG_FORMAT_ENUM_TEXT[DD_MMPMMM].field_2_in_use = TRUE;
+
+ DEG_FORMAT_ENUM_TEXT[DD_MM_SSPS].name = "-dd°mm'ss.s\"";
+ DEG_FORMAT_ENUM_TEXT[DD_MM_SSPS].short_field_1 = "Lat";
+ DEG_FORMAT_ENUM_TEXT[DD_MM_SSPS].long_field_1 = "Latitude";
+ DEG_FORMAT_ENUM_TEXT[DD_MM_SSPS].short_field_2 = "Lon";
+ DEG_FORMAT_ENUM_TEXT[DD_MM_SSPS].long_field_2 = "Longitude";
+ DEG_FORMAT_ENUM_TEXT[DD_MM_SSPS].field_2_in_use = TRUE;
+
+ DEG_FORMAT_ENUM_TEXT[DDPDDDDD_NSEW].name = "dd.ddddd° S";
+ DEG_FORMAT_ENUM_TEXT[DDPDDDDD_NSEW].short_field_1 = "Lat";
+ DEG_FORMAT_ENUM_TEXT[DDPDDDDD_NSEW].long_field_1 = "Latitude";
+ DEG_FORMAT_ENUM_TEXT[DDPDDDDD_NSEW].short_field_2 = "Lon";
+ DEG_FORMAT_ENUM_TEXT[DDPDDDDD_NSEW].long_field_2 = "Longitude";
+ DEG_FORMAT_ENUM_TEXT[DDPDDDDD_NSEW].field_2_in_use = TRUE;
+
+ DEG_FORMAT_ENUM_TEXT[DD_MMPMMM_NSEW].name = "dd°mm.mmm' S";
+ DEG_FORMAT_ENUM_TEXT[DD_MMPMMM_NSEW].short_field_1 = "Lat";
+ DEG_FORMAT_ENUM_TEXT[DD_MMPMMM_NSEW].long_field_1 = "Latitude";
+ DEG_FORMAT_ENUM_TEXT[DD_MMPMMM_NSEW].short_field_2 = "Lon";
+ DEG_FORMAT_ENUM_TEXT[DD_MMPMMM_NSEW].long_field_2 = "Longitude";
+ DEG_FORMAT_ENUM_TEXT[DD_MMPMMM_NSEW].field_2_in_use = TRUE;
+
+ DEG_FORMAT_ENUM_TEXT[DD_MM_SSPS_NSEW].name = "dd°mm'ss.s\" S";
+ DEG_FORMAT_ENUM_TEXT[DD_MM_SSPS_NSEW].short_field_1 = "Lat";
+ DEG_FORMAT_ENUM_TEXT[DD_MM_SSPS_NSEW].long_field_1 = "Latitude";
+ DEG_FORMAT_ENUM_TEXT[DD_MM_SSPS_NSEW].short_field_2 = "Lon";
+ DEG_FORMAT_ENUM_TEXT[DD_MM_SSPS_NSEW].long_field_2 = "Longitude";
+ DEG_FORMAT_ENUM_TEXT[DD_MM_SSPS_NSEW].field_2_in_use = TRUE;
+
+ DEG_FORMAT_ENUM_TEXT[NSEW_DDPDDDDD].name = "S dd.ddddd°";
+ DEG_FORMAT_ENUM_TEXT[NSEW_DDPDDDDD].short_field_1 = "Lat";
+ DEG_FORMAT_ENUM_TEXT[NSEW_DDPDDDDD].long_field_1 = "Latitude";
+ DEG_FORMAT_ENUM_TEXT[NSEW_DDPDDDDD].short_field_2 = "Lon";
+ DEG_FORMAT_ENUM_TEXT[NSEW_DDPDDDDD].long_field_2 = "Longitude";
+ DEG_FORMAT_ENUM_TEXT[NSEW_DDPDDDDD].field_2_in_use = TRUE;
+
+ DEG_FORMAT_ENUM_TEXT[NSEW_DD_MMPMMM].name = "S dd° mm.mmm'";
+ DEG_FORMAT_ENUM_TEXT[NSEW_DD_MMPMMM].short_field_1 = "Lat";
+ DEG_FORMAT_ENUM_TEXT[NSEW_DD_MMPMMM].long_field_1 = "Latitude";
+ DEG_FORMAT_ENUM_TEXT[NSEW_DD_MMPMMM].short_field_2 = "Lon";
+ DEG_FORMAT_ENUM_TEXT[NSEW_DD_MMPMMM].long_field_2 = "Longitude";
+ DEG_FORMAT_ENUM_TEXT[NSEW_DD_MMPMMM].field_2_in_use = TRUE;
+
+ DEG_FORMAT_ENUM_TEXT[NSEW_DD_MM_SSPS].name = "S dd° mm' ss.s\"";
+ DEG_FORMAT_ENUM_TEXT[NSEW_DD_MM_SSPS].short_field_1 = "Lat";
+ DEG_FORMAT_ENUM_TEXT[NSEW_DD_MM_SSPS].long_field_1 = "Latitude";
+ DEG_FORMAT_ENUM_TEXT[NSEW_DD_MM_SSPS].short_field_2 = "Lon";
+ DEG_FORMAT_ENUM_TEXT[NSEW_DD_MM_SSPS].long_field_2 = "Longitude";
+ DEG_FORMAT_ENUM_TEXT[NSEW_DD_MM_SSPS].field_2_in_use = TRUE;
+
+ // Used by Radio Amateurs
+ DEG_FORMAT_ENUM_TEXT[IARU_LOC].name = "IARU Locator";
+ DEG_FORMAT_ENUM_TEXT[IARU_LOC].short_field_1 = "Locator";
+ DEG_FORMAT_ENUM_TEXT[IARU_LOC].long_field_1 = "Lacator";
+ DEG_FORMAT_ENUM_TEXT[IARU_LOC].short_field_2 = "";
+ DEG_FORMAT_ENUM_TEXT[IARU_LOC].long_field_2 = "";
+ DEG_FORMAT_ENUM_TEXT[IARU_LOC].field_2_in_use = FALSE;
+
+
+ DEG_FORMAT_ENUM_TEXT[UK_OSGB].name = "OSGB X,Y Grid";
+ DEG_FORMAT_ENUM_TEXT[UK_OSGB].short_field_1 = "X";
+ DEG_FORMAT_ENUM_TEXT[UK_OSGB].long_field_1 = "OS X";
+ DEG_FORMAT_ENUM_TEXT[UK_OSGB].short_field_2 = "Y";
+ DEG_FORMAT_ENUM_TEXT[UK_OSGB].long_field_2 = "OS Y";
+ DEG_FORMAT_ENUM_TEXT[UK_OSGB].field_2_in_use = TRUE;
+
+ DEG_FORMAT_ENUM_TEXT[UK_NGR].name = "OSGB Landranger Grid";
+ DEG_FORMAT_ENUM_TEXT[UK_NGR].short_field_1 = "GR";
+ DEG_FORMAT_ENUM_TEXT[UK_NGR].long_field_1 = "OS Grid";
+ DEG_FORMAT_ENUM_TEXT[UK_NGR].short_field_2 = "";
+ DEG_FORMAT_ENUM_TEXT[UK_NGR].long_field_2 = "";
+ DEG_FORMAT_ENUM_TEXT[UK_NGR].field_2_in_use = FALSE;
+
SPEED_LOCATION_ENUM_TEXT[SPEED_LOCATION_TOP_LEFT] = _("Top-Left");
SPEED_LOCATION_ENUM_TEXT[SPEED_LOCATION_TOP_RIGHT] = _("Top-Right");
SPEED_LOCATION_ENUM_TEXT[SPEED_LOCATION_BOTTOM_RIGHT] = _("Bottom-Right");
poi_db_connect();
display_init();
dbus_ifc_init();
-
+
+#ifdef INCLUDE_APRS
+ aprs_init();
+ timer_init();
+#endif //INCLUDE_APRS
+
/* If present, attempt to load the file specified on the command line. */
if(argc > 1)
{