}
public static void set_active_device(DeviceAddress address) {
+ if (backend == null)
+ return;
synchronized(backend) {
active_device_address = address;
if (active_device_address != null) {
}
public static DeviceAddress active_device() {
+ if (backend == null)
+ return null;
+
synchronized(backend) {
return active_device_address;
}
static LinkedList<AltosDroidMapSourceListener> map_source_listeners;
public static void set_map_source(int map_source) {
+ if (backend == null)
+ return;
synchronized(backend) {
AltosDroidPreferences.map_source = map_source;
backend.putInt(mapSourcePreference, map_source);
}
public static int map_source() {
+ if (backend == null)
+ return MAP_SOURCE_ONLINE;
synchronized(backend) {
return map_source;
}
}
public static void register_map_source_listener(AltosDroidMapSourceListener l) {
+ if (backend == null)
+ return;
+
synchronized(backend) {
if (map_source_listeners == null)
map_source_listeners = new LinkedList<AltosDroidMapSourceListener>();
}
public static void unregister_map_source_listener(AltosDroidMapSourceListener l) {
+ if (backend == null)
+ return;
synchronized(backend) {
map_source_listeners.remove(l);
}
}
public static int font_size() {
+ if (backend == null)
+ return font_size_medium;
+
synchronized (backend) {
return font_size;
}
}
public static void set_font_size(int new_font_size) {
+ if (backend == null)
+ return;
synchronized (backend) {
if (font_size != new_font_size) {
font_size = new_font_size;
public static int tracker_sort() {
+ if (backend == null)
+ return 0;
+
synchronized(backend) {
return tracker_sort;
}
}
public static void set_tracker_sort(int new_tracker_sort) {
+ if (backend == null)
+ return;
+
synchronized(backend) {
if (tracker_sort != new_tracker_sort) {
tracker_sort = new_tracker_sort;
}
private RocketOnline[] sorted_rockets() {
- RocketOnline[] rocket_array = rockets.values().toArray(new RocketOnline[0]);
+ synchronized(rockets) {
+ RocketOnline[] rocket_array = rockets.values().toArray(new RocketOnline[0]);
- Arrays.sort(rocket_array);
- return rocket_array;
+ Arrays.sort(rocket_array);
+ return rocket_array;
+ }
}
public void onMapClick(LatLng lat_lng) {
if (mMap == null)
return;
- if (rockets.containsKey(serial)) {
- rocket = rockets.get(serial);
- rocket.set_position(new AltosLatLon(state.gps.lat, state.gps.lon), state.received_time);
- } else {
- rocket = new RocketOnline(context,
- serial,
- mMap, state.gps.lat, state.gps.lon,
- state.received_time);
- rockets.put(serial, rocket);
+ synchronized(rockets) {
+ if (rockets.containsKey(serial)) {
+ rocket = rockets.get(serial);
+ rocket.set_position(new AltosLatLon(state.gps.lat, state.gps.lon), state.received_time);
+ } else {
+ rocket = new RocketOnline(context,
+ serial,
+ mMap, state.gps.lat, state.gps.lon,
+ state.received_time);
+ rockets.put(serial, rocket);
+ }
}
}
private void remove_rocket(int serial) {
- RocketOnline rocket = rockets.get(serial);
- rocket.remove();
- rockets.remove(serial);
+ synchronized(rockets) {
+ RocketOnline rocket = rockets.get(serial);
+ rocket.remove();
+ rockets.remove(serial);
+ }
}
public void set_visible(boolean visible) {
public void show(TelemetryState telem_state, AltosState state, AltosGreatCircle from_receiver, Location receiver) {
if (telem_state != null) {
- for (int serial : rockets.keySet()) {
- if (!telem_state.containsKey(serial))
- remove_rocket(serial);
- }
+ synchronized(rockets) {
+ for (int serial : rockets.keySet()) {
+ if (!telem_state.containsKey(serial))
+ remove_rocket(serial);
+ }
- for (int serial : telem_state.keySet()) {
- set_rocket(serial, telem_state.get(serial));
+ for (int serial : telem_state.keySet()) {
+ set_rocket(serial, telem_state.get(serial));
+ }
}
}
}
int read(byte[] buffer, int len) {
+ if (connection == null)
+ return 0;
int ret = connection.bulkTransfer(in, buffer, len, -1);
AltosDebug.debug("read(%d) = %d\n", len, ret);
return ret;
}
int write(byte[] buffer, int len) {
+ if (connection == null)
+ return 0;
int ret = connection.bulkTransfer(out, buffer, len, -1);
AltosDebug.debug("write(%d) = %d\n", len, ret);
return ret;
// The on-click listener for all devices in the ListViews
private OnItemClickListener mDeviceClickListener = new OnItemClickListener() {
public void onItemClick(AdapterView<?> av, View v, int arg2, long arg3) {
+ // Get the device MAC address, which is the last 17 chars in the View
+ String info = ((TextView) v).getText().toString();
+
+ /* Ignore clicks on items that are too short */
+ if (info.length() <= 17)
+ return;
+
// Cancel discovery because it's costly and we're about to connect
mBtAdapter.cancelDiscovery();
- // Get the device MAC address, which is the last 17 chars in the View
- String info = ((TextView) v).getText().toString();
String address = info.substring(info.length() - 17);
int newline = info.indexOf('\n');
}
private void start_altos_bluetooth(DeviceAddress address, boolean pause) {
- if (bluetooth_adapter == null || !bluetooth_adapter.isEnabled())
+ if (bluetooth_adapter == null || !bluetooth_adapter.isEnabled() || address.address == null)
return;
disconnect(false);
}
public boolean has_monitor_battery() {
+ if (product == null)
+ return false;
if (product.startsWith("TeleBT"))
return true;
return false;
dnl Process this file with autoconf to create configure.
AC_PREREQ(2.57)
-AC_INIT([altos], 1.9.7)
-ANDROID_VERSION=27
+AC_INIT([altos], 1.9.6.5)
+ANDROID_VERSION=28
AC_CONFIG_SRCDIR([src/kernel/ao.h])
AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE
-RELEASE_DATE=2021-04-12
+RELEASE_DATE=2021-05-30
AC_SUBST(RELEASE_DATE)
DOC_DATE=`LC_ALL=C date -d $RELEASE_DATE +'%d %b %Y'`
memory. For example, the default 435.750 MHz would be
configured using
- c F 435750
+ c F 435750 +
c w
Note that the 'f' parameter is a frequency calibration value