summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/ao.h6
-rw-r--r--src/core/ao_monitor.c5
-rw-r--r--src/drivers/ao_cc1120.c4
-rw-r--r--src/product/ao_terraui.c2
4 files changed, 11 insertions, 6 deletions
diff --git a/src/core/ao.h b/src/core/ao.h
index 06daf48f..eb2d47cf 100644
--- a/src/core/ao.h
+++ b/src/core/ao.h
@@ -487,6 +487,12 @@ struct ao_telemetry_tiny_recv {
uint8_t status;
};
+/* Unfortunately, we've exposed the CC1111 rssi units as the 'usual' method
+ * for reporting RSSI. So, now we use these values everywhere
+ */
+#define AO_RSSI_FROM_RADIO(radio) ((int16_t) ((int8_t) (radio) >> 1) - 74)
+#define AO_RADIO_FROM_RSSI(rssi) (((int8_t) (rssi) + 74) << 1)
+
/*
* ao_radio_recv tacks on rssi and status bytes
*/
diff --git a/src/core/ao_monitor.c b/src/core/ao_monitor.c
index 51d61425..d492e32a 100644
--- a/src/core/ao_monitor.c
+++ b/src/core/ao_monitor.c
@@ -141,8 +141,7 @@ ao_monitor_put(void)
case AO_MONITORING_ORIG:
state = recv_orig.telemetry_orig.flight_state;
- /* Typical RSSI offset for 38.4kBaud at 433 MHz is 74 */
- rssi = (int16_t) (recv_orig.rssi >> 1) - 74;
+ rssi = (int16_t) AO_RSSI_FROM_RADIO(recv_orig.rssi);
ao_xmemcpy(callsign, recv_orig.telemetry_orig.callsign, AO_MAX_CALLSIGN);
if (state > ao_flight_invalid)
state = ao_flight_invalid;
@@ -240,7 +239,7 @@ ao_monitor_put(void)
putchar ('\n');
#if HAS_RSSI
if (recv_raw.packet[ao_monitoring + 1] & PKT_APPEND_STATUS_1_CRC_OK) {
- rssi = ((int16_t) recv_raw.packet[ao_monitoring] >> 1) - 74;
+ rssi = AO_RSSI_FROM_RADIO(recv_raw.packet[ao_monitoring]);
ao_rssi_set(rssi);
}
#endif
diff --git a/src/drivers/ao_cc1120.c b/src/drivers/ao_cc1120.c
index a36d922c..569df3b7 100644
--- a/src/drivers/ao_cc1120.c
+++ b/src/drivers/ao_cc1120.c
@@ -729,7 +729,7 @@ ao_radio_recv(__xdata void *d, uint8_t size)
/* Convert from 'real' rssi to cc1111-style values */
- rssi = (((int8_t) ao_radio_reg_read(CC1120_RSSI1)) + 74) * 2;
+ rssi = AO_RADIO_FROM_RSSI(ao_radio_reg_read(CC1120_RSSI1));
ao_radio_put();
@@ -998,7 +998,7 @@ ao_radio_test_recv()
printf ("CRC OK");
else
printf ("CRC BAD");
- printf (" RSSI %d", (int16_t) ((int8_t) bytes[32] >> 1) - 74);
+ printf (" RSSI %d", AO_RSSI_FROM_RADIO(bytes[32]));
for (b = 0; b < 32; b++)
printf (" %02x", bytes[b]);
printf ("\n");
diff --git a/src/product/ao_terraui.c b/src/product/ao_terraui.c
index 963c7be4..1866eb0c 100644
--- a/src/product/ao_terraui.c
+++ b/src/product/ao_terraui.c
@@ -594,7 +594,7 @@ ao_terramonitor(void)
continue;
if (!(ao_monitor_ring[monitor].all.status & PKT_APPEND_STATUS_1_CRC_OK))
continue;
- ao_tel_rssi = (ao_monitor_ring[monitor].all.rssi >> 1) - 74;
+ ao_tel_rssi = AO_RSSI_FROM_RADIO(ao_monitor_ring[monitor].all.rssi);
switch (ao_monitor_ring[monitor].all.telemetry.generic.type) {
case AO_TELEMETRY_SENSOR_TELEMETRUM:
case AO_TELEMETRY_SENSOR_TELEMINI: