*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altoslib_6;
+package org.altusmetrum.altoslib_14;
import java.io.*;
import java.util.*;
int[] idlers;
static final int idle_gps = 0;
- static final int idle_imu = 1;
- static final int idle_mag = 2;
- static final int idle_ms5607 = 3;
- static final int idle_mma655x = 4;
-
-
- static final int idle_sensor_tm = 10;
- static final int idle_sensor_metrum = 11;
- static final int idle_sensor_mega = 12;
- static final int idle_sensor_emini = 13;
- static final int idle_sensor_tmini = 14;
- static final int idle_sensor_tgps = 15;
-
- public void update_state(AltosState state, AltosLink link, AltosConfigData config_data) throws InterruptedException, TimeoutException {
+ static final int idle_imu_tm_v1_v2 = 1;
+ static final int idle_imu_tm_v3 = 2;
+ static final int idle_imu_tm_v4 = 3;
+ static final int idle_imu_em_v1 = 4;
+ static final int idle_imu_em_v2 = 5;
+ static final int idle_imu_et_v1 = 6;
+ static final int idle_mag = 7;
+ static final int idle_mma655x = 8;
+ static final int idle_ms5607 = 9;
+ static final int idle_adxl375 = 10;
+
+ static final int idle_sensor_tm = 100;
+ static final int idle_sensor_metrum = 101;
+ static final int idle_sensor_mega = 102;
+ static final int idle_sensor_emini1 = 103;
+ static final int idle_sensor_emini2 = 104;
+ static final int idle_sensor_tmini2 = 105;
+ static final int idle_sensor_tgps1 = 106;
+ static final int idle_sensor_tgps2 = 107;
+ static final int idle_sensor_tmini3 = 108;
+ static final int idle_sensor_easytimer1 = 109;
+
+ public void provide_data(AltosDataListener listener, AltosLink link) throws InterruptedException, TimeoutException, AltosUnknownProduct {
for (int idler : idlers) {
- AltosIdle idle = null;
switch (idler) {
case idle_gps:
- AltosGPS.update_state(state, link, config_data);
+ AltosGPS.provide_data(listener, link);
break;
- case idle_imu:
- AltosIMU.update_state(state, link, config_data);
+ case idle_imu_tm_v1_v2:
+ AltosIMU.provide_data(listener, link, AltosIMU.imu_type_telemega_v1_v2);
break;
- case idle_mag:
- AltosMag.update_state(state, link, config_data);
+ case idle_imu_tm_v3:
+ AltosIMU.provide_data(listener, link, AltosIMU.imu_type_telemega_v3);
break;
- case idle_ms5607:
- AltosMs5607.update_state(state, link, config_data);
+ case idle_imu_tm_v4:
+ AltosIMU.provide_data(listener, link, AltosIMU.imu_type_telemega_v4);
+ break;
+ case idle_imu_em_v1:
+ AltosIMU.provide_data(listener, link, AltosIMU.imu_type_easymega_v1);
+ break;
+ case idle_imu_em_v2:
+ AltosIMU.provide_data(listener, link, AltosIMU.imu_type_easymega_v2);
+ break;
+ case idle_imu_et_v1:
+ AltosIMU.provide_data(listener, link, AltosIMU.imu_type_easytimer_v1);
+ break;
+ case idle_mag:
+ AltosMag.provide_data(listener, link);
break;
case idle_mma655x:
- AltosMma655x.update_state(state, link, config_data);
+ AltosMma655x.provide_data(listener, link);
+ break;
+ case idle_adxl375:
+ AltosAdxl375.provide_data(listener, link);
+ break;
+ case idle_ms5607:
+ AltosMs5607.provide_data(listener, link);
break;
case idle_sensor_tm:
- AltosSensorTM.update_state(state, link, config_data);
+ AltosSensorTM.provide_data(listener, link);
break;
case idle_sensor_metrum:
- AltosSensorMetrum.update_state(state, link, config_data);
+ AltosSensorMetrum.provide_data(listener, link);
break;
case idle_sensor_mega:
- AltosSensorMega.update_state(state, link, config_data);
+ AltosSensorMega.provide_data(listener, link);
+ break;
+ case idle_sensor_emini1:
+ AltosSensorEMini.provide_data(listener, link, 1);
+ break;
+ case idle_sensor_emini2:
+ AltosSensorEMini.provide_data(listener, link, 2);
+ break;
+ case idle_sensor_tmini2:
+ AltosSensorTMini2.provide_data(listener, link);
+ break;
+ case idle_sensor_tgps1:
+ AltosSensorTGPS1.provide_data(listener, link);
break;
- case idle_sensor_emini:
- AltosSensorEMini.update_state(state, link, config_data);
+ case idle_sensor_tgps2:
+ AltosSensorTGPS2.provide_data(listener, link);
break;
- case idle_sensor_tmini:
- AltosSensorTMini.update_state(state, link, config_data);
+ case idle_sensor_tmini3:
+ AltosSensorTMini3.provide_data(listener, link);
break;
- case idle_sensor_tgps:
- AltosSensorTGPS.update_state(state, link, config_data);
+ case idle_sensor_easytimer1:
+ AltosSensorEasyTimer1.provide_data(listener, link);
break;
}
- if (idle != null)
- idle.update_state(state);
}
}
}
-public class AltosIdleFetch implements AltosStateUpdate {
+public class AltosIdleFetch implements AltosDataProvider {
static final AltosIdler[] idlers = {
- new AltosIdler("EasyMini",
+ new AltosIdler("EasyMini-v1",
AltosIdler.idle_ms5607,
- AltosIdler.idle_sensor_emini),
+ AltosIdler.idle_sensor_emini1),
+
+ new AltosIdler("EasyMini-v2",
+ AltosIdler.idle_ms5607,
+ AltosIdler.idle_sensor_emini2),
new AltosIdler("TeleMini-v1",
AltosIdler.idle_sensor_tm),
new AltosIdler("TeleMini-v2",
AltosIdler.idle_ms5607,
- AltosIdler.idle_sensor_tmini),
+ AltosIdler.idle_sensor_tmini2),
+
+ new AltosIdler("TeleMini-v3",
+ AltosIdler.idle_ms5607,
+ AltosIdler.idle_sensor_tmini3),
new AltosIdler("TeleMetrum-v1",
AltosIdler.idle_gps,
new AltosIdler("TeleMetrum-v2",
AltosIdler.idle_gps,
- AltosIdler.idle_ms5607, AltosIdler.idle_mma655x,
+ AltosIdler.idle_mma655x,
+ AltosIdler.idle_ms5607,
+ AltosIdler.idle_sensor_metrum),
+
+ new AltosIdler("TeleMetrum-v3",
+ AltosIdler.idle_gps,
+ AltosIdler.idle_adxl375,
+ AltosIdler.idle_ms5607,
AltosIdler.idle_sensor_metrum),
- new AltosIdler("TeleMega",
+ new AltosIdler("TeleMega-v0",
+ AltosIdler.idle_gps,
+ AltosIdler.idle_mma655x,
+ AltosIdler.idle_ms5607,
+ AltosIdler.idle_imu_tm_v1_v2, AltosIdler.idle_mag,
+ AltosIdler.idle_sensor_mega),
+ new AltosIdler("TeleMega-v1",
+ AltosIdler.idle_gps,
+ AltosIdler.idle_mma655x,
+ AltosIdler.idle_ms5607,
+ AltosIdler.idle_imu_tm_v1_v2, AltosIdler.idle_mag,
+ AltosIdler.idle_sensor_mega),
+ new AltosIdler("TeleMega-v2",
+ AltosIdler.idle_gps,
+ AltosIdler.idle_mma655x,
+ AltosIdler.idle_ms5607,
+ AltosIdler.idle_imu_tm_v1_v2, AltosIdler.idle_mag,
+ AltosIdler.idle_sensor_mega),
+ new AltosIdler("TeleMega-v3",
AltosIdler.idle_gps,
- AltosIdler.idle_ms5607, AltosIdler.idle_mma655x,
- AltosIdler.idle_imu, AltosIdler.idle_mag,
+ AltosIdler.idle_mma655x,
+ AltosIdler.idle_ms5607,
+ AltosIdler.idle_imu_tm_v3,
AltosIdler.idle_sensor_mega),
- new AltosIdler("EasyMega",
- AltosIdler.idle_ms5607, AltosIdler.idle_mma655x,
- AltosIdler.idle_imu, AltosIdler.idle_mag,
+ new AltosIdler("TeleMega-v4",
+ AltosIdler.idle_gps,
+ AltosIdler.idle_adxl375,
+ AltosIdler.idle_ms5607,
+ AltosIdler.idle_imu_tm_v4,
AltosIdler.idle_sensor_mega),
- new AltosIdler("TeleGPS",
+ new AltosIdler("EasyMega-v1",
+ AltosIdler.idle_mma655x,
+ AltosIdler.idle_ms5607,
+ AltosIdler.idle_imu_em_v1, AltosIdler.idle_mag,
+ AltosIdler.idle_sensor_mega),
+ new AltosIdler("EasyMega-v2",
+ AltosIdler.idle_adxl375,
+ AltosIdler.idle_ms5607,
+ AltosIdler.idle_imu_em_v2,
+ AltosIdler.idle_sensor_mega),
+ new AltosIdler("TeleGPS-v1",
AltosIdler.idle_gps,
- AltosIdler.idle_sensor_tgps),
+ AltosIdler.idle_sensor_tgps1),
+ new AltosIdler("TeleGPS-v2",
+ AltosIdler.idle_gps,
+ AltosIdler.idle_sensor_tgps2),
+ new AltosIdler("EasyTimer-v1",
+ AltosIdler.idle_imu_et_v1,
+ AltosIdler.idle_sensor_easytimer1),
};
AltosLink link;
- double frequency;
- String callsign;
-
- public void update_state(AltosState state) throws InterruptedException {
+ public void provide_data(AltosDataListener listener) throws InterruptedException, AltosUnknownProduct {
try {
+ boolean matched = false;
/* Fetch config data from remote */
- AltosConfigData config_data = new AltosConfigData(link);
- state.set_state(AltosLib.ao_flight_stateless);
- state.set_serial(config_data.serial);
- state.set_callsign(config_data.callsign);
- state.set_ground_accel(config_data.accel_cal_plus);
- state.set_accel_g(config_data.accel_cal_plus, config_data.accel_cal_minus);
+ AltosConfigData config_data = link.config_data();
+ listener.set_state(AltosLib.ao_flight_stateless);
for (AltosIdler idler : idlers) {
if (idler.matches(config_data)) {
- idler.update_state(state, link, config_data);
+ idler.provide_data(listener, link);
+ matched = true;
break;
}
}
- state.set_received_time(System.currentTimeMillis());
+ if (!matched)
+ throw new AltosUnknownProduct(config_data.product);
+ listener.set_received_time(System.currentTimeMillis());
} catch (TimeoutException te) {
}