srs_{ue,enb}: change UHD stream args and buffer size as function of cell width for B2XX

Change-Id: I2de0526ee9bd2f7bb75c7d529b3f52d75117c5cc
diff --git a/src/osmo_gsm_tester/srs_enb.py b/src/osmo_gsm_tester/srs_enb.py
index 91881c0..15c1e0c 100644
--- a/src/osmo_gsm_tester/srs_enb.py
+++ b/src/osmo_gsm_tester/srs_enb.py
@@ -208,6 +208,25 @@
                         + ',id=enb,base_srate=' + str(base_srate)
             config.overlay(values, dict(enb=dict(rf_dev_args=rf_dev_args)))
 
+        # Set UHD frame size as a function of the cell bandwidth on B2XX
+        if self._conf.get('rf_dev_type') == 'UHD' and values['enb'].get('rf_dev_args', None) is not None:
+            if 'b200' in values['enb'].get('rf_dev_args'):
+                rf_dev_args = values['enb'].get('rf_dev_args', '')
+                rf_dev_args += ',' if rf_dev_args != '' and not rf_dev_args.endswith(',') else ''
+
+                if self._num_prb < 25:
+                    rf_dev_args += 'send_frame_size=512,recv_frame_size=512'
+                elif self._num_prb == 25:
+                    rf_dev_args += 'send_frame_size=1024,recv_frame_size=1024'
+                elif self._num_prb > 25:
+                    rf_dev_args += 'num_recv_frames=64,num_send_frames=64'
+
+                if self._num_prb > 50:
+                    # Reduce over the wire format to sc12
+                    rf_dev_args += ',otw_format=sc12'
+
+                config.overlay(values, dict(enb=dict(rf_dev_args=rf_dev_args)))
+
         self.config_file = self.run_dir.child(srsENB.CFGFILE)
         self.config_sib_file = self.run_dir.child(srsENB.CFGFILE_SIB)
         self.config_rr_file = self.run_dir.child(srsENB.CFGFILE_RR)
diff --git a/src/osmo_gsm_tester/srs_ue.py b/src/osmo_gsm_tester/srs_ue.py
index 398fea7..190fd86 100644
--- a/src/osmo_gsm_tester/srs_ue.py
+++ b/src/osmo_gsm_tester/srs_ue.py
@@ -236,6 +236,25 @@
                                                             + ',id=ue,base_srate='+ str(base_srate)
                                                 )))
 
+        # Set UHD frame size as a function of the cell bandwidth on B2XX
+        if self._conf.get('rf_dev_type') == 'UHD' and values['ue'].get('rf_dev_args', None) is not None:
+            if 'b200' in values['ue'].get('rf_dev_args'):
+                rf_dev_args = values['ue'].get('rf_dev_args', '')
+                rf_dev_args += ',' if rf_dev_args != '' and not rf_dev_args.endswith(',') else ''
+
+                if self.enb.num_prb() < 25:
+                    rf_dev_args += 'send_frame_size=512,recv_frame_size=512'
+                elif self.enb.num_prb() == 25:
+                    rf_dev_args += 'send_frame_size=1024,recv_frame_size=1024'
+                elif self.enb.num_prb() > 50:
+                    rf_dev_args += 'num_recv_frames=64,num_send_frames=64'
+
+                # For 15 and 20 MHz, further reduce over the wire format to sc12
+                if self.enb.num_prb() >= 75:
+                    rf_dev_args += ',otw_format=sc12'
+
+                config.overlay(values, dict(ue=dict(rf_dev_args=rf_dev_args)))
+
         self.dbg('SRSUE CONFIG:\n' + pprint.pformat(values))
 
         with open(self.config_file, 'w') as f: