diff --git a/rust/daemon/src/wireless/uwb.rs b/rust/daemon/src/wireless/uwb.rs
index 4fceb11..426dbb7 100644
--- a/rust/daemon/src/wireless/uwb.rs
+++ b/rust/daemon/src/wireless/uwb.rs
@@ -25,7 +25,7 @@
 use crate::uwb::ranging_estimator::{SharedState, UwbRangingEstimator};
 use crate::wireless::packet::handle_response;
 
-use std::sync::atomic::{AtomicBool, Ordering};
+use std::sync::atomic::{AtomicBool, AtomicI32, Ordering};
 use std::sync::{Arc, Mutex};
 use std::thread;
 
@@ -52,8 +52,8 @@
     pica_id: Handle,
     uci_stream_writer: UnboundedSender<Vec<u8>>,
     state: AtomicBool,
-    tx_count: i32,
-    rx_count: i32, // TODO(b/330788870): Increment rx_count after handle_response
+    tx_count: AtomicI32,
+    rx_count: Arc<AtomicI32>,
 }
 
 impl Drop for Uwb {
@@ -68,21 +68,21 @@
         self.uci_stream_writer
             .unbounded_send(packet.clone().into())
             .expect("UciStream Receiver Disconnected");
+        let _ = self.tx_count.fetch_add(1, Ordering::SeqCst);
     }
 
     fn reset(&self) {
         self.state.store(true, Ordering::SeqCst);
-        // TODO: Reset packet counts
-        // self.tx_count = 0;
-        // self.rx_count = 0;
+        self.tx_count.store(0, Ordering::SeqCst);
+        self.rx_count.store(0, Ordering::SeqCst);
     }
 
     fn get(&self) -> ProtoChip {
         let mut chip_proto = ProtoChip::new();
         let uwb_proto = ProtoRadio {
             state: self.state.load(Ordering::SeqCst).into(),
-            tx_count: self.tx_count,
-            rx_count: self.rx_count,
+            tx_count: self.tx_count.load(Ordering::SeqCst),
+            rx_count: self.rx_count.load(Ordering::SeqCst),
             ..Default::default()
         };
         chip_proto.mut_uwb().clone_from(&uwb_proto);
@@ -130,12 +130,14 @@
         .add_device(Box::pin(uci_stream_receiver), Box::pin(uci_sink_sender.sink_err_into()))
         .unwrap();
     PICA_HANDLE_TO_STATE.insert(pica_id, chip_id);
+
+    let rx_count = Arc::new(AtomicI32::new(0));
     let uwb = Uwb {
         pica_id,
         uci_stream_writer: uci_stream_sender,
         state: AtomicBool::new(true),
-        tx_count: 0,
-        rx_count: 0,
+        tx_count: AtomicI32::new(0),
+        rx_count: rx_count.clone(),
     };
 
     // Spawn a future for obtaining packet from pica and invoking handle_response_rust
@@ -143,6 +145,7 @@
         let mut uci_sink_receiver = uci_sink_receiver;
         while let Some(packet) = uci_sink_receiver.next().await {
             handle_response(chip_id, &Bytes::from(packet));
+            rx_count.fetch_add(1, Ordering::SeqCst);
         }
     });
     Box::new(uwb)
