Improved RX activation mechanism in rtx driver

This commit is contained in:
Silvano Seva 2021-02-02 21:11:31 +01:00
parent 061c90cfb4
commit 6dfbd2419d
2 changed files with 31 additions and 27 deletions

View File

@ -26,13 +26,13 @@
#include <interfaces/gpio.h>
#include <hwconfig.h>
OS_MUTEX *cfgMutex; /* Mutex for incoming config messages */
OS_Q cfgMailbox; /* Queue for incoming config messages */
rtxStatus_t rtxStatus; /* RTX driver status */
bool sqlOpen; /* Flag for squlech open/close */
bool sqlOpen; /* Flag for squelch open/close */
bool enterRx; /* Flag for RX mode activation */
/*
* These functions below provide a basic API for audio path management. They
@ -127,6 +127,7 @@ void rtx_init(OS_MUTEX *m)
rtxStatus.txTone = 0;
sqlOpen = false;
enterRx = false;
/*
* Initialise low-level platform-specific driver
@ -225,19 +226,12 @@ void rtx_taskFunc()
radio_setVcoFrequency(rtxStatus.rxFrequency, false);
radio_enableRx();
}
/* TODO: temporarily force to RX mode if rtx is off. */
if(rtxStatus.opStatus == OFF) enterRx = true;
}
}
/* TODO: temporarily force to RX mode if rtx is off. */
if(rtxStatus.opStatus == OFF)
{
radio_disableRtx();
radio_setVcoFrequency(rtxStatus.rxFrequency, false);
radio_enableRx();
rtxStatus.opStatus = RX;
}
/* RX logic */
if(rtxStatus.opStatus == RX)
{
@ -259,6 +253,15 @@ void rtx_taskFunc()
sqlOpen = false;
}
}
else if((rtxStatus.opMode == OFF) && enterRx)
{
radio_disableRtx();
radio_setVcoFrequency(rtxStatus.rxFrequency, false);
radio_enableRx();
rtxStatus.opStatus = RX;
enterRx = false;
}
/* TX logic */
if(platform_getPttStatus() && (rtxStatus.opStatus != TX))
@ -278,6 +281,7 @@ void rtx_taskFunc()
radio_disableRtx();
rtxStatus.opStatus = OFF;
enterRx = true;
}
/* Led control logic */

View File

@ -314,6 +314,21 @@ void create_threads()
// State initialization, execute before starting all tasks
state_init();
// Create rtx radio thread
OSTaskCreate((OS_TCB *) &rtx_tcb,
(CPU_CHAR *) "RTX Task",
(OS_TASK_PTR ) rtx_task,
(void *) 0,
(OS_PRIO ) 5,
(CPU_STK *) &rtx_stk[0],
(CPU_STK ) 0,
(CPU_STK_SIZE) RTX_TASK_STKSIZE/sizeof(CPU_STK),
(OS_MSG_QTY ) 0,
(OS_TICK ) 0,
(void *) 0,
(OS_OPT ) (OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR *) &os_err);
// Create UI thread
OSTaskCreate((OS_TCB *) &ui_tcb,
(CPU_CHAR *) "UI Task",
@ -358,19 +373,4 @@ void create_threads()
(void *) 0,
(OS_OPT ) (OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR *) &os_err);
// Create rtx radio thread
OSTaskCreate((OS_TCB *) &rtx_tcb,
(CPU_CHAR *) "RTX Task",
(OS_TASK_PTR ) rtx_task,
(void *) 0,
(OS_PRIO ) 5,
(CPU_STK *) &rtx_stk[0],
(CPU_STK ) 0,
(CPU_STK_SIZE) RTX_TASK_STKSIZE/sizeof(CPU_STK),
(OS_MSG_QTY ) 0,
(OS_TICK ) 0,
(void *) 0,
(OS_OPT ) (OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR *) &os_err);
}