diff --git a/Transceiver52M/ms/ms.cpp b/Transceiver52M/ms/ms.cpp
index d191ed5..1dc2587 100644
--- a/Transceiver52M/ms/ms.cpp
+++ b/Transceiver52M/ms/ms.cpp
@@ -278,12 +278,13 @@
 {
 	auto fn = get_rx_burst_handler_fn(rx_bh());
 	rx_task = std::thread(fn);
-	set_name_aff_sched(rx_task.native_handle(), "rxrun", 2, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 2);
+	set_name_aff_sched(rx_task.native_handle(), sched_params::thread_names::RXRUN);
 
 	usleep(1000);
 	auto fn2 = get_tx_burst_handler_fn(tx_bh());
 	tx_task = std::thread(fn2);
-	set_name_aff_sched(tx_task.native_handle(), "txrun", 2, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 1);
+	set_name_aff_sched(tx_task.native_handle(), sched_params::thread_names::TXRUN);
+
 }
 
 void ms_trx::set_upper_ready(bool is_ready)
diff --git a/Transceiver52M/ms/ms.h b/Transceiver52M/ms/ms.h
index 8ea9932..dbf2e9a 100644
--- a/Transceiver52M/ms/ms.h
+++ b/Transceiver52M/ms/ms.h
@@ -200,6 +200,40 @@
 	}
 };
 
+static struct sched_params {
+	enum thread_names { U_CTL = 0, U_RX, U_TX, SCH_SEARCH, MAIN, LEAKCHECK, RXRUN, TXRUN, _THRD_NAME_COUNT };
+	enum target { ODROID = 0, PI4 };
+	const char *name;
+	int core;
+	int schedtype;
+	int prio;
+} schdp[][sched_params::_THRD_NAME_COUNT]{
+	{
+		{ "upper_ctrl", 2, SCHED_RR, sched_get_priority_max(SCHED_RR) },
+		{ "upper_rx", 2, SCHED_RR, sched_get_priority_max(SCHED_RR) - 5 },
+		{ "upper_tx", 2, SCHED_RR, sched_get_priority_max(SCHED_RR) - 1 },
+
+		{ "sch_search", 3, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 5 },
+		{ "main", 3, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 5 },
+		{ "leakcheck", 3, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 10 },
+
+		{ "rxrun", 4, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 2 },
+		{ "txrun", 5, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 1 },
+	},
+	{
+		{ "upper_ctrl", 1, SCHED_RR, sched_get_priority_max(SCHED_RR) },
+		{ "upper_rx", 1, SCHED_RR, sched_get_priority_max(SCHED_RR) - 5 },
+		{ "upper_tx", 1, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 1 },
+
+		{ "sch_search", 1, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 5 },
+		{ "main", 3, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 5 },
+		{ "leakcheck", 1, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 10 },
+
+		{ "rxrun", 2, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 2 },
+		{ "txrun", 3, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 1 },
+	},
+};
+
 using ts_hitter_q_t = spsc_cond<64, GSM::Time, true, false>;
 
 struct ms_trx : public BASET {
@@ -230,6 +264,8 @@
 	int64_t first_sch_ts_start = -1;
 
 	time_keeper timekeeper;
+	int hw_cpus;
+	sched_params::target hw_target;
 
 	void start();
 	std::atomic<bool> upper_is_ready;
@@ -250,8 +286,11 @@
 
 	ms_trx()
 		: timing_advance(0), do_auto_gain(false), rxqueue(), first_sch_buf(new blade_sample_type[SCH_LEN_SPS]),
-		  burst_copy_buffer(new blade_sample_type[ONE_TS_BURST_LEN]), rcv_done{ false }, sch_thread_done{ false }
+		  burst_copy_buffer(new blade_sample_type[ONE_TS_BURST_LEN]), rcv_done{ false },
+		  sch_thread_done{ false }, hw_cpus(std::thread::hardware_concurrency()),
+		  hw_target(hw_cpus > 4 ? sched_params::target::ODROID : sched_params::target::PI4)
 	{
+		std::cerr << "scheduling for: " << (hw_cpus > 4 ? "odroid" : "pi4") << std::endl;
 	}
 
 	virtual ~ms_trx()
@@ -269,11 +308,19 @@
 		timing_advance = val * 4;
 	}
 
-	void set_name_aff_sched(const char *name, int cpunum, int schedtype, int prio)
+	void set_name_aff_sched(sched_params::thread_names name)
 	{
-		set_name_aff_sched(pthread_self(), name, cpunum, schedtype, prio);
+		set_name_aff_sched(pthread_self(), name);
 	}
 
+	void set_name_aff_sched(std::thread::native_handle_type h, sched_params::thread_names name)
+	{
+		auto tgt = schdp[hw_target][name];
+		// std::cerr << "scheduling for: " << tgt.name << ":" << tgt.core << std::endl;
+		set_name_aff_sched(h, tgt.name, tgt.core, tgt.schedtype, tgt.prio);
+	}
+
+    private:
 	void set_name_aff_sched(std::thread::native_handle_type h, const char *name, int cpunum, int schedtype,
 				int prio)
 	{
@@ -284,16 +331,14 @@
 		CPU_ZERO(&cpuset);
 		CPU_SET(cpunum, &cpuset);
 
-		auto rv = pthread_setaffinity_np(h, sizeof(cpuset), &cpuset);
-		if (rv < 0) {
+		if (pthread_setaffinity_np(h, sizeof(cpuset), &cpuset) < 0) {
 			std::cerr << name << " affinity: errreur! " << std::strerror(errno);
 			return exit(0);
 		}
 
 		sched_param sch_params;
 		sch_params.sched_priority = prio;
-		rv = pthread_setschedparam(h, schedtype, &sch_params);
-		if (rv < 0) {
+		if (pthread_setschedparam(h, schedtype, &sch_params) < 0) {
 			std::cerr << name << " sched: errreur! " << std::strerror(errno);
 			return exit(0);
 		}
diff --git a/Transceiver52M/ms/ms_rx_lower.cpp b/Transceiver52M/ms/ms_rx_lower.cpp
index e39d72d..e8d8e0e 100644
--- a/Transceiver52M/ms/ms_rx_lower.cpp
+++ b/Transceiver52M/ms/ms_rx_lower.cpp
@@ -235,7 +235,7 @@
 		sch_pos = 0;
 		rcv_done = true;
 		std::thread([this] {
-			set_name_aff_sched("sch_search", 1, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 5);
+			set_name_aff_sched(sched_params::thread_names::SCH_SEARCH);
 
 			auto ptr = reinterpret_cast<const int16_t *>(first_sch_buf);
 			const auto target_val = rxFullScale / 8;
diff --git a/Transceiver52M/ms/ms_upper.cpp b/Transceiver52M/ms/ms_upper.cpp
index 63f5926..3cb27e3 100644
--- a/Transceiver52M/ms/ms_upper.cpp
+++ b/Transceiver52M/ms/ms_upper.cpp
@@ -97,14 +97,14 @@
 void upper_trx::start_threads()
 {
 	thr_control = std::thread([this] {
-		set_name_aff_sched("upper_ctrl", 1, SCHED_RR, sched_get_priority_max(SCHED_RR));
+		set_name_aff_sched(sched_params::thread_names::U_CTL);
 		while (!g_exit_flag) {
 			driveControl();
 		}
 	});
 	msleep(1);
 	thr_tx = std::thread([this] {
-		set_name_aff_sched("upper_tx", 1, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 1);
+		set_name_aff_sched(sched_params::thread_names::U_TX);
 		while (!g_exit_flag) {
 			driveTx();
 		}
@@ -113,7 +113,7 @@
 	// atomic ensures data is not written to q until loop reads
 	start_lower_ms();
 
-	set_name_aff_sched("upper_rx", 1, SCHED_FIFO, sched_get_priority_max(SCHED_RR) - 5);
+	set_name_aff_sched(sched_params::thread_names::U_RX);
 	while (!g_exit_flag) {
 		// set_upper_ready(true);
 		driveReceiveFIFO();
@@ -128,7 +128,7 @@
 
 #ifdef LSANDEBUG
 	std::thread([this] {
-		set_name_aff_sched("leakcheck", 1, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 10);
+		set_name_aff_sched(sched_params::thread_names::LEAKCHECK);
 
 		while (1) {
 			std::this_thread::sleep_for(std::chrono::seconds{ 5 });
@@ -485,7 +485,7 @@
 		std::cerr << "Error initializing hardware, quitting.." << std::endl;
 		return -1;
 	}
-	trx->set_name_aff_sched("main", 3, SCHED_FIFO, sched_get_priority_max(SCHED_FIFO) - 5);
+	trx->set_name_aff_sched(sched_params::thread_names::MAIN);
 
 	if (!trxcon::trxc_l1ctl_init(tall_trxcon_ctx)) {
 		std::cerr << "Error initializing l1ctl, quitting.." << std::endl;
