/* HAS_BEEP */
public int beep;
+ /* HAS_RADIO_10MW */
+ public int radio_10mw;
+
+ public int report_feet;
+
/* Storage info replies */
public int storage_size;
public int storage_erase_unit;
case AltosLib.AO_LOG_FORMAT_FULL:
return 0x7fff - value;
case AltosLib.AO_LOG_FORMAT_TELEMEGA_OLD:
- case AltosLib.AO_LOG_FORMAT_TELEMETRUM:
case AltosLib.AO_LOG_FORMAT_TELEMEGA:
case AltosLib.AO_LOG_FORMAT_TELEMEGA_3:
- case AltosLib.AO_LOG_FORMAT_TELEMEGA_4:
return 4095 - value;
+ case AltosLib.AO_LOG_FORMAT_TELEMETRUM:
+ /*
+ * TeleMetrum v2 and later use the same log format, but
+ * have different accelerometers. This is the only place
+ * it matters in altoslib.
+ */
+ if (product.startsWith("TeleMetrum-v2"))
+ return 4095 - value;
+ /* fall through */
+ case AltosLib.AO_LOG_FORMAT_TELEMEGA_4:
+ case AltosLib.AO_LOG_FORMAT_TELEMEGA_5:
+ case AltosLib.AO_LOG_FORMAT_TELEMEGA_6:
case AltosLib.AO_LOG_FORMAT_EASYMEGA_2:
case AltosLib.AO_LOG_FORMAT_EASYMOTOR:
+ /* ADXL375 */
return -value;
default:
if (product.startsWith("EasyTimer-"))
}
public boolean has_monitor_battery() {
+ if (product == null)
+ return false;
if (product.startsWith("TeleBT"))
return true;
return false;
beep = AltosLib.MISSING;
+ radio_10mw = AltosLib.MISSING;
+
+ report_feet = AltosLib.MISSING;
+
tracker_motion = AltosLib.MISSING;
tracker_interval = AltosLib.MISSING;
/* Return + accel calibration relative to a specific pad orientation */
public int accel_cal_plus(int pad_orientation) {
adjust_accel_cal();
+ if (!accel_cal_adjusted)
+ return AltosLib.MISSING;
+
switch (pad_orientation) {
case AltosLib.AO_PAD_ORIENTATION_ANTENNA_UP:
case AltosLib.AO_PAD_ORIENTATION_WORDS_UPRIGHT:
/* Return - accel calibration relative to a specific pad orientation */
public int accel_cal_minus(int pad_orientation) {
adjust_accel_cal();
+ if (!accel_cal_adjusted)
+ return AltosLib.MISSING;
+
switch (pad_orientation) {
case AltosLib.AO_PAD_ORIENTATION_ANTENNA_UP:
case AltosLib.AO_PAD_ORIENTATION_WORDS_UPRIGHT:
*/
private void adjust_accel_cal() {
if (!accel_cal_adjusted &&
+ product != null &&
pad_orientation != AltosLib.MISSING &&
accel_cal_plus != AltosLib.MISSING &&
accel_cal_minus != AltosLib.MISSING)
/* HAS_BEEP */
try { beep = get_int(line, "Beeper setting:"); } catch (Exception e) {}
+ /* HAS_RADIO_10MW */
+ try { radio_10mw = get_int(line, "Radio 10mw limit:"); } catch (Exception e) {}
+
+ try { report_feet = get_int(line, "Report in feet:"); } catch (Exception e) {}
+
/* HAS_TRACKER */
try {
int[] values = get_values(line, "Tracker setting:");
}
}
} catch (Exception e) {}
-
- /* Fix accel cal as soon as all of the necessary values appear */
- adjust_accel_cal();
}
public AltosConfigData() {
return false;
if (product.startsWith("TeleMetrum-v3"))
return false;
+ if (product.startsWith("TeleMetrum-v4"))
+ return true;
if (product.startsWith("EasyMega"))
return false;
return true;
return true;
if (product.startsWith("TeleMetrum-v3"))
return true;
+ if (product.startsWith("TeleMetrum-v4"))
+ return true;
if (product.startsWith("TeleMega-v4"))
return true;
+ if (product.startsWith("TeleMega-v5"))
+ return true;
+ if (product.startsWith("TeleMega-v6"))
+ return true;
if (product.startsWith("EasyMotor-v2"))
return true;
+ if (product.startsWith("EasyMotor-v3"))
+ return true;
}
throw new AltosUnknownProduct(product);
}
return AltosAdxl375.X_AXIS;
if (product.startsWith("TeleMetrum-v3"))
return AltosAdxl375.X_AXIS;
+ if (product.startsWith("TeleMetrum-v4"))
+ return AltosAdxl375.X_AXIS;
if (product.startsWith("TeleMega-v4"))
return AltosAdxl375.X_AXIS;
+ if (product.startsWith("TeleMega-v5"))
+ return AltosAdxl375.X_AXIS;
+ if (product.startsWith("TeleMega-v6"))
+ return AltosAdxl375.X_AXIS;
if (product.startsWith("EasyMotor-v2"))
return AltosAdxl375.X_AXIS;
+ if (product.startsWith("EasyMotor-v3"))
+ return AltosAdxl375.X_AXIS;
}
throw new AltosUnknownProduct(product);
/* HAS_BEEP */
if (beep != AltosLib.MISSING)
beep = source.beep();
+
+ /* HAS_RADIO_10MW */
+ if (radio_10mw != AltosLib.MISSING)
+ radio_10mw = source.radio_10mw();
+
+ if (report_feet != AltosLib.MISSING)
+ report_feet = source.report_feet();
+
/* HAS_TRACKER */
if (tracker_motion != AltosLib.MISSING)
tracker_motion = source.tracker_motion();
dest.set_aprs_format(aprs_format);
dest.set_aprs_offset(aprs_offset);
dest.set_beep(beep);
+ dest.set_radio_10mw(radio_10mw);
+ dest.set_report_feet(report_feet);
dest.set_tracker_motion(tracker_motion);
dest.set_tracker_interval(tracker_interval);
}
int plus = accel_cal_plus(pad_orientation);
int minus = accel_cal_minus(pad_orientation);
if (plus != AltosLib.MISSING && minus != AltosLib.MISSING) {
+ if (plus < 0)
+ plus = 65536 + plus;
+ if (minus < 0)
+ minus = 65536 + minus;
if (accel_zero_along != AltosLib.MISSING &&
accel_zero_across != AltosLib.MISSING &&
accel_zero_through != AltosLib.MISSING)
if (beep != AltosLib.MISSING)
link.printf("c b %d\n", beep);
+ /* HAS_RADIO_10MW */
+ if (radio_10mw != AltosLib.MISSING)
+ link.printf("c p %d\n", radio_10mw);
+
+ /* HAS_RADIO_10MW */
+ if (report_feet != AltosLib.MISSING)
+ link.printf("c u %d\n", report_feet);
+
/* HAS_TRACKER */
if (tracker_motion != AltosLib.MISSING && tracker_interval != AltosLib.MISSING)
link.printf("c t %d %d\n", tracker_motion, tracker_interval);
read_link(link, "done");
break;
}
+ adjust_accel_cal();
}
}