mirror of
https://github.com/opentx/opentx.git
synced 2025-07-17 21:35:27 +03:00
Add external modules handling for power and spektrum
This commit is contained in:
parent
c5793c93d5
commit
5fd70d7c8c
4 changed files with 74 additions and 28 deletions
|
@ -22,14 +22,10 @@
|
||||||
#include "opentx.h"
|
#include "opentx.h"
|
||||||
|
|
||||||
void pxx2ModuleRequiredScreen(event_t event);
|
void pxx2ModuleRequiredScreen(event_t event);
|
||||||
|
extern uint8_t g_moduleIdx;
|
||||||
|
|
||||||
void menuRadioPowerMeter(event_t event)
|
void menuRadioPowerMeter(event_t event)
|
||||||
{
|
{
|
||||||
if (!isModulePXX2(INTERNAL_MODULE)) {
|
|
||||||
pxx2ModuleRequiredScreen(event);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (TELEMETRY_STREAMING()) {
|
if (TELEMETRY_STREAMING()) {
|
||||||
lcdDrawCenteredText(LCD_H/2, "Turn off receiver");
|
lcdDrawCenteredText(LCD_H/2, "Turn off receiver");
|
||||||
return;
|
return;
|
||||||
|
@ -39,18 +35,21 @@ void menuRadioPowerMeter(event_t event)
|
||||||
|
|
||||||
if (menuEvent) {
|
if (menuEvent) {
|
||||||
pausePulses();
|
pausePulses();
|
||||||
moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_NORMAL;
|
moduleSettings[g_moduleIdx].mode = MODULE_MODE_NORMAL;
|
||||||
/* wait 500ms off */
|
/* wait 500ms off */
|
||||||
watchdogSuspend(500);
|
watchdogSuspend(500);
|
||||||
RTOS_WAIT_MS(500);
|
RTOS_WAIT_MS(500);
|
||||||
resumePulses();
|
resumePulses();
|
||||||
|
/* wait 500ms to resume normal operation before leaving */
|
||||||
|
watchdogSuspend(500);
|
||||||
|
RTOS_WAIT_MS(500);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (moduleSettings[INTERNAL_MODULE].mode != MODULE_MODE_POWER_METER) {
|
if (moduleSettings[g_moduleIdx].mode != MODULE_MODE_POWER_METER) {
|
||||||
memclear(&reusableBuffer.powerMeter, sizeof(reusableBuffer.powerMeter));
|
memclear(&reusableBuffer.powerMeter, sizeof(reusableBuffer.powerMeter));
|
||||||
reusableBuffer.powerMeter.freq = 2400;
|
reusableBuffer.powerMeter.freq = 2400;
|
||||||
moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_POWER_METER;
|
moduleSettings[g_moduleIdx].mode = MODULE_MODE_POWER_METER;
|
||||||
}
|
}
|
||||||
|
|
||||||
coord_t y = MENU_HEADER_HEIGHT + 1 + FH;
|
coord_t y = MENU_HEADER_HEIGHT + 1 + FH;
|
||||||
|
|
|
@ -21,14 +21,10 @@
|
||||||
#include "opentx.h"
|
#include "opentx.h"
|
||||||
|
|
||||||
extern void pxx2ModuleRequiredScreen(event_t event);
|
extern void pxx2ModuleRequiredScreen(event_t event);
|
||||||
|
extern uint8_t g_moduleIdx;
|
||||||
|
|
||||||
void menuRadioSpectrumAnalyser(event_t event)
|
void menuRadioSpectrumAnalyser(event_t event)
|
||||||
{
|
{
|
||||||
if (!isModulePXX2(INTERNAL_MODULE)) {
|
|
||||||
pxx2ModuleRequiredScreen(event);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (TELEMETRY_STREAMING()) {
|
if (TELEMETRY_STREAMING()) {
|
||||||
lcdDrawCenteredText(15, "Turn off receiver");
|
lcdDrawCenteredText(15, "Turn off receiver");
|
||||||
return;
|
return;
|
||||||
|
@ -38,17 +34,23 @@ void menuRadioSpectrumAnalyser(event_t event)
|
||||||
|
|
||||||
if (menuEvent) {
|
if (menuEvent) {
|
||||||
pausePulses();
|
pausePulses();
|
||||||
moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_NORMAL;
|
moduleSettings[g_moduleIdx].mode = MODULE_MODE_NORMAL;
|
||||||
/* wait 500ms off */
|
/* wait 500ms off */
|
||||||
watchdogSuspend(500);
|
watchdogSuspend(500);
|
||||||
RTOS_WAIT_MS(500);
|
RTOS_WAIT_MS(500);
|
||||||
resumePulses();
|
resumePulses();
|
||||||
|
/* wait 500ms to resume normal operation before leaving */
|
||||||
|
watchdogSuspend(500);
|
||||||
|
RTOS_WAIT_MS(500);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (moduleSettings[INTERNAL_MODULE].mode != MODULE_MODE_SPECTRUM_ANALYSER) {
|
if (moduleSettings[g_moduleIdx].mode != MODULE_MODE_SPECTRUM_ANALYSER) {
|
||||||
memclear(reusableBuffer.spectrumAnalyser.bars, sizeof(reusableBuffer.spectrumAnalyser.bars));
|
memclear(reusableBuffer.spectrumAnalyser.bars, sizeof(reusableBuffer.spectrumAnalyser.bars));
|
||||||
moduleSettings[INTERNAL_MODULE].mode = MODULE_MODE_SPECTRUM_ANALYSER;
|
reusableBuffer.spectrumAnalyser.span = 40000000; // 40MHz
|
||||||
|
reusableBuffer.spectrumAnalyser.freq = 2440000000; // 2440MHz
|
||||||
|
reusableBuffer.spectrumAnalyser.step = reusableBuffer.spectrumAnalyser.span / LCD_W;
|
||||||
|
moduleSettings[g_moduleIdx].mode = MODULE_MODE_SPECTRUM_ANALYSER;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t peak_y = 1;
|
uint8_t peak_y = 1;
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
|
|
||||||
#include "opentx.h"
|
#include "opentx.h"
|
||||||
|
|
||||||
|
extern uint8_t g_moduleIdx;
|
||||||
|
|
||||||
void pxx2ModuleRequiredScreen(event_t event)
|
void pxx2ModuleRequiredScreen(event_t event)
|
||||||
{
|
{
|
||||||
lcdClear();
|
lcdClear();
|
||||||
|
@ -33,7 +35,7 @@ void pxx2ModuleRequiredScreen(event_t event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void addRadioTool(uint8_t index, const char * label, void (* tool)(event_t event), event_t event)
|
void addRadioTool(uint8_t index, const char * label, void (* tool)(event_t event), uint8_t module, event_t event)
|
||||||
{
|
{
|
||||||
int8_t sub = menuVerticalPosition - HEADER_LINE;
|
int8_t sub = menuVerticalPosition - HEADER_LINE;
|
||||||
LcdFlags attr = (sub == index ? INVERS : 0);
|
LcdFlags attr = (sub == index ? INVERS : 0);
|
||||||
|
@ -42,16 +44,65 @@ void addRadioTool(uint8_t index, const char * label, void (* tool)(event_t event
|
||||||
lcdDrawText(3*FW, y, label, (sub == index ? INVERS : 0));
|
lcdDrawText(3*FW, y, label, (sub == index ? INVERS : 0));
|
||||||
if (attr && s_editMode > 0) {
|
if (attr && s_editMode > 0) {
|
||||||
s_editMode = 0;
|
s_editMode = 0;
|
||||||
|
g_moduleIdx = module;
|
||||||
pushMenu(tool);
|
pushMenu(tool);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void menuRadioTools(event_t event)
|
bool hasSpektrumAnalyserCapability(uint8_t module)
|
||||||
{
|
{
|
||||||
SIMPLE_MENU("TOOLS", menuTabGeneral, MENU_RADIO_TOOLS, HEADER_LINE + 2);
|
#if defined(SIMU)
|
||||||
|
return true;
|
||||||
#if defined(PXX2) && (defined(PCBXLITES) || defined(PCBX3))
|
#else
|
||||||
addRadioTool(0, "Spectrum Analyser", menuRadioSpectrumAnalyser, event);
|
return (reusableBuffer.hardwareAndSettings.modules[module].information.modelID == PXX2_MODULE_IXJT_S ||
|
||||||
addRadioTool(1, "Power Meter", menuRadioPowerMeter, event);
|
reusableBuffer.hardwareAndSettings.modules[module].information.modelID == PXX2_MODULE_IXJT_PRO ||
|
||||||
|
reusableBuffer.hardwareAndSettings.modules[module].information.modelID >= PXX2_MODULE_R9M_LITE_PRO);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool hasPowerMeterCapablity(uint8_t module)
|
||||||
|
{
|
||||||
|
#if defined(SIMU)
|
||||||
|
return true;
|
||||||
|
#else
|
||||||
|
return (reusableBuffer.hardwareAndSettings.modules[module].information.modelID == PXX2_MODULE_IXJT_PRO ||
|
||||||
|
reusableBuffer.hardwareAndSettings.modules[module].information.modelID == PXX2_MODULE_R9M_LITE_PRO);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void menuRadioTools(event_t event)
|
||||||
|
{
|
||||||
|
uint8_t spektrum_modules = 0, power_modules = 0;
|
||||||
|
|
||||||
|
if(event == EVT_ENTRY || event == EVT_ENTRY_UP) {
|
||||||
|
memclear(&reusableBuffer.hardwareAndSettings, sizeof(reusableBuffer.hardwareAndSettings));
|
||||||
|
for (uint8_t idx=0; idx < NUM_MODULES; idx++) {
|
||||||
|
if (isModulePXX2(idx) && (idx == INTERNAL_MODULE ? IS_INTERNAL_MODULE_ON() : IS_EXTERNAL_MODULE_ON())) {
|
||||||
|
reusableBuffer.hardwareAndSettings.modules[idx].current = PXX2_HW_INFO_TX_ID;
|
||||||
|
reusableBuffer.hardwareAndSettings.modules[idx].maximum = PXX2_HW_INFO_TX_ID;
|
||||||
|
moduleSettings[idx].mode = MODULE_MODE_GET_HARDWARE_INFO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (uint8_t idx=0; idx < NUM_MODULES; idx++) {
|
||||||
|
if(hasSpektrumAnalyserCapability(idx)) {
|
||||||
|
spektrum_modules++;
|
||||||
|
}
|
||||||
|
if(hasPowerMeterCapablity(idx)) {
|
||||||
|
power_modules++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SIMPLE_MENU("TOOLS", menuTabGeneral, MENU_RADIO_TOOLS, HEADER_LINE + spektrum_modules + power_modules);
|
||||||
|
|
||||||
|
uint8_t menu_index=0;
|
||||||
|
if(hasSpektrumAnalyserCapability(INTERNAL_MODULE))
|
||||||
|
addRadioTool(menu_index++, "Spectrum (INT)", menuRadioSpectrumAnalyser, INTERNAL_MODULE, event);
|
||||||
|
if(hasPowerMeterCapablity(INTERNAL_MODULE))
|
||||||
|
addRadioTool(menu_index++, "Power Meter (INT)", menuRadioPowerMeter, INTERNAL_MODULE, event);
|
||||||
|
if(hasSpektrumAnalyserCapability(EXTERNAL_MODULE))
|
||||||
|
addRadioTool(menu_index++, "Spectrum (EXT)", menuRadioSpectrumAnalyser, EXTERNAL_MODULE, event);
|
||||||
|
if(hasPowerMeterCapablity(EXTERNAL_MODULE))
|
||||||
|
addRadioTool(menu_index++, "Power Meter (EXT)", menuRadioPowerMeter, EXTERNAL_MODULE, event);
|
||||||
|
}
|
|
@ -256,14 +256,8 @@ void Pxx2Pulses::setupSpectrumAnalyser(uint8_t module)
|
||||||
|
|
||||||
addFrameType(PXX2_TYPE_C_POWER_METER, PXX2_TYPE_ID_SPECTRUM);
|
addFrameType(PXX2_TYPE_C_POWER_METER, PXX2_TYPE_ID_SPECTRUM);
|
||||||
Pxx2Transport::addByte(0x00);
|
Pxx2Transport::addByte(0x00);
|
||||||
|
|
||||||
reusableBuffer.spectrumAnalyser.freq = 2440000000; // 2440MHz
|
|
||||||
Pxx2Transport::addWord(reusableBuffer.spectrumAnalyser.freq);
|
Pxx2Transport::addWord(reusableBuffer.spectrumAnalyser.freq);
|
||||||
|
|
||||||
reusableBuffer.spectrumAnalyser.span = 40000000; // 40MHz
|
|
||||||
Pxx2Transport::addWord(reusableBuffer.spectrumAnalyser.span);
|
Pxx2Transport::addWord(reusableBuffer.spectrumAnalyser.span);
|
||||||
|
|
||||||
reusableBuffer.spectrumAnalyser.step = 100000; // 100KHz
|
|
||||||
Pxx2Transport::addWord(reusableBuffer.spectrumAnalyser.step);
|
Pxx2Transport::addWord(reusableBuffer.spectrumAnalyser.step);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue