diff --git a/src/main.rs b/src/main.rs
index 475c06572de0014e9ee1152c7516cd09f40699ec..340954664ac722d3a3f67b78c560a43103c12890 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -23,6 +23,7 @@ mod app {
     use ringbuffer::{ConstGenericRingBuffer, RingBuffer, RingBufferRead, RingBufferWrite};
 
     use crate::packet::Packet;
+    use crate::packet::PACKET_LEN;
 
     // in # packets
     const BUFFER_LEN: usize = 50;
@@ -139,14 +140,28 @@ mod app {
     #[idle(local=[radio], shared=[tx_buf, radio_temp])]
     fn idle(mut ctx: idle::Context) -> ! {
         let mut i = 0;
+        let mut iterations_since_last_packet = 0;
         loop {
             if let Some(mut pkt) = ctx.shared.tx_buf.lock(|buf| buf.dequeue()) {
+                if iterations_since_last_packet >= 1000 {
+                    // if we haven't transmitted in a while, the receiver's AGC is going to be messed up
+                    // send 5 packets just so it can calibrate before we actually send it
+                    for _ in 0..5 {
+                        const GARBAGE: [u8; PACKET_LEN] = [0x00; PACKET_LEN];
+                        ctx.local.radio.tx(&mut GARBAGE.clone()).unwrap();
+                    }
+                }
+
                 ctx.local.radio.tx(&mut pkt.data).unwrap();
+
+                iterations_since_last_packet = 0;
+            } else {
+                iterations_since_last_packet += 1;
             }
 
             i += 1;
 
-            // get temp every 500 packets, or whenever when idle TODO
+            // get temp every 500 packets, or whenever when idle
             if i >= 500 {
                 i = 0;