Transceiver: Clean up code passing parameters to threads
TransceiverChannel naming was misleading there. It's simply a data type
used to pass 2 parameters through the void* of the thread entry
function, so let's clearly specify is a storage for thread params.
Furthermore, we don't need a full C++ class for that, let's simply use a
struct.
Change-Id: I6e3898a8a66520cc5b2a7df9b9ae01b0b272387f
diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp
index a47f7db..b12a498 100644
--- a/Transceiver52M/Transceiver.cpp
+++ b/Transceiver52M/Transceiver.cpp
@@ -240,10 +240,12 @@
/* Start control threads */
for (size_t i = 0; i < mChans; i++) {
- TransceiverChannel *chan = new TransceiverChannel(this, i);
+ TrxChanThParams *params = (TrxChanThParams *)malloc(sizeof(struct TrxChanThParams));
+ params->trx = this;
+ params->num = i;
mControlServiceLoopThreads[i] = new Thread(stackSize);
mControlServiceLoopThreads[i]->start((void * (*)(void*))
- ControlServiceLoopAdapter, (void*) chan);
+ ControlServiceLoopAdapter, (void*) params);
if (i && filler == FILLER_DUMMY)
filler = FILLER_ZERO;
@@ -292,15 +294,19 @@
/* Launch uplink and downlink burst processing threads */
for (size_t i = 0; i < mChans; i++) {
- TransceiverChannel *chan = new TransceiverChannel(this, i);
+ TrxChanThParams *params = (TrxChanThParams *)malloc(sizeof(struct TrxChanThParams));
+ params->trx = this;
+ params->num = i;
mRxServiceLoopThreads[i] = new Thread(stackSize);
mRxServiceLoopThreads[i]->start((void * (*)(void*))
- RxUpperLoopAdapter, (void*) chan);
+ RxUpperLoopAdapter, (void*) params);
- chan = new TransceiverChannel(this, i);
+ params = (TrxChanThParams *)malloc(sizeof(struct TrxChanThParams));
+ params->trx = this;
+ params->num = i;
mTxPriorityQueueServiceLoopThreads[i] = new Thread(stackSize);
mTxPriorityQueueServiceLoopThreads[i]->start((void * (*)(void*))
- TxUpperLoopAdapter, (void*) chan);
+ TxUpperLoopAdapter, (void*) params);
}
mForceClockInterface = true;
@@ -1108,13 +1114,13 @@
}
-void *RxUpperLoopAdapter(TransceiverChannel *chan)
+void *RxUpperLoopAdapter(TrxChanThParams *params)
{
char thread_name[16];
- Transceiver *trx = chan->trx;
- size_t num = chan->num;
+ Transceiver *trx = params->trx;
+ size_t num = params->num;
- delete chan;
+ free(params);
snprintf(thread_name, 16, "RxUpper%zu", num);
set_selfthread_name(thread_name);
@@ -1154,13 +1160,13 @@
return NULL;
}
-void *ControlServiceLoopAdapter(TransceiverChannel *chan)
+void *ControlServiceLoopAdapter(TrxChanThParams *params)
{
char thread_name[16];
- Transceiver *trx = chan->trx;
- size_t num = chan->num;
+ Transceiver *trx = params->trx;
+ size_t num = params->num;
- delete chan;
+ free(params);
snprintf(thread_name, 16, "CtrlService%zu", num);
set_selfthread_name(thread_name);
@@ -1172,13 +1178,13 @@
return NULL;
}
-void *TxUpperLoopAdapter(TransceiverChannel *chan)
+void *TxUpperLoopAdapter(TrxChanThParams *params)
{
char thread_name[16];
- Transceiver *trx = chan->trx;
- size_t num = chan->num;
+ Transceiver *trx = params->trx;
+ size_t num = params->num;
- delete chan;
+ free(params);
snprintf(thread_name, 16, "TxUpper%zu", num);
set_selfthread_name(thread_name);
diff --git a/Transceiver52M/Transceiver.h b/Transceiver52M/Transceiver.h
index 8da52d1..18dc5f2 100644
--- a/Transceiver52M/Transceiver.h
+++ b/Transceiver52M/Transceiver.h
@@ -39,19 +39,9 @@
class Transceiver;
/** Channel descriptor for transceiver object and channel number pair */
-struct TransceiverChannel {
- TransceiverChannel(Transceiver *trx, int num)
- {
- this->trx = trx;
- this->num = num;
- }
-
- ~TransceiverChannel()
- {
- }
-
- Transceiver *trx;
- size_t num;
+struct TrxChanThParams {
+ Transceiver *trx;
+ size_t num;
};
/** Internal transceiver state variables */
@@ -248,15 +238,11 @@
*/
bool driveTxPriorityQueue(size_t chan);
- friend void *RxUpperLoopAdapter(TransceiverChannel *);
-
- friend void *TxUpperLoopAdapter(TransceiverChannel *);
-
- friend void *RxLowerLoopAdapter(Transceiver *);
-
- friend void *TxLowerLoopAdapter(Transceiver *);
-
- friend void *ControlServiceLoopAdapter(TransceiverChannel *);
+ friend void *RxUpperLoopAdapter(TrxChanThParams *params);
+ friend void *TxUpperLoopAdapter(TrxChanThParams *params);
+ friend void *RxLowerLoopAdapter(Transceiver *transceiver);
+ friend void *TxLowerLoopAdapter(Transceiver *transceiver);
+ friend void *ControlServiceLoopAdapter(TrxChanThParams *params);
void reset();
@@ -267,14 +253,14 @@
void logRxBurst(size_t chan, const struct trx_ul_burst_ind *bi);
};
-void *RxUpperLoopAdapter(TransceiverChannel *);
+void *RxUpperLoopAdapter(TrxChanThParams *params);
/** Main drive threads */
-void *RxLowerLoopAdapter(Transceiver *);
-void *TxLowerLoopAdapter(Transceiver *);
+void *RxLowerLoopAdapter(Transceiver *transceiver);
+void *TxLowerLoopAdapter(Transceiver *transceiver);
/** control message handler thread loop */
-void *ControlServiceLoopAdapter(TransceiverChannel *);
+void *ControlServiceLoopAdapter(TrxChanThParams *params);
/** transmit queueing thread loop */
-void *TxUpperLoopAdapter(TransceiverChannel *);
+void *TxUpperLoopAdapter(TrxChanThParams *params);